テスト機能とデバッグ機能
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
OWASP カテゴリ: MASVS-CODE: コード品質
概要
テスト機能やデバッグ機能を搭載した製品版ビルドをリリースすると、アプリのセキュリティ対策に悪影響を及ぼす可能性があります。これらの機能は新しいバージョンのリリース前またはリリース後に、デベロッパーがアプリの意図するユースケースにおけるバグを発見し特定するために使用するものであり、一般公開するものではありません。
テスト / デバッグ機能の例:
- 隠しメニュー
- デバッグログを有効にするオプション
- アプリフローを変更するオプション
- 支払いや定期購入のプロセスを回避するオプション
- 認証を回避するオプション
- アプリ固有のアクティビティのテスト
これらはすべて、悪意のあるユーザーが悪用して、アプリの意図するフローを変更したり、さらなる攻撃の準備のためにシステム情報を取得したりする可能性があります。
テスト機能やデバッグ機能を公開したままにしておくことで生じるリスクは、デバッグ機能自体に関連するアクションによって異なります。
また、AndroidManifest.xml 要素 <application>
内に設定されている android:debuggable 属性も、アプリにとってリスクとなる可能性があります。android:debuggable の記事に記載のとおり、上記の値を設定して製品版アプリをデプロイすると、悪意のあるユーザーが通常はアクセスできない管理リソースにアクセスできます。
影響
悪意のあるユーザーが製品版ビルドでテスト機能やデバッグ機能を操作した場合、予期しない結果が生じる可能性があります。そのようなアクションの影響は、機能に割り当てられた権限に直接関係します。高い権限があるほど、行われた不正行為が及ぼす影響は大きくなります。アプリ内のこのような機能は、さまざまな保護の回避、ペイウォールの迂回、システムやユーザー関連情報の取得、テスト アクティビティのトリガーに使用される場合があります。
リスクの軽減
デバッグ コンポーネントを使用しない
テスト機能やデバッグ機能は、アクティビティ、ブロードキャスト レシーバ、サービス、コンテンツ プロバイダなどの製品版アプリ コンポーネント内には実装しないでください。エクスポートされると、デバイス上の他のプロセスで実行される可能性があります。デバッグ コンポーネントがエクスポートされないように設定しても(android:exported="false")、デバッグ オプションが有効な場合、ユーザーに root 権限のあるデバイスでは Android Debug Bridge(ADB)ツールを使用して実行できるため、機能の保護として有効ではありません。
デバッグ機能やテスト機能をステージング ビルドに制限する
アプリ内のテスト機能またはデバッグ機能の実行を、限定的なステージング ビルドのセットでのみに制限し、デベロッパーのみが制御された環境でアプリの機能のデバッグまたはテストをできるようにする必要があります。そのためには、アプリの専用のテストビルドまたはデバッグビルドと、高度なインストルメンテーション テストを作成し、テストまたはデバッグ機能を隔離されたバージョンで実行できるようにします。
自動 UI テストを実装する
アプリでテストを実行する際には、自動 UI テストを選択します。自動 UI テストは繰り返し可能で、別の環境で実行でき、人的エラーが発生しにくいテストです。
リソース
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2024-02-23 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2024-02-23 UTC。"],[],[],null,["# Test and debug features\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE)\n\n\nOverview\n--------\n\nReleasing production builds that include Testing or Debug features can\nnegatively impact the security posture of the application. These functionalities\nare used to help developers discover and identify bugs within intended\napplication use cases prior to, or after a new version release, and shouldn't\nbe publicly accessible.\n\nExamples of Testing/ Debug features are:\n\n- Hidden menus\n- Options to enable debug logs\n- Options to alter application flow\n- Options to circumvent payment or subscription processes\n- Options to circumvent authentication\n- Tests for application-specific activities\n\nAll the preceding can be leveraged by a malicious user in order to alter the\napplication's intended flow or retrieve system information to tailor further\nattacks.\n\nThe risk introduced by leaving exposed Testing or Debug features may vary\naccording to the action associated with the debug capabilities itself.\n\nAnother area of risk for the application is the attribute **android:debuggable**\nset within the AndroidManifest.xml element **`\u003capplication\u003e`** . As reported in\nthe [**android:debuggable**](/topic/security/risks/android-debuggable) article,\ndeploying a production application with the aforementioned value set, allows\nmalicious users to access administrative resources that are otherwise\ninaccessible.\n\nImpact\n------\n\nA malicious user interacting with a Testing or Debug feature in a production\nbuild can lead to unexpected results. The impact of any action is directly\nconnected with the permissions assigned to the feature. The higher the\npermissions, the higher the impact that an active exploitation can have. Such\nfunctionalities within an application can be used to circumvent a number of\nprotections, bypass paywalls, retrieve system or user related information, or\ntrigger testing activities.\n\nMitigations\n-----------\n\n### Avoid using debug components\n\nTest or debug functionalities should never be implemented within production\napplication components such as activities, broadcast receivers, services or\ncontent providers since, if exported, can be run by any other process on the\ndevice.\nSetting the debug component as not exported\n([**android:exported=\"false\"**](/topic/security/risks/android-exported)) does\nnot constitute a valid protection for the capabilities since any rooted device\ncan still execute it through the Android Debug Bridge (ADB) tool if the debug\noption is enabled.\n\n### Limit debug or test features to staging builds\n\nThe execution of any test or debug function within applications should be\nlimited only to a restricted set of Staging builds to allow only developers to\ndebug or test application's features in a controlled environment.\nThis can be obtained by creating a dedicated test or debug build of the\napplication and advanced instrumented tests for it in order to ensure that any\ntest or debug feature is run on an isolated version.\n\n### Implement automated UI tests\n\nWhen running tests on an application, opt for automated UI tests since they are\nrepeatable, can be executed in a separated environment and are not prone to\nhuman errors.\n\nResources\n---------\n\n- [Dev guidance on advanced testing setups](/studio/test/advanced-test-setup)\n- [Dev guidance on automating UI tests](/training/testing/instrumented-tests/ui-tests)\n- [android:debuggable](/topic/security/risks/android-debuggable)\n- [android:exported](/topic/security/risks/android-exported)\n- [Debuggable Apps in Android Market](https://labs.withsecure.com/publications/debuggable-apps-in-android-market)\n- [Can debug code cause security vulnerabilities?](https://www.coderskitchen.com/an-debug-code-cause-security-vulnerabilities/)"]]