安全文章首頁
·6 分鐘供應鏈攻擊SCA開源

開源供應鏈攻擊,我們團隊也不是例外

只要一個npm/PyPI套件遭到感染,使用它的所有專案就會跟著遭殃。供應鏈攻擊實際上是如何發生的,以及3層防禦。


「我又沒寫這段程式碼,為什麼我的服務會被攻破?」——這是供應鏈攻擊的典型疑問。問題不在你自己寫的程式碼,而在你安裝的別人的程式碼

什麼是供應鏈攻擊

我們的專案通常依賴數十到數百個開源套件(npm、PyPI、RubyGems等)。攻擊者只要感染其中一個套件,所有安裝它的專案就會自動遭到感染。這比直接攻擊你的程式碼有效率得多,因此這種手法近幾年大幅增加。

實際上是這樣發生的

  1. 打字搶注(typosquatting):上傳與熱門套件名稱相似的假套件(例如lodashiodash),等人不小心裝錯
  2. 維護者帳號遭劫持:攻擊者奪取一個老舊套件的管理員帳號,在原本正常的套件中偷偷加入惡意程式碼並發布新版本
  3. 相依套件混淆(dependency confusion):把和公司內部套件同名的套件上傳到公開登記處,誘使建置系統抓取公開(惡意)版本而非內部版本

以上三種情況,都只需要開發者像平常一樣執行`npm install`就會中招。並不是做了什麼可疑的操作。

為什麼小團隊更脆弱

大公司通常會有內部登記處鏡像、套件核准流程。相對地,獨立開發者或小型團隊通常裝完相依套件後就再也不會回頭檢查。 再加上AI程式碼生成工具,只要有需要的功能,往往不太驗證就會建議安裝新套件,讓暴露面更大。

3層防禦

  1. 提交lockfile並以固定版本安裝 — 沒有package-lock.json/pnpm-lock.yaml的話,同一份程式碼每次可能會安裝到不同版本。
  2. 自動掃描相依套件漏洞 — 定期,理想上是每次部署,確認是否使用了含已知漏洞(CVE)的版本。
  3. 升版時先瀏覽一次變更內容 — 尤其是最近換過維護者、或下載量相對歷史很短的套件,更新前先看一眼diff,能防止大事故。

供應鏈攻擊不是因為「我做錯了什麼」而發生,而是信任的別人的程式碼反過來背叛你的事故。所以防禦的對象也不該只是「我的程式碼」,而應該是「我所使用的所有他人程式碼」

WhiteHat Code會掃描儲存庫的相依套件,找出含有已知漏洞的套件,並告訴你升級路徑。自動掃描是免費的

面對 AI 攻擊,用 AI 做好準備。

掃描

安全文章