セキュリティの機能強化

Android のセキュリティ機能とサービスは継続的に改善されています。左側のナビゲーションでリリースごとに強化されている機能の一覧をご覧ください。

Android 14

Android のすべてのリリースで、ユーザーを保護するためにさまざまなセキュリティ機能が強化されています。Android 14 では、次のようなセキュリティ機能が強化されました。

  • Android 10 で導入された Hardware Assisted AddressSanitizer(HWASan)は、AddressSanitizer に似たメモリエラー検出ツールです。Android 14 では、HWASan が大幅に改善されました。Android のリリースにバグが混入するのを防ぐのに HWAddressSanitizer がどのように役立つのかをお伝えします。
  • Android 14 では、システム実行時の権限ダイアログに、アプリのデータ共有方法を目立つように表示するクリック可能なセクションが追加されました。これは、まずサードパーティと位置情報を共有するアプリから導入され、アプリがサードパーティとデータを共有する理由などの情報が表示されます。
  • Android 12 では、モデムレベルで 2G サポートを無効にするオプションが導入されました。これは、2G の時代遅れのセキュリティ モデルに固有であるセキュリティ リスクからユーザーを保護するものです。企業のお客様にとって 2G を無効にすることが非常に重要であることをふまえ、Android 14 では、Android Enterprise でこのセキュリティ機能を利用できるようになりました。IT 管理者は、管理対象デバイスの 2G 接続へのダウングレードを制限できます。
  • NULL 暗号化されたモバイル接続を拒否するためのサポートが追加されました。回線交換の音声および SMS トラフィックが常に暗号化され、受動的な無線傍受から保護されるようになります。詳しくは、モバイル接続を強化するための Android のプログラムをご覧ください
  • 複数の IMEI に対するサポートが追加されました。
  • Android 14 以降では、高速な暗号化方式に対応したデバイス用のファイル名の暗号化モードとして AES-HCTR2 が推奨されています。
  • モバイル接続性
  • Android のセーフティ センターにドキュメントが追加されました。
  • Android 14 をターゲットとするアプリが動的コードの読み込み(DCL)を使用している場合、動的に読み込まれるファイルはすべて読み取り専用としてマークする必要があります。そうしないと、システムは例外をスローします。アプリでは可能な限り、コードを動的に読み込まないようにすることをおすすめします。コードを動的に読み込むと、コード インジェクションやコードの改ざんによってアプリが不正使用されるリスクが大幅に高まります。

AOSP リリースノートの全文と、デベロッパー向け Android 機能と変更点のリストをご覧ください。

Android 13

Android のすべてのリリースで、ユーザーを保護するためにさまざまなセキュリティ機能が強化されています。Android 13 では、次のようなセキュリティ機能が強化されました。

  • Android 13 では、マルチドキュメント プレゼンテーションのサポートが追加されています。 この新しいプレゼンテーション セッション インターフェースを使用することで、アプリは、既存の API では不可能なマルチドキュメント プレゼンテーションを行えるようになります。詳しくは、ID 認証情報をご覧ください。
  • Android 13 では、外部アプリから発信されるすべてのインテントは、宣言されたインテント フィルタ要素と一致する場合にのみ、エクスポートされたコンポーネントに配信されます。
  • Open Mobile API(OMAPI)は、デバイスのセキュア エレメントとの通信に使用される標準 API です。Android 13 以前では、このインターフェースにアクセスできるのはアプリとフレームワーク モジュールだけでした。HAL モジュールは、これをベンダー安定版インターフェースに変換することにより、OMAPI サービスを介してセキュア エレメントと通信することもできます。詳しくは、OMAPI ベンダー安定版インターフェースについての記事をご覧ください。
  • Android 13-QPR より、共有 UID はサポートされなくなりました。 Android 13 以降では、マニフェストに「android:sharedUserMaxSdkVersion="32"」という行を追加する必要があります。このエントリによって、新規ユーザーが共有 UID を取得できないようにします。UID について詳しくは、アプリへの署名をご覧ください。
  • Android 13 では、AES(高度暗号化標準)、HMAC(鍵付きハッシュ メッセージ認証コード)などのキーストア対称暗号プリミティブ、および非対称暗号アルゴリズム(Elliptic Curve、RSA2048、RSA4096、Curve 25519 を含む)がサポートされるようになりました。
  • Android 13(API レベル 33)以降では、除外対象外に関するアプリからの通知を送信する実行時の権限がサポートされます。これにより、ユーザーはどの権限に関するお知らせを表示するかを設定できます。
  • すべてのデバイスログへのアクセスを要求するアプリに、その都度プロンプトを表示する機能を追加することで、ユーザーがアクセスを許可または拒否できるようになりました。
  • Android 仮想化フレームワーク(AVF)を導入し、標準化された各種 API を備えた 1 つのフレームワークに、さまざまなハイパーバイザを統合しました。これにより、ハイパーバイザによって分離されたワークロードを実行するための、非公開の安全な実行環境が得られます。
  • APK 署名スキーム v3.1を導入しました。apksigner を使用するすべての新しい鍵ローテーションは、Android 13 以降のローテーションをターゲットに、デフォルトで v3.1 の署名スキームを使用することになります。

