新聞中心
今年對(duì)確保開(kāi)源生態(tài)系統(tǒng)的完整性和安全性提出了更大的挑戰(zhàn)。開(kāi)源對(duì)開(kāi)發(fā)者來(lái)說(shuō)有非常大的好處,因?yàn)閹缀跞魏稳硕伎梢悦赓M(fèi)地使用和定制它,并為社區(qū)做出貢獻(xiàn)。這種能夠確保更大透明度、安全性和促進(jìn)開(kāi)發(fā)人員跨項(xiàng)目協(xié)作的方式,也為對(duì)手從中獲利鋪平了道路。

?[[341504]]??
作為一名安全研究人員,我在今年遇到并分析了700多個(gè)被植入了的RubyGems軟件包,除了挖掘比特幣之外沒(méi)有任何其他用途。還有一個(gè)很受歡迎的例子是章魚(yú)掃描儀,這是一種惡意軟件,它已經(jīng)悄悄地把它的觸角注入到了至少26個(gè)GitHub項(xiàng)目當(dāng)中。這些事件強(qiáng)調(diào)了這樣一個(gè)事實(shí),即任何對(duì)公眾開(kāi)放的系統(tǒng)也會(huì)對(duì)對(duì)手開(kāi)放,并且容易被濫用。
上面的例子集中在惡意組件上面。那些沒(méi)有被注意到的擁有安全漏洞的合法開(kāi)源包呢?
一個(gè)易受攻擊或惡意的軟件包進(jìn)入流行的存儲(chǔ)庫(kù),并最終進(jìn)入你的軟件供應(yīng)鏈,可能會(huì)對(duì)你的客戶造成嚴(yán)重破壞。在npm、PyPI、NuGet和Fedora等流行的開(kāi)源存儲(chǔ)庫(kù)中,已經(jīng)檢測(cè)到了脆弱的和惡意的組件。
“在過(guò)去的幾年里,我們已經(jīng)看到了在整個(gè)生態(tài)系統(tǒng)的開(kāi)源包中所發(fā)現(xiàn)的所有漏洞,傳統(tǒng)上,Node.js和Java每年都顯示出了最大數(shù)量的新漏洞,”Snyk開(kāi)源安全報(bào)告2020的作者說(shuō)。
該報(bào)告還表明,在軟件開(kāi)發(fā)過(guò)程早期實(shí)施的安全措施是2019年報(bào)告的新漏洞比2018年少的原因?!叭绻@一趨勢(shì)持續(xù)下去,這可能是一個(gè)積極跡象,表明提高開(kāi)源軟件安全性的努力正在開(kāi)始取得成效,”報(bào)告繼續(xù)說(shuō)道。
下面是一些提高開(kāi)源代碼安全性的最佳實(shí)踐。
1. 了解你的軟件
Sonatype進(jìn)行的2020年DevSecOps社區(qū)調(diào)查顯示,大多數(shù)公司--即使是那些在其工作流程中內(nèi)置了某種程度的DevSps實(shí)踐的公司,也缺乏對(duì)其軟件應(yīng)用程序所使用的所有開(kāi)源組件以及應(yīng)用于它們的漏洞的全面了解。
“當(dāng)一個(gè)開(kāi)放源代碼的項(xiàng)目中發(fā)現(xiàn)一個(gè)漏洞時(shí),你應(yīng)該立即問(wèn)兩個(gè)問(wèn)題:我們是否曾經(jīng)使用過(guò)該開(kāi)源組件,以及(如果是的話)它在哪里?”報(bào)告作者說(shuō)。
Sonatype對(duì)5000多名開(kāi)發(fā)人員的調(diào)查顯示,只有45%擁有成熟DevOps實(shí)踐的組織為其應(yīng)用程序保留了完整的軟件物料清單(SBOM)?!罢{(diào)查結(jié)果顯示,在有‘不成熟實(shí)踐’的組織中,多達(dá)74%的組織無(wú)法知道一個(gè)新披露的開(kāi)源組件中的漏洞是否適用于他們的軟件,”該報(bào)告說(shuō)。這意味著那些擁有完整SBOM的不成熟實(shí)踐的組織將無(wú)法知道他們是否使用了易受攻擊的開(kāi)源代碼,也不知道在他們的環(huán)境中哪里可以找到新發(fā)布的漏洞。
考慮到每天在NVD、GitHub和其他托管網(wǎng)站上發(fā)布的大量漏洞,如果沒(méi)有一些自動(dòng)化的解決方案,開(kāi)發(fā)者和安全專(zhuān)家將很難跟上這些數(shù)據(jù)。歷史表明,大多數(shù)組織都是等到安全事件發(fā)生后才會(huì)加強(qiáng)他們的安全措施。然而,俗話說(shuō),一分預(yù)防勝于一分治療。
通過(guò)在軟件開(kāi)發(fā)生命周期中采用“左移”的方法,在早期實(shí)現(xiàn)的安全性可以獲得十倍的回報(bào),并提高開(kāi)發(fā)人員的整體意識(shí)。
2. 解決依賴(lài)性問(wèn)題
Veracode的2020年軟件安全狀態(tài)報(bào)告強(qiáng)調(diào)了一個(gè)常見(jiàn)的軟件安全問(wèn)題。與開(kāi)發(fā)人員本身不同,“相互關(guān)聯(lián)的依賴(lài)關(guān)系”會(huì)間接地在應(yīng)用程序中引入潛在的風(fēng)險(xiǎn),這些風(fēng)險(xiǎn)可能會(huì)被大多數(shù)開(kāi)發(fā)人員所忽略?!拔覀兊臄?shù)據(jù)顯示,大多數(shù)有缺陷的庫(kù)都間接地變成了代碼。應(yīng)用程序中有47%的缺陷庫(kù)是可傳遞的--換句話說(shuō),它們不是由開(kāi)發(fā)人員直接引入的,而是由某個(gè)庫(kù)所引入的(42%是直接引入的,12%是兩者兼而有之)。這意味著開(kāi)發(fā)人員引入的代碼會(huì)比他們預(yù)期的要多,而且往往是有缺陷的代碼?!?/p>
然而,根據(jù)Veracode的說(shuō)法,糾正這個(gè)問(wèn)題似乎并不是一項(xiàng)重大的任務(wù):“解決這些庫(kù)中的安全缺陷通常不是一項(xiàng)重要的工作。應(yīng)用程序中大多數(shù)庫(kù)所引入的缺陷(將近75%)都可以通過(guò)較小的版本更新來(lái)解決。通常不需要主要庫(kù)的升級(jí)!這一數(shù)據(jù)表明,問(wèn)題的關(guān)鍵在于發(fā)現(xiàn)和跟蹤,而不是大規(guī)模的代碼重構(gòu)?!?/p>
3. 自動(dòng)進(jìn)行代碼掃描以查找未知項(xiàng)
章魚(yú)掃描事件和其他形式的開(kāi)源生態(tài)系統(tǒng)的濫用,如typosquatting,已經(jīng)促使像GitHub這樣的庫(kù)維護(hù)者必須強(qiáng)制對(duì)他們所托管的開(kāi)源項(xiàng)目進(jìn)行自動(dòng)掃描。正如今年所報(bào)道的那樣,GitHub現(xiàn)在已經(jīng)集成了基于CodeQL的開(kāi)源存儲(chǔ)庫(kù)的自動(dòng)掃描。
GitHub高級(jí)產(chǎn)品經(jīng)理Justin Hutchings告訴Register網(wǎng)站,“事實(shí)證明,這種能力在安全方面是非常有用的。大多數(shù)安全問(wèn)題都只是錯(cuò)誤的數(shù)據(jù)流或錯(cuò)誤的數(shù)據(jù)使用。”
除了識(shí)別出隱藏的漏洞和bug之外,還可以定期掃描開(kāi)放源碼的項(xiàng)目,以尋找出數(shù)據(jù)泄漏的跡象,比如貢獻(xiàn)者無(wú)意中公開(kāi)的私鑰和憑證。從去年開(kāi)始,一些供應(yīng)商就已經(jīng)在他們的產(chǎn)品中集成了自動(dòng)掃描功能,以識(shí)別發(fā)布到合法開(kāi)源存儲(chǔ)庫(kù)中的惡意軟件。這些技術(shù)會(huì)將行為分析與機(jī)器學(xué)習(xí)相結(jié)合,以主動(dòng)搜尋“假冒部件”。
獨(dú)立開(kāi)發(fā)人員在較小規(guī)模上發(fā)布的實(shí)驗(yàn)性開(kāi)源掃描器(npm-scan)也出現(xiàn)了,可以使用啟發(fā)式方法檢測(cè)易受攻擊的組件。
在組件進(jìn)入供應(yīng)鏈之前,使用自動(dòng)化工具實(shí)現(xiàn)這種廣泛的安全審計(jì)可以幫助增加開(kāi)源生態(tài)系統(tǒng)中的信任度和完整性問(wèn)題。
4. 小心許可風(fēng)險(xiǎn)
使用開(kāi)源軟件的關(guān)鍵好處是它的許可證所提供的自由。如果你在開(kāi)源包中發(fā)現(xiàn)了一個(gè)尚未修復(fù)的bug,你可以選擇自己修復(fù)它,而不是等待供應(yīng)商。你可以在你的項(xiàng)目中定制一個(gè)你認(rèn)為合適的開(kāi)源應(yīng)用程序,并將定制的版本交付給你的客戶。
但是,要了解使用開(kāi)源組件可能產(chǎn)生的任何潛在的許可沖突,就可能需要更多的技巧了。Synopsys發(fā)布的2020年開(kāi)源安全與風(fēng)險(xiǎn)分析報(bào)告指出:
當(dāng)一個(gè)代碼庫(kù)包含開(kāi)源組件,而其許可證可能與代碼庫(kù)的總體許可證發(fā)生沖突時(shí),聲明的許可證沖突就會(huì)出現(xiàn)。例如,GNU通用公共許可證v2.0(GPLv2)下的代碼在編譯成一個(gè)正常分布的商業(yè)軟件時(shí)通常就會(huì)引起沖突問(wèn)題。但對(duì)于被認(rèn)為是軟件即服務(wù)(SaaS)的軟件來(lái)說(shuō),相同的代碼就不是問(wèn)題。”
對(duì)于在不同上下文中使用相同的開(kāi)源應(yīng)用程序的開(kāi)發(fā)人員來(lái)說(shuō),這些相互沖突的術(shù)語(yǔ)可能會(huì)造成混淆。除了漏洞和惡意組件之外,一些自動(dòng)化解決方案還可以識(shí)別出大量的許可證和由它們所引起的潛在沖突。
Black Duck的一份報(bào)告發(fā)現(xiàn),2019年審計(jì)的代碼庫(kù)中有67%包含有許可證沖突的組件。對(duì)于某些行業(yè),如互聯(lián)網(wǎng)和移動(dòng)應(yīng)用程序,這一比例還要高得多(93%)。“GPL是比較流行的開(kāi)源許可之一,它的各種版本也可能會(huì)與代碼庫(kù)中的其他代碼產(chǎn)生許可沖突。事實(shí)上,前10個(gè)有沖突的許可證中有5個(gè)就是GPL及其變體,”該報(bào)告稱(chēng)。
網(wǎng)頁(yè)標(biāo)題:避免開(kāi)源代碼漏洞的四個(gè)優(yōu)秀實(shí)踐
網(wǎng)頁(yè)網(wǎng)址:http://www.dlmjj.cn/article/dpcjcgd.html


咨詢(xún)
建站咨詢(xún)
