新聞消息 ·

npm 供應鏈連續出事:我們的產品已完成檢查,不受影響

今年三月和八月,全世界工程師每天都在用的幾個程式零件被人動了手腳。你不用會寫程式也看得懂這件事,因為它跟你公司正在用的系統有關。

先講「套件」是什麼

現在的軟體幾乎沒有人從零寫到好。就像蓋房子不會自己燒磚,工程師會把別人寫好、公開分享的功能模組拿來組裝,這些模組叫做套件。npm 是全世界最大的套件市集,一個熱門套件每週被下載上億次很正常。

好處是快。風險是:只要其中一塊磚被掉包,用到那塊磚的每一棟房子都會出問題。這就叫供應鏈攻擊——攻擊者不直接打你,他打你用的零件。

這兩次發生了什麼

三月三十一日,axios。 這是負責處理網路連線的套件,每週下載量約一億次。攻擊者拿到維護者的帳號,發布了兩個動過手腳的版本,裡面夾帶一段會在 Windows、macOS、Linux 上裝後門的程式。惡意版本在架上約三小時,這段時間內任何人重新安裝就會中招。(axios 官方事後報告)

八月四日,keyv 和一整批相關套件。 攻擊者入侵維護者的 GitHub 帳號,直接改程式碼再發新版本。這次的惡意程式會掃描電腦裡的檔案,偷走 npm、GitHub、AWS、Stripe、Slack 的存取金鑰和 SSH 金鑰,然後拿偷到的金鑰去感染更多套件。最後擴散到 434 個套件、1,381 個版本,合計每月安裝量超過二十億次。(Aikido Security)

換句話說,這已經不是有人偷偷塞一支病毒,而是會自己繁殖的東西。

我們的產品:已完成檢查,不受影響

消息出來之後,我們把 PCIRCLE 自己營運的產品全部盤了一次——這個網站、PCircle SimpleERP、OpenBiz-Booking,逐一比對實際安裝的版本紀錄與這兩起事件的受影響版本清單。

結論:沒有任何一項用到被植入惡意程式的版本。

補充一點:這裡比對的是「實際裝了哪一版」,不是「大概應該沒事」。這兩次的惡意版本都有明確的版本編號,能不能對得上,是查得出來的事實,不是判斷題。

你可以做的三件事

你不需要自己看程式碼,但可以問對問題。

一、問你的系統廠商一句話。 「這次 npm 的事件,我們的系統有沒有受影響?」對方應該要能給你明確的是或否,以及依據。「應該還好」不算答案。

二、如果答案是「有」,金鑰全部要換。 那台機器上的密碼、API 金鑰、資料庫連線資訊,都要當作已經外流,一律更換。八月那次的惡意程式,主要目的就是偷這些東西。

三、問他們版本怎麼管。 把版本寫死(而不是每次安裝都自動抓最新的)就能擋掉這種只有三小時的突襲——因為你的系統根本不會去拿那個新版本。這是很基本的做法,但不是每一家都在做。

這件事不會是最後一次

套件市集的方便是真的,風險也是真的,而且攻擊的規模一次比一次大。重點不是不用別人的零件——沒有人做得到——而是有沒有人在替你盯著這件事、出事的時候能不能在一天之內給你答案。

想聊聊你公司現在用的系統該怎麼盤,第一次諮詢不收費