Google 提供了一套 API 和服务,可帮助您检测应用是否在安全可信的环境中运行。核心是 Play Integrity API,它通过检测潜在的风险和欺诈性交互,帮助检查交互是否真实。除了应用和设备完整性之外,Play Integrity API 现在还提供有关访问和无障碍功能风险、Google Play 保护机制以及近期设备活动的信息。为了进一步强化您的反欺诈策略,Android 平台提供了适用于可能与您的应用相关的特定场景的 API。
Play Integrity API
作为一项有助于评估应用正在运行的设备的安全状态的 API,Play Integrity API 可让您确信正确的用户正在访问敏感信息。
它可帮助您检查交互和服务器请求是否来自可信环境中您的真实应用二进制文件
- 真实应用二进制文件:确定您是否正在与 Google Play 识别的未修改二进制文件进行交互。
- 真实 Play 安装:确定当前用户帐号是否已获许可,这意味着用户已通过 Google Play 安装或购买了您的应用或游戏。
- 真实 Android 设备:确定您的应用是否在由 Google Play 服务提供支持的真实 Android 设备上运行。
- 无已知恶意软件:确定 Google Play 保护机制是否已开启,以及它是否在设备上找到了有风险或危险的应用。
- 其他应用访问风险低:确定是否有其他正在运行的应用可能会捕获屏幕或控制设备以及对您的应用的输入。
这如何帮助缓解欺诈
当用户在您的应用中执行重要操作时,您可以调用 Play Integrity API。如果未调用,则您的应用的后端服务器可以决定如何防范攻击和欺诈。例如,您可以要求进行额外的用户验证或拒绝访问敏感功能。
应用访问风险
应用访问风险信号的引入旨在帮助您评估设备上的其他应用是否可以在您的应用运行时查看和捕获屏幕,或者使用无障碍功能权限访问您的应用。经验证的无障碍应用会自动排除在这些结果之外。应用访问风险有助于开发者保护其应用,同时保护用户隐私,因为请求应用不会获取已安装应用的身份,并且结果不与用户或设备标识符相关联。
得益于这项协作努力,我们能够获得所需的信号,从而更深入地了解如何更有效地保护我们的客户。
—Nubank,抢先体验合作伙伴
应用访问风险具有不同的风险级别
- 捕获响应表示有其他应用正在运行,可以捕获屏幕。
- 控制响应表示有其他应用正在运行,可以控制设备,因此它们既可以捕获屏幕,也可以控制对您应用的输入。
应用访问风险强制执行
识别您的应用或游戏中的高价值或敏感操作,并使用 Play Integrity API 进行保护,而不是直接拒绝访问。在可能的情况下,在允许高价值操作继续进行之前,对风险流量进行挑战。例如,当应用访问风险表明有应用正在运行且可能捕获屏幕时,请用户停用或卸载可以捕获屏幕的应用,然后才允许他们继续执行您想要保护的功能。
此表包含一些示例判断
应用访问风险判断响应示例 | 解释 |
---|---|
appsDetected ["KNOWN_INSTALLED"]
|
只有由 Google Play 识别或设备制造商预装在系统分区上的应用。没有运行会导致捕获、控制或叠加层判断的应用。 |
appsDetected ["KNOWN_INSTALLED", "UNKNOWN_INSTALLED", "UNKNOWN_CAPTURING"]
|
有 Google Play 安装的应用或设备制造商预装在系统分区上的应用。有其他正在运行的应用已启用权限,可用于查看屏幕或捕获其他输入和输出。 |
appsDetected ["KNOWN_INSTALLED", "KNOWN_CAPTURING", "UNKNOWN_INSTALLED", "UNKNOWN_CONTROLLING"]
|
有 Play 或系统正在运行的应用已启用权限,可用于查看屏幕或捕获其他输入和输出。还有其他正在运行的应用已启用权限,可用于控制设备并直接控制对您应用的输入。 |
appAccessRiskVerdict: {}
|
未评估应用访问风险,因为缺少必要条件。例如,设备不够可信。 |
Play 保护机制信号
Play 保护机制信号会告知您的应用 Play 保护机制是否已开启,以及它是否在设备上找到了已知的有害应用。
environmentDetails:{
playProtectVerdict: "NO_ISSUES"
}
如果恶意软件是您的应用或用户数据特别关注的问题,您可以检查此判断并要求您的用户开启 Play 保护机制或移除有害应用,然后才能继续。
playProtectVerdict
可以具有以下值之一
判断结果 | 说明 | 建议操作 |
---|---|---|
|
Play 保护机制已开启,且未在设备上发现任何应用问题。 |
Play 保护机制已开启且未发现任何问题,因此无需用户操作。 |
|
Play 保护机制已开启,但尚未执行扫描。设备或 Play 商店应用可能最近已重置。 |
Play 保护机制已开启且未发现任何问题,因此无需用户操作。 |
|
Play 保护机制已关闭。 |
Play 保护机制已开启且未发现任何问题,因此无需用户操作。 |
|
Play 保护机制已开启,且在设备上发现了可能有害的应用。 |
根据您的风险承受能力,您可以要求用户启动 Play 保护机制并对 Play 保护机制的警告采取措施。如果用户无法满足这些要求,您可能会阻止他们执行服务器操作。 |
|
Play 保护机制已开启,且在设备上发现了危险应用。 |
根据您的风险承受能力,您可以要求用户启动 Play 保护机制并对 Play 保护机制的警告采取措施。如果用户无法满足这些要求,您可能会阻止他们执行服务器操作。 |
|
未评估 Play 保护机制的判断结果。 这可能由于以下几个原因造成
|
近期设备活动
您还可以选择启用近期设备活动,这会告诉您您的应用在过去一小时内特定设备上请求完整性令牌的次数。您可以使用近期设备活动来保护您的应用免受意外的、过度活跃的设备攻击,这可能是活跃攻击的迹象。您可以根据您预期应用在典型设备上每小时请求完整性令牌的次数,决定对每个近期设备活动级别的信任程度。
如果您选择接收 recentDeviceActivity
,则 deviceIntegrity
字段将有两个值
deviceIntegrity: {
deviceRecognitionVerdict: ["MEETS_DEVICE_INTEGRITY"]
recentDeviceActivity: {
// "LEVEL_2" is one of several possible values.
deviceActivityLevel: "LEVEL_2"
}
}
首先,您应该检查数据,了解您的应用在所有设备上的典型设备活动级别。然后,您可以决定当设备发出过多请求时您的应用应如何响应。如果活动量略高,您可能希望要求用户稍后重试。如果活动量非常高,您可能需要采取更强硬的强制措施。
标准请求与经典请求
作为 Play Integrity 实现的一部分,考虑两种请求类型非常重要。在大多数情况下,您应该使用标准请求以提供最快的响应,而经典请求应在需要根据设备证明记录生成新请求时使用。
经典请求 |
标准请求 |
---|---|
请求时间更长,应不那么频繁地发出。 例如,作为偶尔的一次性检查,以验证高价值或敏感操作是否真实。 不经常使用. |
请求延迟低,可按需使用。 标准请求包含两个部分
按需使用. |
阅读 Play Integrity 文档,了解有关标准和经典请求的更多信息。
实现
开始使用 Play Integrity API
- 在您的 Google Play 管理中心启用 Play Integrity API 响应并关联到 Google Cloud 项目。
- 在您的应用中集成 Play Integrity API。
- 决定如何处理判断结果。
默认情况下,Play Integrity API 允许每款应用每天最多发出 1 万次请求。如需表示您有兴趣增加每日最大请求数,请按照以下说明操作。要符合增加每日最大请求数的条件,您的应用必须正确实现 Play Integrity API,并且除了其他分发渠道外,还必须在 Google Play 上可用。
Play Integrity API 的注意事项
- 您必须适当地处理 Play Integrity API 响应中的错误。请遵循此处基于错误代码的重试和强制策略指南。
- Play Integrity API 提供了响应测试工具。
- 如需查看设备的完整性结果,请按照以下步骤操作。
- 阅读这些安全注意事项,了解使用 Play Integrity API 的推荐做法。
自动完整性保护(API >= 23)
自动完整性保护是一种防篡改代码保护服务,可保护您的应用免受未经授权修改和重新分发形式的完整性滥用。它无需数据连接即可工作,在测试前无需开发者进行任何工作,也无需后端服务器集成。
这如何帮助缓解欺诈
当您开启自动完整性保护时,Google Play 会在您的应用代码中添加检查,并通过高级混淆和反逆向工程技术使其难以移除。在运行时,保护机制会检查您的应用是否已被篡改或重新分发
- 如果安装程序检查失败,系统会提示用户在 Google Play 上获取您的应用
- 如果修改检查失败,应用将无法运行
这有助于保护用户免受您的应用被修改版本的侵害。
实现
目前,自动完整性保护仅适用于特定的 Play 合作伙伴。如果此功能在您的 Google Play 管理中心中不可用,并且您想表达获取访问权限的兴趣,请联系 Google Play 开发者支持。
您可以在创建版本时开启保护,也可以在应用完整性页面(发布 > 应用完整性)开启保护。自动完整性保护要求您的应用使用Play 应用签名。
务必在将发布版本推广到生产环境之前测试您受保护的应用.
注意事项
- 不要发布未受保护的应用版本
- 混合使用防篡改保护解决方案时请务必小心
- 在发布到生产环境之前测试您受保护的应用
- 照常监控统计数据,留意崩溃次数是否增加
- 您可以向 Google Play 举报您应用的破解版本