コース目次 / 第3章
マニフェストの誤設定を見つける
apktool dで逆コンパイルしたAndroidManifest.xmlから、allowBackup・usesCleartextTraffic・無防備なexportedコンポーネントの3つの誤設定を読み取ります。それぞれの実害を理解します。
AndroidManifest.xml は、apktool で APK を逆コンパイルすれば、誰でも平文で読めます。この章は、そこに書かれた3つの誤設定を読み取ります。
マニフェストを、読み返す
apktool d -f -o decompiled vulnnotes.apk
cat decompiled/AndroidManifest.xml
<manifest ... package="com.example.vulnnotes" ...>
<uses-permission android:name="android.permission.INTERNET" />
<application android:label="VulnNotes" android:allowBackup="true" android:usesCleartextTraffic="true">
<activity android:name=".MainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".AdminActivity" android:exported="true" />
</application>
</manifest>
誤設定1 — allowBackup="true"
allowBackup は、「このアプリのデータを、OS のバックアップ機構でまるごと保存してよいか」を決めます。true(既定値でもあります)にしておくと、USBデバッグが有効な端末では、adb backup のようなコマンドで、アプリの保存データを丸ごと端末外に取り出せます。中に暗号化していないトークンやユーザーデータがあれば、そのまま流出します。機密性の高いデータを扱うアプリでは、false にするのが基本です。
誤設定2 — usesCleartextTraffic="true"
sec-http・sec-burp で、HTTPS の意味(通信を暗号化し、なりすましを防ぐ)を学びました。usesCleartextTraffic=“true” は、暗号化されていない平文の HTTP 通信を許可する設定です。これが有効だと、Wi-Fi を共有する誰かに通信を覗かれたり、割り込まれたりする余地が生まれます。Android 9(API 28)以降は既定で false(平文禁止)ですが、この練習用APKのように明示的に true にする実装が、実際にも見られます。
誤設定3 — 無防備な exported コンポーネント
2つの <activity> を見比べてください。MainActivity は起動画面(intent-filter で LAUNCHER に指定)なので exported=“true” が必要です——ホーム画面から起動できる必要があるからです。
でも AdminActivity は、起動画面でもなく、他に何の説明もないのに exported=“true”になっています。これは——他のどんなアプリからでも、この画面を直接起動できるということです。もし AdminActivity が管理者向けの機能(実際の名前が示唆するように)を持っていたら、悪意あるアプリが、あなたのアプリの正規の画面遷移やログインを一切通らずに、直接その機能を呼び出せてしまいます。sec-authz で見た「垂直の権限昇格」「フォースブラウジング」の、モバイル版です。
読み方のコツ — マニフェストは、短時間で全体を見渡せる
コードは何千行にもなりますが、マニフェストは、たいてい数十〜数百行で収まります。診断の最初の一歩として、マニフェスト全体にまず目を通すのは、費用対効果の高い作業です。allowBackup・usesCleartextTraffic・各コンポーネントの exported は、grep一発でも拾えます。
持ち帰る一言
マニフェストは、公開された設計図。 allowBackupはバックアップ経由の抽出、usesCleartextTrafficは平文通信、無防備なexportedは他アプリからの直接起動——どれも、この短いXMLに書かれた一行が、そのまま守りの強さです。次の章で、この3つと前章の秘密を、まとめて直します。
こうなっていればOK
卒業まであと2章です。
この章はまだ完了していません。
保存できませんでした(プライベートブラウズ中かもしれません)。この端末に進捗は残りませんが、先へは進めます。