Aby zapewnić integralność systemu samochodu, Android Automotive chroni przychodzące dane na następujących poziomach:
Rysunek 1. Architektura usług systemowych
- Aplikacje. System sprawdza, czy aplikacja ma uprawnienia do komunikacji z podsystemami samochodu.
- Dobrze zdefiniowane interfejsy API. Ogólne interfejsy API nie akceptują dowolnych obiektów blob danych (interfejsy API muszą być dobrze zdefiniowane).
- Serwis samochodowy. Aktualizacje dozwolone tylko przez OTA (lub USB), z szyfrowaniem całego dysku i zweryfikowanym rozruchem. Nie można go załadować z boku.
- Pojazd HAL. Sprawdza, czy określone wiadomości są dozwolone.
Aplikacje i interfejsy API
Android Automotive jest zbudowany na systemie Android i bezpośrednio współpracuje z wieloma podsystemami o krytycznym znaczeniu dla bezpieczeństwa. Ponadto różne pojazdy mogą mieć różne interfejsy z różnymi funkcjami dostępnymi dla systemu Android. Aby te funkcjonalności były bezpieczne i usprawnione, są one izolowane w warstwie abstrakcyjnej, oddzielonej od reszty Androida. Tylko dobrze zdefiniowane interfejsy API ze ścisłym formatowaniem komunikatów wysyłanych przez sieci pokładowe mogą komunikować się z HAL pojazdu. Zapewnia to przewidywalny interfejs dla programistów Androida i zapewnia bezpieczną interakcję z resztą pojazdu.
Komunikaty HAL pojazdu są filtrowane na dwóch poziomach:
- Poziom aplikacji. Aplikacje niesystemowe mogą uzyskiwać dostęp do HAL pojazdu za pośrednictwem serwisu samochodowego z odpowiednimi uprawnieniami.
- Poziom HAL pojazdu. Zapewnia dodatkową warstwę ochrony i pewność, że komunikaty wysyłane do podsystemów pojazdu pochodzą z legalnego źródła. Można go również używać do oceniania komunikatów ograniczających, zapobiegając zalewaniu magistrali CAN przez złośliwe aplikacje i potencjalnemu zakłócaniu podsystemów pojazdu.
Pojazd HAL
HAL pojazdu to niższa warstwa, która współdziała z pojazdem, komunikując się z sieciami pokładowymi i innym sprzętem pojazdu za pośrednictwem wywołań sterujących wejściami/wyjściami kierowcy (ioctl).
HAL pojazdu to jedyny komponent systemu Android Automotive podłączony do systemu IVI albo poprzez bezpośrednie połączenie procesora aplikacji/mikrokontrolera, albo bramkę przez VMCU. Dostęp do Vehicle HAL powinien być ograniczony do aplikacji systemowych korzystających z reguł SELinux i odpowiednich uprawnień na interfejsach jądra.
Zasady SELinuksa
Android Automotive rozszerza SELinux o filtrowanie dostępu sterowników, w tym wywołań otwierania, zamykania, odczytu, zapisu i ioctl. Korzystanie z filtrowania ioctl (wraz z innymi funkcjami SELinux) ogranicza typ komunikatów CAN dozwolonych i akceptowanych przez HAL pojazdu, drastycznie zmniejszając powierzchnię ataku. Aby uzyskać szczegółowe informacje na temat SELinuksa, zobacz Linux ze zwiększonymi zabezpieczeniami w systemie Android .
Ponadto przypadki użycia w branży motoryzacyjnej obejmują nowe rodzaje wrażliwych danych, które należy izolować i kontrolować. Wrażliwe dane mają osobne uprawnienia; inne możliwości, takie jak sterowanie HVAC i regulacja okien, powinny być udostępniane wyłącznie aplikacjom systemowym. Przykład polityki SELinux specyficznej dla motoryzacji:
<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” />
Grupa uprawnień CAR_MONITORING
została utworzona dla uprawnień związanych z motoryzacją. Aktualna prędkość może być traktowana jako informacja wrażliwa. Dlatego utworzono uprawnienia CAR_SPEED
z poziomem ochrony niebezpiecznym . Ten poziom oznacza, że informacje są prywatne i wrażliwe. Uprawnienie CAR_VENDOR_EXTENSION
zostało utworzone z uprawnieniem na poziomie systemu lub podpisu, które jest używane w przypadku aplikacji systemowych lub podpisanych aplikacji, którym wyraźnie przyznano to uprawnienie.
Blokowanie aplikacji i aktywności
Aby ograniczyć rozproszenie uwagi podczas jazdy, Android Automotive zapewnia dodatkowe elementy sterujące (listę dozwolonych), które uniemożliwiają korzystanie z aplikacji pobranych z boku, gdy pojazd jest w ruchu. Te aplikacje mogą nadal działać, gdy pojazd jest zaparkowany lub zatrzymany.
Lista dozwolonych zawiera aplikacje, z których można korzystać, gdy pojazd jest w ruchu. Tylko zaufane aplikacje systemowe mogą aktualizować listę dozwolonych. Chociaż aktualizacje mogą odbywać się za pośrednictwem sieci, aktualizacji nie należy uważać za wiarygodne.