為確保車輛系統完整性,Android Automotive 會在以下層級保護傳入的資料:
圖 1. 系統服務架構
- 應用程式:系統會驗證應用程式是否具備與車輛通訊的權限 子系統
- 定義簡單的 API。一般 API 不接受任意的資料 blob (API 必須 定義明確)。
- 租車服務。只能透過 OTA (或 USB) 執行更新,並使用全磁碟 以及驗證開機程序無法側載。
- 汽車 HAL。驗證特定訊息。
應用程式和 API
Android Automotive 是以 Android 打造而成,且直接與多種攸關安全的互動 子系統此外,各種車輛的介面可能各不相同 提供的所有功能為了安全簡化這些功能 獨立於抽象層,與 Android 的其他部分區隔僅限明確定義的 API 採用嚴格格式,透過車內網路傳送的訊息與車輛通訊 HAL。這個做法為 Android 開發人員提供可預測的介面,並提供安全的互動機制 便會受到其他輪廓的影響
車輛 HAL 訊息按兩個層級進行篩選:
- 應用程式層級:非系統應用程式可透過車輛存取車輛 HAL 並授予適當的權限
- 車輛 HAL 等級。為裝置多添一層保護和保障 傳送至車輛子系統的訊息來自合法來源。也可使用 限制訊息傳送頻率,防止惡意應用程式淹沒在 CAN 匯流排以及 可能會幹擾車輛子系統。
汽車 HAL
車輛 HAL 是與車輛互動的較低層,用於與車內通訊 透過驅動程式輸入/輸出控制 (ioctl) 呼叫來測量網路及其他車輛硬體。
在 Android Automotive 中,車輛 HAL 是唯一連結至 IVI 系統的元件。 經由應用程式處理器/MicroController 直接連線,或透過 VMCU 驗證。可以使用 車輛 HAL 應僅限使用 SELinux 規則和適當權限的系統應用程式 核心介面上的各項功能
SELinux 政策
Android Automotive 擴充了 SELinux 以篩選驅動程式存取權,包括開啟、關閉、讀取、寫入 以及 ioctl 呼叫使用 ioctl 篩選 (和其他 SELinux 功能) 會限制 CAN 是允許及被車輛 HAL 接受的訊息,大幅減少攻擊面。適用對象 如要進一步瞭解 SELinux,請參閱 Android 中的 Linux 安全防護機制。
此外,汽車用途包括應隔離的新類型機密資料 並有利於控管機密資料具有獨立權限;其他功能,例如空調控制 和視窗調整隻能用於系統應用程式。汽車專用範例 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 提供其他控制選項 (許可清單) 確保車輛行進時無法使用側載的應用程式。這些應用程式仍可 會在車輛停妥或停止時執行。
許可清單會指定車輛行進時可使用的應用程式。僅限信任 系統應用程式可以更新許可清單。雖然可以透過網路進行更新,但更新不應 我們會認為是可靠的