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