通過在開源軟件包中插入惡意代碼來迅速將惡意軟件傳播到整個軟件供應鏈中是惡意分子常用的攻擊手段。然而,最新的研究發現,如果用戶等待大約14天后再將這些軟件包更新到最新版本,就可以避免受到軟件包劫持攻擊的不良影響。

JFrog的研究人員對各種開源軟件包的受攻擊情況進行了調查,發現其中一些軟件包的下載量多達數億次。此外,他們還分析了攻擊被發現所需的時間跨度,以及在不良影響得以解決之前該軟件包被下載的次數。

最終結果表明,在發現惡意代碼并制定解決問題的更新方案時,項目的開發人員或維護者可能需要花費不同的時間,這個時間范圍從數小時到超過一周不等。因此,在通常情況下,等待大約兩周的時間再進行開源軟件包的更新是一個相對安全的選擇。

對于那些在最新版本發布后等待大約14天再進行軟件包更新的用戶來說,他們大概率可以避免遭受軟件包劫持攻擊的影響。因為在這兩周的時間內,軟件包劫持攻擊通常會被察覺到,惡意版本的軟件包也會被移除或修復,從而降低了用戶受到攻擊的風險。

軟件包劫持的激增

軟件包劫持是指外部威脅者或項目開發者與維護者本人在軟件包的更新中插入惡意代碼的情況。此類事件一旦發生,用戶察覺到異常也只是時間問題。要么是由于劫持的惡意負載,要么是因為用戶仔細檢查了軟件包代碼的變化。對于攻擊者來說,相比于發現并利用關鍵的零日漏洞,入侵代碼庫網站上的開發者賬戶往往更加簡單。所以說,軟件包劫持比傳統的漏洞攻擊更容易實施,并且能夠造成更為廣泛的影響。

發現問題所需時間

JFrog的研究人員旨在找出從一個軟件包被劫持(被黑客篡改或植入惡意代碼)開始,到軟件包的用戶意識到存在問題,并與項目的開發人員合作發布修復更新所需的時間。這個特定的時間段非常重要,因為在這段時間內,使用該軟件包的用戶更容易成為攻擊的目標。

為了確定一個確切的檢測時間范圍,他們從兩個角度來對多種軟件包劫持示例進行評估:外部軟件包劫持和內部軟件包劫持。

前者是指第三方攻擊者將惡意代碼注入到軟件包中。這可以通過劫持代碼維護者的賬戶或將惡意代碼偽裝成合法的項目貢獻來實現。而后者則是指合法的開發人員或維護者故意將惡意代碼注入到軟件包中,這通常是作為一種抗議行為。

外部軟件包劫持

典型的外部軟件包劫持案例包括去年12月針對機器學習開發人員的惡意代碼依賴劫持,其目標是PyTorch Python庫,以及分別在2021年10月和2021年11月,對"ua-parser-js"和"coa"軟件包的獨立攻擊,其中涉及一個加密貨幣挖礦程序。

這些劫持行為對開發者社區來說可能會帶來嚴重的潛在影響。PyTorch是一個被廣泛使用的庫,當前下載量已超過1.8億次。ua-parser-js接近10億次,而coa是GitHub上超過500萬個開源倉庫的基石,每周下載約900萬次。

就PyTorch軟件包劫持而言,用戶花了五天的時間才發現有問題,在這期間該軟件包就被下載了超過3,000次;而研究人員發現,parser和coa的用戶僅花了幾小時就檢測到了軟件包中的惡意軟件。

內部軟件包劫持

JFrog團隊還調查了三個內部人員發起軟件包劫持攻擊的例子,其中兩個發生在2022年1月,分別是備受Node.js開發人員歡迎的"colors"和"faker" npm兩個軟件包。在這兩個軟件包中,作者通過添加一個無限循環來破壞軟件包,以抗議大公司不為開源社區做貢獻的情況。

這種劫持對依賴這些軟件包的軟件項目造成了嚴重的損害,并且研究人員發現,在這些惡意版本發布后的兩天內就被發現了。

另外,在2022年3月,一名開發人員向node-ipc軟件包中添加了一段惡意代碼,用于破壞俄羅斯和白俄羅斯的計算機文件系統,以抗議俄羅斯對烏克蘭的入侵。在這種情況下,根據JFrog的說法,從發布惡意版本的軟件包后,開發人員花了相當長的時間(大約8天)才察覺到該問題。

進一步的補救措施

除了等待大約兩周時間再更新軟件包到最新版本以外,開發人員和組織還可以事先對這些軟件包進行嚴格地審核,再將軟件包引入到其應用之中,來應對軟件供應鏈攻擊的威脅。可用的策展工具可以幫助組織定義一組規則,以確定開發人員可以訪問哪些軟件包,或者阻止下載那些14天內發布的第三方軟件包。這有助于避免從公共存儲庫下載存在潛在安全風險的軟件包。

此外,開發人員和組織還需要學會識別可能包含惡意代碼的軟件包,從而避免在自己的項目中使用這些受感染的軟件包。

數世咨詢點評

等待兩周再更新軟件包的行為是一種權衡安全性和便利性的做法。該策略的優點在于能夠確保新版本相對穩定和安全,以降低用戶受到惡意軟件包或供應鏈攻擊的風險。

但同時,該行為也會帶來一定的麻煩,例如增加項目復雜性、延遲安全補丁以及降低開發速度等,其適用性存在一定的限制。

因此,決策是否采用此策略應該基于具體情況、風險評估以及項目需求來進行權衡。此外,組織還可以通過使用數字簽名來驗證軟件包的完整性,以及定期審查代碼和依賴項等方式來提高項目的供應鏈安全性。