Android は業界最高レベルのセキュリティ機能を搭載し、デベロッパーやデバイスの開発者との連携により、Android プラットフォームとエコシステムの安全を維持しています。アプリやデバイスの活発なエコシステムを Android プラットフォーム上やその周辺で構築し、クラウド サービスでサポートされるようにするには、強固なセキュリティ モデルが不可欠です。その結果、開発のライフサイクル全体を通して、Android には厳格なセキュリティ プログラムが適用されています。
Android はオープンに設計されています。Android アプリは、Android プラットフォームを通じて高度なハードウェアやソフトウェア、およびローカルデータやサーバーデータを利用し、ユーザーにイノベーションと価値をもたらします。この価値を実現するために、プラットフォームではユーザー、データ、アプリ、デバイス、ネットワークの機密性、整合性、可用性を保護するためのアプリ環境が用意されています。
オープンなプラットフォームを保護するには、強力なセキュリティ アーキテクチャと厳格なセキュリティ プログラムが必要です。Android は多層的セキュリティにより設計されていて、オープン プラットフォームをサポートする一方で、そのプラットフォームのすべてのユーザーを保護できる柔軟な構成になっています。セキュリティ問題の報告と更新プロセスの詳細については、セキュリティ アップデートとリソースをご覧ください。
Android はデベロッパー向けに設計されています。セキュリティ コントロールは、開発者の負担を軽減するために設計されています。セキュリティ コントロールは柔軟性が高いため、セキュリティに精通したデベロッパーにとっては操作が簡単で、かつ重要なツールです。セキュリティに精通していないデベロッパーでも、安全なデフォルト設定により保護されます。
Android は、安定したプラットフォームを提供するだけでなく、さまざまな方法でデベロッパーにサポートを提供します。Android セキュリティ チームはアプリの潜在的な脆弱性を調査し、問題を解決する方法を提案します。Google Play を利用するデバイスの場合、Play 開発者サービスは OpenSSL などの重要なソフトウェア ライブラリのセキュリティ アップデートを提供し、アプリの通信を保護します。Android セキュリティは SSL をテストするためのツール(nogotofail)をリリースしました。開発者はこのツールにより、どのプラットフォームで開発を進めていても、潜在的なセキュリティ問題を検出できます。
また、Android では基盤となるハードウェアのセキュリティに関するサポートも活用します。たとえば、ARM TrustZone テクノロジーは、暗号鍵のためのセキュア ストレージとブート完全性の証明書を提供するために使用されます。DICE は、Android の起動前に読み込まれるファームウェアの測定に使用されます。これにより、ファームウェアが既知の脆弱性または重要な脆弱性による影響を受けていないことをリモート検証できるようになります。このような脆弱性が悪用されると、デベロッパーとユーザーの両方に悪影響を及ぼす可能性があります。
Android アプリ デベロッパー向けの情報については、developer.android.com をご覧ください。
Android はユーザー向けに設計されています。ユーザーは各アプリから要求された権限を確認でき、またその権限を管理できます。この設計では、攻撃者が一般的な攻撃を試行するものと想定されています。たとえば、デバイスのユーザーにマルウェアをインストールさせるソーシャル エンジニアリング攻撃や、Android 上のサードパーティ アプリへの攻撃などです。 Android はこのような攻撃の可能性を低くし、さらに攻撃が成功した場合でもその影響を大幅に抑えることができるよう設計されています。Android セキュリティは、デバイスがユーザーの手に渡った後でも引き続き改良が進められます。Android はパートナーや一般ユーザーと連携して、セキュリティ アップデートを受け取るすべての Android デバイス向けにパッチを提供しています。
詳細については、Nexus ヘルプセンター、Google Pixel ヘルプセンター、デバイス メーカーのヘルプセンターをご覧ください。
このページでは、Android セキュリティ プログラムの目標の概要と、Android セキュリティ アーキテクチャの基本について説明し、システム アーキテクトやセキュリティ アナリストにとって重要な疑問に答えます。ここでは Android のコア プラットフォームのセキュリティ機能に限って説明します。ブラウザや SMS アプリなどの特定のアプリに固有のセキュリティの問題については説明しません。
背景
Android はモバイル デバイス向けのオープンソース プラットフォームとアプリ環境を提供します。
以下のセクションとページでは、Android プラットフォームのセキュリティ機能について説明します。Android ソフトウェア スタックのさまざまなレベルのセキュリティ コンポーネントと考慮事項を図 1 に示します。各コンポーネントは、以下のコンポーネントが適切に保護されていることを前提としています。いくつかの Android OS コードが root として実行されている場合を除き、Linux カーネルより上にあるすべてのコードはアプリ サンドボックスによって制限されます。
主な Android プラットフォーム ビルディング ブロックには次のようなものがあります。
- デバイス ハードウェア: Android は幅広いハードウェア構成で動作します。たとえば、携帯電話、タブレット、時計、自動車、スマートテレビ、OTT ゲームボックス、セットトップ ボックスなどがあげられます。Android はプロセッサに依存しませんが、ARM eXecute-Never などのハードウェア固有のセキュリティ機能を利用します。
- Android オペレーティング システム: コア オペレーティングシステムは Linux カーネルの上に構築されています。カメラ機能、GPS データ、Bluetooth 機能、電話機能、ネットワーク接続など、すべてのデバイス リソースはオペレーティング システムからアクセスされます。
- Android Application Runtime: 多くの場合、Android アプリは Java プログラミング言語で記述され、Android ランタイム(ART)で実行されます。ただし、主要な Android サービスやアプリを含め、ネイティブ アプリであるかネイティブ ライブラリを含んでいるアプリも多数あります。ART アプリとネイティブ アプリは、いずれもアプリ サンドボックス内の同じセキュリティ環境で実行されます。アプリはファイル システム内の専用の領域を占有し、データベースや未加工ファイルなどの個人用データを書き込みます。
Android アプリはコア Android オペレーティング システムの機能を拡張します。アプリには主に次の 2 つのソースがあります。
- プリインストールされたアプリ: Android には、電話、メール、カレンダー、ウェブブラウザ、連絡先などのアプリがプリインストールされています。これらのアプリはユーザーアプリとして機能し、他のアプリからアクセスできる主要なデバイス機能を提供します。プリインストールされたアプリは、オープンソースの Android プラットフォームの一部であるか、特定のデバイスのメーカーによって開発されたものです。
- ユーザーがインストールしたアプリ: Android ではサードパーティ アプリをサポートするオープンな開発環境を利用できます。ユーザーは Google Play で何十万ものアプリを入手できます。
Google セキュリティ サービス
Google にはさまざまなクラウドベースのサービスがあります。これらのサービスは Google モバイル サービスに対応している Android デバイスで利用できます。これらのサービスは Android オープンソース プロジェクト(AOSP)には含まれていませんが、多くの Android デバイスに含まれています。これらのサービスの一部については、Android セキュリティの 2018 Year in Review をご覧ください。
主な Google セキュリティ サービスには次のようなものがあります。
- Google Play: Google Play はユーザーが Android 搭載デバイスやウェブからアプリを見つけてインストールし、購入できるサービスです。Google Play では、デベロッパーが Android ユーザーや見込み顧客に簡単にアプローチできます。また、コミュニティ レビュー、アプリのライセンス検証、アプリのセキュリティ スキャン、その他のセキュリティ サービスも利用できます。
- Android アップデート: Android アップデート サービスでは、ウェブや無線(OTA)での更新などにより、指定した Android デバイスに新しい機能やセキュリティ アップデートを提供します。
- アプリサービス: Android アプリがクラウド機能を使用できるようにするためのフレームワーク。アプリのデータや設定のバックアップ、プッシュ メッセージに使用するクラウドからデバイスへのメッセージ(C2DM)などが該当します。
- アプリの確認: 有害なアプリのインストールを警告または自動ブロックします。また、デバイス上のアプリを常時スキャンし、有害なアプリがあれば警告または削除します。
- SafetyNet: Google のトラッキング、既知のセキュリティ上の脅威の軽減、新しいセキュリティ上の脅威の特定に役立つ、プライバシー侵害検知システム。
- SafetyNet Attestation: デバイスが CTS に対応しているかどうかを判別するためのサードパーティ製 API。Attestation はアプリサーバーと通信している Android アプリの識別もできます。
- Android デバイス マネージャー: 紛失または盗難にあったデバイスを探すためのウェブアプリと Android アプリ。
セキュリティ プログラムの概要
Android セキュリティ プログラムの主な要素には次のようなものがあります。
- 設計の検証: Android セキュリティ プロセスは開発ライフサイクルの早い段階で始まります。まず最初に、充実した設定可能なセキュリティ モデルと設計の作成が行われます。プラットフォームの各主要機能は、エンジニアリングとセキュリティの担当者により検証され、適切なセキュリティ管理がシステムのアーキテクチャに組み込まれます。
- ペネトレーション テストとコードの審査: プラットフォームの開発中、Android で作成されたコンポーネントとオープンソースのコンポーネントは、厳重なセキュリティ審査を受けます。これらの審査は、Android セキュリティ チーム、Google の情報セキュリティ エンジニアリング チーム、独立したセキュリティ コンサルタントが行います。これらの審査の目的は、メジャー リリース前に弱点と脆弱性の可能性を特定することと、リリース時に外部のセキュリティ専門家が行う分析のタイプをシミュレーションすることです。
- オープンソースとコミュニティ審査 AOSP により、関係当事者による幅広いセキュリティ審査ができるようになります。Android は、Linux カーネルなど、厳重な外部セキュリティ審査を受けたオープンソース技術も使用しています。Google Play にはユーザーや企業向けのフォーラムがあり、特定のアプリに関する情報を直接ユーザーに提供できます。
- インシデント対応: これらの予防措置を講じても、出荷後にセキュリティ問題が発生する可能性はあります。そのため、Android プロジェクトでは総合的なセキュリティ対応プロセスを作成しました。Android セキュリティ チームのフルタイム メンバーが、Android 専用および一般のセキュリティ コミュニティで潜在的な脆弱性についてのディスカッションをモニタリングし、Android バグ データベースに記録されているセキュリティ バグを確認します。問題であると確認された場合、Android チームは対応プロセスにより脆弱性を迅速に縮小させ、すべての Android ユーザーに対する潜在的なリスクを最小限に抑えます。クラウドでサポートされる対応には、Android プラットフォームをアップデートする(AOSP アップデート)、Google Play からアプリを削除する、デバイス実機からアプリを削除するなどがあります。
- 毎月のセキュリティ アップデート: Android セキュリティ チームは Google Android デバイスとすべてのデバイス メーカー パートナーを対象に毎月のアップデートを実施しています。
プラットフォームのセキュリティ アーキテクチャ
Android は、従来のオペレーティング システムのセキュリティ管理の目的を次のように再定義することにより、最も安全で使いやすいオペレーティング システムとなることを目指しています。
- アプリとユーザーデータを保護する
- システム リソースを保護する(ネットワークを含む)
- アプリをシステム、他のアプリ、ユーザーから分離する
これらの目的を達成するため、Android には次のような重要なセキュリティ機能があります。
- OS レベルから Linux カーネルまでにわたる強固なセキュリティ
- すべてのアプリで必須のアプリ サンドボックス
- プロセス間通信の保護
- アプリの署名
- アプリで定義される権限とユーザーが付与する権限