AOSP リリースノートの全文と、デベロッパー向け Android 機能と変更点のリストをご覧ください。

Android 12

Every Android release includes dozens of security enhancements to protect users. Here are some of the major security enhancements available in Android 12:

  • Android 12 introduces the BiometricManager.Strings API, which provides localized strings for apps that use BiometricPrompt for authentication. These strings are intended to be device-aware and provide more specificity about which authentication types might be used. Android 12 also includes support for under-display fingerprint sensors
  • Support added for under-display fingerprint sensors
  • Introduction of the Fingerprint Android Interface Definition Language (AIDL)
  • Support for new Face AIDL
  • Introduction of Rust as a language for platform development
  • The option for users to grant access only to their approximate location added
  • Added Privacy indicators on the status bar when an app is using the camera or microphone
  • Android's Private Compute Core (PCC)
  • Added an option to disable 2G support

Android 11

Android のすべてのリリースで、ユーザーを保護するためにさまざまなセキュリティ機能が強化されています。Android 11 で利用できる強化されたセキュリティ機能の主なものについては、Android リリースノートをご覧ください。

Android 10

Android のすべてのリリースで、ユーザーを保護するためにさまざまなセキュリティ機能が強化されています。Android 10 では、セキュリティとプライバシーが強化されています。 Android 10 の変更点の一覧については、Android 10 リリースノートをご覧ください。

セキュリティ

BoundsSanitizer

Android 10 は、Bluetooth とコーデックで BoundsSanitizer(BoundSan)をデプロイします。BoundSan は、UBSan の境界サニタイザを使用します。 この緩和は、モジュール単位で有効になります。Android の重要なコンポーネントを安全に保護するものであり、無効にすることはできません。BoundSan は、次のコーデックで有効になっています。

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec
  • libaac
  • libxaac

実行専用メモリ

デフォルトでは、AArch64 システム バイナリの実行可能コード セクションは、コードの再利用による Just-In-Time 攻撃を防ぐための強化緩和策として実行専用(読み取り不可)としてマークされています。データとコードを混在させたコードおよび、意図的にこれらのセクションを検査するコード(メモリ セグメントを最初に読み取り可能として再マップしない場合も含む)は機能しなくなりました。Android 10 のターゲット SDK を使用したアプリの API レベル 29 以降は、実行専用メモリ(XOM)セクションを読み取り可能にする必要はありません。

拡張アクセス

Trust Agent は、Smart Lock などの二次的な認証メカニズムの基盤となるメカニズムであり、Android 10 でのみロック解除を拡張できます。ロックされたデバイスのロックを Trust Agent で解除することはできなくなりました。また、デバイスをロック解除状態に保てるのは最長 4 時間です。

顔認証

顔認証を使用すると、ユーザーがデバイスを正面から見るだけでロック解除が可能です。Android 10 では、カメラフレームを安全に処理できる新しい顔認証スタックのサポートが追加されており、サポート対象のハードウェアにおける顔認証時にセキュリティとプライバシーを保護します。また Android 10 では、簡単にセキュリティ要件を満たせる実装方法が用意されており、オンライン バンキングなどのサービス トランザクションでセキュリティ機能をアプリケーションに統合できます。

整数オーバーフロー サニタイズ

Android 10 では、ソフトウェア コーデックで整数オーバーフローの無害化(IntSan)が有効になりました。デバイスのハードウェアでサポートされていないコーデックに対して、再生パフォーマンスが許容可能であることを確認します。IntSan は、次のコーデックで有効になっています。

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec

モジュラー システム コンポーネント

Android 10 は、一部の Android システム コンポーネントをモジュール化しており、Android の通常のリリース サイクル以外で更新できます。モジュールには次のものがあります。

OEMCrypto

Android 10 は OEMCrypto API バージョン 15 を使用します。

Scudo

Scudo は、ヒープ関連の脆弱性に対する耐性を高めるために設計された、動的なユーザーモード メモリ アロケータです。標準的な C の割り当て、割り当て解除のプリミティブ、C++ のプリミティブを提供します。

ShadowCallStack

