【CyberDefenders】Ransomed Lab【Walkthrough】

:::note info
これは[かろ噴水・ゆるゆる Advent Calendar 2024](https://adventar.org/calendars/10888)と[はじめてのアドベントカレンダー Advent Calendar 2024](https://qiita.com/advent-calendar/2024/first-time)の23日目の記事です。
:::

# はじめに
本記事は ___CyberDefenders___（以下リンク参考）の「__Ransomed Lab__」にチャレンジした際のWalkthroughになります

https://cyberdefenders.org/blueteam-ctf-challenges/ransomed/

※本チャレンジについてはRed側のペネトレというよりはBlue側の分析力を問われるものになります。CTFだとRevとかForensicとかの分野のチャレンジが詰まってる感じです。
※今回のチャレンジはMalware解析メインでしたね。

# チャレンジ開始前
## 問題について
以下の画像の「__Download Lab Files__」に問題ファイルのリンクがあります。
アーカイブファイルで圧縮されているので仮想環境で解凍してください。
※ホストで解凍しないでください。中には本物のマルウェアが入ってたりします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/79108f5e-e774-cb23-530f-15140dc315bb.png)

## 環境
この ___CyberDefenders___ を解く際には仮想環境でマルウェア解析やメモリフォレンジックを行う環境を用意する必要があります。
今回は以下のような環境を用意しました。
+ [remnux](https://remnux.org/)
+ Windows 10

今回はWindows 10の環境を利用しました。
主に`x64dbg`を利用しました。

# Q1
__What is the md5 hash of the file?__

`certutil`使うだけ。
```:コマンド
certutil -hashfile challange.exe md5
```
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/04ad23f0-fe71-9f01-75fa-bce9af91f276.png)

# Q2
__What is the value of entropy?__

`4n4lDetector`に食わせます。

https://github.com/4n0nym0us/4n4lDetector

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/a9b23296-7b65-0bbe-cbab-fd61cc56f14b.png)

# Q3
__What is the number of sections?__

DiEに食わせ、エントロピーを確認します。

https://github.com/horsicq/Detect-It-Easy

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/db65fb98-3d0d-b946-9bb9-030ba78edd00.png)
4つセクションがありますね。

# 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系

ここら辺は以下の記事を参考にしてみてください。

https://qiita.com/schectman-hell/items/d9c496e027d759e2c9bb

回してみると、１つ目のVirtualAllocに引っかかるので`EAX`に帰ってくるメモリアドレスを`Follow Dump`します。
続いて回してみると以下のようなShellcodeが書き込まれます。
![shellcode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/6f5501ff-d955-8402-de06-ae3ccd93fb7f.png)
この領域をmemory mapで確認します。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/1b0f3544-1a65-7b76-b240-3539a2004254.png)

# Q8
__What assembly instruction is used to transfer execution to the shellcode?__

Shellcodeが書き込まれる関数（以下だと`0x29C4512`）がCallされた後をステップ実行します。
![8-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/8c3ede7d-3b14-e578-220a-4797a1b59749.png)
その後の`jmp`命令が呼ばれているのが気になるのでそこまでステップ実行します。
![8-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/a7353e19-0fd1-c71a-44ac-aa439e25641b.png)
Stackの`ebp-4`を確認するとShellcodeのメモリアドレス（`0x2A60630`）にジャンプしそうなのが分かります。

# Q9
__What is the number of functions the malware resolves from kernel32?__

JMP命令を踏んだ後すぐに以下のように関数がCallされます。（アドレスが違うのは何回か検証のために実行したのでVirtualAllocのアドレスが変わってるためです。）
![9-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/9e1a9aae-63d5-f3ae-af2f-09a00eb6789e.png)

CallされてるアドレスをDissasmbleします。
![9-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/9b1c09bf-5b0a-9d94-e045-dcf494272fd1.png)
Stackに文字を積んでそうなのが分かります。
これで難読化されていたWindows APIを復号化しているのではないかと予測できます。

`kernel32`を復号化している箇所を確認します。
![9-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/31f559c9-7874-9127-8933-a1222e54f4d4.png)
次のDLLが復号されているところまで数えることが可能な量なので数えました。
![9-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/0443068e-ba3f-4ee2-3cb1-ad810ac63da8.png)

# Q10
__The malware obfuscates two strings after calling RegisterClassExA. What is the first string?__

`RegisterClassExA`にBPを打ち、最初から回してみます。
![10-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/d9130a6f-abcc-b721-be63-2f8181643980.png)
そこからステップ実行していくと以下の文字列がStackに現れます。
![10-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/65a6b6bc-cb34-a85c-3b98-91d17e592054.png)

対象の領域を`Follow Dump`します。
![10-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/98ad8f8e-20f8-c0a6-f5bd-ce5ba118e90b.png)
先ほど復号したAPIも見えます。
続けて回してみます。
![10-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/b1a00013-dc58-3481-839d-a3dde7223130.png)
CreateWindowExAのAPIが見えます。隠しWindowでしょうか？

# Q11
__What is the value of dwCreationFlags of CreateProcessA?__

BPはすでに打っているのでこのAPIが呼ばれるまで待ち、Stackを確認します。
![11-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/337879bd-5ae9-0d02-e538-d09a02a7ab91.png)
CreateProcessAのドキュメントで`dwCreationFlags`の箇所が何番目か確認します。

https://learn.microsoft.com/ja-jp/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa

![11-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/b59d2849-893f-f0fd-9775-13cd37ae975a.png)
6つ目を見ると`08000004`が見えます。
以下ドキュメントを確認すると以下のフラグが立っていることを表します。

https://learn.microsoft.com/ja-jp/windows/win32/procthread/process-creation-flags

+ CREATE_NO_WINDOW
+ CREATE_SUSPENDED

`CREATE_SUSPENDED`はリモートプロセスインジェクション系のEvasionでよく使われるフラグですね。

# Q12
__Malware uses a process injection technique. What is the name of it?__

先ほどAPIを復号化していた箇所を見てみると気になるAPIが見つかります。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/595f1328-c684-ef04-3efa-1c1dce8ba61c.png)
`NtUnmapViewOfSection`が気になりますね。よくホロウさんを召喚するときに使います。

# Q13
__What is the API used to write the payload into the target process?__

他にも気になるAPIがありますね。
![13-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/0a9b1ce4-3178-9e8c-7b94-07d5f62d406b.png)
よく悪性コードの注入に使われるAPIです。

https://learn.microsoft.com/ja-jp/windows/win32/api/memoryapi/nf-memoryapi-writeprocessmemory

これもBPを打ってるのでそのまま回します。
![13-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2036848/327047a9-781f-7583-c05a-fbf2bd17e553.png)
Stackに積まれているアドレスを`Follow Dump`すると実行ファイル形式の一部のように見えますね。これをホロウするのだと思います。

# 最後に
動的解析だけで乗り切れたチャレンジでした。Shellcodeが出てきたときは[BlobRunner](https://github.com/OALabs/BlobRunner)使うかなとか思いましたが、そのまま行っちゃいました。
いいx64dbgの練習問題でしたね。

Malware解析時間溶ける。