MWS Cup 2017
課題2: 静的解析
中津留 勇
石淵 一三
石丸 傑

課題2 担当

2中津留 勇

石淵 一三

石丸 傑

ynakatsuru[at]secureworks.com

kazumi.ishibuchi.hh[at]hitachi.com

suguru.Ishimaru[at]kaspersky.com

SecureWorks Japan
株式会社

日立製作所

株式会社 カスペルスキー

Copyright © 2017 Kaspersky Lab. All rights reserved.

課題2 変わらぬテーマ
マルウェアを正しく理解する

静的解析を通じ最新情報を得る
3

Copyright © 2017 Kaspersky Lab. All rights reserved.

実務に近い作業MWS Cup 2017
課題2 解説

4

Copyright © 2017 Kaspersky Lab. All rights reserved.

課題2 oni.exe

https://blog.kaspersky.co.jp/wannacry-ransomware/15524/

https://www.cylance.com/ja_jp/blog/jp-oni-ransomware-globeimposter.html

5Copyright © 2017 Kaspersky Lab. All rights reserved.

課題2 設問
設問１

設問2

設問3

呼び出し規約関数の挙動解析

被害対象の特定

当該検体の（Windows APIやライブラリ関数以外の）関数呼び出しに使用されている呼出規約を以下から選べ(4点)関数 sub_401000 が何をする関数か答えよ (4点)暗号化の対象となるドライブの種類をすべて選択せよ (4点)

設問5

設問6

設問4

関数の挙動解析関数 sub_406306 が何をする関数か答えよ (4点)

6

引数の意味
当該検体が SHA-256 ハッ
シュ値を求めるために使用される関数 sub_404C3Eは、4番目の引数によってどのような処理の変化が起きるか答えよ (4点)

Copyright © 2017 Kaspersky Lab. All rights reserved.

格納データの意味
当該検体のリソース EXDATA に格納されている112番のデータは、復号しても意味不明なデータとなるが、本来どのような情報が格納されているべきか、コードから推測せよ(5点)課題2 解析のポイント
コード全てを読む必要はない

難しく考えない

困った時のWeb検索

わかりやすい文字を探す

必要な部分を必要な分だけ集中して読む

アセンブラ言語そのものは単純

• 文字列
• 定数
• API

7

Copyright © 2017 Kaspersky Lab. All rights reserved.

Google先生やMSDNは貴重な情報元

設問1 呼び出し規約
当該検体の（Windows APIやライブラリ関数以外の）関数呼び出しに使用されている呼出規約を以下から選べ(4点)
••
•
•
•

__cdecl__stdcall__fastcall__thiscallothers

引数をスタックに経由で渡す
引数をスタック経由で渡す

引数をECX, EDX,スタックを経由して渡す
引数をスタックに、thisポインターをECXに格納
他に適切な答えがある為却下

スタックだけでなくECX、EDX経由で値を渡していることがわかる

8Copyright © 2017 Kaspersky Lab. All rights reserved.

設問2 関数の挙動解析
関数 sub_401000 が何をする関数か答えよ (4点)
全プロセス中からsql、outlook、ssms、postgreに一致したプロセス名のPIDを基にtaskkillを用いてプロセスツリーごと強制終了する関数
関数のアドレスを取得• Process32FirstW• Process32NextW• CreateToolhelｐ32Snapshot

CreateToolhelｐ32Snapshotでスナップショットを作成

Process32FirstWでスナップショット
内の最初のプロセス情報を取得

9Copyright © 2017 Kaspersky Lab. All rights reserved.

設問2 関数の挙動解析
関数 sub_401000 が何をする関数か答えよ (4点)
全プロセス中からsql、outlook、ssms、postgreに一致したプロセス名のPIDを基にtaskkillを用いてプロセスツリーごと強制終了する関数
対象プロセス名と思われる文字列• sql• outlook• ssms• postgre

Taskkill /F /T PID をコマンドとして実行

10

Copyright © 2017 Kaspersky Lab. All rights reserved.

設問3 被害対象の特定暗号化の対象となるドライブの種類をすべて選択せよ (4点)••••固定ドライブ
取り外し可能ドライブ
ネットワークドライブ
書き込み可能なCD/DVDドライブ
GetDriveTypeAをImportsから探す

戻り値と比較している値の意味を調べる

11

Copyright © 2017 Kaspersky Lab. All rights reserved.

設問4 関数の挙動解析
関数 sub_406306 が何をする関数か答えよ (4点)RC4で復号化する関数。第一引数に暗号データへのアドレス、第二引数に鍵、第三引数にデータサイズがそれぞれ入り、戻り値は復号データへのアドレスが入る

00 から ｆｆ まで256バ
イトのsboxを初期化

第一引数である鍵を用いてsboxを生成

12

Copyright © 2017 Kaspersky Lab. All rights reserved.

設問4 関数の挙動解析
関数 sub_406306 が何をする関数か答えよ (4点)RC4で復号化する関数。第一引数に暗号データへのアドレス、第二引数に鍵、第三引数にデータサイズがそれぞれ入り、戻り値は復号データへのアドレスが入る

1バイトづつXOR
ストリーム暗号13

Copyright © 2017 Kaspersky Lab. All rights reserved.

設問5 引数の意味
当該検体が SHA-256 ハッシュ値を求めるために使用される
関数 sub_404C3Eは、4番目の引数によってどのような処理の変化が起きるか答えよ (4点)
引数が0の場合はSHA-256のハッシュ値、それ以外の場合にはSHA-224のハッシュ値を求めるように変化する。
4番目の引数はsub_403FFDの2番目の引数として分岐フラグとして用いられる

SHA-256かSHA-224の定数が使用される

14

Copyright © 2017 Kaspersky Lab. All rights reserved.

