如何配置 AWS WAF 来保护我的资源,阻止常见的攻击?
如何配置 AWS WAF 来保护我的资源,阻止常见的攻击?
解决方法
从 AWS WAF Classic 迁移到 AWS WAF(如果适用)
如果您使用的是 AWS WAF Classic,建议您迁移到 AWS WAF。要进行此迁移,您可以利用自动迁移工具。 有关更多信息,请参阅为什么迁移到 AWS WAF?
对应用程序运行渗透测试以识别漏洞
每个应用程序都会收到自己的请求类型。因此,必须自定义保护应用程序的防火墙规则。
对应用程序运行渗透测试以了解其具体漏洞。有关更多信息,请参阅:
- 适用于渗透测试的 AWS 客户支持策略
- AWS Marketplace 上的渗透测试提供商
审核传入请求以优化自定义规则
在创建自定义规则以保护应用程序之前,请审核环境中的传入请求。
首先,使用以下工具生成日志:
- 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 Athena 或 Amazon 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)
- 根据 CloudFront IP 地址限制访问权限。
- 在 CloudFront 中为源请求添加自定义标头。在源上,只有当自定义标头和值存在时才允许访问。如果源是 Application Load Balancer 或 API 网关,则在源上使用 AWS WAF 允许包含自定义标头和值的请求。
防范 DDoS 攻击
有关防范分布式拒绝服务 (DDoS) 攻击的更多信息,请参阅实现 DDoS 弹性的 AWS 最佳实践和 AWS Shield 功能。
相关内容
- 已提问 4 个月前lg...
- 已提问 4 个月前lg...
- 已提问 5 个月前lg...
- 已提问 1 个月前lg...
- 已提问 3 个月前lg...
- AWS 官方已更新 8 个月前
- AWS 官方已更新 1 个月前
- AWS 官方已更新 8 个月前
- AWS 官方已更新 9 个月前