Defcon DFIR CTF 2019 - Memory Forensics - をやる
Defcon DFIR CTF 2019で公開されている問題のうち、Memory Forensicsだけ片付けたので解答とかをメモ。書いていることが間違ってたらご指摘下さい……
Memory ForensicsについてはWindowsメモリイメージの調査なのでvolatilityを使って進めた。Memory Forensicsだけ手を付けたのは一番手っ取り早そうだったから。
- get your volatility on (5)
- pr0file (10)
- hey, write this down (12)
- wscript can haz children (14)
- tcpip settings (18)
- intel (18)
- i <3 windows dependencies (20)
- mal-ware-are-you (20)
- lm-get bobs hash (24)
- vad the impaler (25)
- more vads?! (25)
- vacation bible school (25)
- thx microsoft (25)
- lightbulb moment (35)
- 8675309 (35)
- whats-a-metasploit? (50)
get your volatility on (5)
What is the SHA1 hash of triage.mem?
提供されているメモリイメージのSHA1ハッシュがフラグ。Windows環境でイメージを読んでいたのでcertutilコマンドでハッシュ値を出力した。
flag<c95e8cc8c946f95a109ea8e47a6800de10a27abd>
pr0file (10)
What profile is the most appropriate for this machine? (ex: Win10x86_14393)
メモリイメージ取得元のプロファイルがフラグ。imageinfoプラグインで調査する。
複数の候補が出てくるが、こういうのは大抵先頭に来ているものが一番それらしいのだろうということで投入してみたら通った。
flag<Win7SP1x64>
以降、volatilityで調査する際のプロファイルにはWin7SP1x64を用いている。
hey, write this down (12)
What was the process ID of notepad.exe?
notepad.exeのプロセスIDがフラグ。pstreeで調査した。
flag<3022>
wscript can haz children (14)
Name the child processes of wscript.exe.
wscript.exeの子プロセスの名前がフラグ。先ほどpstreeで調査した結果にwscript.exeも存在した。
子プロセスは UWkpjFjDzM.exe
。
flag<UWkpjFjDzM.exe>
tcpip settings (18)
What was the IP address of the machine at the time the RAM dump was created?
調査端末でメモリイメージを取得した時点でのIPアドレスがフラグ。netscanで調査する。
複数の結果が出てくるが、ローカルアドレスの箇所から 10.0.0.101
が割り振られていることがわかる。
flag<10.0.0.101>
intel (18)
Based on the answer regarding to the infected PID, can you determine what the IP of the attacker was?
怪しいプロセスのPIDがフラグ。それっぽいプロセスというと先ほどwscpript.exe
の子プロセスとして登場したUWkpjFjDzM.exe
がとても怪しい名前をしている。
netscanの結果から UWkpjFjDzM.exe
を探すと、10.0.0.106
と通信を張っていることがわかる。
flag<10.0.0.106>
i <3 windows dependencies (20)
What process name is VCRUNTIME140.dll associated with?
VCRUNTIME140.dll
と関連しているプロセス名がフラグ。dlllist
で各プロセスが読み込んでいるDLLを確認するとOfficeClickToRun.exe
やEXCEL.EXE
がVCRUNTIME140.dll
を読み込んでいることがわかる。
結局、OfficeClickToRun.exeのプロセス名として出てきたOfficeClickToRがフラグだった。この問題についてはよくわかっていない。
flag<OfficeClickToR>
mal-ware-are-you (20)
What is the md5 hash value the potential malware on the system?
マルウェアっぽいやつというとUWkpjFjDzM.exe
なので、メモリイメージからprocdumpでダンプしてMD5ハッシュを取得する。
flag<690ea20bc3bdfb328e23005d9a80c290>
lm-get bobs hash (24)
What is the LM hash of bobs account?
bobさんのアカウントのLMハッシュがフラグ。SAMから抽出するのかなーと思いつつ調べたらすぐに出てきた。
hivelistでSAMとSYSTEMのオフセットを得たあとに、hashdumpでオフセット値をもとにパスワードハッシュをダンプすることができるとのこと。
PS E:\> vol hivelist -f .\Triage-Memory.mem --profile=Win7SP1x64 Volatility Foundation Volatility Framework 2.6 Virtual Physical Name ------------------ ------------------ ---- 0xfffff8a003ad2010 0x0000000125598010 \??\C:\System Volume Information\Syscache.hve 0xfffff8a00469c010 0x00000000a779d010 \SystemRoot\System32\Config\DEFAULT 0xfffff8a00000e010 0x00000000a9740010 [no name] 0xfffff8a000024010 0x00000000a97cb010 \REGISTRY\MACHINE\SYSTEM 0xfffff8a000053320 0x00000000a977a320 \REGISTRY\MACHINE\HARDWARE 0xfffff8a0000fe010 0x00000000a9625010 \SystemRoot\System32\Config\SECURITY 0xfffff8a0004db010 0x00000000a8599010 \Device\HarddiskVolume1\Boot\BCD 0xfffff8a00054b010 0x00000000a7fe3010 \SystemRoot\System32\Config\SOFTWARE 0xfffff8a000e66010 0x000000009ce84010 \SystemRoot\System32\Config\SAM 0xfffff8a000efe410 0x000000009be5c410 \??\C:\Windows\ServiceProfiles\NetworkService\NTUSER.DAT 0xfffff8a000f43010 0x000000009ba60010 \??\C:\Windows\ServiceProfiles\LocalService\NTUSER.DAT 0xfffff8a00125d010 0x000000009635a010 \??\C:\Users\Bob\AppData\Local\Microsoft\Windows\UsrClass.dat 0xfffff8a0012ea010 0x0000000096937010 \??\C:\Users\Bob\ntuser.dat
SYSTMEのオフセットは0xfffff8a000024010でSAMのオフセットは0xfffff8a000efe410。この情報をもとにhashdumpでパスワードハッシュを調査する。
PS E:\> vol hashdump -y 0xfffff8a000024010 -s 0xfffff8a000e66010 -f .\Triage-Memory.mem --profile=Win7SP1x64 > hash.txt
BobのLMハッシュはaad3b435b51404eeaad3b435b51404ee
とわかった。
flag<aad3b435b51404eeaad3b435b51404ee>
vad the impaler (25)
What protections does the VAD node at 0xfffffa800577ba10 have?
VAD node 0xfffffa800577ba10のデータ保護の状態がフラグ。 vadinfoの結果から0xfffffa800577ba10で検索した。
PS E:\> vol -f .\Triage-Memory.mem --profile=Win7SP1x64 vadinfo > vadinfo.txt
flag<PAGE_READONLY>
more vads?! (25)
What protections did the VAD starting at 0x00000000033c0000 and ending at 0x00000000033dffff have?
同じくvadinfoの結果からStart : 0x00000000033c0000, End : 0x00000000033dffffで探すと見つかる。
flag<PAGE_NOACCESS>
vacation bible school (25)
There was a VBS script run on the machine. What is the name of the script? (submit without file extension)
実行されていたVBScriptファイルの名前がフラグ。wscript.exeがいたのでコマンドラインにスクリプトファイルの名前も出てくるとあたりをつけて調査。cmdscanでコマンドラインの実行履歴を確認した。
flag<vhjReUDEuumrX>
thx microsoft (25)
An application was run at 2019-03-07 23:06:58 UTC, what is the name of the program? (Include extension)
実行履歴に関する内容を問われている。2019-03-07 23:06:58 UTCに実行されたアプリケーションの名前がフラグ。
shimcacheプラグインでShimcacheを分析することができるのでこれを使って調査するが、出力結果の件数が結構多いのでテキストに出力したほうがわかりやすい。
2019-03-07 23:06:58
で検索するとSkype.exeを実行していたことがわかる。
flag<Skype.exe>
lightbulb moment (35)
What was written in notepad.exe in the time of the memory dump?
何を言っているのかよくわからない……ので、とりあえずnotepad.exeのダンプを取った。 notepad.exeのPIDはpstreeの結果から確認できる。
Name Pid PPid Thds Hnds Time -------------------------------------------------- ------ ------ ------ ------ ---- 0xfffffa8003de39c0:explorer.exe 1432 1308 28 976 2019-03-22 05:32:07 UTC+0000 ~中略~ . 0xfffffa80054f9060:notepad.exe 3032 1432 1 60 2019-03-22 05:32:22 UTC+0000
notepad.exeのPIDが3032とわかったのでメモリイメージからダンプする。 その後、「メモリイメージ取得時に書き込んでいた内容が残っているのか?」と思ったのでとりあえずstringsで文字列を吐き出した。
PS E:\> vol -f .\Triage-Memory.mem --profile=Win7SP1x64 procdump -D ./ -p 3032 Volatility Foundation Volatility Framework 2.6 Process(V) ImageBase Name Result ------------------ ------------------ -------------------- ------ 0xfffffa80054f9060 0x00000000ff6b0000 notepad.exe OK: executable.3032.exe PS E:\> strings .\3032.dmp > strings_notepad_exe.txt
色々と文字列は出てくるが、何が書かれているかというとなんとも言えない。
ところどころにflagという文字列が出てきたところでこれがCTFであることを思い出し、フラグフォーマットのflag<
で検索した。するとflag<REDBULL_IS_LIFE>
という文字列が見つかり、これがフラグだった。
flag<REDBULL_IS_LIFE>
8675309 (35)
What is the shortname of the file at file record 59045?
NTFSはMFTでファイルを管理する際にファイル名が8文字以上もしくは特殊な文字が入っている場合、8文字以内に無理やり収めたファイル名をつけて$FILE_NAMEに保存する特性を持っている。
例えば、This is File.txt
という名前のファイルはTHISIS~1.txt
のように「本来のファイル名先頭6文字+~1+拡張子」という形で$FILE_NAMEにファイル名が保存されるはず(自信がない……)。
で、この無理やり短くされたファイル名が"shortname"と呼ばれている。つまり、MFTのエントリが59045のファイルのshortnameがフラグと思われる。
とりあえずメモリイメージからMFTの情報を調べる。
PS E:\> vol -f .\Triage-Memory.mem --profile=Win7SP1x64 mftparser > mftparser.txt
59045
で出力結果内を検索すると該当するファイルの情報がわかった。
shortnameはEMPLOY~1.XLS
となっている。ちなみに本来のファイル名はEmployeeInformation.xlsx
だった。
flag<EMPLOY~1.XLS>
whats-a-metasploit? (50)
This box was exploited and is running meterpreter. What PID was infected?
メモリイメージを取得した端末ではmeterpreterが動いており、そのPIDがフラグとなっている。
今まで見てきた限りmeterpreter.exeみたいなものは見つかっていないため、別の名前にリネームされている可能性が高い。そしてmeterpreterかどうかはわからないが、今まで得られた情報から怪しいプロセスというと UWkpjFjDzM.exe
(PID:3496) がダントツで怪しい。
改めてnetscanの実行結果を見てみると、 UWkpjFjDzM.exe
が10.0.0.106:4444
に対して通信していることがわかる。
Offset(P) Proto Local Address Foreign Address State Pid Owner Created 0x13e057300 UDPv4 10.0.0.101:55736 *:* 2888 svchost.exe 2019-03-22 05:32:20 UTC+0000 0x13e05b4f0 UDPv6 ::1:55735 *:* 2888 svchost.exe 2019-03-22 05:32:20 UTC+0000 ~中略~ 0x13e397190 TCPv4 10.0.0.101:49217 10.0.0.106:4444 ESTABLISHED 3496 UWkpjFjDzM.exe
4444は、Metasploitの攻撃側サーバが接続を待ち受けるデフォルトポート番号である。
公式ドキュメントから言及されている箇所を見つけることができなかったが、以下の記事などでも紹介されている。 www.atmarkit.co.jp
ということで、UWkpjFjDzM.exe
がmeterpreterの可能性がとても高くなった。プロセスダンプでも取ってVirusTotalに投げ込めば更に確実だがそこまでするのも面倒なのでUWkpjFjDzM.exe
のPIDを回答欄に入れたところ、やはりこれがフラグだった。
flag<3496>
感想
難易度がそこまで高くないこともあり、わりとさくっと解けたので気持ちよかった。弱いセキュリティの人なので本物のCTFだとまず解けずに爽快感が味わえない。
Linux Forensicsなど、積み残している他の問題にもそのうち手を付けていきたいところ。