
ハードウェアサンドボックスツールキット

ハードウェアサンドボックスツールキット
マルウェアはしばしばアンチVM技術を採用し、その検出・対抗の難易度は様々です。ラボにアンチ検出対策を組み込むことは頻繁に利用される選択肢ですが、実際のハードウェアサンドボックスを使用することも検討すべきです(奇妙に聞こえるかもしれませんが)。素晴らしいPCILeechプロジェクトとDMAハードウェアアクセスを活用することで、XenoboxXは動的に割り当てられたメモリのダンプやIoCの検索など、解析タスクのためのツール群を提供します。これらのツールを使用すると、DMAを介してカーネルレベルでコードを注入できるため、検出がはるかに困難になり、解析に新たな視点をもたらします。
XenoboxXは現在64ビットWindowsに焦点を当てていますが、将来的には他のプラットフォームにも拡張される可能性があります。
このツールはDEFCON 32 Demo Labsで発表されました:こちら
もちろん、物理環境について話しているので、次のものが必要です:
ターゲットとなるPCにDMAボードをインストールします。ボードをホストとなるPCに接続します。
ホストとなるPCにPCILeechをインストールします:開発や変更を行わないのであれば、リリースページにあるバイナリをインストールするだけで十分です(これが最も一般的なオプションだと思います)。
ホストとなるPCにXenoboxXをインストールします:前の点と同様、事前にコンパイルされたバイナリ(pcileechフォルダ内)だけが必要かもしれません。
PCILeechモジュールを注入します:
./pcileech kmdload -kmd WIN10_X64_3
これにより、シェルコードの実行に使用するメモリアドレスが返ります(例 0x7ffff000)。
XenoboxXシェルコードを実行します:
./pcileech wx64_dumpalloc -0 0xbac -s "\\??\C:\temp\test" -kmd 0x7ffff000
現在、XenoboxXには3つのwx64シェルコードがあります:
wx64_dumpalloc: 特定のPIDにアタッチし、プロセスが行ったすべてのメモリ割り当てをダンプします。既存のメモリの保護フラグが変更された場合、その領域は再度ダンプされます(マルウェアは検査を避けるために保護を切り替えることがあります)。wx64_memgrep: PIDによって割り当てられたメモリ内で、ユーザー定義の文字列を検索します。特定の時間、プロセスにアタッチできます。wx64_strings: PIDによって割り当てられたメモリ内のすべての文字列を検索します。特定の時間、プロセスにアタッチできます。注意: 実験的なアプローチとして、Xenoboxは現在フックを一切使用せず、すべての検出をポーリングによって行っています。これには明らかに欠点もありますが、可能な限りステルス性を高めるという設計上の選択です。
例:
./pcileech wx64_dumpalloc -0 0xbac -s "\\??\C:\temp\test" -kmd 0x7ffff000
-0 アタッチするPID(16進数形式、必須)-1 プロセス監視時間。デフォルトは0x20-s 出力フォルダ。メモリダンプとログが保存される場所例:
./pcileech wx64_memgrep -0 0x564 -1 0x80 -s "Hello, 123" -2 1 -kmd 0x7ffff000
-0 アタッチするPID(16進数形式、必須)-1 プロセス監視時間。デフォルトは0x20-2 ASCII(0x0)またはWIDE(0x1)文字列の検索。デフォルトは0x0-3 大文字小文字を区別する(0x1)か区別しない(0x0)検索。大文字小文字を区別する方が高速。デフォルトは0x0-4 書き込み可能なメモリページのみ検索(0x0)かすべて検索(0x01)。デフォルトは0x0-s 検索文字列(ダブルクォートで囲む)例:
./pcileech wx64_strings -0 0x19e0 -1 0x100 -3 0x15 -kmd 0x7ffff000
-0 アタッチするPID(16進数形式、必須)-1 プロセス監視時間。デフォルトは0x20-2 ASCII(0x0)またはWIDE(0x1)文字列の検索。デフォルトは0x0-3 文字列の最小長。デフォルトは0xA-4 書き込み可能なメモリページのみ検索(0x0)かすべて検索(0x01)。デフォルトは0x0XenoboxXスクリプトを変更または再ビルドする場合は、PCILeechリポジトリからいくつかのファイルが必要になることを覚えておいてください。具体的には:
wx64_common.hwx64_common.cshellcode64.exe各.cファイルのコメントには、コンパイル手順が記載されています。例:
cl.exe /O1 /Os /Oy /FD /MT /GS- /J /GR- /FAcs /W4 /Zl /c /TC /kernel wx64_common.c
cl.exe /O1 /Os /Oy /FD /MT /GS- /J /GR- /FAcs /W4 /Zl /c /TC /kernel wx64_dumpalloc.c
ml64.exe wx64_common_a.asm /Fewx64_dumpalloc.exe /link /NODEFAULTLIB /RELEASE /MACHINE:X64 /entry:main wx64_dumpalloc.obj wx64_common.obj
shellcode64.exe -o wx64_dumpalloc.exe "DUMP ALLOCATED MEMORY \n===============================================================\nREQUIRED OPTIONS: \n -0 : Process PID to open. Example '-0 0x0fe0'. \nOPTIONAL OPTIONS: \n -1 : Process monitoring timeout Default: 0x20. Example: '-1 0x100'. \n -s : Specify output folder/file for dumps. Example: \"\\??\C:\temp\test\"\n===== RESULT OF DUMPALLOC OPERATION ======================%s\nNTSTATUS : 0x%08X \n===============================================================\n"
XenoboxXは決定的な解析ツールではありません。これは非常に特殊なアプローチであり、特定の解析に役立つものです。このツールが既存のワークフローを置き換えるとは思いませんが、特定の「厄介な」マルウェアに対して有用かもしれません。
コントリビューションや提案は大歓迎です。質問がある場合はIssueを開き、コントリビュートしたい場合はPull Requestを送ってください。ありがとうございます!