如何選擇一款適合自己的靜態(tài)代碼檢測工具?
最近幾年出現(xiàn)了新一代靜態(tài)代碼檢測工具,這些新的代碼檢測工具能夠基于控制流和數(shù)據(jù)流分析發(fā)現(xiàn)新型缺陷。現(xiàn)在無需實(shí)際運(yùn)行代碼即可檢測緩沖區(qū)溢出、內(nèi)存泄漏和空指針取消引用等錯誤。
隨著企業(yè)DevsecOps的建設(shè)及網(wǎng)絡(luò)安全意識不斷加強(qiáng),C和C++的靜態(tài)代碼分析市場正在迅速變化。現(xiàn)有的代碼檢查器供應(yīng)商也被迫將數(shù)據(jù)流和控制流功能添加到他們的工具中。因此,這些工具的潛在用戶很難為工作選擇合適的工具。
符合條件的靜態(tài)代碼檢測工具
滿足以下基本要求:
支持C/ C++ 、Java、C#等主流編程語言
無需運(yùn)行代碼即可檢測控制流和/或數(shù)據(jù)流缺陷
可以檢測安全編碼規(guī)范、運(yùn)行時缺陷和安全漏洞
目前常用的檢測工具
CppCheck(開源)
WuKong(中科天齊信創(chuàng))
Coverity (Synopsys)
Fortify(HP)
開源檢測工具存在哪些問題?
目前,靜態(tài)代碼檢測工具在多數(shù)人眼里仍舊是誤報、漏報率高的代名詞,甚至因為造成的“噪音”過多,一度被開發(fā)人員嫌棄,在選擇上更多會傾向于簡單免費(fèi)的開源檢測工具。但和國內(nèi)一些信創(chuàng)產(chǎn)品相比,開源檢測工具不但安全性不夠透明,而且在很多方面存在不足。
首先,開源檢測工具更多的是側(cè)重于安全編碼規(guī)范的檢測,對于安全漏洞及缺陷覆蓋類型少,而且檢測器數(shù)量種類少,不能完整支持各種行標(biāo)及國標(biāo);
其次,工具檢測的語言數(shù)受限,要支持生產(chǎn)上檢測多種語言,集成多種工具,需要很大工作量;
第三,誤報、漏報率等也高,結(jié)果無法保障,降低工作效率;
最后,從技術(shù)上來說,缺少及時的技術(shù)支持,升級緩慢,無法檢測最新的漏洞。
而對于國產(chǎn)信創(chuàng)產(chǎn)品如WuKong,不但支持檢測安全編碼規(guī)范,而且還能發(fā)現(xiàn)運(yùn)行時缺陷和安全漏洞;支持GB、GJB、ISO等國際、國家(軍用)標(biāo)準(zhǔn);在語言上支持C/C++、Java、Python、JS、HTML、PHP等多種主流編程語言,誤報率、漏報率低。有專業(yè)人員在工具上做技術(shù)支持,定期升級、支持對最新安全漏洞的檢測。同時涉及多種專利屬自主研發(fā),安全性有保障。
在工具選擇上,從哪些方面評估工具是否適合?
是否易于安裝?獲得第一個結(jié)果需要多長時間?
是否使用方便?檢測時間需要多久?
更改配置需要花費(fèi)多少時間?
是否有任何可用于IDE編程的插件?
是否支持Jira?
處理TIOBE測試套件需要多長時間?
在TIOBE測試套件中發(fā)現(xiàn)了多少誤報?有多少假陰性?
可用的規(guī)則集是否足夠完整?
是否可以在批處理模式下運(yùn)行?如果是這樣,將數(shù)據(jù)導(dǎo)出到另一個程序有多容易?
使用什么定價模式,許可費(fèi)用是多少?
獲得支持需要多長時間?答案的質(zhì)量如何?
是否安全可控并支持個性化定制?
網(wǎng)絡(luò)安全無小事,當(dāng)前安全檢測逐漸“左移”,靜態(tài)代碼安全檢測工具在敏捷開發(fā)過程中起著重要作用。并且靜態(tài)代碼安全檢測在一定程度上可以發(fā)現(xiàn)一些運(yùn)行時出現(xiàn)的安全漏洞,在不執(zhí)行代碼的情況下,最大程度地發(fā)現(xiàn)代碼問題,協(xié)助開發(fā)人員第一時間發(fā)現(xiàn)問題并修正,不但大大提高了軟件自身安全性,而且?guī)椭髽I(yè)降低維護(hù)網(wǎng)絡(luò)安全成本,減少經(jīng)濟(jì)損失,避免企業(yè)聲譽(yù)遭到打擊。
參讀鏈接:
https://www.tiobe.com/static-code-checkers-survey/
