探索 亚马逊云科技 WAF 基于费率的高级规则的好处

2017 年,亚马逊云科技 宣布发布 A WS WAF 基于速率的规则 ,这是一种新的规则类型,有助于保护网站和 API 免受分布式拒绝服务 (DDoS) 攻击、暴力登录尝试和恶意机器人等应用程序级威胁。基于速率的规则跟踪每个源 IP 地址的请求速率,并对速率超过设定限制的 IP 调用规则操作。

尽管基于速率的规则可用于检测和缓解各种不良行为者,但威胁已演变为绕过请求速率限制规则。例如,一种绕过技术是通过将请求分散到数千个唯一的 IP 地址来发送大量请求。

2023 年 5 月,AW S 宣布对 亚马逊云科技 WAF 现有基于速率的规则功能进行增强 ,通过使用其他 HTTP 请求属性进行请求速率限制,您可以使用该功能来创建更具动态和更智能的规则。例如,您现在可以从以下预定义密钥中选择来配置规则:标签命名空间、标头、cookie、查询参数、查询字符串、HTTP 方法、URI 路径和源 IP 地址或标头中的 IP 地址。此外,您最多可以组合五个复合键作为参数,以加强规则开发。这些规则定义增强功能有助于改进边界安全措施,抵御使用 亚马逊云科技 WAF 进行复杂的应用程序层 DDoS 攻击。有关支持的请求属性的更多信息,请参阅 亚马逊云科技 WAF 开发者 指南 中的 基于速率的规则声明

在这篇博客文章中,您将详细了解这些新的 亚马逊云科技 WAF 功能增强以及如何使用替代请求属性来创建更强大、更精细的规则集。此外,你还将学习如何组合密钥来创建复合聚合密钥,以唯一地识别特定的元素组合,从而改善速率跟踪。

入门

配置基于速率的高级规则与配置简单的基于速率的规则类似。该过程首先创建基于速率的规则类型的新自定义规则,输入速率限制值,选择自定义密钥,从请求聚合键下拉菜单中选择密钥,然后通过选择添加请求聚 合密钥来 添加 其他复合密钥, 如图 1 所示。

Figure 1: Creating an advanced rate-based rule with two aggregation keys

图 1:使用两个聚合密钥创建基于速率的高级规则

对于现有规则,您可以通过编辑这些基于费率的规则来更新这些规则以使用新功能。例如,您可以添加要与源 IP 地址聚合的标头,如图 2 所示。请注意,之前创建的规则不会被修改。

Figure 2: Add a second key to an existing rate-based rule

图 2:向现有的基于速率的规则添加第二个密钥

您仍然可以设置相同的规则操作,例如屏蔽、计数、验证码或质疑。或者,您可以继续应用 scope-down 语句来限制规则操作。例如,您可以将范围限制为特定的应用程序路径或具有指定标头的请求。您可以缩小检查标准的范围,以便仅将某些请求计入速率限制,并使用某些密钥将这些请求聚合在一起。一种方法是仅对在 URI 开头带有 /ap i 的请求进行计数,然后根据其 sessionID cookie 值对它们进行汇总。

目标用例

现在您已经熟悉了基于速率的高级规则的基础知识,让我们使用以下用例来探索它们如何改善您的安全状况:

  • 增强的应用程序(第 7 层)DDoS 保护
  • 提高了 API 安全性
  • 丰富的请求限制

用例 1:增强第 7 层 DDoS 缓解能力

您可能会发现的第一个有益用例是增强第 7 层 DDoS 缓解能力。HTTP 请求泛洪是 DDoS 攻击的最常见载体。这种攻击类型旨在通过耗尽可用资源来运行应用程序来影响应用程序的可用性。

在 亚马逊云科技 WAF 规则的这些增强功能发布之前,规则受到限制,即根据请求源的 IP 地址汇总请求,或者配置为在 HTTP 标头(如 X-Forwarded-For)中使用转发的 IP 地址。 现在,您可以创建更强大的基于速率的规则,通过跟踪基于不同密钥或密钥组合的请求来帮助保护您的 Web 应用程序免受 DDoS 攻击。让我们来看一些例子。

为了帮助检测无处不在的机器人,例如爬虫、扫描器和爬虫,或者分布在许多唯一 IP 地址上的常见机器人,规则可以查找静态请求数据,例如 自定义标头 ,例如 User -Agent。

键 1:自定义标题(用户代理)

{
  "Name": "test-rbr",
  "Priority": 0,
  "Statement": {
    "RateBasedStatement": {
      "Limit": 2000,
      "AggregateKeyType": "CUSTOM_KEYS",
      "CustomKeys": [
        {
          "Header": {
            "Name": "User-Agent",
            "TextTransformations": [
              {
                "Priority": 0,
                "Type": "NONE"
              }
            ]
          }
        }
      ]
    }
  },
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "test-rbr"
  }
}

为了帮助您决定使用哪种唯一密钥,您可以分析 亚马逊云科技 WAF 日志。有关更多信息,请查看博客文章在 亚马逊 CloudWatch Logs 中 分析 亚马逊云科技 WAF 日志中的 示例 2 和示例 3。

