在其最新一次減少不必要安全警報(bào)干擾的策略中,Socket 收購了 Coana,這是一家由丹麥奧胡斯大學(xué)研究人員于 2022 年創(chuàng)立的初創(chuàng)公司,旨在告知用戶哪些漏洞可以安全地忽略。
Socket 供應(yīng)鏈安全業(yè)務(wù)的首席執(zhí)行官 Feross Aboukhadijeh 在接受 The Register 采訪時(shí)表示,“所有安全工具的問題(而這并非我們首創(chuàng))在于警報(bào)太多了。噪音太大了。”
工具越好,產(chǎn)生的噪音也就越多。
Aboukhadijeh 解釋說,“如果你發(fā)現(xiàn)的漏洞是其他工具找不到的,那你最終將收到更多警報(bào)?!?
他進(jìn)一步表示,Socket 的客戶——那些使用該公司依賴掃描工具來捕捉應(yīng)用庫中漏洞的軟件開發(fā)者——已反映了這一問題。他們不希望一次徹底的依賴掃描會(huì)不必要地增加他們的工作量。
來自 'npm audit' 的安全警告泛濫使開發(fā)者分心
現(xiàn)代軟件應(yīng)用通常包含大量依賴項(xiàng)。這些依賴項(xiàng)是被導(dǎo)入應(yīng)用中的模塊、框架或庫,用以提供一系列功能或能力,從而使開發(fā)者無需為已解決的問題重復(fù)造輪子。
根據(jù) GitHub 2020 年《Octoverse 狀態(tài)報(bào)告》 [PDF],“JavaScript 的中位依賴量最高(10 個(gè)),其次是 Ruby 與 PHP(9 個(gè)),Java(8 個(gè)),而 .NET 與 Python 最少(6 個(gè))?!?
然而,每個(gè)直接依賴可能還會(huì)帶有間接或傳遞性依賴——即由其他模塊導(dǎo)入的模塊??梢韵胂螅晃煌硌缂钨e帶了一位朋友,而這位朋友又邀請(qǐng)了更多人,而每個(gè)人可能還會(huì)帶來伴侶,情況會(huì)迅速變得難以管理。
這也是為什么 JavaScript 應(yīng)用中的傳遞性依賴中位數(shù)約為 683。
與此相比,在 PHP、Ruby 與 Python 等語言中,由于各自打包理念的差異,中位依賴總數(shù)分別較低,為 70、68 和 19。具體來說,依賴 npm 軟件包注冊(cè)中心的 JavaScript 生態(tài)系統(tǒng)鼓勵(lì)采用微打包——也就是使用大量小型庫的方式——而其他語言則不然。
關(guān)鍵在于,開發(fā)者創(chuàng)建應(yīng)用時(shí)往往會(huì)導(dǎo)入大量第三方軟件,這些軟件需要嚴(yán)格檢查以發(fā)現(xiàn)潛在的安全缺陷。
這時(shí),Coana 問世。Socket 構(gòu)建工具以尋找漏洞,而 Coana 則致力于構(gòu)建工具識(shí)別哪些漏洞可以被忽略。
Coana 開發(fā)了一種可達(dá)性分析方法,以確定攻擊者是否真的能夠觸及并利用某個(gè)軟件漏洞。
Aboukhadijeh 將可達(dá)性分析比作檢查一所房子中的門的數(shù)量。如果前門未鎖,則存在直接的安全風(fēng)險(xiǎn);但如果地下室中有扇未鎖的門,且其前還有幾扇鎖著的門,則可能還有其他更需要關(guān)注的問題。
Aboukhadijeh 表示,其他公司也已實(shí)現(xiàn)可達(dá)性分析系統(tǒng),但他認(rèn)為其工具運(yùn)行緩慢。
他解釋道:“你可能會(huì)遇到一個(gè)掃描過程需要運(yùn)行 10 小時(shí),或者在大型代碼庫上根本無法完成掃描的情況,所以實(shí)際上很難部署這種工具?!?
他說,Coana 的實(shí)現(xiàn)能夠在合理的時(shí)間內(nèi)完成掃描,而且誤報(bào)與漏報(bào)都極少。
Coana 的聯(lián)合創(chuàng)始人兼首席產(chǎn)品官 Martin Torp 表示,他們的方法依賴于靜態(tài)分析,而非運(yùn)行時(shí)分析,主要原因在于部署起來更簡(jiǎn)單。
他說:“但靜態(tài)分析的難點(diǎn)在于分析精確度與可擴(kuò)展性之間的權(quán)衡。而在能夠擴(kuò)展到大型企業(yè)應(yīng)用同時(shí)仍然保持高度準(zhǔn)確的結(jié)果之間找到最佳平衡點(diǎn),確實(shí)相當(dāng)困難?!?
Torp 解釋說,Coana 通過對(duì)人們實(shí)際編程方式做出一些假設(shè),從而使其靜態(tài)分析(即在不運(yùn)行代碼的前提下分析代碼)更為高效。
Torp 說:“我們知道代碼中存在一些理論上可以寫出但在實(shí)際中非常罕見的模式。通過找到這種反映人們實(shí)際編程方式的啟發(fā)式方法,我們構(gòu)建出一種既適合大規(guī)模分析,又具有極低漏報(bào)率和誤報(bào)率的工具?!?
他補(bǔ)充道,這一成果對(duì)于 JavaScript 和 Python 等動(dòng)態(tài)編程語言尤其具有吸引力,因?yàn)檫@些語言的某些特性只有在程序運(yùn)行時(shí)才能顯現(xiàn)出來,使得靜態(tài)分析顯得更加困難。
Torp 表示:“從用戶的角度看,他們擁有一個(gè)應(yīng)用,該應(yīng)用依賴于一些軟件庫或包,而這些包中幾乎總是存在漏洞。而可達(dá)性分析所做的,就是掃描整個(gè)應(yīng)用——包括所有依賴代碼——并過濾或標(biāo)記出在該特定應(yīng)用環(huán)境中實(shí)際相關(guān)的漏洞。”
從本質(zhì)上講,用戶將會(huì)收到通知,指出哪些漏洞實(shí)際上不可能被利用,從而大大減輕安全團(tuán)隊(duì)的工作負(fù)擔(dān)。
Aboukhadijeh 指出,安全工作負(fù)載并沒有改善,反而愈發(fā)嚴(yán)峻,并提到 Socket 每周大約會(huì)發(fā)現(xiàn) 500 個(gè)惡意軟件包。
他說:“實(shí)際上 npm 團(tuán)隊(duì)曾告知我,對(duì)于下載量較低的惡意軟件包,他們不會(huì)優(yōu)先處理?!?