OWASP カテゴリ: MASVS-CODE: コード品質
概要
テスト機能やデバッグ機能を搭載した製品版ビルドをリリースすると、アプリのセキュリティ対策に悪影響を及ぼす可能性があります。これらの機能は新しいバージョンのリリース前またはリリース後に、デベロッパーがアプリの意図するユースケースにおけるバグを発見し特定するために使用するものであり、一般公開するものではありません。
テスト / デバッグ機能の例:
- 隠しメニュー
- デバッグログを有効にするオプション
- アプリフローを変更するオプション
- 支払いや定期購入のプロセスを回避するオプション
- 認証を回避するオプション
- アプリ固有のアクティビティのテスト
これらはすべて、悪意のあるユーザーが悪用して、アプリの意図するフローを変更したり、さらなる攻撃の準備のためにシステム情報を取得したりする可能性があります。
テスト機能やデバッグ機能を公開したままにしておくことで生じるリスクは、デバッグ機能自体に関連するアクションによって異なります。
また、AndroidManifest.xml 要素 <application>
内に設定されている android:debuggable 属性も、アプリにとってリスクとなる可能性があります。android:debuggable の記事に記載のとおり、上記の値を設定して製品版アプリをデプロイすると、悪意のあるユーザーが通常はアクセスできない管理リソースにアクセスできます。
影響
悪意のあるユーザーが製品版ビルドでテスト機能やデバッグ機能を操作した場合、予期しない結果が生じる可能性があります。そのようなアクションの影響は、機能に割り当てられた権限に直接関係します。高い権限があるほど、行われた不正行為が及ぼす影響は大きくなります。アプリ内のこのような機能は、さまざまな保護の回避、ペイウォールの迂回、システムやユーザー関連情報の取得、テスト アクティビティのトリガーに使用される場合があります。
リスクの軽減
デバッグ コンポーネントを使用しない
テスト機能やデバッグ機能は、アクティビティ、ブロードキャスト レシーバ、サービス、コンテンツ プロバイダなどの製品版アプリ コンポーネント内には実装しないでください。エクスポートされると、デバイス上の他のプロセスで実行される可能性があります。デバッグ コンポーネントがエクスポートされないように設定しても(android:exported="false")、デバッグ オプションが有効な場合、ユーザーに root 権限のあるデバイスでは Android Debug Bridge(ADB)ツールを使用して実行できるため、機能の保護として有効ではありません。
デバッグ機能やテスト機能をステージング ビルドに制限する
アプリ内のテスト機能またはデバッグ機能の実行を、限定的なステージング ビルドのセットでのみに制限し、デベロッパーのみが制御された環境でアプリの機能のデバッグまたはテストをできるようにする必要があります。そのためには、アプリの専用のテストビルドまたはデバッグビルドと、高度なインストルメンテーション テストを作成し、テストまたはデバッグ機能を隔離されたバージョンで実行できるようにします。
自動 UI テストを実装する
アプリでテストを実行する際には、自動 UI テストを選択します。自動 UI テストは繰り返し可能で、別の環境で実行でき、人的エラーが発生しにくいテストです。
リソース
- 高度なテストのセットアップに関するデベロッパー ガイダンス
- UI テストの自動化に関するデベロッパー ガイダンス
- android:debuggable
- android:exported
- Android Market のデバッグ可能なアプリ
- デバッグコードがセキュリティに関する脆弱性を引き起こす可能性