はじめに
本記事は CyberDefenders(以下リンク参考)の「Ransomed Lab」にチャレンジした際のWalkthroughになります
※本チャレンジについてはRed側のペネトレというよりはBlue側の分析力を問われるものになります。CTFだとRevとかForensicとかの分野のチャレンジが詰まってる感じです。
※今回のチャレンジはMalware解析メインでしたね。
チャレンジ開始前
問題について
以下の画像の「Download Lab Files」に問題ファイルのリンクがあります。
アーカイブファイルで圧縮されているので仮想環境で解凍してください。
※ホストで解凍しないでください。中には本物のマルウェアが入ってたりします。
環境
この CyberDefenders を解く際には仮想環境でマルウェア解析やメモリフォレンジックを行う環境を用意する必要があります。
今回は以下のような環境を用意しました。
- remnux
- Windows 10
今回はWindows 10の環境を利用しました。
主にx64dbgを利用しました。
Q1
What is the md5 hash of the file?
certutil使うだけ。
certutil -hashfile challange.exe md5
Q2
What is the value of entropy?
4n4lDetectorに食わせます。
Q3
What is the number of sections?
DiEに食わせ、エントロピーを確認します。
Q4
What is the entropy of the .text section?
Q3でわかります。
Q5
What is the name of the technique used to obfuscate string?
これはQ9が分かった段階で解けました。
まぁ一般的な名前を連想しても解けます。
Q6
What is the API that used malware allocated memory to write shellcode?
まぁマルウェア解析でよく見るAPIを当てはめればいいです。
Q7
What is the protection of allocated memory?
x64dbgを起動してバイナリを食わせます。BPは以下をとりあえず打っておけばいいです。
- VirtualAlloc系
- VirtualProtect
- WriteProcessMemory
- CreateProcess系
- CreateProcessInternal系
ここら辺は以下の記事を参考にしてみてください。
回してみると、1つ目のVirtualAllocに引っかかるのでEAXに帰ってくるメモリアドレスをFollow Dumpします。
続いて回してみると以下のようなShellcodeが書き込まれます。

この領域をmemory mapで確認します。

Q8
What assembly instruction is used to transfer execution to the shellcode?
Shellcodeが書き込まれる関数(以下だと0x29C4512)がCallされた後をステップ実行します。

その後のjmp命令が呼ばれているのが気になるのでそこまでステップ実行します。

Stackのebp-4を確認するとShellcodeのメモリアドレス(0x2A60630)にジャンプしそうなのが分かります。
Q9
What is the number of functions the malware resolves from kernel32?
JMP命令を踏んだ後すぐに以下のように関数がCallされます。(アドレスが違うのは何回か検証のために実行したのでVirtualAllocのアドレスが変わってるためです。)

CallされてるアドレスをDissasmbleします。

Stackに文字を積んでそうなのが分かります。
これで難読化されていたWindows APIを復号化しているのではないかと予測できます。
kernel32を復号化している箇所を確認します。

次のDLLが復号されているところまで数えることが可能な量なので数えました。

Q10
The malware obfuscates two strings after calling RegisterClassExA. What is the first string?
RegisterClassExAにBPを打ち、最初から回してみます。

そこからステップ実行していくと以下の文字列がStackに現れます。

対象の領域をFollow Dumpします。

先ほど復号したAPIも見えます。
続けて回してみます。

CreateWindowExAのAPIが見えます。隠しWindowでしょうか?
Q11
What is the value of dwCreationFlags of CreateProcessA?
BPはすでに打っているのでこのAPIが呼ばれるまで待ち、Stackを確認します。

CreateProcessAのドキュメントでdwCreationFlagsの箇所が何番目か確認します。

6つ目を見ると08000004が見えます。
以下ドキュメントを確認すると以下のフラグが立っていることを表します。
- CREATE_NO_WINDOW
- CREATE_SUSPENDED
CREATE_SUSPENDEDはリモートプロセスインジェクション系のEvasionでよく使われるフラグですね。
Q12
Malware uses a process injection technique. What is the name of it?
先ほどAPIを復号化していた箇所を見てみると気になるAPIが見つかります。

NtUnmapViewOfSectionが気になりますね。よくホロウさんを召喚するときに使います。
Q13
What is the API used to write the payload into the target process?
他にも気になるAPIがありますね。

よく悪性コードの注入に使われるAPIです。
これもBPを打ってるのでそのまま回します。

Stackに積まれているアドレスをFollow Dumpすると実行ファイル形式の一部のように見えますね。これをホロウするのだと思います。
最後に
動的解析だけで乗り切れたチャレンジでした。Shellcodeが出てきたときはBlobRunner使うかなとか思いましたが、そのまま行っちゃいました。
いいx64dbgの練習問題でしたね。
Malware解析時間溶ける。



