WAF 规则配置与绕过防护
安全研究员 Mike 刚刚提交了他的最新发现:某知名电商网站的 WAF 可以被绕过。他使用的不是零日漏洞,而是一种巧妙构造的 HTTP 请求——服务器正常解析,WAF 却视而不见。
这个发现揭示了一个重要事实:WAF 不是绝对安全的防线,它是规则和算法的组合,必然存在盲点。了解攻击者如何绕过 WAF,才能更好地配置防护规则。
WAF 规则类型
1. 预定义规则(OWASP CRS)
OWASP Core Rule Set(CRS)是开源的 WAF 规则集,提供开箱即用的攻击防护:
规则分类:
2. 自定义规则
根据业务场景编写的特定规则:
3. 机器学习规则
基于 ML 模型的自适应规则:
规则编写语法(ModSecurity CRS)
ModSecurity 是最流行的开源 WAF 引擎,其规则语法是事实标准:
常见变量
常见操作符
常见 WAF 绕过技术
1. 编码绕过
URL 编码
WAF 如果没有正确解码,会将其视为正常请求。
双重 URL 编码
WAF 解码一次后变成 %27,后端再次解码得到 `'。
Unicode/UTF-8 编码
2. 大小写混合
SQL 关键字不区分大小写:
WAF 规则如果只检查小写版本,可能被绕过。
3. 注释注入
内联注释
注释可以打断关键字,让 WAF 无法匹配完整模式。
注释替代空格
4. 分块传输编码(Chunked Transfer)
HTTP 分块传输将请求分成多个块:
WAF 可能无法正确解析分块数据,导致检测绕过。
5. HTTP/2 协议混淆
头部注入
HTTP/2 的头部混淆可能绕过基于 HTTP/1.1 的 WAF。
HPACK 压缩混淆
HPACK 压缩的头部可能被 WAF 错误解析。
绕过防护策略
1. 多层解码
WAF 应该对输入进行多层解码后再检测:
2. 正则表达式优化
避免容易被绕过的简单正则:
3. 语法感知检测
不要只做字符串匹配,而是理解语义:
4. 异常处理机制
规则调优流程
第一步:学习期
- 以日志模式运行,记录所有告警
- 收集正常业务流量的特征
- 建立基线
第二步:验证期
- 逐步启用阻断
- 观察误报情况
- 记录误报案例
第三步:优化期
- 根据误报案例调整规则
- 添加例外白名单
- 精细化规则粒度
第四步:运营期
- 持续监控告警
- 定期回顾规则效果
- 及时响应新型攻击
真实攻击案例分析
案例:SolarWinds 攻击中的 WAF 绕过
攻击者在最初的访问阶段,利用了 F5 BIG-IP WAF 的配置不当:
- WAF 被设置为「宽松模式」
- 攻击者通过编码和分块传输绕过检测
- 攻击流量最终到达了 Orion 平台的登录接口
教训:
- WAF 规则需要定期审计
- WAF 不能替代安全编码
- 异常日志需要认真分析
WAF 规则配置是一个持续优化的过程。了解绕过技术不是为了实施攻击,而是为了更好地防护。最佳实践是:多层防御(不依赖单一 WAF)、持续监控、定期审计、快速响应。
思考题
问题 1:WAF 规则更新后出现大规模误报,导致大量合法用户无法正常使用业务。作为安全工程师,应该如何在最短时间内恢复业务,同时保证安全性?
参考答案
这是一个典型的 WAF 运营事故,需要快速响应:
立即响应(0-15 分钟)
- 快速回滚:如果可以一键回滚,先回滚到上一版规则
- 切换到检测模式:将所有新规则从「阻断」改为「仅记录」,快速恢复业务
- 紧急白名单:如果知道误报来源,立即添加白名单规则
问题分析(15-60 分钟)
- 分析误报日志,确定误报模式
- 识别受影响的 API 端点和用户群体
- 区分「完全误报」和「部分误报」
规则修复(1-4 小时)
- 针对误报模式编写精确规则
- 使用更具体的匹配条件(参数名、参数值范围)
- 添加必要的例外
验证与发布(4-8 小时)
- 在测试环境验证修复
- 使用真实流量回放测试
- 灰度发布新规则
- 监控 24 小时内告警情况
复盘与改进
- 分析为什么测试阶段没有发现误报
- 建立更完善的测试用例库
- 改进发布流程,增加灰度验证步骤
问题 2:如何设计一个 WAF 规则测试框架,在规则发布前自动检测潜在的绕过方法和误报场景?
参考答案
WAF 规则测试框架应该包括以下模块:
模块一:攻击载荷库
模块二:正常请求库
模块三:自动化测试执行
模块四:模糊测试
CI/CD 集成