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