如何配置 AWS WAF 来保护我的资源,阻止常见的攻击?

上次更新日期:2020 年 11 月 27 日

如何配置 AWS WAF 来保护我的资源,阻止常见的攻击?

解决方法

从 AWS WAF Classic 迁移到 AWS WAF(如果适用)

如果您使用的是 AWS WAF Classic,建议您迁移到 AWS WAF。要进行此迁移,您可以利用自动迁移工具。 有关更多信息,请参阅为什么迁移到 AWS WAF?

对应用程序运行渗透测试以识别漏洞

每个应用程序都会收到自己的请求类型。因此,必须自定义保护应用程序的防火墙规则。

对应用程序运行渗透测试以了解其具体漏洞。有关更多信息,请参阅:

审核传入请求以优化自定义规则

在创建自定义规则以保护应用程序之前,请审核环境中的传入请求。

首先,使用以下工具生成日志:

  • AWS WAF
  • Amazon CloudFront
  • Application Load Balancer
  • Amazon API Gateway

然后,将这些日志存储在 Amazon Simple Storage Service (Amazon S3) 上。最后,使用 Amazon Athena 查询日志并识别模式。例如,你可能会看到如下模式:

  • 针对不存在的 URI 向您的环境发出的请求
    • 要识别这种模式,您必须知道每种受支持的 URI
    • 对 AWS WAF 日志执行的 Athena 查询示例,用于统计每个 URI 的请求:
SELECT count("httprequest"."uri") as URIcount, "httprequest"."uri"
FROM waf_logs
GROUP BY "httprequest"."uri"
ORDER BY URIcount DESC
  • 包含您的 Web 服务器不支持的 HTTP 主机标头的请求 -或者- 包含 IP 地址而非您的网站域名的请求
    • 对 AWS WAF 日志执行的 Athena 查询示例,用于统计具有不同主机标头值的请求:
SELECT header.value as HostHeader, count(header) as count
FROM waf_logs, UNNEST(httprequest.headers) AS x(header)
WHERE "header"."name" = 'Host'
GROUP BY  header
ORDER BY count DESC

识别模式后,您可以在 COUNT 模式下创建 AWS WAF 规则,以验证规则是否配置为匹配这些请求。然后,将规则移至 BLOCK 模式。

例如,如果您的应用程序仅支持主机标头“www.example.com”:

  • 在主机标头上创建一个值为“www.example.com”的不匹配项
  • 将操作设置为 BLOCK

现在,对您的环境发出的任何不含主机标头“www.example.com”的请求都将被阻挡。 
注意:此规则还会阻挡对 AWS 提供的完全限定域名 (FQDN) 发出的请求。

使用 AWS 托管规则防范常见攻击

使用 AWS 托管规则防止适用于大多数应用程序的常见攻击,包括以下请求:

  • 不包含用户-代理
  • 代表自动程序请求
  • 使用“localhost”作为 HTTP 主机标头
  • 使用 PROPFIND HTTP 方法

COUNT 模式下,将这些基准规则组包括在 Web 访问控制列表 (Web ACL) 中。请务必在规则组中选择 Enable Count mode(启用计数模式)。然后,查看 AWS WAF 日志和 CloudWatch 指标,以确定托管规则是否匹配任何合法流量。如果不匹配,请禁用 Enable Count mode(启用计数模式)以将规则组移动到 BLOCK。要禁用 AWS 托管规则组中的特定规则,请为该规则选择 Override rules action(覆盖规则操作)。

注意:对您的环境的合法请求可能会触发 AWS 托管规则中的规则。有关更多信息,请参阅如何检测 AWS 托管规则导致的误报并将它们添加到安全列表中?

重要提示:AWS 托管规则旨在保护您免受常见的 Web 威胁攻击。根据文档使用时,AWS 托管规则组可为您的应用程序增加另一层安全保护。但是,AWS 托管规则组不能代替您的安全责任,安全责任由您选择的 AWS 资源决定。请参阅责任共担模型,以确保 AWS 中的资源得到正确的保护。

使用合法请求的速率建立 AWS WAF 的基准

对您的流量进行分析,以在 AWS WAF 日志上确定合法客户端 IP 地址使用 Amazon AthenaAmazon Quicksight 发出的请求数量。使用从此分析中获得的信息,根据合法客户端发出的请求速率建立 AWS WAF 的基准。然后,在配置 AWS WAF 基于速率的规则时设置阈值。

对 AWS WAF 日志执行的示例 Athena 查询,用于计算给定时间范围(2020 年 11 月 16 日上午 9 点至上午 10 点)之间来自单个 IP 地址 (x.x.x.x) 的请求数量:

SELECT  "httprequest"."clientip", "count"(*) "count", "httprequest"."country"
FROM waf_logs
WHERE httprequest.clientip LIKE 'x.x.x.x' and date_format(from_unixtime("timestamp"/1000), '%Y-%m-%d %h:%i:%s') between '2020-11-16 09:00:00' and '2020-11-16 10:00:00'
GROUP BY "httprequest"."clientip", "httprequest"."country"

对 AWS WAF 日志执行的示例 Athena 查询,用于计算相同时间范围之间来自所有 IP 地址的请求数量:

SELECT "httprequest"."clientip", "count"(*) "count", "httprequest"."country"
FROM waf_logs
WHERE date_format(from_unixtime("timestamp"/1000), '%Y-%m-%d %h:%i:%s') between '2020-11-16 09:00:00' and '2020-11-16 10:00:00'
GROUP BY "httprequest"."clientip", "httprequest"."country"
ORDER BY "count" DESC

使用 AWS WAF Security Automations 模板防范常见攻击

使用 AWS WAF Security Automations 模板提供针对常见攻击的额外防护。例如,您可以启用针对以下内容的保护:

  • 扫描程序和探测器
  • 恶意自动程序
  • 恶意 IP 地址

注意:此解决方案使用产生收费的其他 AWS 服务。

防止 SQL 注入和跨站点脚本

为了保护应用程序免受 SQL 注入和跨站点脚本 (XSS) 攻击,请使用内置的 SQL 注入跨站点脚本引擎。请记住,攻击可以在 HTTP 请求的不同部分执行,例如 HTTP 标头、查询字符串或 URI。配置 AWS WAF 规则以根据内置缓解引擎检查 HTTP 请求的不同部分。

注意:对您的环境的合法请求可能会触发缓解引擎中的规则。有关更多信息,请参阅如何检测 AWS 托管规则导致的误报并将它们添加到安全列表中?

限制来自 CloudFront 的访问(如果您在 CloudFront 上使用 AWS WAF)

防范 DDoS 攻击

有关防范分布式拒绝服务 (DDoS) 攻击的更多信息,请参阅实现 DDoS 弹性的 AWS 最佳实践和 AWS Shield 功能。</p


这篇文章对您有帮助吗?


您是否需要账单或技术支持?