On this page
WAF能力评估&测试
On this page
1. 评估工具
WAF能力评估工具在业界都比较少见,为数不多的几个还是由WAF供应商开发的,如:
- Framework for Testing WAFs (FTW!) (https://github.com/fastly/ftw),由 ModSecurity 和 Fastly 的研究人员创建,旨在帮助为 WAF 规则提供严格的测试。它使用 OWASP Core Ruleset V3 作为基线来测试 WAF 上的规则。规则集中的每个规则都加载到一个 YAML 文件中,该文件发出将触发这些规则的 HTTP 请求。
- GoTestWAF(https://github.com/wallarm/gotestwaf),由另一家 WAF 供应商 Wallarm 负责维护。GoTestWAF 使用 YAML 来定义多个测试,这些测试使用不同的有效载荷变体、绕过技术、编码以及有效载荷插入点(包括模拟 API 调用的 JSON 结构)。 本文使用GoTestWAF进行测试。
- WAFLab(https://github.com/microsoft/waflab),微软出品,使用 YAML 来定义多个测试用例,默认使用modsecurity的规则进行验证。
2. GoTestWAF 如何工作?
GoTestWAF 生成具有预定义的基本有效负载的请求以及特定于不同 API(REST、SOAP、XMLRPC)的攻击。之后,它将它们发送到应用程序并分析响应以在控制台输出中生成详细报告或作为 PDF。
主要测试思路是将攻击载荷编码并放置在 HTTP 请求的不同部分:其正文、标头、URL 参数等。为了简化,实现了以下逻辑:
- 有效载荷 → 编码器 → 占位符
这意味着每个负载样本(恶意攻击样本,例如像“alert(1)”这样的 XSS 字符串)将首先以某种方式编码,然后放入 HTTP 请求中。还可以选择使用保持字符串原样的普通编码器。
为了使测试可读,GoTestWAF 使用 YAML DSL。以下是 SQL 注入负载的示例:
payload:'"union select -7431.1, name, @aaa from u_base--w-'"'or 123.22=123.22""' waitfor delay '00:00:10'--""')) or pg_sleep(5)--"encoder:Base64FlatUrlplaceholder:UrlPathUrlParamJsonBodyHeader
作为每 4 个有效载荷、2 个编码器和 4 个占位符的排列结果,本次测试将发送 424=32 个请求。
3. WAFLab 是怎样的?
使用AutoGen模块自动生成测试用例,大体思路和GoTestWAF差不多,值得一提的是,它会从Mod Security的规则中提取信息,不过整体数量还是蛮少的:
TYPE | Total Rule | Supported Rule | Passed Rule |
---|---|---|---|
METHOD-ENFORCEMENT | 1 | 0 | 0 |
SCANNER_DETECTION | 5 | 5 | 5 |
PROTOCOL-ENFORCEMENT | 39 | 19 | 10 |
PROTOCOL-ATTACK | 7 | ||
APPLICATION-ATTACK-LFI | 4 | ||
APPLICATION-ATTACK-RFI | 4 | ||
APPLICATION-ATTACK-RCE | 20 | ||
APPLICATION-ATTACK-PHP | 14 | ||
APPLICATION-ATTACK-NODEJS | 1 | ||
APPLICATION-ATTACK-XSS | 30 | ||
APPLICATION-ATTACK-SQLi | 41 | ||
APPLICATION-ATTACK-SESSION-FIXATION | 3 | ||
APPLICATION-ATTACK-JAVA | 3 |
生成的测试用例格式如下:
meta:author: Microsoftenabled: truename: dev-933140.yamldescription: This YAML file is automatically generated by WAFLab AutoGentests:- test_title: 933140-0desc: REQUEST_COOKIESstages:- stage:input:stop_magic: truedest_addr: 127.0.0.1method: GETport: 80protocol: httpuri: /version: HTTP/1.0headers:Cookie: O09SFeTTuD=PHP://TEMPHost: wafdefaultruleset20.waftestdf.azfdtest.xyzoutput:status:- 403
4. 参考资料
- gotestwaf/README.md at master · wallarm/gotestwaf (github.com)
- waflab/autogen at master · microsoft/waflab (github.com)
Edit this page
Last updated on 4/9/2023