當前位置:
首頁 > 科技 > 高達 800 萬次下載量的 npm 包被黑客篡改了代碼,你的設備或正成為挖礦機

高達 800 萬次下載量的 npm 包被黑客篡改了代碼,你的設備或正成為挖礦機

今天,不少開發者「原地爆炸」,因為一個廣泛使用的 NPM 庫 event-stream 突然被發現包含一個名為flatmap-stream 的依賴項,而這個依賴項被植入了竊取比特幣的後門,這意味著使用到該模塊的開發者們,你們的設備或許早已在自己不知情的情況下變成了挖礦機。

我們是怎麼一步一步掉坑的?

我們都知道,event-stream 是一個用於處理 Node.js 流數據的 JavaScript npm 包,它使得創建和使用流變得容易,正是因此,它也受到了廣大開發者的歡迎,目前這個庫每周有 200 萬的下載量,被包括財富五百強在內的大小企業使用。

然而不怕神一般的對手,就怕「小豬佩奇」一樣的隊友。數月前,在 GitHub 上這個庫的維護者@dominictarr 因為缺乏時間和興趣無法繼續維護這個庫了,於是就將該庫轉讓給了一個完全不認識卻又想要維護的陌生人@right9ctrl ,接而不少開發者的噩夢就此開始了。

原作者@dominictarr:

他發郵件給我,說他想維護這個模塊,於是我把模塊所有權移交給了他。我沒有從這個模塊得到任何回報,而且我已經好久不使用這個模塊了,大概有好幾年了吧。

今年 9 月 8 日,新維護者@right9ctrl 開始了初步性的動作,首先釋出了event-stream3.3.6 版本的更新,並在其中加入了一個全新的模塊——flatmap-stream,彼時這個模塊中並沒有惡意功能。

9 月 16 日,@right9ctrl 重寫了代碼並刪除了對flatmap-stream 的依賴,之後又推出新版本,這意味著更新不會自動升級。

10 月 5 日,flatmap-stream 0.0.1 版本被一個名為「hugeglass」的用戶推送到了 NPM。而這次釋出的更新中該模塊就被加入了竊取比特幣錢包並轉移出餘額的功能。

因此,自 10 月 5 日以來,任何通過event-stream 庫並使用被植入惡意代碼 flatmap-stream 的開發者都可能受到惡意腳本的攻擊。而據統計,自 2018 年 9 月更新以來,惡意包已下載近 800 萬次。且原作者也無奈地表示,自己也沒有許可權去修改。

專門針對比特幣的後門

