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.
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.