@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

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で取り出したバイナリを比較したところ、スラックではないのでは?という部分でデータが不一致となります。

f:id:hideakii:20140313201947p:plain

データ内の一部でもスラックとか発生するものなのでしょうか?、ファイルシステムのスラックとは違う概念なのかもしれませんが、この現象は違和感を覚えます。

他の部分では、確かに一定範囲でmemdump側にのみデータが存在しているといった差異を確認できます。