はじめに
以下は、Elastic 公式ブログ(原文はこちら)の抄訳(日本語訳)です。
オリジナル著者: Aaron Jewitt
公開日: 2025年2月6日
ご利用の端末(ワークステーション)に特定のブラウザ拡張機能がインストールされたことがあるかを、CISO から問われたとき、どれほど素早く正確な答えを導けるでしょうか。悪意あるブラウザ拡張機能は、多くの組織が管理や検知の仕組みを持っておらず、大きな脅威となっています。本記事では、Elastic Infosec チームが osquery と Elastic Stack を活用して、リアルタイムにブラウザ拡張機能のインベントリを収集・管理し、既知の危険なブラウザ拡張が検知された際にアラートを出す仕組みをどのように実装しているかをご紹介します。ここで紹介するソリューションは、すべて osquery、Elastic Defend のインテグレーションおよび Elastic Stack の SIEM 機能のみで構築されています。
ブラウザ拡張機能を狙う攻撃者
昨今、脅威アクター(攻撃者)はブラウザ拡張機能を標的とし、情報を窃取したり、ユーザを侵害したりする攻撃手段に注目している例が増えています。中には正規の拡張機能の開発者自体を狙ってマルウェアコードを仕込むケースもあり、Secure Annex や Cybernews などでレポートされています。
ブラウザ拡張機能は、十分な権限を持てば、ユーザが閲覧するあらゆるサイトの内容を変更したり、機密情報(ユーザ名、パスワード、銀行口座情報など)を取得したりできます。Web サイトの保存トークンにアクセスし盗み出すことも可能です。さらに、リンク先を書き換えるなどしてマルウェアをダウンロードさせるよう誘導するなど、被害は多岐にわたります。
企業が直面する課題
企業がブラウザ拡張機能を管理するのは非常に複雑です。なぜなら:
- ブラウザ拡張機能はブラウザのプロファイル単位でインストールされる
- 1つのワークステーション上で、ユーザアカウントごとに複数のブラウザプロファイル(仕事用・個人用など)が存在することがある
- 実際に 1ユーザが 1台の端末上で 5つ以上のプロファイルを使っているケースも珍しくない
企業プロファイルを管理する「管理ブラウザ」機能などを使えば、許可リスト(allow)またはブロックリスト(block)を設定することも可能ですが、これでは個人用プロファイルでのインストールまでは管理しきれません。もしユーザが個人用プロファイルで会社のシステムにアクセスしていたり、あるいは悪意ある拡張機能がリンク先をマルウェアに書き換えるなどした場合、企業にとって大きなリスクとなります。
Kibana 上での osquery のデプロイと管理
osquery は、ほぼすべての最新オペレーティングシステム上で動作するオープンソースのエージェントです。OS をリレーショナルデータベースのように扱い、テーブルに対してクエリを投げることで、システムの状態を取得できます。例えば、osquery のスキーマには 200 以上のテーブルがあり、実行中のプロセス、インストール済みのブラウザ拡張機能、Python ライブラリ、起動中の Docker コンテナ、読み込まれているカーネルモジュール、オープン中のネットワーク接続、接続された USB デバイスなどさまざまな情報を得ることができます。
Elastic では、自社の全ワークステーションに XDR 機能 の一環として Elastic Agent を導入し、分散型の保護とレスポンスを行っています。Elastic Security の強みの一つは、Osquery Manager インテグレーションを使って、Kibana 上から簡単に osquery をデプロイ・管理できる点です。osquery インテグレーションは Basic ライセンスに含まれており、追加費用が発生しません。
osquery を Elastic と一緒に使うメリット
Elastic Defend や他の EDR (Endpoint Detection and Response) エージェントは、ワークステーションのプロセス、ネットワーク、ファイルのリアルタイムの監査ログをストリーミングできます。しかし、OS の状態そのもの(例えばインストール済みのブラウザ拡張機能など)までは通常の監査ログでは把握しきれません。ここで osquery が役立ち、ワークステーションのスナップショットを取得して、どのユーザがどの Chrome 拡張機能を持っているかを把握できます。
Kibana 上で数回クリックするだけで osquery をワークステーションにデプロイし、クエリを管理・閲覧できます。追加のインフラは不要です。また、Elastic と一緒に osquery を使うことで、すべてのクエリ結果が即座に Elasticsearch のインデックスに取り込まれるため、様々なユースケースで活用できます。さらに、履歴としていつでも確認できるので、システムのハードウェア・ソフトウェアの変更点を時系列で追跡することも容易です。
osquery を Elastic で使う詳細については、osquery のドキュメントガイドを参照してください。
Elastic での osquery 活用方法
osquery でクエリを実行する方法は大きく 2種類あります。
- その場で任意のホストに対して実行する Live query
- 複数のクエリを定期実行する Query pack (osquery では「パック」と呼ぶ)
Live query
Live query は、単一のクエリを 1台以上のホストに対して実行する仕組みです。テストや調査でクエリを調整するとき、あるいはインシデント対応時に特定の指標を探す場合などに便利です。Elastic で Live query を実行する際は、個別のホスト、ポリシー単位、OS ごとなど柔軟に指定可能です。エージェントがオフラインの場合、最大 60 分間はクエリがキューに残り、オンラインになれば自動で実行されます。Elastic 版の osquery には saved queries という機能があり、複雑なクエリを保存してチームメンバーと共有しやすくなっています。
Query pack
Query pack は複数のあらかじめ設定されたクエリをまとめ、スケジュール実行する仕組みです。各クエリごとに対応する OS プラットフォームを指定できるので、1つのパックで複数 OS に対応可能です。また、パックは .json ファイルとしてエクスポート・インポートができるため、既存のパックを簡単に導入できます。osquery が公式に用意しているサンプルパックもあり、Elastic チームが使用している browser_monitoring パックなどを試すこともできます。
osquery で拡張機能のインベントリを作る
Elastic Infosec チームでは、browser_monitoring パックを全ワークステーションに導入し、6時間おきにブラウザ拡張機能のインベントリを収集しています。Elastic はグローバルに展開しているため、ユーザの活動時間帯を一律に絞り込むことが難しく、6時間ごとという設定になっています。
複数のユーザプロファイルが存在するという複雑さを考慮すると、ブラウザ拡張機能を収集するには JOIN を用いたクエリが必要です。以下の例では、users テーブルと chrome_extensions テーブルの共通フィールドである uid を使って結合します。
SELECT * FROM users JOIN chrome_extensions USING (uid)
パックのクエリ結果は osquery の UI 上でも確認でき、各クエリ結果を Kibana の Discover や Lens で直接開くリンクも表示されます。
すべてのクエリ結果は logs-osquery_manager.result* というインデックスパターンに格納されます。スケジュールパックのクエリ結果は action.id フィールドで判別可能です。パック実行時の action.id は pack_{pack名}_{query名} という形式になります。ここでは pack_browser-monitoring_chrome_extensions を使っているので、Discover などで action_id: "pack_browser-monitoring_chrome_extensions" と検索すれば結果を絞り込めます。
Discover で結果を見てみると、osquery スキーマの chrome_extensions テーブル に対応する各フィールドは osquery.* という名前でインデックスされています。Chrome 拡張機能の情報を調査する際によく使うのは osquery.identifier, osquery.name, osquery.permissions, osquery.profile, osquery.version などです。
以下は chrome_extensions から取得できる主なフィールドの説明です。
-
osquery.identifier
拡張機能の一意な ID。これをもとに Chrome Web Store 上で検索したり、Secure Annex や crxaminer.tech などのサービスを使って評判を調べたりできます。 -
osquery.name
拡張機能の名称。Chrome Web Store やブラウザ上で表示される名前と同じです。 -
osquery.profile
インストール先の Chrome プロファイル。単一のユーザアカウント内でも複数の Chrome プロファイルを持つケースは珍しくありません。 -
osquery.permissions
その拡張機能に付与されている権限。特にhttps://*/*のように、あらゆる HTTPS サイトを閲覧・変更できる権限がある場合は注意が必要です。 -
osquery.version
インストールされている拡張機能のバージョン。特定のバージョンだけが侵害されている場合などに重要となります。 -
osquery.update_url
拡張機能の更新チェックに使用される URL。通常はhttps://clients2.google.com/service/update2/crxですが、これ以外の値なら「サイドロード(公式ストア以外からインストール)」されている可能性があり、要調査となるでしょう。
また、chrome_extension_content_scripts テーブル も重要です。このテーブルには拡張機能が使用する JavaScript ファイルの情報が含まれます。もし拡張機能に不審な点があった場合は、osquery.path, osquery.match, osquery.script フィールドから拡張機能が読み込むスクリプトのパスを特定し、Elastic Defend のレスポンスアクション でファイルをダウンロードしてオフライン解析する、といった調査が可能です。
悪意ある拡張機能を検知するルール作成
これでブラウザ拡張機能のインベントリをリアルタイムで取得できるようになったので、次は検知ルールを構築してみましょう。最も分かりやすいのは「既知の悪意ある拡張機能を見つけたらアラートを上げる」ルールです。脅威インテリジェンスや IOC 情報から拡張機能 ID やバージョンを取得し、それと突き合わせるイメージです。
ここでは例として、最近レポートされた Cyberhaven 拡張機能のコンプロマイズ に関する脅威インテリジェンスを使います。レポート末尾にあるリンクから、IOC として複数の拡張機能の名前、ID、バージョンが確認できます。以下はその一部を抜粋した表です。
| Name | ID | Version |
|---|---|---|
| VPNCity | nnpnnpemnckcfdebeekibpiijlicmpom | 2.0.1 |
| Parrot Talks | kkodiihpgodmdankclfibbiphjkfdenh | 1.16.2 |
| Uvoice | oaikpkmjciadfpddlpjjdapglcihgdle | 1.0.12 |
| Internxt VPN | dpggmcodlahmljkhlmpgpdcffdaoccni | 1.1.1 |
| Bookmark Favicon Changer | acmfnomgphggonodopogfbmkneepfgnh | 4.00 |
| Castorus | mnhffkhmpnefgklngfmlndmkimimbphc | 4.40 |
| Wayin AI | cedgndijpacnfbdggppddacngjfdkaca | 0.0.11 |
| Search Copilot AI Assistant for Chrome | bbdnohkpnbkdkmnkddobeafboooinpla | 1.0.1 |
| VidHelper - Video Downloader | egmennebgadmncfjafcemlecimkepcle | 2.2.7 |
| AI Assistant - ChatGPT and Gemini for Chrome | bibjgkidgpfbblifamdlkdlhgihmfohh | 0.1.3 |
| TinaMind - The GPT-4o-powered AI Assistant! | befflofjcniongenjmbkgkoljhgliihe | 2.13.0 |
| Bard AI chat | pkgciiiancapdlpcbppfkmeaieppikkk | 1.3.7 |
| Reader Mode | llimhhconnjiflfimocjggfjdlmlhblm | 1.5.7 |
| Primus (prev. PADO) | oeiomhmbaapihbilkfkhmlajkeegnjhe | 3.18.0 |
| Tackker - online keylogger tool | ekpkdmohpdnebfedjjfklhpefgpgaaji | 1.3 |
| AI Shop Buddy | epikoohpebngmakjinphfiagogjcnddm | 2.7.3 |
| Sort by Oldest | miglaibdlgminlepgeifekifakochlka | 1.4.5 |
| Rewards Search Automator | eanofdhdfbcalhflpbdipkjjkoimeeod | 1.4.9 |
| Earny - Up to 20% Cash Back | ogbhbgkiojdollpjbhbamafmedkeockb | 1.8.1 |
| ChatGPT Assistant - Smart Search | bgejafhieobnfpjlpcjjggoboebonfcg | 1.1.1 |
| Keyboard History Recorder | igbodamhgjohafcenbcljfegbipdfjpk | 2.3 |
| Email Hunter | mbindhfolmpijhodmgkloeeppmkhpmhc | 1.44 |
| Visual Effects for Google Meet | hodiladlefdpcbemnbbcpclbmknkiaem | 3.1.3 |
| Cyberhaven security extension V3 | pajkjnmeojmbapicmbpliphjmcekeaac | 24.10.4 |
| GraphQL Network Inspector | ndlbedplllcgconngcnfmkadhokfaaln | 2.22.6 |
| GPT 4 Summary with OpenAI | epdjhgbipjpbbhoccdeipghoihibnfja | 1.4 |
| Vidnoz Flex - Video recorder & Video share | cplhlgabfijoiabgkigdafklbhhdkahj | 1.0.161 |
| YesCaptcha assistant | jiofmdifioeejeilfkpegipdjiopiekl | 1.1.61 |
| Proxy SwitchyOmega (V3) | hihblcmlaaademjlakdpicchbjnnnkbo | 3.0.2 |
| ChatGPT App | lbneaaedflankmgmfbmaplggbmjjmbae | 1.3.8 |
| Web Mirror | eaijffijbobmnonfhilihbejadplhddo | 2.4 |
| Hi AI | hmiaoahjllhfgebflooeeefeiafpkfde | 1.0.0 |
これらの値をもとに検知ルールを作る方法は大きく 2つあります。
-
シンプルな Elasticsearch クエリでチェック
すでにある IOC リストを使って、osquery.identifierとosquery.versionを OR でつないだクエリを書き、action_id: pack_browser-monitoring_chrome_extensionsの結果に対してフィルタをかけるだけでも十分に検知可能です。例として以下のようなクエリが挙げられます:action_id: pack_browser-monitoring_chrome_extensions AND ( (osquery.identifier: "nnpnnpemnckcfdebeekibpiijlicmpom" AND osquery.version: "2.0.1") OR (osquery.identifier: "kkodiihpgodmdankclfibbiphjkfdenh" AND osquery.version: "1.16.2") OR (osquery.identifier: "oaikpkmjciadfpddlpjjdapglcihgdle" AND osquery.version: "1.0.12") ... ) -
Threat Intel フィードを活用して Indicator Match ルールを作成
脅威インテリジェンスのインテグレーションを使い、IOC を自動的に Elasticsearch に取り込んでいる場合は、Indicator Match ルールという検知ルールタイプを使えば、拡張機能 ID やバージョンを脅威フィードと照合してアラートを出すことができます。これならインテリジェンスフィードが更新されるたびにルールを手動更新する手間が省け、リアルタイムに最新の IOC をもとに検知が可能です。
下図は Indicator Match ルールの設定例です(使用している TI プラットフォームによりフィールド名は異なる場合があります)。
実際に試してみよう
脅威アクターは今後もブラウザ拡張機能を活用して情報を盗み、システムを攻撃してくる可能性が高いです。ワークステーションにどんな拡張機能がインストールされているか把握していない場合、この攻撃手法に対して脆弱になります。osquery と Elastic を組み合わせれば、追加ライセンス費用なしで拡張機能の可視化と検知を実装し、組織全体のリスクを低減することが可能です。
ブラウザ拡張機能が実際の攻撃でどのように使われうるかの例としては、Beyond the wail: deconstructing the BANSHEE infostealer(Elastic Security Labs の投稿)も参考になります。
本記事で触れられた機能やリリースタイミングは、Elastic 社の単独裁量により変更される場合があります。現在未提供の機能やリリース予定については、予定どおりに提供されない可能性やリリース自体が中止される可能性があります。
以上が「悪意あるブラウザ拡張機能を Elastic で検知する方法」のご紹介でした。ご参考になれば幸いです。



