Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
我如何配置 AWS WAF 来保护我的资源免受常见的攻击?
我如何配置 AWS WAF 来保护我的资源免受常见的攻击?
解决方法
从 AWS WAF Classic 迁移到 AWS WAF(如果适用)
如果您使用的是 AWS WAF Classic,建议您迁移到 AWS WAF。要进行此迁移,您可以利用自动迁移工具。有关更多信息,请参阅 Why migrate to AWS WAF?
对应用程序进行渗透测试以发现漏洞
每个应用程序会收到各自类型的请求。因此,必须自定义保护应用程序的防火墙规则。
对应用程序进行渗透测试以了解具体漏洞。有关更多信息,请参阅:
- 渗透测试 AWS 客户支持策略
- AWS Marketplace 上的渗透测试提供商
查看传入请求以优化自定义规则
在创建自定义规则来保护应用程序之前,查看环境中的传入请求。
首先,使用以下工具生成日志:
- 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 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 安全自动化模板抵御常见攻击
使用 AWS WAF 安全自动化模板提供针对常见攻击的额外防护。例如,您可以启用以下保护:
- 扫描程序和探测器
- 恶意机器人
- 恶意 IP 地址
**注意:**此解决方案使用会产生费用的其他 AWS 服务。
防范 SQL 注入和跨站点脚本编写
要保护应用程序免受 SQL 注入和跨站脚本攻击(XSS),使用内置的 SQL 注入和跨站脚本编写引擎。请记住,攻击可能在 HTTP 请求的不同部分执行,如 HTTP 标头、查询字符串或 URI。因此,配置 AWS WAF 规则来根据内置缓解引擎检查 HTTP 请求的不同部分。
**注意:**向您的环境发出的合法请求可能会触发缓解引擎中的规则。有关更多信息,请参阅我如何检测 AWS 托管规则导致的误报并将其添加到安全列表中?
限制来自 CloudFront 的访问(如果您在 CloudFront 上使用 AWS WAF)
- 根据 CloudFront IP 地址限制访问。
- 在 CloudFront 中为源请求添加自定义标头。在源上,仅在存在自定义标头和值时允许访问。如果源是应用程序负载均衡器或 API 网关,在源上使用 AWS WAF 来允许包含自定义标头和值的请求。
抵御 DDoS 攻击
有关抵御分布式拒绝服务(DDoS)攻击的更多信息,请参阅 AWS best practices for DDoS resiliency 和 AWS Shield 功能。
相关内容
- AWS 官方已更新 9 个月前
- AWS 官方已更新 3 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 7 个月前