Transparência de aplicativos de produtos do Google

Para aumentar a confiança nos apps do Google, agora temos o compromisso de listar todos os apps 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 APKs.

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 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 APK questionável poderá usá-lo como uma fonte verificável de verdade para verificar a autenticidade do APK. Eles vão descobrir que o Google não adicionou os metadados do APK correspondente ao registro e saberão que não devem confiar no APK 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 anexação do registro e informar qualquer violação.

A existência de um sistema de transparência e a capacidade de descoberta adicional de ataques desencorajam atividades maliciosas. Se um APK for comprometido, mas os usuários confiarem apenas naqueles que estão no registro, o APK comprometido precisará ser exposto publicamente. Isso aumenta a probabilidade de descobrir que o APK 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 apps próprios do Google, a declaração que fazemos é que o hash de um arquivo APK registrado nesse registro representa uma versão específica de um app 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 APK (incluindo APKs divididos) de uma versão específica de $googleApp.
    • $googleApp é um pacote Android (APK) que compõe um app 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 APK, ele adiciona uma entrada correspondente ao registro de transparência de APKs próprios do Google.

Cada entrada nesse registro contém quatro metadados:

  1. O hash do arquivo APK de um app 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 do APK. Essa é uma string.
  4. O número da versão (versionCode) do APK. 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\nSHA256(APK)\npackage_name\npackage_version\n

Como estamos medindo todo o arquivo APK, a descrição do hash é definida como SHA256(APK). 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