Esta página contém casos de uso comuns do AVF.
Compilação isolada
Como um enclave seguro de software, uma máquina virtual (VM) protegida oferece
um ambiente seguro para compilar código sensível à segurança.
Esse ambiente permite mover a compilação
de JARs do bootclasspath
e do servidor do sistema (acionados por uma atualização do APEX) do
início da inicialização para antes da reinicialização, reduzindo significativamente o tempo de inicialização após a atualização do APEX.
A implementação está no APEX com.android.compos
. Esse
componente é opcional e pode ser incluído usando um makefile.
O objetivo de segurança é compilar de forma confiável 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 forma, a não ser causando 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 erros 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 com base no 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 no início da inicialização 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. Como resultado, o código pode determinar que só aceita entradas que
satisfazem determinadas condições. Por exemplo, aceitar um arquivo de entrada apenas quando o
nome e o resumo fs-verity
são 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 dos arquivos de entrada e 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 com o algoritmo
fs-verity
. Para que um arquivo de entrada fique disponível na VM, o hash raiz dele precisa ser fornecido em um contêiner (APK) que contribui para o perfil DICE da VM. Com o hash de 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.
Ambiente de desenvolvimento do Linux
Tradicionalmente, o Android é o único sistema operacional importante que não permite que os usuários desenvolvam apps na própria plataforma. Com a introdução do ambiente de desenvolvimento do Linux, nosso objetivo é oferecer um ambiente de desenvolvimento baseado em Linux para usuários do Android que são desenvolvedores. No futuro, planejamos expandir o esforço para permitir que nossos parceiros implementem casos de uso inovadores de VM, como executar apps de interface gráfica do usuário e até mesmo jogos.
O ambiente de desenvolvimento do Linux está disponível em dispositivos selecionados e é executado em uma máquina virtual não protegida.
Os componentes de alto nível da VM do Linux são os seguintes:
- App de terminal:um aplicativo Android que oferece uma interface de terminal. Ele usa uma WebView para se conectar a um serviço da Web em execução na VM para interação. Esse app fica desativado por padrão. Ative essa opção nas configurações de desenvolvedor.
- Framework de virtualização do Android (AVF): subsistema atual do Android para criação e gerenciamento de VMs. Ele requer modificação mínima para oferecer suporte a imagens personalizadas do SO para esse recurso.
- Máquina virtual:uma VM gerada pelo AVF. Ele hospeda o serviço de terminal, e o AVF o cria especificamente para a funcionalidade do app Terminal.
- Imagem do SO:uma imagem do SO baseada no Debian ligeiramente modificada do Debian upstream. O app Terminal baixa essa imagem de um servidor externo do Google. Ele serve como base para a operação da VM.
- Agente convidado:novo software na VM. Ele informa o estado do SO ao AVF e oferece controle da máquina virtual.
- ttyd: software de código aberto em execução na VM que implementa a emulação de terminal por HTTP. A WebView do app Terminal se conecta a ele.
- Gerenciador de tethering:um subsistema Android atual. Ele fornece acesso à rede para a máquina virtual ao fazer tethering da VM com o dispositivo Android.