强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

CDN 与 WAF 精讲教程 / 第06章 WAF 基础原理

第06章 WAF 基础原理

本章介绍 WAF 的核心工作原理、常见部署模式、规则引擎设计以及对 OWASP Top 10 的防护能力。


6.1 WAF 工作原理

6.1.1 WAF 核心架构

客户端请求
    │
    ▼
┌──────────────────────────────────────────────────────────────┐
│                     WAF 处理流水线                             │
│                                                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────────┐ │
│  │ 请求解析  │→│ 规则匹配  │→│ 决策引擎  │→│  响应处理     │ │
│  │          │  │          │  │          │  │              │ │
│  │ - URL    │  │ - 正则   │  │ - 允许   │  │ - 放行       │ │
│  │ - Header │  │ - 语义   │  │ - 拦截   │  │ - 拦截       │ │
│  │ - Body   │  │ - 行为   │  │ - 限速   │  │ - 重定向     │ │
│  │ - Cookie │  │ - ML     │  │ - 日志   │  │ - 日志       │ │
│  └──────────┘  └──────────┘  └──────────┘  └──────────────┘ │
│                                                              │
│  时间预算: < 5ms (不影响正常请求延迟)                         │
└──────────────────────────────────────────────────────────────┘
    │
    ▼
源站 / 拦截响应

6.1.2 检测方法对比

方法原理优点缺点
正则匹配正则表达式匹配恶意特征精确、可控规则维护成本高
语义分析解析 SQL/HTML/JS 语义准确率高CPU 消耗大
行为分析分析请求频率、模式检测未知攻击误报率较高
机器学习训练模型识别异常自适应需要大量训练数据
签名匹配已知攻击指纹库快速匹配无法检测 0day

6.2 WAF 部署模式

6.2.1 三种部署模式

模式1: 反向代理模式 (Reverse Proxy)

  用户 ──→ [WAF] ──→ 源站
           ▲
           │ 终结 TLS,检查请求,转发到源站
           │ 可修改请求/响应

模式2: 透明桥接模式 (Transparent Bridge)

  用户 ──→ [WAF] ──→ 源站
           ▲
           │ 二层桥接,不改变网络拓扑
           │ 仅检查,不修改流量

模式3: 旁路模式 (Out-of-Band / TAP)

  用户 ──→ ──────────→ 源站
           │
           └──→ [WAF] (镜像流量,仅监控告警)
                 ▲
                 │ 通过 SPAN/TAP 镜像流量
                 │ 不影响正常流量

6.2.2 部署模式对比

特性反向代理透明桥接旁路
拦截能力✅ 完全✅ 完全❌ 仅监控
网络改动
性能影响较大(TLS 终结)较小
部署复杂度
适用场景公网 Web 服务内网防护检测/审计
高可用需要 LB需要 STP/RSTP天然不影响

6.2.3 CDN 集成 WAF 模式

现代架构: CDN 内置 WAF

  用户 ──→ [CDN 边缘节点]
               │
               ├── WAF 检查
               ├── 缓存查找
               ├── 压缩
               │
               └──→ 源站

  优势:
  - WAF 在边缘拦截,恶意流量不到达源站
  - TLS 卸载在边缘完成
  - 无需额外部署 WAF 硬件/软件
  - 自动扩缩容

6.3 规则引擎

6.3.1 规则引擎架构

┌─────────────────────────────────────────────────────────────────┐
│                      WAF 规则引擎                                │
│                                                                 │
│  ┌────────────────────────────────────────────────────────────┐ │
│  │  Phase 1: 预处理                                           │ │
│  │  ├── URL 解码 / Unicode 规范化                              │ │
│  │  ├── HTML 实体解码                                          │ │
│  │  ├── Base64 解码                                            │ │
│  │  └── 空白字符规范化                                         │ │
│  └────────────────────────────────────────────────────────────┘ │
│                           │                                     │
│  ┌────────────────────────▼───────────────────────────────────┐ │
│  │  Phase 2: 规则匹配                                         │ │
│  │  ├── 规则集遍历(按优先级排序)                              │ │
│  │  ├── 正则表达式匹配                                         │ │
│  │  ├── 字符串匹配(Aho-Corasick 等)                         │ │
│  │  └── 复合条件评估                                           │ │
│  └────────────────────────────────────────────────────────────┘ │
│                           │                                     │
│  ┌────────────────────────▼───────────────────────────────────┐ │
│  │  Phase 3: 评分与决策                                       │ │
│  │  ├── 累计异常评分 (Anomaly Score)                           │ │
│  │  ├── 阈值判断(默认: 5 分拦截)                             │ │
│  │  ├── 白名单检查                                             │ │
│  │  └── 生成最终动作: PASS / BLOCK / LOG / CHALLENGE          │ │
│  └────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘

6.3.2 ModSecurity 规则示例

# ModSecurity CRS (Core Rule Set) 规则示例

# SQL 注入检测
SecRule ARGS "@detectSQLi" \
    "id:942100,\
    phase:2,\
    block,\
    msg:'SQL Injection Attack Detected',\
    severity:'CRITICAL',\
    tag:'attack-sqli',\
    tag:'OWASP_CRS'"

