前回は、Androidのアプリ間の連携機能を紹介した。今回は、その仕組みを適切に使用しなかったために作り込まれた、アクセス制限不備に関する脆弱性を紹介する。なお、紹介する例は、実際にIPAに届け出られた脆弱性関連情報をもとにしている。

Intentの脆弱性

 前回、他のアプリとデータ共有や機能連携するためには、Androidに備わっている「Intent」、「Content Provider」と呼ばれる仕組みを使用する必要があることを説明した。このうち、Intentは、Androidアプリから他のアプリの機能を呼び出すことができる仕組みであるが、呼び出される側のアクセス制限に不備があると、意図しないアプリから機能を呼び出されてしまうことになる。

 ここでは、脆弱性のあるアプリの例として「画像共有サイトへ画像を投稿するアプリ」を挙げる。このアプリは、ユーザーが指定したAndroid端末内にある画像ファイルを特定の画像共有サイトへアップロードすることを目的としたものである。

 表1のような機能を備えており、他のアプリからインテントによる呼び出しを許可している。

表1 「画像共有サイトへ画像を投稿するアプリ」の機能
機能 動作に必要な権限補足
・画像共有サイトへAndroid端末内にある画像ファイルをアップロードする
・他のアプリとの連携
・完全なインターネット アクセス 他のアプリからも本アプリを使って画像共有サイトへ画像ファイルをアップロードすることができる

図1● Intentの脆弱性の悪用イメージ
図1●Intentの脆弱性の悪用イメージ
[画像のクリックで拡大表示]

 この画像投稿アプリにはIntentに関するアクセス制限の不備があり、どのようなアプリからも画像ファイルを画像共有サイトへ投稿することができるようになっている。この脆弱性を悪用する不正なアプリをユーザーがインストールし起動させてしまうと、不正なアプリがアクセス可能な画像ファイルを動画共有サイトに投稿できてしまうことになる(図1)。この場合、不正なアプリがインターネットにアクセスする権限は不要である。具体的な被害としては、不正なアプリにより、他人に公開したくないプライベートな写真が勝手に写真共有サイトにアップロードされるということが考えられる。

Content Providerの脆弱性

 Androidアプリが管理するデータを他のアプリと共有するための一つの手段として、Content Providerの利用がある。アプリがContent Providerの仕組みを実装し、データを共有している場合は、そのデータにContent Provider経由でアクセスできるが、アクセス制限に不備があると、意図しないアプリからデータを取得されてしまうことになる。

 ここでは、脆弱性のあるアプリの例として「電話帳のバックアップ・アプリ」を挙げる。このアプリは、電話帳のバックアップおよびリストアをすることを目的としたものである。表1のような機能を備えており、Content Provider経由で別アプリからバックアップ・データへアクセスを許可している。

表2 「電話帳のバックアップ・アプリ」の機能
機能 動作に必要な権限補足
・電話帳のバックアップ
・電話帳のリストア
・別アプリのビューアとの連携
・連絡先データの読み取り
・連絡先データの書き込み
別アプリのビューアから、コンテントプロバイダを経由したバックアップ・データへのアクセスを許可している

不正なアプリによる攻撃イメージとその影響

図2●Content Providerの脆弱性の悪用イメージ
図2●Content Providerの脆弱性の悪用イメージ
[画像のクリックで拡大表示]

 上記のバックアップ・アプリのContnt Providerにはアクセス制限の不備があり、Content Providerを経由すれば、どのようなアプリからもバックアップ・データへアクセスできてしまう脆弱性が存在する。この脆弱性を悪用する不正なアプリをユーザーがインストールし起動させてしまうと、不正なアプリが電話帳のデータを取得できてしまうことになる(図2)。この場合、不正なアプリは連絡先データの読み取りや書き込みの権限は必要ないため、インストール時に権限からアプリの挙動を推測することは困難である。

機能やデータを提供するAndroidアプリ側で対策が必須

 IntentやContent Providerは、Androidアプリ間でデータ共有や機能連携するために欠かせない仕組みであるが、使い方を誤ると、他のアプリから意図しないアクセスを許してしまうことになる。そのため、適切にアクセス制限を実施する必要がある。

 IntentやContent Providerにおけるアクセス制限として、Intentにより呼び出される機能(Activity)やContent Providerの実装方法による制限と、Androidアプリごとに存在するAndroidManifest.xmlファイルの設定による制限が存在する。日本スマートフォンセキュリティ協会(JSSEC)が公開している「Androidアプリのセキュア設計・セキュアコーディングガイド」 では、アプリの性質に合わせた実装方法やAndroidManifest.xmlファイルの設定方法についてコード例を交えて紹介している。無料であるので、アプリ開発者は一読することをお勧めする。

 最終回となる次回は、Webページを表示しただけで被害が発生するAndroidアプリの脆弱性について例を挙げて紹介する。