「Shai-Hulud」と名付けられたサプライチェーン攻撃キャンペーンが急速に拡大しており、悪意あるPythonパッケージを通じて開発者を標的にしています。研究者らは新たに武器化された23件のPyPIパッケージを確認しており、進行中のMini Shai-Hulud、Miasma、Hadesマルウェアオペレーションの被害範囲がさらに広がっています。
今回の最新調査結果から、攻撃者の手法に変化が生じていることが明らかになりました。複数の配布技術を組み合わせることで、開発者環境・CI/CDパイプライン・科学技術計算ワークフローへの侵害を図っています。
Shai-Hulud マルウェアキャンペーンの全容
Socketのセキュリティ研究者によると、今回の新たな攻撃の波は既に報告されていた悪意あるPyPIパッケージを踏台にしつつ、より高度な実行メカニズムを導入しています。
以前のバリアントがPythonのスタートアップフックに大きく依存していたのとは異なり、新たなキャンペーンはネイティブ拡張機能とモジュール式ペイロード配信を組み合わせており、検出回避能力と柔軟性が向上しています。
攻撃者はバイオインフォマティクスライブラリやAI/MCPツールなど、さまざまなテーマのパッケージを積極的に試しており、価値の高い開発者ターゲットへの感染経路を広げようとしています。
このキャンペーンは現在、複数の配布経路にまたがっています。一つ目の手法は引き続き.pthスタートアップフックを悪用するもので、Pythonの初期化時に悪意あるコードを自動実行させることができます。
これらのフックはBun JavaScriptランタイムをダウンロードし、難読化された_index.jsペイロードを実行します。二つ目のより巧妙な手法では、コンパイル済み.abi3.soネイティブ拡張機能に悪意あるロジックを埋め込み、インポート時に実行させます。
この手法はバイオインフォマティクスパッケージで特に効果的です。コンパイル済み拡張機能が一般的なうえ、コードレビュー時に見落とされやすいためです。
三つ目の注目すべきバリアントはlangchain-core-mcpパッケージに関係するもので、「スプリットローダー」技術を採用しています。悪意あるJavaScriptペイロードをパッケージにバンドルするのではなく、PythonのSys.pathから外部の_index.jsファイルを検索する.pthローダーを展開します。
このようにローダーとペイロードを分離することで、同一パッケージ内の両コンポーネントを検出することに依存した従来の検知メカニズムを回避できます。また、複数のパッケージや環境が組み合わさって完全なペイロード実行に至る、段階的な感染の可能性も示唆しています。
根底にあるペイロードはHadesマルウェアのパターンに従っており、Bun経由で実行される高度に難読化されたJavaScriptを使用します。一度起動されると、APIトークン・クラウド認証情報・SSHキー・コンテナ設定・パッケージレジストリのシークレットなど、開発者の機密資産を狙います。
特にCI/CDランナーのような環境はリスクが高く、認証情報が漏洩した場合、悪意あるパッケージの公開やインフラへの不正アクセスを含むサプライチェーン攻撃のさらなる拡大につながる恐れがあります。
さらに高度な点として、マルウェアには解析妨害技術も組み込まれています。_index.jsペイロードには、AIベースのセキュリティ解析ツールを攪乱するよう設計された誤誘導コメントブロックが含まれており、誤った解釈やセーフティフィルターの誤作動を引き起こすことで、検出の遅延や自動トリアージワークフローの混乱を狙っています。
このキャンペーンはバイオインフォマティクスおよびAI開発エコシステムを不均衡に標的にしています。embiggen、ensmallen、pyphetoolsなどの正規の科学技術パッケージの悪意あるバージョンは研究環境への意図的な標的化を示しており、rsquestsやtlaskといったタイポスクワッティングパッケージは名前の類似性を利用して不注意な開発者を罠にかけようとしています。
このキャンペーンに関連する侵害の痕跡(IOC)は以下のとおりです。
| インジケーター | 種別 | 説明・文脈 |
|---|---|---|
| [email protected] | 悪意あるPyPIパッケージ | 新しいShai-Hulud/Hades PyPI攻撃の一部。JavaScriptスティーラーペイロードを配信 |
| [email protected] | 悪意あるPyPIパッケージ | 本キャンペーンでトロイの木馬化されたバイオインフォマティクスパッケージ |
| [email protected] | 悪意あるPyPIパッケージ | トロイの木馬化されたネイティブ拡張機能を使用するバイオインフォマティクスパッケージ |
| [email protected] | 悪意あるPyPIパッケージ | .abi3.soローダーを悪用するバイオインフォマティクス/ゲノミクスパッケージ |
| [email protected] | 悪意あるPyPIパッケージ | Mini Shai-Hulud活動に関連するMCPテーマパッケージ |
| [email protected] | 悪意あるPyPIパッケージ | 同じPyPI攻撃の波における新しいMCPテーマバリアント |
| [email protected] | 悪意あるPyPIパッケージ | .pthスタートアップフックを使用し、sys.pathから外部のindex.jsペイロードを検索 |
| [email protected] | 悪意あるPyPIパッケージ | 同じローダーファミリーの更新アーティファクト |
| [email protected] | 悪意あるPyPIパッケージ | 本キャンペーンの悪意あるメモリ関連パッケージ |
| [email protected] | 悪意あるPyPIパッケージ | 配信手段として使用されるStreamlitテーマパッケージ |
| [email protected] | 悪意あるPyPIパッケージ | 同じファミリーの新しい悪意あるバージョン |
| [email protected] | 悪意あるPyPIパッケージ | AI開発者を標的にするOpenAI/MCPテーマパッケージ |
| [email protected] | 悪意あるPyPIパッケージ | 後続の悪意あるバージョン |
| [email protected] | 悪意あるPyPIパッケージ | 本攻撃で悪用されるオーケストレーションテーマパッケージ |
| [email protected] | 悪意あるPyPIパッケージ | 科学技術/フェノタイピングワークフローを標的 |
| [email protected] | 悪意あるPyPIパッケージ | ペイロードを埋め込んだバイオインフォマティクス特化パッケージ |
| [email protected] | 悪意あるPyPIパッケージ | ネイティブ拡張機能トリガーを使用するトロイの木馬化科学パッケージ |
| [email protected] | 悪意あるPyPIパッケージ | Hadesペイロードを配信するMCPサーバースタイルパッケージ |
| [email protected] | タイポスクワッティングパッケージ | Flaskエコシステムパッケージに酷似した偽パッケージ |
| [email protected] | タイポスクワッティングパッケージ | Python開発者を標的にしたrequestsライブラリの偽パッケージ |
| [email protected] | 悪意あるPyPIパッケージ | キャンペーンに関連するトークン化/MCPテーマパッケージ |
| [email protected] | 悪意あるPyPIパッケージ | 同パッケージの新しい悪意あるバージョン |
| [email protected] | タイポスクワッティングパッケージ | 開発者のインストールを狙ったFlaskテーマのタイポスクワット |
| langchain_core-setup.pth | 悪意あるファイル | langchain-core-mcpローダーが使用するPythonスタートアップフック |
| langchain_core_mcp-1.4.2-py3-none-any.whl | 悪意あるwheelファイル | 悪意あるlangchain-core-mcpアーティファクト |
| langchain_core_mcp-1.4.3-py3-none-any.whl | 悪意あるwheelファイル | 更新された悪意あるwheelバリアント |
| os.path.join(d,”index.js”) | コードパターン | sys.pathをスキャンしてindex.jsを探すペイロード検出ロジック |
| s.run([_b,”run”,_j],check=False) | コードパターン | 発見されたJavaScriptペイロードを実行するBunベースの呼び出し |
| Bun/1.3.14 | ユーザーエージェント | langchain-core-mcpのPyPIアップロードで観測されたUA |
| ensmallen_haswell.abi3.so | 悪意あるネイティブモジュール | インポート時にペイロードを実行するトロイの木馬化.abi3.so拡張機能 |
| ensmallen_core2.abi3.so | 悪意あるネイティブモジュール | バイオインフォマティクスクラスターの追加トロイの木馬化ネイティブ拡張機能 |
| .abi3.so と index.js の組み合わせ | 不審なレイアウト | 要審査のインポート時実行パターン |
| SHA256: 6d332f814f15f19758d65026bbfd0a8c4… | ファイルハッシュ(SHA256) | 悪意あるlangchain_core_mcp-1.4.2 wheelのハッシュ |
| SHA256: 6506d31707a39949f89534bf9705bcf8… | ファイルハッシュ(SHA256) | 悪意あるlangchain_core-setup.pthファイルのハッシュ |
| thebeautifulmarchoftime | 文字列/C2マーカー | マルウェアが使用するフォールバックC2探索文字列 |
| thebeautifulsnadsoftime | 文字列/C2マーカー | 代替フォールバックC2探索文字列 |
| /tmp/.sshu-setup.js | ファイルパス | SSH伝播スクリプトの配置場所 |
| /var/run/docker.sock | ホストアーティファクト | 悪用を狙って標的にされる正規のDockerソケット |
| harden-runner | 文字列/ツール参照 | マルウェアが参照・標的にするStepSecurityの正規ツール |
| step-security | 文字列/ツール参照 | マルウェアが参照・ブロックするStepSecurityの正規識別子 |
| stepsecurity | 文字列/ツール参照 | マルウェアが参照・ブロックするStepSecurityの代替識別子 |
| agent.stepsecurity.io | ドメイン | ブロックが報告されているStepSecurityテレメトリの正規ドメイン |
| api.stepsecurity.io | ドメイン | ブロックが報告されているStepSecurity APIの正規ドメイン |
| app.stepsecurity.io | ドメイン | ブロックが報告されているStepSecurityアプリの正規ドメイン |
注意: IPアドレスおよびドメインは、誤った名前解決やハイパーリンク化を防ぐため、意図的に無害化(例:[.])されています。再有効化はMISP、VirusTotal、SIEMなどの管理された脅威インテリジェンスプラットフォーム内でのみ行ってください。
防御担当者は、Pythonの環境における不審な.pthファイル・予期しないネイティブ拡張機能・不正なJavaScript実行がないかを監査することが推奨されます。
直ちに実施すべき対応としては、影響を受けたパッケージの削除、漏洩した認証情報のローテーション、CI/CDパイプラインの異常確認が挙げられます。sys.pathの不審な利用やBunランタイムのダウンロードを監視することも、早期検出のシグナルとして有効です。
今回のキャンペーンは、ソフトウェアサプライチェーン攻撃における広範なトレンドを浮き彫りにしています。モジュール化の進展、クロス言語実行、そして特定エコシステムの悪用がその特徴です。脅威アクターがこれらの手法を磨き続ける中、各組織は静的なパッケージ検査のみに頼るのではなく、依存関係のセキュリティとランタイム動作の分析を優先することが求められます。
翻訳元: https://gbhackers.com/shai-hulud-malware-campaign-abuses-23-pypi-packages/