MWS Cup 2021
ポストミーティング 課題2

MWS Cup 2021

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

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

MWS Cup 20212

課題2のテーマ● マルウェアを正しく理解する○ 課題を通して解析のポイントを学習する● 最新情報を得る○ 最近のin-the-wildなマルウェアを扱う● 実務に近い作業○ 静的解析による復号スクリプトの作成

MWS Cup 2021

3

去年の反省● Ghidra によるデコンパイラパワーの影響か問題が易化○ 3チームが8割以上得点!
○ 1チームは満点獲得!!
l 一方で苦手なチームは非常に苦戦○ 捨て問にされるのは避けたい○ ボーナス問題も必要か?

MWS Cup 2021

4

今年の方針● ググれば解ける, 該当の関数をザッと見ただけで解けるようなサービス問題を導入○ 当日 Ghidra 初見でも何とか解ける問題
l 一方で、しっかりとマルウェアのコードを読まないと解けない問題を昨年よりも増加○ “Windows APIの流れを追う”, “xref を辿る” だけでは解けない○ デコンパイラの力を借りて、暗号化されたデータを復号するレベルの問題を数問用意(1つは鍵の答え合わせ => 復号の誘導あり)

MWS Cup 20215

課題2 競技結果● 結果として横這い化● あまり差が出ない課題になったかも?

MWS Cup 2021

6

課題2 競技結果 (各課題別)● サービス問題は意図通り多くのチームが正解● しっかりマルウェアの動作を読む必要のある問題は正答率が低め

MWS Cup 2021

7

マルウェアの動作概要

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

コマンドを受信して動作

8

ポイント
● 積極的に変数名や型を変更する○ 名前を付けて読みやすくしていく○ デフォルトでは型情報がないことが多い● デコンパイラを信用しすぎない○ アセンブリを確認して整合性を確認する○ 手動で修正する● 順番に回答する必要はないので解けそうな問題から解く○ loader_x86.gzfとpayload_x86.gzfの2つのファイルがある

MWS Cup 2021

9

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

MWS Cup 2021

10

1.システムエラーコード[loader_x86] Answer● CreateMutex呼び出し時のエラーをGetLastErrorで取得○ システムエラーコードが0xb7のとき1を返す● コンテキストメニューのSet Equate(もしくはEキー)で対応する定数名に変更可能○ ERROR_ALREADY_EXISTS○ すでに存在するので作成できない

MWS Cup 202111

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

MWS Cup 202112

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

MWS Cup 202113

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

MWS Cup 202114

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

MWS Cup 202115

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

MWS Cup 202116

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

サンドボックスsbiedll.dll

Sandboxie

api_log.dll

CWSandbox

dir_watch.dll

CWSandbox● サンドボックス固有のDLLを確認○ アンチ解析機能

MWS Cup 2021

17

3.復号処理[loader_x86]

MWS Cup 2021

18

3.復号処理[loader_x86] Answer 1/4● リソース領域のデータをロード○ オフセット0x5c-0x6bのデータをコピー● 鍵は2.のXORと同じ

MWS Cup 2021

19

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

MWS Cup 2021

20

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

MWS Cup 2021

21

3.復号処理[loader_x86] Answer 4/4● Base64とXORでデコード○ 鍵は15バイトでローテートする

MWS Cup 2021

22

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

MWS Cup 2021

23

4.RATのコマンド数[payload_x86]● 実装されているコマンドは8つ○ 8877○ 3333○ 1111○ 1234○ 4444○ 8888○ 9876○ 9999MWS Cup 2021

24

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

MWS Cup 2021

25

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

MWS Cup 2021

26

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

MWS Cup 2021

27

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

MWS Cup 202128

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

MWS Cup 202129

7-1.受信コマンド[payload_x86]● 8877○ ファイルをオープン○ 受信データをファイルに保存

MWS Cup 202130

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

MWS Cup 202131

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

MWS Cup 2021

32

8.文字列復号[payload_x86]

MWS Cup 2021

33

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

MWS Cup 2021

34

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

MWS Cup 2021

35

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

MWS Cup 2021

36

解答まとめ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

37

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

MWS Cup 2021

38

Ghidra Tips: Go To● Gキーで開くGo Toダイアログにアドレスやlabelを入力○ 任意の場所に簡単に移動○ 問題ではアドレスが指定されていることが多いので必須!

MWS Cup 2021

39

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

MWS Cup 2021

40

Ghidra Tips: データのコピー2● コピーしたい範囲を選択○ コンテキストメニューからCopy Special => Byte Stringを選択

MWS Cup 2021

41

Ghidra Help: データのコピー3● Listingビューで見切れている場合○ 文字列● Defined Stringsウィンドウ○ Copy Current Column

MWS Cup 2021

42