這一事件之所以會在兩個半月之後被發現,還是因為flatmap-stream 中的惡意代碼使用了一個在 Node 10 中被棄用的 API。GitHub 上的用戶 Jayden Seri 在運行 Node 代碼時發現了該警告,並在其中一個包c(https://github.com/remy/nodemon/issues/1442)上提出了疑問,該包將flatmap-stream 作為傳遞依賴關係引入。

後來,加州州立大學富勒頓分校的計算機科學專業學生 Ayrton Sparling(GitHub @FallingSnow)也同樣發現了這一問題,他對event-stream模塊添加了 flatmap-stream 作為依賴項,然後包含針對另一個包 ps-tree 的注入代碼。

最終發現 flatmap-stream@0.1.1 版本中的惡意代碼,顯然是試圖從 Dash Copay 比特幣錢包中竊取比特幣。flatmap-stream 這個模塊在 GitHub 上託管,並通過 Node 包管理器(NPM)分發,而這個惡意代碼也很難被發現,因為 flatmap-stream 模塊已加密,如今它於本周一被 NPM 官方從列表中刪除。

據外媒The Register 報道,新的 NPM 發言人表示:「今天上午 9 點 18 分,子依賴flatmap-stream 被刪除,並且在今天上午 9:30,NPM Inc.接管了event-stream 項目的控制權。「

而針對上文用戶發現惡意代碼試圖從 Dash Copay 比特幣錢包中竊取比特幣一事,Copay 公司一開始否認了Copay 開發的錢包應用在其代碼中使用了 event-stream 依賴庫,但是最後又承認它釋出的應用包含了後門版本的 event-stream。該公司稱使用 versions 5.0.2 到 5.1.0 的用戶受到了後門影響。使用這些版本的用戶應該假定他們的私鑰已經被竊取了,需要儘可能快的升級到 5.2.0 版本。

面對後門版本,開發者們中招了怎麼辦?

目前對於開發者受到此漏洞的影響程度尚未可知,但是當前我們的首要任務還是檢查自己是否使用了相關的惡意庫,例如運行以下代碼:

如果在輸出裡面包含了 flatmap-stream 則說明你也可能被攻擊。

倘若確認受到了影響,接下來你首先要做的是從應用程序中刪除惡意軟體包,可以通過恢復到 event-stream 版本 3.3.4 來執行此操作。

此外,如果你的應用程序使用惡意庫並處理了比特幣,請檢查在過去 3 個月內的活動,以查看是否有任何已開採或轉移的比特幣沒有進入自己的錢包。

如果你的應用程序沒有竊取到比特幣但特別敏感,建議你也要檢查在過去 3 個月內的活動是否有任何可疑現象,特別是在網路上發送到非預期目的地的數據。因為黑客或許沒有通過代碼竊取到比特幣,但也有可能是在監控你的應用程序。

與此同時,對於不少網友反映的前端主流框架 Vue 的 Vue-cli 中也使用了 event-stream 這個依賴問題,今天 Vue 作者尤雨溪(微博@尤小右)在微博回應表示:

關於 npm event-stream 包的安全問題,Vue CLI 對其依賴關係僅在用 UI 終止任務時存在,已創建項目通過純 CLI 使用的不受影響。為徹底杜絕問題,建議重裝全局的 @vue/cli。

反思

在這一事件發生後,不少網友痛批原作者@dominictarr 親手將項目交到了黑客手中,且還沒有在社區中向大家告知有關 event-stream 項目所有權變更的通知。還有一部分網友表示,開源軟體許可明確表示軟體作者對軟體不提供保證也不承擔任何責任。但值得注意的是,在開源的世界中,在原作者缺乏時間或精力的情況下,轉移所有權給他人也是一種相對普遍的做法。如果真的要問責,開發者要怪也只能怪自己信任代碼,只能怪黑客騙取了所有人的新任。

對此,NPM 安全主管 Adam Baldwin 也回應稱:「基於我們目前尚未完成的分析,早期跡象表明這是對比特幣平台的極具針對性的攻擊。」正是如此有針對性的攻擊,Baldwin 預計其影響將是微乎其微的。

但是整體而言,近年來,像 NPM 和其他代碼存儲庫(如 Python 的 PyPI 和 Ruby 的 RubyGems)由於其開放性可以為許多業餘開發者和缺乏資金的創業者提供很大的幫助,但是也極為容易受到攻擊。儘管不斷增加自動漏洞掃描和報告機制等防禦措施,但對於開源軟體,開發者們仍可以自由發布未經修復的代碼,風險不大可能消失。

當被問及將來如何避免這種情況時,Baldwin 承認,無法維護的代碼和轉移代碼所有權都會帶來潛在的問題。他認為 NPM 社區如果為了控制且識別惡意代碼以致讓其他人都不能發布代碼,那麼將損害社區發展。

「當前需要做的是讓維護人員和社區共同迅速跟進。」Baldwin 如是說。

對此,你怎麼看?是否有更好的建議?歡迎下方留言分享你的看法。

參考:

https://snyk.io/blog/malicious-code-found-in-npm-package-event-stream

https://medium.com/@cnorthwood/todays-javascript-trash-fire-and-pile-on-f3efcf8ac8c7

https://www.theregister.co.uk/2018/11/26/npm_repo_bitcoin_stealer/

微信改版了,

想快速看到CSDN的熱乎文章,

趕快把CSDN公眾號設為星標吧,

打開公眾號,點擊「設為星標」就可以啦!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

Python 爬取 B 站數據分析,宋智孝李光洙誰最受中國粉絲喜愛
哪種 Python 程序員最賺錢?

TAG:CSDN |