Categories
程式開發

NPM的安全困擾:僅有9.27%的npm開發者使用2FA


NPM的安全困擾:僅有9.27%的npm開發者使用2FA 1

作為JavaScript生態系統中最大的包管理器,npm正遭遇安全困擾。其開發人員中,僅有9.27%的人使用2FA,這意味著絕大多數npm開發人員的賬戶處於不安全狀態。一旦黑客竊取開發人員賬戶,後果相當嚴重。

近日,npm安全副總裁Adam Baldwin發推文稱,npm JavaScript庫的所有維護者中,只有9.27%的人使用2FA(雙因素認證)來保護其賬戶。

NPM的安全困擾:僅有9.27%的npm開發者使用2FA 2

這一數字竟如此之低!

Adam Baldwin表示,開發人員賬戶安全已經成為npm安全團隊關注的主要問題。

從安全角度考慮,npm安全團隊希望2020年,有更多的npm開發者使用2FA。

2FA,即雙因素認證,它是一種相對更安全的認證方法。與傳統單一的密碼認證不同,2FA使用兩種不同的元素,合併在一起,來確認使用者的身份。比如,我們常用的手機短信驗證碼驗證就是2FA的一種形式。

NPM,全稱是Node Package Manager。它不僅是JavaScript生態系統中最大的JavaScript包管理器,而且還是所有編程語言中最大的包存儲庫,擁有超過350000個索引庫

此外,它每個星期大約有30億次的下載量,包含超過600000個包(package]。

NPM的安全困擾:僅有9.27%的npm開發者使用2FA 3

而這種“地位”和影響力,也讓npm成為供應鏈攻擊的主要目標。黑客會入侵開發人員的npm賬戶,從而在其庫中插入惡意代碼。

最近幾年,這類事件層出不窮:

  1. 2019年7月,有開發者在purescript npm 安裝程序中發現一些惡意代碼。原來是有攻擊者獲取了@shinnn(purescript npm 安裝程序原始作者)的npm賬戶,隨後在purescript npm安裝程序中插入惡意代碼。
  2. 2019年6月,黑客向 npm 發布一個​​“useful”的包(electron-native-notify),等到它被目標(某應用程序)使用後更新包內容,加入惡意代碼。而某應用程序又是 Agama 加密貨幣錢包的一部分。
  3. 2018年11月,npm 下載量超過 200 萬的 package 被注入了惡意代碼,黑客利用該惡意代碼訪問熱門 JavaScript 庫,目標是 copay(開源比特幣錢包)及其衍生產品的用戶,以此竊取用戶的數字貨幣。
  4. 2018年7月,黑客利用惡意代碼破壞ESLint庫。該惡意代碼被設計用來竊取其他開發人員的npm證書。
  5. 2018年5月,黑客試圖在名為getcookies的流行npm包中隱藏後門。

一份發表的學術研究表明,大多數npm軟件包“彼此交織在一起”,並且入侵20個備受矚目的開發人員賬戶,就可能使黑客植入被整個npm生態系統一半使用的惡意代碼。

因此,確保npm庫所有者的賬戶安全應該是未來的重中之重。

或許,Mozilla的做法提供了一種不錯的方式。 Mozilla最近宣布,從2020年1月起,所有Firefox瀏覽器擴展程序的開發人員都必須為其賬戶啟用2FA,才能更新其擴展程序。

此前,InfoQ在《npm安全事故頻頻發生,程序員都絕望了》的文章中報導過,有一位名叫Sebastian K的網友認為 npm(客戶端和registry)是一個有缺陷的系統,需要完全替換,新系統應具有這些功能:

  • 沒有 unscoped 的包;
  • 作用域是1 對 1綁定到單個用戶或組織;
  • 發布包必須要雙因子驗證,包必須通過 GPG 簽名;
  • 除registry的維護人員外,任何人都不允許取消發布包;
  • 不允許在最終版本中使用模糊依賴項版本,我曾多次目睹在新克隆之後,運行 npm install 時修改項目的包鎖定文件,下載了比鎖定文件中指定的更高版本的可傳遞依賴項。

此外,npm安全副總裁Adam Baldwin還披露了一些其他數據

  • 2019年發布的安全公告:595
  • npm數據庫的安全警報總數:1285
  • 錯誤吊銷到the registry或GitHub的npm令牌數:737