連載
» 2016年07月05日 05時00分 公開

「Androidアプリのプライバシー情報取得」、どう監視する?Androidセキュリティ技術の最前線(5)(2/2 ページ)

[毛利公一(立命館大学),@IT]
前のページへ 1|2       

具体的なAPIの監視方法

 では、具体的にこれらのAPIの監視を、どのように実現すればよいのだろうか。Androidアプリは、利用者情報の取得や外部との通信を行うために、アプリケーションフレームワークが提供する前述のAndroid APIを用いている。そのため、APIフックを行い、その情報を記録することで、利用者情報の取得や通信内容の追跡が可能である。具体的には、下図のような仕組みとなる。

 なお、APIの先頭には、ロギングメソッドを呼び出すように改変を加える。ロギングメソッドでは、下記のような情報を記録する。

  • パッケージ名やUIDなどの、アプリケーションの識別情報
  • プロセスIDやスレッドIDなどの実行情報
  • APIの種類、引数、戻り値などの情報
  • APIが呼び出されるまでの呼び出し過程

 これらの情報は、PCに取り出して解析することができる。特に、呼び出し過程については、各スレッドのスタックをさかのぼることで取得できる。下図のように、同じ通信系APIが呼び出された場合でも、スタックからどのモジュールから呼び出されたのかを区別することで、広告モジュールの挙動を特定できる。

 ただし、スレッドの生成やメッセージ通信による処理依頼など、一連の処理でありながらスタックが異なる場合については、個別に処理の流れを記録し、スタック間の関連を追える仕組みが必要となる。

 以上のような仕組みを用いて取得したログを基にすることで、グローバルIDなどの識別IDをAPIを用いて取得、送信するようなアプリを抽出することができる。また、そのようなAPIを呼び出したモジュールを特定することも可能となる。

実際のアプリを用いた調査の結果

 筆者らは、以上で述べた仕組みを用いて、著名アプリマーケットに掲載された「新着無料アプリケーション」上位50件について挙動を調査した。具体的には、広告事業者ごとに、グローバルIDなどを取得、送信したアプリケーションの個数を調査した。調査期間は2015年12月21日から2016年1月18日である。

 調査では、アプリケーションへの操作として、メニュー画面などで最初に利用者が操作できるアイコンを全てタップした。また、広告が画面に表示される場合には、広告にアクションを行い、ブラウザアプリケーションやマーケットアプリケーションへの画面遷移も観測した。

 調査結果は下表の通りである。表のうち「?」となっている部分は、個人識別情報取得のAPIを利用していることは観測できたが、その送信を検出できなかった場合である。また「−」の部分は、観測対象のAPIの利用が検出できなかった場合を示している。表にある通り、ほとんどの広告事業者はAdvertising ID(表中ではAdID)を用いているが、一部にはグローバルIDを取得するものがあることが分かる。

広告ライブラリモジュールが送信した個人識別情報
広告事業者 2015年12 月 21 日 2016年1 月 4 日 2016年1 月 18 日
送信情報 個数 送信情報 個数 送信情報 個数
A社 AdID 7 AdID 6
B社 1
C社 AdID 3 2 1
D社 AdID、 Android ID 2 AdID 2
E社 1
F社 2 2
G社 AdID 2 AdID 1 AdID 2
H社 AdID 4 AdID 5
I社 AdID 5 AdID 1 AdID 2
J社 AdID 3
K社 4 7 4
L社 AdID 5 AdID 10 AdID 9
M社 1 1 AdID 2
N社 AdID 8 AdID 10 AdID 10
O社 1
P社 Android ID、IMEI、MAC、AdID 2 Android ID、IMEI、MAC、AdID 5 Android ID、 IMEI、MAC、AdID 6
Q社 Android ID、AdID 7 Android ID、AdID 5 Android ID、AdID 8
R社 AdID 2 AdID 1
S、 T、 U、 V社

アプリ監視に関する今後の課題

 このように、アプリケーションフレームワークでの監視は比較的容易だ。アプリがJavaで記述されている限りは、監視漏れを抑えることができ、アプリケーションの挙動の意味を理解しやすい。ただし、JNI(Java Native Invocation)を用いて、CやC++などを用いて作成された外部のプログラム群を呼び出すことで、これらの監視をくぐり抜けることができてしまう。従って、外部プログラム群については、Linuxカーネルによる監視も検討する必要がある。

 また、取得したグローバルIDがネットワーク経由で送信されるときに暗号化されると、検出が難しくなる。これに対しては、アプリケーションのプログラム中での特定のデータに対するコピーや変換、保存、送信などの操作を追跡する「テイント解析技術」を用いて解決する研究もなされている。ただし、処理速度の問題や暗黙的フローと呼ばれる検出が困難なデータの流れが存在するという問題、JNIが用いられたときに追跡が困難となる問題など、まだまだ解決すべき課題も多いのが現状である。

 以上、本稿ではAndroidアプリにおける広告ライブラリモジュールの挙動を監視する技術について解説を行った。次回は、不正なAndroidアプリ(マルウェア)によるシステム改ざんを検知する技術について紹介する。

著者プロフィール

▼毛利 公一(もうり こういち)

立命館大学情報理工学部 教授

オペレーティングシステム、仮想化技術の研究・教育に従事。近年は、これらを基にしたコンピュータセキュリティ分野の研究として、特にマルウェア対策技術、Androidセキュリティ、情報漏えい対策などのテーマに取り組んでいる。博士(工学)。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。