SANSからの練習問題を試す ファイルの取り出し (2)
APT.IMG のメモリイメージから各種データの取り出しをVolatilityを使って行ってみたいと思います。
なお、メモリイメージからマルウェア関連のデータを取り出すと、ウイルス対策ソフトが自動的にそれを削除してしまうケースがあります。取り出し作業を実施している最中はウイルス対策ソフトを切っておく方がよいかもしれません。
まずプロセスメモリのダンプを行ってみたいと思います、プラグインとしてはメモリ内の割り当て状況を確認する memmap と memdump になりますが、単純に取り出すのであれば memdump でいけるようですので memmap を使います。
memdump で取り出したい PID 796 と出力先のフォルダを指定して実行します。
>vola.exe -f APT.img --profile=WinXPSP3x86 memdump -p 796 -D output
Volatility Foundation Volatility Framework 2.3.1
************************************************************************
Writing iexplore.exe [ 796] to 796.dmp
出力先として指定したフォルダに、PID.dmp の形式でファイルが出力されます。今回、PID 796を指定していますので、iexplore.exe をダンプしていますが、ファイルサイズとしては約95MB程度になっています。
バイナリファイルですので、任意のバイナリエディタなどで開いて内容を確認する事になります。strings などをこのファイルに実行すればRedLineのStrings的な事も可能になるとおもいますが、他にもカービングするといった事も可能でしょうか。
気になる点としては、スワップされているデータがあったかどうか?という点なのですが、特にオプション等で確認する手段は見当たらないですね。
実行ファイル部分だけ取り出したいケースでは、procmemdump または procexedump が使えますが、違いはスラックを含むか否かの違いのようです。両方を試してみたところ、スラックにより数キロバイトの差異がでますが、スラックを含めて取り出したいケースってあるんでしょうか?
取り出したファイルを実行できるか否かはまた別の問題として存在しますが、取り出した実行形式ファイルのメタを確認したり、ウイルス対策ソフトによるチェックをかける場合にはこの取り出し方法がよいですね。
>vola.exe -f APT.img --profile=WinXPSP3x86 procexedump -p 796 -D output
Volatility Foundation Volatility Framework 2.3.1
Process(V) ImageBase Name Result
---------- ---------- -------------------- ------
0x81dbdda0 0x00400000 iexplore.exe OK: executable.796.exe
プロセスとは別に、DLLの取り出しは dlldump プラグインを使う事になります。dlldumpはオプション指定により、全てのDLL、指定したプロセスのDLL、隠されたまたはアンリンクされたプロセスのDLL、更にベースアドレス指定での取り出しなどができるようになっています。インジェクトされたDLLなどの取り出しを行う場合には、アドレス指定などが必要になるようですね。これは後日にでもぜひ練習しておきたい部分ですね。
今回は、PID 796 でロードされていた irykmmww.d1l ファイルを取り出ししてみたいと思います。ベースアドレスを指定する必要がありますので、dlllist プラグインでベースアドレスを確認しておきます。(以下部分抜粋)
>vola.exe -f APT.img --profile=WinXPSP3x86 dlllist -p 796
Volatility Foundation Volatility Framework 2.3.1
************************************************************************
iexplore.exe pid: 796
Command line : "C:\Program Files\Internet Explorer\iexplore.exe"
Service Pack 3
Base Size LoadCount Path
---------- ---------- ---------- ----
0x10000000 0x9000 0x1 C:\WINDOWS\system32\irykmmww.d1l
ベースアドレスが 0x10000000 と分かりましたので、これを dlldump のオプションとして指定します。
>vola.exe -f APT.img --profile=WinXPSP3x86 dlldump --pid 796 --base 0
x10000000 -D output
Volatility Foundation Volatility Framework 2.3.1
Process(V) Name Module Base Module Name Result
---------- -------------------- ----------- -------------------- ------
0x81dbdda0 iexplore.exe 0x010000000 irykmmww.d1l OK: module.7961fbdda0.10000000.dll
取り出し段階で、拡張子は自動的にDLLに設定されるようですね、元はd1lと数字の1が混じっている状態でした。
デバイスドライバとしてロードされていた irykmmww.sys の取り出しも行ってみたいと思います。
moddump というプラグインを使うことでカーネルドライバの取り出しが可能です。今回取り出したいモジュールは一つだけですので、ベースアドレスを指定し、irykmmww.sys だけの取り出しを行いたいと思います。ベースアドレスはmodulesコマンドなどで確認することができます。
>vola.exe -f APT.img --profile=WinXPSP3x86 moddump --base=0xf836f000
-D output
Volatility Foundation Volatility Framework 2.3.1
Module Base Module Name Result
----------- -------------------- ------
0x0f836f000 irykmmww.sys OK: driver.f836f000.sys
ファイル名がベースアドレス名になります。私は最初ウイルス対策ソフトを有効にした状態で実行していた結果、取り出しが終わったのを見に行くと消えているという悲しい状況に遭遇しました。