MWS Cup 課題1
MWS Cup 2020 課題1 主担当
小池 倫太郎2020年の問題担当• 主担当• NTTセキュリティ・ジャパン株式会社 小池倫太郎• 問題作成支援員• 株式会社エヌ・エフ・ラボラトリーズ 保要隆明

• レビュアー• デロイトトーマツサイバー合同会社 高田雄太
• nao_sec メンバー一同2

2021年の問題担当• 主担当• NTTセキュリティ・ジャパン株式会社 小池倫太郎？

• 問題作成支援員• 募集中！！！

3

課題1の問題傾向• Augma/D3M Datasetに関連する問題• いわゆるDrive-by Download攻撃に関連するもの• データセットの利活用促進が目的• Drive-by Download攻撃の観測• （事前課題）2015年, 2016年• トラフィックデータの解析• 2014年, 2017年, 2019年• 悪性スクリプトの解析• 2020年

42020年の問題

5

出題意図• リモート+CTF形式で、悪性スクリプトを解析• スッパリと解答（flag）が何であるか分かるような形式• 記述や選択肢ではなく、問題に埋め込まれたflagのみを答える• 従来のpcapやsazのように「何か（ツール）が無いと解きにくい」ような問題ではなく、純粋に解析力で戦えるような問題• DbD解析だけではなく、汎用的に使える解析ノウハウを体験して欲しい• 幅広い難易度・テクニック• 直近1年間程度の間で実際に観測された攻撃を参考にして作成• 様々な場面で応用できるような汎用性• 単純な知識ではなく、如何にして手を動かすか？
• 最終的には「自動化するにはどうしたらいいのか？」• （あわよくば Augma Dataset に興味を持ってもらいたい）
6

Q1: BASE64• atob()• Base64エンコーディングでエンコードされたデータの文字列をデコード• eval()• 文字列として表現されたJavaScriptコードを評価• 多くの難読化・解析妨害では最終的に式・コードの評価を行い、動的に実行する• 最終的に実行される部分のみを抜き出せば解析を楽できる

Flag is MWS{Hello, World!}

7

Q2: SIMPLE• evalの中で色々な処理をしている• 最終的に実行されるコードのみを抽出すれば良いので、evalを書き換えるだけ• 単純にevalという文字列を削除するだけでいい

Flag is MWS{SIMPLE_Obfuscation?}8Q5: PurpleFox Exploit Kit• JavaScriptではないナニカ？
• 先頭が#@~^、末尾が^#~@という特徴

9

Q5: PurpleFox Exploit Kit• 素直に検索してみる

10

Q5: PurpleFox Exploit Kit• Microsoft Script Encoder• <script language=“JScript.Encode“>• 古のテクノロジーで、Internet Explorerなどで動作• 単純なエンコードで、昔からデコーダがいくつも存在• scrdec18-VC8.exe• https://gist.github.com/bcse/1834878• CyberChef• https://gchq.github.io/CyberChef/11Q5: PurpleFox Exploit Kit• デコード後のデータ• 先頭に大きなライブラリみたいなコード• 暗号系のライブラリ？

• とりあえず無視して先を見る

12

Q5: PurpleFox Exploit Kit• デコード後のデータ• evalを発見 -> 実行されるコードを取得• もしInternet Explorer以外のブラウザを使用していた場合• デコードに失敗• なぜ失敗したのか？

13

Q5: PurpleFox Exploit Kit• 細かくコードを見ていく• evalの直前で実行されていた関数• CryptoJSを使ったAES-256 CBCによるデコード• つまり先頭にあった大きなライブラリはCryptoJS• 必要なもの• 暗号化されたデータ• 暗号鍵• IV14

Q5: PurpleFox Exploit Kit• 細かくコードを見ていく• 暗号鍵とIVはすぐに見つかる• 暗号化されたデータ• Base64デコードしているだけかと思いきや、何か処理をしている

15

Q5: PurpleFox Exploit Kit• 細かくコードを見ていく• 暗号化されたデータに対する処理• typeofの結果をもとに、XORで更にデータを加工• typeof([].find)とは？

ChromeInternet Explorer• 古いJavaScriptエンジンにはArray.findは実装されていない• （思い出しポイント）最初のJScript.EncodeはInternet Explorerなどで実行可能• Chromeでデコードに失敗 -> Internet Explorerで実行するのが正しい

Flag is MWS{Purp1e_F0X_4K}

16

Q5: PurpleFox Exploit Kit• ブラウザや環境に依存する値を使った解析妨害• 標的を絞り込んだ攻撃ではよく見られる• いわゆる標的型攻撃以外にも、Region-Specificなバラマキ攻撃でも• よくあるテクニック• 実装差異• Internet Explorerと他のブラウザの差• 環境値• ブラウザやOSの言語設定• IPアドレスのGeolocation• エラーメッセージ• コマンドプロンプトなどで意図的にエラーを起こし、返ってくるエラーメッセージを使って暗号鍵を生成するなど

17

Q7: 解析の自動化• Q1 ~ 6までの解析作業を自動化して欲しい• 実務では毎回手動で解析することは現実的ではない• 5分間で全てをデコードすればいいので、半自動 / 手動でもOK• アプローチ• ブラウザやエミュレータを使ったJavaScript解析• Headless ChromeやSelenium / WebDriver• JS-Walkerのようなツールの活用• https://www.nttsecurity.com/docs/librariesprovider3/resources/jswalker• 気合いで文字列操作
Flag is MWS{Enj0y_EK_0bfuscat0r}

18

結果
12108

とっつきやすい簡単な問題は多くのチームに解かれたが難易度が上がると一気に正解率が下がる

6

4

20
1

19

2345

6

7

勉強方法

20

勉強方法
• まずデータセットの中身をちゃんと把握する• MWS Cupはデータセット利活用促進が目的• 過去問を解いてみる• データセットに過去問が含まれている• 解答や解説はWebにも• https://www.iwsec.org/mws/mwscup.html• 一般に公開されているデータを活用する• https://www.malware-traffic-analysis.net• https://traffic.moe <-古いので要注意

21

勉強方法
• 解析レポートを読みながら、実際に解析する• “Exploit Kit” + “Analysis” とかで検索• 1次ソースを見る• 最新動向を追う• Twitterで有益な情報を発信しているアカウントをフォロー• 日本語で発信している人は極めて少ない• 英語でも積極的に見よう！

• あわよくば仲良くなって、分からないことを根掘り葉掘り聞く• 何かあれば @nao_sec へご相談ください22