自動車システムの整合性を確保するため、Android Automotive は、次のレベルで受信データを保護します。
図 1. システム サービス アーキテクチャ
- アプリ。システムは、アプリに自動車サブシステムと通信する権限があることを確認します。
- 明確に定義された API。汎用 API では、任意のデータ blob は使用できません(API を適切に定義する必要があります)。
- カーサービス。フルディスク暗号化と確認付きブートによる、OTA(または USB)を介したアップデートのみが許可されます。サイドローディングはできません。
- 車両 HAL。特定のメッセージが許可されていることを確認します。
アプリと API
Android Automotive は Android 上に構築されており、安全性が重視されている多くのサブシステムと直接やり取りします。また、車両が異なれば、Android に公開される機能も異なるさまざまなインターフェースを持つ可能性があります。こうした機能を安全で使いやすくするために、Android の他の部分とは別の抽象化レイヤで分離されています。車両 HAL と通信できるのは、車載ネットワークを介して送信されるメッセージが厳格な形式を持つ、明確に定義された API のみです。これにより、Android デベロッパー向けの予測可能なインターフェースが提供され、車両の他の部分との安全なインタラクションが可能となります。
車両 HAL メッセージは 2 つのレベルでフィルタされます。
- アプリレベル。システム以外のアプリは、適切な権限を持つ車のサービスを介して車両 HAL にアクセスできます。
- 車両 HAL レベル。追加の保護レイヤを実現し、車両サブシステムに送信されるメッセージが正当な送信元から発信されていることを保証します。また、メッセージのレート制限に使用され、悪意のあるアプリが CAN バスにフラッディングを引き起こしたり、車両サブシステムに干渉したりするのを防ぎます。
車両 HAL
車両 HAL は車両とやり取りする下位レイヤであり、ドライバ入出力制御(ioctl)呼び出しを介して、車載ネットワークやその他の車両ハードウェアと通信します。
車両 HAL は、IVI システムに接続されている Android Automotive の唯一のコンポーネントで、アプリ プロセッサ / マイクロコントローラに直接接続されるか、VMCU を介してゲート制御されます。車両 HAL へのアクセスを、SELinux ルールとカーネル インターフェースに対する適切な権限を使用して、システムアプリに制限する必要があります。
SELinux ポリシー
Android Automotive は SELinux を拡張して、ドライバへのアクセス(オープン、クローズ、読み取り、書き込み、ioctl 呼び出しを含む)をフィルタします。ioctl フィルタリング(ならびに他の SELinux 機能)を使用すると、車両 HAL で許可および受け入れられる CAN メッセージの種類が制限され、攻撃対象領域を大幅に削減できます。SELinux の詳細については、Android での Security-Enhanced Linux をご覧ください。
また、自動車のユースケースには、分離と制御が必要な新しいタイプの機密データが含まれます。機密データには個別の権限があります。暖房換気空調システムの制御やウィンドウ調整などの他の機能は、システムアプリにのみ提供する必要があります。Automotive 固有の SELinux ポリシーの例:
<permission-group android:name=”android.support.car.permission.CAR_MONITORING /> <permission android:name=”android.support.car.permission.CAR_MILEAGE” android:protectionLevel=”signature|privileged” /> <permission android:name=”android.support.car.permission.CAR_SPEED” android:permissionGroup=”android.permission-group.LOCATION” android:protectionLevel=”dangerous” /> <permission android:name=”android.support.car.permission.CAR_VENDOR_EXTENSION” android:permissionGroup=”android.support.car.permission.CAR_INFORMATION” android:protectionLevel=”signature|privileged” />
CAR_MONITORING
権限グループは、自動車関連の権限用に作成されました。現在の速度は機密情報とみなされます。そのため、CAR_SPEED
権限は保護レベルが dangerous で作成されました。このレベルは情報が非公開であり、機密性が高いことを意味します。権限 CAR_VENDOR_EXTENSION
は、システムレベルの権限または署名レベルの権限(明示的にこの権限が付与されているシステムアプリまたは署名付きアプリに使用されます)で作成されました。
アプリとアクティビティのブロック
運転に集中できるように、Android Automotive では追加のコントロール(許可リスト)が用意されており、サイドローディングされたアプリを車両が動いているときに使用できないようにします。このようなアプリは、車両が駐車または停止された場合は実行できます。
許可リストは、車両が動いているときに使用できるアプリを指定します。許可リストを更新できるのは、信頼できるシステムアプリのみです。アップデートはネットワークを介して行われる可能性がありますが、アップデートの信頼性が高いとみなすべきではありません。