暗黙的Intentの不適切な使用

学習内容

ここでは、暗黙的Intentの不適切な使用について理解する上で必要となる基本的な知識について学習します。
具体的には、Intent、IntentFilterの概要や、事例を交えた脆弱性の概要について説明します。

学習の流れは以下のとおりです。
  • IntentとIntentFilter
    Android OSのIntentとIntentFilterの概要ついて学習します。
  • 暗黙的Intentの不適切な使用により生じる脆弱性
    暗黙的Intentの使用が不適切な場合に、どのような脆弱性が生じるのか学習します。
  • 脆弱性の事例
    暗黙的Intentの不適切な使用による脆弱性の事例を紹介します。
  • 学習シナリオ
    サンプルアプリのソースコードを確認し、脆弱性体験を通じて、開発時に注意すべきポイントと対策方法について学習します。
    ここでは以下のシナリオを用いて学習します。
    • BroadcastしたIntent情報の漏えい

IntentとIntentFilter

  • Intentとは
    AndroidにはIntentと呼ばれるコンポーネント間の連携の仕組みがあります。
    Intentを用いることにより、アプリ内のコンポーネント間や別アプリ間でデータの受け渡しが可能になります。しかし、Intentの特性をよく理解していなかった場合、アプリに脆弱性を作り込んでしまいます。

    Intentには以下の2種類があります。それぞれに用途や動作が異なるため、それらをきちんと理解した上で利用することが重要です。
    • 明示的Intent
      Intentを送信する際に受け取り先のコンポーネントを指定して送信します。
    • 暗黙的Intent
      Intentを送信する際に受け取り先のコンポーネントを指定せず、アクションと呼ばれる処理方法を指定して送信します。
      送信側が指定したアクションに呼応するコンポーネントが送信されたIntentを受け取ります。
      Intentを受け取る側のコンポーネントでは、コンポーネントの宣言の際に「AndroidManifest.xml」内に記述するIntentFilterに呼応するアクションを記述します。
  • IntentFilterとは
    IntentFilterとは、コンポーネントが受け取る暗黙的Intentの条件を定義するものです。IntentFilterは、暗黙的Intentを受け取る側のコンポーネントで定義します。受け取る暗黙的Intentの条件は、アクションと呼ばれる処理方法を指定することで設定します。他のアプリが送信した暗黙的Intentは、Android OSによってアクションが一致するIntentFilterを持つコンポーネントに送信されます。 対象となるコンポーネントが複数存在する場合には、Android OSが選択リストを表示し、利用者に対してどちらのコンポーネントにIntentを渡すか選択を求めるように動作します。
    同じIntentFilterを持ったアプリ、とは、同じアクションが設定されたIntentFilterを持ったアプリ、と同じことを意味します。 IntentFilterの設定は、「AndroidManifest.xml」内でのコンポーネントの宣言時に以下のように設定します。
    <activity android:name="MyActivity"
              android:label="@string/app_name"
              android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    
    アクションにはAndroid OSがあらかじめ用意したものの他に、アプリが独自で定義したアクションを用いることもできます。
    また、Android OSがあらかじめ用意しているアクションについては、以下のページを参照してください。
    Intent | Android Developers
    http://developer.android.com/reference/android/content/Intent.html

暗黙的Intentの不適切な使用により生じる脆弱性

暗黙的Intentの使用が不適切な場合、想定外のアプリがIntentを受信してしまう可能性があります。
悪意のあるアプリにIntentが傍受された場合、Intentに含まれている情報が外部に漏えいしてしまう恐れがあります。

脆弱性の事例

暗黙的Intentの特徴を理解しないままアプリを作成すると、アプリに脆弱性を作り込んでしまいます。
ここでは、暗黙的Intentの不適切な使用による脆弱性の事例を挙げます。
事例:Android版LINEにおける暗黙的Intentの扱いに関する脆弱性
2012年8月 JVNに、Android版LINEに、暗黙的Intentの扱いに関する脆弱性があり、LINEで送信したメッセージ内容が、不正なAndroidアプリ経由で第三者に漏えいする可能性についての報告がありました。 利用者が入力したメッセージを送信しようとした際、送信メッセージを他のアプリでも取得する事が可能になっていました。
脆弱性の事例
参考URL:
JVNDB-2012-000074:Android 版LINEにおける暗黙的Intentの扱いに関する脆弱性
http://jvndb.jvn.jp/ja/contents/2012/JVNDB-2012-000074.html

このように、開発者は暗黙的Intentの取り扱いには注意を払う事が必要です。

学習シナリオ

暗黙的Intentの不適切な使用によって生じる脆弱性の概要について理解できたでしょうか。 それでは以下のシナリオを通して脆弱性のあるサンプルアプリを見ながら、脆弱性を作り込んでしまう原因や、対策方法について学習していきましょう。