2 ポイント 投稿者 GN⁺ 2024-03-07 | 1件のコメント | WhatsAppで共有
  • Under New Managementは、インストール済みブラウザ拡張機能の開発者情報がChrome Web StoreまたはFirefox Add-onsで変更されたかを定期的に確認する拡張機能
  • 開発者情報が変わると、拡張機能アイコンに赤いバッジを表示し、ユーザーが所有権の変更に気づけるようにする
  • 必要性は、拡張機能の開発者が買収提案を頻繁に受け取り、買収者が既存ユーザーを悪用しようとするケースがほとんどだという問題に端を発している
  • ユーザーは、インストール済み拡張機能の所有権が変わり、侵害されている可能性があることに気づかない場合があり、このツールは判断の機会を提供する
  • ブラウザは拡張機能マーケットプレイスのドメイン変更に制限を設けているため、開発者情報の確認はExBoost APIサーバーに委任される

拡張機能の所有権変更を検知

  • Under New Managementは、インストール済み拡張機能の開発者情報がChrome Web StoreまたはFirefox Add-onsストアで変更されたかを断続的に確認する
  • 変更があると拡張機能アイコンに赤いバッジが表示され、ユーザーが所有権の変更を認識できる
  • 目的は、ユーザーが自分の使っているソフトウェアについて情報に基づいた判断をする機会を与えること

なぜ必要なのか

  • 拡張機能の開発者は、自分の拡張機能を買いたいという提案を継続的に受け取っている
  • READMEでは、ほぼすべての場合において購入者には既存ユーザーをだます目的があると述べている
  • ユーザーは、インストール済み拡張機能の所有権が変わり、現在は侵害されている可能性があることに気づかない場合がある

インストール方法

  • Chromeへのインストール: Chrome Web Store
  • Firefoxへのインストール: Firefox Add-ons
  • またはprebuilt releaseをダウンロードし、.zipファイルを展開してdistディレクトリをブラウザに読み込ませることもできる

ソースからビルド

  • Under New ManagementはPlasmoを使用している
  • pnpm install: 依存関係をインストール
  • pnpm dev: ローカル実行
  • pnpm build --zip: リリースビルド
  • pnpm build --target=firefox-mv3: Firefox向けビルド

外部サーバーが必要な理由

  • ブラウザは拡張機能マーケットプレイスのドメインを変更することに特別なルールを設けている
  • たとえば、chromewebstore.google.comに対してdeclarative_net_requestルールを設定することはできない
  • そのため、開発者情報の確認作業はExBoost APIサーバーに委任される

