an empirical study of android apk distribution sites using headless browser with navigation...
TRANSCRIPT
An Empirical Study of Android APK Distribution Sites Using Headless Browser with Navigation Scripting
Ruo Ando Network Security Institute, National Institute of Information and Communication Technology
CSS2015 コンピュータセキュリティシンポジウム 2015-10-21 16:15-17:35
概要: Navigation Scripting を用いた並列クローリングによる APK 配布サイトの調査■Android マルウェアの急激化な増加に伴い、 APK ファイルの配布形態も複雑化している。■ また、最近では、不正な APK の利用が、従来の Botnet や Information Reseller network のエコシステムの中に巧妙に組み込まれてきている。■ 提案システムでは、 Headless ブラウザである PhantomjS の WebKit Scritable API を用いて複雑な配布形態に対応し、その上で、ユニットテスティングを適用して不正な APK の利用が他の WEB サーバや SNS とどのように連動しているか明らかにする。■ 本研究では、 Navigation Scripting で実行処理される Webkit API を簡易 DSL で制御することで、 Xpath 入力をベースにしたクローリングの並列化をおこない、不正な APK 配布サイト群についての調査結果を報告する。
Dynamic web loading / AJAX
serverclient
client server
JS engine
X
f(X)
X
f(X)
G(f(X),y)
Y : - Date, Random etc
Background 1: Android malware and its distribution environment - Andrdoidマルウェアの急激な増加と配布形態の複雑化
モバイルマルウェア全体の中では、被害者に気付かれずにデータを盗むバックドア型トロイの木馬や、銀行のログイン情報を取得するマルウェアが最大の割合を閉める。http://www.jiji.com/jc/graphics?p=ve_soc_network-bankfuseisoukin
Background 2: growing ecosystem of APK distribution sitesゼロデイマーケット
マルウェアマーケット
攻撃者
ボットネットマーケット
指令サーバ ボットネット
スキャンと侵入 悪意のあるサイト
情報摂取
スパムDDOS攻撃サービス停止
株式詐欺悪徳商法・広告
フィッシング
リダイレクト攻撃したサイトをボット化 脆弱性利用販売
レンタル
Androidアプリケーション
メールの転売
SNS Facebook
SNS Twitter ツイキャス等
アプリをダウンロード・利用させる情報収集サーバアプリの開発販売?
情報収集
Headless Browser を用いた APK クローラの高粒度化①Navigation scripting with JavaScript enables more interactive web page crawling in order to fetch the results after dynamic web page loading. In experiment, we have measured reasonable response time for fetching files with scriptable API.
②PhantomJS (WebKit API) を用いた高粒度のブラウザ操作:ボタンのクリック、フォームの入力、パスワード生成等③CasperJS を用いたテスティング機能の簡素化 Navigation Scripting によるコールバック関数の削除④ クローラ並列化と perl による Xpath List 生成とタイムアウト制御
Linux parallel environment
PhantomJS (Qt WebKit APIs)
CasperJS (Navivation Scripting)
Perl (templates, timeouts)
What is navigation scripting ?PhantomJS vs CasperJS
PhantomJS CapserJS
language Javascript Javascript
based on Qt WebKit PhantomJS
semantics Big step (evaluation) Small step (reduction)
execution Style Driver Process
coding Style Async Scritable API Navigation (Step by Step)
PhantomJS のプログラムはコールバック関数の集合として実装されるため、単体の Scraping をプロトタイピングをする際には便利だが、並列化する際に、同期やタイムアウトの問題が生じる。CasperJS は PhantomJS をラップした Navagation Scripting を適用しているため、ページのロード完了、 Step by Step に関数を配置することができるが、クローラを並列配置した際にタイムアウトの不具合の問題が以前として残る。
Headless Browser with Natigation Scripting
casper.run(function() {test.done();});});var x = require('casper').selectXPath;casper.options.viewportSize = {width: 1300, height: 700};casper.test.begin('test', 1, function(test) {casper.start('http://www.freewarelovers.com/android', function() { });
casper.waitFor(function check() { return this.click(x("//*[\@id=\"fieldset\"]/table/tbody/tr[2]/td[1]/p[1]/a[1]"))!= 0},
Testing framework / unit testing• Originally based on Small Talk by Kent Beck (1994).
Unit test
Test ScenarioFunctional Test
Load TestService Test
TestNode
Application(DOM element)
TestNode
Monitor
Unit test
Unit test
ユニットテストを用いることで、WEBサイト( DOM elements)に対して単一の入力ではなく、きめの細かい入力群(シナリオ)を扱うことができる。
単体テスト(たんたいテスト)あるいはユニットテストとは、ソースコードの個々のユニット、すなわち、 1 つ以上のコンピュータプログラムモジュールが使用に適しているかどうかを決定するために、関連する制御データ、使用手順、操作手順とともにテストする手法。
perl
CasperJS
PhantomJS
Qt WebKit
Loop generation
API invocation
Navigation Scripting
Headless Browser PhantomJS - sendEventEvent Loop
Qt Metacall
SendEvent
void WebPage::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a){ switch (_id) { case 0: _t->initialized(); break; case 31: _t->sendEvent((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QVariant(*)>(_a[2])),(*reinterpret_cast< const QVariant(*)>(_a[3])),(*reinterpret_cast< const QString(*)>(_a[4])),(*reinterpret_cast< const QVariant(*)>(_a[5]))); break;
* - eventType: "keypress", "keyup" or "keydown" (default: "keypress")
#4 0x000000000041b603 in WebPage::sendEvent (this=0x2cd5370, type=...,arg1=..., arg2=..., mouseButton=..., modifierArg=...) at webpage.cpp:1449#5 0x000000000041b7a2 in WebPage::sendEvent (this=0x2cd5370, type=...,arg1=..., arg2=..., mouseButton=..., modifierArg=...) at webpage.cpp:1465#6 0x0000000000467c4f in WebPage::qt_static_metacall (_o=0x2cd5370, _c=QMetaObject::InvokeMetaMethod, _id=33, _a=0x7fffffffd9f0) at moc_webpage.cpp:265#7 0x00000000004687d6 in WebPage::qt_metacall (this=0x2cd5370, _c=QMetaObject::InvokeMetaMethod, _id=33, _a=0x7fffffffd9f0) at moc_webpage.cpp:361#8 0x0000000000543b9f in JSC::Bindings::QtRuntimeMetaMethod::call(JSC::ExecState*) ()
https://software.intel.com/zh-cn/forums/topic/289577
CasperJS – navigation scripting without callbacks
Start()
then()
run()
evaluate Execute function
Start() run()
callbacks
Qt Metacalls
PhantomJS
CasperJS
Query Selector
Dom Elements
Response(async)
Send event
Passing function
Return native type
Result Summary 1: deployment and destination addresses
apps.opera.co
m
ns.adobe.co
m
www.w3.org
purl.org
m.yad2.co
.il
www.podst.ru
blackberry
.apps.opera.co
m
symbian.apps.o
pera.com
java.apps.o
pera.com
windows-mobile
.apps.opera.co
m
html5.apps.o
pera.com
ios.apps.o
pera.com
www.apps.opera.co
mvk.
com
eventpilo
tadmin.com
commons.wiki
media.org
www.ewallpapers.
eu
wooi.ru
click.l
inksynergy.c
om
images.t
ravelnow.co
mgoo.gl
iptc.org
www.google.com
www.youtube.co
m
code.google.com
html5sh
im.googleco
de.com
epicenterla
bs.com
d3.c5.bb.a1.to
p.mail.r
u
search.huoch
epiao.com
creative
commons.o
rg
ep65.eventpilo
tadmin.com
en.wiki
pedia.org
vkontakte
.ru
www.blogcatalog.co
m
www.liveinternet.r
u
top.mail.r
u
a.contextb
ar.ru
depositfile
s.com
turbobit.net
bit.ly
0
50000
100000
150000
200000
250000 通信先の頻度(トップ40)
Xpath list を分割して、インスタンスに割り当てる
var casper = require('casper').create(); casper.start(ARGV[1], function() { this.capture('google.png');});casper.run();
Result Summary 2url occurrenceapps.opera.com 26400www.w3.org 20622ns.adobe.com 13843purl.org 13153www.iec.ch 10243blackberry.apps.opera.com 2454ios.apps.opera.com 2452vk.com 2205iptc.org 1006www.google.com 871html5shim.googlecode.com 785code.google.com 503www.youtube.com 394vkontakte.ru 368
country occurrenceUS 60107EU 43585CH 20017RU 5231AT 1100NL 958DE 820CA 584GB 398FR 236JP 214SG 202AP 174CN 153KR 115
まとめ: Navigation Scripting を用いた並列クローリングによる APK 配布サイトの調査■Android マルウェアの急激化な増加に伴い、 APK ファイルの配布形態も複雑化している。■ また、最近では、不正な APK の利用が、従来の Botnet や Information Reseller network のエコシステムの中に巧妙に組み込まれてきている。■ 提案システムでは、 Headless ブラウザである PhantomjS の WebKit Scritable API を用いて複雑な配布形態に対応し、その上で、ユニットテスティングを適用して不正な APK の利用が他の WEB サーバや SNS とどのように連動しているか明らかし、 Navigation Scripting で実行処理される Webkit API を簡易 DSL で制御することで、 Xpath 入力をベースにしたクローリングの並列化をおこない、不正な APK配布サイト群についての調査結果を報告する。■ 観測結果から、通信先のグラフはロングテールになり、 Google Play や有名な配布サイト以外にも、配布サイト(頻度5以下)が多数存在し、 VirusTotal などの検知システムを回避するために巧妙な仕掛けがされていることが明らかになった。