

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 用于管理机器人的客户识别控件
<a name="client-identification-controls"></a>

如果无法通过静态属性轻松识别与攻击相关的流量，则检测需要能够准确识别发出请求的客户端。例如，当受速率限制的属性是特定于应用程序的（例如 Cookie 或令牌）时，基于速率的规则通常更有效且更难规避。使用与会话关联的 Cookie 可以防止僵尸网络操作员在许多机器人之间复制类似的请求流。

代币获取通常用于客户识别。对于令牌获取， JavaScript 代码收集信息以生成在服务器端进行评估的令牌。评估范围从验证客户端上 JavaScript 正在运行到收集设备信息以进行指纹识别。获取令牌需要将 JavaScript SDK 集成到网站或应用程序中，或者需要服务提供商动态进行注入。

对于试图模拟浏览器的机器人来说，需要 JavaScript 支持会增加额外的障碍。当涉及到某个 SDK 时，例如在移动应用程序中，获取令牌会验证 SDK 的实现，并防止机器人模仿应用程序的请求。

获取令牌需要使用在连接的客户端 SDKs 实现的。以下 AWS WAF 功能为浏览器提供了 JavaScript基于应用程序的 SDK 和适用于移动设备的基于应用程序的 SDK：[机器人控制、欺诈控制](https://docs.aws.amazon.com/waf/latest/developerguide/waf-bot-control.html)[账户接管预防 (ATP)](https://docs.aws.amazon.com/waf/latest/developerguide/waf-atp.html) 和[欺诈控制账户创建防作弊 (ACF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-acfp.html) P)。

客户端识别技术包括 CAPTCHA、浏览器分析、设备指纹识别和 TLS 指纹识别。

## 验证码
<a name="captcha"></a>

用于区分计算机和人类的完全自动化的公开图灵测试（[CAPTCHA](https://docs.aws.amazon.com/waf/latest/developerguide/waf-captcha.html)）用于区分机器人和人类访问者，并防止网页抓取、证书填充和垃圾邮件。有各种各样的实现，但它们通常涉及人类可以解决的难题。 CAPTCHAs提供针对常见机器人的额外防御层，并可以减少机器人检测中的误报。

AWS WAF 允许规则对符合规则检查标准的 Web 请求执行 CAPTCHA 操作。此操作是对服务收集的客户识别信息进行评估的结果。 AWS WAF 规则可能要求解决机器人经常瞄准的特定资源（例如登录、搜索和表单提交）的 CAPTCHA 挑战。 AWS WAF 可以通过插页式广告或使用 SDK 在客户端处理验证码直接提供服务。有关更多信息，请参阅中的[验证码和挑战。 AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-captcha-and-challenge.html)

## 浏览器分析
<a name="browser-profiling"></a>

*浏览器分析*是一种收集和评估浏览器特征的方法，作为令牌获取的一部分，目的是将使用交互式浏览器的真实人类与分布式机器人活动区分开来。您可以通过请求标头、标头顺序和浏览器工作方式固有的其他特征来被动地执行浏览器分析。

您还可以使用令牌获取在代码中执行浏览器分析。通过使用 JavaScript 浏览器分析，您可以快速确定客户端是否支持 JavaScript。这可以帮助您检测不支持它的简单机器人。浏览器分析检查的不仅仅是 HTTP 标头和 JavaScript 支持；浏览器分析使机器人难以完全模拟 Web 浏览器。两个浏览器分析选项都有相同的目标：在浏览器配置文件中找到表明与真实浏览器行为不一致的模式。

AWS WAF 作为令牌评估的一部分，针对目标机器人的机器人控制可以指示浏览器是否显示自动化或信号不一致的证据。 AWS WAF 标记请求以便采取规则中指定的操作。有关更多信息，请参阅 AWS 安全博客中的[检测和屏蔽高级机器人流量](https://aws.amazon.com/blogs/security/detect-and-block-advanced-bot-traffic/)。

## 设备指纹识别
<a name="device-fingerprinting"></a>

设备指纹识别与浏览器分析类似，但它不仅限于浏览器。在设备（可以是移动设备或 Web 浏览器）上运行的代码会收集设备的详细信息并将其报告给后端服务器。详细信息可能包括系统属性，例如内存、CPU 类型、操作系统 (OS) 内核类型、操作系统版本和虚拟化。

您可以使用设备指纹识别来识别机器人是否在模拟环境，或者是否有直接迹象表明正在使用自动化。除此之外，设备指纹识别还可用于识别来自同一设备的重复请求。

识别来自同一设备的重复请求，即使该设备尝试更改请求的某些特征，也允许后端系统施加速率限制规则。基于设备指纹识别的速率限制规则通常比基于 IP 地址的速率限制规则更有效。这可以帮助您抵御在 VPNs 或代理之间轮流但来自少数设备的机器人流量。

与应用程序集成一起使用时 SDKs，针对目标机器人的 AWS WAF 机器人控制可以汇总客户端会话请求行为。这可以帮助您检测合法的客户端会话并将其与恶意客户端会话区分开来，即使两者都来自同一 IP 地址。有关针对目标机器人的 AWS WAF 机器人控制的更多信息，请参阅 AWS 安全博客中的[检测和屏蔽高级机器人流量](https://aws.amazon.com/blogs/security/detect-and-block-advanced-bot-traffic/)。

## TLS 指纹识别
<a name="tls-fingerprinting"></a>

TLS 指纹识别，也称为*基于签名的规则，*通常用于机器人来自许多 IP 地址但具有相似特征的情况。使用 HTTPS 时，客户端和服务器端交换消息以相互确认和验证。它们建立加密算法和会话密钥。这被称为 *TLS 握手*。如何实现 TLS 握手是一种签名，通常对于识别分布在许多 IP 地址上的大规模攻击很有价值。

TLS 指纹识别使 Web 服务器能够高度准确地确定 Web 客户端的身份。在进行任何应用程序数据交换之前，它只需要第一个数据包连接中的参数。在本例中，*Web 客户端*是指发起请求的应用程序，它可能是浏览器、CLI 工具、脚本（机器人）、本机应用程序或其他客户端。

一种 SSL 和 TLS 指纹识别方法是[JA3 指纹](https://github.com/salesforce/ja3)。 JA3根据来自 SSL 或 TLS 握手的 Client Hello 消息中的字段对客户端连接进行指纹识别。它可以帮助您分析跨不同源 IP 地址、端口和 X.509 证书的特定 SSL 和 TLS 客户端。

Amazon CloudFront 支持[在请求中添加 JA3 标头](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/adding-cloudfront-headers.html)。`CloudFront-Viewer-JA3-Fingerprint`标头包含传入的查看者请求的 TLS 客户端 Hello 数据包的 32 个字符的哈希指纹。指纹封装了有关客户端通信方式的信息。此信息可用于分析共享相同模式的客户端。您可以将`CloudFront-Viewer-JA3-Fingerprint`标头添加到原始请求策略中，并将该策略附加到分 CloudFront 配。然后，您可以在 Origin 应用程序或 Lambda @Edge 和 CloudFront Functions 中检查标头值。您可以将标头值与已知恶意软件指纹列表进行比较，以阻止恶意客户端。您还可以将标头值与预期指纹列表进行比较，以仅允许来自已知客户端的请求。