跳至主內容

慎防惡意或有保安漏洞的第三方開源軟件

發佈日期: 2021年08月04日 3510 觀看次數

第三方開源軟件(包括函式庫、套件和容器映像檔等)應用迅速增長,改變了軟件開發過程。除自家開發的程式碼外,現今大多數應用程式亦會內嵌不同功能的第三方軟件使用。公共程式碼庫成為一個讓世界各地的開發人員使用、託管及共享程式碼的地方。雖然使用第三方軟件確實提高了開發效率和質量,但惡意和有保安漏洞的第三方軟件也同時為應用程式帶來遭受軟件供應鏈攻擊的潛在風險。

 

Synopsys Cybersecurity Research Center 今年4月發表的一份報告指出超過80%的程式碼庫使用有保安漏洞的開源軟件 [1],以及黑客將惡意程式碼或容器映像檔上傳到公共存儲庫的趨勢有所增加。相信隨著第三方開源軟件的普及,軟件開發和維護過程將會成為黑客的攻擊目標。

 

 

惡意開源程式碼庫和容器鏡像

 

除了透過現存的保安漏洞入侵外,黑客亦會試圖在軟件開發階段時入侵,為軟件“製造”保安漏洞,其中一種方法便是將惡意程式碼或影像上傳至軟件套件管理器及容器存儲庫,過去一年曾出現的例子包括:

 

  • 2021 年 6 月,多個Python 編程語言的軟件套件管理器Python Package Index(PyPI)被發現含有惡意挖礦程式碼 [2]
  • 自 2020 年 8 月開始,多個 在 Node Package Manager (npm) 內的JavaScript 套件被發現於開發者電腦裡安裝遠程訪問木馬 (RAT) 或開啟反向指令介面工具(Reverse shell) [3]
  • 2021 年 3 月,在Docker Hub 中發現有至少30 個惡意影像檔(共有 2千萬次下載)用來操作加密挖掘惡意軟件,估計獲利約20萬美元[4]

 

雖然上述事件中的惡意程式碼和影像檔被檢測到後已立即被移除,但是如果開發人員已不小心下載使用,將會帶來重大的保安風險。

 

黑客用來欺騙開發人員下載惡意軟件的手法有2種,分別是透過偽冒名稱和混淆軟件套件管理器

 

1.   偽冒名稱

利用近似的名稱來偽裝成官方套件,例如 PyPI 中的 “Jeilyfish”(偽冒“Jellyfish”)和 npm 中的electorn(偽冒”electron”)。這種手法是基於開發人員有時會打錯英文串法,或直接複製黑客提供的假名稱使用時,誤將惡意程式碼加到開發環境中。

 

2.   混淆軟件套件管理器

除公共存儲庫外,開發人員有時會設立私有存儲庫來存放自家開發的程式碼。 然而,黑客可以利用軟件套件管理器默認操作方式的漏洞,將惡意程式碼的名稱改為與私有存儲庫內的程式碼的名稱相同,但將版本調高,這樣軟件套件管理器便會因惡意程式碼的版本較高而下載使用。

 

 

未修補的保安漏洞

 

根據開放網路軟件安全計畫 (OWASP),使用具有已知漏洞的軟件是 10 大網絡應用程序保安風險之一 [5]。漏洞包括跨網站指令碼、執行程式碼、阻斷服務、資料洩露、SQL 注入和原型污染攻擊。 在2019 年,著名的 npm函式庫 Lodash 被發現存在嚴重的原型污染漏洞,影響了數百萬個專案及大型企業 [6]

大多數大型開源程式碼的開發人員都會積極修復保安漏洞。 然而,使用該程式碼的其他開發人員通常需要額外的時間來測試,確保不會影響自家系統的穩定性後,方才安裝。但如若開發人員根本不知道所有使用中的軟件版本,甚至哪一個版本存在漏洞時,問題會變得更嚴重,特別是對於使用許多開源函式庫和容器影像檔組合的大型系統。

未能及時更新所使用的第三方軟件不僅會增加保安風險,還會使未來的更新更加困難。 尤其是當越來越多的應用程式使用同一個有漏洞的第三方軟件版本來建立時,越遲更新只會增加測試的時間及難度。

 

 

軟件供應鏈攻擊和遞移關聯

 

最近的 SolarWinds 和 Kaseya 保安事故便是軟件供應鏈攻擊的例子[7][8]。黑客是先入侵軟件供應商的應用程式,然後經由該受感染的程式,將惡意軟件植入到其客戶的系統中。供應商除遭受巨大的聲譽損失外,還需要付出極大的資源來跟進受影響客戶的問題和恢復業務。

然而,即使軟件開發人員沒有直接使用那些惡意或有保安漏洞的軟件,但如果該軟件是捆綁在其他一些被使用的套件中,其開發的應用程式仍可能會受到關聯效應的影響,即遞移關聯。若缺乏一個詳細的關聯表,檢測和修復的過程將會變得更加複雜及困難。

 

 

保安建議

 

HKCERT 提醒開發人員注意風險,並採取以下保安建議:

 

  1. 建立保安和漏洞管理政策,涵蓋如何選擇開源程式碼及容器映像檔,以及當中的評估和更新流程;
  2. 整合保安軟件開發框架(SSDF)至軟件開發生命週期(SDLC)中;
  3. 只從官方存儲庫下載第三方軟件,並要進行驗證以確保符合保安標準;
  4. 移除不必要的關聯軟件;只使用僅包含必要功能的客器映像檔;
  5. 小心檢查軟件的英文串法,避免錯誤下載或安裝惡意第三方軟件;
  6. 定期審查及更新所使用的第三方軟件清單和關聯表;
  7. 使用具有自動警示和修復的解決方案,以掃描第三方軟件中的保安漏洞。

 

 

參考資料

[1] https://www.synopsys.com/blogs/software-security/open-source-trends-ossra-report/

[2] https://heimdalsecurity.com/blog/malicious-pypi-packages-used-to-mine-cryptocurrency/

[3] https://www.zdnet.com/article/malicious-npm-packages-caught-installing-remote-access-trojans/

[4] https://unit42.paloaltonetworks.com/malicious-cryptojacking-images/

[5] https://owasp.org/www-project-top-ten/2017/A9_2017-Using_Components_with_Known_Vulnerabilities

[6] https://www.ibm.com/support/pages/node/1164388

[7] https://en.wikipedia.org/wiki/SolarWinds#2019%E2%80%932020_supply_chain_attacks

[8] https://en.wikipedia.org/wiki/Kaseya_VSA_ransomware_attack

相關標籤