LavaMoat 是一款免費且開源的工具,專為任何重視供應鏈安全的 JavaScript 開發團隊所設計。這項由 MetaMask 共同創辦人 Kumavis 所發想的產品,同時解決了 Web3 的安全疑慮,以及開源生態系中長期存在的結構性安全問題。
如果你正在使用 JavaScript(簡稱 JS)進行開發,就必須了解其安全現況及相依套件的風險。JS 工程師鮮少從零開始建構應用程式,通常會將現有的程式碼片段(一般稱為「相依套件」)引入專案中,作為建構模組來使用。這對協作與開發效率來說固然是好事,但如果其中某個相依套件包含惡意程式碼,該怎麼辦?
軟體供應鏈安全涵蓋所有與應用程式相關的環節(例如相依套件),以及參與開發流程的工具(例如建置工具或 CI 系統)。JavaScript 是目前最受開發者歡迎的程式語言,同時也極易受到供應鏈攻擊。這份來自 2017 年的漏洞時間軸顯示,將近一半的攻擊源自 npm——一個廣受使用的開源 JS 套件來源:
資料來源:SonaType
JavaScript 之所以成為攻擊目標,原因在於:
普及性: 前端與後端皆廣泛使用
環境權限: 在執行 JavaScript 的環境中,往往能存取大量系統資源,例如網路存取權限
可變性: 所有內容預設皆可被修改
2018 年的 Copay 錢包駭客事件引起了 Kumavis 對解決此問題的興趣,也成為設計 LavaMoat 的主要參考案例。Copay 是 BitPay 推出的一款自託管比特幣錢包,遭受供應鏈攻擊,導致用戶資金被竊。攻擊者控制了該錢包所使用的某個 npm 相依套件,進而得以發動攻擊。
那麼,解決方案是什麼?目前有幾種論點被提出來解決這個問題。
完全不使用相依套件?不行。
雖然這樣或許更安全,但你真的要放棄開源嗎?那些構成我們共同基礎的公共資源、那些分享與協作的精神?如果你想建構複雜的東西,你真的願意花時間重新發明輪子嗎?
我們也不願意。
隨時審計所有相依套件?不行。
這個想法固然不錯,但你有多少個相依套件?幾百個?幾千個?幾萬個?這根本不切實際——不過,如果你想進行手動審計,LavaMoat 可以幫你優先排查最危險的套件(後續會詳細說明)。
而且,就算你有時間仔細檢視套件的差異,你真的有把握能發現安全漏洞嗎?
這很難說。所以讓我們來探索另一種解決方案:
LavaMoat?可以。
與其完全不使用相依套件,或是隨時審計所有相依套件,不如來看看 LavaMoat 的安全核心——它將套件封裝在獨立的隔離區中,並只賦予它們所需的存取權限。
請記住,惡意程式碼要攻擊你的系統,必須先取得相應的權限。LavaMoat 的核心會逐一檢視你引入專案的第三方程式碼,判斷各相依套件執行所需的權限,並且*只給予那些權限*****。**
LavaMoat 目前正在 MetaMask 保護數千萬名用戶,並在每個開發流程的三個不同階段運作:相依套件安裝、建置,以及執行階段。
為了讓你更直觀地了解,請參考這個相依套件圖視覺化儀表板:
左側列出你的相依套件清單,右側則以神經網路的形式呈現關係圖。顏色依據危險程度的啟發式評估來區分:例如,綠色的套件不會引入任何具有高權限的平台 API。
這裡的核心概念,是幫助你優先排序相依套件的審計工作。
那麼,該如何實作呢?
對應三個開發階段:
安裝:@lavamoat/allow-scripts
建置:lavamoat-node
執行階段:適用於你的打包工具的 lavamoat-x 外掛
這樣就能為惡意程式碼建立一道護城河。
大規模建構軟體
如果你有興趣協助我們,LavaMoat 是開源的!我們正努力為盡可能多的打包工具開發外掛,並希望讓審查政策、以及在賦予套件網路存取權限時設定嚴格限制變得更加容易。歡迎在這裡貢獻你的力量。
也歡迎訂閱我們的開發者電子報以獲取更多最新消息!祝開發愉快。