システムとカーネルのセキュリティ

Android プラットフォームは、オペレーティング システム レベルで Linux カーネルのセキュリティとセキュアなプロセス間通信(IPC)機能を提供し、異なるプロセスで実行されているアプリ間のセキュアな通信を実現しています。こうした OS レベルのセキュリティ機能により、ネイティブ コードさえもアプリ サンドボックスによる制約を受けます。そのコードが付属のアプリの動作によるものか、アプリの脆弱性を悪用したものかにかかわらず、不正なアプリが他のアプリや Android システム、またはデバイス自体に害を及ぼさないように、システムが設計されています。デバイスのカーネルを強化するための対策については、カーネル設定をご覧ください。必要な設定については、Android 互換性定義ドキュメント(CDD)をご覧ください。

Linux セキュリティ

Android プラットフォームの基盤は Linux カーネルです。Linux カーネルは、長年にわたって、高度なセキュリティを必要とする何百万もの環境で幅広く使用されています。数多くのデベロッパーによって常に研究、攻撃、修正されてきた経緯から、Linux は、多くの企業やセキュリティの専門家から信頼される、安全で安定したカーネルとなっています。

Linux カーネルは、モバイル コンピューティング環境の基盤として、Android に次のような重要なセキュリティ機能を提供しています。

  • ユーザーベースの権限モデル
  • プロセスの分離
  • 安全な IPC のための拡張可能なメカニズム
  • カーネルの不要な部分と安全でない可能性のある部分を削除する機能

マルチユーザー オペレーティング システムとして、Linux カーネルの基本的なセキュリティの目的は、ユーザーのリソースを互いに分離することです。Linux のセキュリティ理念は、ユーザーのリソースをお互いから保護することです。

  • ユーザー A がユーザー B のファイルを読み取れないようにします
  • ユーザー A がユーザー B のメモリを使い果たさないようにします
  • ユーザー A がユーザー B の CPU リソースを使い果たさないようにする
  • ユーザー A がユーザー B のデバイス(電話、GPS、Bluetooth など)を使い果たさないようにする

アプリ サンドボックス

Android アプリのセキュリティは、アプリを互いに分離して、アプリやシステムを悪意のあるアプリから保護するアプリ サンドボックスによって強化されています。詳しくは、アプリ サンドボックスをご覧ください。

システム パーティションとセーフモード

完全性が保護された各種のパーティションには、Android のカーネル、オペレーティング システム ライブラリ、アプリ ランタイム、アプリ フレームワーク、アプリが含まれています。このパーティションは読み取り専用に設定されています。ユーザーがデバイスをセーフモードで起動する場合、サードパーティ アプリを手動で起動することはできますが、デフォルトでは起動しません。

ファイルシステムの権限

UNIX スタイルの環境では、ファイルシステムの権限によって、あるユーザーが別のユーザーのファイルを変更したり読み取ったりすることはできません。Android の場合、各アプリはそれぞれのユーザーのものとして実行されます。デベロッパーが明示的に他のアプリとファイルを共有しない限り、あるアプリで作成されたファイルを別のアプリで読み取ったり変更したりすることはできません。

Security-Enhanced Linux

Android は、Security-Enhanced Linux(SELinux)を使用してアクセス制御ポリシーを適用し、プロセスに強制アクセス制御(MAC)を設定します。詳しくは、Android での Security-Enhanced Linux をご覧ください。

確認付きブート

Android 7.0 以降では、厳格に適用された確認付きブートがサポートされているため、不正侵入されたデバイスは起動できません。確認付きブートにより、ハードウェアのルート オブ トラストからシステム パーティションまで、デバイスのソフトウェアの完全性が保証されます。ブート中の各ステージでは、次のステージを実行する前に、その完全性と信頼性を暗号化の観点から検証します。
詳しくは、確認付きブートをご覧ください。

暗号化

Android には、アプリで使用できる一連の暗号化 API があります。これには、AES、RSA、DSA、SHA などの、一般的に使用される標準の暗号プリミティブの実装が含まれています。また、SSL や HTTPS などの上位レベルのプロトコル向けにも API が用意されています。

Android 4.0 で導入された KeyChain クラスにより、アプリはシステムの認証情報ストレージを秘密鍵と証明書チェーンに使用できるようになりました。

デバイスの root 権限の取得