ShadowCallStack (SCS)LLVM インストゥルメンテーション モードです。関数の戻りアドレスを非リーフ関数の関数プロローグに別々に割り当てられた ShadowCallStack インスタンスに保存し、戻りアドレスを関数エピローグの ShadowCallStack インスタンスから読み込むことで、戻りアドレス(スタック バッファなど)に対する上書きを回避します。

WPA3 と Wi-Fi Enhanced Open

Android 10 には、Wi-Fi Protected Access 3(WPA3)と Wi-Fi Enhanced Open のセキュリティ標準に対するサポートが追加され、既知の攻撃に対するプライバシーと堅牢性が強化されました。

プライバシー

Android 9 以前をターゲットとするアプリのアクセス

Android 9(API レベル 28)以前をターゲットとしているアプリが Android 10 以降で実行されている場合、プラットフォームでは次の動作が適用されます。

  • アプリが ACCESS_FINE_LOCATION または ACCESS_COARSE_LOCATION について <uses-permission> 要素を宣言した場合、インストール中に ACCESS_BACKGROUND_LOCATION<uses-permission> 要素が自動的に追加されます。
  • アプリが ACCESS_FINE_LOCATION または ACCESS_COARSE_LOCATION のいずれかをリクエストした場合、そのリクエストに対して ACCESS_BACKGROUND_LOCATION が自動的に追加されます。

バックグラウンドでのアクティビティ制限

Android 10 以降、バックグラウンドからのアクティビティの起動に関する制限が設定されました。この動作変更により、ユーザーに対する割り込みを最小限に抑え、ユーザーは画面内の表示内容により集中できるようになります。ユーザー操作の直接の結果としてアプリがアクティビティを起動する場合、アプリがこの変更の影響を受けることはまずありません。
バックグラウンドからのアクティビティ起動に代わるおすすめの手段について詳しくは、タイミングが重要なイベントをユーザーに通知する方法をご覧ください。

カメラのメタデータ

Android 10 では、getCameraCharacteristics() メソッドによってデフォルトで返される情報の範囲が変更されています。特に、このメソッドの戻り値に含まれる可能性のあるデバイス固有のメタデータにアクセスするには、アプリに CAMERA 権限が必要です。
これらの変更について詳しくは、権限を必要とするカメラ フィールドに関するセクションをご覧ください。

クリップボード データ

デフォルトのインプット メソッド エディタ(IME)のアプリまたは現在フォーカスのあるアプリでない限り、Android 10 以降ではクリップボード データにアクセスできません。

デバイスの位置情報

位置情報に対するアプリのアクセス権限をユーザーが詳細に制御できるようにするため、Android 10 では ACCESS_BACKGROUND_LOCATION 権限が導入されています。
ACCESS_FINE_LOCATION 権限や ACCESS_COARSE_LOCATION 権限とは異なり、ACCESS_BACKGROUND_LOCATION 権限が位置情報へのアプリのアクセスを制御するのは、そのアプリがバックグラウンドで実行しているときのみです。以下の条件のいずれかに該当する場合を除き、アプリはバックグラウンドで位置情報にアクセスしていると見なされます。

  • 対象アプリに属するアクティビティが表示されている。
  • フォアグラウンド サービスのタイプ location を宣言したフォアグラウンド サービスをアプリが実行している。
    アプリのサービスに対してフォアグラウンド サービス タイプを宣言するには、アプリの targetSdkVersion またはcompileSdkVersion29以上に設定する必要があります。フォアグラウンド サービスで、位置情報へのアクセスを必要とするユーザー開始アクションを実行し続ける方法についての説明をご覧ください。

外部ストレージ

デフォルトでは、Android 10 以降をターゲットとするアプリには外部ストレージに対するスコープ アクセス、つまり対象範囲別ストレージが付与されます。このようなアプリの場合、次のファイルの種類については、ストレージ関連のユーザー権限をリクエストしなくても外部ストレージ デバイスに表示されます。

  • アプリ固有のディレクトリ内にあり、getExternalFilesDir() を使用してアクセスするファイル。
  • アプリによってメディアストアから作成された写真、動画、音声クリップ。

対象範囲別ストレージについて、および外部ストレージ デバイスに保存されたファイルを共有、アクセス、変更する方法について詳しくは、外部ストレージでファイルを管理する方法、およびメディア ファイルにアクセスして変更する方法をご覧ください。

MAC アドレスのランダム化

