実行コード上の機能間距離に基づく
Androidアプリの個人情報送信機能の推定
CSS(Computer Security Symposium)2013
西田雅太 岩本一樹 星澤裕二
株式会社セキュアブレイン 先端技術研究所
発表概要
•
•
•
•

研究背景
提案手法
検証
まとめ

2
研究背景
Androidパーミッション
個人情報漏洩のリスク

3
Android パーミッション
• Androidアプリのセキュリティモデルの一つ
• アプリが使用する機能やリソースを制限

4
Android パーミッション
アプリのインストール時に
利用する機能の一覧を提示

いつ・どのように機能を
利用するかは分からない
5
個人情報の漏洩リスク
事例: マルウェア Android.Uranico (2012/05)

6

一見、アドレス帳情報取得パーミッションの使用は妥当
しかし、バックグラウンドでアドレス帳情報を外部に送信
個人情報の漏洩リスク
• パーミッションの限界
– 個々の機能の利用用途をユーザが確認する
手段がない
– ユーザの意図しない形で機能が利用されて
しまう可能性

• 個人情報が悪用されるリスクも

パーミッション以外の機能用途の
判断材料の必要性
7
提案手法
基本コンセプト
コールグラフ
機能間距離の定義
機能間距離の実例(マルウェア)

8
基本コンセプト
例1

アドレス帳情報を取得するAPIとHTTP通信をす
るAPIが、同一のメソッドから呼び出されている
method

Read
Contacts

HTTP

HTTP通信によるアドレス情報送信の可能性
9
基本コンセプト
例2

アドレス帳情報を取得するAPIを呼び出しているメソッ
ドが、HTTP通信をするAPIを呼び出しているメソッドを
呼び出している
method

Read
Contacts
HTTP

これも、HTTP通信によるアドレス情報の
送信の可能性が考えられる

10
基本コンセプト
コールグラフ上で近傍に位置する
2つの機能は関連がある可能性が高い
個人情報取得機能と情報送信機能の
機能間距離を算出

個人情報送信機能の推定
11
コールグラフ - parsing dex file
• アプリの実行ファイル(Dexファイル)を解析
– 実行命令コード列(bytecode)
• 各メソッドのcode_itemセクション, Insns領域

– メソッド呼び出し命令 (10種類)
• invoke-kind (virtual, super, direct, static, interface)
• invoke-kind/range

• bytecode内のinvoke-kind(/range)の呼び出し
関係からコールグラフが生成できる
12
コールグラフ - parsing bytecode

メソッド呼び出し命令
(invoke-kind)

メソッド名と引数
13
コールグラフ – drawing graph
解析したbytecodeから
コールグラフを生成

Dougalek(The Movie)のコールグラフ
※メソッド名は省略

14
機能間距離 – 定義
• 任意の2つの機能を使用しているメソッドの
コールグラフ上の距離
– グラフのエッジの重みを1とする
距離:0

距離:1

距離:2
1

1
A

B

1

A

B

A

B
15
機能間距離 – 定義
• 共通の呼び出し元(メソッド)がある場合のみ
を対象とする
– 共通の呼び出し元がない
= 同じコールスタック内で2つの機能が
呼ばれることがない

A

B

機能間距離の算出が出来ないケース

A

B

機能間距離の算出が可能なケース
16
機能間距離 – 拡張
• 非同期処理の開始メソッドと実行メソッドをコールグ
ラフ上で結合する拡張を行う
– 外部への通信処理などは非同期的な実装がされ
ることが多いため

• 対象
– Thread.start() → Thread.run()
– AsyncTask.execute() → AsyncTask.doInBackground()

17
機能間距離の実例(マルウェア)
Android.Uranico → 距離2

18
機能間距離の実例(マルウェア)

TheMovie → 距離3

19
機能間距離の実例(マルウェア)
Enesoluty → 距離0

20
検証
検証方法
検証用サンプル
機能間距離の算出
静的解析

21
検証方法
• 検証対象
– 個人情報 → アドレス帳の電話番号、アドレス
– 送信機能 → HTTP, Socketによる通信

• 検証方法
– 検証用サンプル(後述)のアドレス帳情報の送信
に関する機能間距離を算出
– 静的解析の実施
• 外部にアドレス帳の情報が送信されるかを確認

22
検証用サンプル
• 検証用サンプルのベース

–10,000個のAndroidアプリケーション
• 一般アプリ配布サイトから収集
• 署名証明書ユニーク

READ_CONTACTS 及び INTERNET の
パーミッションを持ったアプリを抽出

•

731個 → 検証用サンプル
23
機能間距離の算出 – 対象
• 情報送信機能
– HTTP通信
• org.apache.http.impl.client.DefaultHttpClient.execute()
など

– Socket通信
• java.net.URLConnection.getOutputStream など

• アドレス帳アクセス
– アドレス帳DBアクセス時に使用する定数の参照
• android.provider.Contacts.Phones.CONTENT_URI など
24
機能間距離の算出
機能間距離
算出できた
算出不能
Total

Sample Rate
146 19.97%
585 80.03%
731

• 約2割の検証サンプルで機能間距離が算出
できた
25
機能間距離の算出 – 分布
30

25
20
15
10
5

0
0

1

2

3

4

5

6

7

8

9

10 11 12 13 14 15 16
26
静的解析
• 解析対象
– 機能間距離が算出できたサンプル (146個)
– 機能間距離が算出できなかったサンプルの一部 (40個)

• ツール
– JEB Interactive Android Decompiler を使用

• 解析内容
– アドレス帳情報の送信機能の有無を確認

27
静的解析 – コールグラフ
個人情報送信機能が確認できた例
距離2

メソッド名
→ inviteFriends, findPeopleFromContacts, postRequest, …
28
静的解析 – コールグラフ

解析が困難な例
距離7
29
静的解析 - 結果
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
Not Upload
Upload

機能間距離
算出可能

機能間距離
算出不能

71
75

33
7

• 機能間距離が算出できたサンプルのほうが、情報
送信機能が多く認められた
30
機能間距離
30

25
20
Not Upload

15

Upload
10
5

0
0

1

2

3

4

5

6

7

8

9 10 11 12 13 14 15 16
31
機能間距離
100%
90%
80%
70%
60%
50%

Not Upload

40%

Upload

30%
20%
10%

0%
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
32
まとめ
考察
課題・検討事項
今後の発展

33
考察
• 機能間距離の算出の有効性
– 機能間距離が算出できたサンプルのほうが、情
報送信機能が多く認められた

• 機能間距離と情報送信機能の関係
– 機能間距離が小さいもののほうが、情報送信機
能が多く認められた

34
課題・検討事項
• コールグラフの改善
– Interfaceへの対応
– クラス変数を介した情報の伝播
– File、データベースなど外部への情報の出力

• 機能間距離算出の最適化
– privateメソッドや同一クラス内のコールグラフの
エッジの重みの最適化

• 静的解析の精度
– 手動による解析のため、判定ミスの可能性
35
今後の発展
• マルウェアの表層解析への適用
• 他の個人情報への応用
• 蓄積した情報による情報送信機能を有する
確率の提示

36

Css2013 api distance