Web 安全

WAF (Web 应用防火墙)

约 5 分钟阅读

什么是 WAF

WAF (Web Application Firewall) 是一种安全产品,检查发往 Web 应用的 HTTP/HTTPS 流量,检测并阻止恶意请求。传统防火墙在网络层 (L3/L4) 控制 IP 地址和端口号,而 WAF 在应用层 (L7) 分析 HTTP 请求的内容。

它可以防御 XSSSQL 注入、CSRF、目录遍历等 Web 应用特有的攻击。OWASP Top 10 中列出的大多数漏洞都可以通过 WAF 缓解。但 WAF 只是「缓解措施」,不能替代修复应用本身的漏洞。

WAF 的检测方式

  • 基于签名 (黑名单方式):与已知攻击模式 (签名) 进行匹配检测。在请求中检测 SELECT * FROM<script> 等字符串模式。对已知攻击检测率高,但对未知攻击或绕过签名的混淆技术较弱。
  • 白名单方式:定义正常请求的模式,阻止其他所有请求。可以应对未知攻击,但如果正常请求的定义不完整,会产生大量误报。适用于输入格式严格定义的场景,如 API。
  • 评分方式:对多个规则的违规程度进行评分累加,阻止超过阈值的请求。可以灵活应对单一规则难以判定的灰色地带攻击。ModSecurity 的 Anomaly Scoring Mode 采用此方式。
  • 基于机器学习:学习正常流量模式,将偏离的请求检测为异常。有可能应对未知攻击,但依赖训练数据质量,误报调整困难。

WAF 的部署形态

WAF 按部署形态分为三类。

  • 云端型 WAF:通过修改 DNS 将流量路由经过云端 WAF。AWS WAF、Cloudflare WAF、Akamai 是代表性产品。部署简便,通常集成了 DDoS 攻击防护。初始成本低,按月计费。
  • 硬件型:在网络上安装专用硬件。提供高吞吐量和精细的自定义能力,但初始成本高,运维需要专业知识。适合大型企业。
  • 软件型 (主机型):作为模块安装在 Web 服务器上。ModSecurity 是代表性产品。开源免费,但规则创建和调优需要高度专业性。

小型站点适合云端型,需要精细控制的大型环境适合硬件型。在 AWS 环境中,AWS WAF 可以与 CloudFront 或 ALB 集成,无需基础设施变更即可部署。

WAF 运维实践要点

WAF 不是「部署即完成」,持续调优不可或缺。

  • 误报管理:WAF 最大的运维挑战是误报。阻止合法请求会直接损害用户体验。初始部署时以检测模式 (仅记录日志) 运行,了解误报模式后再切换到阻止模式。
  • 定期更新规则:攻击手法日新月异,即使使用托管规则集,也需要定期确认新规则的添加和现有规则的有效性。
  • 日志分析:WAF 日志对安全事件调查不可或缺。分析被阻止请求的模式,掌握攻击趋势。
  • CSP 配合:WAF 在服务器端过滤请求,CSP 在浏览器端限制脚本执行。两者结合可实现对 XSS 的纵深防御。

WAF 不能从根本上修复应用的漏洞。不要完全依赖 WAF,重要的是与安全编码、输入验证、参数化查询等应用层面的防御措施配合使用。

常见误解

部署 WAF 就完成了 Web 应用的漏洞防御
WAF 缓解已知攻击模式,但应用本身的漏洞仍然存在。绕过 WAF 规则的技术也存在,因此根本性的漏洞修复和安全编码不可或缺。
WAF 能防止所有 Web 攻击
业务逻辑滥用 (非法折扣操作、权限提升等) 和认证信息窃取 (钓鱼) 等与正常请求无法区分的攻击,WAF 无法检测。WAF 擅长检测的是 SQL 注入和 XSS 等语法异常的请求。

云端型 WAF 与硬件型 WAF 的比较

云端型 WAF

通过 DNS 变更即可部署。初始成本低,集成 DDoS 防护。托管规则降低运维负担。但自定义灵活性取决于供应商,按流量计费可能导致成本增加。

硬件型 WAF

安装在企业网络内部。提供高吞吐量和精细的规则自定义。但初始成本高,规则创建和调优需要专业知识。硬件的维护和更新也需自行处理。

分享

相关术语