Copyright(c)2017 NTT CORPORATION. All Rights Reserved.

MWS Cup 2017 当⽇課題解説
課題１：Drive-by Download 攻撃解析
⾼⽥ 雄太 (MWS 2017 企画委員)
2017年12⽉1⽇

Copyright©2017 NTT Corp. All Rights Reserved.

課題１におけるこれまでの取り組み• 2014: pcap を解析せよ！

─ 概要：複雑なリダイレクトの解析、クローキングの解析
─ 意図：D3M データセット解析/活⽤の促進技術• 2015: 改ざんされたサイトを発⾒せよ！
─ 概要：改ざんされたサイトの発⾒と解析
─ 意図：独⾃データセット収集の促進

評価

データ

• 2016: 改ざんされたサイトを発⾒せよ！(再び)─ 概要：昨年からの続きで、事前課題として出題し、解析の⾃動化や検知の⼯夫点を競争─ 意図：独⾃データセット収集の⾼度化および共有の促進

Copyright©2017 NTT Corp. All Rights Reserved.

1今年の⽅針• 2017: pcap を解析せよ！(再び)─ 概要：リダイレクトの解析、JavaScript 難読化の解析
─ 意図：「独⾃データセット収集」から「データセット解析」へカムバック▪ “研究サイクル” の加速化
▪ ⾃ら収集したデータ解析してる？塩漬けしてない？

─ 数年の間で変わらなかった攻撃特性である「リダイレクト」と「難読化」に関する問題を改めて出題

Copyright©2017 NTT Corp. All Rights Reserved.

2

課題１­１
Drive-by Download 攻撃の 時系列解析
特定のある Web サイトの URL を1⽇ごとにおよそ半⽉の間アクセスした
際の pcap を解析し、Drive-by Download 攻撃の時系列変化について、回答する課題• 攻撃コードおよびマルウェアを含む通信データの分類問題
─ 悪性 Web サイトとして振る舞う pcap
─ 悪性ではない Web サイトとして振る舞う pcap

• 振る舞いを切り替える原因となっているWebコンテンツの解析

─ 悪性な通信データの前後⽇のデータ（HTML, JavaScript）を解析【課題の意図】• 応答Webコンテンツが変化する悪性Webサイトの存在を知る• 悪性Webサイトは存在し続けるのではなく、消滅する可能性があることを知る

Copyright©2017 NTT Corp. All Rights Reserved.

3

課題１­１ 回答欄
ファイル名
（F-1）

（F-2）
（F-3）
（F-4）

一つわかると芋づる式に分かる、ドライブバイの特徴を捉えた問題設計

Webコンテンツの変化内容（U-1）において（U-2）を参照するHTMLタグが挿⼊され、また、（U-3）において使⽤されていたHTMLタグの参照先URLが、（U-4）から（U-2）へ変更された。
その結果、新しい参照先URL（U-2）に含まれる（U-5）を参照するJavaScriptが実⾏され、複数のURLへのアクセス後、最終的に攻撃コードを含むURLへのアクセスが観測されるようになった。
（U-2）にて使⽤されていた参照先URLが、（U-5）から（U-6）
へ変更された。参照先URLが変更されたものの、（F-1）と同様の攻撃コードを含むURLへのアクセスが観測された。
（U-2）にて使⽤されていた参照先URLが、（U-6）から（U-7）
へ変更された。そのため、（F-1）および（F-2）で観測されていた攻撃コードを含むURLへのアクセスは観測されなくなった。
（U-2）にて使⽤されていた参照先URLが、（U-7）から（U-8）
へ変更された。その結果、（F-1）および（F-2）で観測されていた攻撃コードを含むURLへのアクセスが、再び観測されるようになった。
しかし、翌⽇には（U-2）にて使⽤されていた参照先URLが、再度（U-7）に変更され、以降攻撃コードを含むURLへのアクセスは観測されなくなった。
Copyright©2017 NTT Corp. All Rights Reserved.

4

時系列解析 1/3• 攻撃URL (攻撃コードを含むURL) の特定

─ アクセスしたURL⼀覧を出⼒し、前後⽇で差分を分析することで、⼊⼝URLと異なるドメイン名や Content-Type 等を持つURLを特定▪ URL パス「?PHPSSESID=njrMNruDMh7HApz…」を含むURL▪ 差分URLの⼀部に「text/xml」「application/java-archive」▪ .mp3 を含む URL（実⾏ファイル）も重要な指標• アクセス先を変更する URL の特定

─ 攻撃コードを含むURLを基にアクセス遷移を追跡▪ Referrer ヘッダやscript/iframeタグ、リダイレクトコード

─ 追跡したアクセス遷移を基に URL 変化の発⽣源を特定▪ ratchetsupport.***/js/counter.php を起点に、が転送先が変化していることに着⽬

