检测并防范移动应用中的与账号相关的欺诈活动

本文档介绍如何使用账号防御功能检测并防止移动应用中与账号相关的欺诈活动。

Fraud Defense 可帮助您保护关键操作,例如登录和结账。不过,通过在一段时间内观察特定用户在移动应用中的行为,可以检测到许多细微的账号滥用行为。Account Defense 是 Fraud Defense 的一项功能,它通过为您的移动应用创建特定于网站的模型来检测可疑行为趋势或活动变化,从而帮助识别这些细微的滥用行为。账号保护程序会使用特定于网站的模型,从而帮助您检测以下各项:

  • 可疑活动
  • 具有类似行为的账号
  • 特定用户标记为可信的设备发出的请求

根据账号卫士的分析和特定于网站的模型,您可以采取以下措施:

  • 限制或停用欺诈性账号。
  • 防止账号盗用尝试。
  • 减少账号盗用成功的情况。
  • 仅向来自合法用户账号的请求授予访问权限。
  • 减少用户通过可信设备登录时的阻力。

准备工作

  1. 向项目添加结算账号以触发自动安全审核后,即可使用移动应用账号保护功能。 向项目添加结算账号 ,以便将您的移动应用纳入此功能的使用范围。
  2. 为 Google Cloud Fraud Defense 准备环境
  3. 创建基于得分的密钥

为移动应用配置 Account Defense

账号防御功能需要全面了解账号活动,才能有效检测威胁。如需开始向 Account Defense 提供与账号相关的活动,并创建和改进网站专属模型,请执行以下操作:

  1. 将 Fraud Defense 与您的移动应用集成。

  2. 报告关键用户操作
  3. 评估关键用户事件
  4. 为用户事件添加注释,以调整特定于您网站的模型

报告关键用户操作

为了检测可疑的活动模式,并构建更完善的网站典型活动模式模型,“账号防御”功能需要了解关键用户操作的相关信息。 对于应用中受 Fraud Defense 保护的每项操作,请使用 RecaptchaAction 调用 execute() 方法。如需详细了解 execute()RecaptchaAction,请参阅以下内容:

reCAPTCHA 库提供了一组内置操作,如有必要,您还可以创建自定义操作。

下表列出了报告关键用户操作时可以使用的操作名称。

操作名称 用户发起的事件或用户操作
LOGIN

登录移动应用。

SIGNUP

在移动应用中注册。

评估关键用户事件

当您针对用户操作调用 execute() 时,系统会生成一个令牌。对于关键用户事件(例如成功和失败的登录、注册以及已登录用户的操作),请创建评估来评估 execute() 调用的结果。评估会为您提供风险判定,您可以根据此判定来决定如何处理潜在的欺诈活动。您可以采取的一些措施包括:屏蔽可疑请求、验证有风险的登录尝试,以及调查感兴趣的账号。

账号防御功能需要您提供稳定的账号标识符,以便进行评估并将用户活动(例如登录请求、已登录请求和注册请求)归因于特定账号。这有助于账号防御流程处理用户活动模式,为每个账号构建活动模型,从而更好地检测异常流量和滥用流量。

选择一个稳定的账号标识符 accountId,该标识符不会经常被用户更改,并将其提供给 projects.assessments.create 方法中的评估。对于与同一用户相关的所有事件,此稳定账号标识符的值应相同。您可以提供以下信息作为账号标识符:

用户标识符

如果每个账号都可以与稳定的用户名、电子邮件地址或手机号码唯一关联,则可以使用它作为 accountId。当您提供此类跨网站标识符(可在多个网站上重复使用的标识符)时,欺诈防御功能会使用这些信息,通过标记滥用账号标识符并利用与这些标识符相关的跨网站滥用模式知识,基于跨网站模型来改进对您用户账号的保护。

或者,如果您有与每个账号唯一关联的内部用户 ID,则可以将其作为 accountId 提供。

经过哈希处理或加密

