はじめに
6/21(金)に、マクニカ主催の MNCTF に参加してきました!
マルウェア解析お仕事体験!という感じで、シナリオがしっかりしていて楽しいCTFでした。
コーディング不要でOSINTとツールだけで解ける問題も多いので、コーディングに苦手意識がある人にもおすすめです(?)
作問者が作った自作マルウェアを解析したりするCTFで、本格的でわくわくしながら解くことができました!
過去問が公開されているので気になる方はぜひトライしてみてください。
シナリオ
CSIRTに、ランサムウェアに暗号化されてファイルが開けないと連絡がきた。
バックアップは取っていない。さてどうしよう?
問題
複数の問題がこのシナリオにそっていて、順番に解くことで攻撃者の情報を得たり、ファイル復号のためのヒントが得られたりします。
今回必死に解きすぎてかなり適当なWriteupとなっておりますがご容赦ください。
マルウェアの通信先
マルウェアの実行ファイルをstrings
コマンドで確認。
$ strings ---.exe | grep http
攻撃者のBitcoinウォレットは?
ランサムノートにURLがあるので、見てみよう。
onion.pet
というプロキシを使うと、Torブラウザを使わずに安全にTorに接続することが出来る。
https://----.onion
の末尾に.pet
を付けるだけで良い。
ダークネット上のWebサイトが見れました。ビットコインアドレスが書いてありますね。
マルウェアのBitcoinウォレットの調べ方
ARKHAMというサイトで調べる。
ブロックチェーンインテリジェンスというものらしいです。
bitcoinアドレスを入れるとわかる
犯罪者が使っているかどうかなどもわかるっぽい?
ホスト名の確認
マルウェア amrw.exe
は特定の文字列がコンピュータ名に含まれていないと発動しないようです。
その文字列は何か答えてください。
strings
で解いたのですが、正攻法はリバースエンジニアリングとのこと。
C言語の gethostname
というところを見に行くと良い。
Ghidra
を使う。
復号1:パスワード
パスワードファイルを復号しましょう。
Webサイトに100Byte未満であれば復号できるとあるので復号。
こういった復号してくれるサービス?はあるが、普通のランサムウェアの場合はバイトではなくファイルの個数が制限されるようです。
使われている暗号化アルゴリズムは?
Q. amrw.exeが利用している暗号化アルゴリズムを答えてください。
Ghidra
などでリバースエンジニアリングして、暗号化されている部分を特定し、そのコードをchatGPTに聞くとRC4と分かる。
mod256
で分かる人もいる。
本当のマルウェアの場合、VirtuaTotalというサイトにハッシュを入れるとわかる。
ファイルアップロードでも良いし、マルウェアのハッシュでも良い。暗号化方式などの情報が分かる。
復号2:議事録
RC4は先頭から暗号化されるブロック暗号なので、先頭だけ切り取って復号化することが出来る。
バイナリエディタで100byteまでにしてアップロードする
復号3:部分的に暗号化されたファイル
ビットイメージを見ると、暗号化されている部分は黒くなる
binwalk -e
を使うと、
最近のランサムウェアはファイルの先頭ファイルだけ暗号化することが多い。
時間かかると見つかってしまうし、先頭が暗号化されていればほとんどの人が復号することが出来ないから。
部分的に復元するという手法をやる。
暗号鍵
やはら君はたまたまランサムウェアに感染したタイミングでパケットキャプチャを取っていた。
ransom_traffic.pcapng
パケットを解析し、暗号化鍵を答えてください。
ヒント)すべてのバイトがそのまま鍵とは限りません。
とりあえずstrings
コマンドで見てみます。赤い部分が怪しい?
└─$ strings ransom_traffic.pcapng
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz (with SSE4.2)
64-bit Windows 10 (20H2), build 19042
Dumpcap (Wireshark) 4.2.4 (v4.2.4-0-g1fe5bce8d665)
\Device\NPF_{8CC47053-6D41-4018-8B32-8B93281D768C}
Ethernet0
64-bit Windows 10 (20H2), build 19042
amrwc2 angrymusu
amrwc2 angrymusu
GET /amrwc2/ HTTP/1.1
Connection: Keep-Alive
User-Agent: A WinHTTP Example Program/1.0
Host: amrwc2.angrymusu.me
HTTP/1.1 200 OK
Server: nginx/1.25.4
Date: Wed, 19 Jun 2024 02:28:52 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 40
Connection: keep-alive
X-Powered-By: PHP/8.1.29
- 0000002c9e688c523f5dea24513ef54848a136e7
- ENEBELFFEOEJELEJDADJDEDFCACACABM
- ENEBELFFEOEJELEJDADJDEDFCACACABM
- ENEBELFFEOEJELEJDADJDEDFCACACABM
- ENEBELFFEOEJELEJDADJDEDFCACACABM
- ENEBELFFEOEJELEJDADJDEDFCACACABM
Counters provided by dumpcap
Webサイトを何回かリロードすると変わる文字列から推測するらしい。
9e688c523f5dea24513ef54848a136e7
一部が暗号鍵
正攻法は静的解析とのこと、、、
復号4:ボーナスはいくら?
↑でゲットした暗号鍵を使ってRC4をciberchefで復号してダウンロードするとできる
暗号化対象のディレクトリは?
静的解析をしないと絶対に解けない問題とのこと
暗号化対象のディレクトリは?
暗号化対象のディレクトリは複数あるようです。検体の中の、パスを取得する関数の定数の数値を調べて、十進数で答えてください。
Ghidraなどで静的解析をする。
SHGetFolderPath
の第2引数をみると2,5と書いてあるので、
デスクトップと何かが暗号化されるディレクトリだということがわかる。
犯罪者グループの組織名
リークサイト
/confirm/id=---
の部分のidを変えるとわかる
最近あった事件
blockchainエクスプローラーを使うと、暗号通貨の取引履歴やウォレットアドレスが特定できる
マルウェア特定
この暗号化されたファイルからマルウェアの名称を調査して答えてください。
ググるとJPSIRTブログが出てくる LODEINFO
カナリートークン
ファイルに埋め込んでおいて、開くとhttpが飛ぶ仕組み
webサーバ上で小さい画像をurlで挿入する。これを入れておくと、httpが毎回飛ぶのでサーバにログがたまっていく。
docx -> zip
find . -type f -print0 | xargs -0 strings | grep -oP 'http[s]*://[^ ]+'
ビーコン
アクセス者
クラウドストレージに格納されている機密文書。
アクセスログからユーザ名を特定する。
Json to CSV というファイルで表にして見えるようにする
EDRのログ
どこに機密文書が保存されたのか調査する。
さいごに
途中から解説を聞きながらメモしただけなので適当になっていますが、
とても楽しいCTFだったので社内や友人とまた解き直したいなと思います!
来年また絶対に参加したい~