軟件供應(yīng)鏈管理公司Sonatype發(fā)布的一份最新報(bào)告顯示,涉及惡意第三方組件的供應(yīng)鏈攻擊數(shù)量在過去一年增加了633%,目前已知的案例超過8.8萬起。與此同時(shí),軟件組件從其自己的依賴項(xiàng)繼承而來的傳遞性漏洞實(shí)例也達(dá)到了前所未有的水平,并影響著三分之二的開源庫(kù)。
Sonatype在其最新發(fā)布的《軟件供應(yīng)鏈現(xiàn)狀報(bào)告》中表示,“依賴項(xiàng)的網(wǎng)絡(luò)性質(zhì)突出了了解和可視化這些復(fù)雜供應(yīng)鏈的重要性。這些依賴項(xiàng)會(huì)影響我們的軟件,因此了解它們的來源對(duì)于漏洞響應(yīng)至關(guān)重要。然而,許多企業(yè)并不具備必要的可視性流程,因此一直深受供應(yīng)鏈攻擊的影響,如Log4Shell事件等。”
Log4Shell是2021年11月在Log4j中發(fā)現(xiàn)的一個(gè)關(guān)鍵漏洞。Log4j是一個(gè)廣泛流行的開源Java庫(kù),用于記錄日志,并被捆綁在數(shù)百萬企業(yè)應(yīng)用程序和軟件產(chǎn)品中,通常作為間接依賴項(xiàng)。Sonatype的監(jiān)測(cè)數(shù)據(jù)顯示,截至2022年8月,固定版本Log4j的采用率約為65%。更糟糕的是,這甚至還沒有考慮另一個(gè)事實(shí),即Log4Shell漏洞起源于一個(gè)名為JndiManager的Java類,它是Log4j-core的一部分,但也被783個(gè)其他項(xiàng)目借用,目前已在超過19000個(gè)軟件組件中被發(fā)現(xiàn)。
可以說,Log4Shell事件是一個(gè)分水嶺,它強(qiáng)調(diào)了開源軟件生態(tài)系統(tǒng)——這是現(xiàn)代軟件開發(fā)的核心——中存在的固有風(fēng)險(xiǎn),以及正確管理這些風(fēng)險(xiǎn)的必要性。它還推動(dòng)了由私人組織、軟件存儲(chǔ)庫(kù)管理人員、Linux基金會(huì)和政府機(jī)構(gòu)發(fā)起的多項(xiàng)軟件供應(yīng)鏈保護(hù)倡議。然而,事實(shí)證明,在開源供應(yīng)鏈管理方面,大多數(shù)企業(yè)還遠(yuǎn)遠(yuǎn)沒有達(dá)到他們需要實(shí)現(xiàn)的水平。
開源消費(fèi)持續(xù)增長(zhǎng)
從頂級(jí)組件存儲(chǔ)庫(kù)——Maven Central(Java)、npm(JavaScript)、PyPi(Python)和NuGet (. net)——下載的包的平均年增長(zhǎng)率為33%。隨著這一數(shù)字明顯低于前幾年,例如2021年73%的增長(zhǎng),但所有存儲(chǔ)庫(kù)的組件下載數(shù)量已經(jīng)超過2021年的數(shù)字,總計(jì)超過3萬億。僅npm存儲(chǔ)庫(kù)今年提供的下載量,就超過了所有四個(gè)存儲(chǔ)庫(kù)在2021年提供的下載量。
開源消費(fèi)速度的放緩是正常的,這并不一定是因?yàn)橛脩魧?shí)施了更嚴(yán)格的開源采購(gòu)和管理政策,而是考慮到不同編程語言的生態(tài)系統(tǒng)已經(jīng)達(dá)到的規(guī)模,以及它們?cè)黾有马?xiàng)目和發(fā)布的速度。
Sonatype總結(jié)道,“盡管開源消費(fèi)增長(zhǎng)速度正在放緩,但增長(zhǎng)的絕對(duì)規(guī)模仍在前一年的基礎(chǔ)上繼續(xù)增加。開源應(yīng)用的步伐在短時(shí)間內(nèi)沒有任何放緩的跡象。”
供應(yīng)鏈攻擊的類型多樣化
截至去年年底,Sonatype追蹤了大約1.2萬起已知的惡意供應(yīng)鏈攻擊事件,現(xiàn)在這一數(shù)字已超過8.8萬起,同比增長(zhǎng)633%。該公司還發(fā)現(xiàn)了97334個(gè)以各種不同方式分發(fā)的惡意軟件包。
惡意軟件包增長(zhǎng)的主要原因之一是一種名為依賴項(xiàng)混淆(dependency confusion)的攻擊技術(shù),該技術(shù)于2021年2月由安全研究人員公開披露,自那以來便得到了廣泛應(yīng)用。該技術(shù)利用大多數(shù)軟件包管理客戶端的行為,配置為在公共社區(qū)存儲(chǔ)庫(kù)和內(nèi)部存儲(chǔ)庫(kù)中搜索包。
當(dāng)兩個(gè)位置都存在包名時(shí),客戶端將拉入版本號(hào)較高的包名。這導(dǎo)致了一個(gè)問題,因?yàn)樵S多企業(yè)使用內(nèi)部開發(fā)的軟件包,這些包只存在于他們的內(nèi)部存儲(chǔ)庫(kù)中,從來不打算公開發(fā)布。但是,如果攻擊者從清單文件中找到了這些包的名稱,他們就可以在公共存儲(chǔ)庫(kù)中發(fā)布帶有這些名稱的惡意包,并使用更高的版本號(hào)來欺騙軟件構(gòu)建客戶端。
很難說是否所有依賴項(xiàng)混淆攻擊的實(shí)例本質(zhì)上都是惡意的,因?yàn)樵摷夹g(shù)在滲透測(cè)試人員中也很流行。但是,企業(yè)可以通過在公共存儲(chǔ)庫(kù)中注冊(cè)私有包的名稱或?yàn)樗邪褂们熬Y來保護(hù)自己,然后可以將這些前綴注冊(cè)為公共存儲(chǔ)庫(kù)中的名稱空間或作用域,這意味著攻擊者應(yīng)該不再能夠發(fā)布帶有這些前綴的包。
另一種眾所周知的大規(guī)模攻擊是typosquatting(通過輸入錯(cuò)誤觸發(fā)攻擊,如誤植域名等)和品牌劫持(brandjacking)。typosquatting指的是攻擊者注冊(cè)惡意包,其名稱與一些流行和廣泛使用的包的名稱相似。這是一種被動(dòng)攻擊,依賴于開發(fā)人員在構(gòu)建腳本或命令中輸入包名時(shí)犯的拼寫錯(cuò)誤。
品牌劫持與此類似,但針對(duì)的是其他軟件包維護(hù)者,希望他們?cè)谧约旱慕M件中包含一個(gè)被劫持的或拼寫錯(cuò)誤的包作為依賴項(xiàng)。當(dāng)合法包的維護(hù)者將所有權(quán)轉(zhuǎn)讓給其他人時(shí),或者當(dāng)他們停止開發(fā)該包并刪除它,舊的名稱變?yōu)榭捎脮r(shí),也會(huì)發(fā)生這種情況。
惡意代碼注入是另一種更具針對(duì)性的技術(shù),它涉及攻擊者破壞開發(fā)人員的系統(tǒng)或代碼存儲(chǔ)庫(kù),并在開發(fā)人員不知情的情況下將惡意代碼注入到他們的包中。當(dāng)軟件包維護(hù)人員向多方提供對(duì)其代碼存儲(chǔ)庫(kù)的訪問權(quán)限,而這些方要么懷有惡意,要么遭到攻擊時(shí),也會(huì)發(fā)生這種情況。
另一種類似于惡意代碼注入,但由合法開發(fā)人員實(shí)施的攻擊類型稱為“抗議軟件”(protestware)。它指的是開發(fā)人員將惡意代碼添加到他們自己之前干凈的包中作為抗議的標(biāo)志。
選擇具有良好安全實(shí)踐的組件
構(gòu)建和維護(hù)跨所有內(nèi)部軟件開發(fā)工作使用的組件清單,并跟蹤其中發(fā)現(xiàn)的漏洞,這是降低安全風(fēng)險(xiǎn)的一個(gè)關(guān)鍵步驟。但是,圍繞組件來源制定明確的策略同樣重要。選擇自己代碼中漏洞發(fā)生率低的組件或庫(kù)并非一個(gè)好主意,因?yàn)槠渲性S多組件或庫(kù)可以從自己的依賴項(xiàng)繼承漏洞,因此它們響應(yīng)此類漏洞和更新自己的依賴項(xiàng)所需的時(shí)間非常關(guān)鍵。
Sonatype分析了一組超過12000個(gè)在企業(yè)應(yīng)用程序中常用的庫(kù),發(fā)現(xiàn)其中只有10%的庫(kù)在其代碼中直接存在漏洞。然而,當(dāng)包括從依賴項(xiàng)繼承的傳遞性漏洞以及這些依賴項(xiàng)的依賴項(xiàng)時(shí),漏洞發(fā)生率就上升至62%。平均而言,每個(gè)庫(kù)有5.7個(gè)依賴項(xiàng)。
另外,從長(zhǎng)遠(yuǎn)來看,基于低漏洞率選擇組件并不一定會(huì)轉(zhuǎn)化為更好的安全結(jié)果,因?yàn)檠芯咳藛T在選擇他們想要仔細(xì)檢查的項(xiàng)目時(shí)存在很大的偏見。換句話說,受歡迎的項(xiàng)目可能有更多的漏洞被發(fā)現(xiàn),因?yàn)橛懈嗟娜岁P(guān)注它。
Sonatype的研究人員表示,“由于大多數(shù)漏洞來自于傳遞性依賴項(xiàng),因此最明確的建議是仔細(xì)考慮您使用的每個(gè)庫(kù)。此外,偏愛依賴樹較小的軟件;尋找那些在其依賴項(xiàng)的新版本發(fā)布時(shí)能夠快速更新的項(xiàng)目(即較低MTTU-平均更新時(shí)間)。最小化依賴項(xiàng)的總數(shù),以及為自己的項(xiàng)目依賴項(xiàng)保持較低的更新時(shí)間,是降低傳遞性漏洞風(fēng)險(xiǎn)的兩個(gè)關(guān)鍵因素。”
目前,有多種度量標(biāo)準(zhǔn)可以用來判斷開源項(xiàng)目的安全實(shí)踐。其中之一是由開源安全基金會(huì)(OpenSSF)開發(fā)的安全記分卡系統(tǒng)。該系統(tǒng)執(zhí)行一系列自動(dòng)審查,以檢查開源項(xiàng)目是否有未修復(fù)的漏洞、是否使用工具幫助更新其依賴項(xiàng)、是否運(yùn)行CI測(cè)試、是否運(yùn)行自動(dòng)代碼模糊化、是否使用靜態(tài)代碼分析工具、是否避免危險(xiǎn)的編碼實(shí)踐、是否在合并新代碼前執(zhí)行代碼檢查等等。
Sonatype使用它自己的數(shù)據(jù)來評(píng)估這些實(shí)踐對(duì)降低項(xiàng)目漏洞幾率的影響,并發(fā)現(xiàn)影響最大的操作是代碼審查、避免危險(xiǎn)的編碼實(shí)踐(分支保護(hù))以及審查代碼提交等等。
企業(yè)對(duì)他們的開源實(shí)踐表現(xiàn)得過于自信
Sonatype對(duì)662名企業(yè)工程專業(yè)人員進(jìn)行了調(diào)查,詢問了他們使用開源組件、依賴項(xiàng)管理、治理、批準(zhǔn)流程和工具的40個(gè)問題。根據(jù)Sonatype的評(píng)估,大多數(shù)反饋都表明供應(yīng)鏈管理水平低于產(chǎn)生高質(zhì)量結(jié)果的要求。
調(diào)查顯示,得分最高的是補(bǔ)救和應(yīng)用程序清單類別。例如,68%的受訪者表示,他們確信其應(yīng)用程序沒有使用已知的易受攻擊的庫(kù),84%的人稱他們會(huì)仔細(xì)檢查自己使用的開源組件的安全歷史。然而,這與Sonatype在實(shí)踐中的發(fā)現(xiàn)并不一致,Sonatype對(duì)隨機(jī)選擇的55000個(gè)企業(yè)應(yīng)用程序的掃描顯示,其中68%的應(yīng)用程序存在已知的漏洞。
研究人員介紹稱,“我們利用了調(diào)查期間收集的人口統(tǒng)計(jì)數(shù)據(jù),并按職位劃分了結(jié)果。研究結(jié)果很有啟發(fā)性。人們總是傾向于從更好的角度看待事物,與其他角色相比,管理者報(bào)告的成熟階段更高。在整個(gè)調(diào)查范圍內(nèi),當(dāng)比較IT管理者和從事信息安全工作的人員時(shí),這種差異在統(tǒng)計(jì)上是非常顯著的。”
關(guān)于企業(yè)網(wǎng)D1net(hfnxjk.com):
國(guó)內(nèi)主流的to B IT門戶,同時(shí)在運(yùn)營(yíng)國(guó)內(nèi)最大的甲方CIO專家?guī)旌椭橇敵黾吧缃黄脚_(tái)-信眾智(www.cioall.com)。同時(shí)運(yùn)營(yíng)18個(gè)IT行業(yè)公眾號(hào)(微信搜索D1net即可關(guān)注)。
版權(quán)聲明:本文為企業(yè)網(wǎng)D1Net編譯,轉(zhuǎn)載需注明出處為:企業(yè)網(wǎng)D1Net,如果不注明出處,企業(yè)網(wǎng)D1Net將保留追究其法律責(zé)任的權(quán)利。