開源軟件漏洞數(shù)量在過去一年有怎樣的變化?
幾年前,“開源”還是點(diǎn)點(diǎn)星火,如今已成燎原之勢。在過去的2018年,企業(yè)都在積極加強(qiáng)自己在開源方面的實(shí)力,IBM大手筆340億美元收購了RedHat,微軟75億美元收購了GitHub。
開源軟件蓬勃發(fā)展的同時,安全漏洞風(fēng)險(xiǎn)也在增加。SNYK不僅向500多名開源用戶和維護(hù)人員分發(fā)了調(diào)查報(bào)告,同時也監(jiān)控了SNYK內(nèi)部監(jiān)控和保護(hù)的數(shù)十萬個項(xiàng)目的漏洞數(shù)據(jù),并結(jié)合外部研究,發(fā)布了2019年開源安全狀況報(bào)告。
首先,我們先來看幾個關(guān)鍵性結(jié)論:
2017年到2018年,包管理工具索引的開源包數(shù)量呈爆炸式增長,其中Maven Central增長了102%,PyPI增長了40%,NPM增長了37%,NuGet增長了26%,RubyGems增長了5.6%。
應(yīng)用程序的漏洞在短短兩年的時間內(nèi)增加了88%,其中SNYK跟蹤的Rhel、Debian和Ubuntu的漏洞數(shù)量,2018年是2017年的四倍多。
最受歡迎的默認(rèn)Docker映像Top 10中的每一個都至少包含30個易受攻擊的系統(tǒng)庫,其中44%可以通過更新Docker映像來修復(fù)已知漏洞。
調(diào)查顯示,37%的開源開發(fā)人員在CI期間不會進(jìn)行任何的安全測試,54%的開發(fā)人員不會進(jìn)行Docker映像的安全測試,而從漏洞出現(xiàn)在開源包中到漏洞修復(fù)的時間可能會超過兩年。
調(diào)查顯示,81%的調(diào)查者認(rèn)為開發(fā)人員應(yīng)該負(fù)責(zé)開源安全,68%的調(diào)查者認(rèn)為開發(fā)人員應(yīng)承擔(dān)Docker容器鏡像的安全;但只有十分之三的開源維護(hù)人員認(rèn)為自己應(yīng)該具備較高的安全知識。
開源應(yīng)用開源軟件對現(xiàn)代軟件開發(fā)產(chǎn)生了深遠(yuǎn)的影響,并且這種影響力還在每年遞增。據(jù)GitHub報(bào)告稱,2018年新用戶的注冊量超過了之前六年的總和,且平臺上創(chuàng)建的新組織和新存儲庫增加了40%。另外,開源軟件同時也推動了語言和平臺的發(fā)展,影響了行業(yè)增長,F(xiàn)orrester報(bào)告稱,開源軟件是業(yè)務(wù)技術(shù)戰(zhàn)略的重要組成部分。
前文我們曾提到,科技公司都在大量使用開源,每個編程語言生態(tài)系統(tǒng)中都有越來越多的開源庫被索引,且有的增長率實(shí)現(xiàn)了兩位數(shù),甚至是三位數(shù)的增長(Maven Central實(shí)現(xiàn)了102%的三位數(shù)增長。)
開源的使用正走在高速路上,2018年Java包增加了一倍,NPM增加了大約250000個新包。
據(jù)Linux基金會報(bào)告稱,2018年開源貢獻(xiàn)者提交了超過310億行的代碼,這些代碼一旦要在實(shí)際的生產(chǎn)環(huán)境中使用,那么擁有、維護(hù)和使用此代碼的人就必須承擔(dān)一定的責(zé)任,規(guī)避風(fēng)險(xiǎn)。
據(jù)CVE列表報(bào)告顯示,2017年總共有14000+個漏洞,打破了CVE一年內(nèi)報(bào)告的漏洞記錄,而2018年,漏洞數(shù)量繼續(xù)上升,超過了16000個。
我們在調(diào)查中關(guān)注了不同生態(tài)中不同軟件包的下載數(shù)量,同時也關(guān)注了這些開源軟件包如何轉(zhuǎn)化為用戶采用。
根據(jù)Python注冊表顯示,PYPI在2018年的下載量超過140億,相比于2017年報(bào)告中的63億,下載量增加了一倍。從下表中我們可以看到在8月份的時候,下載量出現(xiàn)了激增的情況,這是由于LineHaul(PYPI的統(tǒng)計(jì)收集服務(wù))出現(xiàn)故障造成的,該故障導(dǎo)致在8月之前大半的下載量丟失。
另外,開源軟件消費(fèi)也取得了巨大的飛躍,從PYPI中下載python包的數(shù)量是原來的兩倍,從NPM下載javascript包的數(shù)量更是驚人,達(dá)到3170億個。
NPM注冊表是整個JavaScript生態(tài)系統(tǒng)的核心。在過去的幾年中,無論是添加還是下載的軟件包數(shù)量都穩(wěn)步增,僅2018年12月的一個月時間就有300多億次。
而Docker的采用也促進(jìn)了開源軟件的增長,據(jù)悉,Docker公司在2018年每兩周就有超過10億個容器下載,截止到目前,數(shù)量約有500億個。僅2018年一年就有超過100萬個新的應(yīng)用程序添加到Docker Hub中。
風(fēng)險(xiǎn)和影響而伴隨著軟件包數(shù)量的增加,是漏洞的增加,前文我們提到了2018年新漏洞數(shù)量再創(chuàng)新高,超過16000個。
在GitHub發(fā)布的Octoverse報(bào)告中,Security成為了最受歡迎的項(xiàng)目集成應(yīng)用程序。而Gartner的行業(yè)分析師在最近的一份應(yīng)用程序安全報(bào)告中也表示企業(yè)應(yīng)該在應(yīng)用程序生命周期中盡早測試安全性。
開源軟件使用的越多,代碼中自然就包含了更多其他人的代碼,累積的風(fēng)險(xiǎn)就會越大,因?yàn)檫@些代碼目前或者是將來可能會包含漏洞。當(dāng)然,這里的風(fēng)險(xiǎn)并不單單是指代碼的安全性,同時也包括了所采用代碼的許可以及該代碼是否違反了許可證本身。
在接受調(diào)查的受訪者中,43%至少有20個直接依賴關(guān)系,這無疑就需要增強(qiáng)對這些引入庫的源碼的監(jiān)控。而事實(shí)上,只有三分之一的開發(fā)人員可以在一天或更少的時間內(nèi)解決嚴(yán)重性漏洞。
“企業(yè)應(yīng)定期使用SCA工具來審計(jì)包含軟件資產(chǎn)(如版本控制和配置管理系統(tǒng))的存儲庫,以確保企業(yè)開發(fā)和使用的軟件符合安全和法律標(biāo)準(zhǔn)、規(guī)則和法規(guī)。另外,應(yīng)用程序開發(fā)人員也可以使用SCA工具來檢查他們計(jì)劃使用的組件。
如今,沒有開源依賴的情況下寫代碼幾乎是不可能完成的任務(wù),所以正確跟蹤所依賴的庫就成為了一個難題。采取何種措施才能既消除漏洞,同時還能保持依賴項(xiàng)之間的兼容性?
NPM、Maven和Ruby中的大多數(shù)依賴項(xiàng)都是間接依賴項(xiàng),由少數(shù)明確定義的庫請求。在調(diào)查中,Snyk掃描了100多萬個快照項(xiàng)目,發(fā)現(xiàn)間接依賴項(xiàng)中的漏洞占整個漏洞的78%,這說明我們需要進(jìn)一步增強(qiáng)對依賴樹的洞察,并突出脆弱路徑的細(xì)微差別。
開源維護(hù)者的安全狀況雖然在大多數(shù)開發(fā)人員和維護(hù)人員都認(rèn)同在構(gòu)建產(chǎn)品和編寫代碼時,安全性是非常重要的,但是對他們而言,在構(gòu)建開源項(xiàng)目時沒有“教科書式”的規(guī)則可供他們參考,因此安全標(biāo)準(zhǔn)可能有很大的不同。
在今年的調(diào)查中,大部分用戶(平均每10個用戶中就有6.6個)都將他們的安全技術(shù)選擇在中等水平,7%的受訪者認(rèn)為目前的安全技術(shù)水平較低。
相應(yīng)的專業(yè)知識排名,2019年的排名發(fā)生了一些變化,尤其是High和Low,其中High占據(jù)了30%,Medium占據(jù)了63%,而low占據(jù)了7%,而在2017年,High只占了17%,low占了26%。
在調(diào)查過程中,我們還發(fā)現(xiàn)了維護(hù)人員通常都會將時間和經(jīng)歷放在項(xiàng)目的功能性方面,而往往忽視了安全性。
安全審計(jì)安全審計(jì)作為代碼審查的一部分,其中需要雙方確保遵循安全代碼最佳實(shí)踐,或者采取另一種方式,即通過運(yùn)行不同的安全審計(jì)變體,如靜態(tài)或動態(tài)應(yīng)用程序安全測試。
無論是手動審計(jì)還是自動審計(jì),它們都是檢測和減少應(yīng)用程序中漏洞的重要組成部分,并且應(yīng)該在開發(fā)階段盡可能早地定期執(zhí)行,以降低后期暴露和數(shù)據(jù)泄露的風(fēng)險(xiǎn)。
去年,有44%的受訪者表示他們從未進(jìn)行過安全審計(jì),而今年,這一數(shù)字要低得多,只有26%的用戶表示他們沒有審計(jì)源碼。與去年的報(bào)告相比,今年重復(fù)審計(jì)也呈現(xiàn)出了積極的趨勢,以季度和年度為單位,有10%的用戶會經(jīng)常的審計(jì)代碼。