Gateアプリをダウンロードするにはスキャンしてください
qrCode
その他のダウンロードオプション
今日はこれ以上表示しない

NPMポイズニング分析 - Shai-Hulud攻撃が再び現れる

著者: Joker & ccj

背景

最近、NPMコミュニティで再び大規模なNPMパッケージの毒入れ事件が発生しました。この事件は、2025年9月のShai-Hulud攻撃事件と密接に関連しています。今回のNPMパッケージには、開発者のキーやAPIキー、環境変数などの機密情報を盗む悪意のあるコードが含まれており、キーを利用して公開リポジトリを作成し、これらの盗まれた機密情報をアップロードします。

スローミスト( 自社開発のWeb3脅威インテリジェンスと動的セキュリティ監視ツールMistEyeは、迅速に関連する脅威インテリジェンスをプッシュし、顧客に重要なセキュリティ保障を提供します。

! [])https://img-cdn.gateio.im/social/moments-159684ebd67ca55d47335ddbd42018c3(

! [])https://img-cdn.gateio.im/social/moments-bd2aba046f0a86aca7e1abd2b72e9eed(

同時に、バックエンドは悪意のあるサンプルを即座に保存し、その対応するSHA-256などの特徴値を計算します。

! [])https://img-cdn.gateio.im/webp-social/moments-0c04f20f1376390bdc04bad915d660b6.webp(

分析プロセス

@asyncapi/php-template@0.1.1 パッケージを例にとると、旧バージョン @asyncapi/php-template@0.1.0 と比較した際に、0.1.1 バージョンでは 0.1.1 バージョンに比べて 2 つの js ファイルが新たに追加されていることがわかります。それは setup_bun.js と、混乱された bun_environment.js ファイルです。

! [])https://img-cdn.gateio.im/webp-social/moments-45994a147ca5cec569400f4833f14468.webp(

package.json に preinstall スクリプトが追加され、依存関係のインストール前に setup_bun.js が自動的に実行されるようになりました。

! [])https://img-cdn.gateio.im/webp-social/moments-45e344c5a0d73a61db9f267eae229bc6.webp(

setup_bun.js では、最初にシステムに Bun が既にインストールされているかどうかを確認します。未インストールの場合は、公式サイトから自動的に Bun をダウンロードしてインストールし、Bun の実行ファイルを見つけるための環境変数を正しく設定します。

最後に bun を使用して bun_environment.js ファイルを実行します。この bun_environment.js は高度に難読化された悪意のあるファイルです。

! [])https://img-cdn.gateio.im/webp-social/moments-44505da1b8a0d007a2a0c1cf3b0472ca.webp(

悪意のスクリプトの一部コードを逆混淆化した結果、aL0)(が悪意のスクリプト全体の主なエントリーファンクションであることがわかります。この悪意のスクリプトは、敏感な情報の窃取を行っており、まず実行環境にNPMやGitHubなどの資格情報が存在するかどうかをチェックします。これらの資格情報が検出された場合、NPMの資格情報を利用してサプライチェーンの拡散を行い、収集されたシステム情報や敏感なデータは最終的に攻撃者が制御するGitHubリポジトリにパッケージ化されてアップロードされ、今後の利用に供されます。

認証情報の盗難****

AWS:この悪意のあるスクリプトは、runSecrets)(およびlistAndRetrieveAllSecrets)(メソッドを実装しています。runSecrets)(メソッドは、見つけられるすべてのクラウドアクセス資格情報とすべての可能なリージョンを遍歴し、スキャン範囲を最大化します。一方、listAndRetrieveAllSecrets)(は、指定された資格情報とリージョン内で「深掘り」を行い、すべてのSecretを遍歴し、その最新の平文内容を取得します。この二つが組み合わさることで、攻撃者は被害者のAWSアカウントでアクセス可能なすべてのSecretStringとSecretBinaryを一度に全てエクスポートできるようになります。

! [])https://img-cdn.gateio.im/webp-social/moments-3c33d90aa4bd49b2d8304f07d9cf0c78.webp(

enumerateValidCredentials)( メソッドは、利用可能なすべてのクラウドサービスキーを包括的に収集するために主に使用されます。環境変数、設定ファイル、CLIログインなど、さまざまなソースから一つずつ試行し、成功裏に認証された資格情報はすべて記録され、今後のクラウド機密を盗む際に使用されます。

! [])https://img-cdn.gateio.im/webp-social/moments-18502e3837d4a198101e4f71f742d424.webp(

