出典: Mohd Izzuan Roslan(Alamy Stock Photoより)
今週、1,000人以上の開発者がマルウェアに感染し、約20,000件の機密ファイルがパブリックWeb上に流出しました。これは、非常に効果的かつ迅速、さらにAI支援によるソフトウェアサプライチェーンの侵害によるものです。
通常、サイバー攻撃者が被害者から秘密情報を盗む際は、慎重かつ時間をかけて行います。ターゲットのシステムを入念に調査し、複数段階のマルウェアを仕込み、検知されないようにしながらデータを自分たちのサーバーへゆっくりとダウンロードします。
しかし、npmを襲った8月26日夜の攻撃は、開始から終了までわずか4時間強で実行されました。この短い時間の中で、正体不明の攻撃者は1,000人以上のJavaScript開発者を標的にし、GitHubトークン、npmトークン、SSHキー、アプリケーションの秘密情報、暗号通貨ウォレットファイルを盗み出しました。攻撃者は、広く利用されているビルドシステム「Nx」を感染させ、さらにAI搭載の情報収集機能を持つサプライチェーンマルウェアを仕込むことでこれを実現しました。
サプライチェーン侵害とAI CLIの悪用
Nxチームは、攻撃者が自分たちのnpmトークンの1つを入手し、それを使って新しいバージョンのパッケージをオンラインに公開した可能性が高いと評価しています。攻撃は8月26日午後10時32分(UTC)に行われました。さらに、感染した7つのNxプラグインもアップロードされました。その7分後から8月27日午前0時37分(UTC)までに、さらに7つの悪意あるアップロードが続きました。
これらの悪意あるパッケージをインストールした開発者は、「telemetry.js」というスクリプトに感染しました。このスクリプトは、貴重な開発者の秘密情報やmacOSやLinuxベースのシステムから暗号通貨ウォレットを盗むために設計されています。最も機密性の高いファイルを見つけるため、マルウェアは単に特定のファイル拡張子やディレクトリをスキャンするのではなく、最新のAI機能を独自に活用しました。
今日、多くの主流LLMプラットフォームは、アプリ内体験に加えて、AIの力をユーザーのターミナル環境に直接もたらすコマンドラインインターフェース(CLI)ツールを提供しています。これらは急速に普及している兆候があります。例えばAnthropicのClaude Codeは、2025年2月末にリリースされたばかりにもかかわらず、7月には115,000人以上のユーザーを突破しました。
CLIツールは、複数のサイバーセキュリティベンダーやサイバーセキュリティベンダーによって発見されたNx npmサプライチェーン攻撃で重要な役割を果たしました。telemetry.jsが被害者のシステムでこれらを見つけると、Claude Code、Gemini、Amazon QといったAI CLIツールを利用して、価値の高い秘密情報を動的にスキャンしました。
これは単なる話題作りではありません。「AI CLIは、従来のコマンドよりも偵察を迅速かつ柔軟にします」とSocketの脅威アナリスト、Olivia Brown氏は説明します。「攻撃者は自然言語で目標を記述し、プロンプトを編集して素早くターゲットを切り替え、Linux、macOS、ブラウザの保存パスに関する知識を活用できます。OS固有のコードを書く必要がありません。また、キャンペーンの途中で戦術を簡単に変更できます。これにより開発時間が短縮され、キャンペーンの拡大が容易になりますが、被害者がCLIをインストールしていることが前提です。」
「AI CLIの柔軟性により多様なファイルを特定できるのも利点です。また新しい手法であり、静的な検出方法を回避する可能性もあります」とWizの主任セキュリティ研究者Rami McCarthy氏は付け加えます。しかし同氏は「AIは通常のコマンドよりも一貫性が大きく劣るという欠点があります。ここで被害に遭った人の中にはAI CLIがインストールされていないケースや、LLMが悪意ある活動を拒否したケースもあり、実際に機密ファイルが流出したのはごく一部です」と述べています。
今回の攻撃被害者のほぼ半数が少なくとも1つのAI CLIをインストールしていたとMcCarthy氏は言います。「しかし、LLMの拒否やCLIがインストールされていても設定されていない場合、その他のエラーにより、実際にファイルが流出したのは被害者の4分の1に過ぎません。これは成功というよりも実験的なものに感じますが、近い将来、AI搭載型の窃取と従来型の情報窃取手法が組み合わさった成功例が出てくるでしょう。」
「s1ngularity」
壊滅的なサプライチェーン侵害とAI支援によるデータ収集により、攻撃者はあとは戦利品を手に入れるだけでした。しかし、単にコマンド&コントロール(C2)サーバーへ持ち出すのではなく、より目立つ方法を選びました。
telemetry.jsは、被害者となった開発者のGitHubアカウントにパブリックリポジトリを作成し、盗んだデータをエンコードして「results.b64」というファイル名で新しいリポジトリに公開しました。当然、攻撃者はどの開発者アカウントを狙うべきか事前には分からないため、マルウェアは「singularity-repository-0」「singularity-repository-1」などの命名規則で新リポジトリを作成するようプログラムされていました。攻撃者はGitHub上の新しいsingularity-repositoryを監視し、発見したものを素早くダウンロードしました。
この手法は珍しいものの、戦術的には理にかなっています。Brown氏は「GitHubのトラフィックは、不審なサーバーへのデータ転送よりもはるかに目立ちにくい」と指摘し、「盗んだデータをパブリックなGitHubリポジトリにアップロードすることで、脅威アクターが共犯者と資格情報や秘密情報などを自分のインフラに直接アクセスさせずに共有できる方法にもなります。ただし、可視性というトレードオフがあり、盗まれたデータは誰でも閲覧でき、監査ログによって防御側が調査しやすくなります」と述べています。
攻撃者の手法には利点もありますが、McCarthy氏は短絡的だと見ています。「この手法のさらなる利点は、攻撃者側にインフラが不要で、調査のリスクも最小限に抑えられることですが、もし攻撃者がもっとステルス性を重視していれば、被害はさらに大きかったでしょう。」
また、攻撃者が完全にステルス性を放棄したもう一つの方法も指摘しています。盗んだデータを持ち出した後、マルウェアはシェルのスタートアップファイルを改変し、被害者がターミナルセッションを開くたびにシステムがクラッシュするようにしました。攻撃者がさらに目立つ行動を選ぶのは直感に反するようですが、「これによりインシデント対応が遅れ、ログの確認が困難になり、復旧作業も複雑になります」とBrown氏は認めています。「フォレンジック分析でも、罠を仕掛けられたシェルが分析者や自動ツールを混乱させます。環境によっては粗雑で一貫性に欠けますが、攻撃者が目的を達成した後に防御側の対応を遅らせ、混乱させる効果があります。」
今後は?
npmは午前2時44分(UTC)に悪意あるNxのアップロードを削除しました。午前9時(UTC)にはGitHubがすべてのs1ngularityリポジトリを無効化しました。しかし、その時点で多くの被害者にとってはすでに手遅れでした。
Nxは毎週460万回、つまり1時間あたり約27,400回ダウンロードされています。そのため、Socketは1,000件以上のGitHubアカウントが流出したと観測し、Wizは「数千件」と報告しています(AI CLIの利用状況を考慮しても)。Wizによると、合計で約20,000ファイルが流出し、その中には1,000件以上の有効なGitHubトークンや数十件の有効なnpmトークン、クラウド認証情報も含まれていました。また、マルウェアがGitHub Actionsなどのビルドパイプライン上でも動作した形跡があり、被害者の組織や顧客にさらに広範な影響を及ぼした可能性があります。
これら多様な被害者全員に自分が被害に遭ったことを認識させることすら課題だったとMcCarthy氏は認めています。「露出ウィンドウ中、Nxは影響を受けたリポジトリにイシューを追加して通知していましたが、GitHubがリポジトリを削除しました。現時点でも、流出したGitHubトークンの90%がまだ有効なままです。」
McCarthy氏は「今回のインシデントの規模と個々の被害者数を考えると、今後も長期間にわたって被害が続くでしょう」と考えています。
翻訳元: https://www.darkreading.com/cyberattacks-data-breaches/1000-devs-lose-secrets-ai-powered-stealer