Android 10 以降が実行されているデバイスでは、デフォルトでランダム MAC アドレスが送信されます。
エンタープライズ ユースケースを扱うアプリ向けに、プラットフォームには MAC アドレスに関連する操作を行うための API が用意されています。

  • ランダムな MAC アドレスを取得する: デバイス所有者アプリとプロフィール所有者アプリは、getRandomizedMacAddress() を呼び出すことで、特定のネットワークに割り当てられたランダムな MAC アドレスを取得できます。
  • 実際の出荷時 MAC アドレスを取得する: デバイス オーナー アプリでは、getWifiMacAddress() を呼び出すことで、デバイスの実際のハードウェア MAC アドレスを取得できます。このメソッドは、大量のデバイスをトラッキングする際に便利です。

再設定不可能なデバイス ID

Android 10 以降で IMEI とシリアル番号の両方を含む再設定不可能なデバイス ID にアクセスするには、アプリに READ_PRIVILEGED_PHONE_STATE 特権が必要です。

権限を持たないアプリが再設定不可能な ID に関する情報を求めようとした場合、プラットフォームの応答はターゲット SDK のバージョンによって異なります。

  • アプリが Android 10 以降を対象にしている場合、SecurityException が発生します。
  • アプリが Android 9(API レベル 28)以下を対象にしている場合、アプリに READ_PHONE_STATE 権限があれば、このメソッドは null またはプレースホルダ データを返します。それ以外の場合は、SecurityException が発生します。

操作の認識

Android 10 では、ユーザーの歩数を検出したり、徒歩、サイクリング、車の運転など、ユーザーの操作を分類したりする必要があるアプリ向けに android.permission.ACTIVITY_RECOGNITION ランタイム権限が導入されています。このアクセス権限は、デバイスのセンサーデータが [設定] 内でどのように使用されているのかをユーザーに表示するように設計されています。
Google Play 開発者サービス内のライブラリの中には、Activity Recognition APIGoogle Fit API など、ユーザーがアプリに対してこの権限を付与していない限り結果を提供しないものがあります。
デバイス上の組み込みセンサーのうち、この権限の宣言を求めるのは、歩数計歩行検出のセンサーのみです。
Android 9(API レベル 28)以前をターゲットとしているアプリの場合、アプリが次の条件をすべて満たしていれば、必要に応じてシステムが android.permission.ACTIVITY_RECOGNITION 権限をアプリに自動的に付与します。

  • マニフェスト ファイルには com.google.android.gms.permission.ACTIVITY_RECOGNITION 権限が含まれます。
  • マニフェスト ファイルには android.permission.ACTIVITY_RECOGNITION 権限は含まれません

システムが android.permission.ACTIVITY_RECOGNITION 権限を自動的に付与した場合、アプリが Android 10 をターゲットにするよう更新された後もアプリはこの権限を保持します。ただし、ユーザーはいつでもシステム設定でこの権限を取り消すことができます。

/proc/net ファイルシステムの制限

Android 10 以降が実行されているデバイスでは、デバイスのネットワーク状態に関する情報が格納されている /proc/net にアプリがアクセスすることはできません。VPN など、この情報にアクセスする必要のあるアプリは、NetworkStatsManager クラスや ConnectivityManager クラスを使用する必要があります。

UI から削除された権限グループ

Android 10 の時点で、UI 内で権限がどのようにグループ化されているかをアプリでは検索できません。

連絡先アフィニティの削除

Android 10 以降、プラットフォームでは連絡先アフィニティ情報を管理しません。そのため、アプリによってユーザーの連絡先に対して検索が行われても、その検索結果はインタラクションの頻度では並べ替えられません。
ContactsProvider に関するガイドには、Android 10 以降すべてのデバイスでサポートが終了したフィールドとメソッドに関する注意事項が記載されています。

画面コンテンツに対するアクセスの制限

ユーザーの画面コンテンツを保護するため、Android 10 では READ_FRAME_BUFFERCAPTURE_VIDEO_OUTPUTCAPTURE_SECURE_VIDEO_OUTPUT の各権限の範囲を変更することで、デバイスの画面コンテンツへのサイレント アクセスを防止します。Android 10 の時点で、これらの権限は signature アクセス専用です。
デバイスの画面コンテンツにアクセスする必要があるアプリでは、MediaProjection API を使用する必要があります。この API により、ユーザーに同意を求めるプロンプトが表示されます。

USB デバイスのシリアル番号

Android 10 以降をターゲットとしているアプリの場合、ユーザーがアプリに対して USB デバイスや USB アクセサリへのアクセス権限を付与するまで、シリアル番号を読み取ることができません。
USB デバイスの操作の詳細については、USB ホストを設定する方法をご覧ください。

Wi-Fi

Android 10 以降をターゲットとするアプリは、有効 / 無効を切り替えることができません。WifiManager.setWifiEnabled() メソッドは常に false を返します。
Wi-Fi の有効 / 無効を切り替えるようにユーザーに促す必要がある場合は、設定パネルを使用します。