# XSS 检测
SecRule ARGS "@detectXSS" \
    "id:941100,\
    phase:2,\
    block,\
    msg:'XSS Attack Detected',\
    severity:'CRITICAL',\
    tag:'attack-xss',\
    tag:'OWASP_CRS'"

# 路径遍历
SecRule REQUEST_URI "@rx \.\./\.\." \
    "id:930100,\
    phase:1,\
    block,\
    msg:'Path Traversal Attack',\
    severity:'CRITICAL',\
    tag:'attack-lfi'"

6.3.3 规则动作

动作说明使用场景
PASS放行请求白名单命中
BLOCK拦截请求,返回错误页攻击确认
DROP直接断开连接严重攻击
REDIRECT重定向到指定 URL引导到验证页
LOG仅记录日志不拦截监控模式
CHAIN链式匹配(AND 逻辑)复合条件
ALLOW全局放行,跳过后续规则白名单

6.4 OWASP Top 10 防护详解

6.4.1 A01: Broken Access Control(失效的访问控制)

攻击类型:
├── IDOR(不安全的直接对象引用)
│   GET /api/user/123 → GET /api/user/456
│
├── 路径遍历
│   GET /files/../../../etc/passwd
│
├── CORS 配置错误
│   Origin: evil.com → Access-Control-Allow-Origin: evil.com
│
└── 越权操作
    PUT /api/admin/users (普通用户调用)

WAF 防护规则:
├── 拦截路径遍历模式 (../)
├── 验证 CORS Origin 白名单
├── 限制敏感路径访问(/admin/*)
└── 检查 HTTP 方法与路径匹配

6.4.2 A03: Injection(注入攻击)

SQL 注入示例:
  GET /search?q=' OR '1'='1' --
  GET /user?id=1 UNION SELECT * FROM users

  WAF 检测模式:
  ├── 关键字匹配: UNION SELECT, OR '1'='1, --
  ├── 语义分析: SQL 语法树解析
  └── 参数异常: 数字参数中出现引号

命令注入示例:
  POST /ping  host=127.0.0.1; cat /etc/passwd

  WAF 检测模式:
  ├── 命令分隔符: ; | && || ` $(  )
  └── 危险命令: cat, ls, whoami, curl, wget

XSS 注入示例:
  GET /search?q=<script>alert(1)</script>

  WAF 检测模式:
  ├── HTML 标签: <script>, <img onerror>
  └── JS 事件: onclick, onerror, onload

6.4.3 OWASP 防护能力矩阵

OWASP 风险WAF 防护能力防护深度
A01 访问控制路径限制、CORS 校验
A02 加密失败强制 HTTPS、密码套件限制
A03 注入攻击核心防护能力
A04 不安全设计速率限制
A05 安全配置安全头注入、信息泄露防护
A06 组件漏洞虚拟补丁
A07 认证失败暴力破解防护
A08 数据完整性请求签名校验
A09 日志不足完整审计日志
A10 SSRF出站请求过滤

6.5 WAF 与 CDN 集成

6.5.1 主流 CDN WAF 对比

功能CloudflareAWS WAF阿里云 WAF自建 ModSecurity
部署方式CDN 内置ALB/CF 边缘独立服务自建反向代理
规则集内置 + 自定义托管规则内置 + 自定义CRS + 自定义
机器学习
Bot 管理AWS Bot有限
DDoS 防护免费基础Shield需额外方案
价格免费-$20/月按规则+请求计费按套餐人力成本

6.5.2 Cloudflare WAF 规则示例

# Cloudflare WAF 自定义规则

# 阻止来自特定国家的请求访问管理后台
(http.request.uri.path contains "/admin") and
(ip.geoip.country in {"CN" "RU" "KP"}) and
(not ip.src in {企业办公网IP})
→ Action: Block

# 阻止恶意 User-Agent
(http.user_agent contains "sqlmap") or
(http.user_agent contains "nikto") or
(http.user_agent contains "nmap")
→ Action: Block

# 限速:API 接口每分钟最多 60 次
(http.request.uri.path matches "^/api/") and
(rate gt 60)
→ Action: Challenge (Managed Challenge)

6.6 注意事项

⚠️ 误报管理:WAF 规则过于严格会导致正常请求被拦截(误报)。上线前务必在"监控模式"下运行至少 1 周,观察日志后再启用拦截。

⚠️ 规则更新:攻击手法不断演进,WAF 规则集需定期更新。OWASP CRS 每季度发布新版本。

⚠️ 绕过风险:WAF 不是万能的。编码绕过、分块传输、HTTP 参数污染等技术可绕过部分 WAF。需定期进行渗透测试。

⚠️ 性能开销:WAF 规则数量直接影响处理延迟。建议规则数量控制在 500 条以内。


6.7 扩展阅读


本章小结

主题核心要点
工作原理请求解析 → 规则匹配 → 决策 → 响应处理
部署模式反向代理(最安全)、透明桥接、旁路(仅监控)
规则引擎预处理 → 规则匹配 → 评分 → 决策
OWASPWAF 对注入类攻击防护最强,逻辑漏洞需应用层配合
集成CDN 内置 WAF 是当前主流方案

下一章:第07章 WAF 规则详解 →