大規模なPyPIサプライチェーン攻撃がPythonスタートアップフックを介してクラウドクレデンシャルを収集
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
Hadesキャンペーンとして知られる協調されたサプライチェーン作戦が、クラウド資格情報を盗むために26のPyPIパッケージを危険にさらしました。この攻撃はPython .pth ファイルを悪用してインタープリタ起動時に悪意のあるコードをトリガーし、Bun JavaScriptランタイムを使用してペイロードを実行します。それはAWS、GCP、Azure、Kubernetes、およびGitHubに関連する秘匿情報を複数のオペレーティングシステムで収集することを目的としています。
調査
Orca Securityは、バイオインフォマティクスおよび開発者ツーリングエコシステムに広がる37の悪意のあるホイールファイルを特定しました。彼らの分析は、マルウェアがBunをダウンロードして難読化されたJavaScriptペイロードを実行するクロスランタイム技術を明らかにしました。このキャンペーンはまた、Anthropic AIサービスへのおとりトラフィックを生成し、LLMベースのセキュリティレビューの効果を低下させるためのプロンプトインジェクション技術を使用します。
緩和策
組織は直ちに影響を受けたパッケージを削除するか、安全なバージョンに固定し、潜在的に露出した資格情報をすべて回転させるべきです。これにはクラウドアクセストークン、GitHub個人アクセストークン、SSHキー、およびDockerレジストリ資格情報が含まれます。セキュリティチームは、Linux、macOS、およびWindowsホスト上の既知の持続性アーティファクトを探すべきです。
対応
妥協が疑われる場合、被害システムを隔離して資格情報を回転させる前に、の gh-token-monitor デーモンによる恐喝のリスクを減らすために、資格情報を回転させるべきです。毒されたパッケージを実行した開発者のワークステーションやCI/CDランナーを再構築してください。攻撃者の命名パターンに合致する未承認のコミットや新しく作成されたリポジトリをGitHubリポジトリ内で確認してください。
攻撃フロー
検出
LaunchAgentsまたはLaunchDaemonsでの疑わしいPlistファイル作成(file_event経由)
表示
疑わしいNodeJS子プロセス [Linux] (cmdline経由)
表示
Systemdフォルダ内でのサービスファイル作成(file_event経由)
表示
サイト固有の構成フックファイルが作成された可能性があります(file_event経由)
表示
テンポラリフォルダ内で作成されたLinuxスクリプト(file_event経由)
表示
悪意のあるPythonパッケージのIOC(cmdline経由)
表示
HadesキャンペーンによるGCP認証トークンスクレイピングの検出 [Google Cloud Platform]
表示
Hadesキャンペーン – Azure認証トークンの情報漏洩 [Azureアクティビティログ]
表示
PyPIサプライチェーン攻撃によるAWSクラウド資格情報の収集 [AWS Cloudtrail]
表示
シミュレーション実行
前提条件:テレメトリーとベースラインのプレフライトチェックが通過している必要があります。
理由:このセクションでは、検出ルールをトリガーするために設計された敵の技術技法(TTP)の正確な実行を詳細に説明します。コマンドと説明はTTPを直接反映し、検出ロジックが期待する正確なテレメトリを生成することを目指します。抽象的または無関係な例は誤診につながります。
-
攻撃の叙述とコマンド: 敵は、悪意のあるPyPIパッケージ(Hadesキャンペーン)を介して開発者のワークステーションを成功裏に侵害しました。Pythonスタートアップフックが実行され、ローカルのメモリ/キャッシュからAzure認証トークンを正常にスクレイピングしました。この活動の 検出 をAzure監査ログでシミュレートするために、説明フィールドに特定の文字列「Azure認証トークン」が含まれる監査ログエントリの生成をシミュレートします。これは、自動システムがそのような外部へのデータ漏洩を検出した際に報告するであろうイベントテレメトリを模倣します。
-
回帰テストスクリプト: 実際のAzureバックエンドに特定の悪意のある説明文字列を生成させるのは容易ではないため、 テレメトリストリームにログを存在させる ことをシミュレートします(BASではワークスペースに合成ログを注入することでよく行われます)。
# トークン漏洩検出のシミュレーションのための合成ログ注入 # 対象文字列で 'Description' フィールドが埋められることをシミュレートします。 $LogEntry = @{ TimeGenerated = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ssZ") OperationName = "TokenExfiltrationDetected" Result = "Success" Description = "マルウェア活動が検出されました:Azure認証トークンがローカルプロセスから抽出されました。" Identity = "malicious-python-hook@attacker.com" } Write-Host "検出ルールを検証するために合成テレメトリを注入中..." # 実際のBASでは、これはLog Analytics Data Collector APIを呼び出すでしょう # シミュレーション目的で、結果のログエントリを表します: $LogEntry | ConvertTo-Json -
クリーンアップコマンド:
# API経由で合成ログが注入された場合、特定の相関IDを削除 # このシミュレーションでは、Azureテナントに持続的な変更は行われませんでした。 Write-Host "クリーンアップ完了。持続的な敵のアーティファクトは残っていません。"