Android のセキュリティ機能とサービスは継続的に改善されています。左側のナビゲーションでリリースごとに強化されている機能の一覧をご覧ください。
Android 14
每个 Android 版本中都包含数十种安全增强功能,以保护用户。以下是 Android 14 中提供的一些主要安全增强功能:
- Android 10 中引入的硬件辅助 AddressSanitizer (HWASan) 是一款类似于 AddressSanitizer 的内存错误检测工具。Android 14 对 HWASan 进行了重大改进。如需了解它如何帮助防止 bug 进入 Android 版本,请访问 HWAddressSanitizer
- 在 Android 14 中,从与第三方共享位置数据的应用开始,系统运行时权限对话框现在包含一个可点击的部分,用于突出显示应用的数据分享做法,包括诸如以下信息:应用为什么可能会决定与第三方分享数据。
- Android 12 引入了在调制解调器级别停用 2G 支持的选项,以保护用户免受 2G 的过时安全模型固有的安全风险的影响。认识到停用 2G 对企业客户的重要性后,Android 14 在 Android Enterprise 中启用了此安全功能,以便 IT 管理员能够限制受管设备降级到 2G 连接。
- 开始支持拒绝未加密的移动网络连接,确保电路交换语音和短信流量始终会加密,并可防范被动无线拦截。详细了解 Android 的移动网络连接强化计划。
- 新增了对多个 IMEI 的支持
- 从 Android 14 开始,AES-HCTR2 是采用加速加密指令的设备的首选文件名加密模式。
- 移动网络连接
- 在 Android 安全中心添加了相关文档
- 如果您的应用以 Android 14 为目标平台并使用动态代码加载 (DCL) 功能,则必须将所有动态加载的文件标记为只读。否则,系统会抛出异常。我们建议应用尽可能避免动态加载代码,因为这样做会大大增加应用因代码注入或代码篡改而遭到入侵的风险。
Android 13
每个 Android 版本中都包含数十种用于保护用户的安全增强功能。以下是 Android 13 中提供的一些主要安全增强功能:
- Android 13 添加了对多文档呈现的支持。 通过这个新的 Presentation Session 接口,应用可以执行多文档呈现,而现有 API 无法做到这一点。如需了解详情,请参阅身份凭据
- 在 Android 13 中,当且仅当源自外部应用的 intent 与其声明的 intent 过滤器元素匹配时,这些 intent 才会传送到导出的组件。
- 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(密钥哈希消息认证码)以及非对称加密算法(包括椭圆曲线加密、RSA2048、RSA4096 和曲线 25519 加密)
- Android 13(API 级别 33)及更高版本支持用于从应用发送非豁免通知的运行时权限。这可让用户控制他们会看到哪些权限通知。
- 针对请求访问所有设备日志的应用,添加了在每次使用时显示提示的功能,以便用户允许或拒绝授予访问权限。
- 推出了 Android 虚拟化框架 (AVF),它使用标准化 API 将不同的 Hypervisor 整合到一个框架下。 它提供安全、私密的执行环境,以便执行通过 Hypervisor 隔离的工作负载。
- 引入了 APK 签名方案 v3.1 所有使用 apksigner 的新密钥轮替都将默认使用 v3.1 签名方案,以便将 Android 13 及更高版本作为轮替目标。
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 は、次のコーデックで有効になっています。
libFLAClibavcdeclibavcenclibhevcdeclibmpeg2libopuslibvpxlibspeexresamplerlibvorbisideclibaaclibxaac
実行専用メモリ
デフォルトでは、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 は、次のコーデックで有効になっています。
libFLAClibavcdeclibavcenclibhevcdeclibmpeg2libopuslibvpxlibspeexresamplerlibvorbisidec
モジュラー システム コンポーネント
Android 10 は、一部の Android システム コンポーネントをモジュール化しており、Android の通常のリリース サイクル以外で更新できます。モジュールには次のものがあります。
- Android ランタイム
- Conscrypt
- DNS Resolver
- DocumentsUI
- ExtServices
- メディア
- ModuleMetadata
- ネットワーキング
- PermissionController
- Time Zone Data
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またはcompileSdkVersionを29以上に設定する必要があります。フォアグラウンド サービスで、位置情報へのアクセスを必要とするユーザー開始アクションを実行し続ける方法についての説明をご覧ください。
外部ストレージ
デフォルトでは、Android 10 以降をターゲットとするアプリには外部ストレージに対するスコープ アクセス、つまり対象範囲別ストレージが付与されます。このようなアプリの場合、次のファイルの種類については、ストレージ関連のユーザー権限をリクエストしなくても外部ストレージ デバイスに表示されます。
- アプリ固有のディレクトリ内にあり、
getExternalFilesDir()を使用してアクセスするファイル。 - アプリによってメディアストアから作成された写真、動画、音声クリップ。
対象範囲別ストレージについて、および外部ストレージ デバイスに保存されたファイルを共有、アクセス、変更する方法について詳しくは、外部ストレージでファイルを管理する方法、およびメディア ファイルにアクセスして変更する方法をご覧ください。
MAC アドレスのランダム化
Android 10 以降が実行されているデバイスでは、デフォルトでランダム MAC アドレスが送信されます。
エンタープライズ ユースケースを扱うアプリ向けに、プラットフォームには MAC アドレスに関連する操作を行うための API が用意されています。
- ランダムな MAC アドレスを取得する: デバイス所有者アプリとプロフィール所有者アプリは、
getRandomizedMacAddress()を呼び出すことで、特定のネットワークに割り当てられたランダムな MAC アドレスを取得できます。 - 実際の出荷時 MAC アドレスを取得する: デバイス オーナー アプリでは、
getWifiMacAddress()を呼び出すことで、デバイスの実際のハードウェア MAC アドレスを取得できます。このメソッドは、大量のデバイスをトラッキングする際に便利です。
再設定不可能なデバイス ID
Android 10 以降で IMEI とシリアル番号の両方を含む再設定不可能なデバイス ID にアクセスするには、アプリに READ_PRIVILEGED_PHONE_STATE 特権が必要です。
BuildTelephonyManager
権限を持たないアプリが再設定不可能な ID に関する情報を求めようとした場合、プラットフォームの応答はターゲット SDK のバージョンによって異なります。
- アプリが Android 10 以降を対象にしている場合、
SecurityExceptionが発生します。 - アプリが Android 9(API レベル 28)以下を対象にしている場合、アプリに
READ_PHONE_STATE権限があれば、このメソッドはnullまたはプレースホルダ データを返します。それ以外の場合は、SecurityExceptionが発生します。
操作の認識
Android 10 では、ユーザーの歩数を検出したり、徒歩、サイクリング、車の運転など、ユーザーの操作を分類したりする必要があるアプリ向けに android.permission.ACTIVITY_RECOGNITION ランタイム権限が導入されています。このアクセス権限は、デバイスのセンサーデータが [設定] 内でどのように使用されているのかをユーザーに表示するように設計されています。
Google Play 開発者サービス内のライブラリの中には、Activity Recognition API や Google 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_BUFFER、CAPTURE_VIDEO_OUTPUT、CAPTURE_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 でもないアプリの場合、次のメソッドでは有用なデータが返されません。
getConfiguredNetworks()メソッドからは常に空のリストが返されます。- 整数値を返すネットワーク操作メソッド(
addNetwork()およびupdateNetwork())はいずれも常に「-1」を返します。 - ブール値を返すネットワーク操作メソッド(
removeNetwork()、reassociate()、enableNetwork()、disableNetwork()、reconnect()、disconnect())は、常に「false」を返します。
Android 9
Android のすべてのリリースで、ユーザーを保護するためにさまざまなセキュリティ機能が強化されています。Android 9 で利用できる強化されたセキュリティ機能の主なものについては、Android リリースノートをご覧ください。
Android 8
每个 Android 版本中都包含数十种用于保护用户的安全增强功能。以下是 Android 8.0 中提供的一些主要安全增强功能:
- 加密:在工作资料中增加了对撤销密钥 (evict key) 的支持。
- 验证启动:增加了 Android 启动时验证 (AVB)。支持回滚保护(用于引导加载程序)的启动时验证代码库已添加到 AOSP 中。建议提供引导加载程序支持,以便为 HLOS 提供回滚保护。建议将引导加载程序设为只能由用户通过实际操作设备来解锁。
- 锁定屏幕:增加了对使用防篡改硬件验证锁定屏幕凭据的支持。
- KeyStore:搭载 Android 8.0 及更高版本的所有设备都需要进行密钥认证。增加了 ID 认证支持,以改进零触摸注册计划。
- 沙盒:使用 Treble 计划的框架和设备特定组件之间的标准接口更紧密地对许多组件进行沙盒化处理。将 seccomp 过滤应用到了所有不信任的应用,以减少内核的攻击面。WebView 现在运行在一个独立的进程中,对系统其余部分的访问非常有限。
- 内核加固:实现了经过安全强化的 usercopy、PAN 模拟、初始化后变为只读以及 KASLR。
- 用户空间安全强化:为媒体堆栈实现了 CFI。 应用叠加层不能再遮盖系统关键窗口,并且用户可以关闭这些叠加层。
- 操作系统流式更新:在磁盘空间不足的设备上启用了更新。
- 安装未知应用:用户必须授予权限,系统才能从不是第一方应用商店的来源安装应用。
- 隐私权:对于设备上的每个应用和使用设备的每个用户,Android ID (SSAID) 都采用不同的值。对于网络浏览器应用,Widevine 客户端 ID 会针对每个应用软件包名称和网络来源返回不同的值。
net.hostname现在为空,并且 DHCP 客户端不再发送主机名。android.os.Build.SERIAL已被替换为Build.SERIALAPI(受到用户控制权限的保护)。改进了某些芯片组中的 MAC 地址随机分配功能。
Android 7
Android のすべてのリリースで、ユーザーを保護するためにさまざまなセキュリティ機能が強化されています。Android 7.0 では、次のようなセキュリティ機能が強化されました。
- ファイルベースの暗号化。ストレージ領域全体を 1 単位として暗号化するのではなく、ファイルレベルで暗号化することで、デバイス上の個々のユーザーとプロファイル(個人用や仕事用など)を適切に切り離して保護できます。
- ダイレクト ブート。ファイルベースの暗号化によって有効化されるダイレクト ブートでは、ロック解除されていなくてもデバイスの電源が入っていれば、アラームやユーザー補助機能などの特定のアプリを実行できます。
- 確認付きブート。不正侵入されたデバイスが起動されないように、確認付きブートが厳格に適用されるようになりました。エラー修正がサポートされ、悪意のないデータの破損に対する信頼性が向上しています。
- SELinux。SELinux 構成が更新され、seccomp の適用範囲が拡大したことで、アプリ サンドボックスをさらにロックして攻撃対象領域を減らします。
- ライブラリのロード順序のランダム化と ASLR の改善。ランダム性を上げることで、コード再利用攻撃の精度が低下します。
- カーネルの強化。カーネルメモリの一部を読み取り専用にしてユーザー空間アドレスへのカーネル アクセスを制限し、既存の攻撃対象領域をさらに減らすことで、新しいカーネルのメモリ保護を強化しました。
- APK 署名スキーム v2。検証速度を改善して整合性に関する保証を強化するファイル全体の署名スキームが導入されました。
- 信頼できる CA ストア。アプリが安全なネットワーク トラフィックへのアクセスを制御しやすくするために、ユーザーがインストールした認証局とデバイス管理 API 経由でインストールされた認証局は、API レベル 24 以降をターゲットとするアプリではデフォルトで信頼されなくなりました。また、すべての新しい Android デバイスに、信頼できる同一の CA ストアが付属している必要があります。
- ネットワーク セキュリティ構成。宣言型構成ファイルを使用して、ネットワーク セキュリティと TLS を構成します。
Android 6
Android のすべてのリリースで、ユーザーを保護するためにさまざまなセキュリティ機能が強化されています。Android 6.0 では、次のようなセキュリティ機能が強化されました。
- 実行時の権限。アプリはインストール時に権限を付与されるのではなく、実行時に権限をリクエストします。ユーザーは、M と M より前のアプリの両方で、権限のオンとオフを切り替えることができます。
- 確認付きブート。スマートフォンがブートローダーからオペレーティング システムまですべて正常な状態であることを確認するため、実行に先立ってシステム ソフトウェアの一連の暗号チェックが実施されます。
- ハードウェアから分離されたセキュリティ。カーネルの侵害やローカルの物理攻撃から鍵を保護するため、Fingerprint API、ロック画面、デバイスの暗号化、クライアント証明書では新しいハードウェア抽象化レイヤ(HAL)が使用されます。
- 指紋。一度タッチするだけでデバイスをロック解除できるようになりました。デベロッパーは、指紋を使用して暗号鍵をロックおよびロック解除する新しい API も利用できます。
- SD カードの導入。デバイスにリムーバブル メディアを導入して、アプリのローカルのデータ、写真、動画などに利用できるストレージを拡張できます。なお、それらは引き続きブロックレベルの暗号化によって保護されます。
- クリアテキストのトラフィック。デベロッパーは、新しい StrictMode を使用して、アプリがクリアテキストを使用しないことを保証できます。
- システムの強化。SELinux によって適用されるポリシーによってシステムが強化されました。これには、ユーザー間の分離の改善、IOCTL フィルタリングの提供、公開サービスの脅威の軽減、SELinux ドメインのさらなる厳格化、/proc アクセスの大幅な制限が含まれます。
- USB アクセス制御。ユーザーは、スマートフォン上のファイル、ストレージ、またはその他の機能に対する USB アクセスを許可するかどうか確認を求められます。現在のところデフォルトは充電のみで、ストレージへのアクセスについてユーザーの明示的な同意が求められます。
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 现在以强制模式使用 SELinux。SELinux 是 Linux 内核中的强制访问控制 (MAC) 系统,用于增强基于自主访问控制 (DAC) 的现有安全模型。 这为防范潜在的安全漏洞提供了额外的保护屏障。
- 按用户应用 VPN。 在多用户设备上,现在按用户应用 VPN。 这样一来,用户就可以通过一个 VPN 路由所有网络流量,而不会影响使用同一设备的其他用户。
- AndroidKeyStore 中的 ECDSA 提供程序支持。 Android 现在有一个允许使用 ECDSA 和 DSA 算法的密钥库提供程序。
- 设备监测警告。 如果有任何可能允许监测加密网络流量的证书添加到设备证书库中,Android 都会向用户发出警告。
- FORTIFY_SOURCE。 Android 现在支持 FORTIFY_SOURCE 第 2 级,并且所有代码在编译时都会受到这些保护。FORTIFY_SOURCE 已得到增强,能够与 Clang 配合使用。
- 证书锁定。 Android 4.4 能够检测安全的 SSL/TLS 通信中是否使用了欺诈性 Google 证书,并且能够阻止这种行为。
- 安全修复程序。 Android 4.4 中还包含针对 Android 特有漏洞的修复程序。 有关这些漏洞的信息已提供给“开放手机联盟”(Open Handset Alliance) 成员,并且 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_PRIVS。Android 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 のアプリでは、デフォルトでコンテンツ プロバイダごとに
exportをfalseに設定します。これにより、アプリのデフォルトの攻撃対象領域が縮小します。 - 暗号: OpenSSL を使用するように、SecureRandom と Cipher.RSA のデフォルトの実装が変更されました。また、OpenSSL 1.0.1 を使用した TLSv1.1 と TLSv1.2 に対する SSLSocket のサポートが追加されました。
- セキュリティに関する修正: セキュリティに関する修正によってアップグレードされたオープンソース ライブラリには、WebKit、libpng、OpenSSL、LibXML が含まれています。Android 4.2 では、Android 固有の脆弱性に対する修正も行われています。これらの脆弱性に関する情報は、オープン ハンドセット アライアンスのメンバーに提供されています。修正プログラムは Android オープンソース プロジェクトで入手できます。また、Android の以前のバージョンがインストールされている一部のデバイスでも、セキュリティ強化のために修正プログラムが適用されている場合があります。
Android 提供了一个多层安全模型,Android 安全性概述中对该模型进行了介绍。每个 Android 更新版本中都包含数十项用于保护用户的安全增强功能。以下是 Android 1.5 至 4.1 版中引入的一些安全增强功能:
- Android 1.5
- ProPolice:旨在防止堆栈缓冲区溢出 (-fstack-protector)
- safe_iop:旨在减少整数溢出
- OpenBSD dlmalloc 的扩展程序:旨在防范 double free() 漏洞和连续块攻击。连续块攻击是利用堆损坏的常见攻击方式。
- OpenBSD calloc:旨在防止在内存分配期间发生整数溢出
- Android 2.3
- 格式化字符串漏洞防护功能 (-Wformat-security -Werror=format-security)
- 基于硬件的 No eXecute (NX):旨在防止在堆栈和堆上执行代码
- Linux mmap_min_addr:旨在降低空指针解引用提权风险(在 Android 4.1 中得到了进一步增强)
- Android 4.0
- 地址空间布局随机化 (ASLR):旨在随机排列内存中的关键位置
- Android 4.1
- PIE(位置无关可执行文件)支持
- 只读重定位/立即绑定 (-Wl,-z,relro -Wl,-z,now)
- 启用了 dmesg_restrict(避免内核地址泄露)
- 启用了 kptr_restrict(避免内核地址泄露)