Isolamento do sistema do veículo

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

Componentes do sistema EVS

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.