Upload
infosecurebrain
View
3.655
Download
0
Embed Size (px)
Citation preview
実行コード上の機能間距離に基づく Androidアプリの個人情報送信機能の推定
CSS(Computer Security Symposium)2013
西田雅太 岩本一樹 星澤裕二
株式会社セキュアブレイン 先端技術研究所
発表概要
• 研究背景
• 提案手法
• 検証
• まとめ
2
研究背景 Androidパーミッション
個人情報漏洩のリスク
3
Android パーミッション
• Androidアプリのセキュリティモデルの一つ
• アプリが使用する機能やリソースを制限
4
Android パーミッション
5
アプリのインストール時に 利用する機能の一覧を提示
いつ・どのように機能を 利用するかは分からない
事例: マルウェア Android.Uranico (2012/05)
個人情報の漏洩リスク
6
一見、アドレス帳情報取得パーミッションの使用は妥当
しかし、バックグラウンドでアドレス帳情報を外部に送信
個人情報の漏洩リスク
• パーミッションの限界 – 個々の機能の利用用途をユーザが確認する 手段がない
– ユーザの意図しない形で機能が利用されて しまう可能性
• 個人情報が悪用されるリスクも
7
パーミッション以外の機能用途の 判断材料の必要性
提案手法 基本コンセプト
コールグラフ
機能間距離の定義
機能間距離の実例(マルウェア)
8
基本コンセプト
9
method
HTTP Read
Contacts
アドレス帳情報を取得するAPIとHTTP通信をするAPIが、同一のメソッドから呼び出されている
HTTP通信によるアドレス情報送信の可能性
例1
基本コンセプト
10
アドレス帳情報を取得するAPIを呼び出しているメソッドが、HTTP通信をするAPIを呼び出しているメソッドを呼び出している
method
HTTP
Read
Contacts
これも、HTTP通信によるアドレス情報の送信の可能性が考えられる
例2
基本コンセプト
11
コールグラフ上で近傍に位置する 2つの機能は関連がある可能性が高い
個人情報取得機能と情報送信機能の 機能間距離を算出
個人情報送信機能の推定
コールグラフ - 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
13
メソッド呼び出し命令 (invoke-kind)
メソッド名と引数
コールグラフ – drawing graph
14
Dougalek(The Movie)のコールグラフ ※メソッド名は省略
解析したbytecodeから コールグラフを生成
機能間距離 – 定義
• 任意の2つの機能を使用しているメソッドの コールグラフ上の距離
–グラフのエッジの重みを1とする
15
B A
距離:0
B
A
距離:1
1
B A
距離:2
1 1
機能間距離 – 定義
• 共通の呼び出し元(メソッド)がある場合のみを対象とする –共通の呼び出し元がない = 同じコールスタック内で2つの機能が 呼ばれることがない
16
B A B A
機能間距離の算出が出来ないケース 機能間距離の算出が可能なケース
機能間距離 – 拡張
• 非同期処理の開始メソッドと実行メソッドをコールグラフ上で結合する拡張を行う
–外部への通信処理などは非同期的な実装がされることが多いため
• 対象
– Thread.start() → Thread.run()
– AsyncTask.execute() → AsyncTask.doInBackground()
17
機能間距離の実例(マルウェア)
18
Android.Uranico → 距離2
機能間距離の実例(マルウェア)
19
TheMovie → 距離3
機能間距離の実例(マルウェア)
20
Enesoluty → 距離0
検証 検証方法
検証用サンプル
機能間距離の算出
静的解析
21
検証方法
• 検証対象
–個人情報 → アドレス帳の電話番号、アドレス
–送信機能 → HTTP, Socketによる通信
• 検証方法
–検証用サンプル(後述)のアドレス帳情報の送信に関する機能間距離を算出
–静的解析の実施
• 外部にアドレス帳の情報が送信されるかを確認
22
検証用サンプル
• 検証用サンプルのベース
–10,000個のAndroidアプリケーション
• 一般アプリ配布サイトから収集
• 署名証明書ユニーク
• 731個 → 検証用サンプル
23
READ_CONTACTS 及び INTERNET の パーミッションを持ったアプリを抽出
機能間距離の算出 – 対象
• 情報送信機能
– HTTP通信
• org.apache.http.impl.client.DefaultHttpClient.execute() など
– Socket通信
• java.net.URLConnection.getOutputStream など
• アドレス帳アクセス
–アドレス帳DBアクセス時に使用する定数の参照
• android.provider.Contacts.Phones.CONTENT_URI など
24
機能間距離の算出
• 約2割の検証サンプルで機能間距離が算出できた
25
機能間距離 Sample Rate
算出できた 146 19.97%
算出不能 585 80.03%
Total 731
機能間距離の算出 – 分布
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
静的解析
• 解析対象 – 機能間距離が算出できたサンプル (146個)
– 機能間距離が算出できなかったサンプルの一部 (40個)
• ツール
– JEB Interactive Android Decompiler を使用
• 解析内容
–アドレス帳情報の送信機能の有無を確認
27
静的解析 – コールグラフ
28
メソッド名 → inviteFriends, findPeopleFromContacts, postRequest, …
個人情報送信機能が確認できた例 距離2
静的解析 – コールグラフ
29
解析が困難な例 距離7
静的解析 - 結果
• 機能間距離が算出できたサンプルのほうが、情報送信機能が多く認められた
30
機能間距離
算出可能
機能間距離
算出不能
Not Upload 71 33
Upload 75 7
0% 10% 20% 30% 40% 50% 60% 70% 80% 90%
100%
機能間距離
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
機能間距離
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
まとめ 考察
課題・検討事項
今後の発展
33
考察
• 機能間距離の算出の有効性
–機能間距離が算出できたサンプルのほうが、情報送信機能が多く認められた
• 機能間距離と情報送信機能の関係
–機能間距離が小さいもののほうが、情報送信機能が多く認められた
34
課題・検討事項
• コールグラフの改善 – Interfaceへの対応
– クラス変数を介した情報の伝播
– File、データベースなど外部への情報の出力
• 機能間距離算出の最適化 – privateメソッドや同一クラス内のコールグラフのエッジの重みの最適化
• 静的解析の精度 –手動による解析のため、判定ミスの可能性
35
今後の発展
• マルウェアの表層解析への適用
• 他の個人情報への応用
• 蓄積した情報による情報送信機能を有する確率の提示
36