仙台CTF2017のday1を見てみた
フォレンジック学習を探していると、仙台CTFさんの資料が日本語の学習資料として良いと聞いたので、学習していく。
仙台CTF2017の資料を用いてフォレンジックを学ぶ
仙台CTFさんは毎年勉強会を開いていて、良さそうな感じなので行きたいです(行ったことは無い)。フォレンジックの資料と演習用のファイルがあるのは2017だけ。
ひとまず資料に沿って演習用のファイルを進めるためには2種類のツールが必要である。
・Volatility
・Plaso/log2timeline
仙台CTF2017のサイトにはこの2つのツールが入っている演習用のイメージが用意されているが、自分はKali Linuxで演習を進めていく。KaliにはVolatilityはデフォルトでインストールされているのが、Plasoは入れる必要がある。
と以上のように当初はいきがっていたがKaliでのPlasoの実行が上手くいかず演習2がKali Linuxで出来なかった。どなたかKali LinuxでのPlasoを教えてください。
何か面白いしこの際なので演習2からは何事もなくUbuntuでいく。
Kaliへのインストール
$ sudo apt install plaso
これだけで必要なものがインストールできる。(と思っていた)
コマンドライン上でlog2timeline.py , psort.py のコマンドの実行が確認が今回の演習は進められる。(とでも思ったか)
Ubuntuへのインストール
事前準備ができたので演習に入っていく。ここではメモリフォレンジックとタイムライン解析の二つの演習がある。
仙台CTFのページの資料を見れば色々書いてあると思うが、一応貼っておく。
1.メモリフォレンジック(Kali)
実習資料1に沿って進めていく。lab01.zipをDL。解凍すると、memdump.memというメモリダンプファイルが出てくる。これを解析していく。
色々背景とか補足情報とかあるけれど詳細は実際のファイルを確認してください。
ここではメモリフォレンジックで有名なツール「Volatility」を用いる。
今回主に使うコマンドを示しておく。
volatility -f file imageinfo #メモリダンプファイルの様々な情報を表示
volatility --tz=country --proflie=OS -f file plugin
plugin:
netscan 調査開始ネットワーク接続状況の確認
pstree 不審プロセスの確認
pslist 実行中のプロセス一覧を表示
yarascan --yara-rules="検索文字列"
"{hex hex}"
dlllist -p pid 不審プロセスのパスの確認
目的1
感染PCのメモリイメージファイル「memdump.mem」を、Volatility Framework の「netscan」プラグインで解析し、プロキシサーバ(192.168.100.50:3128)と通信している「Pid」(プロセスID)を全て列挙する。
やってみる
i.とりあえずメモリのおおまかな情報を確認する
$ volatility -f memdump.mem imageinfo
Suggested Profile(s) : Win7SP1x86_23418, Win7SP0x86, Win7SP1x86_24000, Win7SP1x86
とりあえずは、今回のOSバージョンはWin7SP1x86_23418で進めていこうと思う。いくつか何が理由なのか分からないが問題があれば他のに変えてその都度試そうと思う。
ii.ネットワーク通信をしているプロセスを確認するために「netscan」を使う
$ volatility --profile=Win7SP1x86_23418 -f memdump.mem netscan
もう少し見やすくしてみると、
$ volatility --profile=Win7SP1x86_23418 -f memdump.mem netscan | grep 192.168.100.50:3128
ということで目的のプロキシサーバ(192.168.100.50:3128)と通信している「Pid」は
3012 , 2184 , 1124
目的2
先ほど見つけた3つのプロセスがインターネットと通信していることが分かった。
感染 PC のメモリイメージファイル「memdump.mem」を、Volatility Framework の「pstree」プラグイン、「yarascan」プラグイン、および「dlllist」プラグインで解析し、C2サーバ「c2.hacker.com」の文字列を含むなどマルウェアの可能性が高い「プロセス名」、「Pid」、および「イメージパス」を特定する。同じファイルを使用。
やってみる
--profileの指定は先ほどと同様のWin7SP1x86_23418でいく。まず3つのプロセスはそれぞれ、
3012 thunderbird.ex
2184 svchost.exe
1124 svchost.exe
である。thunderbird.exはメーラーのThunderbirdのプロセスである。なので、怪しいのは同じ名前の二つのsvchost.exeのどちらかではないかと推測できる。svchost.exeが複数あって、Windows/System32以下以外のsvchost.exeは大体マルウェアというのは割りと有名な話だったりする。
i.まずは「pstree」を試す
$ volatility --profile=Win7SP1x86_23418 -f memdump.mem pstree
この結果の見方を簡単に説明すると、行ごとに先頭が . 無しのプロセスの元で . 有りのプロセスが動き、 . の元で .. のプロセスが動いている。というように階層的なプロセスの関係が示されている。svchost.exeが二つあり、Pid 1124のsvchost.exeはwininit.exeのservices.exeの元で動いている。これらはどちらもWindowsの重要なプロセスであり、通常のプロセスであると思われる。Pid 2184のsvchost.exeは単独?で動いているプロセスであるので怪しい。
ii. C2サーバ「c2.hacker.com」の文字列を含むプロセスを「yarascan」で探す
$ volatility --profile=Win7SP1x86_23418 -f memdump.mem yarascan --yara-rules="c2.hacker.com"
いくつか出力されたが全てPid 2184のsvchost.exe内のものであり、やはり見立て通りPid 2184のsvchost.exeがマルウェアであるのが濃厚か。
iii. 怪しいsvchost.exeのイメージパスを取得するために「dlllist」プラグインを利用
イメージパスとは、起動中プロセスの「実行ファイルのフルパス名」のこと
$ volatility --profile=Win7SP1x86_23418 -f memdump.mem dlllist -p 2184
必要なところだけをスクショした。
この結果より求めるイメージパスはC:\Users\user01\Desktop\ 請求書\svchost.exeである。
以上より
マルウェアの可能性が高いプロセスについて
プロセス名:svchost.exe
Pid:2184
イメージパス:C:\Users\user01\Desktop\ 請求書\svchost.exe
2.タイムライン解析(Ubuntu)
実習資料2を見て進める。lab02.zipをDL。
解凍すると、diskimage.ddというディスクイメージを解析する。
ここではPlasoのlog2timeline.py , psort.pyを利用する。
[コマンド書式]
①log2timeline --parsers 「プラグイン名」「出力ファイル名」「解析対象ファイル名」
②psort-z「タイムゾーン」-o 「出力形式」-w「出力ファイル名」「plasostorage」「期間指定」
目的1
感染 PC のディスクイメージファイル「diskimage.dd」を、log2timeline の「filestat」パーサーで解析し、インシデントが発生した当日である「2017 年 10 月 7 日(土)0:00~24:00」のタイムラインを作成。
次に、作成したタイムラインから、不審ファイル「C:\Users\user01\Desktop\ 請求書\sv
chost.exe」が起動した時刻である「2017 年 10 月 7 日(土)11:51:23」 の直前 1 分間に注目し、次の2点を確認。
① 「svchost.exe」以外の不審なプログラム(.exe)のファイル名
② 利用者が操作していた可能性があるプログラム名 また、上記の確認結果を踏まえ、感染原因を推測。
やってみる
i.「filestat」パーサーを使ってみる
$ log2timeline.py --persers filestat db.plaso diskimage.dd
ii. db.plasoからタイムラインのテキストファイルを作成する。
先ほどの処理でplaso storageを作成したので、それを基にタイムラインのテキストファイルする。今回はタイムゾーンをJapan、指定通り2017 年 10 月 7 日(土)0:00~24:00のタイムラインを作成する。
$ psort.py -z Japan -o tln -w timeline.txt db.plaso "date < '2017-10-07 24:00:00' and date > '2017-10-07 00:00:00' "
あれ何かエラーが出ましたね?タイムライン無し?
なんかオカシイな。と思ったので、資料を少し見てみると
ということで改めてtimeline.txtを出力。
$ psort.py -z Japan -o tln -w timeline.txt db.plaso "date < '2017-10-07 15:00:00' and date > '2017-10-06 15:00:00' "
$ cat timeline.txt | less
やっとタイムラインに出会えた。
iii. タイムラインの解析
svchost.exeがどこで動いているのか見ていく。
$ cat timeline.txt | grep svchost.exe
2017-10-07 11:51:23(UTC)にsvchost.exeが起動して動作していることが分かったので、11:51あたりに何があったか見ていく。
$ cat timeline.txt | grep 11:51
なんとなく、請求書.exe を実行してしまったせいで.jsonが何かダウンロードしてきて、DLしたものをLhaplasで解凍して、出てきたファイルがsvchost.exeで実行されたというところだろうか。
また、ファイル実行以前にはThunderbirdで何かやっているようなので、今回の感染元はメールではないだろうか。
ここで請求書.exe という明らかに怪しいものを見つけたので、他にも怪しい.exeがあるか見てみる。
$ cat timeline.txt | grep .exe
怪しいNonCritical_iexplore.exe というのが見えるが今回はディレクトリのようだ。一応ウイルス認定されてる?実行ファイルらしい?
タイムラインを見て色々考えたが上手くまとめられていない。
ここで資料のまとめを見てみる。
タイムライン解析の結果を踏まえ、感染原因として、次の可能性を考えることができます。
利用者が、不審メールに添付ファイルされていた圧縮ファイルを開封したことで、Lhaplus がデスクトップにフォルダ「請求書」を作成し、圧縮ファイルを解凍した。
利用者が「請求書」に格納されていた「請求書.exe」を実行した。 「請求書.exe」、ダウンロードなどであり、同フォルダに遠隔操作型マルウェア「svchos t.exe」を作成・実行した。
なお、タイムラインから、本当に「不審メール」を受信していたのか断定できません。今後、感染 PC のメールファイルやメールサーバのログの確認、利用者への聞き取り調査など
を行う必要があります。
ということで
回答例
① 不審なプログラムのファイル名(svchost.exe 以外のもの)
/Users/user01/Desktop/ 請求書/請求書.exe
② 利用者が操作していた可能性があるプログラム名
Thunderbird.exe、 Lhaplus.exe
[感染原因の推測]
利用者が不審メールの添付ファイル「請求書.exe」を開封したことにより感染した。
NonCritical_iexplore.exeには触れられていなかったので、別に気にするものではないのだろうか。
他にも資料には時系列順に実行ファイルについてまとめた表などがあるので、この演習の中身が気になった場合は目を通して頂きたい。
最後に
これからちゃんとフォレンジックする