Untuk memastikan integritas sistem mobil, Android Automotive melindungi data yang masuk di tingkat berikut:
Gambar 1. Arsitektur Layanan Sistem
- Aplikasi. Sistem memverifikasi bahwa aplikasi memiliki izin untuk berbicara dengan Mobil subsistem.
- API yang didefinisikan dengan baik. API generik tidak menerima blob data arbitrer (API harus terdefinisi dengan baik).
- Layanan Mobil. Update hanya diizinkan melalui OTA (atau USB), dengan disk penuh enkripsi dan booting terverifikasi. Tidak dapat di-sideload.
- HAL Kendaraan. Memverifikasi bahwa pesan tertentu diizinkan.
Aplikasi dan API
Android Automotive dibuat di Android dan berinteraksi langsung dengan berbagai fitur yang penting bagi keamanan subsistem. Selain itu, kendaraan yang berbeda mungkin memiliki antarmuka yang berbeda fungsionalitas yang diekspos ke Android. Untuk membuat fungsi ini aman dan efisien, mereka diisolasi di lapisan abstraksi, terpisah dari bagian Android lainnya. Hanya API yang didefinisikan dengan baik dengan format yang ketat pada pesan yang dikirim melalui jaringan di dalam kendaraan dapat berkomunikasi dengan Kendaraan HAL. Ini menyediakan antarmuka yang dapat diprediksi untuk developer Android dan menyediakan interaksi yang aman dengan sisa kendaraan.
Pesan HAL kendaraan difilter pada dua tingkat:
- Tingkat aplikasi. Aplikasi non-sistem dapat mengakses HAL kendaraan melalui mobil layanan penyimpanan data dengan izin yang sesuai.
- Level HAL kendaraan. Memungkinkan lapisan perlindungan dan jaminan tambahan bahwa pesan yang dikirim ke subsistem kendaraan berasal dari sumber yang sah. Juga dapat digunakan untuk membatasi pesan, mencegah aplikasi berbahaya membanjiri bus CAN dan yang berpotensi mengganggu subsistem kendaraan.
HAL Kendaraan
HAL Kendaraan adalah lapisan bawah yang berinteraksi dengan kendaraan, yang berkomunikasi dengan jaringan dan hardware kendaraan lainnya melalui panggilan kontrol input/output driver (ioctl).
HAL kendaraan adalah satu-satunya komponen di Android Automotive yang terhubung ke sistem IVI, melalui koneksi pemroses aplikasi langsung/MicroController atau dibatasi melalui VMCU. Akses ke HAL kendaraan harus dibatasi ke aplikasi sistem yang menggunakan aturan SELinux dan izin yang sesuai mengenai antarmuka {i>kernel<i}.
Kebijakan SELinux
Android Automotive memperluas SELinux untuk memfilter akses {i>driver<i} termasuk membuka, menutup, membaca, menulis, dan ioctl. Menggunakan pemfilteran ioctl (bersama dengan fungsi SELinux lainnya) membatasi jenis Pesan CAN yang diizinkan dan diterima oleh Vehicle HAL, secara drastis mengurangi permukaan serangan. Sebagai detail tentang SELinux, lihat Security-Enhanced Linux di Android.
Selain itu, kasus penggunaan otomotif mencakup jenis data sensitif baru yang harus diisolasi dan terkendali. Data sensitif memiliki izin terpisah; kemampuan lain seperti kontrol HVAC dan penyesuaian jendela sebaiknya hanya diberikan ke aplikasi sistem. Contoh khusus Automotive Kebijakan 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” />
Grup izin CAR_MONITORING
dibuat untuk izin terkait otomotif.
Kecepatan saat ini dapat dianggap sebagai informasi sensitif. Oleh karena itu, CAR_SPEED
izin dibuat dengan tingkat perlindungan berbahaya. Tingkat ini berarti
informasi bersifat pribadi
dan sensitif. Izin CAR_VENDOR_EXTENSION
dibuat
dengan izin tingkat sistem atau tanda tangan, yang
digunakan untuk aplikasi sistem atau aplikasi bertanda tangan yang
secara eksplisit diberikan izin ini.
Pemblokiran aplikasi dan aktivitas
Untuk mengurangi gangguan mengemudi, Android Automotive menyediakan kontrol tambahan (daftar yang diizinkan) untuk memastikan aplikasi yang di-sideload tidak dapat digunakan saat kendaraan sedang bergerak. Aplikasi ini masih bisa dijalankan saat kendaraan diparkir atau dihentikan.
Daftar yang diizinkan menentukan aplikasi yang dapat digunakan saat kendaraan bergerak. Hanya tepercaya aplikasi sistem dapat memperbarui daftar yang diizinkan. Meskipun pembaruan dapat terjadi melalui jaringan, pembaruan tidak boleh dapat diandalkan.