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 .
O objetivo de segurança é compilar verdadeiramente a entrada verificada e produzir a saída isoladamente; O Android, como 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 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.