@port139 Blog

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

SANSからの練習問題を試す ファイルの取り出し (5)

Volatiliry 以外のツールを使って、APT.IMG のメモリイメージ内からファイルの取り出しについても考えていきたいと思います。

カービングする方法もありますが、まずは bulk_extractor を使ってみたいと思いますので、ここでは Windows 版の bulk_extractor に APT.IMG を読み込んで処理を実行してみます。オプションはデフォルトに Wordlist だけ追加でチェックをつけています。

f:id:hideakii:20140318063830p:plain

 

実行結果を確認してみたいと思いますが、実行ファイルに関連した情報は、winpe.txt に出力されています。2,693件のレコードが出力されてきました、一部だけ抜粋してみます。テキストエディタなどで開いて見ていくのは面倒そうですから、ビューアを使った方がいいかもしれません。

737288 b156dd7eaf7056145b770da4932fbb7<PE><FileHeader Machine="IMAGE_FILE_MACHINE_I386" NumberOfSections="5" TimeDateStamp="1239889739" PointerToSymbolTable="0" NumberOfSymbols="0" SizeOfOptionalHeader="224"><Characteristics><IMAGE_FILE_EXECUTABLE_IMAGE /><IMAGE_FILE_32BIT_MACHINE /><IMAGE_FILE_DLL /></Characteristics></FileHeader><OptionalHeaderStandard Magic="PE32" MajorLinkerVersion="8" MinorLinkerVersion="0" SizeOfCode="73728" SizeOfInitializedData="40960" SizeOfUninitializedData="0" AddressOfEntryPoint="0x91c9" BaseOfCode="0x1000" /><OptionalHeaderWindows ImageBase="0x10000000" SectionAlignment="1000" FileAlignment="1000" MajorOperatingSystemVersion="4" MinorOperatingSystemVersion="0" MajorImageVersion="0" MinorImageVersion="0" MajorSubsystemVersion="4" MinorSubsystemVersion="0" Win32VersionValue="0" SizeOfImage="1d000" SizeOfHeaders="1000" CheckSum="0x228db" SubSystem="" SizeOfStackReserve="100000" SizeOfStackCommit="1000" SizeOfHeapReserve="100000" SizeOfHeapCommit="1000" LoaderFlags="0" NumberOfRvaAndSizes="10"><DllCharacteristics></DllCharacteristics></OptionalHeaderWindows><Sections><SectionHeader Name=".text" VirtualSize="1162d" VirtualAddress="1000" SizeOfRawData="12000" PointerToRawData="1000" PointerToRelocations="0" PointerToLinenumbers="0" ><Characteristics><IMAGE_SCN_CNT_CODE /><IMAGE_SCN_MEM_EXECUTE /><IMAGE_SCN_MEM_READ /></Characteristics></SectionHeader><SectionHeader Name=".rdata" VirtualSize="3d34" VirtualAddress="13000" SizeOfRawData="4000" PointerToRawData="13000" PointerToRelocations="0" PointerToLinenumbers="0" ><Characteristics><IMAGE_SCN_CNT_INITIALIZED_DATA /><IMAGE_SCN_MEM_READ /></Characteristics></SectionHeader><SectionHeader Name=".data" VirtualSize="2d04" VirtualAddress="17000" SizeOfRawData="2000" PointerToRawData="17000" PointerToRelocations="0" PointerToLinenumbers="0" ><Characteristics><IMAGE_SCN_CNT_INITIALIZED_DATA /><IMAGE_SCN_MEM_READ /><IMAGE_SCN_MEM_WRITE /></Characteristics></SectionHeader><SectionHeader Name=".rsrc" VirtualSize="3c0" VirtualAddress="1a000" SizeOfRawData="1000" PointerToRawData="19000" PointerToRelocations="0" PointerToLinenumbers="0" ><Characteristics><IMAGE_SCN_CNT_INITIALIZED_DATA /><IMAGE_SCN_MEM_READ /></Characteristics></SectionHeader><SectionHeader Name=".reloc" VirtualSize="1a06" VirtualAddress="1b000" SizeOfRawData="2000" PointerToRawData="1a000" PointerToRelocations="0" PointerToLinenumbers="0" ><Characteristics><IMAGE_SCN_CNT_INITIALIZED_DATA /><IMAGE_SCN_MEM_DISCARDABLE /><IMAGE_SCN_MEM_READ /></Characteristics></SectionHeader></Sections><dlls></dlls></PE>

 2,693件のレコードが出力されていますが、これらのEXEのファイル名が分かりません。

