MWS Cup 2020 課題2 解説

MWS Cup 2020

2020の特徴● IDAからGhidraへ○○○

アメリカ国家安全保障局(NSA)が開発したリバースエンジニアリングツール
昨年までidb形式の問題ファイルを配っていたがgzf形式に変更
SANSのトレーニングもGhidraに置き換わった● 日本語の解説書籍も出版されている○筆者・・・

MWS Cup 20202

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

セキュアワークス株式会社 中津留 勇
株式会社カスペルスキー 石丸 傑
株式会社日立製作所 石淵 一三
株式会社 エヌ・エフ・ラボラトリーズ 皆川 諒
株式会社 エヌ・エフ・ラボラトリーズ 齋藤 慶太

MWS Cup 2020

3

GhidraのBookmark● 昨年のアンケートでもブックマークが好評であったためGhidraのBookmark
機能を使って問題を登録済み● ツールバー → Window → Bookmark

MWS Cup 20204

問題背景: Human-Operated Ransomware (標的型ランサムウェア)● 2019年頃からランサムウェアを用いた新たな攻撃が急増
a.
b.
c.

APT のような手法で横展開し組織の奥深くに侵入する
最近では発見した機密情報の窃取も行う
ランサムウェアを組織全体に配信し、復号と情報公開をネタに脅迫
くわしい攻撃手法が気になった方はこちら

MWS Cup 2020

https://www.ipa.go.jp/security/announce/2020-ransom.html

https://jsac.jpcert.or.jp/archive/2020/pdf/JSAC2020_1_tamada-yamazaki-nak
atsuru_jp.pdf

5

課題内容

MWS Cup 20206

問題1:ファミリ名

MWS Cup 20207

問題1:ファミリ名● PDB の情報が残されている○NEPHILIM.pdb● NEPHILIM で検索するといくつかのブログ記事がみつかる

MWS Cup 2020

8

The flag is: MWS{NEPHILIM}MWS Cup 20209

問題2:CALL命令で実行される処理

MWS Cup 2020

10

呼び出される命令● 0040296aのCALL命令ではDAT_00405110の値が呼び出される○

DAT_00405110にはGetProcAddressで取得したShellExecuteAのアドレスが入っている

MWS Cup 202011

ShellExecuteAによるコマンドの実行●

ShellExecuteA○○●

cmd.exe /c
○
○
○

●

第3引数には実行するファイル
第4引数にはその引数を指定する
bcdedit /set {default} bootstatuspolicy ignoreallfailuresbcdedit /set {default} recoveryenabled nowbadmin delete catalog -quiet & wmic shadowcopy delete

コマンドの処理○○○

ブート時のスタートアップ修復を無効にするバックアップカタログの削除
ボリュームシャドウコピーの削除

MWS Cup 202012

問題3:暗号化対象ドライブ

MWS Cup 2020

13

GetDriveTypeWの返り値● GetDriveTypeW の返り値が2,3,4の場合のみ暗号化をおこなう

MWS Cup 2020

14

The flag is: MWS{123}

MWS Cup 202015

問題4:暗号化対象ファイル

MWS Cup 2020

16

暗号化対象ファイルの条件● FindFirstFileW に WIN32_FIND_DATAW 構造体を適用● FUN_004013fe にて lstrcmpiW でファイル名と拡張子を比較○条件に当てはまらない場合はファイルを暗号化

MWS Cup 202017

拡張子のタイポ（？）●

FUN_004017b2 を解析すると暗号化したファイルの拡張子として .NEPHILIN を追加することがわかる。

●

改めて FUN_004013fe を確認すると.NEPHILIM を除外設定としている為、暗号化されたファイルに付けられる拡張子を持つ C:\mwscup2019.pdf.NEPHILIN
も暗号化対象となる。

MWS Cup 2020

18

The flag is: MWS{369}

MWS Cup 202019

問題5:暗号化処理

MWS Cup 2020

20

ヒントをうまく使う● 事前連絡や競技中の解説で紹介した findcrypt を使う

MWS Cup 202021

findcrypt● AES の sbox が見つかるので、sbox の XREF を辿ってみる

MWS Cup 202022

