
Azure Outlook Command & Control (C2) - 侵害されたWindowsデバイスをOutlookメールボックスからリモート制御します。北朝鮮APT InkySquid / ScarCruft / APT37向けの脅威エミュレーションツール。TTP: C2運用にMicrosoft Graph APIを使用。
Microsoft Graph API を利用した C2 通信及びデータ漏洩を行う、Azure Outlook コマンド&コントロールです。
自身の Outlook メールボックスから、侵害した Windows デバイスを遠隔操作します。
Elastic Security Labs は、SIESTAGRAPH を使用したアクティブな侵入活動を実環境で発見しました。SIESTAGRAPH は、Outlook と OneDrive を使用した C2 のために Microsoft の GraphAPI とやり取りします。Azure Outlook C2 通信に関する素晴らしいマルウェア分析ブログは以下をご覧ください。


類似のプロジェクト、この TTP が APT/ランサムウェアグループによって実環境で使用されているという CTI 情報、防御アドバイス、Azure C2 脅威エミュレーションに関心のあるレッドチーマーへの推奨事項、またはこのブログ/README に追加すると良いと思われるその他の情報がありましたら、ご連絡いただくか、プルリクエストを送信してください。ありがとうございます!
このプロジェクトは、攻撃者が制御する Azure Outlook メールボックス(これが C2 として機能)にビーコンを送信するインプラントで構成されています。インプラントは、コンパイル時に攻撃者の C2 メールボックスの Azure リフレッシュトークンがハードコードされます。Windows デバイス上で実行されると、インプラントは Microsoft Graph API を介して攻撃者の下書きメールボックスにアクセスします。インプラントは攻撃者の下書きメールボックスからコマンド命令を読み取り、侵害された Windows デバイス上でローカルに命令を実行し、新しい下書きメッセージを作成することでコマンド出力を攻撃者に返します。インプラントは、インプラントのホストプロセスが終了するまで、攻撃者のメールボックスからリモート制御されるこの動作を繰り返します。
私は約半年前、Trustwave の SpiderLabs レッドチームでレッドチーミングを始めました。あるエンゲージメントで、伝説的な Stephan Borosh (rvrsh3ll|@424f424f) と一緒に仕事をする栄誉に預かりました。Steve と Matt Kingstone は、Azure ドメインフロンティングについてすべて教えてくれました。そして、ajax.microsoft.com のような正当なドメインを使用して HTTPS 経由で C2 トラフィックを流出できることに衝撃を受けました。さらに、Microsoft の TLS 証明書も使用しています!残念なことに、私がレッドチーミングを始めたのは、Azure でのドメインフロンティングが終焉した時期と同時期でした。Azure でのドメインフロンティングは終わりましたが、Azure でできる素晴らしいレッドチームテクニックはまだたくさんありました。
Steve は、Azure デバイスコードフィッシングを紹介してくれました。その時期、私は Azure と Microsoft Graph API をレッドチーミングに活用するために深く調査しました。Dr. Nestori Syynimaa (@DrAzureAD) の素晴らしい研究成果に基づいて、ツール TokenTactics を作成し、当社の方法論に興味があればブログ The Art of the Device Code Phish も執筆しました。
TokenTactics を作成し MS Graph API を実験しているうちに、Microsoft Graph API を C2 チャネルとして使用できることに気付きました。MS Graph API を C2 チャネルとして使用する方法は多数あり、私だけ(あるいは最初の発見者)ではありません。VX-Underground( @smelly__vx 作成 – HellsGate テクニックの作成者/公開者)は先月、北朝鮮の Advanced Persistent Threat (APT) グループ "InkySquid"(別名 ScarCruft および APT37)が C2 運用に Microsoft Graph API を使用していることを公開しました。このプロジェクトのティーザーを Twitter と LinkedIn で公開した後、数人の DFIR 専門家から、この Microsoft Graph API を C2 運用に使用する手法が、既に数ヶ月前からランサムウェアグループによって実環境で活発に使用されているとのコメントがありました。
レッドチームエンゲージメント中、私は Cobalt Strike を MS Graph API を C2 チャネルとして動作させようと試みました。残念ながら失敗しましたが、これは依然として将来の目標です。これを Cobalt Strike で動作させる際の問題は、MS Graph API が通信に 2 つのトークンを使用することです。最初のトークンはリフレッシュトークンで、最大 90 日間有効です。2 つ目のトークンはアクセストークンで、約 1 時間有効な一時トークンです。MS Graph API への直接通信は、アクセストークンでの認証によって行われます。アクセストークンが期限切れになると、リフレッシュトークンを使用して新しいアクセストークンを取得できます。私はまだレッドチーミングと Cobalt Strike 開発に不慣れだったため、Cobalt Strike の Malleable C2 プロファイルを使用して、新しいアクセストークンを継続的に取得し、これらの変更されるアクセストークンを HTTPS ビーコンのリクエストの Authorization ヘッダーに送信する方法を理解できませんでした。ティーザーを Twitter で公開して以来、Joe Vest、Alfie Champion、その他のコミュニティのロックスターの方々から、これを Cobalt Strike で動作させるための素晴らしい方向性をいただいています!将来的には、このプロジェクトの Cobalt Strike フォローアップができることを願っています ;)

graph.microsoft.com への HTTPS TCP 通信を介して行われます。WinInet ダイナミックリンクライブラリを使用します。cmd、sleep、exitcmd: メタコマンドに続く文字列を取得し、子プロセスを生成して実行します。sleep: メタコマンドに続く単語を取得し、インプラントのスリープを指定された値(ミリ秒)に変更します。exit: ホストプロセスを終了/強制終了します。cmd の場合、インプラントはコマンドを実行する子プロセスを作成し、子プロセスは標準出力をパイプに書き込み、コマンド実行後に子プロセスは終了し、ホストインプラントプロセスはパイプを介して子プロセスの出力を読み取ります。PS C:\Users\boku\Desktop\TokenTactics-main> Import-Module .\TokenTactics.psd1
PS C:\Users\boku\Desktop\TokenTactics-main> Get-TenantID -domain theharvester.world
1d5551a0-f4f2-4101-9c3b-394247ec7e08
azureOutlookC2.c ファイル内の char tenantId[] 変数に追加します。# TokenTactics モジュールを PowerShell セッションにインポート
PS C:\Users\boku> cd .\TokenTactics
PS C:\Users\boku\TokenTactics> Import-Module .\TokenTactics.psd1
# デバイスコードフィッシングリクエストを開始し、'user_code' を取得
PS C:\Users\boku\> Get-AzureToken -Client Graph
user_code : ERDVDCNHH
user_code を入力し、C2 メールボックスユーザーでログインします。azureOutlookC2.c ファイル内の char refreshToken[] 変数に追加します。void main() {
// 変数
char refreshToken[] = "0.AXwAoFFVHfL0AUGcOzlCR-x-CNYOWdOzUgJBrv-q0ikqsBx8ACA.AgABAAAAAA...
// ^リフレッシュトークンをここに配置してコンパイル
azureOutlookC2.c をコンパイルします。# x64 MinGW でコンパイル:
bobby.cooke$ cat compile.sh
x86_64-w64-mingw32-gcc -m64 -mwindows -Os azureOutlookC2.c -o azureOutlookC2.exe -lwininet
bobby.cooke$ bash compile.sh
azureOutlookC2.exe PE ファイルを実行します。outlook.office.com にログインし、メールボックスからインプラントを実行している Windows デバイスを制御します。