筆者一直從事于軟體測試、軟體安全方面工作,跟蹤國内外軟體測試工具的使用和效果。最近筆者接觸了CoBOT源代碼缺陷檢測工具,想驗證一下該工具的檢測效果,于是下載下傳了OWASP Benchmark 1.2基準測評項目,通過CoBOT官網聯系試用工具,看看這款工具到底如何。
OWASP Benchmark是OWASP(Open Web Application Security Project)下的一個開源項目,是OWASP提供靜态掃描工具的免費基準測試項目。主要用來評估自動化安全掃描工具的速度、覆寫範圍和準确性,進而了解工具的優點和缺點,并與其它工具進行對比。截止2019年7月最新版本為1.2版本,包括了2740個測試案例,每個案例都對應CWE編号,可以檢測出掃描工具的誤報率和漏報率。
之前對國内外其它工具也做過測評,V1.2版本中一共有2740個測試案例,真假漏洞詳細統計情況表1。對于任何一款檢測工具來說,要能發現真實漏洞,同時故意設定的假漏洞又不能誤報。
在2740個測試案例中,部分存在真實安全漏洞,部分是假的安全漏洞。分别使用下面術語描述。
如果掃描工具正确識别了真實漏洞(True Positive,TP),稱為真陽性。
如果掃描工具沒有識别出真實漏洞(False Negative,FN),稱為假陰性。
如果掃描工具沒有對假的漏洞進行誤報(True Negative,TN),稱為真陰性。
如果掃描工具對假的漏洞進行誤報(False Positive,FP),稱為假陽性。
通過對使用掃描工具對2740個測試案例進行檢測,檢測結果通過Benchmark Accuracy Score(基準準确度得分),稱為Youden Index(約登指數)。計算方法為:
(sensitivity + specificity) – 1
其中Sensitivity = TPR=TP/(TP+FN)
Specificity = 1-FPR=TN/(TN+FP)
Youden Index=(sensitivity + specificity) – 1 =(TPR+1-FPR)-1 =TPR-FPR
表1 OWASP Benchmark真假漏洞統計
2740個測試案例中真假漏洞詳細統計情況如下:
表1 OWASP Benchmark真假漏洞統計
漏洞簡稱 | 漏洞全稱 | 真漏洞 | 假漏洞 | 小計 |
cmdi | 指令行注入 | 126 | 125 | 251 |
crypto | 弱密碼 | 130 | 116 | 246 |
hash | 弱哈希 | 129 | 107 | 236 |
ldapi | LDAP注入 | 27 | 32 | 59 |
pathtraver | 路徑周遊 | 133 | 135 | 268 |
securecookie | 不安全Cookie | 36 | 31 | 67 |
sqli | SQL注入 | 272 | 232 | 504 |
trustbound | 不信任邊界 | 83 | 43 | 126 |
weakrand | 弱随機值 | 218 | 275 | 493 |
xpathi | xpath注入 | 15 | 20 | 35 |
xss | XSS攻擊 | 246 | 209 | 455 |
總計 | 1415 | 1325 | 2740 |
打開CoBOT源代碼缺陷檢測工具,可以看到其支援Java語言的全部檢測器, 大概296類,也就是能夠檢測296類缺陷和安全漏洞,對于是否支援上述11類安全漏洞,不想一個一個去對比了,直接先把OWASP Benchmark的測試案例讓工具去檢測吧。
檢測過程很快,大概耗時20分鐘左右,30多萬的OWASP Benchmark源代碼檢測完成。逐一核對上述11類漏洞。比較麻煩的是這11類漏洞隻是CoBOT支援檢測器的很少一部分,需要逐一核對,才能确認檢測出哪些漏洞。經過2個多小時核對,結果讓我驚訝,CoBOT居然能夠報出了所有的11類漏洞,2740個測試案例無一誤報和漏報。各位,可以看看我整理的這個對應表2。
表2 CoBOT檢測器與OWASP Benchmark基準11類安全漏洞對應關系
漏洞簡稱 | 漏洞全稱 | CWE編号 | CoBOT檢測器編号名稱 |
cmdi | 指令行注入 | CWE-78 | SE_05_03 潛在的指令行注入 |
crypto | 弱密碼 | CWE-327 | SE_01_02 使用弱密碼哈希函數 |
hash | 弱哈希 | CWE-326 CWE-327 | SE_01_02 使用弱密碼哈希函數 |
ldapi | LDAP注入 | CWE-90 | SE_05_08 潛在的LDAP注入 |
pathtraver | 路徑周遊 | CWE-22 | SE_12_01 潛在的檔案路徑攻擊 |
securecookie | 不安全Cookie | CWE614 | SE_11_03 使用cookie存儲敏感資訊 SE_11_04 沒有設定安全标志的cookie |
sqli | SQL注入 | CWE-89 | SE_05_10 潛在的SQL注入 |
trustbound | 不信任邊界 | CWE-501 | SE_05_11 應用程式在會話屬性中混合可信和不可信資料 |
weakrand | 弱随機值 | CWE-79 | SE_16_05 檢測可預測僞随機生成器(PRG)的使用 |
xpathi | xpath注入 | CWE-643 | SE_17_05 來自ServletRequest和HttpServletRequest請求的參數值不安全 |
xss | XSS攻擊 | CWE-79 | SE_10_03 Servlet中潛在的XSS |
CoBOT對OWASP 1.2基準所涉及的2740個測試案例進行檢測,檢測結果是100%的真陽性率,0%的假陽性率,故Youden指數(約登指數)結果為1。請看下面的結果,這個是我通過其OWASP Benchmark自帶工具生成打分卡程式自動生成的。
CoBOT工具的檢測結果如下:
表3 CoBOT的OWASP Benchmark的TPR和FPR
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxic50mYoFjMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2cjM5MTOwYTMxIzNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
詳細資料如下:
表4 CoBOT的OWASP Benchmark各名額數值統計表
生成評分卡如下:
圖一:CoBOT的Benchmark V1.2評分卡
通過仔細核對,CoBOT在進行OWASP Benchmark基準測試中對2740項測試的通過率是100%,獲得了Youden(約登指數)指數1.00的好成績,意味100%的TPR和0%的FPR,沒有出現任何的假陰性或假陽性,也就是沒有任何誤報和漏報,遠遠超過了在OWASP網站公布的其它開源工具和商業工具的約登指數。 我把測評驗證結果,與其它國内外同類工具公布的約登指數放在了一張表中,對比如下:
表5 10款靜态分析工具的OWASP基準測試結果
檢測工具 | Benchmark 版本 | TPR | FPR | 約登指數 |
CoBOT | 1.2 | 1.00 | 0.00 | 1.00 |
ShiftLeft | 1.2 | 1.00 | 0.25 | 0.75 |
FBwFindSecBugs | 1.2 | 0.97 | 0.58 | 0.39 |
SonarQube | 1.2 | 0.50 | 0.17 | 0.33 |
SAST-04 | 1.1 | 0.61 | 0.29 | 0.33 |
SAST-06 | 1.1 | 0.85 | 0.52 | 0.33 |
SAST-02 | 1.1 | 0.56 | 0.26 | 0.31 |
SAST-03 | 1.1 | 0.46 | 0.21 | 0.25 |
SAST-05 | 1.1 | 0.48 | 0.29 | 0.19 |
SAST-01 | 1.1 | 0.29 | 0.12 | 0.17 |
PMD | 1.2 | 0.00 | 0.00 | 0.00 |
注:已知商業SAST工具01-06包括Checkmarx、Fortify、Appscan、Coverity、Jtest、SourceMeter和Veracode Sast七款工具中的六款。
的确沒有想到,國内研發的這款工具,取得如此好的測評結果。起碼證明了國内具有自主知識産權的靜态分析工具的檢測能力已經達到或超過了國内外同類工具的水準。現在很多企業采用SonarQube的開源版本進行檢測,會發現工具有很多的誤報和漏報,開發人員或測試人員需要消耗大量時間去核對每一個檢測出的漏洞或缺陷,這樣一定程度上會影響工作效率。其實從上表可以看到,SonarQube的約登指數隻有0.33,這說明SonarQube隻能檢測出50%的缺陷或漏洞,但是又會産生17%的誤報。目前,代碼安全審計越來越重要,通過CoBOT這樣的檢測工具肯定能提升檢測效率。
有興趣的朋友,可以去下載下傳一份OWASP Benchmark,驗證一下你采用工具的約登指數是什麼水準。也歡迎研究這方面工具的同行一起交流。
https://github.com/OWASP/Benchmark
(完)