コンテンツにスキップ

Undeclared Permissions

宣言されていない権限

説明

アプリケーションは、他のアプリがリクエストできる権限を定義することで、自身の機能を他のアプリに公開できます。

独自の権限を適用するには、まず AndroidManifest.xml<permission> 要素を使用して宣言し、その後 android:permission= を使用してコンポーネントに適用する必要があります。

アプリケーションが権限を宣言せずに適用した場合、悪意のあるアプリがその権限を normal の保護レベルで宣言してリクエストし、アプリケーションの保護されたコンポーネントを呼び出す可能性があります。

さらに、宣言されていない権限は、アプリが機密データやシステムリソースにアクセスしていることにユーザーが気付かない可能性があるため、セキュリティ上のリスクとなります。これにより、ユーザーの同意なしにアプリがユーザーの位置情報にアクセスするなど、プライバシーの侵害やその他のセキュリティ問題を引き起こす可能性があります。

推奨事項

アプリで権限を宣言する前に、そもそもその権限が必要かどうか、またはアプリの機能をサポートする代わりの方法がないかどうかを検討してください。

  1. マニフェストファイルで権限を宣言する:

コンポーネントに権限を適用する前に、<permission> 要素を使用して宣言されていることを確認してください。

たとえば、アクティビティの1つを開始できるユーザーを制御したいアプリは、この操作に対する権限を次のように宣言できます。

  • ステップ 1 : com.example.myapp.permission.DEADLY_ACTIVITY という名前で権限を宣言し、必要な属性を入力します。
  • ステップ 2 : アクティビティに com.example.myapp.permission.DEADLY_ACTIVITY 権限を適用します。
<manifest
        xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.myapp">

    <permission
            android:name="com.example.myapp.permission.DEADLY_ACTIVITY"
            android:label="@string/permlab_deadlyActivity"
            android:description="@string/permdesc_deadlyActivity"
            android:permissionGroup="android.permission-group.COST_MONEY"
            android:protectionLevel="dangerous"/>
    ...
    <activity android:exported="true" android:name="com.important.PushActivity"
              android:permission="com.example.myapp.permission.DEADLY_ACTIVITY"/>

</manifest>
  1. アプリの機能に必要な最小限の権限セットのみを使用します。これは、アプリのコードを確認し、アプリが適切に機能するために必要な特定のリソースまたはデータを特定することで実現できます。 アプリがリクエストする各権限について、それがユーザーに明確なメリットを提供すること、およびリクエストがユーザーにとって分かりやすい方法で行われることを確認してください。

  2. Android StudioのLintチェックを使用して、宣言されていない権限を検出および防止します。Lintは、アプリのコードとリソースを分析して宣言されていない権限などの潜在的な問題を特定する、Android Studioに組み込まれたツールです。Lintを実行するには、Android Studioで「Analyze」->「Run Inspection by Name」->「Missing Permissions」を選択します。

  3. APK Analyzerなどのツールを使用して、アプリの権限を分析します。APK Analyzerは、開発者がAPKファイルの内容(権限、アクティビティ、サービス、その他のコンポーネントを含む)を検査できるAndroid Studio組み込みのツールです。開発者は、Appium、Selendroid、Robotiumなどのセキュリティに焦点を当てたテストフレームワークを使用して、宣言されていない権限などのセキュリティの脆弱性を検出および防止することもできます。

  4. アプリケーションの依存関係を考慮する:ライブラリを含める場合、その権限要件も継承します。各依存関係がどのような権限を必要としているか、そしてそれらの権限が何に使用されているかに注意してください。

リンク

標準

  • OWASP_MASVS_L1:
    • MSTG_PLATFORM_4
  • OWASP_MASVS_L2:
    • MSTG_PLATFORM_4
  • CWE_TOP_25:
    • CWE_276
  • PCI_STANDARDS:
    • REQ_2_2
    • REQ_6_2
    • REQ_7_3
    • REQ_11_3
  • OWASP_MASVS_v2_1:
    • MASVS_PRIVACY_4
  • SOC2_CONTROLS:
    • CC_2_1
    • CC_4_1
    • CC_6_1
    • CC_7_1
    • CC_7_2
    • CC_7_4
    • CC_7_5