要在 NAT 网关后面唯一标识用户,除了 IP 地址 外,您还可以使用 cookie 。在聚合密钥功能出现之前,很难识别通过单个 IP 地址进行连接的用户。现在,您可以使用 会话 cookie 按会话 标识符和 IP 地址汇总请求。

请注意,为了缓解第 7 层 DDoS,可以规避在 cookie 中按会话 ID 进行跟踪,因为机器人可能会发送随机值或根本不发送任何 cookie。最好保留基于 IP 的全面速率限制规则,以屏蔽达到一定高速率的违规 IP 地址,无论其请求属性如何。在这种情况下,密钥将如下所示:

  • 关键 1:会话 cookie
  • 密钥 2:IP 地址

在使用 亚马逊云科技 托管规则 (AMR) IP 信誉列表时,您可以根据 标签 命名空间 进行速率限制,从而减少误报。 标签功能是一项强大的功能,允许您映射匹配特定模式的请求并对它们应用自定义规则。在这种情况下,您可以匹配 AMR IP 信誉列表提供的标签命名空间,该列表包括 AwsManageDipdDosList ,该列表列出了已被确定为积极参与 DDoS 活动的 IP 地址。

在屏蔽模式下使用此群组列表时,您可能需要谨慎行事,因为有可能屏蔽合法用户。为了缓解这种情况,请在计数模式下使用该列表并创建基于速率的高级规则,以聚合所有带有标签命名空间 awswaf: managed: aws: amazon-ip-list: 的请求,将验证码作为规则操作 。 这使您可以在不影响安全性的情况下减少误报。将验证码应用为规则的操作可减少向所有用户提供验证码的次数,而是仅在请求速率超过定义的限制时才应用验证码。这条规则的关键是:

  • 标签(AMR IP 信誉列表)。

用例 2:API 安全性

在第二个用例中,您将学习如何使用基于速率的高级规则来提高 API 的安全性。使用速率限制规则保护 API 有助于确保在短时间内不会过于频繁地发送请求。降低滥用 API 的风险有助于确保仅处理合法请求,不会因为请求过载而被拒绝。

现在,您可以创建基于速率的高级规则,根据两个聚合密钥跟踪 API 请求。例如,区分 GET、 POST 和其他请求的 HTTP 方法 结合使用自定义标头(例如用于匹配 JSON Web 令牌 (JWT) 的 授权 )。JWT 不由 亚马逊云科技 WAF 解密,亚马逊云科技 WAF 仅聚合使用相同令牌的请求。这有助于确保代币不会被恶意使用或绕过速率限制规则。这种配置的另一个好处是,没有授权标头的请求会被聚合到一起以达到速率限制阈值。这个用例的关键是:

  • 关键 1:HTTP 方法
  • 密钥 2:自定义标题(授权)

此外,您可以配置规则,在达到请求限制 时阻止和添加 自定义响应 。例如,通过返回 HTTP 错误代码 429 (请求过多),其中 Retry-After 标头表示请求者应等待 900 秒(15 分钟)才能发出新请求。

{
  "Name": "test-rbr",
  "Priority": 0,
  "Statement": {
    "RateBasedStatement": {
      "Limit": 600,
      "AggregateKeyType": "CUSTOM_KEYS",
      "CustomKeys": [
        {
          "HTTPMethod": {}
        },
        {
          "Header": {
            "Name": "Authorization",
            "TextTransformations": [
              {
                "Priority": 0,
                "Type": "NONE"
              }
            ]
          }
        }
      ]
    }
  },
  "Action": {
    "Block": {
      "CustomResponse": {
        "ResponseCode": 429,
        "ResponseHeaders": [
          {
            "Name": "Retry-After",
            "Value": "900"
          }
        ]
      }
    }
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "test-rbr"
  }
}

用例 3:实现请求限制

在许多情况下都应考虑节流。例如,如果您想通过为所有用户提供公平使用来维持服务 API 的性能,则可以根据 API 的类型或用途(例如可变请求或不可变请求)设置不同的速率限制。为实现此目的,您可以使用 IP 地址等聚合密钥创建两条基于速率的高级规则,再结合用于指示请求类型的可 变 或 不可 的 HTTP 请求参数。每条规则都有自己的 HTTP 请求参数,您可以为速率限制设置不同的最大值。这个用例的关键是:

  • 密钥 1:HTTP 请求参数
  • 密钥 2:IP 地址

限制可能有用的另一个示例是多租户应用程序,在该应用程序中,您希望跟踪每个租户的用户发出的请求。假设你有一个免费套餐,但也有付费订阅模式,你希望允许更高的请求率。对于此用例,建议使用两个不同的 URI 路径来验证两个租户是否保持分离。此外,建议仍然使用自定义标头或查询字符串参数来区分两个租户,例如租户 ID 标头或包含每个租户 唯一标识符的参数。要使用基于速率的高级规则来实现这种类型的限制,您可以使用 IP 地址和作为聚合键的自定义标头来创建两条规则。每条规则可以有自己的速率限制的最大值,也可以有匹配每个 URI 路径请求的下限范围语句。此用例的密钥和范围下限语句是:

  • 键 1:自定义标题(租户 ID)
  • 密钥 2:IP 地址
  • 范围缩小语句(URI 路径)

