日記帳

WE NEED メーデー 睡眠を!

Defcon DFIR CTF 2019 - Memory Forensics - をやる

Defcon DFIR CTF 2019で公開されている問題のうち、Memory Forensicsだけ片付けたので解答とかをメモ。書いていることが間違ってたらご指摘下さい……

f:id:mot_skmt:20190924020544p:plain
Defcon DFIR CTF 2019

Memory ForensicsについてはWindowsメモリイメージの調査なのでvolatilityを使って進めた。Memory Forensicsだけ手を付けたのは一番手っ取り早そうだったから。

get your volatility on (5)

What is the SHA1 hash of triage.mem?

提供されているメモリイメージのSHA1ハッシュがフラグ。Windows環境でイメージを読んでいたのでcertutilコマンドでハッシュ値を出力した。 f:id:mot_skmt:20190924022147p:plain

flag<c95e8cc8c946f95a109ea8e47a6800de10a27abd>

pr0file (10)

What profile is the most appropriate for this machine? (ex: Win10x86_14393)

メモリイメージ取得元のプロファイルがフラグ。imageinfoプラグインで調査する。

f:id:mot_skmt:20190924022739p:plain

複数の候補が出てくるが、こういうのは大抵先頭に来ているものが一番それらしいのだろうということで投入してみたら通った。

flag<Win7SP1x64>

以降、volatilityで調査する際のプロファイルにはWin7SP1x64を用いている。

hey, write this down (12)

What was the process ID of notepad.exe?

notepad.exeのプロセスIDがフラグ。pstreeで調査した。

f:id:mot_skmt:20190924023515p:plain

flag<3022>

wscript can haz children (14)

Name the child processes of wscript.exe.

wscript.exeの子プロセスの名前がフラグ。先ほどpstreeで調査した結果にwscript.exeも存在した。

f:id:mot_skmt:20190924023828p:plain

子プロセスは 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で調査する。 f:id:mot_skmt:20190924024333p:plain

複数の結果が出てくるが、ローカルアドレスの箇所から 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がとても怪しい名前をしている。

f:id:mot_skmt:20190924024943p:plain

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.exeEXCEL.EXEVCRUNTIME140.dllを読み込んでいることがわかる。

f:id:mot_skmt:20190924025933p:plain

結局、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ハッシュを取得する。

f:id:mot_skmt:20190924030356p:plain

flag<690ea20bc3bdfb328e23005d9a80c290>

lm-get bobs hash (24)

What is the LM hash of bobs account?

bobさんのアカウントのLMハッシュがフラグ。SAMから抽出するのかなーと思いつつ調べたらすぐに出てきた。

www.aldeid.com

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

f:id:mot_skmt:20190924031352p:plain

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

f:id:mot_skmt:20190924031923p:plain

flag<PAGE_READONLY>

more vads?! (25)

What protections did the VAD starting at 0x00000000033c0000 and ending at 0x00000000033dffff have?

同じくvadinfoの結果からStart : 0x00000000033c0000, End : 0x00000000033dffffで探すと見つかる。 f:id:mot_skmt:20190924032050p:plain

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でコマンドラインの実行履歴を確認した。

f:id:mot_skmt:20190924032451p:plain

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を実行していたことがわかる。

f:id:mot_skmt:20190924032633p:plain

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で出力結果内を検索すると該当するファイルの情報がわかった。 f:id:mot_skmt:20190924212132p:plain

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.exe10.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など、積み残している他の問題にもそのうち手を付けていきたいところ。