設定済み Wi-Fi ネットワークへの直接アクセスに関する制限

ユーザーのプライバシーを保護するために、Wi-Fi ネットワーク リストの手動設定は、システムアプリと Device Policy Controller(DPC)のみに制限されています。特定の DPC をデバイス オーナーまたはプロファイル オーナーのいずれかに指定できます。
Android 10 以降をターゲットとしている、システムアプリでも DPC でもないアプリの場合、次のメソッドでは有用なデータが返されません。

Android 9

Android のすべてのリリースで、ユーザーを保護するためにさまざまなセキュリティ機能が強化されています。Android 9 で利用できる強化されたセキュリティ機能の主なものについては、Android リリースノートをご覧ください。

Android 8

Every Android release includes dozens of security enhancements to protect users. Here are some of the major security enhancements available in Android 8.0:

  • Encryption. Added support to evict key in work profile.
  • Verified Boot. Added Android Verified Boot (AVB). Verified Boot codebase supporting rollback protection for use in boot loaders added to AOSP. Recommend bootloader support for rollback protection for the HLOS. Recommend boot loaders can only be unlocked by user physically interacting with the device.
  • Lock screen. Added support for using tamper-resistant hardware to verify lock screen credential.
  • KeyStore. Required key attestation for all devices that ship with Android 8.0+. Added ID attestation support to improve Zero Touch Enrollment.
  • Sandboxing. More tightly sandboxed many components using Project Treble's standard interface between framework and device-specific components. Applied seccomp filtering to all untrusted apps to reduce the kernel's attack surface. WebView is now run in an isolated process with very limited access to the rest of the system.
  • Kernel hardening. Implemented hardened usercopy, PAN emulation, read-only after init, and KASLR.
  • Userspace hardening. Implemented CFI for the media stack. App overlays can no longer cover system-critical windows and users have a way to dismiss them.
  • Streaming OS update. Enabled updates on devices that are are low on disk space.
  • Install unknown apps. Users must grant permission to install apps from a source that isn't a first-party app store.
  • Privacy. Android ID (SSAID) has a different value for each app and each user on the device. For web browser apps, Widevine Client ID returns a different value for each app package name and web origin. net.hostname is now empty and the dhcp client no longer sends a hostname. android.os.Build.SERIAL has been replaced with the Build.SERIAL API which is protected behind a user-controlled permission. Improved MAC address randomization in some chipsets.

Android 7

Every Android release includes dozens of security enhancements to protect users. Here are some of the major security enhancements available in Android 7.0:

  • File-based encryption. Encrypting at the file level, instead of encrypting the entire storage area as a single unit, better isolates and protects individual users and profiles (such as personal and work) on a device.
  • Direct Boot. Enabled by file-based encryption, Direct Boot allows certain apps such as alarm clock and accessibility features to run when device is powered on but not unlocked.
  • Verified Boot. Verified Boot is now strictly enforced to prevent compromised devices from booting; it supports error correction to improve reliability against non-malicious data corruption.
  • SELinux. Updated SELinux configuration and increased seccomp coverage further locks down the Application Sandbox and reduces attack surface.
  • Library load-order randomization and improved ASLR. Increased randomness makes some code-reuse attacks less reliable.
  • Kernel hardening. Added additional memory protection for newer kernels by marking portions of kernel memory as read-only, restricting kernel access to userspace addresses and further reducing the existing attack surface.
  • APK signature scheme v2. Introduced a whole-file signature scheme that improves verification speed and strengthens integrity guarantees.
  • Trusted CA store. To make it easier for apps to control access to their secure network traffic, user-installed certificate authorities and those installed through Device Admin APIs are no longer trusted by default for apps targeting API Level 24+. Additionally, all new Android devices must ship with the same trusted CA store.
  • Network Security Config. Configure network security and TLS through a declarative configuration file.

Android 6

Every Android release includes dozens of security enhancements to protect users. Here are some of the major security enhancements available in Android 6.0:

  • Runtime Permissions. Apps request permissions at runtime instead of being granted at App install time. Users can toggle permissions on and off for both M and pre-M apps.
  • Verified Boot. A set of cryptographic checks of system software are conducted prior to execution to ensure the phone is healthy from the bootloader all the way up to the operating system.
  • Hardware-Isolated Security. New Hardware Abstraction Layer (HAL) used by Fingerprint API, Lockscreen, Device Encryption, and Client Certificates to protect keys against kernel compromise and/or local physical attacks
  • Fingerprints. Devices can now be unlocked with just a touch. Developers can also take advantage of new APIs to use fingerprints to lock and unlock encryption keys.
  • SD Card Adoption. Removable media can be adopted to a device and expand available storage for app local data, photos, videos, etc., but still be protected by block-level encryption.
  • Clear Text Traffic. Developers can use a new StrictMode to make sure their app doesn't use cleartext.
  • System Hardening. Hardening of the system via policies enforced by SELinux. This offers better isolation between users, IOCTL filtering, reduce threat of exposed services, further tightening of SELinux domains, and extremely limited /proc access.
  • USB Access Control: Users must confirm to allow USB access to files, storage, or other functionality on the phone. Default is now charge only with access to storage requiring explicit approval from the user.

