MASTG-KNOW-0035: API de Integridade do Google Play

O Google lançou a Google Play Integrity API para melhorar a segurança e a integridade de aplicativos e jogos no Android a partir do Android 4.4 (nível 19). A API oficial anterior, SafetyNet, não cobria todas as necessidades de segurança que o Google desejava para a plataforma, então a Play Integrity foi desenvolvida com as funções básicas da API anterior e integrou recursos adicionais. Essa mudança visa proteger os usuários contra interações perigosas e fraudulentas.

O Google Play Integrity oferece as seguintes proteções:

  • Verificação de dispositivo Android genuíno: Verifica se o aplicativo está sendo executado em um dispositivo Android legítimo.
  • Validação de licença do usuário: Indica se o aplicativo ou jogo foi instalado ou adquirido pela Google Play Store.
  • Verificação de binário não modificado: Determina se o aplicativo está interagindo com o binário original reconhecido pelo Google Play.

A API fornece quatro macro categorias de informações para ajudar a equipe de segurança a tomar uma decisão. Essas categorias incluem:

  1. Detalhes da solicitação: Nesta seção, são obtidos detalhes sobre o pacote do aplicativo que solicitou a verificação de integridade, incluindo seu formato (por exemplo, com.example.myapp), um ID codificado em base64 fornecido pelo desenvolvedor para vincular a solicitação ao certificado de integridade e o tempo de execução da solicitação em milissegundos.

  2. Integridade do aplicativo: Esta seção fornece informações sobre a integridade do aplicativo, incluindo o resultado da verificação (denominado veredito), que indica se a fonte de instalação do aplicativo é confiável (via Play Store) ou desconhecida/suspeita. Se a fonte de instalação for considerada segura, a versão do aplicativo também será exibida.

  3. Detalhes da conta: Esta categoria fornece informações sobre o status de licenciamento do aplicativo. O resultado pode ser LICENSED, indicando que o usuário comprou ou instalou o aplicativo na Google Play Store; UNLICENSED, significando que o usuário não possui o aplicativo ou não o adquiriu pela Google Play Store; ou UNEVALUATED, que significa que os detalhes de licenciamento não puderam ser avaliados devido à falta de um requisito necessário, ou seja, o dispositivo pode não ser confiável o suficiente ou a versão do aplicativo instalada não é reconhecida pela Google Play Store.

  4. Integridade do dispositivo: Esta seção apresenta informações que verificam a autenticidade do ambiente Android no qual o aplicativo está sendo executado.

  5. MEETS_DEVICE_INTEGRITY: O aplicativo está em um dispositivo Android com Google Play Services, passando nas verificações de integridade do sistema e nos requisitos de compatibilidade.

  6. MEETS_BASIC_INTEGRITY: O aplicativo está em um dispositivo que pode não estar aprovado para executar o Google Play Services, mas passa nas verificações básicas de integridade, possivelmente devido a uma versão do Android não reconhecida, bootloader desbloqueado ou falta de certificação do fabricante.
  7. MEETS_STRONG_INTEGRITY: O aplicativo está em um dispositivo com Google Play Services, garantindo integridade robusta do sistema com recursos como inicialização protegida por hardware.
  8. MEETS_VIRTUAL_INTEGRITY: O aplicativo é executado em um emulador com Google Play Services, passando nas verificações de integridade do sistema e atendendo aos requisitos de compatibilidade do Android.

Erros da API:

A API pode retornar erros locais, como APP_NOT_INSTALLED e APP_UID_MISMATCH, que podem indicar uma tentativa de fraude ou ataque. Além disso, Google Play Services ou Play Store desatualizados também podem causar erros, e é importante verificar essas situações para garantir a funcionalidade adequada de verificação de integridade e assegurar que o ambiente não esteja intencionalmente configurado para um ataque. Você pode encontrar mais detalhes na página oficial.

Melhores práticas:

  1. Use o Play Integrity como parte de uma estratégia de segurança mais ampla. Complemente-o com medidas adicionais de segurança, como validação de dados de entrada, autenticação do usuário e proteção contra fraudes.
  2. Minimize as consultas à API do Play Protect para reduzir o impacto nos recursos do dispositivo. Por exemplo, empregue a API apenas para verificações essenciais de integridade do dispositivo.
  3. Inclua um NONCE com as solicitações de verificação de integridade. Esse valor aleatório, gerado pelo aplicativo ou servidor, ajuda o servidor de verificação a confirmar que as respostas correspondem às solicitações originais sem adulteração de terceiros.

Limitações: O limite diário padrão para solicitações da API de Verificação de Integridade do Google Play Services é de 10.000 solicitações por dia. Aplicativos que precisam de mais devem entrar em contato com o Google para solicitar um aumento de limite.

Exemplo de solicitação:

{
   "requestDetails": {
     "requestPackageName": "com.example.your.package",
     "timestampMillis": "1666025823025",
     "nonce": "kx7QEkGebwQfBalJ4...Xwjhak7o3uHDDQTTqI"
   },
   "appIntegrity": {
     "appRecognitionVerdict": "UNRECOGNIZED_VERSION",
     "packageName": "com.example.your.package",
     "certificateSha256Digest": [
       "vNsB0...ww1U"
     ],
     "versionCode": "1"
   },
   "deviceIntegrity": {
     "deviceRecognitionVerdict": [
       "MEETS_DEVICE_INTEGRITY"
     ]
   },
   "accountDetails": {
     "appLicensingVerdict": "UNEVALUATED"
   }
 }