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

Css2013 api distance

Embed Size (px)

Citation preview

Page 1: Css2013 api distance

実行コード上の機能間距離に基づく Androidアプリの個人情報送信機能の推定

CSS(Computer Security Symposium)2013

西田雅太 岩本一樹 星澤裕二

株式会社セキュアブレイン 先端技術研究所

Page 2: Css2013 api distance

発表概要

• 研究背景

• 提案手法

• 検証

• まとめ

2

Page 3: Css2013 api distance

研究背景 Androidパーミッション

個人情報漏洩のリスク

3

Page 4: Css2013 api distance

Android パーミッション

• Androidアプリのセキュリティモデルの一つ

• アプリが使用する機能やリソースを制限

4

Page 5: Css2013 api distance

Android パーミッション

5

アプリのインストール時に 利用する機能の一覧を提示

いつ・どのように機能を 利用するかは分からない

Page 6: Css2013 api distance

事例: マルウェア Android.Uranico (2012/05)

個人情報の漏洩リスク

6

一見、アドレス帳情報取得パーミッションの使用は妥当

しかし、バックグラウンドでアドレス帳情報を外部に送信

Page 7: Css2013 api distance

個人情報の漏洩リスク

• パーミッションの限界 – 個々の機能の利用用途をユーザが確認する 手段がない

– ユーザの意図しない形で機能が利用されて しまう可能性

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

7

パーミッション以外の機能用途の 判断材料の必要性

Page 8: Css2013 api distance

提案手法 基本コンセプト

コールグラフ

機能間距離の定義

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

8

Page 9: Css2013 api distance

基本コンセプト

9

method

HTTP Read

Contacts

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

HTTP通信によるアドレス情報送信の可能性

例1

Page 10: Css2013 api distance

基本コンセプト

10

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

method

HTTP

Read

Contacts

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

例2

Page 11: Css2013 api distance

基本コンセプト

11

コールグラフ上で近傍に位置する 2つの機能は関連がある可能性が高い

個人情報取得機能と情報送信機能の 機能間距離を算出

個人情報送信機能の推定

Page 12: Css2013 api distance

コールグラフ - parsing dex file

• アプリの実行ファイル(Dexファイル)を解析

–実行命令コード列(bytecode)

• 各メソッドのcode_itemセクション, Insns領域

– メソッド呼び出し命令 (10種類)

• invoke-kind (virtual, super, direct, static, interface)

• invoke-kind/range

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

12

Page 13: Css2013 api distance

コールグラフ - parsing bytecode

13

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

メソッド名と引数

Page 14: Css2013 api distance

コールグラフ – drawing graph

14

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

解析したbytecodeから コールグラフを生成

Page 15: Css2013 api distance

機能間距離 – 定義

• 任意の2つの機能を使用しているメソッドの コールグラフ上の距離

–グラフのエッジの重みを1とする

15

B A

距離:0

B

A

距離:1

1

B A

距離:2

1 1

Page 16: Css2013 api distance

機能間距離 – 定義

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

16

B A B A

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

Page 17: Css2013 api distance

機能間距離 – 拡張

• 非同期処理の開始メソッドと実行メソッドをコールグラフ上で結合する拡張を行う

–外部への通信処理などは非同期的な実装がされることが多いため

• 対象

– Thread.start() → Thread.run()

– AsyncTask.execute() → AsyncTask.doInBackground()

17

Page 18: Css2013 api distance

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

18

Android.Uranico → 距離2

Page 19: Css2013 api distance

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

19

TheMovie → 距離3

Page 20: Css2013 api distance

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

20

Enesoluty → 距離0

Page 21: Css2013 api distance

検証 検証方法

検証用サンプル

機能間距離の算出

静的解析

21

Page 22: Css2013 api distance

検証方法

• 検証対象

–個人情報 → アドレス帳の電話番号、アドレス

–送信機能 → HTTP, Socketによる通信

• 検証方法

–検証用サンプル(後述)のアドレス帳情報の送信に関する機能間距離を算出

–静的解析の実施

• 外部にアドレス帳の情報が送信されるかを確認

22

Page 23: Css2013 api distance

検証用サンプル

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

–10,000個のAndroidアプリケーション

• 一般アプリ配布サイトから収集

• 署名証明書ユニーク

• 731個 → 検証用サンプル

23

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

Page 24: Css2013 api distance

機能間距離の算出 – 対象

• 情報送信機能

– HTTP通信

• org.apache.http.impl.client.DefaultHttpClient.execute() など

– Socket通信

• java.net.URLConnection.getOutputStream など

• アドレス帳アクセス

–アドレス帳DBアクセス時に使用する定数の参照

• android.provider.Contacts.Phones.CONTENT_URI など

24

Page 25: Css2013 api distance

機能間距離の算出

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

25

機能間距離 Sample Rate

算出できた 146 19.97%

算出不能 585 80.03%

Total 731

Page 26: Css2013 api distance

機能間距離の算出 – 分布

0

5

10

15

20

25

30

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

26

Page 27: Css2013 api distance

静的解析

• 解析対象 – 機能間距離が算出できたサンプル (146個)

– 機能間距離が算出できなかったサンプルの一部 (40個)

• ツール

– JEB Interactive Android Decompiler を使用

• 解析内容

–アドレス帳情報の送信機能の有無を確認

27

Page 28: Css2013 api distance

静的解析 – コールグラフ

28

メソッド名 → inviteFriends, findPeopleFromContacts, postRequest, …

個人情報送信機能が確認できた例 距離2

Page 29: Css2013 api distance

静的解析 – コールグラフ

29

解析が困難な例 距離7

Page 30: Css2013 api distance

静的解析 - 結果

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

30

機能間距離

算出可能

機能間距離

算出不能

Not Upload 71 33

Upload 75 7

0% 10% 20% 30% 40% 50% 60% 70% 80% 90%

100%

Page 31: Css2013 api distance

機能間距離

0

5

10

15

20

25

30

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Not Upload

Upload

31

Page 32: Css2013 api distance

機能間距離

32

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Not Upload

Upload

Page 33: Css2013 api distance

まとめ 考察

課題・検討事項

今後の発展

33

Page 34: Css2013 api distance

考察

• 機能間距離の算出の有効性

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

• 機能間距離と情報送信機能の関係

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

34

Page 35: Css2013 api distance

課題・検討事項

• コールグラフの改善 – Interfaceへの対応

– クラス変数を介した情報の伝播

– File、データベースなど外部への情報の出力

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

• 静的解析の精度 –手動による解析のため、判定ミスの可能性

35

Page 36: Css2013 api distance

今後の発展

• マルウェアの表層解析への適用

• 他の個人情報への応用

• 蓄積した情報による情報送信機能を有する確率の提示

36