網路資安威脅
暗中修改的程式碼如何破壞開放原始碼生態系安全?
本文討論開放原始碼如何遭到程式碼維護者暗中修改以表達政治上的抗議。此外,我們也分析了這類事件對 IT資安產業及開放原始碼社群的意義。
傳統上,人們對於開放原始程式碼的資安疑慮大多圍繞在開放原始碼可能暗藏漏洞、後門或惡意程式。然而近幾個月來,我們觀察到一種特別的現象,那就是開放原始程式碼遭人暗中修改來表達政治上的抗議。之所以出現這類所謂的「抗議軟體」(protestware),是有些負責維護開放原始碼軟體的開發者因政治上的動機或為了表達抗議而對程式碼做某些修改。這樣的情況雖然不是新聞,因為之前就曾發生過,但最近的一些地緣政治事件卻讓開放原始碼社群分裂成兩派:一派支援這樣的發展,另一派則傾向於維持開放原始碼生態系的非政治化,因為抗議軟體可能會破壞開放原始碼社群整體的信任基礎。
這但樣的情況,在 Node.js 供應鏈的某名維護者修改了 node-ipc 元件的程式碼、因而使它出現破壞行為之後,引起了高度的關注。這起 node-ipc 事件發生在今年 3 月,而且顯然並非獨立的個案。開放原始碼社群還有其他涉及烏克蘭、以色列、巴勒斯坦地緣政治衝突的類似案例。正因如此,開放原始碼軟體的使用者,務必確保其開放原始碼軟體的整個供應鏈都安全無虞,並且未受到這類與元件功能無關的程式碼變更。事實上,這將是 IT 系統管理員在確保系統安全時必須考慮的一項新問題,也就是政治因素如何影響他們的數位供應鏈安全。
在這篇部落格中,我們將介紹幾個有關程式碼因政治目的或不肖意圖而遭到修改或造成破壞的開放原始碼資安事件。此外,我們也分析了這類事件對整個 IT 資安產業 (尤其是開放原始碼社群) 的意義。
受影響的 node-ipc 版本造成使用者檔案被刪除,內容換成愛心表情符號 (emoji)
近期最令人矚目的開放原始碼資安事件就是 node-ipc 事件。node-ipc 是 Node.js 當中一個負責讓本地端與遠端處理程序能彼此通訊 (IPC) 的套件。它可支援 Linux、macOS 和 Windows 平台,因此是 Node Package Manager (npm,節點套件管理員) 當中很重要的一個元件,而 npm 則是 Node.js 當中預設的套件管理程式。所以,全世界許許多多的伺服器上都已部署或正在使用 node-ipc,系統管理員甚至不用自己安裝,也會因為其他套件用到了 node-ipc而將它一併安裝到系統上。
2022 年 3 月 7 日和 8 日之間,node-ipc 的程式碼遭到修改,修改後的版本會偵測自己是否在某些地理區域執行,如果是,就執行一些從事破壞的指令。簡單來說就是當它偵測到自己在某些地方執行時,就會複寫它可存取的任何檔案,將檔案內容變成愛心表情符號 (emoji)。目前已知有兩個版本 (10.1.1 和 10.1.2) 含有這段惡意程式碼。這兩個被修改的版本在線上的時間大約維持了 4 小時左右,隨後就被置換成沒有破壞行為的 10.1.3 版。
然而,再過四小時後,又有另一個修改過的 node-ipc 版本 (11.0.0) 被上傳到網路上。這個版本使用了一個名為「peacenotwar」的模組,它會在使用者的桌面上放置一個文字檔。此功能在新版的 README 檔案中有提到,當然,之前的版本顯然沒有這項功能。由於約有 300 多個套件用到這個版本,所以光 3 月的前三個禮拜就累積了 100 多萬次下載。
3 月 15 日,node-ipc 的穩定版本更新到 9.2.2 版,此版本的影響範圍更大,因為許多專案都是使用穩定版本的 node-ipc。當此版本 (9.2.2) 的 node-ipc 被呼叫時,同樣也會執行前述的 peacenotwar 模組,使得這項行為受到更多的關注。其中受影響最深的軟體是 Unity 3D 遊戲引擎和一個名為「Vue.js」的 JavaScript 框架,此框架在許多網站上都會用到,包括像 Behance 和 9Gag 這類熱門網站。使用 Vue.js 框架的網站很可能面臨內容遭到刪除的風險,更慘的是,也許已經遭到刪除。
根據一名 GitHub 使用者對 node-ipc 程式碼的研究指出,該套件內被插入的惡意程式碼會根據某個線上 API 查詢到的使用者 IP 地理位置來刪除檔案。
這樣的惡意行為在開放原始碼社群遭到嚴重抨擊,所以後來至少出現了一個維護分枝版本,並由不同的人負責維護。
開放原始碼專案供應鏈的相依性及安全性,確實是個日益嚴重的問題,例如另一個與政治無關的案例:一位名叫「Lance R. Vick」的資安顧問注意到 npm 的 foreach 元件是由一名維護人員獨自管理,然而他的個人電子郵件地址所在的網域,竟然在過期後並未繼續租用。因此這名顧問表示他買下了該網域並宣布他掌控了 foreach 套件,儘管他在事後的專訪中表示他並未實際登入該帳號。這突顯出開放原始碼維護人員帳號安全的問題,關於這一點,Vick 早在 2020 年就已提出質疑。還有另一個我們下面會提到的案例是,某個瀏覽器擴充功能的維護者將其專案賣給第三者,但購買人似乎不懷好意。
俄羅斯時區內的 es5-ext 使用者電腦上出現反戰訊息
Es5-ext 是另一個被人暗中插入反戰訊息的 Node.js 套件。此套件負責實作 ECMAScript 的功能,這套 JavaScript 腳本語言可用來確保網頁能在不同瀏覽器上正常運作。es5-ext 的維護者「medikoo」是一名波蘭居民,他在程式碼中加入了一個名為「postinstall.js」的元件。當這個元件發現使用者的電腦位於某個時區時,就會在電腦上顯示一長串的反戰訊息。不過,由於其判斷地理位置與其他參數的機制不夠精確,因此其他地區的 es5-ext 使用者也有可能意外成為目標。
Medikoo 曾在某個 GitHub 討論串中說明他這麼做的原因,但卻遭到許多其他開發人員的批評。
截至本文撰稿為止,es5-ext 套件依然存在著這段政治訊息。
被修改的 EventSource 函式庫在載入後顯示政治訊息
Event-source-polyfill 是一個負責實作 EventSource API 的 npm 函式庫,專門給不支援此 API 的瀏覽器使用,此函式庫最近也出現了一個 1.0.26 版 ,裡面夾帶了一段政治訊息。3 月 18 日,GitHub 討論版 一名使用者發表了一則貼文提到 EventSource 原始程式碼出現了不當修改。隨後,另一名使用者也在同一討論串中提到了該版本的異常行為。該套件與貼文中提到的其他受政治干擾的開放原始碼專案一樣,都是根據系統時區的設定來判斷是否要顯示某種訊息。當條件符合時,該套件就會在使用者的瀏覽器中顯示反戰訊息。此外,該套件還會試圖將瀏覽器重導到 Change.org 請願網站。
暗藏惡意程式的 The Great Suspender 瀏覽器擴充功能從 Chrome Web Store 下架
針對軟體供應鏈的攻擊確實是一個日益嚴重的問題,然而這類攻擊背後的目的並不一定是政治,有時純粹是為了金錢,例如 Google Chrome 瀏覽器的 The Great Suspender 擴充功能就是一個例子。
跟許多最熱門的 Chrome 瀏覽器擴充功能一樣,The Great Suspender 也是一套開放原始碼元件。這是一套輕量化應用程式,會自動暫停或關閉沒用到的 Chrome 分頁,幫使用者釋出更多系統資源。這套免費應用程式在被 Chrome Web Store 下架並從使用者的瀏覽器自動停用之前已累積超過 200 萬次下載。2020 年 6 月,The Great Suspender 的原維護者將其原始程式碼賣給一個不知名的對象。隨後,新的維護者發布了兩個版本:v7.1.8 和 v7.1.9。
V7.1.8 是發布在 Chrome Web Store 上,但並未發布到 GitHub,此版本會執行某個遠端伺服器上的任意程式碼。根據 GitHub 的一份報告指出,這份新的版本似乎跟惡意程式一樣,被用來從事追蹤與詐騙行動,而且是在使用者不知情的狀況下推送至電腦上。此外它還不會自動接收惡意程式清除更新,換句話說,在 Google 將此惡意程式停用之前,此惡意版本都一直在運作。
目前其維護者發布了一個不含惡意程式碼的 v7.1.9 版,但由於維護者原本就是不良分子,因此惡意程式碼隨時有可能再回到應用程式內。
企業需要加強軟體供應鏈安全來防範這類惡意程式碼的不良後果
不管開發人員對於政治議題有何看法,但透過軟體 (或抗議軟體) 的方式來表達政治理念的作法,將帶來不可預期的後果。假使企業在其產品當中用到了這類被修改過的開放原始碼工具,企業很可能將面臨嚴重的商譽損失,尤其當產品出現他們不知情的惡意行為時。俄羅斯國家銀行 Sberbank 就是一個用到這類開放原始碼軟體的案例,為此,他們警告 用戶不要升級他們的軟體,因為可能會帶來更多網路攻擊。
整體而言,開放原始碼若含有惡意程式將造成人們對開放原始碼軟體的可靠性質疑。而這將阻礙開放原始碼軟體的普及,甚至造成反面效果。因為企業可能因為這類不良事件而認為有必要對程式碼進行審核。
目前已有人開始推行所謂的軟體成分清單 (Software Bill of Materials,簡稱 SBOM) 來解決軟體供應鏈的資安問題。SBOM 的用意是為了將資安更新、軟體版本、軟體修補等等的部署管理流程統一。這份清單可讓企業資安團隊迅速回應軟體供應鏈遭到入侵的事件,並評估其潛在衝擊,進而防範相關風險。此外,企業還可運用軟體組成分析 (Software Composition Analysis,簡稱 SCA) 工具來改善開放原始碼元件的可視性。這也是趨勢科技研究人員目前正積極研究的領域之一,同時我們也曾經探討過這項議題。
帶有政治意圖的程式碼修改,即便是立意良善,也可能帶來不可預期的後果,因為這類程式碼通常是靠檢查時區設定或透過地理定位 API 來判斷是否要觸發政治行為。這類檢查和參數有時並不夠精準,因此萬一不當觸發,很可能將帶來意想不到的後果。而可能造成不當觸發的情況很多,包括:遭到時間同步攻擊、參數遭到竄改、時區設定錯誤、地理定位服務不準確等等。
對於開放原始碼的資安問題,企業可採用提供開放原始碼應用程式可視性與監控的資安解決方案。例如,Trend Micro Cloud One – Open Source Security by Snyk 即可自動發掘企業使用的應用程式內部是否存在開放原始碼相依元件的潛在漏洞與授權風險、判斷其優先次序,並提供相關報表。這套解決方案是 Trend Micro Cloud One 趨勢科技 Cloud One™ – Container Security 防護平台的一環,能與程式碼儲存庫及 CI/CD 流程結合來執行專案掃描,為資安團隊提供相關的分析洞見,藉由更好的開放原始碼問題可視性、追蹤及早期發掘來改善企業的風險管理。
原文出處: How Shady Code Commits Compromise the Security of the Open-Source Ecosystem