知っていれば防げたはずのAndroidケーススタディ
1.2 コンテントプロバイダ使用時の典型的な脆弱性
アンドロイドアプリには、アプリケーション内のデータを外部に公開してアプリケーション間で共有する、コンテントプロバイダという仕組みが存在します。コンテントプロバイダはデータベースへの読み書きを行うインターフェースとして作成されることが多く、また開発時の分業にも役立つため、データベースを使用するアプリケーションでは、外部にデータを公開する必要がなくてもコンテントプロバイダを使用しているケースがよく見られます。アンドロイドOSのセキュリティ基本方針は、他のアプリケーションへのアクセスをデフォルトで禁止することですが、コンテントプロバイダは外部にアプリケーションデータを公開するための仕組みなので、他のアプリケーションからのアクセスがデフォルトで可能となっています。このため、データベース内に個人情報などが存在する場合、アクセス制限を適切に行わないと、他のアプリケーションからアクセスされ、情報が漏洩してしまいます。
アンドロイドマーケット上には、電話帳などの個人情報にアクセスしてアプリケーション固有のデータベースに保存しているにもかかわらず、コンテントプロバイダへのアクセスを制限していないものが見受けられます。このような脆弱性を持っていることが第三者にわかってしまうと、この脆弱性を突いた第三者アプリケーションによる個人情報の流出が可能になります。ここでは、第三者アプリケーションがどのようにして情報を取得するかについて説明します。
1.2.1 電話帳データの漏洩例
プログラムA:電話番号からQRコードを作成するアプリ
日本では電話番号を交換する際、赤外線通信を使って電話番号の交換を行うのが一般的です。しかし、アンドロイド端末には赤外線通信機能が付いていないものも多いため、口頭による電話番号の交換の代わりに、電話番号をQRコード化してアンドロイド端末上に表示し、受け取り側のカメラでQRコードを読み込んで電話番号を受け取るという、アプリケーションを経由した方法が存在します。
QRコードアプリ(プログラムA)をインストールすると、「連絡先データの読み取り」パーミッションがあることが表示されます。このアプリケーションは当然電話番号にアクセスする必要がありますし、ネットワーク通信を行うパーミッションもないため、ユーザはプログラムAによって連絡先データがネットワーク経由で収集されることはないと判断し、安心してインストールを行います。ここでは、作者の不注意により、プログラムAは電話帳から電話番号を取得してアプリケーション内のデータベースに名前や電話番号などの値を保存し、コンテントプロバイダで無制限に外部に公開しているものとします(図1-4)。
プログラムB:壁紙ダウンロードアプリ(プログラムAの脆弱性を利用したスパイアプリ)
有名になったプログラムAを調べていて、コンテントプロバイダへのアクセスが可能であることを発見した悪意を持つ第三者は、この脆弱性を利用してユーザの個人情報を盗むプログラムBを作成します。プログラムBはスパイアプリとわからないよう、正しい目的でインターネットにアクセスするように見えるアプリケーションとして、壁紙をダウンロードするアプリケーションを作成します。ユーザがプログラムBをインストールする際には、「ネットワーク通信/完全なインターネットアクセス」パーミッションがある旨が表示されます。壁紙をダウンロードするアプリケーションなのでネットワーク通信は必要であり、個人情報へのアクセス権限は持っていないので、ユーザは安心してインストールを行います(図1-5)。
図1-4:プログラムAのパーミッション(クリックで拡大) | 図1-5:プログラムBのパーミッション(クリックで拡大) |
しかし、このプログラムBは壁紙をダウンロードするだけでなく、プログラムAのコンテントプロバイダから名前や電話番号などの個人情報を取り出し、自分のネットワークサーバにアップロードします。アンドロイドでは、アプリケーションプロセスが他のアプリケーションから守られているため、他のプロセスからはプログラムBがどのようなデータを送信したのかわかりません。セキュリティソフトウェアをもってしても、これらの動作を検知することはできません。
図1-6:電話帳データの流れ(クリックで拡大) |
プログラムAの脆弱性により、ユーザは個人情報を抜き取られてしまいます。このような仕組みによってデータを抜き取られる可能性があることはあまり知られておらず、アンドロイドアプリの開発経験を積んだ技術者だけが把握しているのが現状です。この問題についての対策は、個人データにアクセスするコンテントプロバイダに適切なアクセス制限をかけるだけですが、コンテントプロバイダの動作の仕組みをよく理解していないと、重大なセキュリティホールを発生させてしまう可能性があるので、注意が必要です。
1.3 まとめ
アンドロイドの基本的な動作を理解していないことが原因で、作成したアプリケーションが意図せず、大きな問題を抱えてしまう可能性があることが理解いただけたでしょうか。次章では、アンドロイドOSがセキュリティを維持するための仕組みについて見ていきます。
Android Security 安全なアプリケーションを作成するために
システムの脆弱性を突くスパイウェアの手法を学び、ユーザの個人情報や企業データを情報漏洩のリスクから守る。セキュリティ対策チェックシートや用語集も収録! アンドロイドアプリの開発者が知っておくべき実践ノウハウが満載の一冊です。Android 4.0:Ice Cream Sandwich(APIレベル14)に関する最新情報にも対応!
タオソフトウェア株式会社 著
価格:3,360円 (本体 3,200円+税)
発売日:2012年01月06日発売
ISBN:978-4-8443-3134-6
発行:インプレスジャパン