APK をインストールする前に Android アプリの権限を確認する方法
Google Play ストアからアプリをインストールすると、Android ではアプリがアクセスできる内容の簡略化された概要が表示されます。 Play 以外のソースから APK をサイドロードすると、自分でマニフェストを読まない限り、そのようなセーフティ ネットはありません。 「壁紙アプリにはSMSとマイクへのアクセスが本当に必要なのでしょうか?」 は、まさにこのガイドが答えるのに役立つ種類の質問です。
以下は、私たちのチームが不慣れな APK を優先順位付けするときに使用するのと同じワークフローです。APK を開いて、uses-permission エントリを読み取り、保護レベルをデコードし、アプリに必要なもの 言う とそのカテゴリに通常必要なものを比較します。当社の オンラインAPK情報ツール はバイナリ XML デコードを行うため、プロセス全体にかかる時間は約 10 秒です。
なぜわざわざ権限を監査する必要があるのでしょうか?
悪意のある開発者は、人気の無料アプリを取得して変更し、サードパーティのサイトに再リリースします。アプリの見た目や機能は正常ですが、その隠されたコードが連絡先リストをコピーしたり、バックグラウンドオーディオを録音したりしている可能性があります。権限 プレインストール を表示すると、「権限のクリープ」の危険信号を見つけることができます。
APK ファイルを監査する方法 (オンライン)
私たちの APK情報ツール は、ファイルのマニフェスト全体をブラウザ内で読み取ります。ファイルがサーバーにアップロードされることはなく、コードも実行されません。使用方法は次のとおりです。
プロセス:
- APK情報ページ に移動します。
- .apk ファイルを選択します。
- 分析が完了するまで待ちます (通常は 5 秒)。
- 権限セクション まで下にスクロールします。
- READ_SMS、PROCESS_OUTGOING_CALLS、ACCESS_FINE_LOCATION などの高リスクフラグを探してください。
許可の危険信号リスト
電卓 または 懐中電灯 アプリが READ_CONTACTS または RECORD_AUDIO を要求した場合は、すぐにファイルを削除してください。これらのアプリがそのデータを保持する正当な理由はまったくありません。
Android のアクセス許可レベルを理解する
すべての権限が同じように作成されるわけではありません。 Android では、これらを 3 つのレベルに分類しています。
- 普通: プライバシーを直接脅かすことのない低リスクのアクセス許可 (SET_ALARM など)。 Android はこれらを自動的に許可します。
- 危険な: 高リスクの権限 (連絡先、位置情報、カメラ)。これらの しなければならない は、アプリの実行時に確認されます。
- 署名/システム: 非常に高リスクです。これらは、デバイスの製造元または OS 自体によって署名されたアプリでのみ利用できます。
手動による方法 (ZIP ビューアを使用)
ある程度の技術スキルがある場合は、自分で権限を監査できます。
- app.apk の名前を app.zip に変更して開きます。
- AndroidManifest.xml を見つけます。 (注: これはバイナリ形式なので、テキスト エディタでは意味不明に見えます)。
- AXMLプリンター などのツールを使用して、読み取り可能なテキストに変換します。
- <uses-permission>で始まるタグを検索します。
推奨事項: これを瞬時にデコードする オンラインツール を使用する方がはるかに高速です。
AndroidManifest.xml に実際に保存されるもの
マニフェストは、アプリが宣言するすべての権限、コンポーネント、機能の信頼できる情報源です。 APK 内のファイルは、ソース コードに見られるプレーン テキストではなく、バイナリXML 形式であるため、通常のテキスト エディターでは読み取ることができません。 APK 情報ツールはバイナリ XML をデコードし、関連するタグを表示します。最も重要なものは次のとおりです。
- <uses-permission android:name="..."/>: アプリが要求する可能性のあるすべての権限。 満杯 リストはここにあります。これには、アプリが実行時に実際に使用しない可能性のあるものも含まれます。
- <uses-permission-sdk-23 ... />: 同じですが、アプリが Android 6 以降で実行される場合にのみ要求されます。古いデバイスは、プロンプトを表示せずにサイレントに許可されます。
- <uses-feature android:name="..." android:required="true|false"/>: アプリが使用するハードウェア機能 (カメラ、GPS、NFC)。 必須 とマークされている場合、Play ストアはその機能のないデバイスからアプリを非表示にします。
- <application android:debuggable="true">: リリース APK にある巨大な危険信号。デバッグ可能なアプリは、ADB アクセス権を持つすべての人にそのメモリとプロセスの状態を公開します。拒否する。
- 機密性の高いアクティビティの <activity android:exported="true">: 他のアプリがその画面を起動できるようにします。プライバシー アプリの場合、これは多くの場合、コーディングがずさんであることを示します。
権限保護レベル: チートシート
Android では、すべての権限に「保護レベル」が割り当てられます。リクエストがどのレベルに属しているかを知ることで、OS がそのリクエストをどの程度真剣に扱うかがわかります。
| 保護レベル | ユーザーエクスペリエンス | 例 |
|---|---|---|
| 普通 | インストール時にサイレントに付与されます。プロンプトはありません。 | インターネット、バイブレーション、ACCESS_NETWORK_STATE、WAKE_LOCK |
| 危険な | 機能を初めて使用するときの実行時プロンプト。設定で取り消し可能。 | カメラ、RECORD_AUDIO、READ_CONTACTS、ACCESS_FINE_LOCATION |
| サイン | 付与するアプリまたは OS と同じ証明書で署名されたアプリにのみ付与されます。 | BIND_VPN_SERVICE、INSTALL_PACKAGES (システムのみ) |
| 署名|特権付き | システム イメージの priv-app ディレクトリにプレインストールされたアプリでのみ使用できます。 | ユーザーの管理、ログの読み取り |
| アプリ/役割 | 有効にするには別の設定フローが必要です。 | SYSTEM_ALERT_WINDOW、BIND_ACCESSIBILITY_SERVICE、MANAGE_EXTERNAL_STORAGE |
「隠された」アクセス許可の実際の意味
よくある誤解は、一部の権限は秘密であるということです。アプリが使用するすべての権限は AndroidManifest.xml で宣言する必要があり、OS はそこにリストされていない権限の付与を拒否します。通常、「隠された」という言葉が意味するものは、次の 2 つのうちのいずれかを指します。
- 通常レベルの権限はサイレントです。 これらは、ユーザーの介入なしでインストール時に付与されます。 Play ストアの概要には、それらの一部さえ表示されません。それらは「見落とされやすい」という意味で「隠されている」のであって、「公開されていない」という意味ではありません。
- アプリ定義のカスタム権限。 アプリは独自の <permission> タグを宣言し、内部コンポーネントでそれらを要求できます。これらはアプリ間の通信のために存在し、それ自体はプライバシーの問題ではありませんが、人気のあるアプリが間違った保護レベルのカスタム権限を宣言し、別のアプリがそれをバックドアとして使用すると、悪用される可能性があります。
どちらにせよ、答えは同じです。マニフェストを読み、Play ストアの説明だけを信用しないでください。
実用的な例: 実際の APK の監査
ダウンロード フォルダーに example.apk があるとします。正確なワークフローは次のとおりです。
- ブラウザで APK情報ツール を開きます。
- APKをアップロードエリアにドロップします。処理はローカルで行われます。ファイルはデバイスから流出しません。
- 権限 セクションをお読みください。各エントリには、定数名 (android.permission.READ_CONTACTS と、それが許可する内容の平易な説明が表示されます)。
- リストをアプリのカテゴリと比較します。おおよそ次のことが予想されます:
- カメラアプリ: CAMERA、RECORD_AUDIO (ビデオ用)、STORAGE/MEDIA 書き込み
- メッセージング アプリ: INTERNET、READ_CONTACTS、SEND_SMS (SMS ベースの場合のみ)、RECORD_AUDIO (音声メモ用)、CAMERA (写真送信用)
- ゲーム: INTERNET、場合によっては RECORD_AUDIO (ゲーム内ボイスチャット用)、課金関連の権限。他にはほとんど何もない
- ユーティリティアプリ (calculator, flashlight, weather): INTERNET (for ads), ACCESS_NETWORK_STATE, possibly LOCATION (weather only).それ以上のものは疑わしい。
- リスト内のものがカテゴリに適合しない場合は、インストールしないでください。電卓に SMS アクセスが必要な理由はありません。
ファイルが APK、XAPK (内部ベース APK を読み取る)、APKS バンドル (各スプリットのマニフェストを読み取る) のいずれであっても、同じロジックが適用されます。
コマンドラインから実行する
ターミナル ルートを希望する場合、Android SDK には aapt2 が同梱されており、APK からプレーン XML でマニフェストをダンプします。
aapt2 dump badging example.apk | grep "uses-permission"
または、apksigner を使用して、署名証明書を同時に検証します。
apksigner verify --print-certs example.apk
ブラウザ ツールは、単一のファイルを検査するためだけに SDK をインストールしたくないユーザーに対しても同じことを行います。
よくある質問 (FAQ)
APK をインストールした後に権限を拒否できますか?
はい。 On Android 6.0 and higher, you can go to 設定 > アプリ > [アプリ名] > 権限 to toggle individual dangerous permissions on or off.
XAPK ファイルには異なる権限がありますか?
XAPK には 1 つ以上の APK が含まれます。内部の各 APK には独自のマニフェストがあります。私たちのツールはバンドル内の メインAPK を分析し、関連する権限を表示します。
すべてのアプリが「ネットワーク アクセス」を要求するのはなぜですか?
ほとんどすべてのアプリは、分析、バグ報告、広告のためにインターネット アクセスを必要とします。これはよくあることですが、盗まれたデータがハッカーのサーバーに送信される方法でもあります。
「インストール」をタップする前にマニフェスト権限を検査する
目に見えないものを判断することはできません。サイドロードする前に APK の権限を表示する に 10 秒を費やすことは、アプリが到達できる範囲を知ることと、単にアプリが動作することを期待することの違いです。最初にリストを読み、次にインストールします。