Shai-huludマルウェアの新たな波が、信頼されたnpmパッケージをひそかに悪用し、マルチクラウドのシークレットを盗み、開発者エコシステムに大規模なバックドアを仕掛けている。
Shai-hulud 2.0と呼ばれるこのキャンペーンは、認証情報の窃取とサプライチェーン侵害を自動化しており、単一のメンテナーやプロジェクトをはるかに超えて影響が広がる可能性がある。
マルウェアは「…主要クラウドプラットフォームと開発者向けサービスから認証情報やシークレットを盗み、被害者が管理するnpmパッケージへのバックドア設置も自動化できる」と述べた Trend Microの研究者は。
攻撃の内部構造
Shai-hulud 2.0は、preinstallライフサイクルフックを悪用する悪意あるnpmパッケージを通じて拡散し、被害者がnpm installを実行した瞬間に動き始める。
攻撃者はpackage.jsonファイルを改変し、インストール処理でsetup_bun.jsを起動させる。このローダースクリプトは、環境の準備を担う。
このローダーはまずBun JavaScriptランタイムがインストールされているか確認し、なければ公式のbun.shインストールスクリプトを使ってひそかに導入するため、正当な活動に見える。
インストール後、システムのPATHを再読み込みし、Bunを使ってメインペイロードのbun_environment.jsを実行する。
ペイロードが実行されると、マルウェアは実行環境を調べ、どの程度積極的に活動できるかを判断する。
CI/CDパイプラインでは、ビルド用シークレットへのアクセスを最大化するため即座に実行する。一方、開発者のワークステーションでは、Shai-hulud 2.0はより隠密な手法を取る。
npmのnpm installコマンドが正常に完了するよう、切り離されたバックグラウンドプロセスを起動し、認証情報の窃取とシステム侵害を気付かれないまま続行する。
続いてペイロードは、認証情報を包括的に収集する段階を開始する。.npmrcファイルからnpmトークンを抽出し、npmのwhoami APIを使って有効性を確認する。
さらにGitHubの認証情報を収集し、それを使って攻撃者が管理する新しいリポジトリを作成するとともに、セルフホスト型GitHub Actionsランナーを登録し、ひそかなコマンド&コントロール(C2)チャネルを構築する。
マルウェアは環境変数とクラウド設定ファイルも収集し、AWS、GCP、Azureの認証情報を盗む。次にそれらの認証情報を使い、AWS Secrets Manager、GCP Secret Manager、Azure Key Vaultに問い合わせて、利用可能なすべてのシークレットを取得する。
さらに侵害を深めるため、TruffleHogを自動的にダウンロードして実行し、APIキー、トークン、機密性の高い設定文字列など、ハードコードされたシークレットを求めて被害者のファイルシステムをスキャンする。
Shai-hulud 2.0が有効なnpmトークンやGitHubトークンを取得できなかった場合、つまり攻撃者がデータを効果的に拡散または持ち出せない場合、破壊的な挙動へとエスカレートする。
この場合、マルウェアは被害者のホームディレクトリ全体を消去しようとし、失敗した侵害をデータ破壊インシデントへと変える。
Shai-hulud 2.0がnpmパッケージに大規模なバックドアを仕掛ける方法
Shai-hulud 2.0の最も危険な機能の1つは、npmパッケージにバックドアを仕掛ける完全自動化システムだ。これにより、ソフトウェアサプライチェーン全体にワームのような急速な拡散が可能になる。
マルウェアはまず、侵害された開発者アカウントが管理するすべてのnpmパッケージを列挙する。npmレジストリに問い合わせ、下流への影響を最大化するため、ダウンロード数が最も多いパッケージを優先する。
標的を特定すると、各パッケージのtarballをダウンロードして内容を展開し、同じsetup_bun.jsとbun_environment.jsによる感染チェーンを発動させる悪意あるpreinstallスクリプトを注入する。
これにより、更新されたパッケージをインストールする開発者は、パッケージの正規コードが実行される前に、知らず知らずのうちにマルウェアを実行することになる。
改変が完了すると、Shai-hulud 2.0は変更したモジュールを再パッケージ化し、被害者自身の認証トークンを使ってnpmレジストリに再公開するため、更新は正当で信頼できるものに見える。
疑いを招かないよう、マルウェアはバージョン番号をパッチレベルで1つだけ引き上げ、通常のバグ修正やメンテナンスリリースを装う。
これによりシームレスな配布メカニズムが生まれる。下流のユーザーやCIパイプラインが新しいバージョンを自動的に取得し、感染がひそかに発動する。
新たに感染したメンテナーはそれぞれ、自身のパッケージを自動的に改変して再公開できるため、マルウェアはワームとして拡散する性質を獲得する。
侵害された各アカウントが新たな拡散ノードとなり、Shai-hulud 2.0はnpmエコシステム全体に指数関数的に広がり、信頼されたパッケージ更新を通じて、数千人の開発者、アプリケーション、組織に到達する可能性がある。
Shai-hulud型サプライチェーン攻撃から身を守る方法
Shai-hulud 2.0は、1つの侵害されたメンテナーアカウントが、広範なパッケージへのバックドア設置、クラウドシークレットの窃取、CI/CDへの侵入を引き起こし得ることを浮き彫りにしている。
以下の対策により、この種のキャンペーンへの露出を減らし、レジリエンスを高められる。
- フィッシング耐性のあるMFA、ハードウェアキー、最小権限アクセスをすべてのnpm、GitHub、クラウドのIDに適用する。
- 不正なGitHub Actionsワークフローを監視するほか、セルフホスト型ランナー、異常なリポジトリ作成、広範なワークフロートークンのスコープにも注意する。
- アクセストークン、シークレット、クラウド認証情報を制限し、頻繁にローテーションするとともに、環境変数や設定ファイルに保存する機密データを最小限に抑える。
- npmパッケージを監査し、ライフサイクルフックの突然の変更やインストーラーの追加、悪意あるpreinstallスクリプトがないか確認するとともに、重要なパッケージの内部許可リストを維持する。
- クラウドシークレットマネージャーで異常な列挙を監視するほか、侵害を示唆するリージョンをまたいだ問い合わせや大量のシークレットアクセスにも注意する。
- 開発者環境とCI/CD環境を強化するため、EDR、スクリプト実行の監視、package.jsonやワークフローの変更に対する厳格なレビューを導入する。
- 開発者、CI/CD、クラウドの各ロールを分離して横方向の移動を制限するとともに、メンテナーやマシンアカウントが侵害された場合の被害範囲を抑える。
Shai-hulud 2.0が示すように、攻撃者は個々の脆弱性ではなく、現代の開発をつなぐ基盤、つまりID、オートメーション、パッケージエコシステムをますます標的にしている。
現代のソフトウェアパイプラインに迫る脅威の拡大
Shai-hulud 2.0は、現代の脅威アクターがもはやエンドポイントだけを狙っているのではなく、ソフトウェアの構築とデプロイの中核、すなわち開発者のID、オートメーションパイプライン、クラウドのシークレットストアを攻撃していることを強く想起させる。
教訓は明快だ。サプライチェーンセキュリティは依存関係をスキャンするだけではない。信頼されたメンテナーやパッケージが、一夜にして攻撃者に管理される配布チャネルへ変わり得ることを認識する必要がある。
Shai-huludのようなキャンペーンがさらに自動化され、攻撃性を増す中、開発者IDの保護とCI/CDインフラの強化を怠る組織は、1回のnpm installをクラウド完全侵害の侵入口にされるリスクを抱える。
そして、ゼロトラスト(暗黙の信頼ではなく厳格な検証を重視する考え方)が、ソフトウェアサプライチェーン防御にとってますます重要になっている理由でもある。