1件のコメント

 
GN⁺ 2024-03-07
Hacker News のコメント
  • 拡張機能 ID は、開発者がアプリストアに最初に公開するときに一緒にアップロードした秘密鍵から派生し、その後アップロードする ZIP に別の key.pem が入っていると ID が変わる
    ただし key.pem がなければ拡張機能 ID はそのまま維持される。そのため ID が変わった場合、所有者が変わった可能性はあるが、元の所有者が秘密鍵を新しい所有者に渡した可能性もある。Google はアップロードのたびに秘密鍵を要求しないため、新しい所有者はその鍵がなくても変更を配布できる
    拡張機能エコシステムは興味深いので、この分野のツールも作っている。特定の拡張機能を対象に GitHub リポジトリを作り、更新ごとにリポジトリの変更として記録したうえで、静的解析器と、evalpostMessage のような危険なシンクへユーザー入力が流れ込むかを追跡するランタイム汚染解析を走らせてみたい: https://github.com/milesrichardson/crxmon

    • 以前、Opera 用の拡張機能を一つ作ったところ、トップページに載って人気が出て、誰かがかなり大きな金額で買いたいと言ってきた
      交渉中に、拡張機能は取り下げてソースコードをすべて渡し、自分で配布してもらうつもりだと言ったら、相手は Opera 拡張機能アカウントの認証情報まで渡すことを期待していた。結局取引はやめた。こうしたツールもある程度は有用だが、拡張機能向けのマルウェアスキャナーのほうがより良い、という点には同意する
    • これは公開鍵基盤(PKI)の動作方式とは違う。Chrome 拡張機能で本当に秘密鍵を PEM ファイルとしてアップロードする仕組みになっているのか疑問だ
      開発者は秘密鍵で拡張機能やマニフェストに署名し、公開鍵を共有するかアップロードに含めるべきだ。更新も引き続き同じ秘密鍵で署名する必要があり、鍵が変わらない限り、初回アップロードの公開鍵によって同じ秘密鍵が使われたことを検証できる。その後のアップロードに公開鍵が含まれるかどうかは本質的ではない。秘密鍵を売ったり共有したりすれば、他人でも正当に署名された更新を作れるが、これは署名者が秘密鍵を秘密に保たないことから生じるリスクだ。Google であれ誰であれ、秘密鍵を共有すれば拡張機能の出所保証は崩れる
    • 拡張機能 ID が変わるなら、新しいバージョンを明示的にインストールする必要があり、自動更新はされないはずだ
      ただ、Google が秘密鍵なしでも新しい所有者に変更の配布を許可するというのが本当に可能なのかは疑問だ。Chrome Web Store は些細なことにも非常に厳しいのに、そういう部分は気にしないというのはおかしい
      テスター向けにだけ公開している拡張機能を 3 つ使っており、複数のマシンに簡単にインストールするため、開発者モードや rsync/robocopy なしで使っている。ところがこの週末、Chrome がある 1 台のマシンでだけ、「Chrome Web Store に登録されておらず、ユーザーに知られず追加された可能性がある」という理由で全部無効化した。強制的に有効にすることもできず、ストアでは「無効」として「今すぐ有効にする」が表示されるが、バナーが消えるだけで、再読み込みするとまた現れる。その Chrome プロファイルは許可リストのアカウントでログインしている
      Chrome Web Store ページのバッジは、開発者である自分のアカウントに制裁はなく、状態は良好だと表示している。許可リストのメールアドレスでログインしていなければ、そのページ自体も見られなかったはずだ。これほど「細かく気にする」一方で、鍵なしの更新は許可するというのは納得できない
    • 説明されている方法は可能ではあるが、拡張機能 ID が生成される必須の方法でも一般的な方法でもない。通常、開発者は初回提出時に ZIP ファイルだけをアップロードし、Chrome Web Store が公開配布用の署名に使う秘密鍵を生成して保存する
      CWS は既存の拡張機能の ID を絶対に変えてはならない。ID が拡張機能を一意に識別するものだからだ。ID が変わると Chrome クライアントはその拡張機能の更新を要求できず、CWS と Chrome はユーザーをある拡張機能から別の拡張機能へ移行する機能をサポートしていない
      私の知る限り、CWS は初回提出後の ZIP に key.pem が入っていれば拒否するはずだ。拡張機能 ID が変わったなら、それは同じ拡張機能ではない。新しい所有者が PEM なしでも変更を配布できるというのはおおむね正しいが、開発者が CWS に提出した拡張機能を自分で署名していた場合は、PEM なしでは更新できない。正直、今でも可能な機能なのかは分からないし、昔は開発者が自分のアップロードに使った秘密鍵を失ってインストール基盤を吹き飛ばす巨大な落とし穴だった
    • 誰かが邪悪な意図で拡張機能を買うなら、秘密鍵も欲しがるだろう
      ほぼ全員が、価格さえ合えば結局は同意するだろうし、個人差はどれだけもらえばよいかだけだ
  • 数か月前、YouTube広告を高速にスキップする無料のオープンソース拡張機能を作ってここで共有し、トップページに載った。
    1週間もしないうちに、私のShow HN投稿にコメントしていた人がそれをコピーし、Redditで自分のバージョンを宣伝したところ、バイラルになってユーザーが30万人を超えた: https://github.com/rkk3/ad-accelerator/blob/main/lessons_pos...
    なぜ無料のオープンソース拡張機能にPRを送らずコピーしたのかと思っていたが、数週間後には複数のサイトで5桁の金額で売ろうとしていた。まだ所有している可能性もあるが、Chrome Storeに登録されている開発者も最初の公開時とは変わっているのが目についた。

    • もう一方の話も見ると、文脈は少し変わる: https://news.ycombinator.com/item?id=38463233
      背景をすべて理解したわけではないが、その拡張機能は実質的には50行ほどの些細なJavaScriptだ。誰かが盗んだと言うにはかなり大胆だ。アイデア自体に価値はなく、このアイデアが非常に新しいと主張するのも難しい。相手が着想を得たと仮定しても、誰が先に何をしたのかという時系列はそれほど明確ではない。
    • 「次はもっと積極的に宣伝する」と言っていたが、今回もできるのではないかと思う。拡張機能はまだ存在しているので、今でも宣伝は可能だ。
      ただし、YouTubeとChromeがどれだけ長く動作を許すかはまた別の問題で、彼らも快く思わないかもしれない。
    • 良い結果に終わることを願うが、そうでなければJeff Tweedyの態度が役に立つかもしれない。
      「…世界中が君の歌を歌い / 君の絵がすべて飾られたなら / 君のものだったものは今やみんなのものだと覚えておいて / それが正しいとか間違っているとかではないけれど / いくらでもそこにしがみつくことはできる / ただ君だけが落ち着かなくなるだけ…」— Wilcoの「What Light」
    • HNユーザーのハンドル名をテキストでは絶対に書かず、画像にだけ入れている理由が気になる。このコメントやブログ記事で、コピーしたユーザーの名前を明確に述べたときに、どのような脅威モデルを想定しているのか分からない。
    • それは「zuckered」されたと呼ぶようなことだと思う。
  • 本当に有用だが、他の人も言っているように、これはブラウザの組み込み機能であるべきだ。
    まだソースコードを深く見てはいないが、所有権の変更があった場合に自動で知らせてくれるのか気になる。リアルタイムである必要はないが、起動時には知らせてくれるのか、それとも手動で確認コマンドを実行する必要があるのか気になる。
    数か月前にもこの話題が注目された: https://news.ycombinator.com/item?id=36233068
    当時の上位コメントのように、FirefoxとChromeはこうした状況での自動拡張機能アップグレード方針を変えた方がよい。拡張機能が所有権変更を公開した場合はアップグレードにユーザー承認を求め、公開しない場合はユーザーが悪意あるものとして通報できるべきだ。加えて、タイトルにはおそらく「Show HN」が付くべきだと思う。

    • 作った本人です。チェックは毎時自動実行され、変更が検出されると拡張機能アイコン上にバッジが表示される。
      それ以上に強い通知は侵襲的すぎると判断した。
    • 会社の所有権変更を理由に、ユーザーがアップグレードを明示的に承認しなければならないスピードバンプを入れると、かなりの割合のユーザーが離脱するだろう。
      これは売却時に製品や会社の価値を下げる。ユーザーには優しいが、請求書を払わなければならない制作者には優しくない。
  • これは笑い事ではない。
    かなり人気のあるオープンソースのChrome拡張機能を数年間所有していたが、寄付総額は月のコーヒー代にも満たなかった。
    ところが、明らかに悪意ある目的、場合によっては露骨にそう明言するものまで含め、拡張機能を売ってほしいという提案は回数も多く、金額もとんでもなかった。すべて断ったが、このような状況で元の開発者の道徳性だけが唯一のセキュリティ・プライバシー体制になることを期待するのは、まともな判断ではない。

    • 本当に悪意ある側は、記事のツールでは検出されないだろう。彼らは拡張機能の所有権とコードだけでなく、開発者アカウントの譲渡まで要求するからだ。
  • 目的にはかなり共感するし、技術的な限界も理解できるが、ユーザーのすべての拡張機能一覧を拡張機能中心の広告ネットワークに送るという点は少し怪しい
    外部サーバーが必要な理由として、ブラウザが chromewebstore.google.com のような拡張機能マーケットのドメイン変更に特殊なルールを設けているため、開発者情報の確認を ExBoost API サーバーに委ねている、とされている
    https://www.extensionboost.com/
    ExBoost は、より多くのユーザーとレビューを求めるブラウザ拡張機能の協業ネットワークだと説明している。拡張機能の UI 内に ExBoost スロットを入れ、類似拡張機能の宣伝やレビュー依頼を表示する方式だ

    • よく見つけたね。少し掘ってみたところ、現時点ではブラウザに紐づくメタデータは送っておらず、カンマ区切りの拡張機能 ID 一覧だけを送っている。もちろん IP は簡単に利用されうる
      インストールしてある拡張機能の API 結果を見ると、開発者関連のメタデータが出てくる。chrome.management.get(id) Chrome API を試してみたが、この情報は返さなかったし、manifest.json の内容をプログラムから取得する方法もなさそうだ。したがって、現状この拡張機能がやろうとしていることを実現するには、外部ソースが必要ではある
      https://github.com/classvsoftware/under-new-management/blob/...
      https://api.extensionboost.com/v1/developer?extension_ids=gh...
    • ExBoost も元記事の作者のプロジェクトのように見える。善意に解釈すれば、拡張機能 ID を渡すと所有者のようなメタデータを収集するのに必要なデータがすでにあるので、その API サーバーを使ったのだろう
    • 面白半分で小さな拡張機能をいくつか作ったことがあるが、数週間前に ExBoost から「Collaboration To Grow Our Extensions」という件名のメールを受け取った
      彼らのコードを自分の拡張機能に入れてほしいという内容で、「あなたが私のものを表示すれば、私もあなたのものを表示する。費用は 0、全員が得をする」と言っていた。怪しく見えたのでスパム扱いにしたし、詐欺師たちから受け取っていた他のスパムメールと違って見えなかった
    • この種のプロジェクトでは予想外のつながりだ。驚いた
    • なぜ外部サービスに接続しなければならないのか分からない。所有者が変わると拡張機能 ID も変わると思っていたので、ローカルで ID を追跡して、新しい ID が現れたら表示すればよいのでは、と思う。何か誤解しているのかもしれない
  • Firefox 拡張機能には Mozilla の推奨拡張機能プログラムがあり、含まれる前に職員のセキュリティ専門家による厳格な技術レビューを受けるとされている: https://support.mozilla.org/en-US/kb/recommended-extensions-...
    ただし、サポート文書だけでは、すべてのアップデートが公開前にレビューされるのかは明確ではない。毎回レビューするなら人気の拡張機能についてはこの問題をある程度解決するだろうが、緊急のセキュリティ更新が必要なときにどの程度遅延が生じるのかも気になる

    • すべてのアップデートをレビューしている。uBlock Origin のような非常に人気のある拡張機能も、ときどき止められている
      現在の個人的な方針としては、そうしたキュレーション済み拡張機能だけを、すべてのサイトとタブで実行できるようにしている
    • ルールがあり、それが執行もされる、多少面倒な「マーケットプレイス」があるとよい、という話のように聞こえる
      どれほど人気があったり、よく知られた組織であったりしても、規則を繰り返し破ったりマーケットプレイスの機能を迂回しようとしたりするなら、禁止され得る仕組みのことだ
  • 本当に悪意がある場合には、拡張機能が譲渡される際に Google 開発者アカウントの認証情報そのものを売ることが多いので、そういうケースは検出できない

    • そもそも開発者アカウント全体を売ることは許可されているのか?
  • ずっと昔に adblock をインストールして、とても気に入っていた
    新しいマシンを買って再インストールする必要があり、そのとき初めて権限を見たのだが、正気を失いそうなほどだった。広告をブロックするには、私が見ているものを見られなければならない、というのは論理的には正しいが、それを真剣に考えたことはなかった
    今は Pi-hole を使っていて、拡張機能は一つも使っていない

    • Pi-hole は uBlock Origin ほど広告やトラッカーを効果的にはブロックできない
      それでも望む人に選択肢があるのは良いことだし、人によってリスクプロファイルや懸念は異なる
    • Manifest V3 で入る権限変更の理由の一つは、そもそも拡張機能がアクセスできる範囲を狭めることだ
      ある拡張機能はオープンソースで信頼できるが、そうでないものも多く、人々は検証に苦労しているようだ
    • Safari には、コンテンツブロッカーが何の権限もなしに動作できる特殊なインターフェースがある
      ブロックリストを提供すると、ブラウザが直接ブロックする。Firefox でも可能なのかは分からない: https://developer.apple.com/documentation/safariservices/cre...
    • ここで言っている adblock 拡張機能がどれなのか気になる。たとえば uBlock はローカルのブロックリストを使う
    • モバイルではどうしている?
  • 悪性拡張機能の購入者なら、これを避けるために開発者名をそのまま維持すればよいのではないかと思う。あるいは Chrome Extension Store は開発者名を厳格に管理しているのだろうか?

    • 不誠実な拡張機能作者が非公式にパスワードを渡し、「あっ、ハッキングされました」という形で怪しい購入者に逃げ道を与えるのを、実質的に防ぐのは難しい
      たとえば悪意ある国家主体が uBlock の作者に数千万ドルを提示し、多くのブラウザへのアクセス権を得ようとする可能性がある。経済性がどうなのかは分からないが、もっとニッチな拡張機能ならはるかに安く狙えるだろう
    • おそらく Chrome Web Store 利用規約違反である可能性が高い
  • この問題が他のブラウザよりも Chrome で深刻なのか気になります
    私が使っている唯一のブラウザ拡張機能は、試験監督ソフトウェアの HonorLock で、必須なので使わざるを得ません。拡張機能が Chrome 専用なので、HonorLock のために時々 Chrome を使います。Safari でインストールリンクを開くと、Chrome をインストールするよう表示されます: https://app.honorlock.com/install/extension
    Chrome 拡張機能にだけ HonorLock のユースケースを可能にしつつ、この記事のツールをより有用にするような特性があるのか気になります

    • Chrome が最も人気のあるブラウザなので、選ばれた拡張機能の攻撃ベクターにすぎません
    • HonorLock だけを使っているなんて、AdBlock なしでどうやって生きているのかわかりません