KOSEN SECCON2019Write Up~Forensic編~
はじめに
参加した方はお疲れ様でした。でんしワイバーンというチーム名で参加してた六助と申します。
結果は去年と同じく5位安定でした。もう少し時間あればもう3問くらい解けたかな〜というのが感想でしょうか。
それでは本題ですが、Forensicの250点問題のメモリダンプの問題の解説(?)みたいのを書きます。
バイナリとネットワークに関してはつよつよの人がチームにいるのでまかせてた感じなので個人的にはCryptとForensicとその他お手伝いみたいなのをしていました。
最近フォレンジックを体験する機会がありなんか楽しかったので、今回はこの問題をとりあえず解説していこうと思います。正直正しい解き方とかよくわからんので、何となくこんな感じで解いたよー的なドキュメントです。
実行実行環境はMacbook pro(Catalina)です。
一部Windowsを使用しています。
Step-1
とりあえずファルが置いてあるので、それをダウンロードして展開します。
memory.zip
というファイルですね。これを展開すると
memory_win7.dmp
というファイルが出てきます。
fileコマンドでとりあえず表層解析でもしてみましょうか。
>file memory_win7.dmp memory_win7.dmp: MS Windows 64bit crash dump, full dump, 65422 pages
まぁ、ファイル名から何となく察せますが64bitのWindowsのダンプのようですね。
とりあえず何となくファイルの概要がわかったところで中身の解析をしてみましょう。
Step-2
Volatilityというソフトを使って解析していこうと思います。
まずここでは下準備をしていきます。
Pythonファイルを使う方法もありますがすぐに動かせる環境が欲しかったので今回は、スタンドアローンで実行できるものをダウンロードしました。
ダウンロードはこちらから
ダウンロードしてくると
volatility_2.6_mac64_standalone
的なファイルが出てくると思うので、パスを通すなり、直接指定するなり、エイリアスでどうこうするなり方法でコマンドラインから実行できるようにしておいてください。
とりあえず下準備はこんな感じです。
Step-3
では実際に解析していきましょう。
正直こっからはかなり勘というか察する能力が必要となってきます。ぶっちゃけ全部総当たりで解析すれば出てくるとは思いますが、あの限られた時間ではかなり勘が大事になってきます。
まぁ、何のこっちゃって感じだと思うので実際に解析しながら解説していきます。
まず、何となくファイル名から察せるとは思いますがOSの情報などを取得してみましょう。この後の詳しい解析でプロファイルを指定する必要があるので正しいOSを見極めることがここでは重要となってきます。
まぁ、結論から先に述べるとこれはあまり意味なかった。。。。まぁ、とりあえずやってみましょう。
コマンドラインで先でダウンロードしたvolatilityの実行ファイルを指定して実行していきます。僕の場合は色々ゴニョゴニョして[volatility]で実行できるようにしてあります。
- f オプション:メモリダンプのファイルを指定します。
- imageinfo:メモリダンプの情報を取得します
volatility -f memory_win7.dmp imageinfo
以下結果です。
Suggested Profile(s) : Win8SP0x64, Win81U1x64, Win10x64_14393, Win2012R2x64_18340, Win10x64, Win2016x64_14393, Win2012R2x64, Win2012x64, Win8SP1x64_18340, Win10x64_10586, Win8SP1x64 (Instantiated with Win8SP1x64) AS Layer1 : WindowsAMD64PagedMemory (Kernel AS) AS Layer2 : WindowsCrashDumpSpace64 (Unnamed AS) AS Layer3 : FileAddressSpace (/Users/****/Downloads/memory_win7.dmp) PAE type : No PAE DTB : 0x187000L KDBG : 0xf800031fd070L Number of Processors : 1 Image Type (Service Pack) : 0 KPCR for CPU 0 : 0xfffff800031fed00L KUSER_SHARED_DATA : 0xfffff78000000000L Image date and time : 2018-12-19 05:10:08 UTC+0000 Image local date and time : 2018-12-19 14:10:08 +0900
はい、Windows7がないだとぉ!!ってなってました。まぁ、実行してる環境が悪いのかもしれませんがよくわからんかったのでWindows7のプロファイルを探してくることにしました。
デフォルトで入ってるといいなーと思いつつ調べると公式にこんなページが
github.com
Win7SP1x64
というものがどうやらあるようです。まぁ、ほんとにWindows7なのかどうかはさておきとりあえずこのプロファイルを使って解析を進めていきましょう。
次は、問題文に「怪しいプログラムを開いている」的な記述があったので開いてるプロセスでもみにいきましょうか。
- pstree:プロセスの情報を表示する
- --profile=[profile_name]:プロファイルを定義する
volatility -f memory_win7.dmp --profile=Win7SP1x64 pstree
プロファイルには先ほど調べて見つけたものを使います。実行結果は以下のような感じ。
Name Pid PPid Thds Hnds Time 0xfffffa8000b0d870:csrss.exe 324 308 9 350 2018-12-19 05:08:58 UTC+0000 0xfffffa80003b3060:wininit.exe 372 308 4 81 2018-12-19 05:08:58 UTC+0000 . 0xfffffa8001360200:services.exe 464 372 12 192 2018-12-19 05:08:59 UTC+0000 .. 0xfffffa800143f710:svchost.exe 768 464 19 368 2018-12-19 05:08:59 UTC+0000 ... 0xfffffa80014a9b30:audiodg.exe 944 768 5 125 2018-12-19 05:08:59 UTC+0000 .. 0xfffffa8001571b30:svchost.exe 1156 464 25 305 2018-12-19 05:09:00 UTC+0000 .. 0xfffffa800150ab30:svchost.exe 280 464 12 232 2018-12-19 05:09:00 UTC+0000 .. 0xfffffa8001359060:svchost.exe 260 464 14 333 2018-12-19 05:09:00 UTC+0000 .. 0xfffffa80013ac630:svchost.exe 684 464 7 250 2018-12-19 05:08:59 UTC+0000 .. 0xfffffa8001465b30:svchost.exe 824 464 21 394 2018-12-19 05:08:59 UTC+0000 ... 0xfffffa80016bab30:dwm.exe 1804 824 5 73 2018-12-19 05:09:33 UTC+0000 .. 0xfffffa8001774060:SearchIndexer. 1652 464 13 640 2018-12-19 05:09:40 UTC+0000 ... 0xfffffa80017cc510:SearchFilterHo 1972 1652 5 81 2018-12-19 05:09:40 UTC+0000 ... 0xfffffa80016f5b30:SearchProtocol 1904 1652 7 225 2018-12-19 05:09:40 UTC+0000 .. 0xfffffa80013d6910:svchost.exe 576 464 12 357 2018-12-19 05:08:59 UTC+0000 ... 0xfffffa800184f060:dllhost.exe 2184 576 6 102 2018-12-19 05:10:06 UTC+0000 ... 0xfffffa8001899b30:WmiPrvSE.exe 2268 576 8 115 2018-12-19 05:10:07 UTC+0000 ... 0xfffffa80018867c0:dllhost.exe 2136 576 6 104 2018-12-19 05:10:06 UTC+0000 .. 0xfffffa8000400b30:taskhost.exe 1740 464 9 157 2018-12-19 05:09:33 UTC+0000 .. 0xfffffa80015d32a0:svchost.exe 1236 464 13 159 2018-12-19 05:09:00 UTC+0000 .. 0xfffffa8001469b30:svchost.exe 860 464 30 718 2018-12-19 05:08:59 UTC+0000 .. 0xfffffa80015469e0:spoolsv.exe 1128 464 14 293 2018-12-19 05:09:00 UTC+0000 .. 0xfffffa80013f1750:VBoxService.ex 632 464 11 114 2018-12-19 05:08:59 UTC+0000 . 0xfffffa8001376b30:lsass.exe 480 372 8 489 2018-12-19 05:08:59 UTC+0000 . 0xfffffa800135d060:lsm.exe 488 372 11 151 2018-12-19 05:08:59 UTC+0000 0xfffffa80016e4b30:explorer.exe 1832 1788 42 915 2018-12-19 05:09:33 UTC+0000 . 0xfffffa80017f9750:svch0st.exe 784 1832 5 155 2018-12-19 05:09:49 UTC+0000 . 0xfffffa8001768b30:VBoxTray.exe 2008 1832 14 154 2018-12-19 05:09:34 UTC+0000 . 0xfffffa8001859b30:DumpIt.exe 2216 1832 5 93 2018-12-19 05:10:06 UTC+0000 . 0xfffffa8000a8c8d0:taskmgr.exe 1704 1832 8 137 2018-12-19 05:09:51 UTC+0000 0xfffffa8001325060:winlogon.exe 408 364 6 117 2018-12-19 05:08:58 UTC+0000 0xfffffa80003af250:csrss.exe 380 364 8 223 2018-12-19 05:08:58 UTC+0000 . 0xfffffa8001872b30:conhost.exe 2224 380 3 97 2018-12-19 05:10:06 UTC+0000 0xfffffa8000338740:System 4 0 77 371 2018-12-19 05:08:58 UTC+0000 . 0xfffffa8000b7c7b0:smss.exe 248 4 2 29 2018-12-19 05:08:58 UTC+0000
まぁ、なんかいっぱい出てきましたね。でも実際普段使っている環境だともっといっぱいプロセス走ってると思うので問題として出すためにかなり優しくなっている感じですかね。
ここで必要なのが先ほど言った「勘」というやつです。あまり多くないとはいえ、これだけ全てを試すのは時間がかかってしまいます。なのでここから怪しいプログラムを見つけ出す必要があります。
僕の場合はここで一発で怪しいプログラムを見つけ出せましたが正直ここはなんともいえないところ。間違えたものに目をつけるとドツボにはまります。
僕が目を付けたのはこのプロセスです。
. 0xfffffa80017f9750:svch0st.exe 784 1832 5 155 2018-12-19 05:09:49 UTC+0000
根拠としてはsvchost.exeという、プログラムも存在しておりパッと見怪しそうと思ったと言ったところでしょうか。
. 0xfffffa8001859b30:DumpIt.exe 2216 1832 5 93 2018-12-19 05:10:06 UTC+0000
というのも目には着きましたが
www.aldeid.com
というものを見つけたり、volatolityにはコマンドプロンプトなどの入力履歴を見れたりするものもあるのですが、それを見た際にダンプをとるものだなと判断したのでパスしました。
一応メモ程度に
volatility -f memory_win7.dmp --profile=Win7SP1x64 consoles
実行結果は以下のような感じ
ConsoleProcess: conhost.exe Pid: 2224 Console: 0xffd96200 CommandHistorySize: 50 HistoryBufferCount: 1 HistoryBufferMax: 4 OriginalTitle: C:\Users\assafnativ\Desktop\x64\DumpIt.exe Title: C:\Users\assafnativ\Desktop\x64\DumpIt.exe AttachedProcess: DumpIt.exe Pid: 2216 Handle: 0x58 CommandHistory: 0x361670 Application: DumpIt.exe Flags: Allocated CommandCount: 0 LastAdded: -1 LastDisplayed: -1 FirstCommand: 0 CommandCountMax: 50 ProcessHandle: 0x58 Screen 0x302e80 X:80 Y:300 Dump: DumpIt 3.0.20181116.2 Copyright (C) 2007 - 2017, Matthieu Suiche http://www.msuiche.net Copyright (C) 2012 - 2014, MoonSols Limited http://www.moonsols.com Copyright (C) 2015 - 2017, Comae Technologies FZE http://www.comae.io Copyright (C) 2017 - 2018, Comae Technologies DMCC http://www.comae.io Destination path: \??\C:\Users\assafnativ\Desktop\x64\URESHINO-PC- 20181219-051007.dmp Computer name: URESHINO-PC --> Proceed with the acquisition ? [y/n] y [+] Information: Dump Type: Microsoft Crash Dump [+] Machine Information: Windows version: 6.1.7600 MachineId: 314D1AE0-E007-5142-A12B-A9EF97BE7517 TimeStamp: 131896698080253906 Cr3: 0x187000 KdDebuggerData: 0xfffff800031fd070 Current date/time: [2018-12-19 (YYYY-MM-DD) 5:10:08 (UTC)] + Processing...
何となく目星がついたところで、このファイルのあるアドレスやディレクトリなどを調査していきましょう。アドレスはこの後このファイルのダンプを取ってきて解析したかったので必要になります。
filescanというものを使うとダンプの中に含まれるファイルを探してきてくれます。grepを使って先ほどのファイルに絞って検索していきます
volatility -f memory_win7.dmp --profile=Win7SP1x64 filescan | grep svch0st
結果は以下のような感じ。
0x000000000002b860 6 0 R--r-d \Device\HarddiskVolume2\Users\assafnativ\Desktop\svch0st.exe
デスクトップにあるファイルのようですね。。。ますます怪しい。
続いてこのファイルを解析するためにダンプを取っていきたいと思います。
dunpfilesを使用すると指定したファイルのダンプをとることができます。今回は先ほどファイルのあるメモリのアドレスがわかったのでアドレスを指定していきたいと思います。
- dumpfiles:ファイルのダンプを取得
- --dump-dir [dir]:書き出す場所の指定
- -Q [address]:アドレスを指定
volatility -f memory_win7.dmp --profile=Win7SP1x64 dumpfiles --dump-dir ~/Desktop -Q 0x000000000213e680
これを実行するとデスクトップに
file.None.0xfffffa80017ebaa0.img
なるファイルが書き出されます。
Step-4
それでは先ほど書き出したファイルからsvch0st.exeのファイルを抜き出します。imgファイルで書き出されてしまうのでその中から該当部分のみを抜き出していきます。
今回はFTK Imagerを使用しました。
ですが、ここに関してはMacでやるのは少しめんどくさく手持ちに良さげな環境がなかったので、競技中はチームメイトに託しました。
何をやったかはわからないですが、後からWindows機でやってみたのは以下のような感じです。
FTK imagerを起動しFile->Add Evidence Itemを選択します。
続いてImage Fileを選択し、先ほど書き出したファイルを指定します。
指定できたらFinishを押して完了します。
正しく読み込まれるとこのような画面になると思います。
読み込めていたら次に進みます。左上にあるEvidence Treeというタブに先ほど読み込まれたファイルがあると思いますが、ファイル名の左にあるプラスマークをクリックします。
すると次のような画面になります。
unallocated spaceというのが出てきてますね。これを右クリックしてExport Filesからこれを書き出します。そうすると同じ名前のファイルが書き出されましたね。
ダンプファイルからなんかそれっぽいものが抽出できたので、さっそくこの中身を解析していきましょう。
とりあえず使うのはfileコマンドでしょうか
file unallocated_space
結果は以下のような感じ
unallocated_space: data
まぁ、そうなりますよね。。。ファイル名からなんとなく察せると思いますがうまくデータを整形できてない模様。
じゃあ、stringsコマンドでフラグのようなものを中から見つけていきたいと思います。
strings unallocated_space
かなりいっぱい出力が出てきますがパッと目に着いたのはここら辺
lSystem.Resources.ResourceReader, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089#System.Resources.RuntimeResourceSet PADPADP lSystem.Resources.ResourceReader, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089#System.Resources.RuntimeResourceSet PADPADP ーQ1RGS0lUe29pcmFfaGFfZmxhZ19qeWFuZWVlZX0=
あー、なんか公開鍵とかあるなーと思っていたところチームメイトからbase64怪しくねとの一言。確かに怪しい。。。。
Q1RGS0lUe29pcmFfaGFfZmxhZ19qeWFuZWVlZX0=
ということでこれをデコードしてみると
CTFKIT{oira_ha_flag_jyaneeee}
ん?これはフラグか?と思いつつ入力してみると正解でした。フラグ名に関してはどうなのだろう。。。と思いつつもなんとか解くことができました!
最後に
まとめになりますが、こんな感じでかなりのステップを踏んでフラグにたどり着くことができました。多分3人目だったと思うのでFTK Imagerで解析するとこでつまづかなければもっと早く解けたかな〜と少し悔しいところではあります。
ただ、とてもフォレンジックと言うテーマに相応しいいい問題だったと思うので解いていてとても楽しかったです。
今回は6時間という短い時間でしたが皆さんお疲れ様でした。
時間があればもう少しほかの問題のも書こうかなと思います。