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:
-
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.
-
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.
-
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; ouUNEVALUATED, 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. -
Integridade do dispositivo: Esta seção apresenta informações que verificam a autenticidade do ambiente Android no qual o aplicativo está sendo executado.
-
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. 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.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.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:
- 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.
- 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.
- Inclua um
NONCEcom 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"
}
}