Android 5

5.0

每个 Android 版本中都包含数十项用于保护用户的安全增强功能。以下是 Android 5.0 中提供的一些主要安全增强功能:

  • 默认加密。在以开箱即用的方式搭载 L 的设备上,会默认启用全盘加密功能,以便更好地保护丢失设备或被盗设备上的数据。对于更新到 L 的设备,可以在设置 > 安全性部分进行加密。
  • 经过改进的全盘加密功能。使用 scrypt 保护用户密码免遭暴力破解攻击;在可能的情况下,该密钥会绑定到硬件密钥库,以防范来自设备外的攻击。 和以往一样,Android 屏幕锁定密钥和设备加密密钥不会被发送到设备以外,也不会提供给任何应用。
  • 通过 SELinux 得到增强的 Android 沙盒。对于所有域,Android 现在都要求 SELinux 处于强制模式。SELinux 是 Linux 内核中的强制访问控制 (MAC) 系统,用于增强现有的自主访问控制 (DAC) 安全模型。这个新的安全层为防范潜在的安全漏洞提供了额外的保护屏障。
  • Smart Lock。Android 现在包含一些 Trustlet,它们可以提供更灵活的设备解锁方式。 例如,Trustlet 可让设备在靠近其他可信设备时自动解锁(通过 NFC、蓝牙),或让设备在用户拥有可信面孔时自动解锁。
  • 面向手机和平板电脑的多用户功能、受限个人资料和访客模式。Android 现在为手机提供了多用户功能,并包含一个访客模式。利用访客模式,您可以让访客轻松地临时使用您的设备,而不向他们授予对您的数据和应用的访问权限。
  • 不使用 OTA 的 WebView 更新方式。现在可以独立于框架对 WebView 进行更新,而且无需采用系统 OTA 方式。 这有助于更快速地应对 WebView 中的潜在安全问题。
  • 经过更新的 HTTPS 和 TLS/SSL 加密功能。现在启用了 TLSv1.2 和 TLSv1.1,首选是正向加密,启用了 AES-GCM,停用了弱加密套件(MD5、3DES 和导出密码套件)。如需了解详情,请访问 https://developer.android.com/reference/javax/net/ssl/SSLSocket.html
  • 移除了非 PIE 链接器支持。Android 现在要求所有动态链接的可执行文件都要支持 PIE(位置无关可执行文件)。这有助于增强 Android 的地址空间布局随机化 (ASLR) 实现。
  • FORTIFY_SOURCE 改进。以下 libc 函数现在实现了 FORTIFY_SOURCE 保护功能:stpcpy()stpncpy()read()recvfrom()FD_CLR()FD_SET()FD_ISSET()。这有助于防范涉及这些函数的内存损坏漏洞。
  • 安全修复程序。Android 5.0 中还包含针对 Android 特有漏洞的修复程序。有关这些漏洞的信息已提供给“开放手机联盟”(Open Handset Alliance) 成员,并且 Android 开放源代码项目中提供了相应的修复程序。为了提高安全性,部分搭载更低版本 Android 系统的设备可能也会包含这些修复程序。

Android 4 以前

Android のすべてのリリースで、ユーザーを保護するためにさまざまなセキュリティ機能が強化されています。Android 4.4 では、次のようなセキュリティ機能が強化されました。

  • SELinux による Android サンドボックスの強化。Android で、enforcing モードの SELinux が使用されるようになりました。SELinux は、既存の任意アクセス制御(DAC)ベースのセキュリティ モデルを強化するために使用される、Linux カーネルの強制アクセス制御(MAC)システムです。これにより、潜在的なセキュリティの脆弱性に対する保護が強化されます。
  • ユーザー別 VPN。マルチユーザー デバイスで、VPN がユーザーごとに適用されるようになりました。これにより、デバイスの他のユーザーに影響を与えることなく、VPN 経由ですべてのネットワーク トラフィックをルーティングできます。
  • AndroidKeyStore での ECDSA プロバイダのサポート。ECDSA アルゴリズムと DSA アルゴリズムを使用できるキーストア プロバイダが Android に追加されました。
  • デバイス モニタリングに関する警告。Android で、暗号化されたネットワーク トラフィックのモニタリングが可能なデバイス証明書ストアに証明書が追加された場合に警告が表示されます。
  • FORTIFY_SOURCE。Android で FORTIFY_SOURCE レベル 2 がサポートされるようになったため、コードはすべてこれらの保護機能でコンパイルされます。FORTIFY_SOURCE は clang で動作するように拡張されました。
  • 証明書の固定。Android 4.4 は、セキュア SSL/TLS 通信での不正な Google 証明書の使用を検出して阻止します。
  • セキュリティに関する修正。Android 4.4 では、Android 固有の脆弱性に対する修正も行われています。これらの脆弱性に関する情報は、オープン ハンドセット アライアンスのメンバーに提供されています。修正プログラムは Android オープンソース プロジェクトで入手できます。また、Android の以前のバージョンがインストールされている一部のデバイスでも、セキュリティ強化のために修正プログラムが適用されている場合があります。

