保护环境

Google 提供了一组 API 和服务,可帮助您检测应用是否在安全可信的环境中运行。其中的核心是 Play Integrity API,它可通过检测可能存在风险的欺诈性互动来帮助检查互动是否真实。除了应用和设备完整性之外,Play Integrity API 现在还提供有关访问和无障碍风险Google Play 安全防护近期设备活动的信息。为了进一步强化您的防欺诈策略,Android 平台针对可能与您的应用相关的特定场景提供了 API。

Play Integrity API

Play Integrity API 功能

借助 Play Integrity API,您可以了解应用所运行设备的安全状态。这有助于您确信是正确的用户在访问敏感信息。

它可帮助您检查互动和服务器请求是否来自可信环境中的正版应用二进制文件:

  • 正版应用二进制文件:确定您是否正在与 Google Play 可识别的未经修改的二进制文件进行互动。
  • 正规 Play 安装:确定当前用户账号是否已获得许可,获得许可意味着用户在 Google Play 上安装或购买了您的应用或游戏。
  • 正版 Android 设备:确定您的应用是否在由 Google Play 服务提供支持的正版 Android 设备上运行。
  • 不含已知恶意软件:确定 Google Play 保护机制是否已开启,以及是否在设备上发现了有风险或危险的已安装应用。
  • 其他应用访问风险较低:确定是否有其他正在运行的应用可能会截屏或控制设备以及输入到您的应用中的内容。

这有助于减少欺诈

当用户在您的应用中执行重要操作时,您可以调用 Play Integrity API。如果无法顺利判定,应用的后端服务器可决定如何防范攻击和欺诈。例如,您可以要求用户进行额外验证,或拒绝用户访问敏感功能。

Play Integrity API 决策流程

应用访问风险

应用访问风险信号旨在帮助您评估设备上的其他应用是否可能会出现下述行为:利用无障碍权限在您的应用运行时查看屏幕内容和执行截屏操作,或者访问您的应用。经过验证的无障碍应用会自动从这些判定结果中排除。应用访问风险信号有助于开发者在保护其应用的同时保护用户隐私,因为发出请求的应用不会获取已安装应用的身份信息,并且判定结果不会与用户或设备标识符关联。

要求用户关闭某些应用的手机屏幕截图。

得益于这项合作,我们能够获得所需的信号,从而获得更深入的数据洞见,更有效地保护客户。
-Nubank,抢先体验合作伙伴

应用访问风险信号有不同的风险级别:

  • 截屏响应表示有其他正在运行的应用可以截屏。
  • 控制响应表示有其他正在运行的应用可以控制设备,因此它们既可以截屏,也可以控制输入到您的应用中的内容。

应用访问风险信号强制执行

确定应用或游戏中的高价值或敏感操作,以通过 Play Integrity API 进行保护,而不是直接拒绝访问。在可能的情况下,请先对存在风险的流量进行查验,然后再允许执行高价值操作。例如,当应用访问风险信号表明一款可截屏的应用正在运行时,请要求用户停用或卸载可截屏的应用,然后才允许用户继续使用您要保护的功能。

下表包含一些判定结果示例:

应用访问风险判定结果响应示例 解读
appsDetected:
["KNOWN_INSTALLED"]
表明只有 Google Play 可识别的已安装应用或设备制造商在系统分区中预加载的应用。 表明没有运行会导致“CAPTURING”“CONTROLLING”或“OVERLAYS”判定结果的应用。
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 保护机制或移除有害应用,然后再继续使用。

“开启 Play 保护机制”对话框

playProtectVerdict 可采用以下值之一:

判定 说明 推荐操作

NO_ISSUES

Play 保护机制处于开启状态,但在设备上未发现任何应用问题。

Play 保护机制处于开启状态,但未发现任何问题,因此用户无需执行任何操作。

NO_DATA

Play 保护机制处于开启状态,但尚未执行任何扫描。设备或 Play 商店应用可能在近期被重置了。

Play 保护机制处于开启状态,但未发现任何问题,因此用户无需执行任何操作。

POSSIBLE_RISK

Play 保护机制处于关闭状态。

Play 保护机制处于开启状态,但未发现任何问题,因此用户无需执行任何操作。

MEDIUM_RISK

Play 保护机制处于开启状态,并且在设备上发现了可能有害的已安装应用。

您可根据自己的风险容忍度,要求用户启动 Play 保护机制并基于 Play 保护机制警告采取相应措施。如果用户无法满足这些要求,您可以阻止他们执行服务器操作。

HIGH_RISK

Play 保护机制处于开启状态,并在设备上发现了危险的已安装应用。

您可根据自己的风险容忍度,要求用户启动 Play 保护机制并基于 Play 保护机制警告采取相应措施。如果用户无法满足这些要求,您可以阻止他们执行服务器操作。

UNEVALUATED

未评估 Play 保护机制判定结果。

导致这种情况的原因可能有多种,其中包括以下原因:

  • 设备不够可信。
  • 仅限游戏:用户账号未处于 LICENSED 状态。

近期设备活动记录

您还可以选择启用近期设备活动记录,了解过去一小时内您的应用在特定设备上请求完整性令牌的次数。您可以利用近期设备活动记录来保护您的应用免受意外超活跃设备的影响,意外超活跃设备可能表明存在主动攻击。您可以根据预计在典型设备上安装的应用每小时请求完整性令牌的次数,确定对每个近期设备活动记录级别的信任程度。

如果您选择接收 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,请执行以下操作:

默认情况下,Play Integrity API 允许每款应用每天最多发出 1 万次请求。如需表示有意提高每日请求次数上限,请按照以下说明操作。若要符合提高每日请求次数上限的条件,您的应用必须正确实现 Play Integrity API,并且除了要能通过任何其他渠道分发外,还必须在 Google Play 上架。

使用 Play Integrity API 时需要注意的事项

自动完整性保护(API 版本高于或等于 23)

自动完整性保护是一项防篡改代码保护服务,可保护您的应用免遭未经授权的修改和再分发行为对完整性造成破坏。无需数据连接即可运行,无需开发者在测试前做任何工作,也无需进行后端服务器集成。

这有助于减少欺诈

当您开启自动完整性保护功能后,Google Play 会通过为应用代码添加检查来限制修改和再分发行为,同时利用先进的混淆技术和反逆向工程技术使这类检查不易被移除。在运行时,该保护功能会检查您的应用是否遭到篡改或重新分发:

  • 如果未能通过安装程序检查,系统会提示用户从 Google Play 获取您的应用
  • 如果未能通过修改检查,则应用不会运行

这有助于确保用户免受经过修改的应用版本的侵害。

实现

自动完整性保护功能目前仅面向部分 Play 合作伙伴提供。如果您的 Google Play 管理中心中不提供此功能,但您有意使用该功能,请与 Google Play 开发者支持团队联系。

您可以在创建版本时开启保护功能,也可以在应用完整性页面(“版本”>“应用完整性”)中开启保护功能。自动完整性保护功能要求您的应用使用 Play 应用签名

请务必先测试受保护的应用,然后再将其发布为正式版

注意事项

  • 不发布未受保护的应用版本
  • 混用防篡改解决方案时需格外谨慎
  • 在将受保护的应用发布为正式版之前,请先对其进行测试
  • 照常监控统计数据,以防崩溃次数增加
  • 您可以向 Google Play 举报遭破解的应用版本