Android のセキュリティ機能とサービスは継続的に改善されています。左側のナビゲーションでリリースごとに強化されている機能の一覧をご覧ください。
Android 14
Every Android release includes dozens of security enhancements to protect users. Here are some of the major security enhancements available in Android 14:
- Hardware-assisted AddressSanitizer (HWASan), introduced in Android 10, is a memory error detection tool similar to AddressSanitizer. Android 14 brings significant improvements to HWASan. Learn how it helps prevent bugs from making it into Android releases, HWAddressSanitizer
- In Android 14, starting with apps that share location data with third-parties, the system runtime permission dialog now includes a clickable section that highlights the app's data-sharing practices, including information such as why an app may decide to share data with third parties.
- Android 12 introduced an option to disable 2G support at the modem level, which protects users from the inherent security risk from 2G's obsolete security model. Recognizing how critical disabling 2G could be for enterprise customers, Android 14 enables this security feature in Android Enterprise, introducing support for IT admins to restrict the ability of a managed device to downgrade to 2G connectivity.
- Added support to reject null-ciphered cellular connections, ensuring that circuit-switched voice and SMS traffic is always encrypted and protected from passive over-the-air interception. Learn more about Android's program to harden cellular connectivity.
- Added support for multiple IMEIs
- Since Android 14, AES-HCTR2 is the preferred mode of filenames encryption for devices with accelerated cryptography instructions.
- Cellular connectivity
- Documentation added for Android Safety Center
- If your app targets Android 14 and uses Dynamic Code Loading (DCL), all dynamically-loaded files must be marked as read-only. Otherwise, the system throws an exception. We recommend that apps avoid dynamically loading code whenever possible, as doing so greatly increases the risk that an app can be compromised by code injection or code tampering.
Check out our full AOSP release notes and the Android Developer features and changes list.
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 の通常のリリース サイクル以外で更新できます。モジュールには次のものがあります。
- 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
特権が必要です。
Build
TelephonyManager
権限を持たないアプリが再設定不可能な 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 では、次のようなセキュリティ機能が強化されました。
- 暗号化。仕事用プロファイルで鍵を除去できるようになりました。
- 確認済みの起動。Android 確認付きブート(AVB)が追加されました。ブートローダーで使用されるロールバック保護をサポートする確認付きブートのコードベースが AOSP に追加されました。HLOS のロールバック保護について、推奨ブートローダーをサポートします。推奨ブートローダーは、物理的にデバイスを操作するユーザーのみがロック解除できます。
- ロック画面。不正使用防止機能を備えたハードウェアを使用してロック画面の認証情報を検証するサポートが追加されました。
- キーストア。Android 8.0 以降を搭載したすべてのデバイスでは、鍵アテステーションが要求されます。ゼロタッチ登録を改善する ID アテステーションのサポートが追加されました。
- サンドボックス化。フレームワークとデバイス固有のコンポーネントの間でプロジェクト Treble の標準インターフェースを使用する多くのコンポーネントが、より厳格にサンドボックス化されました。すべての信頼できないアプリに seccomp フィルタリングが適用され、カーネルの攻撃対象領域が削減されました。WebView は、システムの残りの部分へのアクセスが大幅に制限される独立したプロセスで実行されます。
- カーネルの強化。強化された usercopy、PAN エミュレーション、init 後の読み取り専用処理、KASLR が実装されました。
- ユーザー空間の強化。メディア スタック用に CFI が実装されました。アプリ オーバーレイはシステムにとって不可欠なウィンドウを覆うことができなくなりました。ユーザーはこれを非表示にできます。
- ストリーミング OS アップデート。ディスク容量が少ないデバイスでのアップデートが可能になりました。
- 不明なアプリのインストール。ユーザーがファーストパーティのアプリストア以外のソースからアプリをインストールする際は、権限を付与する必要があります。
- プライバシー。Android ID(SSAID)の値は、デバイス上のアプリとユーザーごとに異なります。ウェブブラウザ アプリの場合、Widevine クライアント ID は、アプリ パッケージ名とウェブオリジンごとに異なる値を返します。
net.hostname
は空になり、DHCP クライアントはホスト名を送信しなくなりました。android.os.Build.SERIAL
は、ユーザーが制御する権限の背後で保護されるBuild.SERIAL
API に置き換えられました。一部のチップセットで、MAC アドレスのランダム化が改善されました。
Android 7
每个 Android 版本中都包含数十项用于保护用户的安全增强功能。以下是 Android 7.0 中提供的一些主要安全增强功能:
- 文件级加密:在文件级进行加密,而不是将整个存储区域作为单个单元进行加密。这种加密方式可以更好地隔离和保护设备上的不同用户和资料(例如个人资料和工作资料)。
- 直接启动:通过文件级加密实现,允许特定应用(例如,闹钟和无障碍功能)在设备已开机但未解锁的情况下运行。
- 验证启动:现在,验证启动会被严格强制执行,从而使遭到入侵的设备无法启动;验证启动支持纠错功能,有助于更可靠地防范非恶意数据损坏。
- SELinux。更新后的 SELinux 配置和更高的 Seccomp 覆盖率有助于进一步锁定应用沙盒并减小受攻击面。
- 库加载顺序随机化和改进的 ASLR。 增大随机性降低了某些代码重用攻击的有效性。
- 内核加固:通过将内核内存的各个分区标记为只读,限制内核对用户空间地址的访问,并进一步减小现有的受攻击面,为更高版本的内核添加额外的内存保护。
- APK 签名方案 v2:引入了一种全文件签名方案,该方案有助于加快验证速度并增强完整性保证。
- 可信 CA 存储区。为了使应用更容易控制对其安全网络流量的访问,对于 API 级别为 24 及以上的应用,由用户安装的证书颁发机构以及通过 Device Admin API 安装的证书颁发机构在默认情况下不再受信任。此外,所有新的 Android 设备必须搭载相同的可信 CA 存储区。
- 网络安全配置。通过声明式配置文件来配置网络安全设置和传输层安全协议 (TLS)。
Android 6
每个 Android 版本中都包含数十种用于保护用户的安全增强功能。以下是 Android 6.0 中提供的一些主要安全增强功能:
- 运行时权限:应用在运行时请求权限,而不是在安装时被授予权限。用户可以为 M 及更低版本的 Android 应用启用和停用权限。
- 验证启动:在执行系统软件之前,先对其进行一系列加密检查,以确保手机从引导加载程序到操作系统均处于正常状况。
- 硬件隔离安全措施:新的硬件抽象层 (HAL),Fingerprint API、锁定屏幕、设备加密功能和客户端证书可以利用它来保护密钥免遭内核入侵和/或现场攻击。
- 指纹:现在,只需触摸一下,即可解锁设备。开发者还可以借助新的 API 来使用指纹锁定和解锁加密密钥。
- 加装 SD 卡:可将移动媒体设备加装到设备上,以便扩展可用存储空间来存放本地应用数据、照片、视频等内容,但仍受块级加密保护。
- 明文流量:开发者可以使用新的 StrictMode 来确保其应用不会使用明文。
- 系统加固:通过由 SELinux 强制执行的政策对系统进行加固。这可以实现更好的用户隔离和 IOCTL 过滤、降低可从设备/系统之外访问的服务面临的威胁、进一步强化 SELinux 域,以及高度限制对 /proc 的访问。
- USB 访问控制:必须由用户确认是否允许通过 USB 访问手机上的文件、存储空间或其他功能。现在,默认设置是“仅充电”,如果要访问存储空间,必须获得用户的明确许可。
Android 5
5.0
Android のすべてのリリースで、ユーザーを保護するためにさまざまなセキュリティ機能が強化されています。Android 5.0 では、次のようなセキュリティ機能が強化されました。
- デフォルトで暗号化。最初から L が搭載されたデバイスでは、フルディスク暗号化がデフォルトで有効になっているため、紛失したり盗まれたりしたデバイスのデータの保護が改善されています。L に更新したデバイスは、[設定] > [セキュリティ] で暗号化できます。
- フルディスク暗号化の改善。ユーザー パスワードは
scrypt
を使用してブルートフォース攻撃から保護されます。さらに可能な場合は、鍵がハードウェア キーストアにバインドされてデバイス外攻撃から保護されます。これまでと同様に、Android の画面ロック シークレットとデバイスの暗号鍵がデバイスから送信されたり、アプリに公開されたりすることはありません。 - SELinux による Android サンドボックスの強化。Android では、すべてのドメインで enforcing モードの SELinux が必要になりました。SELinux は、既存の任意アクセス制御(DAC)セキュリティ モデルを強化するために使用される、Linux カーネルの強制アクセス制御(MAC)システムです。この新しいレイヤは、潜在的なセキュリティの脆弱性に対する保護を強化します。
- Smart Lock。デバイスのロック解除に柔軟性を提供する Trustlet が Android に追加されました。Trustlet を使用すると、たとえば NFC や Bluetooth などを介して信頼できる別のデバイスが検出された場合や、認識済みの顔のユーザーによって使用された場合に、自動的にデバイスのロックを解除できます。
- スマートフォンとタブレットのマルチユーザー、制限付きプロファイル、ゲストモード。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 の改善。
stpcpy()
、stpncpy()
、read()
、recvfrom()
、FD_CLR()
、FD_SET()
、FD_ISSET()
の libc 関数で FORTIFY_SOURCE 保護が実装されました。これにより、これらの関数に関連するメモリ破損の脆弱性に対処できます。 - セキュリティに関する修正。Android 5.0 では、Android 固有の脆弱性に対する修正も行われています。これらの脆弱性に関する情報は、オープン ハンドセット アライアンスのメンバーに提供されています。修正プログラムは 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。此模式会记录所有违反政策的行为,但不会中断应用,也不会影响系统行为。
- 没有
setuid
或setgid
程序。针对 Android 系统文件添加了对文件系统功能的支持,并移除了所有setuid
或setgid
程序。这可以减小 Root 攻击面,并降低出现潜在安全漏洞的可能性。 - ADB 身份验证。从 Android 4.2.2 起,开始使用 RSA 密钥对为 ADB 连接进行身份验证。这可以防止攻击者在实际接触到设备的情况下未经授权使用 ADB。
- 限制 Android 应用执行 SetUID 程序。
/system
分区现在针对 Zygote 衍生的进程装载了 nosuid,以防止 Android 应用执行setuid
程序。这可以减小 root 攻击面,并降低出现潜在安全漏洞的可能性。 - 功能绑定。在执行应用之前,Android Zygote 和 ADB 现在会先使用
prctl(PR_CAPBSET_DROP)
舍弃不必要的功能。这可以防止 Android 应用和从 shell 启动的应用获取特权功能。 - AndroidKeyStore 提供程序。Android 现在有一个允许应用创建专用密钥的密钥库提供程序。该程序可以为应用提供一个用于创建或存储私钥的 API,其他应用将无法使用这些私钥。
- KeyChain
isBoundKeyAlgorithm
。Keychain API 现在提供了一种方法 (isBoundKeyType
),可让应用确认系统级密钥是否已绑定到设备的硬件信任根。该方法提供了一个用于创建或存储私钥的位置,即使发生 root 权限被窃取的情况,这些私钥也无法从设备中导出。 NO_NEW_PRIVS
。Android Zygote 现在会在执行应用代码之前使用prctl(PR_SET_NO_NEW_PRIVS)
禁止添加新权限。这可以防止 Android 应用执行可通过 execve 提升权限的操作。(此功能需要使用 3.5 或更高版本的 Linux 内核)。FORTIFY_SOURCE
增强。在 Android x86 和 MIPS 上启用了FORTIFY_SOURCE
,并增强了strchr()
、strrchr()
、strlen()
和umask()
调用。这可以检测潜在的内存损坏漏洞或没有结束符的字符串常量。- 重定位保护。针对静态关联的可执行文件启用了只读重定位 (relro) 技术,并移除了 Android 代码中的所有文本重定位技术。这可以纵深防御潜在的内存损坏漏洞。
- 经过改进的 EntropyMixer。除了定期执行混合操作之外,EntropyMixer 现在还会在关机或重新启动时写入熵。这样一来,便可以保留设备开机时生成的所有熵,而这对于配置之后立即重新启动的设备来说尤其有用。
- 安全修复程序。Android 4.3 中还包含针对 Android 特有漏洞的修复。有关这些漏洞的信息已提供给“开放手机联盟”(Open Handset Alliance) 成员,并且 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(避免内核地址泄露)