Android のすべてのリリースで、ユーザーを保護するためにさまざまなセキュリティ機能が強化されています。Android 4.3 では、次のようなセキュリティ機能が強化されました。

  • SELinux による Android サンドボックスの強化。このリリースでは、Linux カーネルの SELinux 強制アクセス制御(MAC)システムを使用して Android サンドボックスが強化されています。SELinux の強化はユーザーとデベロッパーに認識されることなく、既存のアプリとの互換性を維持しながら、既存の Android セキュリティ モデルに堅牢性を追加します。互換性を確保するため、このリリースでは SELinux の permissive モードでの使用が可能です。このモードではポリシー違反がログに記録されますが、アプリが停止したりシステムの動作に影響したりすることはありません。
  • setuid または setgid プログラムの削除。Android システム ファイルにファイル システム機能のサポートを追加して、すべての setuid または setgid プログラムを削除しました。これにより、root の攻撃対象領域が減少し、潜在的なセキュリティの脆弱性が生じる可能性が低くなります。
  • ADB 認証。Android 4.2.2 以降では、ADB への接続は RSA 鍵ペアで認証されます。これにより、攻撃者がデバイスに物理的にアクセスできる ADB の不正使用が防止できます。
  • Android アプリによる setuid の制限。zygote が生成したプロセスで使用する nosuid が /system パーティションにマウントされたことで、Android アプリで setuid プログラムを実行できなくなりました。これにより、root の攻撃対象領域が減少し、潜在的なセキュリティの脆弱性が生じる可能性が低くなります。
  • 権限の制限。Android zygote と ADB で、アプリの実行前に prctl(PR_CAPBSET_DROP) を使用して不要な権限が削除されるようになりました。これにより、Android アプリとシェルからリリースされたアプリは特権を取得できなくなります。
  • AndroidKeyStore プロバイダ。アプリで専用キーを作成できるキーストア プロバイダが Android に追加されました。これにより、他のアプリで使用できない秘密鍵を作成または保存するための API がアプリに提供されます。
  • キーチェーン isBoundKeyAlgorithm Keychain API で、システム全体で使用する鍵がデバイスのハードウェア ルート オブ トラストにバインドされていることをアプリが確認できるメソッド(isBoundKeyType)が提供されるようになりました。これにより、root が不正使用されてもデバイスからエクスポートできない秘密鍵を作成または保存できます。
  • NO_NEW_PRIVSAndroid zygote は、prctl(PR_SET_NO_NEW_PRIVS) を使用して、アプリコード実行前の新しい権限の追加をブロックするようになりました。これにより、Android アプリは execve を介して権限を昇格する操作を実行できなくなります(Linux カーネルのバージョン 3.5 以上が必要です)。
  • FORTIFY_SOURCE 機能強化。Android x86 と MIPS で FORTIFY_SOURCE が有効化され、strchr()strrchr()strlen()umask() の呼び出しが強化されました。これにより、潜在的なメモリ破損の脆弱性や終端文字のない文字列定数を検出できます。
  • 再配置の保護。静的にリンクされた実行可能ファイルの読み取り専用再配置(relro)が有効化され、Android コード内のテキストの再配置がすべて削除されました。これにより、潜在的なメモリ破損の脆弱性に対する多重防御が実現します。
  • EntropyMixer の改善。EntropyMixer で、定期的なミキシングに加えて、シャットダウンまたは再起動時にエントロピーが書き込まれるようになりました。これにより、デバイスの電源投入時に生成されるすべてのエントロピーを保持できるため、プロビジョニング後すぐに再起動するデバイスで特に役立ちます。
  • セキュリティに関する修正。Android 4.3 では、Android 固有の脆弱性に対する修正も行われています。これらの脆弱性に関する情報は、オープン ハンドセット アライアンスのメンバーに提供されています。修正プログラムは Android オープンソース プロジェクトで入手できます。また、Android の以前のバージョンがインストールされている一部のデバイスでも、セキュリティ強化のために修正プログラムが適用されている場合があります。

