はじめに
前回に続きLab4を解いていく,また使用するツールなどの備忘録を残す.
しかし,今回は問題を解く過程でVolatility2でないと詰んだので,Volatility2を使用する.
MemLabs
P.Abhiram Kumar氏が公開しているCTFスタイルでメモリフォレンジックを学ぶことができる教材で,Githubにて公開されています。
Writeup
使用したツール
- Volatility2
問題
My system was recently compromised. The Hacker stole a lot of information but he also deleted a very important file of mine. I have no idea on how to recover it. The only evidence we have, at this point of time is this memory dump. Please help me.
Note: This challenge is composed of only 1 flag.
The flag format for this lab is: inctf{s0me_l33t_Str1ng}最近、私のシステムが危険にさらされました。
ハッカーは多くの情報を盗んだのですが、私のとても重要なファイルも削除してしまいました。
どうやったら復元できるか分からない。
現時点での唯一の証拠は、このメモリダンプです。どうか助けてください。
注:この課題は、1つのフラグのみで構成されています。
このラボのフラグフォーマットは次のとおりです:inctf{s0me_l33t_Str1ng}。
初動調査
今回の場合,ファイルの復元がメインになるが取り敢えず,メモリダンプ取得時に起動していたプロセス情報を確認.
StikyNot.exe(PID:2432)が気になるので,調査してみる.
StikyNot.exeのバックアップファイルとしてStickyNotes.snt
が 存在している可能性があるので,filescanプラグインで確認.ファイルをダンプしてみる.
$ vol3 -f MemoryDump_Lab4.raw windows.filescan | grep -i ".snt"
0x3eec02f0 100.0\Windows\System32\sysntfy.dll 216
0x3fd40910 \Users\SlimShady\AppData\Roaming\Microsoft\Sticky Notes\StickyNotes.snt 216
ダンプしたファイルには以下の記載がありました。
The clipboard plugin works well but it doesn't give the flag
クリップボードプラグインはうまく動きますが、フラグが立ちません.
特に情報はないですね.他に情報がないか探していきたいと思う.
実行結果の中からいくつか気になるファイルをピックアップして記載する.
$ vol3 -f MemoryDump_Lab4.raw windows.filescan | grep -i "Desktop"
0x3e8ad250 \Users\eminem\Desktop\galf.jpeg 216
0x3e8d19e0 \Users\eminem\Desktop\Screenshot1.png 216
0x3fc398d0 \Users\SlimShady\Desktop\Important.txt 216
0x3ebe2a20 \Users\eminem\Desktop\DumpIt\2PAC-20190629-072925.raw 216
DumpItのデータはそのままの意味と思うので,galf.jpeg
,Screenshot1.png
,Important.txt
をダンプしてみる.
結果として,いかにもな名前のImportant.txt
のダンプは失敗して,galf.jpeg
,Screenshot1.png
に情報はなしでした.
$ vol3 -f MemoryDump_Lab4.raw windows.dumpfiles --physaddr 0x3e8ad250
$ vol3 -f MemoryDump_Lab4.raw windows.dumpfiles --physaddr 0x3e8d19e0
$ vol3 -f MemoryDump_Lab4.raw windows.dumpfiles --physaddr 0x3fc398d0
Volatility 3 Framework 2.4.1
Progress: 100.00 PDB scanning finished
Cache FileObject FileName Result
Flag
ファイルの名前からもImportant.txt
が今回削除されて復元が必要なファイルであると推測できるため,復元を試みる.
NTFSファイルシステムのMFTからデータ属性のデータを取得したいと思い,Volatility3でも実現可能か調べたがプラグインもなく無理そうだ...
大人しくVolatility2を使いたいと思う.
$ vol.py -f MemoryDump_Lab4.raw --profile=Win7SP1x64 mftparser | grep -i important.txt -C 20
MFT entry found at offset 0x3bd8ac00
Attribute: In Use & File
Record Number: 60583
Link count: 2
$STANDARD_INFORMATION
Creation Modified MFT Altered Access Date Type
------------------------------ ------------------------------ ------------------------------ ------------------------------ ----
2019-06-27 13:14:13 UTC+0000 2019-06-27 13:26:12 UTC+0000 2019-06-27 13:26:12 UTC+0000 2019-06-27 13:14:13 UTC+0000 Archive
$FILE_NAME
Creation Modified MFT Altered Access Date Name/Path
------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------
2019-06-27 13:14:13 UTC+0000 2019-06-27 13:14:13 UTC+0000 2019-06-27 13:14:13 UTC+0000 2019-06-27 13:14:13 UTC+0000 Users\SlimShady\Desktop\IMPORT~1.TXT
$FILE_NAME
Creation Modified MFT Altered Access Date Name/Path
------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------
2019-06-27 13:14:13 UTC+0000 2019-06-27 13:14:13 UTC+0000 2019-06-27 13:14:13 UTC+0000 2019-06-27 13:14:13 UTC+0000 Users\SlimShady\Desktop\Important.txt
$OBJECT_ID
Object ID: 7726a550-d498-e911-9cc1-0800275e72bc
Birth Volume ID: 80000000-b800-0000-0000-180000000100
Birth Object ID: 99000000-1800-0000-690d-0a0d0a0d0a6e
Birth Domain ID: 0d0a0d0a-0d0a-6374-0d0a-0d0a0d0a0d0a
$DATA
0000000000: 69 0d 0a 0d 0a 0d 0a 6e 0d 0a 0d 0a 0d 0a 63 74 i......n......ct
0000000010: 0d 0a 0d 0a 0d 0a 0d 0a 66 7b 31 0d 0a 0d 0a 0d ........f{1.....
0000000020: 0a 5f 69 73 0d 0a 0d 0a 0d 0a 5f 6e 30 74 0d 0a ._is......_n0t..
0000000030: 0d 0a 0d 0a 0d 0a 5f 45 51 75 34 6c 0d 0a 0d 0a ......_EQu4l....
0000000040: 0d 0a 0d 0a 5f 37 6f 5f 32 5f 62 55 74 0d 0a 0d ...._7o_2_bUt...
0000000050: 0a 0d 0a 0d 0a 0d 0a 0d 0a 0d 0a 5f 74 68 31 73 ..........._th1s
0000000060: 5f 64 30 73 33 6e 74 0d 0a 0d 0a 0d 0a 0d 0a 5f _d0s3nt........_
0000000070: 6d 34 6b 65 0d 0a 0d 0a 0d 0a 5f 73 33 6e 0d 0a m4ke......_s3n..
0000000080: 0d 0a 0d 0a 0d 0a 73 33 7d 0d 0a 0d 0a 47 6f 6f ......s3}....Goo
0000000090: 64 20 77 6f 72 6b 20 3a 50 d.work.:P
***************************************************************************
DATA属性に文字が出てきたので,いい感じに調整するとFlagが手に入る.
Flag
inctf{1_is_n0t_EQu4l_7o_2_bUt_th1s_d0s3nt_m4ke_s3ns3}
おまけ
galf.jpegの画像
Screenshot1.pngの画像
MFTについて
NTFSファイルシステムにはMFTという領域が存在している.
MFTは,ボリューム全体の管理情報やボリューム内の全ファイル,フォルダのエントリや属性情報を持っている.
また,MFTは$で始まるメタファイルの群と、各ファイル/フォルダのレコード (1 KBytes 固定長) で構成されている1.
複数の属性2がある中で$DATA
属性には,ファイルのデータが記録されており,1レコードの上限である1KBを超えない限りファイルのデータはMFT内に保存されることになる.そのため,比較的ファイルサイズが小さい傾向のあるtxtファイルだとMFTにデータが残っていることが期待される.
より詳細に知りたい場合は,注釈1の「【図解】NTFSファイルシステムの仕組みと構造解析~MFT, 拡張属性, 代替データストリーム~」を読むと理解しやすい.