an empirical study of android apk distribution sites using headless browser with navigation...

13
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

Upload: ruo-ando

Post on 09-Jan-2017

160 views

Category:

Internet


2 download

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 などの検知システムを回避するために巧妙な仕掛けがされていることが明らかになった。