車輛系統隔離

為了確保汽車系統的完整性,Android Automotive 在以下層級保護傳入資料:

EVS 系統組件

圖1.系統服務架構

  • 應用。系統驗證應用程式是否有權與汽車子系統通訊。
  • 定義明確的 API。通用 API 不接受任意資料 blob(API 必須明確定義)。
  • 汽車服務。僅允許透過 OTA(或 USB)進行更新,並具有全碟加密和驗證啟動。不能側載。
  • 車輛 HAL。驗證是否允許特定訊息。

應用程式和 API

Android Automotive 基於 Android 構建,直接與眾多安全關鍵子系統互動。此外,不同的車輛可能具有不同的介面以及向Android公開的不同功能。為了使這些功能安全且簡化,它們被隔離在抽象層中,與 Android 的其餘部分分開。只有定義明確且對透過車載網路發送的訊息進行嚴格格式化的 API 才能與車輛 HAL 進行通訊。這為 Android 開發人員提供了一個可預測的介面,並提供了與車輛其他部分的安全互動。

車輛 HAL 訊息在兩個層級進行過濾:

  • 應用程式級別。非系統應用程式可以透過具有適當權限的汽車服務存取車輛 HAL。
  • 車輛 HAL 等級。提供額外的保護層並確保發送到車輛子系統的訊息來自合法來源。也可用於限制訊息速率,防止惡意應用程式淹沒 CAN 總線並可能幹擾車輛子系統。

車輛HAL

車輛 HAL 是與車輛互動的較低層,透過驅動程式輸入/輸出控制 (ioctl) 呼叫與車載網路和其他車輛硬體進行通訊。

車輛 HAL 是 Android Automotive 中唯一連接到 IVI 系統的元件,可透過直接應用處理器/微控制器連接或透過 VMCU 進行閘控。對 Vehicle HAL 的存取應僅限於使用 SELinux 規則和核心介面上適當權限的系統應用程式。

SELinux 政策

Android Automotive 擴展了 SELinux 以過濾驅動程式訪問,包括開啟、關閉、讀取、寫入和 ioctl 呼叫。使用 ioctl 過濾(以及其他 SELinux 功能)限制了 Vehicle HAL 允許和接受的 CAN 訊息類型,從而大大減少了攻擊面。有關 SELinux 的詳細信息,請參閱Android 中的安全增強型 Linux

此外,汽車用例包括應隔離和控制的新型敏感資料。敏感資料有單獨的權限;其他功能(例如 HVAC 控制和窗戶調節)應僅提供給系統應用程式。汽車特定 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權限的保護等級為危險。此級別意味著資訊是私密且敏感的。權限CAR_VENDOR_EXTENSION是使用系統級或簽名級權限建立的,該權限用於明確授予此權限的系統應用程式或簽署應用程式。

應用程式和活動阻止

為了減少分心駕駛,Android Automotive 提供了額外的控制(允許清單),以確保在車輛行駛時無法使用旁加載的應用程式。當車輛停放或停止時,這些應用程式仍然可以運作。

允許清單指定了車輛行駛時可以使用的應用程式。只有受信任的系統應用程式才能更新白名單。雖然更新可以透過網路進行,但更新不應被認為是可靠的。