Hello there, ('ω')ノ
🎯 アタックサーフェスとは?
アタックサーフェスとは、簡単に言うと 👉「アプリに外部からアクセスできる“入り口”の一覧」 のことです。
アプリがどこでユーザーや他のアプリ、ネットワークとやりとりしているか? その「やりとりのポイント」が攻撃の対象になりうる、という考え方です。
📌 アタックサーフェスの例(Androidアプリ編)
| 攻撃経路の種類 | 内容 |
|---|---|
| インテント受信口 | 他アプリからの呼び出し(Activity / Service / BroadcastReceiver) |
| Web API通信 | サーバーとのやりとり(HTTP / HTTPS) |
| ファイル保存領域 | 内部・外部ストレージに保存されているファイル |
| ログ出力 | Log.d() や printStackTrace() など |
| データベースや設定ファイル | SQLiteやSharedPreferences |
| デバッグポート | ADBや開発者モードを通じた端末との接続 |
| WebView | 外部のWebコンテンツを読み込む機能 |
| クラッシュレポートや通知 | 開発者向けに送信される情報も攻撃対象になることがある |
🧪 なぜアタックサーフェスを洗い出すのか?
アプリに脆弱性があったとしても、それが外部から届かなければ“実害”はありません。 しかし、攻撃者はアタックサーフェスを通じてアプリ内部に入り込み、次のような攻撃を仕掛けます:
- 認証を通り抜けて内部画面を開く
- データベースや設定ファイルから情報を盗む
- Web APIに不正なリクエストを送る
- ログ出力やエラーメッセージからヒントを得る
だからこそ、診断の初期段階では**「攻撃が届く場所を全部見つける」=アタックサーフェスの洗い出し**が超重要なんです。
🔍 実際に診断で行うアタックサーフェスの抽出方法
✅ 1. Manifestファイルの解析
android:exported="true"なActivityやServiceを探すintent-filter付きのReceiverを見つける
✅ 2. Java/Kotlinコードの確認
- Web APIのURLがハードコードされていないか?
- WebViewで外部サイトを読み込んでいないか?
- ファイル書き込みコードにパスや形式の指定があるか?
✅ 3. MobSFによる自動抽出
MobSFは自動的にアタックサーフェスをリストアップしてくれます:
- Exposed Activities
- Broadcast Receivers
- Content Providers
- Dangerous Permissions
✅ 4. ADBやDrozerを使った動的検証
- 実際に起動できるか、データを送れるかを試す
adb shell am startや Drozerのrun app.activity.startなどを活用
🧠 アタックサーフェスを知ることで得られること
- 診断の優先順位が立てられる:「この機能が一番危ないから最初に見る」
- 攻撃者の視点が持てる:「どこを突破すれば中に入れるか」がわかる
- 設計改善にもつながる:「そもそも公開する必要ある?」と見直せる
🛡️ 攻撃面を減らすための設計ポイント
| 対策 | 内容 |
|---|---|
| Exported設定の見直し | 不必要なActivityやServiceはexported="false"に |
| Web APIの認証強化 | 誰でも叩けるAPIにしない(トークン検証など) |
| ログ・通知・レポートの最小化 | 本番環境では詳細な出力を避ける |
| 入力値のバリデーション | どこから来たデータでも信用しない |
| 不要な機能は削除 | 未使用のintent-filterや機能をコードから除去 |
✅ まとめ
- アタックサーフェスとは、「アプリに届く外部からの攻撃経路」のこと
- セキュリティ診断は、まずその入り口を洗い出すところから始まる
- Manifest、コード、ツール(MobSFやDrozer)を使って経路を見える化する
- 攻撃面を減らすことは、最も基本かつ効果的な防御手段!
Best regards, (^^ゞ