npmレジストリに43,000個のスパムパッケージが侵入、約2年間 undetected で活動

はじめに

セキュリティ研究者ポール・マッカーティ氏が、npmエコシステムを標的とした大規模かつ組織的なスパムキャンペーンを発見しました。この「IndonesianFoods」と名付けられたワームは、少なくとも11のユーザーアカウントを通じて43,000個以上の悪意のあるパッケージを公開し、約2年間もレジストリ内で活動を続けていたことが判明しました。これはnpmエコシステム全体の1%以上を占める規模であり、現在のサプライチェーンセキュリティ対策に重大なギャップがあることを示しています。

巧妙な手口:IndonesianFoodsワームの正体

このキャンペーンは、その独特なパッケージ命名規則から「IndonesianFoods」と名付けられました。悪意のあるスクリプトは、インドネシアの一般的な名前(「andi」「budi」「cindy」「zul」)とインドネシア料理の用語(「rendang」「sate」「bakso」「tapai」)をランダムに組み合わせ、1〜100の数字と「-kyuki」または「-breki」のような接尾辞を追加します。これにより、「zul-tapai9-kyuki」や「andi-rendang23-breki」といったパッケージ名が生成されました。

このキャンペーンが特に悪質であるのは、パッケージが一見すると正規のものに見える点です。各パッケージは、適切な設定ファイル、正規の依存関係(React、Next.js、Tailwind CSS)、プロフェッショナルなドキュメントを備えた標準的なNext.jsプロジェクト構造を含んでいました。悪意のあるコンポーネントである「auto.js」または「publishScript.js」というスクリプトファイルは、パッケージ構造内で参照されずに存在し、手動で実行されるまで休止状態を保っていました。インストール時に自動的にトリガーされるpostinstallフックやライフサイクルスクリプトがないため、自動化されたセキュリティスキャナーを回避することができました。

ワームの拡散と収益化のメカニズム

スクリプトが実行されると、無限ループで3つの協調的なアクションを実行します。まず、偶発的な公開を防ぐための保護を回避するために、package.jsonから「private」フラグを削除します。次に、npmの重複バージョン検出を回避するために、ランダムなバージョン番号を生成します。そして、ランダム化された名前で新しいパッケージをレジストリに公開します。1回の実行で約1分あたり12個、1時間あたり720個、1日あたり17,000個のパッケージが公開され、複数の被害者または攻撃者による直接的な関与が示唆されています。

このキャンペーンは、依存関係チェーンを通じてワームのような拡散能力を持っていました。これらのスパムパッケージは互いを依存関係として参照し、自己複製ネットワークを形成します。1つのパッケージをインストールすると、自動的に8〜10個の追加のスパムパッケージがダウンロードされる可能性があり、レジストリの帯域幅使用量を指数関数的に増加させ、クリーンアップ作業を複雑化させます。

研究者たちは、いくつかの攻撃者制御パッケージにTEAアカウントをリストアップした「tea.yaml」ファイルが含まれていることを発見しました。これは、オープンソースへの貢献を目的としたブロックチェーン報酬システム上のトークンを通じて、キャンペーンを収益化しようとする試みを示しています。攻撃者制御パッケージの1つのドキュメントには、パッケージが獲得したTEAトークンの量が記載されていました。

攻撃の背景と影響

少なくとも1人のパッケージメンテナーは、インドネシアのソフトウェアエンジニアであることを示すLinkedInプロフィールを持っているようで、これが操作の地域的特異性を説明しています。キャンペーンでは複数の命名バリアントが使用され、一部のパッケージでは正規の「unique-names-generator」npmパッケージを使用して「able_crocodile-notthedevs」のような代替パターンを作成しており、意図的な運用の進化が示唆されています。

組織は、直ちに以下の11の侵害されたアカウントに対して依存関係を確認する必要があります:voinza, yunina, noirdnv, veyla, vndra, vayza, bipyruss, sernaam.b.y, jarwok, doaortu, rudiox。注目すべきは、一部のパッケージが週に2,000回以上のダウンロードを記録しており、将来的な悪意のあるコード注入の潜在的なベクトルを生み出していたことです。

IndonesianFoodsキャンペーンは、サプライチェーン攻撃戦略における憂慮すべき変化を浮き彫りにしています。攻撃者は、即座に大きな影響を与えるために高プロファイルのパッケージを標的とするのではなく、何千もの低プロファイルパッケージを用いたボリュームベースのアプローチを展開し、確率を味方につけました。これは、持続性、規模、戦略的思考が、インストール時に技術的に高度な攻撃を捕捉するように設計された従来のセキュリティ対策を回避できることを示しています。

今後の対策と教訓

npmエコシステムには、以下の緊急の防御改善が必要です:

  • パブリッシャーに対するより厳格なレート制限
  • 大量キャンペーンに対する自動パターン検出
  • 高ボリュームの公開に対するより厳格なアカウント認証

さらに、TEAプロジェクトは、不正なトークン獲得が継続するのを防ぐために、違反しているアカウントとウォレットを停止する必要があります。


元記事: https://gbhackers.com/npm-registry/