Casos de uso

Este documento contém casos de uso comuns para o AVF.

Compilação isolada

Como um enclave seguro por software, uma VM protegida oferece um ambiente seguro para compilar códigos sensíveis à segurança. Esse ambiente permite mover a compilação de bootclasspath e JARs do servidor do sistema (acionado por uma atualização do APEX) da inicialização antecipada para antes da reinicialização, além de reduzir significativamente o tempo de inicialização após a atualização do APEX.

A implementação está no com.android.compos APEX. Esse componente é opcional e pode ser incluído usando um makefile.

Compilação isolada

Figura 1. Compilação de JARs nas atualizações do Mainline

O objetivo de segurança é compilar de verdade a entrada verificada e produzir a saída isolada. O Android, como um cliente não confiável, não pode mudar a saída de compilação de nenhuma forma que não faça com que ela falhe (quando o Android volta para a compilação no momento da inicialização).

O serviço de compilação na VM gera uma assinatura somente se não houver erro durante toda a compilação. O Android pode recuperar a chave pública da VM para verificação de assinatura.

A chave da VM é gerada a partir do perfil DICE da VM, definido pelos APEXes e APKs montados na VM, além de outros parâmetros da VM, como a capacidade de depuração.

Para determinar se a chave pública não é de uma VM inesperada, o Android inicializa a VM para determinar se a chave está correta. A VM é inicializada na inicialização inicial após cada atualização do APEX.

Com a inicialização verificada da VM protegida, o serviço de compilação executa apenas códigos verificados. Portanto, o código pode determinar a aceitação de apenas entradas que atendam a determinadas condições. Por exemplo, aceitar um arquivo de entrada apenas quando o nome dele e o resumo fs-verity forem definidos em uma lista de permissões.

Todas as APIs expostas da VM são superfícies de ataque. Todos os arquivos de entrada e parâmetros são considerados de um cliente não confiável e precisam ser verificados e analisados antes do processamento.

A integridade do arquivo de entrada/saída é verificada pela VM, com os arquivos armazenados no Android como um servidor de arquivos não confiável, da seguinte maneira:

  • O conteúdo de um arquivo de entrada precisa ser verificado antes do uso usando o algoritmo fs-verity. Para que um arquivo de entrada fique disponível na VM, o hash raiz precisa ser fornecido em um contêiner (APK) que contribua para o perfil DICE da VM. Com o hash raiz confiável, um invasor não pode adulterar a entrada sem ser detectado.
  • A integridade do arquivo de saída precisa ser mantida na VM. Mesmo que um arquivo de saída seja armazenado no Android, durante a geração, a integridade é mantida com o mesmo formato de árvore fs-verity, mas pode ser atualizada dinamicamente. O arquivo de saída final pode ser identificado com o hash raiz, que é isolado na VM. O serviço na VM protege os arquivos de saída por assinatura.