最近趕上國內某重大網安活動,要給幾個客戶推薦一些免費好用的安全產品,WAF 是其中之一。
攻擊防護是 WAF 最核心的能力,本文將介紹如何使用科學的方法測試 WAF 防護能力的有效性。
測試指標
測試結果以 4 個指標為主:
檢測耗時用工具直接統計即可,其他這幾個指標如何計算,可以對應到統計學中的預測分類概念:
這樣就可以給出上面 3 個指標的計算公式:
為了減小隨機性帶來的綜合影響,以減小誤差,對于 ”檢測耗時“ 我將會拆為 “90% 的平均耗時” 和 “99% 的平均耗時” 兩個指標。
測試樣本
1. 數據來源:所有測試數據均來自于我自己的瀏覽器。
2.抓包方式:用 Burp 做代理,瀏覽器全局指向 Burp,導出 XML 文件后使用Python 腳本處理成單個請求。
根據以往的經驗,在互聯網上暴露的服務,通常正常流量和攻擊流量的比例是 100:1 左右,我們按這個方式對樣本進行配比。
1. 白樣本:刷微博、刷知乎、刷B站、刷各種論壇,一共攢了 60707 個 HTTP 請求,總大小 2.7 GB(該過程浪費了我 5 個小時)。
2. 黑樣本:為了讓測試效果更充分,我使用四個不同的方法采集了黑樣本,一共 600 個 HTTP 請求(該過程浪費了我 5 個小時)。
測試方法
測試指標和測試樣本明確之后,現在需要三個東西:WAF、接收流量的靶機,還有測試工具。
所有 WAF 均使用初始配置,不做任何調整。
靶機用 Nginx,無論收到什么請求,均直接返回 200,配置如下:
location / {
return200"hello WAF!";
default_type text/plain;
}
測試工具的需求如下:
找了兩款開源 WAF 測試工具,看起來質量都不錯,基本符合要求,把兩款工具綜合一下,再略加其他細節就能用,地址如下:
開始測試
雷池社區版
TP: 426 TN: 33056 FP: 38 FN: 149
總樣本數量: 33669 成功: 33669 錯誤: 0
檢出率: 74.09%
誤報率: 8.19%
準確率: 99.44%
90% 平均耗時: 0.73毫秒
99% 平均耗時: 0.89毫秒
Coraza
TP: 404 TN: 27912 FP: 5182 FN: 171
總樣本數量: 33669 成功: 33669 錯誤: 0
檢出率: 70.26%
誤報率: 92.77%
準確率: 84.10%
90% 平均耗時: 3.09毫秒
99% 平均耗時: 5.10毫秒
ModSecurity
TP: 400 TN: 25713 FP: 7381 FN: 175
總樣本數量: 33669 成功: 33669 錯誤: 0
檢出率: 69.57%
誤報率: 94.86%
準確率: 77.56%
90% 平均耗時: 1.36毫秒
99% 平均耗時: 1.71毫秒
寶塔 WAF
TP: 224 TN: 32998 FP: 96 FN: 351
總樣本數量: 33669 成功: 33669 錯誤: 0
檢出率: 38.96%
誤報率: 30.00%
準確率: 98.67%
90% 平均耗時: 0.53毫秒
99% 平均耗時: 0.66毫秒
nginx-lua-waf
TP: 213 TN: 32619 FP: 475 FN: 362
總樣本數量: 33669 成功: 33669 錯誤: 0
檢出率: 37.04%
誤報率: 69.04%
準確率: 97.51%
90% 平均耗時: 0.41毫秒
99% 平均耗時: 0.49毫秒
SuperWAF
TP: 138 TN: 33048 FP: 46 FN: 437
總樣本數量: 33669 成功: 33669 錯誤: 0
檢出率: 24.00%
誤報率: 25.00%
準確率: 98.57%
90% 平均耗時: 0.34毫秒
99% 平均耗時: 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
另外,不同的測試樣本和測試方法可能會導致測試結果有比較大的差異,需要根據實際情況選擇合適的測試樣本和測試方法來進行測試。
本次測試的結果僅供參考,不作為評價產品、工具、算法、模型的唯一標準。
來源:CT Stack 安全社區