日々のあれやこれやの詰め合わせ

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を選択します。
f:id:rokusuke345:20191029200925p:plain

続いてImage Fileを選択し、先ほど書き出したファイルを指定します。
f:id:rokusuke345:20191029201153p:plain

指定できたらFinishを押して完了します。

正しく読み込まれるとこのような画面になると思います。
f:id:rokusuke345:20191029201254p:plain

読み込めていたら次に進みます。左上にあるEvidence Treeというタブに先ほど読み込まれたファイルがあると思いますが、ファイル名の左にあるプラスマークをクリックします。

すると次のような画面になります。
f:id:rokusuke345:20191029201517p:plain

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時間という短い時間でしたが皆さんお疲れ様でした。
時間があればもう少しほかの問題のも書こうかなと思います。