GCP:この悪意のあるスクリプトに実装されたもう一つの listAndRetrieveAllSecrets)( メソッドは主に GCP モジュールに対してであり、指定された Project ID に基づいてその GCP プロジェクト下のすべての Secret を一覧表示し、各 Secret の最新バージョンを直接特定し、accessSecretVersion を呼び出してその平文内容を読み取ります。最終的に、取得したすべての機密(API Key、データベースパスワードなど)を一つ一つ収集します。

! [])https://img-cdn.gateio.im/webp-social/moments-bad2067511f01dd442e955c89db61dc9.webp(

Azure:この悪意のあるスクリプトで実装されたもう一つの listAndRetrieveAllSecrets)( メソッドは、主に Azure モジュールに特化しています。最初に Azure Resource Manager を使用して、すべての Key Vault を見つけるためにサブスクリプション全体をスキャンします。その後、取得した資格情報を使用して各 Vault に一つずつ接続します。最後に、その中のすべての Secrets を列挙し、getSecret を呼び出して各機密のプレーンテキスト値を取得します。

! [])https://img-cdn.gateio.im/social/moments-9176712c5d0ed04eeb1ee93411f8af42(

敏感な情報を盗む実装では、被害者を攻撃するために合法的なセキュリティツールも使用されます。extractAndInstall)( メソッドでは、TruffleHog のバイナリファイルを解凍して抽出します。TruffleHog は本来、コードベース内の機密情報の漏洩を検出および検証するために使用されるもので、API キーや資格情報などですが、攻撃者はこれを使用して被害者のファイルシステム全体をスキャンします。

! [])https://img-cdn.gateio.im/webp-social/moments-45e2049fa39e4d26acd79661c664ca21.webp(

) NPM サプライチェーン伝播

この悪意のあるスクリプトは、NPM サプライチェーンの拡散を行うための updatePackage###( 関数を実装しています。まず、盗まれた NPM トークンを使用して、被害者が公開権限を持つ正当な NPM パッケージのソースコードをダウンロードし、その後 package.json ファイルを修正して、scripts フィールドに悪意のある preinstall スクリプトコマンドを挿入します。同時に、悪意のあるスクリプトをパッケージ内に配置し、パッケージのバージョン番号を 1 加算して、ユーザーの自動更新をトリガーし、悪意のあるスクリプトを含む NPM パッケージを NPM 公認リポジトリにプッシュします。

! [])https://img-cdn.gateio.im/social/moments-f2c1d619c8b8a125a018a4990e47e144(

) バックドアと C2

情報を盗んだ後、盗まれた GitHub トークンを使用して、アカウントの下にランダムな名前のリポジトリを作成し、登録トークンを取得します。そして、被害者のコンピュータをそのリポジトリの自己ホスト型 GitHub Actions Runnerに偽装します。その後、攻撃者はリポジトリに悪意のあるワークフローを埋め込み、トリガーされた Actions タスクが被害者のマシンで実行されるようにします。これにより、リモートコード実行を実現します。

! []###https://img-cdn.gateio.im/webp-social/moments-547cfd5eb9ee4614a975d1f574583495.webp(

そして、これらの盗まれた情報を二重の base64 で暗号化して作成したリポジトリにアップロードします。この作成したリポジトリの説明はすべて「Sha1-Hulud: The Second Coming.」です。

! [])https://img-cdn.gateio.im/webp-social/moments-6bad80b5f904d7c25fa993600ff2a710.webp(

暗号化を解除すると、ユーザーが漏洩した機密データを見ることができます。

! [])https://img-cdn.gateio.im/social/moments-73bf3f27df82dfd50c02ff7c42e746af(

! [])https://img-cdn.gateio.im/webp-social/moments-aefb641fee19ee0ad471234e3d5aa081.webp(

! [])https://img-cdn.gateio.im/social/moments-ea2062526e3489a6cfd6fcbebd94605c(

まとめ

今回の NPM リポジトリの毒性は、ワームと自ホスティングの長期持続性を組み合わせ、TruffleHog を利用して攻撃を行いました。SlowMist セキュリティチームは、開発者が新しいイテレーションを構築および公開する際に、依存パッケージのバージョンロック戦略を採用することを推奨しています。依存パッケージに必要なセキュリティまたは機能の更新がある場合は、内部の厳格なセキュリティ監査プロセスを通じて更新し、ロックされたバージョンを同期して更新し、盲目的な更新によって新しいリスクを引き起こさないようにしてください。

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • コメント
  • リポスト
  • 共有
コメント
0/400
コメントなし
  • ピン