Casos de uso

Este documento contém casos de uso comuns para FAV.

Compilação isolada

Como um enclave seguro de software, uma VM protegida fornece um ambiente seguro para compilar código sensível à segurança. Este ambiente permite mover a compilação de bootclasspath e JARs do servidor do sistema (acionados por uma atualização do APEX) desde a inicialização inicial até antes da reinicialização e reduz significativamente o tempo de inicialização pós-atualização do APEX.

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

Compilação isolada

Figura 1. Compilando JARs nas atualizações do Mainline

O objetivo de segurança é compilar verdadeiramente a entrada verificada e produzir a saída isoladamente; O Android, como um cliente não confiável, não pode alterar a saída da compilação de nenhuma outra forma que não seja causar falha (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 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 antecipadamente após cada atualização do APEX.

Com a inicialização verificada da VM protegida, o serviço de compilação executa apenas código verificado. O código pode, portanto, determinar aceitar apenas entradas que satisfaçam determinadas condições, por exemplo, aceitar um arquivo de entrada apenas quando seu nome e o resumo do fs-verity estiverem definidos em uma lista de permissões.

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

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

  • O conteúdo de um arquivo de entrada deve ser verificado antes do uso usando o algoritmo fs-verity . Para que um arquivo de entrada fique disponível na VM, seu hash raiz deve 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 deve 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.