Hello there, ('ω')ノ
📮 インテントとは何か?
インテントは、Androidアプリ間やアプリ内部で行われる「命令」や「通知」のようなものです。
たとえば:
- カメラアプリを呼び出す
- メールアプリで下書きを開く
- 特定の画面(Activity)に遷移する
- バックグラウンドでイベント(Broadcast)を伝える
このように、アプリはインテントを通じて他のアプリと連携しています。
⚠️ インテントの脆弱性とは?
インテントの設計ミスによって、以下のような問題が起きる可能性があります:
| 問題の種類 | 内容 |
|---|---|
| Exported Activityへの不正アクセス | 他のアプリから画面が勝手に開かれてしまう |
| インテントに渡したデータが検証されない | 任意のコマンドやURLを注入できてしまう |
| 信頼して受け取ったインテントが偽装される | アプリ内部のロジックが悪用される可能性 |
🛠 Drozerでインテント診断をする手順
ここでは、Drozerを使ってアプリのインテント受け取り口(ActivityやBroadcastReceiverなど)に悪意あるメッセージを送ってみる診断をしていきます。
仮想アプリ:com.example.vulnerableapp
✅ ① アプリ内のコンポーネント一覧を取得
dz> run app.activity.info -a com.example.vulnerableapp
出力例:
com.example.vulnerableapp.ExposedActivity - Exported = true - Permission = null
→ 外部に公開されているActivityが確認できます。
✅ ② インテントを使って画面を強制起動する
dz> run app.activity.start --component com.example.vulnerableapp com.example.vulnerableapp.ExposedActivity
→ 端末上でこの画面が起動すれば、外部から不正にアクセスできる状態ということになります。
✅ ③ インテントにデータを付けて送り込んでみる
dz> run app.activity.start --component com.example.vulnerableapp com.example.vulnerableapp.ExposedActivity --extra string secret_key hacked
→ --extra オプションでパラメータを注入し、アプリが想定外の処理を行うか確認できます。
✅ ④ 受信ブロードキャストのリストを取得する
dz> run app.broadcast.info -a com.example.vulnerableapp
出力例:
com.example.vulnerableapp.BootReceiver - Exported = true - Permission = null
→ 外部からブロードキャストを送ってイベントを強制的に発生させられる可能性があります。
✅ ⑤ ブロードキャスト送信による診断
dz> run app.broadcast.send --action com.example.vulnerableapp.SHOW_NOTIFICATION
→ 設定ミスがあれば、通知表示、アラーム起動、ファイル操作などの機能が外部から実行できてしまいます。
🧠 診断でのチェックポイント
| チェック項目 | 内容 |
|---|---|
| Exported=trueのActivityやReceiverが存在するか | 外部から呼び出せる“穴”があるか確認 |
| インテントに渡したデータをアプリが検証しているか | バリデーションがされていないと危険 |
| 特定のアクション名(IntentFilter)が設定されているか | 偽装インテントの危険性を確認 |
| permission属性が未設定でないか | 外部から無制限に使われないようにする |
🎯 攻撃再現で見えてくるリスク例
- ログインバイパス:内部画面に直接遷移
- 機密情報の意図しない表示:デバッグ画面が外部から開ける
- 偽装ブロードキャストによる操作強制:バックアップ開始、通知表示など
✅ まとめ
- インテントはアプリ間の“会話”だが、設定ミスがあると誰でも会話に割り込める危険性がある
- Drozerを使えば、インテントを実際に送り込んでアクセスの成否を確認できる
- Exported属性・パーミッション・IntentFilterを組み合わせて脆弱性の有無を見極めよう
- 診断結果から、内部機能が外部に漏れていないかしっかりチェックすることが重要
Best regards, (^^ゞ