Android は、Android のセキュリティの概要に記載されているマルチレイヤ セキュリティ モデルを提供しています。Android の各アップデートでは、ユーザーを保護するために多くのセキュリティ機能が強化されます。Android 4.2 では、次のようなセキュリティ機能が強化されました。

  • アプリの確認: ユーザーはアプリの確認を有効にし、アプリの検証ツールによってインストールの前にアプリをスクリーニングすることができます。害を及ぼす可能性があるアプリをユーザーがインストールしようとすると、アプリの確認がユーザーに警告することがあります。特に有害なアプリの場合、インストールをブロックすることもあります。
  • プレミアム SMS の詳細な管理: 追加料金が発生する可能性があるプレミアム サービスを使用しているショートコードにアプリが SMS を送信しようとすると、Android によって通知が表示されます。ユーザーは、アプリによるメッセージの送信を許可するかブロックするかを選択できます。
  • 常時接続 VPN: VPN 接続が確立されるまでアプリがネットワークにアクセスできないように VPN を構成できます。これにより、アプリが他のネットワークを経由してデータを送信することができなくなります。
  • 証明書のピン留め: Android コアライブラリで証明書のピン留めがサポートされるようになりました。ピン留めされたドメインは、証明書が一連の想定される証明書にチェーンされていない場合、証明書の検証失敗を受け取ります。これにより、認証局のセキュリティ侵害を防ぐことができます。
  • Android 権限の表示の改善: 権限は、ユーザーが簡単に理解できるグループに分類されています。ユーザーは権限について確認する際に、権限をクリックすれば詳細情報を確認できます。
  • installd の強化: installd デーモンは root ユーザーとして実行されないため、ルート権限昇格に対する潜在的な攻撃対象領域が狭まります。
  • init スクリプトの強化: init スクリプトによって O_NOFOLLOW セマンティクスが適用され、シンボリック リンク関連の攻撃を防ぐことができるようになりました。
  • FORTIFY_SOURCE: Android で FORTIFY_SOURCE が実装されるようになりました。これは、メモリ破損を防ぐためにシステム ライブラリとアプリで使用されます。
  • ContentProvider のデフォルト構成: 対象 API レベル 17 のアプリでは、デフォルトでコンテンツ プロバイダごとに exportfalse に設定します。これにより、アプリのデフォルトの攻撃対象領域が縮小します。
  • 暗号: OpenSSL を使用するように、SecureRandom と Cipher.RSA のデフォルトの実装が変更されました。また、OpenSSL 1.0.1 を使用した TLSv1.1 と TLSv1.2 に対する SSLSocket のサポートが追加されました。
  • セキュリティに関する修正: セキュリティに関する修正によってアップグレードされたオープンソース ライブラリには、WebKit、libpng、OpenSSL、LibXML が含まれています。Android 4.2 では、Android 固有の脆弱性に対する修正も行われています。これらの脆弱性に関する情報は、オープン ハンドセット アライアンスのメンバーに提供されています。修正プログラムは Android オープンソース プロジェクトで入手できます。また、Android の以前のバージョンがインストールされている一部のデバイスでも、セキュリティ強化のために修正プログラムが適用されている場合があります。

Android provides a multi-layered security model described in the Android Security Overview. Each update to Android includes dozens of security enhancements to protect users. The following are some of the security enhancements introduced in Android versions 1.5 through 4.1:

Android 1.5
  • ProPolice to prevent stack buffer overruns (-fstack-protector)
  • safe_iop to reduce integer overflows
  • Extensions to OpenBSD dlmalloc to prevent double free() vulnerabilities and to prevent chunk consolidation attacks. Chunk consolidation attacks are a common way to exploit heap corruption.
  • OpenBSD calloc to prevent integer overflows during memory allocation
Android 2.3
  • Format string vulnerability protections (-Wformat-security -Werror=format-security)
  • Hardware-based No eXecute (NX) to prevent code execution on the stack and heap
  • Linux mmap_min_addr to mitigate null pointer dereference privilege escalation (further enhanced in Android 4.1)
Android 4.0
Address Space Layout Randomization (ASLR) to randomize key locations in memory
Android 4.1
  • PIE (Position Independent Executable) support
  • Read-only relocations / immediate binding (-Wl,-z,relro -Wl,-z,now)
  • dmesg_restrict enabled (avoid leaking kernel addresses)
  • kptr_restrict enabled (avoid leaking kernel addresses)