検索
連載

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

Androidアプリのセキュリティ対策技術について解説する本連載。第5回は、広告目的で利用者の情報を取得しようとするアプリの挙動を監視する技術を紹介する。

Share
Tweet
LINE
Hatena
前のページへ |       

具体的な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セキュリティ、情報漏えい対策などのテーマに取り組んでいる。博士(工学)。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る