如果您没有与每个账号唯一关联的内部用户 ID,则可以将任何稳定的标识符转换为不透明的网站专用账号标识符。Fraud Defense 账号保护程序仍需要此标识符来了解用户活动模式并检测异常行为,但此标识符不会与其他网站共享。

选择任何稳定的账号标识符,并在使用加密或哈希处理将其发送给 Fraud Defense 之前,使其不透明:

  • 加密(推荐):使用确定性加密方法对账号标识符进行加密,以生成稳定的密文。如需查看详细说明,请参阅以确定性方式加密数据。如果您选择对称加密而非哈希处理,则无需保留用户标识符与相应不透明用户标识符之间的映射关系。 解密 Fraud Defense 返回的不透明标识符,将其转换为用户标识符。

  • 哈希处理:我们建议使用 SHA256-HMAC 方法和您选择的自定义随机数对账号标识符进行哈希处理。由于哈希是单向的,因此您需要保留生成的哈希与用户标识符之间的映射,以便将返回的哈希账号标识符映射回原始账号。

除了为所有与账号相关的请求提供稳定的账号标识符之外,您还可以为某些特定请求提供其他账号标识符(可能不稳定)。 除了 accountId 之外,我们还提供了特定于情境的账号标识符,这有助于 Account Defense 更好地分析用户活动并检测账号盗用尝试,从而确保用户账号的安全。当您提供其他标识符时,Google Cloud Fraud Defense 会使用这些信息,通过标记滥用账号标识符并利用与这些标识符相关的跨网站滥用模式知识,基于跨网站模型来改进对用户账号的保护。例如,您可以提供以下信息:

  • 用作登录句柄的用户名、电子邮件地址或手机号码,用于登录请求

  • 针对多重身份验证请求验证的电子邮件地址或手机号码

  • 用户在账号更新请求期间提供的电子邮件地址或手机号码(主手机号码或辅助手机号码)

  • 用户在注册请求期间提供的电子邮件地址和手机号码

对于所有与账号相关的请求,请将所选的稳定账号标识符附加到 projects.assessments.create 方法中的 accountId 参数。(可选)在评估中使用 userIds 字段,为相关请求提供其他账号标识符。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目 ID
  • TOKEN:从 execute() 调用返回的令牌
  • KEY_ID:与应用关联的 reCAPTCHA 密钥
  • ACCOUNT_ID:与用户账号唯一关联的标识符,用于将用户账号与您的应用相关联
  • EMAIL_ADDRESS:可选。与此请求关联的电子邮件地址(如果有)
  • PHONE_NUMBER:可选。与相应请求关联的手机号码(如果有)
  • USERNAME:可选。与此请求关联的用户名(如有)

HTTP 方法和网址:

POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments

请求 JSON 正文:

{
  "event": {
    "token": "TOKEN",
    "siteKey": "KEY_ID",
    "userInfo": {
      "accountId": "ACCOUNT_ID",
      "userIds": [
        {
          "email": "EMAIL_ADDRESS"
        },
        {
          "phoneNumber": "PHONE_NUMBER"
        },
        {
          "username": "USERNAME"
        }
      ]
    }
  }
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments" | Select-Object -Expand Content

您应该收到类似以下内容的 JSON 响应:

{
  "tokenProperties": {
    "valid": true,
    "androidPackageName": "com.example.app" or "iosBundleId": "com.example.app",
    "action": "login",
    "createTime": "2019-03-28T12:24:17.894Z"
  },
  "riskAnalysis": {
    "score": 0.6,
  },
  "event": {
    "token": "TOKEN",
    "siteKey": "KEY",
    "userInfo": {
      "accountId": "ACCOUNT_ID"
    }
  },
  "name": "projects/PROJECT_NUMBER/assessments/b6ac310000000000",
  "accountDefenderAssessment": {
    "labels": ["SUSPICIOUS_LOGIN_ACTIVITY"]
  }
}

代码示例

Java

如需向 Fraud Defense 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证


import com.google.cloud.recaptchaenterprise.v1.RecaptchaEnterpriseServiceClient;
import com.google.protobuf.ByteString;
import com.google.recaptchaenterprise.v1.