保护环境

Google 提供了一组 API 和服务,可帮助您检测应用是否在安全可信的环境中运行。核心部分是 Play Integrity API,该 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,抢先体验合作伙伴

App Access Risk 具有不同的风险级别:

  • 捕获响应表示有其他应用正在运行,可以截取屏幕。
  • 控制响应意味着其他应用正在运行,可以控制设备,因此它们既可以截取屏幕,又可以控制输入到应用中的输入。

应用访问风险信号现已发布公开 Beta 版,并将在未来几个月内正式发布。

强制执行应用访问风险

确定应用或游戏中的高价值或敏感操作,以通过 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 保护机制或移除有害应用,然后再继续操作。

“开启 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 保护机制判定。

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

  • 设备不够可信。
  • 仅限游戏:用户账号未获得许可。

近期设备活动记录

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

如果您选择接收 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 举报应用的破解版本