HAL をそれぞれのプロセスに移動すると、最小権限の原則の実現に近づくことになります。これには、2 つのメリットがあります。
各 HAL はそれぞれのサンドボックス内で実行され、自身が制御するハードウェア ドライバのみへのアクセスを許可されます。また、プロセスに与えるパーミッションも、ジョブの実行に必要なパーミッションに限定できます。
同じように、プロセスは HAL が必要とするハードウェア ドライバなどのパーミッションや機能にアクセスできなくなります。
図 2. 各 HAL をそれぞれのプロセス内で実行
HAL をそれぞれのプロセスに移動することには、セキュリティの面で大きなメリットがある一方、クライアント プロセスと HAL との間で IPC によるオーバーヘッドが増加するという代償もあります。HAL とクライアント間の IPC は、binder ドライバの改善によって実用レベルになりました。binder に scatter-gather が導入されたことによって、シリアライズやデシリアライズのステップが不要になり、データのコピー命令の回数が 3 回から 1 回に減るため、各トランザクションのパフォーマンスが向上します。さらに、Android O では、ベンダーのコンポーネントとプラットフォームのコンポーネントに対して別々の通信ストリームを提供するために、binder ドメインも導入されています。アプリや Android フレームワークは引き続き /dev/binder を利用しますが、ベンダーが提供するコンポーネントは、/dev/vndbinder を使うことになります。プラットフォームのコンポーネントとベンダーのコンポーネント間の通信には、/dev/hwbinder を使う必要があります。その他の手段によるプラットフォームとベンダー間の IPC は許可されません。
事例紹介: システム サーバー
コア Android OS がアプリに提供するサービスの多くは、システム サーバーが提供しています。Android が拡大するにつれて、システム サーバーの機能とパーミッションも拡大しているため、システム サーバーは攻撃者の格好のターゲットになっています。Project Treble の一環として、センサー、GPS、指紋、Wi-Fi などの HAL を含むおよそ 20 の HAL がシステム サーバーから分離されています。以前は、これらの HAL のいずれかに欠陥があると、特権のあるシステム パーミッションを得ることができました。しかし、Android O のパーミッションは、特定の HAL が必要とするパーミッションのサブセットに制限されます。
事例紹介: メディア フレームワーク
Android Nougat で行われたメディア スタックの保護強化に向けた取り組みは、Android O でも引き続き実施されています。Nougat では、mediaserver が複数のコンポーネントに分割され、最小権限の原則に近づきました。オーディオ ハードウェアへのアクセスは audioserver に限られ、カメラ ハードウェアへのアクセスは cameraserver に限られる、といった具合です。Android O では、直接ハードウェア アクセスのほとんどがメディア フレームワークから完全に削除されています。たとえば、オーディオ、カメラ、DRM 用の HAL は、それぞれ audioserver、cameraserver、drmserver の外に移されています。