1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

本記事は CyberDefenders(以下リンク参考)の「Ransomed Lab」にチャレンジした際のWalkthroughになります

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

チャレンジ開始前

問題について

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

image.png

環境

この CyberDefenders を解く際には仮想環境でマルウェア解析やメモリフォレンジックを行う環境を用意する必要があります。
今回は以下のような環境を用意しました。

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

Q1

What is the md5 hash of the file?

certutil使うだけ。

コマンド
certutil -hashfile challange.exe md5

1.png

Q2

What is the value of entropy?

4n4lDetectorに食わせます。

2.png

Q3

What is the number of sections?

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

3.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系

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

回してみると、1つ目のVirtualAllocに引っかかるのでEAXに帰ってくるメモリアドレスをFollow Dumpします。
続いて回してみると以下のようなShellcodeが書き込まれます。
shellcode.png
この領域をmemory mapで確認します。
7.png

Q8

What assembly instruction is used to transfer execution to the shellcode?

Shellcodeが書き込まれる関数(以下だと0x29C4512)がCallされた後をステップ実行します。
8-1.png
その後のjmp命令が呼ばれているのが気になるのでそこまでステップ実行します。
8-2.png
Stackのebp-4を確認するとShellcodeのメモリアドレス(0x2A60630)にジャンプしそうなのが分かります。

Q9

What is the number of functions the malware resolves from kernel32?

JMP命令を踏んだ後すぐに以下のように関数がCallされます。(アドレスが違うのは何回か検証のために実行したのでVirtualAllocのアドレスが変わってるためです。)
9-1.png

CallされてるアドレスをDissasmbleします。
9-2.png
Stackに文字を積んでそうなのが分かります。
これで難読化されていたWindows APIを復号化しているのではないかと予測できます。

kernel32を復号化している箇所を確認します。
9-3.png
次のDLLが復号されているところまで数えることが可能な量なので数えました。
9-4.png

Q10

The malware obfuscates two strings after calling RegisterClassExA. What is the first string?

RegisterClassExAにBPを打ち、最初から回してみます。
10-1.png
そこからステップ実行していくと以下の文字列がStackに現れます。
10-2.png

対象の領域をFollow Dumpします。
10-3.png
先ほど復号したAPIも見えます。
続けて回してみます。
10-4.png
CreateWindowExAのAPIが見えます。隠しWindowでしょうか?

Q11

What is the value of dwCreationFlags of CreateProcessA?

BPはすでに打っているのでこのAPIが呼ばれるまで待ち、Stackを確認します。
11-2.png
CreateProcessAのドキュメントでdwCreationFlagsの箇所が何番目か確認します。

11-1.png
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が見つかります。
12.png
NtUnmapViewOfSectionが気になりますね。よくホロウさんを召喚するときに使います。

Q13

What is the API used to write the payload into the target process?

他にも気になるAPIがありますね。
13-1.png
よく悪性コードの注入に使われるAPIです。

これもBPを打ってるのでそのまま回します。
13-2.png
Stackに積まれているアドレスをFollow Dumpすると実行ファイル形式の一部のように見えますね。これをホロウするのだと思います。

最後に

動的解析だけで乗り切れたチャレンジでした。Shellcodeが出てきたときはBlobRunner使うかなとか思いましたが、そのまま行っちゃいました。
いいx64dbgの練習問題でしたね。

Malware解析時間溶ける。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?