天天看點

利用OWASP Benchmark V1.2基準對國内靜态檢測工具的測評分析

        筆者一直從事于軟體測試、軟體安全方面工作,跟蹤國内外軟體測試工具的使用和效果。最近筆者接觸了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

利用OWASP Benchmark V1.2基準對國内靜态檢測工具的測評分析

        詳細資料如下:

        表4    CoBOT的OWASP Benchmark各名額數值統計表

利用OWASP Benchmark V1.2基準對國内靜态檢測工具的測評分析

      生成評分卡如下:

利用OWASP Benchmark V1.2基準對國内靜态檢測工具的測評分析

      圖一: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

(完)

繼續閱讀