Published 3 years ago
Published 3 years ago
maosite
Updated 3 years ago
0
原文:六款免费 WAF 的测试报告
最近赶上国内某重大网安活动,要给几个客户推荐一些免费好用的安全产品,WAF 是其中之一。
攻击防护是 WAF 最核心的能力,本文将介绍如何使用科学的方法测试 WAF 防护能力的有效性。
为了保证测试结果公平公正,本文中提到的所有靶机、测试工具、测试样本均为开源项目。
测试结果以 4 个指标为主:
检测耗时用工具直接统计即可,其他这几个指标如何计算,可以对应到统计学中的预测分类概念:
这样就可以给出上面 3 个指标的计算公式:
为了减小随机性带来的综合影响,以减小误差,对于 ”检测耗时“ 我将会拆为 “90% 的平均耗时” 和 “99% 的平均耗时” 两个指标。
数据来源:所有测试数据均来自于我自己的浏览器。
抓包方式:用 Burp 做代理,浏览器全局指向 Burp,导出 XML 文件后使用 Python 脚本处理成单个请求。
根据以往的经验,在互联网上暴露的服务,通常正常流量和攻击流量的比例是 100:1 左右,我们按这个方式对样本进行配比。
白样本:刷微博、刷知乎、刷B站、刷各种论坛,一共攒了 60707 个 HTTP 请求,总大小 2.7 GB(该过程浪费了我 5 个小时)。
黑样本:为了让测试效果更充分,我使用四个不同的方法采集了黑样本,一共 600 个 HTTP 请求(该过程浪费了我 5 个小时)。
测试指标和测试样本明确之后,现在需要三个东西:WAF、接收流量的靶机,还有测试工具。
所有 WAF 均使用初始配置,不做任何调整。
靶机用 Nginx,无论收到什么请求,均直接返回 200,配置如下:
1location / { 2 return 200 'hello WAF!'; 3 default_type text/plain; 4}
测试工具的需求如下:
找了两款开源 WAF 测试工具,看起来质量都不错,基本符合要求,把两款工具综合一下,再略加其他细节就能用,地址如下:
雷池社区版
1TP: 426 TN: 33056 FP: 38 FN: 149 2总样本数量: 33669 成功: 33669 错误: 0 3检出率: 74.09% 4误报率: 8.19% 5准确率: 99.44% 6 790% 平均耗时: 0.73毫秒 899% 平均耗时: 0.89毫秒
Coraza
1TP: 404 TN: 27912 FP: 5182 FN: 171 2总样本数量: 33669 成功: 33669 错误: 0 3检出率: 70.26% 4误报率: 92.77% 5准确率: 84.10% 6 790% 平均耗时: 3.09毫秒 899% 平均耗时: 5.10毫秒
ModSecurity
1TP: 400 TN: 25713 FP: 7381 FN: 175 2总样本数量: 33669 成功: 33669 错误: 0 3检出率: 69.57% 4误报率: 94.86% 5准确率: 77.56% 6 790% 平均耗时: 1.36毫秒 899% 平均耗时: 1.71毫秒
宝塔 WAF
1TP: 224 TN: 32998 FP: 96 FN: 351 2总样本数量: 33669 成功: 33669 错误: 0 3检出率: 38.96% 4误报率: 30.00% 5准确率: 98.67% 6 790% 平均耗时: 0.53毫秒 899% 平均耗时: 0.66毫秒
nginx-lua-waf
1TP: 213 TN: 32619 FP: 475 FN: 362 2总样本数量: 33669 成功: 33669 错误: 0 3检出率: 37.04% 4误报率: 69.04% 5准确率: 97.51% 6 790% 平均耗时: 0.41毫秒 899% 平均耗时: 0.49毫秒
SuperWAF
1TP: 138 TN: 33048 FP: 46 FN: 437 2总样本数量: 33669 成功: 33669 错误: 0 3检出率: 24.00% 4误报率: 25.00% 5准确率: 98.57% 6 790% 平均耗时: 0.34毫秒 899% 平均耗时: 0.41毫秒
对比表格
| 漏报数量 | 误报数量 | 准确率 | 平均 | |
|---|---|---|---|---|
| 雷池社区版 | 149 条 | 38 条 | 99.44% | 0.73 毫秒 |
| Coraza | 171 条 | 5182 条 | 84.10% | 3.09 毫秒 |
| ModSecurity | 175 条 | 7381 条 | 77.56% | 1.36 毫秒 |
| 宝塔 WAF | 351 条 | 96 条 | 98.67% | 0.53 毫秒 |
| ngx-lua-waf | 362 条 | 475 条 | 97.51% | 0.41 毫秒 |
| SuperWAF | 437 条 | 46 条 | 98.57 | 0.34 毫秒 |
> 雷池社区版的综合表现最好,误报和漏报都是最少的。
>
> Coraza 和 ModSecurity 作为国外的优秀 WAF 引擎项目,检出率很高,但对于国内的场景适配并不会,误报太高。
>
为了保证公平公正,本文中所用到的测试工具和测试数据均已开源,可访问以下地址获取:
https://gitee.com/kxlxbb/testwaf
另外,不同的测试样本和测试方法可能会导致测试结果有比较大的差异,需要根据实际情况选择合适的测试样本和测试方法来进行测试。
本次测试的结果仅供参考,不作为评价产品、工具、算法、模型的唯一标准。
jcomey
Updated 2 years ago
0
mark~
skyhhjmk
Updated 2 years ago
0
不建议使用“宝塔 WAF”这个名字,因为宝塔自己做了一个WAF,是可以独立部署的,但是同时在宝塔面板中有一个“Nginx防火墙”与“Apache防火墙”,在宝塔应用商店中有“Nginx免费防火墙”
youngvery
Updated 2 years ago
0
收藏
lordraiden
Updated a year ago
0
Sorry for answering in English, I have translated the post and I understand that 雷池社区版 is SafeLine and performs pretty well compared to other.
But what is the technology behind SafeLine? how build and maintain the rules? is the core of the WAF a development of chaitin?