
最近の主要なAndroidバージョンにおける重要なセキュリティ強化
最近の主要なAndroidバージョンにおける重要なセキュリティ強化を、Android 5.0 Lollipop(API 21)以降について解説します。
WebView は独立したパッケージになりました。Android 5.0 のセキュリティ強化 および Android 5.0 Lollipop で更新可能になった WebView とは何か、そしてなぜ重要なのか? を参照してくださいisInsideSecureHardware)。KeyInfo の isInsideSecureHardware メソッド を参照してくださいWebView では JavaScript の評価が別プロセスで実行されるため、JavaScript コードがアプリのメモリに簡単にアクセスできなくなります。WebView セキュリティの新機能 および すべてのアプリに対する Android 8.0 の動作変更のセキュリティセクション を参照してくださいWebView は Network Security Config と cleartextTrafficPermitted フラグを尊重します(古いAndroidバージョンでは、設定でクリアテキストトラフィックが許可されていなくても HTTP サイトを読み込んでいました)。Android 8.0 をターゲットとするアプリに対する Android 8.0 の動作変更のセキュリティセクション を参照してくださいWebView に Safe Browsing API が追加され、有効にすると、潜在的に安全でないウェブサイトに移動しようとした場合にユーザーに警告が表示されます(Google Safe Browsing によって検証)。Android 8.0 の機能と API の WebView API セクション を参照してくださいFLAG_SECURE Window フラグがよりサポートされ、このフラグが設定された画面のスクリーンショットが禁止されますcleartextTrafficPermitted を明示的に true に設定する必要があります。APIレベル28+をターゲットとするアプリの動作変更: ネットワークTLSがデフォルトで有効 および Android: クリアテキストHTTPトラフィックが許可されない Android 9 を参照してくださいWebView ではファイルアクセスがデフォルトで無効になりました。WebSettings の setAllowFileAccess メソッド を参照してくださいtaskAffinity をターゲットと同じに設定し、ユーザーがターゲットアプリを起動しようとして正当なアプリアイコンを使用した場合でも、そのアプリを起動するように騙す攻撃)は不可能になりました。StrandHogg 攻撃 / タスクアフィニティの脆弱性 および Strandhogg Vulnerability を参照してくださいrequestLegacyExternalStorage を介してオプトアウトできます。Android 11 のストレージアップデート および Android ストレージのユースケースとベストプラクティスの本番アプリでのオプトアウトセクション を参照してくださいsetView で設定)を持つ Toasts は、バックグラウンドから起動できなくなりました。これは、被害者アプリのUIを覆い隠すことに依存する特定の 攻撃を緩和するためです。ちなみに、 メソッド全体は Android 11(API 30)で非推奨です。 を参照してくださいandroid:exported フラグは、インテントフィルタ を宣言するコンポーネント(アクティビティ、コンテンツプロバイダ など)のマニフェストで 明示的に 定義する必要があります。Android 12 をターゲットとするアプリの動作変更: コンポーネントのエクスポートをより安全にするセクション を参照してください。requestLegacyExternalStorage によるオプトアウトはできなくなりました。Android ストレージのユースケースとベストプラクティスの「本番アプリでのオプトアウト」セクション を参照してください。POST_NOTIFICATIONS ランタイム権限が追加されました。通知のランタイム権限 と android.permission.POST_NOTIFICATIONS を参照してください。targetSdk 要件の導入: Android 6(API 23)より前の Android バージョンをターゲットとするアプリはインストールできなくなりました。つまり、Android 6(API 23)で導入された セキュリティ制限(この場合、特に ランタイム権限の処理)が、デバイスにインストールされているすべてのアプリに適用されることを前提とできます(この最低値は将来の Android バージョンごとに引き上げられる予定です)。動作変更(すべてのアプリ): インストール可能な最小ターゲット API レベルのセクション を参照してください。QUERY_ALL_PACKAGES 権限が付与されている場合を除きます。この権限を取得するには、Google Play の特別な手動レビューが必要です)。動作変更(すべてのアプリ): メディア所有者のパッケージ名が秘匿される場合があるセクション を参照してください。Exception をスローします。動作変更: Android 14 以降をターゲットとするアプリ: より安全な動的コード読み込みセクション を参照してください。PendingIntent 作成者はデフォルトで バックグラウンドでのアクティビティ起動 をブロックするようになりました。動作変更: Android 15 以降をターゲットとするアプリ: その他の変更セクション を参照してください。PendingIntent 作成者がバックグラウンドアクティビティ起動権限を許可している場合、または送信者にバックグラウンドアクティビティ起動権限がある場合を除き、アプリはタスクスタックをフォアグラウンドに復帰させることができなくなりました。これは、アプリが Android 15(API 35)をターゲットとする場合に適用されます。動作変更: Android 15 以降をターゲットとするアプリ: その他の変更セクション を参照してください。Android 16 セキュリティリリースノート* 一般的な Intent リダイレクト攻撃 に対するデフォルトのセキュリティを追加しました。他のアプリから受信したインテント(現在のアプリを起動するインテントにエクストラとしてラップされたものなど)の起動をブロックします。Behavior changes: all apps の Improved security against Intent redirection attacks セクション を参照してください
RESULT_DISCOVERY_TIMEOUT を使用した発見タイムアウトの直接通知を受け取らなくなります。その代わりに、視覚的なダイアログでタイムアウトイベントがユーザーに通知されます。ユーザーがダイアログを閉じると、アプリは RESULT_USER_REJECTED で関連付けの失敗を通知されます。Behavior changes: all apps の Companion apps no longer notified of discovery timeouts セクション を参照してくださいMediaStore#getVersion() はアプリごとに一意になります。これにより、バージョン文字列から識別用のプロパティが排除され、不正使用やフィンガープリンティング技術への利用を防ぎます。Behavior changes: Apps targeting Android 16 or higher の MediaStore version lockdown セクション および MediaStore の getVersion メソッド を参照してくださいKeyDescription 構造に新しい フィールドが含まれており、読み込まれた APEX モジュールの整合性を検証するために使用できます。 および を参照してくださいREAD_CONTATCS 権限を必要とせずに連絡先をアプリと共有できる、標準化されたブラウズ可能なインターフェースである Android Contact Picker を導入します。Features and APIs の Android contacts picker セクション を参照してくださいKeyStoreException で作成に失敗します。Behavior changes: all apps の Per-app keystore limits セクション を参照してくださいsetViewBiometricPromptFLAG_SECURE フラグが、生体認証またはデバイス資格情報(PIN、パターン、パスワード)のプロンプトに追加されました。デバイスのロック解除とアプリ内の BiometricPrompt の両方が含まれます。つまり、これらの画面のスクリーンショットを撮ることはできず、画面共有では黒く表示されます。Android Code Search の com.android.systemui.biometrics.AuthContainerView のソース を参照してください。apksigner を使用する新しい鍵のローテーションはすべて、Android 13 以降を対象としたローテーションでデフォルトで v3.1 署名スキームを使用します。null に設定されている)のインテントは、どのインテントフィルタにも一致しなくなります。つまり、アクティビティやサービスを開始するために使用されるインテントには、明確に定義されたアクションが必要です。動作変更: Android 15 以降をターゲットとするアプリ: より安全なインテントのセクション を参照してください。PendingIntent の作成者は、保留中のインテントの送信者 ではなく、それを囲むインテントの送信者 として扱われます。動作変更: Android 15 以降をターゲットとするアプリ: より安全なインテントのセクション を参照してください。BiometricPrompt の動作も変更されます。生体認証での失敗後にデバイス資格情報に「フォールバック」してユーザー認証を完了することはできません。ユーザーは、その認証方式が許可されている場合(かつ、プロンプトの失敗回数がすでに多すぎない場合)、プロンプトのボタンから 任意で デバイス資格情報を使用できることに注意してください。デバイスがロックされるとプロンプトはキャンセルされ、デバイスのロック解除後に新しいプロンプトをトリガーして認証を成功させる必要があります。Android 15 は、ロックが解除されたスマートフォンを盗まれた場合に、盗難者が銀行口座を空にすることを防ぎます を参照してください。moduleHash