3. WAF策略基础:Web应用防火墙策略定义、常见规则类型(SQL注入、XSS等)

在云原生网关架构中,WAF(Web应用防火墙)是抵御应用层攻击的第一道防线。本章聚焦WAF策略的核心定义与常见规则类型,为后续与OTel协同的自动化回滚护栏奠定策略基础。理解WAF规则的匹配原理与攻击载荷特征,是构建可观测、可溯源的防御体系的前提。

3.1 WAF策略定义与核心要素

WAF策略是一组按优先级排序的规则集合,用于检测并阻断针对HTTP/HTTPS流量的恶意请求。每条规则包含三个核心要素:匹配条件(检测维度)、动作(处置方式)和元数据(规则标识与日志标签)。

要素 说明 典型值示例
匹配条件 定义检测的请求字段、运算符与模式 args.id contains "SELECT"
动作 命中规则后的处置行为 BLOCK / LOG / CHALLENGE
元数据 规则ID、严重等级、标签(用于OTel关联) id:1001, severity:CRITICAL, tag:sqli
策略设计要点:在云原生环境中,建议将WAF策略与Ingress/API Gateway解耦,通过CRD(Custom Resource Definition)统一管理,便于版本化与审计。

3.2 常见规则类型详解

WAF规则按攻击类型可分为以下几类,其中SQL注入与XSS是最基础且高发的两类。以下通过对比表格与规则示例进行说明。

3.2.1 SQL注入(SQLi)规则

SQL注入攻击通过向输入字段注入恶意SQL语句,试图操纵后端数据库。WAF规则通过检测SQL关键字、特殊字符序列及编码绕过手法进行防御。

检测维度 匹配模式示例 绕过手法 WAF应对
关键字检测 UNION SELECT、OR 1=1 大小写混合(UnIoN SeLeCt) 正则忽略大小写
特殊字符 '、--、/* URL编码(%27) 解码后二次匹配
函数调用 SLEEP()、BENCHMARK() 注释插入(SLE/**/EP()) 去除注释后检测
# 示例:SQL注入检测规则(ModSecurity语法)
SecRule ARGS "@rx (?i:(union[\s\S]*select|select[\s\S]*from|or\s+1=1))" \
    "id:1001,phase:2,deny,status:403,msg:'SQL Injection Detected',tag:'attack-type:sqli'"

3.2.2 跨站脚本(XSS)规则

XSS攻击通过注入恶意脚本代码,在用户浏览器中执行,窃取Cookie或篡改页面。WAF需检测HTML标签、事件处理器及JavaScript协议。

检测维度 匹配模式示例 绕过手法 WAF应对
标签检测 <script>、<img> 属性拆分(<scr<script>ipt>) 递归归一化
事件处理器 onerror=、onload= 大小写/空格变异 正则匹配事件前缀
协议检测 javascript:、data: HTML实体编码(&#106;) 实体解码后检测
# 示例:XSS检测规则(ModSecurity语法)
SecRule ARGS "@rx (?i:(<script[^>]*>|on\w+\s*=|javascript:))" \
    "id:2001,phase:2,deny,status:403,msg:'XSS Attempt Detected',tag:'attack-type:xss'"
规则误报风险:过于宽泛的正则可能导致正常业务请求被误拦。例如,on\w+ 可能匹配到 onClick 事件,但某些前端框架(如React)会合法使用 onClick 属性。建议在 LOG 模式下观察一段时间后再切换为 BLOCK。

3.3 WAF规则处理流程与OTel协同点

WAF规则的处理流程通常分为三个阶段:请求解析 → 规则匹配 → 动作执行。每个阶段均可注入OTel Span,实现攻击事件的分布式追踪。

WAF规则处理流程与OTel埋点 请求解析 URL解码 / 参数归一化 规则匹配 SQLi / XSS / RCE 规则引擎 动作执行 BLOCK / LOG / CHALLENGE OTel 协同埋点(Span 注入点) • 请求解析阶段:创建 waf.parse Span,记录原始请求字段 • 规则匹配阶段:创建 waf.match Span,记录命中规则ID与置信度 • 动作执行阶段:创建 waf.action Span,记录动作类型与响应状态码

3.4 规则优先级与分组策略

在云原生网关中,WAF规则通常按攻击类型和严重等级分组,并设置执行优先级。优先级数值越小,执行顺序越靠前。

优先级 规则组 典型规则ID范围 动作
1 协议合规(Protocol Compliance) 9000-9099 BLOCK
2 SQL注入(SQLi) 1000-1999 BLOCK
3 XSS 2000-2999 BLOCK
4 远程命令执行(RCE) 3000-3999 BLOCK
5 信息泄露(Info Leak) 4000-4999 LOG
运维建议:在回滚护栏场景中,WAF规则应作为“熔断信号”之一。当WAF命中率(如SQLi规则命中数)在短时间内超过阈值时,可通过OTel指标触发自动回滚流程。建议将规则ID作为OTel Span的 waf.rule_id 属性传递,便于下游分析。

3.5 规则测试与灰度发布

WAF策略变更必须经过测试→灰度→全量三个阶段,避免因规则缺陷导致大面积误拦。推荐使用LOG模式进行灰度验证,观察误报率后再切换为BLOCK模式。

  1. 离线测试:使用历史攻击流量回放,验证规则召回率与误报率。
  2. 灰度发布:将规则部署到10%的网关实例,设置为LOG模式,持续观察15分钟。
  3. 指标评估:检查OTel指标 waf.rule.hits 与 waf.rule.false_positive,若误报率 < 0.1% 则继续推进。
  4. 全量切换:将规则动作切换为BLOCK,并开启OTel告警。
# 灰度发布示例:Kubernetes ConfigMap 控制规则模式
apiVersion: v1
kind: ConfigMap
metadata:
  name: waf-rules-gray
data:
  rule_1001_mode: "LOG"   # 灰度期间仅记录
  rule_2001_mode: "LOG"
与OTel协同:在灰度阶段,建议为每条规则生成独立的 waf.rule.mode 指标(LOG/BLOCK),并与网关实例标签关联,便于快速定位问题实例。