我如何配置 AWS WAF 来保护我的资源免受常见的攻击?

2 分钟阅读
0

我如何配置 AWS WAF 来保护我的资源免受常见的攻击?

解决方法

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

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

对应用程序进行渗透测试以发现漏洞

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

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

查看传入请求以优化自定义规则

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

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

  • AWS WAF
  • Amazon CloudFront
  • 应用程序负载均衡器
  • Amazon API Gateway

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

  • 针对不存在的 URI 向您的环境发出的请求

  • 要识别此模式,您必须知道每个支持的 URI

  • 对 AWS WAF 日志执行来统计每个 URI 的请求的 Athena 查询示例:

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

确定模式后,您可以在“计数”模式下创建 AWS WAF 规则,来验证规则是否被配置为与这些请求匹配。然后,将规则移到“阻止”模式。

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

  • 在值为“www.example.com”的主机头上创建不匹配
  • 将操作设置为“阻止”

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

使用 AWS 托管规则抵御常见攻击

使用 AWS 托管规则阻止会对大多数应用程序执行的常见攻击,包括以下请求:

  • 不包含用户-代理
  • 代表机器人请求
  • 使用“localhost”作为 HTTP 主机头
  • 使用 PROPFIND HTTP 方法

“计数”模式下,将这些基准规则组包含在 Web 访问控制列表(Web ACL)中。务必在规则组中选择“启用计数模式”。然后,查看 AWS WAF 日志和 CloudWatch 指标,确定托管规则是否与任何合法流量匹配。如果不匹配,禁用“启用计数模式”,将规则组移到“阻止”模式。要在 AWS 托管规则组中禁用特定规则,为该规则选择“覆盖规则操作”。

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

**重要信息:**AWS 托管规则的目的是为了保护您免受常见的网络威胁。若能按照文档使用,AWS 托管规则组会为您的应用程序增加另一层安全保护。但是,AWS 托管规则组并不等同于您的安全责任,您有哪些安全责任由您选择的 AWS 资源决定。请参阅共同责任模型,确保您在 AWS 中的资源得到适当保护。

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

对您的流量进行分析,确定合法客户端 IP 地址在 AWS WAF 日志中使用 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 安全自动化模板抵御常见攻击

使用 AWS WAF 安全自动化模板提供针对常见攻击的额外防护。例如,您可以启用以下保护:

  • 扫描程序和探测器
  • 恶意机器人
  • 恶意 IP 地址

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

防范 SQL 注入和跨站点脚本编写

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

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

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

抵御 DDoS 攻击

有关抵御分布式拒绝服务(DDoS)攻击的更多信息,请参阅 AWS best practices for DDoS resiliencyAWS Shield 功能


AWS 官方
AWS 官方已更新 3 年前
没有评论