自去年以來,針對萬千開發人員所用開源代碼庫的攻擊呈指數級增長。
網絡罪犯盯上開源軟件包,試圖通過軟件供應鏈投放惡意代碼。安全提供商Sonatype在2021年錄得1.2萬起網絡安全事件,該公司的數據表明,這種所謂的軟件供應鏈攻擊今年增長了650%。正如本周Log4j漏洞所昭示的,企業必須審慎處理開源代碼了。
軟件供應鏈攻擊是什么?
開源軟件包通常存儲在在線代碼庫中。波恩大學、Fraunhofer FKIE研究所和法國SAP實驗室的研究人員稱,由于某些代碼包廣泛存在于各種應用中,這些代碼庫幾乎相當于一種“可靠的大范圍惡意軟件投放渠道”。
2021年針對開源軟件的供應鏈攻擊暴增650%
圖1:年度軟件供應鏈攻擊總數
(來源:2021年Sonatype《軟件供應鏈狀況報告》)
Sonatype發布的《軟件供應鏈狀況》報告中指出,軟件供應鏈攻擊主要有三種形式。最常見的兩種形式是依賴混淆和錯字搶注,這兩種形式都有賴于一個事實:依賴管理器等軟件開發工具會在應用中自動下載并實現開源代碼。
在依賴混淆攻擊中,攻擊者會創建有漏洞的程序包并標上更新的版本號,這樣就可以讓軟件開發工具自動實現有缺陷的程序包了。這種形式是2021年最常見的軟件供應鏈攻擊類型。而在錯字搶注攻擊中,攻擊者會給自己創建的程序包取一個跟流行程序包非常相近的名字(絕大多數時候只有一個字母與之不同),期望開發人員會敲錯包名下錯包。
惡意代碼注入則是往開源軟件包中添加新的代碼,任何運行了該軟件包的人都會中招。Sonatype表示,可能是由于開源代碼庫加強了自身安全防護,此類攻擊今年有所下降。
波恩大學的研究發現,Node.js(npm)和Python(PyPi)代碼庫是供應鏈攻擊的主要目標,原因可能是惡意代碼在程序包安裝期間很容易被觸發。
開源軟件安全狀況
Sonatype的報告評估了常見開源軟件包中的漏洞數量。報告發現,Maven Central Java程序包代碼庫中存在漏洞的組件數量最多,超過35萬個組件含有關鍵漏洞,攻擊者可以很輕易地利用這些漏洞獲得root級別的權限。含漏洞組件的數量排第二位的是nmp JavaScript程序包代碼庫,其中有25萬個組件帶有關鍵漏洞。
常見開源代碼庫中檢測出關鍵漏洞
圖2:各開源代碼庫中存在漏洞的開源程序包組件總數
(藍色代表至少存在一個已知漏洞的組件數量;紅色代表存在關鍵漏洞的組件數量。)
Sonatype發現,帶有漏洞的程序包在代碼庫所容納的所有程序包中所占的比例并不大。比如說,Maven Central代碼庫中僅4.9%的程序包含有關鍵漏洞。而在PyPi代碼庫中,這一比例更是小到僅0.4%。
即便如此,這些程序包的下載頻次意味著,其所含漏洞能夠快速大范圍散播。2021年,JavaScript開發人員的開源程序包下載數量為1.5萬億次,Python程序包的下載數量則是1270億次。
2021年JavaScript開發人員開源程序包下載數量達1.5萬億次
圖3:各編程語言的開源程序包下載數量(單位:10億次)
Sonatype執行副總裁Matt Howard表示:“今年的報告再次表明了開源的雙刃劍屬性,開源既是數字創新的重要推進力,同時也是軟件供應鏈攻擊的誘人目標。這一嚴峻的現實凸顯出了重要的責任和機遇,即工程主管必須接受智能自動化,這樣他們才能標準化最佳開源供應商,同時采用最佳版本幫助開發人員保持第三方庫更新。”
波恩大學的研究人員所提交的報告指出,很多開源項目都引入了雙因素身份驗證機制,并且禁用了會自動安裝額外程序包的腳本。他們寫道,開源生態圈應當推廣采用這些措施。“盡管利益相關者的安全意識普遍有所上升,但這些應對之策應當盡可能地進一步推開,并且默認強制實施,這樣才能夠防止開源軟件供應鏈攻擊。”
本月,Java應用開源日志工具Log4j中發現的關鍵漏洞再次引爆了圍繞開源軟件安全的討論。專家稱,Log4j由沒有報酬的志愿者維護,廣泛存在于大量應用中,實現這些應用的企業往往并不知道它的存在,導致企業可能需花費數月時間才能找到并修復所有存在漏洞的實例。