読みやすい場所までXREFを辿る● sbox の XREF から00401000 → 0040128f → 004017b2 まで
XREF を辿ると、Windows API が使われている関数まで到達する● ReadFile→ FUN_0040128f (AES の sbox を参照)
→ WriteFileの流れが見えるので、0040128f がファイル暗号化処理の関数
MWS Cup 2020

23The flag is: MWS{0040128f}

MWS Cup 202024

問題6:暗号化アルゴリズム

MWS Cup 2020

25

AES の仕様を確認する● findcrypt から AES だとわかっているので、ビット数を特定する情報を探す○

鍵長によってラウンド処理の回数が異なる

MWS Cup 2020

26

AESの鍵長● 鍵長は以下の3つ○○○

128 bit = 16 byte
192 bit = 24 byte
256 bit = 32 byte

● 鍵長がわかればビット数がわかる

MWS Cup 202027

鍵の生成処理● FUN_0040128f 関数の引数を辿る● 鍵の生成処理を確認○

SystemFunction036 を利用してランダムな16byteを生成

MWS Cup 202028

ラウンド処理部分を探す●

sbox が使われている関数の回りを探すと、004017b2 が AES のメイン処理に該当● ラウンド数は 10

MWS Cup 2020

29

The flag is: AES-128

MWS Cup 202030

7.データの役割

自由記述問題MWS Cup 202031

004040f8のデータの確認
A-Za-z+/で構成された文字列

MWS Cup 202032

004040f8のデータの参照元を確認● FUN_004024d3で参照されている○○

WinCrypt系関数を名前解決
CryptStringToBinaryA■○

CRYPT_STRING_BASE64

CryptImportKey● CryptImportKeyでインポートする
RSAの鍵

MWS Cup 202033

インポートした鍵の用途● 鍵の参照を辿る○○

インポートした鍵はCryptEncrypt
で使用
ランダム生成した AES の key とIV を CryptEncrypt で暗号化

MWS Cup 2020

34

The flag is:
Base64エンコードされたRSAの公開鍵であり、ランダム生成したAESの暗号鍵とIVを暗号化するのに利用する（これにより、攻撃者の持つ秘密鍵がなければファイルそのものを復号できなくなる）
MWS Cup 202035

8.関数の処理

自由記述問題MWS Cup 202036

方針
細かく読みすぎずに Windows API で流れを追う

MWS Cup 202037

関数全体の流れを読む (前半〜中盤)
● 前半
○
○

“%TEMP%god.jpg” の文字列
作成
FUN_004027eb で CryptDecryptを使用して何かしらのデータを復号● 中盤○○(snip.)Bitmap 作成系の API 呼び出し
FUN_004027eb で復号したデータを DrawTextA で bitmapに描画

MWS Cup 202038

関数全体の流れを読む(後半)
● 後半
○

○

CreateFile + WriteFile で中盤までに作っていたデータ
を “%TEMP%god.jpg” に出力
SystemParameterInfoW でgod.jpg を何かしらのパラメータとして設定

MWS Cup 2020

39細かく読む(前半〜中盤)● DrawTextAの引数の調査○○○

FUN_004027eb から、復号対象のデータ DAT_00403990 の XREF を見る
DAT_00403990 は FUN_00401314 でも使われており、`NEPHILIN-DECRYPT.txt` の文字から脅迫文の作成と推測できる
DrawTextA で書き込まれるデータは同じ脅迫文であり、god.jpg は脅迫画像と推測できる

MWS Cup 202040

TIPS: DAT_00403990 の内容の確認
WinCrypt API を使って復号することができる

MWS Cup 202041

細かく読む(後半)● SystemParameterInfoW の引数の調査○○

API の引数を調査すると、0x14 で壁紙のパラメータを指定
脅迫文の書かれた画像をデスクトップに設定している

MWS Cup 202042

ランサムウェアの実行結果

MWS Cup 2020

43

The flag is:
脅迫画像の生成をおこなって、壁紙として設定する

MWS Cup 202044

問題に使用したマルウェアのハッシュ値
b8066b7ec376bc5928d78693d236dbf47414571df05f818a43fb5f52136e8f2e

MWS Cup 202045