Casos de uso

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.

Compilação isolada

Figura 1. Compilar JARs em atualizações principais. Compilando JARs em atualizações do Mainline

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.

Caso de uso do ambiente de desenvolvimento do Linux

Figura 2. Caso de uso do ambiente de desenvolvimento do Linux.

O fluxo geral é o seguinte:

  1. Para usar o ambiente de desenvolvimento do Linux, ative as opções do desenvolvedor.
  2. Depois de ativar as opções do desenvolvedor, o app Terminal vai aparecer no iniciador da tela inicial.
  3. Inicie o app Terminal no acesso rápido.
  4. Se necessário, o app Terminal faz o download da imagem do SO na Play Store.
  5. O app Terminal usa o Android Virtualization Framework (AVF) para criar uma máquina virtual (VM).
  6. Em seguida, o AVF executa a VM com a imagem do SO.
  7. A máquina virtual inicializa o SO da imagem.
  8. Depois que a VM for inicializada, a WebView no app Terminal se conectará a um serviço da Web na máquina virtual. Esse serviço fornece acesso ao terminal por HTTP.
  9. Você interage com o terminal inserindo comandos e visualizando a saída no app.

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.

Segurança do conteúdo no dispositivo

A Segurança de conteúdo no dispositivo é uma solução de segurança de conteúdo que preserva a privacidade e foi criada pela equipe de Segurança de conteúdo no dispositivo. Ela realiza a classificação de segurança de conteúdo para vários produtos do Google em dispositivos próprios/de terceiros e protege mais de 1 bilhão de usuários contra conteúdo abusivo, sem exigir que os dados do usuário sejam enviados de volta aos servidores do Google. Ele foi projetado para obedecer aos princípios do Private Compute Core (PCC) e garantir uma comunicação transparente e que preserva a privacidade entre o cliente, a máquina virtual (VM) e evitar a exfiltração de dados do usuário. Ele pode ser usado para ativar a detecção de abuso em dispositivos, como a detecção de ameaças em tempo real do Google Play Protect.

Nesse caso de uso, o sistema utiliza máquinas virtuais protegidas para executar a classificação de modelo na detecção de ameaças em tempo real do Play Protect, o que aumenta significativamente a segurança dos modelos e das proteções. Isso impede a engenharia reversa e a manipulação por invasores, mesmo em dispositivos com acesso root, garantindo que apenas o código aprovado seja executado e que as operações dele sejam ocultadas de processos externos.

Os fluxos de alto nível são os seguintes:

  1. A detecção de ameaças em tempo real envia pings para o Private Compute Services para iniciar a VM. Os Serviços de computação particular são um intermediário com foco na privacidade entre o PCC e o servidor de nuvem.
  2. Os Serviços de computação particulares iniciam a VM e recebem a chave pública dela.
  3. Os Serviços de computação privada transferem a propriedade da VM para a detecção de ameaças em tempo real do Play Protect.
  4. Os Serviços de computação privada enviam atestado e chave pública ao servidor
  5. O servidor verifica o atestado e criptografa as proteções com a chave pública da VM
  6. O servidor envia as proteções criptografadas de volta ao dispositivo.
  7. Em seguida, a detecção de ameaças em tempo real no dispositivo pode usar a proteção criptografada na VM. A VM é a única entidade com a chave privada que pode descriptografar as proteções.

Os componentes de alto nível são os seguintes:

  • Servidor: criptografa e entrega proteções criptografadas à VM
  • Private Compute Services: usado para iniciar a VM e intermediar a comunicação com a VM e mostrar transparência de que nenhum dado do usuário está passando pelo Astrea para o servidor.
  • Detecção de ameaças em tempo real do Play Protect:
    • Contém e usa classificadores de modelos fornecidos pela Segurança de conteúdo no dispositivo.
    • Aceita a propriedade da VM e a mantém para uso de classificação
    • Inicia e interrompe a VM conforme necessário.