
Microsoft Graph APIを介したCobalt Strike HTTPSビーコン通信

リリースブログ: GraphStrike: Microsoft Graph API を使用して Beacon トラフィックを消失させる
開発者ブログ: GraphStrike: 攻撃的ツール開発の解剖
GraphStrike は、Cobalt Strike の HTTPS Beacon が C2 通信に Microsoft Graph API を使用できるようにするツールスイートです。すべての Beacon トラフィックは、攻撃者の SharePoint サイトに作成された2つのファイルを介して送信され、Beacon からのすべての通信は https://graph.microsoft.com にルーティングされます。

GraphStrike には、Graph API 経由の Cobalt Strike HTTPS に必要な Azure リソースを作成するプロビジョナーが含まれています。

GraphStrike は Azure に有料のリソースを作成しないため、GraphStrike またはそのプロビジョナーを使用しても追加費用は発生しません。
いくつかの異なる APT が Microsoft Graph API やその他の Microsoft サービスを攻撃キャンペーンに利用しているという脅威情報が公開されています。
脅威アクターは、正当なサービスを不正な目的に利用し続けています。graph.microsoft.com のような評価の高いドメインを C2 通信に利用することは非常に効果的で望ましいことですが、時間と労力の面で複雑で困難な場合がほとんどです。ほとんどの C2 フレームワークはアクセストークンの取得やローテーションの方法をサポートしておらず、Graph API を使用できません。そのため、レッドチームがこれらの手法を再現することは難しく、防御側がこの種の活動を観察し、シグネチャを開発する機会が奪われています。GraphStrike はその負担を軽減し、Cobalt Strike の使い慣れた信頼性を保ちながら、Microsoft Graph API を活用するための信頼性が高く再現可能なプロセスを提供することを目指しています。
厳密には違います。以前に真の External C2 using Graph API(Beacon トラフィックを Microsoft Teams メッセージとして送信)を構築した経験から、External C2 仕様を満たし、かつ仕事を遂行するカスタムインプラントの開発、保守、統合の負担はよく知っています。GraphStrike は代わりに、Kyle Avery によるオープンソースの User Defined Reflective Loader(UDRL) である AceLdr(このプロジェクトでは 'GraphLdr' として改変)を利用して、Beacon が通常行う WinINet ライブラリ呼び出しをフックし、必要に応じて操作して Graph API を使用します。カスタムインプラントや追加のプロセスは存在せず、フックされたいくつかの Windows API を持つ Beacon プロセスのみです。サーバー側では、Cobalt Strike Team Server のトラフィックを Graph API トラフィックに変換し、その逆を行う Python3 プログラムがあります。
GraphStrike は、通常の Cobalt Strike アクティビティのほぼすべてをサポートします。
これには、sleep、exit、remove コマンドの GraphStrike 統合も含まれ、GraphStrike Server のスリープ時間を Beacon に合わせたり、Beacon が終了または削除されたときに SharePoint 内のファイルを削除したりします。
GraphStrike はさらに、元の AceLdr の機能をすべて組み込んでおり、コールスタックスプーフィングを利用するための追加 API も含まれています。
GraphStrike を使用する前に、以下が必要です。
セットアッププロセスを進める前に、以下の点に注意してください。
1. 一部のコンポーネントは相対パスを使用して他のアセットを探します。以下の指示に従ってディレクトリを変更してください。
2. Cobalt Strike プロファイルは、以下のセットアッププロセスのステップ 5 より前でのみ編集できます。注記 #1
sudo setup/install_dependencies.sh を実行して、必要なシステム依存関係をインストールします。python3 -m venv virtual を実行し、続けて source virtual/bin/activate を実行して仮想環境を作成し、その中に入ります。pip3 install -r requirements.txt を実行します。./provisioner.py new を実行し、セットアッププロセスを完了します。graph.microsoft.com を指定して、ポート 443 の Cobalt Strike HTTPS リスナーを作成します。./GraphStrike.py を実行して GraphStrike Server を起動します。GraphLdr のサイズのため、Artifact Kit ユーザーは、GraphStrike を Artifact Kit で生成されたペイロードと互換性を持たせるために、特定のオプションを指定して再コンパイルする必要があります。具体的には、'Stage Size' と 'RDLL Size' フィールドを指定して、100K RDLL サイズを使用する必要があります。動作する構文の例を2つ示します。
./build.sh pipe VirtualAlloc 505029 100 false false none /opt/cobaltstrike/artifacts
./build.sh peek HeapAlloc 492376 100 false true indirect /opt/cobaltstrike/artifacts
./provisioner.py delete を実行して作成された Azure アセットを削除します。順不同ですが、GraphStrike を最大限に活用するためのいくつかの提案と観察事項です。
GraphStrike には以下の制限があります。
GraphStrike は以下の方々の貢献なしには実現しませんでした。