Google 提供了一套 API 和服务,可帮助您检测您的应用是否在安全可靠的环境中运行。核心是 Play Integrity API,它通过检测潜在的风险和欺诈性交互来帮助检查交互是否真实。除了应用和设备完整性外,Play Integrity API 现在还提供有关访问和可访问性风险、Google Play 保护和最近的设备活动的信息。为了进一步加强您的反欺诈策略,Android 平台还为可能与您的应用相关的特定场景提供了 API。
Play Integrity 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 Protect 的判定结果。 这可能由多种原因造成,包括:
|
近期设备活动
您还可以选择加入近期设备活动,这会告诉您您的应用在过去一小时内在特定设备上请求完整性令牌的次数。您可以使用近期设备活动来保护您的应用免受意外的、过度活跃的设备的攻击,这些设备可能是主动攻击的迹象。您可以根据预期您的应用安装在典型设备上每小时请求完整性令牌的次数,来决定对每个近期设备活动级别信任多少。
如果您选择加入接收 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 Console 中启用 Play Integrity API 响应并链接到 Google Cloud 项目。
- 在您的应用中集成 Play Integrity API。
- 决定如何处理判定结果。
默认情况下,Play Integrity API 允许每个应用每天最多 10,000 个请求。要表达对增加每日最大请求数的兴趣,请按照这些说明操作。要获得每日最大请求数的增加资格,您的应用必须正确实现 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 Console 中没有此功能,并且您希望表达获得访问权限的意愿,请联系 Google Play 开发者支持。
您可以在创建版本时或在应用完整性页面(版本 > 应用完整性)上启用保护。自动完整性保护要求您的应用使用Play 应用签名。
在将版本推广到生产环境之前,请务必测试受保护的应用。.
注意事项
- 不要发布未受保护的应用版本。
- 混合使用防篡改保护解决方案时需谨慎。
- 在将受保护的应用发布到生产环境之前,请对其进行测试。
- 像往常一样监控统计数据,查看崩溃次数是否增加。
- 您可以向 Google Play 报告您的应用的破解版本。