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实体编码(j) |
实体解码后检测 |
# 示例: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,实现攻击事件的分布式追踪。
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模式。
- 离线测试:使用历史攻击流量回放,验证规则召回率与误报率。
- 灰度发布:将规则部署到10%的网关实例,设置为
LOG模式,持续观察15分钟。 - 指标评估:检查OTel指标
waf.rule.hits与waf.rule.false_positive,若误报率 < 0.1% 则继续推进。 - 全量切换:将规则动作切换为
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),并与网关实例标签关联,便于快速定位问题实例。