Android のデフォルトでは、カーネルとコアサービスの小さなサブセットのみが root 権限で実行されます。SELinux は、root として実行されるユーザー空間プロセスをさらに制限します。確認付きブートにより、root 権限があるユーザーまたはサービスがオペレーティング システムを永続的に変更することはできなくなります。

Android プラットフォームを使用するデベロッパーにとって、所有する Android デバイスを変更できることは重要です。多くの Android デバイスでは、ユーザーがブートローダーのロックを解除して別のオペレーティング システムをインストールできるようになっています。これらの代替オペレーティング システムでは、所有者がアプリやシステム コンポーネントのデバッグのために root アクセス権を取得したり、Android API を利用してアプリに表示されない機能にアクセスしたりすることもできます。

一部のデバイスでは、デバイスや USB ケーブルを物理的に操作できるユーザーが、自分に root 権限を付与する新しいオペレーティング システムをインストールできます。既存のユーザーデータを侵害から保護するには、ブートローダーのロック解除メカニズムにおいて、ロック解除ステップの一環として既存のユーザーデータをすべて消去する必要があります。カーネルのバグやセキュリティ ホールを悪用して得られた root アクセス権は、この保護を回避できます。

デバイスに格納された鍵を使用してデータを暗号化しても、root 権限があるデバイスの root ユーザーからアプリデータを保護することはできません。サーバーやユーザーのパスワードなど、デバイス外に格納された鍵を使用して暗号化することで、アプリのデータ保護を強化できます。ただしこの方法でも、鍵が存在しない間は一時的に保護できますが、どこかの時点で鍵がアプリに提供されなければならないため、その時点で root ユーザーがアクセスできるようになります。

root ユーザーからデータを保護するさらに確実な方法として、ハードウェア ソリューションがあります。OEM は、動画再生用の DRM や、Google ウォレット用の NFC 関連の信頼できるストレージなど、特定の種類のコンテンツへのアクセスを制限するハードウェア ソリューションを実装することもできます。ストレージの暗号化により、デバイスの紛失や盗難があった場合でも、ユーザーのロック画面の認証情報を知ることなく、ユーザーデータにアクセスすることはできません。

ユーザー セキュリティ機能

ストレージの暗号化

CDD では、Android 10 以降を搭載したすべてのデバイスと、Android 6.0 以降を搭載した大部分のデバイスで、ストレージの暗号化が初期状態で有効になっていることが求められています。

Android で現在実装されているストレージの暗号化は、ファイルベースの暗号化メタデータの暗号化を組み合わせたものです。ファイルベースの暗号化は、ユーザーデータ パーティションにあるファイルの内容と名前を、ディレクトリごとに異なる鍵を使用して、透過的に暗号化します。この方式では、仕事用プロファイルなどのユーザーごとに認証情報暗号化およびデバイス暗号化ストレージ ディレクトリを使用できます。

メタデータの暗号化は、ファイルベースの暗号化を補完するものです。この方式では、どのユーザーのロック画面認証情報にも関連付けられず、引き続き確認付きブートで保護されている鍵を使用して、ユーザーデータ パーティションのブロックのうち、ファイルベースの暗号化で暗号化されていないものをすべて暗号化します。

ロック画面認証情報の保護

Android は、デバイスへのアクセスを提供する前に、ユーザーが入力したロック画面認証情報(PIN、パスワード、またはパターン)を確認するように設定できます。このロック画面認証情報によって、デバイスの不正使用が防止されるほか、認証情報暗号化データの暗号鍵も保護されます。デバイス管理者によって、ロック画面認証情報や認証情報の複雑度のルールの使用が必須とされる場合もあります。

デバイス管理

Android 2.2 以降では、システムレベルでデバイス管理機能を提供する Android Device Administration API を用意しています。たとえば、組み込みの Android メールアプリでは、この API を使用して Exchange のサポートを強化しています。管理者は、メールアプリを使用してロック画面認証情報ポリシー(英数字のパスワードや数字の PIN など)をデバイス全体に適用できます。紛失または盗難にあったデバイスをリモートワイプする(工場出荷時のデフォルト設定に戻す)ことも可能です。

これらの API は、Android システムに付属するアプリで使用できるほか、デバイス管理ソリューションのサードパーティ プロバイダも使用できます。API の詳細については、デバイス管理をご覧ください。