XRayC2は、AWS X-Ray(分散トレーシングサービス)を再利用し、トレースアノテーションに命令をエンコードし、X-Ray APIを通じてレスポンスを読み取ることで、秘匿性の高いコマンド&コントロールチャネルとして機能します。本記事では、XRayC2の概要、安全なラボ環境でのインストール・実行方法、現実的な攻撃シナリオ、防御側向けの検知・対策アドバイスについて解説します。インストールや使用例のスニペットは、すべて上流プロジェクトおよび関連分析から引用しています。

XRayC2は、非標準的なC2ベクター、すなわちAWS X-Rayをデータ転送手段として利用する手法を示しています。X-Rayは分散トレーシング用に設計されており、サポートチームはマイクロサービスを通じたリクエストの追跡に利用します。XRayC2は、その正規のテレメトリチャネルを悪用し、短いコマンドのやり取りや小規模な出力の持ち出しを行います。この手法は、従来のID・アクセス管理イベントに注目した監視・検知体制が多く、トレーシングシステムには目が向けられていない点が特徴です。主な公開記事やPoCは、プロジェクトリポジトリおよび「Ghost in the Cloud」と題された詳細な解説記事です。
特徴
- X-RayのサブセグメントアノテーションやメタデータにC2コマンドをエンコード
- X-RayのGetTrace/GetServiceGraph APIを使ってレスポンスを取得
- X-Rayの通信はクラウド運用者から見て通常のテレメトリ呼び出しに見えるため、フットプリントが最小限
- コマンドサイズや出力が小さい用途向けに設計されており、チャンク化や時間をかけない限りファイル持ち出しチャネルとしては不十分
インストール
プロジェクトはGitHubリポジトリにビルド・実行手順を提供しています。以下の手順はリポジトリからの引用です。必ず認可されたラボアカウントでのみ実施してください。
|
git clonehttps://github.com/RootUp/XRayC2.git cd XRayC2 # 依存関係やビルドスクリプトはリポジトリのREADMEを参照 # 例:Pythonパートがある場合は仮想環境を準備 python3–mvenv venv source venv/bin/activate pip install–rrequirements.txt |
リポジトリにコンパイル済みコンポーネントが含まれている場合は、READMEのビルドスクリプトに従ってください。オリジナルのREADMEおよびGhost in the Cloud研究記事に、正確なビルド・実行例と注意事項が記載されています。決して本番環境や第三者アカウントで実行しないでください。
使い方(検証済みヘルプ出力)
以下の使用例・ヘルプテキストは、公開リポジトリおよび技術記事からそのまま引用しています。想定される高レベルコマンドやモードを示しており、実行前にCLIの実際の形を確認できます。これらのフラグは必ず認可されたテスト環境でのみ使用してください。
|
Usage:controller.py[OPTIONS] COMMAND [ARGS]… Commands: implant–start トレース/サブセグメントを書き込むインプラントをデプロイまたは起動 implant–stop インプラントを停止または削除 send–cmd X-Rayアノテーションにエンコードしたコマンドを送信 poll–traces X-Rayからトレースをポーリングし、レスポンスをデコード —help このヘルプメッセージを表示して終了 # 例(ラボで実行する場合の参考): # テストアカウントでリスナー/インプラントを起動: python3 controller.py implant–start—region us–east–1 # 1行コマンドを送信: python3 controller.py send–cmd—region us–east–1—cmd“whoami” # レスポンスをポーリング: python3 controller.py poll–traces—region us–east–1—filter‘service(“my-app”)’ |
現実的な攻撃シナリオ
目的:X-Ray書き込み権限を持つ低権限の開発者クレデンシャルから、ラテラルな可視性を得て、インプラント化されたプロセスへの秘匿型短命コマンドチャネルを作成する。
手順(概要):
- ターゲットアプリケーションにスコープされたクレデンシャルを取得(一般的な開発者APIキーや侵害されたサービスロールなど)
- インプラントをデプロイするか、サービスにX-Rayサブセグメントでエンコードしたコマンドを出力させる。インプラントはアノテーションを読み取り、許可されたコマンドをローカルで実行。
- 小さなコマンドで環境やクレデンシャルを列挙(例:環境変数の表示やローカルメタデータサービスへのcurl)。レスポンスはトレースアノテーションフィールドにエンコードされ、X-RayのGetTrace APIで確認可能。
- このチャネルを使って短い設定データや後続ツールのステージング指示を取得。
この流れはコンパクトで通信量も少なく、通常のテレメトリと混ざります。攻撃はX-Rayのサンプリングやペイロードサイズに制約されます。インプラントがトレースを強制的にキャプチャしたり、オペレーターがテスト中にX-Rayサンプリングを調整すれば、チャネルの信頼性は向上します。これらはすべてラボ環境でのみテストしてください。
レッドチームでの有用性
XRayC2がレッドチームに有用な理由は3つあります。
- 従来のC2ポートやDNSチャネルがノイジーまたはブロックされている場合の秘匿通信手段を拡張できる
- テレメトリ監視のギャップを検証可能:防御側はX-Rayの異常な利用パターンを監視・警告していないことが多い
- 攻撃者エミュレーションに有用:パープルチーム演習でトレーシングテレメトリの悪用を含めることで、防御側にIAMやネットワークフロー以外のギャップも塞がせることができる
XRayC2の実行と標準的な侵害後ツールを組み合わせることで、テレメトリチャネルが悪用された際にセキュリティチームがラテラルムーブメントを検知できるか検証できます。関連するクラウドAPIの悪用例はCloudConqueror、APIの発見・テスト手法はAutoswaggerを参照してください。
検知と対策
防御側がX-Rayテレメトリを第一級のデータソースとして扱えば、検知は十分可能です。
- 予期しないプリンシパルからのPutTraceSegmentsやGetTrace呼び出しの異常な急増を記録・警告
- X-Rayアクティビティと短命ロールの作成、異常な環境変数、新規デプロイアーティファクトの発生を相関分析
- 通常のアプリテレメトリではあり得ない異常なアノテーションパターンや繰り返し同一のサブセグメントペイロードを検知
- 最小権限を徹底:不要な場合はサービスロールにX-Ray書き込み権限を直接・無制限に付与しない
- サンプリング・保持ポリシーを調整し、不審なトレースが確実にフォレンジック用に保存されるようにする
ブルーチームの迅速な検証には、ラボアカウントで制御されたXRayC2アクティビティを実行し、上記の特定パターンで検知ルールを調整してください。
制約とトレードオフ
XRayC2は高帯域チャネルではありません。短いコマンドや小さなレスポンスに最適化されています。X-Rayのサンプリングや保持設定に依存するため、信頼性が下がる場合があります。この用途でX-Rayを使うと、テレメトリアーティファクトが残るため、防御側がAPIを監視していれば検知される可能性があります。
まとめ
XRayC2は、見落とされがちなテレメトリ悪用ベクターを浮き彫りにする実用的なPoCです。従来のIAMやネットワークチャネルを超えた防御範囲を検証したいレッドチーム・パープルチームにとって有用です。防御側はX-Rayや他のトレーシングシステムも検知マトリクスに加え、CloudControlやX-Rayのような管理APIも攻撃対象面とみなすべきです。関連するクラウド悪用ツールや手法は、CloudConquerorのCloudControl API悪用記事やAutoswaggerによるAPI仕様発見を参照してください。
リスクと開示に関する注意:攻撃ツールや上記の例を本番環境や第三者アカウントで実行しないでください。必ず書面による許可を得て、公開例は実際のアカウント識別子を除去してください。
詳細やXRayC2のダウンロードはこちら:https://github.com/RootUp/XRayC2
読者との対話
翻訳元: https://www.darknet.org.uk/2025/10/xrayc2-weaponizing-aws-x-ray-for-covert-command-and-control-c2/