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

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

Linux セキュリティ

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

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

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

マルチユーザー オペレーティング システムとして、Linux カーネルの基本的なセキュリティの目的は、ユーザーのリソースを互いに分離することです。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 6.0 以降では、確認済みの起動と device-mapper-verity がサポートされています。確認済みの起動により、ハードウェアのルート オブ トラストからシステム パーティションまでの、デバイスのソフトウェアの整合性が保証されます。ブート中の各ステージでは、次のステージを実行する前に、その整合性と信頼性を暗号に基づいて検証します。

Android 7.0 以降では、厳格に適用された確認済みの起動がサポートされているため、不正なデバイスは起動できません。

詳細については確認済みの起動をご覧ください。

暗号

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

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

デバイスのルート権限の取得

デフォルトでは、Android ではカーネルとコアアプリの一部のみがルート権限で実行されます。Android では、ルート権限を持つユーザーやアプリは、オペレーティング システム、カーネル、その他のアプリを変更できます。一般に、ルートはすべてのアプリとアプリデータへのフルアクセス権を持ちます。ユーザーが Android デバイスの権限を変更してアプリにルートアクセス権限を付与すると、悪意のあるアプリやアプリの潜在的な欠陥にさらされやすくなり、セキュリティ リスクが増加します。

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

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

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

root ユーザーからデータをさらに強固に保護する方法として、ハードウェア ソリューションがあります。OEM は、動画再生用の DRM や、Google ウォレット用の NFC 関連の信頼できるストレージなど、特定の種類のコンテンツへのアクセスを制限するハードウェア ソリューションを導入することもできます。

デバイスの紛失や盗難の場合、Android デバイスのファイル システム全体の暗号化では、デバイスのパスワードを使用して暗号鍵を保護しているため、ブートローダーやオペレーティング システムを変更しても、デバイスのパスワードがなければユーザーデータにアクセスできません。

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

ファイルシステムの暗号化

Android 3.0 以降ではファイルシステム全体の暗号化が提供されているため、すべてのユーザーデータをカーネルで暗号化できます。

Android 5.0 以降では、フルディスク暗号化をサポートしています。フルディスク暗号化では、ユーザーのデバイスのパスワードで保護された 1 つの鍵を使用して、デバイスのユーザーデータ パーティション全体を保護します。ユーザーは、起動時に認証情報を提供しないとディスクに一切アクセスできません。

Android 7.0 以降では、ファイルベースの暗号化がサポートされています。ファイルベースの暗号化を使用すると、さまざまなファイルを異なる鍵で暗号化して、個別にロック解除できます。

ファイルシステムの暗号化の実装の詳細については、暗号化セクションをご覧ください。

パスワード保護

Android は、デバイスへのアクセスを提供する前に、ユーザーが入力したパスワードを確認するように構成できます。このパスワードは、デバイスの不正使用を防ぐほか、ファイルシステム全体の暗号化用の暗号鍵も保護します。

デバイス管理者は、パスワードやパスワードの複雑さのルールの使用を要求することもできます。

デバイス管理

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

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