Copyright©2017 NTT Corp. All Rights Reserved.

5

時系列解析 2/3• ⼊⼝URLが読み込むファイルの内容が変更（改ざん）され、異なるドメインのURLを参照
http://forum.spaziogames.**/（U-１）コード変更
（改ざん）

（U-２）

（F-1）
c102_20170816.pcap

http://forum.spaziogames.**/board/index.php（U-３）コード変更（改ざん）

http://ratchetsupport.***/js/counter.php

http://forum.spaziogames.**/banner/leaderboard_google.html?123

http://ratchetsupport.***/js/counter.php（U-５）
「http://about.foxyfeetonline.***/」における以下のURLパスにアクセス
index.php?req=mp3&num=97&PHPSESSID=njrMN…
index.php?req=xml&num=8435&PHPSESSID=njrM…
index.php?req=jar&num=6460&PHPSESSID=njrMN…

CVE-2013-2456「http://about.foxyfeetonline.***/」における以下のURLパスにアクセス
index.php?req=xml&num=6606&PHPSESSID
index.php?req=jar&num=4831&PHPSESSID

Copyright©2017 NTT Corp. All Rights Reserved.

6

時系列解析 3/3• 転送先のドメイン名は変化し続け、同様の攻撃コードが実⾏される• その後、転送先URLは “out of date” → 攻撃URL → “out of date”と変化し、最終的に攻撃は停⽌
c102_20170817.pcap

c102_20170818.pcap

c102_20170822.pcap

http://forum.spaziogames.**/http://forum.spaziogames.**/http://forum.spaziogames.**/http://forum.spaziogames.**/board/index.php

http://forum.spaziogames.**/board/index.php

http://forum.spaziogames.**/board/index.php

コードが変化

コードが変化

コードが変化

http://ratchetsupport.***/js/counter.php

http://ratchetsupport.***/js/counter.php

http://ratchetsupport.***/js/counter.php

（U-６）

（U-７）

「http://cal.ecologicalfreight.***/」における以下のURLパスにアクセス
index.php?req=mp3&num=83&PHPSESSID=njrMN…
index.php?req=xml&num=8263&PHPSESSID=njrM…
index.php?req=jar&num=3019&PHPSESSID=njrMN…

“out of date”（U-８）
「http://cap.coolcapoeiracomp.***/」における以下のURLパスにアクセス
index.php?req=mp3&num=35&PHPSESSID=njrMN…
index.php?req=xml&num=8754&PHPSESSID=njrM…
index.php?req=jar&num=4075&PHPSESSID=njrMN…

2017/08/22 での攻撃検知を最後に再び “out of date”
Copyright©2017 NTT Corp. All Rights Reserved.

7課題１­２JavaScript の 難読化解除

悪性 Web サイトとの通信データを含む pcap の中から、難読化された JavaScript を抽出・解析し、難読化を解除したコードに含まれるコンテンツを回答する課題• 難読化解除後に含まれるコンテンツの特定

─ 特定の関数に含まれる変数の値;
generatePseudoRandomString() 内の変数 letters[0] を答えよ。

【課題の意図】• JavaScript 難読化の解除⽅法を知る• 複雑な難読化のケースを知る
Copyright©2017 NTT Corp. All Rights Reserved.

8

課題１­２ 難読化解除 1/2• 難読化された JavaScript を探索─ ２つ存在するがいずれのファイルでもOK (common.js / browser_identificator.js)• ２重に施されている難読化を解除

─ ⼀段⽬は eval→console.log へ書き換える等で解除可能 (易しい)eval() 引数をダンプして、難読化解除

よくある packer
Copyright©2017 NTT Corp. All Rights Reserved.

9課題１­２ 難読化解除 2/2• ⼆段⽬は単純な eval→console.log では解除不可能

─ 難読化解除の過程でホスト名 (window.location.host) が getTopHost(h)の引数とするため、pcap を参照し当該ファイルホスト名を引数 h に設定し、eval→console.log でコンテンツをダンプする (難しい！)

⼀部関数を書き換えた後、eval() 引数をダンプして、難読化解除

どの箇所で解除に失敗するかをステップ実⾏で確認！

答えは “h”
Copyright©2017 NTT Corp. All Rights Reserved.

10まとめ• データセット収集と活⽤の促進

─ 今後はデータセットの「共有」も活性化させたい• ⼀組織による出題の限界

─ 継続的な取り組みは重要である⼀⽅で、Drive-by に限らず、組織の偏りは課題：多様な⼈材・アイデアを募集！

ご興味がある⽅は問題作成⽀援委員としてご協⼒ or アドバイスを是⾮！

Copyright©2017 NTT Corp. All Rights Reserved.

11