はじめに
本記事は 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解析時間溶ける。