MWS Cup 2021
課題2 解説MWS Cup 2021

2021の問題担当● 課題2主担当○ 株式会社サイバーディフェンス研究所 中島 将太● 問題作成委員○○○○

株式会社日立製作所 石淵 一三
株式会社 エヌ・エフ・ラボラトリーズ 皆川 諒
株式会社 エヌ・エフ・ラボラトリーズ 齋藤 慶太
学生、若手募集中！

MWS Cup 20212

課題2のテーマ● マルウェアを正しく理解する○

課題を通して解析のポイントを学習する● 最新情報を得る○

最近のin-the-wildなマルウェアを扱う● 実務に近い作業○

静的解析による復号スクリプトの作成

MWS Cup 2021

3

ポイント
● 積極的に変数名や型を変更する○○

名前を付けて読みやすくしていく
デフォルトでは型情報がないことが多い● デコンパイラを信用しすぎない○○

アセンブリを確認して整合性を確認する
手動で修正する● 順番に回答する必要はないので解けそうな問題から解く○

loader_x86.gzfとpayload_x86.gzfの2つのファイルがある

MWS Cup 2021

4

マルウェアの動作概要

復号して実行
loaderpayload(RAT)MWS Cup 2021

コマンドを受信して動作

5

Ghidra Tips: Go To● Gキーで開くGo Toダイアログにアドレスやlabelを入力○○

任意の場所に簡単に移動問題ではアドレスが指定されていることが多いので必須!

MWS Cup 2021

6

Ghidra Tips: データのコピー1● Bytesウィンドウでコピーする

MWS Cup 2021

7

Ghidra Tips: データのコピー2● コピーしたい範囲を選択○

コンテキストメニューからCopy Special => Byte Stringを選択

MWS Cup 2021

8

Ghidra Help: データのコピー3● Listingビューで見切れている場合○

文字列● Defined Stringsウィンドウ○

Copy Current Column

MWS Cup 20219

競技中はここまで

MWS Cup 202110

1.システムエラーコード[loader_x86]

MWS Cup 2021

11

1.システムエラーコード[loader_x86] Answer● CreateMutex呼び出し時のエラーをGetLastErrorで取得○

システムエラーコードが0xb7のとき1を返す● コンテキストメニューのSet Equate(もしくはEキー)で対応する定数名に変更
可能○○

ERROR_ALREADY_EXISTS
すでに存在するので作成できない

MWS Cup 202112

2-1.エンコード[loader_x86]

MWS Cup 202113

2-1.エンコード[loader_x86] Answer● XORでデコードするループ

MWS Cup 202114

2-2.エンコード[loader_x86]

MWS Cup 202115

2-2.エンコード[loader_x86] Answer● Keyに利用されるデータの代入を辿る● 16バイトとデータをASCIIに変換○ 鍵は15バイトでローテート○(実装ミス?)k@W#C$DERb*F^3A

MWS Cup 202116

2-3.エンコード[loader_x86]

MWS Cup 202117

2-3.エンコード[loader_x86] Answer● デコードした文字列
DLL名

サンドボックスsbiedll.dll

Sandboxie

api_log.dll

CWSandbox

dir_watch.dll

CWSandbox● サンドボックス固有のDLLを確認○

アンチ解析機能

MWS Cup 2021

18

3.復号処理[loader_x86]

MWS Cup 2021

19

3.復号処理[loader_x86] Answer 1/4● リソース領域のデータをロード○

オフセット0x5c-0x6bのデータをコピー● 鍵は2.のXORと同じ

MWS Cup 2021

20

3.復号処理[loader_x86] Answer 2/4● リソース領域のデータを確認○

Rsrc_Bitmap_96_0MWS Cup 2021

21

3.復号処理[loader_x86] Answer 3/4● 復号データもリソース領域からロード○0x96のコンフィグにリソース数を保持

MWS Cup 2021

22

3.復号処理[loader_x86] Answer 4/4● Base64とXORでデコード○

鍵は15バイトでローテートする

MWS Cup 2021

23

4.RATのコマンド数[payload_x86]

MWS Cup 2021

24

4.RATのコマンド数[payload_x86]● 実装されているコマンドは8つ

○○○
○
○
○
○
○

8877
3333
1111
1234
4444
8888
9876
9999

MWS Cup 2021

25

5.コマンドID:1111[payload_x86]

MWS Cup 2021

26

5.コマンドID:1111[payload_x86]● コマンド1111内のグローバル変数の参照を追う

MWS Cup 2021

276.コマンドID:1234[payload_x86]

MWS Cup 2021

28

6.コマンドID:1234[payload_x86]● C2 サーバから受信したデータを別スレッドで実行する

MWS Cup 202129

7-1.受信コマンド[payload_x86]

MWS Cup 202130

7-1.受信コマンド[payload_x86]● 8877○○

ファイルをオープン
受信データをファイルに保存

MWS Cup 202131

7-2.実行コマンド[payload_x86]

MWS Cup 202132

7-2.実行コマンド[payload_x86]● 9999○ パイプを使ってcmd.exeで任意のコマンド実行

MWS Cup 2021

33

8.文字列復号[payload_x86]

MWS Cup 2021

34

8.文字列復号[payload_x86] 1/3● データの参照を追う● 2つの関数で復号○○Base64
カスタムXORMWS Cup 202135

8.文字列復号[payload_x86] 2/3● カスタムXORの実装

MWS Cup 2021

36

8.文字列復号[payload_x86] 3/3

MWS Cup 202137

解答まとめ1. アドレス00401af3のcmp命令で比較している0xb7に対応するシステムエラーコード名を答えよ。

ERROR_ALREADY_EXISTS

2-1. FUN_00401810では文字列がエンコードされている。そのエンコード方式を以下から選択せよ。

XOR

2-2. FUN_00401810では文字列がエンコードされている。その鍵をASCII文字列で答えよ。

k@W#C$DERb*F^3A

2-3. FUN_00401810の処理を以下から選択せよ。

アンチ解析機能

3. FUN_00401ca0とFUN_00402710は暗号化されたペイロードを読み込んで復号する処理である。復号処理を解析して、次の文字列を復号せよ

Congratulations_Decode_Payload!

4. FUN_004021c0を解析して、このマルウェアに実装されているコマンド数を答えよ8

5. FUN_004021c0を解析してコマンドID 1111で設定されるsleep時間が格納されるグローバル変数名をDAT_アドレスの形式で答えよ。

DAT_004191d8

6. FUN_004021c0を解析し、コマンド1234 の機能を答えよC2 サーバから受信したデータを別スレッドで実行する

7-1. FUN_004021c0を解析してC2 サーバから受信したデータをファイルとして保存するコマンドIDを10進数で答えよ。

8877

7-2. FUN_004021c0を解析してcmd.exeで任意コマンドを実行するコマンドIDを10進数で答えよ。

9999

8. アドレス00415e50のデータを復号せよ。

http[:]//www.conkorea[.]com/cshop/banner/list[.]php

MWS Cup 2021

38

マルウェアファミリ● 2021/04 Lazarusのサブグループ
Andarielが利用するマルウェア○○https://securelist.com/andariel-evol
ves-to-target-south-korea-with-rans
omware/102811/
https://blog.malwarebytes.com/thre
at-intelligence/2021/04/lazarus-aptconceals-malicious-code-within-bm
p-file-to-drop-its-rat/

MWS Cup 2021

39