許多 SAST 工具都無法避免誤報的問題。這些工具經常報告一些實際不存在的漏洞,這種不準確性讓安全團隊耗費大量時間來對誤報進行分類和處理,這時設定誤報基準就顯得十分必要。
通過設定誤報基準,安全團隊可以確定一個參考的點或者標準來衡量安全工具的有效性。
執行應用程式安全測試(Application Security Test)是識別惡意攻擊者可能利用的應用程式缺陷的重要方法。如果安全工具能夠準確識別漏洞,開發人員就能夠及時修復,從而提高應用程式的安全性。
SAST 工具掃描的結果通常分為四類:
True Positive ——正確識別存在漏洞。
True Negative —— 正確識別漏洞不存在。
False Positive ——錯誤地識別出實際不存在的漏洞。
False Negative ——未識別到存在的漏洞。
任何 SAST 工具的目標應該是最大化 true positive
和 true negative
的數量,同時最小化 false positive
和 false negative
。產生過多的誤報會讓開發人員無暇應對,而對該工具產生的掃描結果減少關注,甚至導致他們不願意使用該工具。當這種情況發生時,企業的安全程式就會受到影響,包含漏洞的應用程式就極有可能被部署到生產環境中。
因此在使用 SAST 工具時,設定誤報基準非常重要,這樣企業就可以避免浪費大量時間來尋找實際上不存在的漏洞。
衡量 SAST 工具的掃描結果是否準確的一種簡單方式就是從其 true positive
率中減去對應的 false positive
率。如果經過計算該工具獲得 100% 的完美準確度分數,則意味著 SAST 工具的 true positive
率為 100%,false positive
率為 0%。我們通過下面三個例子來理解這些概念。
假設使用三種不同的 SAST 工具掃描應用程式中的漏洞會生成以下結果:
什麼都不做。它不會檢測到任何漏洞,也不會產生誤報。它的 true positive
率是0%, false positive
率也是0%。所以,它的準確率分數是 0%,這個是沒什麼意義的。
報告應用程式中的每一行程式碼都存在漏洞。因此,它的 true positive
率為 100%,因為它完美地檢測到了每一個漏洞。但是,如果它檢測到許多無害的、失效的、無效的或不重要的 true 結果,就說明這個工具的誤報率很高。例如,如果該工具總共識別出 1000 個漏洞,但其中 800 個不構成威脅,則其誤報率為 80%,其準確度得分僅為 20%,這對測試結果的意義也不大。
通過拋硬幣的方式來確定一行程式碼是否易受攻擊,這樣 TP 率和FP 率各為 50%。它的準確度分數也將是 0%。
OWASP 基金會建立了一個免費和開源的 Benchmark Project,用於評估自動化軟體漏洞識別工具的速度、覆蓋範圍和準確性。Benchmark Project 是一個範例應用程式,其中包含數千個可利用的漏洞,有些是真的,有些是誤報。企業可以根據此對 SAST 工具的結果進行評分,並在下圖中標記 SAST 工具的分數。
圖片來源:MEND
理想情況下,安全工具的最佳結果應位於左上角——表示最小誤報和最大true positive
。
在上文提到,衡量 SAST 工具準確與否的一種簡單方法是從其 true positive 率中減去其 false positive
率。但這個演演算法本身是不夠完善的,因為沒有到考慮其他重要因素。
以這兩個不同的 SAST 工具為例,每個工具都針對 OWASP 專案進行了評分:
識別出 10 個true positive
和 3 個false positive
,準確度得分為 70%。
識別出 100 個true positive
和 30 個false positive
,準確度得分為 70%。
雖然這兩種不同工具對應的準確度分數是相同的,但在做選擇的時候,企業還需要參考一些額外的指標,比如:
完整性(Completeness)——完整性是指檢測到的真實漏洞(true positive)的數量與存在的真實漏洞總數的比較。 更高的完整性分數(理論最大值為 1)表明 SAST 工具識別出應用程式中更多的現有漏洞。一個完整度很高的工具可以幫助企業更好地瞭解其程式碼,並幫助準確識別更多漏洞,以交付更安全的產品。
深度(Depth)——在SAST 測試中,深度是指工具檢測各種漏洞的能力。支援大量程式語言並具有來自多個最新渠道的綜合漏洞資料庫的工具,能夠進行有深度的掃描工作,幫助企業準確發現更多安全漏洞。如果一個工具的覆蓋深度有限,則將產生大量的誤報,並且還會在不同的漏洞和語言之間產生不一致的結果。因此,在使用 SAST 工具設定誤報基準時,也應當將這個因素考慮進去。
為 SAST 工具設定適當的基準需要各個團隊共同作業完成,因為不同的團隊的目標各不相同。安全團隊希望每個應用程式引入儘可能低的安全風險,所以他們需要完整性等級得分非常高的安全工具。相反,開發團隊希望將更多的時間放在功能開發上,處理誤報等非生產性的工作對於他們來說將會是極大的困擾。
此外,基準也可能因企業正在測試的應用程式而異。某些應用程式可能比其他應用程式更有價值,或者更容易受到攻擊。對於這些敏感的應用程式,企業可能會傾向於選擇具有更多誤報的工具以獲得更高的完整性。
所有這些準確度分數只是 SAST 工具的一個維度。當然還有一些其他重要維度,包括工具執行的速度、開發人員使用結果的便利程度,以及作為工作流程的一部分部署和自動化工具的難易程度,企業需要根據自身需求來去調整基準以選擇最佳安全工具。