Transparência de aplicativos de produtos do Google

Para aumentar a confiança nos apps e produtos do Google, nos comprometemos a listar todos os pacotes de produtos do Google no nosso registro de transparência. Publicamos o registro de transparência para verificar publicamente as declarações que fazemos em relação a esses pacotes (APKs e APEXs).

Modelo de ameaça

Os sistemas de transparência podem ser usados para detectar e, assim, impedir ataques à cadeia de suprimentos. Ilustramos com alguns exemplos.

Suponha que um invasor modifique maliciosamente um app ou produto do Google e até consiga assiná-lo com a chave de assinatura usada para distribuição pelo Google Play. Com um registro de transparência binária, qualquer pessoa que receber um pacote questionável (APK ou APEX) poderá usá-lo como uma fonte verificável adicional de verdade para verificar a autenticidade do pacote. Eles vão descobrir que o Google não adicionou os metadados do pacote correspondente ao registro e saberão que não devem confiar no pacote comprometido.

Como a publicação no registro é um processo separado do processo de lançamento com assinatura (conforme ilustrado no diagrama do ecossistema), isso aumenta a dificuldade para o invasor além de apenas comprometer a chave.

Embora planejemos integrar esse registro a uma rede pública de testemunhas usando um protocolo de testemunha, incentivamos partes externas e independentes a monitorar a integridade desse registro disponível publicamente. Essas partes podem atestar a propriedade de acréscimo do registro e informar qualquer adulteração.

A existência de um sistema de transparência e a capacidade de descoberta adicional de ataques desencorajam atividades maliciosas. Se um pacote for comprometido, mas os usuários confiarem apenas nos que estão no registro, o pacote comprometido precisará ser exposto publicamente. Isso aumenta a probabilidade de descobrir que o pacote comprometido existe, e ações podem ser tomadas para remover a distribuição dele.

Modelo de reclamante

O modelo de reclamante é um framework usado para definir papéis e artefatos em um sistema verificável. No caso da transparência de aplicativos de produtos do Google, a declaração que fazemos é que o hash de um arquivo de pacote registrado nesse registro representa uma versão específica de um produto oficial do Google destinado ao consumo público.

  • ClaimGoogleApp: (eu, Google, declaro que $hashApp é para $googleApp), em que:
    • $hashApp é um hash criptográfico (por exemplo, SHA256) do arquivo de pacote (incluindo APKs divididos e pacotes APEX) de uma versão específica de $googleApp.
    • $googleApp é um pacote Android (APK ou APEX) que compõe um app ou produto criado e distribuído pelo Google.

Qualquer pessoa que tenha uma cópia de $googleApp pode verificar essa declaração, e descrevemos esse processo em detalhes na página de verificação.

Conteúdo do registro

Quando o Google lança uma nova versão de um pacote APK ou APEX, ele adiciona uma entrada correspondente ao registro de transparência de aplicativos de produtos do Google.

Cada entrada nesse registro contém quatro metadados:

  1. O hash do arquivo APK ou APEX de um pacote assinado pelo Google. Essa é uma string hexadecimal do resumo SHA256 de todo o arquivo.
  2. A descrição do tipo de hash anterior. Essa é uma string.
  3. O nome do pacote. Essa é uma string.
  4. O número da versão (versionCode) do pacote. Esse é um número inteiro diferente de zero.

O formato de uma entrada de registro é a concatenação das quatro informações com um caractere de nova linha (\n), conforme ilustrado a seguir:

hash\nhash_description\npackage_name\npackage_version\n

Como um produto do Google pode ser distribuído como um arquivo APK ou APEX, a descrição do hash é definida como SHA256(APK) ou SHA256(APEX). Isso oferece cobertura abrangente do conteúdo de cada arquivo e facilita a obtenção dessa medição pelos usuários.

Diagrama do ecossistema

Diagrama do ecossistema de registros verificáveis