作为第三个示例,您可以根据可以处理的请求总数对 Web 应用程序进行速率限制。对于此用例,您可以使用新的 “将 全部 计为聚合 ” 选项。该选项对与规则的范围下限语句相匹配的请求进行计数和速率限制,这是此类聚合所必需的。一种选择是缩小范围并检查 URI 路径以定位特定功能,例如 /history- search 页面。 当您需要控制发送到特定域的请求数量时,可以选择将单个标头缩小到特定主机,为.example.com 创建一条规则,为 b .example.com 创建另一条规则。

  • 请求聚合:全部计数
  • 范围缩小语句(URI 路径 | 单标题)

对于这些示例,当请求超过限制时,您可以使用自定义响应进行阻止。例如,通过返回相同的 HTTP 错误代码和标头,但添加自定义响应正文并显示 “ 您已达到允许的最大请求数” 之类的消息。

登录

亚马逊云科技 WAF 日志现在包含有关用于跟踪请求速率的请求密钥和匹配的请求密钥值的更多信息。 除了现有的 IP 值或 Forwarded_IP 值外,您还可以看到更新的 日志字段 L imitKey 和 c ust omValue ,其中 L imitKey 字段现在显示自定义聚合密钥设置的 自定义密钥 或 用于计算所有请求的常数。 custom Values 显示一个由键、名称和值组成的数组。

Figure 3: Example log output for the advanced rate-based rule showing updated limitKey and customValues fields

图 3:基于速率的高级规则的示例日志输出显示了更新的 LimitKey 和 customValues 字段

如第一个用例所述,要获得有关 Web ACL 分析的流量的更多详细信息, 可以考虑启用日志记录 。如果您选择启用 Amazon CloudWatch L o gs 作为日志目标,则可以 使用 CloudWatch Logs Insights 和高级查询以交互方式搜索和分析日志

例如,您可以使用以下查询直接从 亚马逊云科技 WAF 控制台获取与基于速率的规则相匹配的请求信息,包括更新的密钥和值。

| fields terminatingRuleId as RuleName
| filter terminatingRuleType ="RATE_BASED" 
| parse @message ',"customValues":[*],' as customKeys
| limit 100

图 4 显示了 CloudWatch Log Insights 查询和日志输出,包括自定义密钥、名称和值字段。

Figure 4: The CloudWatch Log Insights query and the logs output

图 4:CloudWatch 日志见解查询和日志输出

定价

使用高级费率基准规则不会产生额外费用;使用此功能时,将适用标准 亚马逊云科技 WAF 定价。有关 亚马逊云科技 WAF 的定价信息,请参阅 亚马逊云科技 WA F 定价。 您只需要注意,使用聚合密钥会增加规则的 亚马逊云科技 WAF Web ACL 容量单位 (WCU) 使用量。WCU 使用量是根据您要使用多少密钥进行速率限制计算得出的。包含 2 个 WCU 以及嵌套语句的任何其他 WCU 的当前模型将更新为 2 个 WCU 作为基础,对于您指定的每个自定义聚合键,30 个 WCU。例如,如果您想创建具有 IP 地址和会话 cookie 的聚合密钥,这将使用 62 个 WCU,而带有 IP 地址、会话 cookie 和客户标头的聚合密钥将使用 92 个 WCU。有关基于 WCU 的成本结构的更多详细信息,请访问 亚马逊云科技 WAF 开发者指南 中的 基于费率的规则声明

结论

在这篇博客文章中,您了解了 亚马逊云科技 WAF 对现有速率规则的改进,这些规则现在除了 IP 地址之外还支持请求参数。此外,这些增强功能允许您基于最多五个请求参数创建复合密钥。这项新功能使您可以更粗略地聚合请求(例如 所有带有 IP 信誉标签的请求 ), 也可以更精细地聚合请求(例如 对特定会话 ID 而不是其 IP 地址的 聚合请求 )。

有关包含 JSON 规则配置的更多规则示例,请访问 亚马逊云科技 WAF 开发者 指南中的 基于费率的规则示例


如果您对这篇文章有反馈,请在下面的 评论 部分提交评论。如果您对这篇文章有疑问, 请联系 亚马逊云科技 Support

想了解更多 亚马逊云科技 安全新闻?在 推特 上关注我们 。

Author

罗德里戈·费罗尼

·罗德里戈是 亚马逊云科技 企业支持部的高级安全专家。他获得了 CISSP 认证、亚马逊云科技 安全专家和 亚马逊云科技 解决方案架构师助理。他喜欢帮助客户继续采用 亚马逊云科技 安全服务来改善他们在云中的安全状况。工作之余,他喜欢尽可能多地旅行。冬天,他喜欢和朋友一起滑雪。

Maksim Akifev

Maksim Akifev

Maksim 是 亚马逊云科技 WAF 的高级产品经理,他与初创企业和企业等企业合作以增强其网络应用安全。Maksim 优先考虑质量、安全性和用户体验。他热衷于加速企业数字增长的创新技术。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。