Para garantizar la integridad del sistema del automóvil, Android Automotive protege los datos entrantes en estos niveles:
Figura 1. Arquitectura de servicios del sistema
- Aplicaciones. El sistema verifica que una aplicación tiene permiso para comunicarse con los subsistemas del automóvil.
- API bien definidas. Las API genéricas no aceptan blobs de datos arbitrarios (las API deben estar bien definidas).
- Servicio de auto. Actualizaciones permitidas solo a través de OTA (o USB), con cifrado de disco completo y arranque verificado. No se puede descargar.
- Vehículo HAL. Verifica que se permitan mensajes específicos.
Aplicaciones y API
Android Automotive se basa en Android e interactúa directamente con numerosos subsistemas críticos para la seguridad. Además, diferentes vehículos pueden tener diferentes interfaces con diferentes funcionalidades expuestas a Android. Para que estas funcionalidades sean seguras y optimizadas, están aisladas en una capa de abstracción, separada del resto de Android. Solo las API bien definidas con un formato estricto en los mensajes enviados a través de las redes del vehículo pueden comunicarse con el HAL del vehículo. Esto proporciona una interfaz predecible para los desarrolladores de Android y proporciona una interacción segura con el resto del vehículo.
Los mensajes HAL del vehículo se filtran en dos niveles:
- Nivel de aplicación. Las aplicaciones que no pertenecen al sistema pueden acceder a HAL del vehículo a través del servicio de automóvil con los permisos adecuados.
- Nivel HAL del vehículo. Permite una capa adicional de protección y garantía de que los mensajes enviados a los subsistemas del vehículo se originan en una fuente legítima. También se puede utilizar para calificar mensajes de límite, evitando que aplicaciones maliciosas inunden el bus CAN y potencialmente interfieran con los subsistemas del vehículo.
Vehículo HAL
Vehicle HAL es una capa inferior que interactúa con el vehículo, comunicándose con las redes del vehículo y otro hardware del vehículo a través de llamadas de control de entrada/salida del conductor (ioctl).
El HAL del vehículo es el único componente de Android Automotive conectado al sistema IVI, ya sea a través de una conexión directa del procesador de la aplicación/microcontrolador o mediante una VMCU. El acceso a Vehicle HAL debe restringirse a las aplicaciones del sistema que utilizan reglas SELinux y permisos adecuados en las interfaces del kernel.
Políticas SELinux
Android Automotive amplía SELinux para filtrar el acceso de los controladores, incluidas las llamadas de apertura, cierre, lectura, escritura y ioctl. El uso del filtrado ioctl (junto con otras funciones de SELinux) limita el tipo de mensajes CAN permitidos y aceptados por el vehículo HAL, lo que reduce drásticamente la superficie de ataque. Para obtener detalles sobre SELinux, consulte Linux con seguridad mejorada en Android .
Además, los casos de uso automotrices incluyen nuevos tipos de datos confidenciales que deben aislarse y controlarse. Los datos confidenciales tienen permisos separados; otras capacidades, como controles de HVAC y ajuste de ventanas, deben otorgarse únicamente a las aplicaciones del sistema. Ejemplo de una política SELinux específica para automoción:
<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” />
El grupo de permisos CAR_MONITORING
se creó para permisos relacionados con la automoción. La velocidad actual puede considerarse información confidencial. Por lo tanto, los permisos CAR_SPEED
se crearon con un nivel de protección peligroso . Este nivel significa que la información es privada y confidencial. El permiso CAR_VENDOR_EXTENSION
se creó con el permiso a nivel de sistema o de firma, que se utiliza para aplicaciones del sistema o aplicaciones firmadas a las que se les concede explícitamente este permiso.
Bloqueo de aplicaciones y actividades
Para reducir la conducción distraída, Android Automotive proporciona controles adicionales (una lista de permitidos) para garantizar que las aplicaciones descargadas no se puedan usar cuando el vehículo está en movimiento. Estas aplicaciones aún pueden ejecutarse cuando un vehículo está estacionado o detenido.
La lista permitida especifica aplicaciones que se pueden usar cuando el vehículo está en movimiento. Sólo las aplicaciones confiables del sistema pueden actualizar la lista de permitidos. Si bien las actualizaciones pueden realizarse a través de la red, no deben considerarse confiables.