ファイルシステムの場合には identify_filenames.py を使うことでファイル名を探すこともできるようですが、メモリイメージだけの場合にはどうすれば良いのでしょうかね?

bulk_extractor の出力結果には、データ内でのオフセット位置が記録されています、先ほどの引用部分ですと、737288 がオフセット位置という事になります。16進数では0xB4008 になるかと思います。

 さて、Volatility の出力結果なりと bulk_extractor の結果を付き合わせて見ていくにはどうすれば良いのかが気になります。

例えば、bulk_extractor  のバイトオフセット位置がメモリイメージ内の物理または仮想アドレスのどの位置となるのかをマッピングする事が可能か?という事になるかと思います。

Volatility の出力結果ですが、pslist のデフォルトは仮想アドレスの表示ですが、-P オプションを付けることで物理アドレスが出力できるとあります。

Offset(P)  Name                    PID   PPID   Thds     Hnds   Sess  Wow64 Start                          Exit                          

---------- -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------

0x01fbdda0 iexplore.exe            796    884      8      152      0      0 2009-05-05 19:28:28 UTC+0000                                 

PID 796 iexplore.exe の物理アドレスは 0x01fbdda0 で 10進数では  33283488 という事になります。この値を winpe.txt で検索してみますと、残念見つかりません(笑)実際にAPT.IMGの該当オフセット位置 33283488 を見ても MZ など見当たりません。

イヤイヤ、そんな単純なお話ではない!!という事だとは思いますが、Volatilityの参考資料なども見つつ、もう少し調べてみる必要があるようです。

 http://computer.forensikblog.de/en/2006/04/reconstructing-a-binary-1.html

 Volatilityで ImageBaseAddress を知るにはどうすればいいんですかね?と思い検索してみると、procexedump で  ImageBase  の値が得られるようです。

>vola.exe -f APT.img --profile=WinXPSP3x86 procexedump -D procout

Volatility Foundation Volatility Framework 2.3.1

Process(V) ImageBase  Name                 Result

---------- ---------- -------------------- ------

0x823c8830 ---------- System               Error: PEB at 0x0 is paged

0x8230aad8 0x48580000 smss.exe             OK: executable.564.exe

0x822ca2c0 0x4a680000 csrss.exe            OK: executable.636.exe

0x81f63020 0x01000000 winlogon.exe         OK: executable.660.exe

0x81f22020 0x01000000 services.exe         OK: executable.704.exe

0x82164da0 0x01000000 lsass.exe            Error: ImageBaseAddress at 0x1000000

is paged

0x822cb458 0x00400000 vmacthlp.exe         OK: executable.872.exe

0x81e54da0 0x01000000 svchost.exe          OK: executable.884.exe

0x81da4590 0x01000000 svchost.exe          OK: executable.968.exe

0x81f739b0 0x01000000 svchost.exe          OK: executable.1088.exe

0x8232c020 0x01000000 svchost.exe          OK: executable.1140.exe

0x81e91da0 0x01000000 svchost.exe          OK: executable.1212.exe

0x8219b630 0x01000000 spoolsv.exe          OK: executable.1512.exe

0x81da71a8 0x01000000 explorer.exe         OK: executable.1672.exe

0x81f1c7e8 0x00400000 VMwareTray.exe       OK: executable.1984.exe

0x81dc1a78 0x00400000 VMwareUser.exe       OK: executable.2004.exe

0x81f1a650 0x00400000 ctfmon.exe           OK: executable.2020.exe

0x81dc2570 0x00400000 VMwareService.e      OK: executable.1032.exe

0x81d33628 0x01000000 alg.exe              OK: executable.464.exe

0x81f96220 0x01000000 wscntfy.exe          OK: executable.1260.exe

0x8231eda0 0x01000000 msiexec.exe          OK: executable.1464.exe

0x81e4d648 0x4ad00000 cmd.exe              OK: executable.840.exe

0x81dbdda0 0x00400000 iexplore.exe         OK: executable.796.exe

0x82161558 0x00400000 MIRAgent.exe         OK: executable.456.exe

 PID 796 は 0x00400000 が ImageBase という事になっています、ってこれではマッピングできないですね。。。