コンポーネントのアクセス制限不備

学習内容

ここでは、コンポーネントのアクセス制限不備によって生じる脆弱性を理解する上で必要な知識について学習します。
具体的には、コンポーネント、Intentの概要や、事例を交えた脆弱性の概要について説明します。

学習の流れは以下のとおりです。

  • コンポーネントとIntent
    Android OSが提供する各コンポーネントの概要と、Intentについて学習します。
  • コンポーネントのアクセス制限不備によって生じる脆弱性
    コンポーネントのアクセス制限に不備がある場合に、どのような脆弱性が生じるのか学習します。
  • 脆弱性の事例
    コンポーネントのアクセス制限不備による脆弱性の事例を紹介します。
  • 学習シナリオ
    サンプルアプリのソースコードを確認し、脆弱性を体験を通じて、開発時に注意すべきポイントと対策方法について学習します。
    ここでは以下の3つのシナリオを用いて学習します。
    • 非公開コンポーネントのアクセス制限不備
    • 公開コンポーネントのアクセス制限不備
    • ContentProviderのアクセス制限不備

コンポーネントとIntent

コンポーネントとは
コンポーネントは、アプリを構成する重要な機能要素です。各コンポーネントはそれぞれ異なる機能をもっており、 開発者はコンポーネントを組み合わせて利用することにより、アプリに様々な機能を実装することができます。
コンポーネントには次の4種類があります。
  • Activity
    ユーザインターフェース(UI)を提供するコンポーネントです。
    利用者に画面を表示して、利用者からのデータ入力や操作を受け取ります。
  • BroadcastReceiver
    システム、または他のアプリからの通知(Broadcast)を受け取るために使用するコンポーネントです。
    Android OSからアラームを受け取ったり、自アプリ内で非同期に実行されていたスレッドから処理完了通知を受け取ったりする場合に使用します。
  • Service
    ユーザインターフェースを持たず、バックグラウンドで処理を継続したり、他のアプリに機能を提供したりする際に使用されるコンポーネントです。
  • ContentProvider
    アプリ間でデータを受け渡す仕組みを受け持つコンポーネントです。
    ContentProviderを使用することにより、アプリはデータがSDカード上のファイルなのか、 データベースなのかといった実体の違いを意識することなく、同じインターフェースを使用してさまざまなデータにアクセスできます。

他のアプリと連携をするアプリを作成する際には、コンポーネントを公開し、他のアプリからのIntentに応答するよう設定します。

Intentとは
コンポーネント間の連携にはIntentを使用します。
Intentを用いることにより、アプリ内のコンポーネント間やアプリ間でデータの受け渡しが可能になります。

Intentには以下の2種類があります。それぞれに用途や動作が異なるため、それらをきちんと理解した上で利用することが重要です。
  • 明示的Intent
    Intentを送信する際に受け取り先のコンポーネントを指定して送信します。
  • 暗黙的Intent
    Intentを送信する際に受け取り先のコンポーネントを指定せず、アクションと呼ばれる処理方法を指定して送信するIntentです。
    送信側が指定したアクションに呼応するコンポーネントが、送信されたIntentを受け取ります。
    受け取り先のコンポーネントは、Intentを受け取るためにAndroidManifest.xmlの設定が必要になります。

コンポーネントのアクセス制限不備によって生じる脆弱性

アプリは複数のコンポーネントにより構成されています。コンポーネントを適切に公開する事でアプリ間の機能連携を実現します。 しかし、コンポーネントのアクセス制限に不備があった場合、想定外のアプリからコンポーネントが利用される事で問題が発生する事が考えられます。
コンポーネントのアクセス制限不備が原因で発生する問題として以下が挙げられます。
  • コンポーネントの機能を不正に利用される
    誤って公開しているコンポーネントの機能を不正に利用されることにより、情報が改ざんされたり、漏えいしたりする可能性があります。

脆弱性の事例

コンポーネントのアクセス制限について理解しないままアプリを開発すると、アプリに脆弱性を作り込んでしまいます。
ここでは、コンポーネントのアクセス制限不備による脆弱性の事例を挙げます。
事例:twicca におけるアクセス制限不備の脆弱性
2012年3月 JVNに、twiccaのコンポーネントのアクセス制限不備に関する脆弱性報告が報告されました。 Activityの公開設定に不備があり、ネットワークへのアクセス権を持たないアプリによって、twicca の権限で画像ファイルをアップロードされる可能性がありました。
脆弱性の事例
参考URL:
JVNDB-2012-000024:twicca におけるアクセス制限不備の脆弱性
http://jvndb.jvn.jp/ja/contents/2012/JVNDB-2012-000024.html



このように、開発者はコンポーネントのアクセス制限不備に常に注意しておく事が必要です。

学習シナリオ

コンポーネントのアクセス制限不備によって生じる脆弱性の概要について理解できたでしょうか。 それでは以下のシナリオを通して脆弱性のあるサンプルアプリを見ながら、脆弱性を作り込んでしまう原因や、対策方法について学習していきましょう。