設問5 引数の意味
当該検体が SHA-256 ハッシュ値を求めるために使用される
関数 sub_404C3Eは、4番目の引数によってどのような処理の変化が起きるか答えよ (4点)
引数が0の場合はSHA-256のハッシュ値、それ以外の場合にはSHA-224のハッシュ値を求めるように変化する。

計算部分でも4番目の引数を基にSHA-256とSHA-224で処理が分岐

15

Copyright © 2017 Kaspersky Lab. All rights reserved.

設問5 引数の意味
当該検体が SHA-256 ハッシュ値を求めるために使用される
関数 sub_404C3Eは、4番目の引数によってどのような処理の変化が起きるか答えよ (4点)
引数が0の場合はSHA-256のハッシュ値、それ以外の場合にはSHA-224のハッシュ値を求めるように変化する。

16

Copyright © 2017 Kaspersky Lab. All rights reserved.

設問6 格納データの意味
当該検体のリソース EXDATA に格納されている112番のデータは、復号しても意味不明なデータとなるが、本来どのような情報が格納されているべきか、コードから推測せよ(5点)拡張子リストが“,”（カンマ）を区切りとして格納されているべきと考えられる。また、最初の区切り文字を“ ”（スペース）にも変更することが可能であり、当該拡張子を持つファイルはファイルサイズに関わらずデータ全体を暗号化対象とする

EXDATAからデータを取得、RC4で復号化

17

Copyright © 2017 Kaspersky Lab. All rights reserved.

設問6 格納データの意味
当該検体のリソース EXDATA に格納されている112番のデー
タは、復号しても意味不明なデータとなるが、本来どのような情報が格納されているべきか、コードから推測せよ(5点)拡張子リストが“,”（カンマ）を区切りとして格納されているべきと考えられる。また、最初の区切り文字を“ ”（スペース）にも変更することが可能であり、当該拡張子を持つファイルはファイルサイズに関わらずデータ全体を暗号化対象とする“，”と“ ”を区切り文字としてデータを抽出“，”を区切り文字としてデータを抽出
KDATA110に格納されている“.oni”を追加
18

Copyright © 2017 Kaspersky Lab. All rights reserved.

設問6 格納データの意味
当該検体のリソース EXDATA に格納されている112番のデータは、復号しても意味不明なデータとなるが、本来どのような情報が格納されているべきか、コードから推測せよ(5点)拡張子リストが“,”（カンマ）を区切りとして格納されているべきと考えられる。また、最初の区切り文字を“ ”（スペース）にも変更することが可能であり、当該拡張子を持つファイルはファイルサイズに関わらずデータ全体を暗号化対象とする

復号化されたEXDATA112と暗号化対象となるファイルの拡張子を比較

19

Copyright © 2017 Kaspersky Lab. All rights reserved.

設問6 格納データの意味
当該検体のリソース EXDATA に格納されている112番のデータは、復号しても意味不明なデータとなるが、本来どのような情報が格納されているべきか、コードから推測せよ(5点)拡張子リストが“,”（カンマ）を区切りとして格納されているべきと考えられる。また、最初の区切り文字を“ ”（スペース）にも変更することが可能であり、当該拡張子を持つファイルはファ
イルサイズに関わらずデータ全体を暗号化対象とする
EXDATA112の拡張子であった場合ファイルサイズに関係なく全て暗号化する
暗号化対象ファイルのサイズが500000h以上かどうか確認し、以上の場合は暗号化するサイズを500000hまでに設定する
20

Copyright © 2017 Kaspersky Lab. All rights reserved.

課題２ 採点結果

21

Copyright © 2017 Kaspersky Lab. All rights reserved.

MWS Cup 2017
課題2 今後の課題

22

Copyright © 2017 Kaspersky Lab. All rights reserved.

アンケートの意見コメント

24

Copyright © 2017 Kaspersky Lab. All rights reserved.

問題作成の課題
⾃動化などを静的解析で適⽤することの困難さ

テーマ選定の難しさ

より実務に近い検体、2時間で解ける課題として昇華させる難しさ

問題文が一部が伝わりにくかった

問題文の出し方

どの程度の解答を求めているのか明示できていなかった
協議中のプレゼンが公開処刑すぎる為
蚤の心臓では耐えらない

作成委員不足25

Copyright © 2017 Kaspersky Lab. All rights reserved.

問題作成はコードと向き合う必要がある為勉強になること、なにより楽しい参加者側の課題
過去問や過去の解答をもとに復習
Write-up書いてみると勉強になる

アンケート答えてくださいね。お願いします。
27

Copyright © 2017 Kaspersky Lab. All rights reserved.

勉強する際の参考資料
セキュリティ・キャンプ全国⼤会2015でのマルウエア分析講義(2015-09-10)
https://www.jpcert.or.jp/magazine/acreport-seccamp.html
リバースエンジニアリング⼊⾨ - ＠IT
http://www.atmarkit.co.jp/ait/series/2614/
Edomae 2015 - マルウェアを解析してみようWEB
http://www.slideshare.net/SatoshiMimura/edomae-2015
Practical Malware Analysis | No Starch Press
https://www.nostarch.com/malware
O'Reilly Japan - アナライジング・マルウェア
https://www.oreilly.co.jp/books/9784873114552/
ML に投げてるので、それを⼊⼿する
データセットに⼊っている資料を読む

28

Copyright © 2017 Kaspersky Lab. All rights reserved.

書籍

過去問

THANK YOU
ynakatsuru[at]secureworks.com
kazumi.ishibuchi.hh[at]hitachi.com
suguru.Ishimaru[at]kaspersky.com

Copyright© 2017 Kaspersky Lab
無断複写・転載を禁じます。カスペルスキー、Kaspersky®はKaspersky Labの商標または登録商標です。