SANSからの練習問題を試す ファイルの取り出し (3)
メモリイメージからのプロセス関連データの取り出しですが、具体的に何が含まれているのかをもう少し確認してみたいと思います。
まず、memdump コマンドを使い PID 769 iexplore.exe をダンプしてみます。出力ファイルは 796.dmp となり、ファイルサイズは 95,828kb(93.5MB) となります。この約 93MB の中には何が含まれているのか?ということですが、実行コードやロードされているDLLなどに含め更に、URLなどStringsで確認できる様なデータが含まれているはずですが、これを確認するにはどうすれば良いのでしょうか?
メモリの割り当て状況は、memmapコマンドで確認する事ができます。PID 796のmemmapを確認してみます。実行してすぐに気がつきますが、かなり長いリストになるので下記は部分抜粋になります。
iexplore.exe pid: 796
Virtual Physical Size DumpFileOffset
---------- ---------- ---------- --------------
0x00010000 0x037aa000 0x1000 0x0
0x00020000 0x1956b000 0x1000 0x1000
0x00130000 0x0b7f9000 0x1000 0x2000
0x00131000 0x0b87a000 0x1000 0x3000
0x00140000 0x1912d000 0x1000 0x4000
0x00150000 0x1975f000 0x1000 0x5000
0x00151000 0x16326000 0x1000 0x6000
使われているメモリ空間でどれが何に使われているかですが、まずプロセス関連についてはdlllistコマンドを使うことで確認してみます。
>volatility.exe -f APT.img --profile=WinXPSP3x86 dlllist -p 796
Volatility Foundation Volatility Framework 2.3
************************************************************************
iexplore.exe pid: 796
Command line : "C:\Program Files\Internet Explorer\iexplore.exe"
Service Pack 3
Base Size LoadCount Path
---------- ---------- ---------- ----
0x00400000 0x9b000 0xffff C:\Program Files\Internet Explorer\iexplore.exe
この結果から見ると、iexplore.exe は Base アドレスとして 0x00400000、サイズとして 0x9b000 を使っている事が確認できます。サイズ値 0x9B000 を 10進数に変換すると 634880 バイトという値になります。
では、実際に iexplore.exe を Procmemdump を使って取り出してみたいと思います。
>volatility.exe -f APT.img --profile=WinXPSP3x86 procmemdump -p 796 -
D Procmemdump
Volatility Foundation Volatility Framework 2.3
Process(V) ImageBase Name Result
---------- ---------- -------------------- ------
0x81dbdda0 0x00400000 iexplore.exe OK: executable.796.exe
メモリイメージから取り出した executable.796.exe のプロパティでサイズを確認すると、634,880バイトと一致します。
次に、procexedump モジュールでもダンプを実行し、出力されたファイルのサイズを確認すると、こちらは 625,664バイトと先ほどより 9216バイト小さくなりました。これはスラックを含まない影響だと思いますが、ここでふと素朴な疑問としてこのスラックとは具体的にどういう状況なのかと思うわけです。
というのもですね、procmemdumpとprocexedumpで取り出したバイナリを比較したところ、スラックではないのでは?という部分でデータが不一致となります。
データ内の一部でもスラックとか発生するものなのでしょうか?、ファイルシステムのスラックとは違う概念なのかもしれませんが、この現象は違和感を覚えます。
他の部分では、確かに一定範囲でmemdump側にのみデータが存在しているといった差異を確認できます。