Para garantir a integridade do sistema do carro, o Android Automotive protege os dados recebidos nestes níveis:

Figura 1. Arquitetura do serviço do sistema
- Apps. O sistema verifica se um app tem permissão para se comunicar com os subsistemas do carro.
- APIs bem definidas. APIs genéricas não aceitam blobs de dados arbitrários (as APIs precisam ser bem definidas).
- Serviço de motorista. Atualizações permitidas apenas por OTA (ou USB), com criptografia de disco completo e inicialização verificada. Não é possível fazer o sideload.
- HAL do veículo. Verifica se mensagens específicas são permitidas.
Apps e APIs
O Android Automotive é baseado no Android e interage diretamente com vários subsistemas de segurança críticos. Além disso, diferentes veículos podem ter interfaces diferentes com diferentes funcionalidades expostas ao Android. Para tornar essas funcionalidades seguras e simplificadas, elas são isoladas em uma camada de abstração, separada do restante do Android. Somente APIs bem definidas com formatação rígida nas mensagens enviadas pelas redes no veículo podem se comunicar com o HAL do veículo. Isso oferece uma interface previsível para desenvolvedores Android e uma interação segura com o restante do veículo.
As mensagens HAL do veículo são filtradas em dois níveis:
- Nível do app. Os apps que não são do sistema podem acessar o HAL do veículo pelo serviço do carro com as permissões adequadas.
- Nível da HAL do veículo. Permite uma camada adicional de proteção e garantia de que as mensagens enviadas aos subsistemas do veículo são originadas de uma fonte legítima. Também pode ser usado para limitar a taxa de mensagens, impedindo que apps maliciosos inundem a CAN bus e interfiram nos subsistemas do veículo.
HAL do veículo
O HAL do veículo é uma camada inferior que interage com o veículo, se comunicando com redes no veículo e outros hardwares por meio de chamadas de controle de entrada/saída do driver (ioctl).
O HAL do veículo é o único componente no Android Automotive conectado ao sistema IVI, seja por uma conexão direta de processador de app/microcontrolador ou por uma VMCU. O acesso ao HAL do veículo precisa ser restrito a apps do sistema que usam regras do SELinux e permissões adequadas nas interfaces do kernel.
Políticas do SELinux
O Android Automotive estende o SELinux para filtrar o acesso do driver, incluindo chamadas de abertura, fechamento, leitura, gravação e ioctl. O uso da filtragem ioctl (junto com outras funcionalidades do SELinux) limita o tipo de mensagens CAN permitido e aceito pelo HAL do veículo, reduzindo drasticamente a superfície de ataque. Para mais detalhes sobre o SELinux, consulte Security-Enhanced Linux no Android.
Além disso, os casos de uso automotivo incluem novos tipos de dados sensíveis que precisam ser isolados e controlados. Os dados sensíveis têm permissões separadas. Outros recursos, como controles de AVAC e ajuste de janela, só podem ser fornecidos a apps do sistema. Exemplo de uma política SELinux específica para o setor automotivo:
<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” />
O grupo de permissões CAR_MONITORING
foi criado para permissões relacionadas a automóveis.
A velocidade atual pode ser considerada uma informação sensível. Portanto, as permissões CAR_SPEED
foram criadas com um nível de proteção de perigoso. Esse nível significa que as
informações são privadas e sensíveis. A permissão CAR_VENDOR_EXTENSION
foi criada
com a permissão no nível do sistema ou da assinatura, que é usada para apps do sistema ou assinados que
recebem essa permissão de forma explícita.
Bloqueio de apps e atividades
Para reduzir a distração ao dirigir, o Android Automotive oferece controles adicionais (uma lista de permissões) para garantir que os apps sideloaded não sejam usados quando o veículo estiver em movimento. Esses apps ainda podem ser executados quando um veículo está estacionado ou parado.
A lista de permissões especifica os apps que podem ser usados quando o veículo está em movimento. Somente apps do sistema confiáveis podem atualizar a lista de permissões. Embora as atualizações possam ocorrer pela rede, elas não devem ser consideradas confiáveis.