

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

# 机器人控制技术
<a name="techniques"></a>

爬虫程序缓解的主要目标是限制自动爬虫程序活动对组织的网站、服务和应用程序的负面影响。所使用的技术和技术取决于您要防御的流量或活动的类型。了解应用程序及其流量是实现这一目标的关键。有关从哪里开始的更多信息，请参阅本指南中的[监控机器人控制策略的指南](monitoring.md)部分。

通常，机器人缓解解决方案提供的控制可以分为以下高级类别：静态、客户识别和高级分析。下图显示了可用的不同技术，以及如何根据机器人活动的复杂程度使用这些技术。这突显了如何通过使用静态控件（例如允许列表和内在检查）来获得基础或最广泛的缓解措施。最小的机器人总是最先进的，抵御这些机器人需要更先进的技术和控制组合。



![\[随着机器人复杂性的增加，缓解技术的复杂性和复杂性也必须增加。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/bot-control/images/bot-mitigation-techniques.png)


接下来，本指南将探讨每个类别及其技术。它还描述了中可用于[AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html)实现这些控件的选项：
+ [用于管理机器人的静态控件](static-controls.md)
+ [用于管理机器人的客户识别控件](client-identification-controls.md)
+ [用于管理机器人的高级分析控件](advanced-analysis-controls.md)

# 用于管理机器人的静态控件
<a name="static-controls"></a>

为了采取行动，*静态控件*会评估来自 HTTP (S) 请求的静态信息，例如其 IP 地址或标头。这些控件可用于低复杂度的恶意机器人活动或需要验证和管理的预期有益机器人流量。静态控制技术包括：允许上市、基于 IP 的控件和内在检查。

## 允许上市
<a name="allow-listing"></a>

允许上架是一种控件，它允许通过现有的机器人缓解控制来识别友好流量。有多种方法可以实现这一目标。最简单的方法是使用[匹配一组 IP 地址](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-forwarded-ip-address.html)或类似匹配条件的规则。当请求与设置为`Allow`操作的规则匹配时，后续规则不会对其进行评估。在某些情况下，您需要防止仅对某些规则执行操作；换句话说，您需要为一条规则而不是所有规则设置允许列表。这是处理规则误报的常见场景。“允许上市” 被视为一项范围广泛的规则。为了减少出现误报的可能性，我们建议您将其与其他更精细的选项（例如路径或标题匹配）配对。

## 基于 IP 的控件
<a name="ip-based-controls"></a>

### 单个 IP 地址块
<a name="ip-address-blocks"></a>

缓解机器人影响的一种常用工具是限制来自单个请求者的请求。最简单的例子是，如果流量的请求是恶意的或流量很大，则将其屏蔽其源 IP 地址。它使用 AWS WAF [IP 集匹配规则](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-type-ipset-match.html)来实现基于 IP 的区块。这些规则与 IP 地址相匹配，并应用的操作为`Block``Challenge`、或`CAPTCHA`。通过查看内容分发网络 (CDN)、Web 应用程序防火墙或应用程序和服务日志，您可以确定何时有太多请求来自 IP 地址。但是，在大多数情况下，如果没有自动化，这种控制是不切实际的。

自动化 IP 地址屏蔽列表 AWS WAF 通常使用基于速率的规则完成。有关更多信息，请参阅本指南中的[基于速率的规则](#rate-based-rules)。您也可以[为 AWS WAF解决方案实施安全自动化。](https://docs.aws.amazon.com/solutions/latest/security-automations-for-aws-waf/welcome.html)此解决方案会自动更新要阻止的 IP 地址列表，并且一条 AWS WAF 规则会拒绝与这些 IP 地址匹配的请求。

识别机器人攻击的一种方法是，来自同一 IP 地址的大量请求集中在少量网页上。这表明该机器人正在取消价格或反复尝试登录，但失败率很高。您可以创建可立即识别此模式的自动化。自动化会阻止 IP 地址，从而通过快速识别和缓解攻击来降低攻击的有效性。当攻击者有大量 IP 地址可供发起攻击，或者攻击行为难以识别且难以与普通流量分开时，屏蔽特定 IP 地址的效果会降低。 

### IP 地址信誉
<a name="ip-address-reputation"></a>

*IP 信誉服务*提供的情报有助于评估 IP 地址的可信度。这种情报通常是通过汇总来自该 IP 地址的过去活动的 IP 相关信息得出的。之前的活动有助于表明 IP 地址生成恶意请求的可能性。数据将添加到跟踪 IP 地址行为的托管列表中。

匿名 IP 地址是 IP 地址信誉的一种特殊情况。源 IP 地址来自已知的易于获取的 IP 地址来源，例如基于云的虚拟机，或者来自代理，例如已知的 VPN 提供商或 Tor 节点。 AWS WAF [Amazon IP 信誉列表](https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-ip-rep.html#aws-managed-rule-groups-ip-rep-amazon)和[匿名 IP 列表](https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-ip-rep.html#aws-managed-rule-groups-ip-rep-anonymous)托管规则组使用亚马逊内部威胁情报来帮助识别这些 IP 地址。

这些托管列表提供的情报可以帮助您对从这些来源识别出的活动采取行动。基于这种情报，您可以创建直接阻止流量的规则或限制请求数量的规则（例如基于速率的规则）。您还可以在`COUNT`模式下使用规则，使用此情报来评估流量来源。这将检查匹配条件并应用可用于创建自定义规则的标签。

### 基于速率的规则
<a name="rate-based-rules"></a>

在某些情况下，基于费率的规则可能是一个有价值的工具。例如，与敏感的统一资源标识符 (URIs) 中的用户相比，当机器人流量达到高流量时，或者当流量开始影响正常操作时，基于速率的规则就会生效。速率限制可以将请求保持在可管理的级别，并限制和控制访问权限。 AWS WAF 可以使用[基于速率的规则语句在 [Web 访问控制列表 (Web ACL)](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl.html) 中实现速率](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-type-rate-based.html)限制规则。使用基于费率的规则时，建议采用的方法是包括涵盖整个网站的一揽子规则、特定于 URI 的规则和基于 IP 信誉率的规则。基于 IP 信誉率的规则将 IP 地址信誉智能与速率限制功能相结合。

对于整个网站，基于IP信誉率的一揽子规则创建了一个上限，可以防止不复杂的机器人从少量站点中涌入站点。 IPs特别建议限制速率以保护 URIs 成本高或影响大的内容，例如登录或帐户创建页面。

速率限制规则可以提供具有成本效益的第一层防御。您可以使用更高级的规则来保护敏感信息 URIs。特定于 URI 的基于速率的规则可以限制对关键页面或影响后端的页面的影响 APIs ，例如数据库访问。为保护某些特定 URIs内容而采取的高级缓解措施（将在本指南的后面部分讨论）通常会产生额外的成本，而这些基于URI的特定费率规则可以帮助您控制成本。有关通常推荐的基于费率的规则的更多信息，请参阅 AWS 安全[博客中的三个最重要的 AWS WAF 基于费率的规则](https://aws.amazon.com/blogs/security/three-most-important-aws-waf-rate-based-rules/)。在某些情况下，限制基于速率的规则评估的请求类型很有用。例如，您可以使用 [scope-down 语句](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-scope-down-statements.html)按源 IP 地址的地理区域限制基于速率的规则。

AWS WAF 通过使用[聚合密钥](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-type-rate-based-aggregation-instances.html)为基于速率的规则提供了高级功能。借助此功能，您可以将基于速率的规则配置为使用除源 IP 地址之外的其他各种聚合密钥和密钥组合。例如，作为单一组合，您可以根据转发的 IP 地址、HTTP 方法和查询参数聚合请求。这可以帮助您配置更精细的规则，以实现复杂的容量流量缓解。

## 内在检查
<a name="intrinsic-checks"></a>

*内部检查是系统*或流程中各种类型的内部或固有验证或验证。对于机器人控制，通过验证请求中发送的信息是否与系统信号相匹配来 AWS WAF 执行内在检查。例如，它执行反向 DNS 查找和其他系统验证。一些自动请求是必要的，例如与 SEO 相关的请求。允许上架是允许良好、预期的机器人通过的一种方式。但是有时候，恶意机器人会模仿好机器人，将它们区分开来可能很困难。 AWS WAF 提供了通过托管[AWS WAF 机器人控制规则组](https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-bot.html)实现此目的的方法。该组中的规则可以验证自我识别的机器人是他们所说的真实身份。 AWS WAF 根据该机器人的已知模式检查请求的详细信息，它还会执行反向 DNS 查找和其他客观验证。

# 用于管理机器人的客户识别控件
<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 中检查标头值。您可以将标头值与已知恶意软件指纹列表进行比较，以阻止恶意客户端。您还可以将标头值与预期指纹列表进行比较，以仅允许来自已知客户端的请求。

# 用于管理机器人的高级分析控件
<a name="advanced-analysis-controls"></a>

一些机器人使用先进的欺骗工具来主动逃避检测。这些机器人模仿人类行为以执行特定的活动，例如剥头皮。这些机器人有目的，通常与丰厚的金钱奖励有关。

这些高级、持久的机器人使用多种技术来逃避检测或与常规流量混为一谈。反过来，这还需要混合使用不同的检测技术来准确识别和缓解恶意流量。

## 有针对性的用例
<a name="targeted-use-cases"></a>

用例数据可以提供机器人检测机会。*欺诈检测*是需要特殊缓解措施的特殊用例。例如，为了帮助防止账户被盗用，您可以将泄露的账户用户名和密码列表与登录或账户创建请求进行比较。这可以帮助网站所有者检测使用被盗凭据的登录尝试。使用被盗的凭证可能表示机器人试图接管账户，也可能是用户没有意识到自己的凭证已被泄露。在此用例中，网站所有者可以采取其他步骤来验证用户，然后帮助他们更改密码。 AWS WAF 为该用例提供了[欺诈控制账户接管预防 (ATP)](https://docs.aws.amazon.com/waf/latest/developerguide/waf-atp.html) 托管规则。

## 应用程序级或聚合机器人检测
<a name="aggregated-bot-detection"></a>

某些用例需要合并有关来自内容分发网络 (CDN) 和应用程序或服务后端的请求的数据。 AWS WAF有时，你甚至需要整合第三方情报，才能对机器人做出高度可信的决定。

[Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) 中的功能 AWS WAF 可以向后端基础设施发送信号，也可以随后通过标题和[标签](https://docs.aws.amazon.com/waf/latest/developerguide/waf-labels.html)聚合规则。 CloudFront 如前所述，会暴露 JA3指纹标头。这是通过标题 CloudFront 提供此类数据的示例。 AWS WAF 当标签符合规则时，可以发送标签。后续规则可以使用这些标签来更好地做出有关机器人的决策。将多个规则组合在一起时，您可以实施高度精细的控制。一个常见的用例是通过标签匹配托管规则的各个部分，然后将其与其他请求数据合并。有关更多信息，请参阅 AWS WAF 文档中的[标签匹配示例](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-label-match-examples.html)。

## 机器学习分析
<a name="machine-learning-analysis"></a>

机器学习 (ML) 是一种处理机器人的强大技术。机器学习可以适应不断变化的细节，与其他工具结合使用时，可以提供最强大、最完整的方法来缓解机器人，最大限度地减少误报。两种最常见的机器学习技术是*行为分析*和*异常检测*。通过行为分析，系统（在客户端、服务器或两者中）可以监控用户与应用程序或网站的交互方式。它监视鼠标的移动模式或点击和触摸交互的频率。然后使用机器学习模型分析行为以识别机器人。异常检测类似。它侧重于检测与为应用程序或网站定义的基准有很大差异的行为或模式。

AWS WAF 针对机器人的定向控制提供了预测性机器学习技术。这项技术有助于抵御由旨在逃避检测的机器人发起的基于代理的分布式攻击。托管 [AWS WAF Bot Control 规则组](https://docs.aws.amazon.com/waf/latest/developerguide/aws-managed-rule-groups-bot.html)使用对网站流量统计数据的自动机器学习分析来检测异常行为，这些行为表明存在分布式、协调的机器人活动。