1. 程式人生 > >千萬下載量開源軟體託管給陌生人 植入惡意程式碼竊取使用者密幣

千萬下載量開源軟體託管給陌生人 植入惡意程式碼竊取使用者密幣

0x00 事件背景

2018年11月21日,名為 FallingSnow的使用者在知名JavaScript應用庫event-stream在github Issuse中釋出了針對植入的惡意程式碼的疑問,表示event-stream中存在用於竊取使用者數字錢包的惡意程式碼。

360-CERT從該Issuse中得知,大約三個月前,由於缺乏時間和興趣,event-stream原作者@dominictarr將其開發交給另一位名為@Right9ctrl的程式設計師。

隨後,Right9ctrl釋出了包含新依賴關係的Event-Stream 3.3.6 – Flatmap-Stream0.1.1。 其中,Flatmap-Stream v0.1.1 正是是包含惡意程式碼的npm package。 據分析,該package中的惡意程式碼主要作用是:它將竊取使用者的錢包資訊,包括私鑰,並將其傳送到copayapi.host的8080埠上,目前npm官網已經下架處理。

在實際生產應用中,event-stream庫屬於一個跨平臺的應用,影響面會比較廣泛。

360-CERT建議相關使用者,特別是網際網路企業,應該針對自身IDC線上、研發、辦公網環境進行安全評估。

0x01 影響範圍

Event-Stream 3.3.6版本

這是一個非常受歡迎的JavaScript庫,在npm.org儲存庫上每週下載量超過200萬。

惡意依賴已經存在了2.5個月內未被發現。

9月1日至今已被下載2225w次

npm 已經將惡意的Flatmap-Stream進行下架處理,已經無法從npm中再進行相關的安裝,以減小影響。

但已經安裝的Event-Stream請及時處理,很有可能已經在遭受影響。

360CERT判斷此次事件的影響範圍大,危害等級高。建議廣大使用者及時根據修復建議進行修復和自查。

0x02 修復建議

可以通過如下方式對自己所使用的event-stream進行檢測

$ npm ls event-stream flatmap-stream
...
[email protected]
...

可以對event-stream進行降級版本到3.3.4以緩解此事件帶來的影響

降級方式如下

npm install [email protected]

再通過上述命令可以檢查是否降級成功

360CERT將在CERT官網隨後給出收影響package的相關統計,敬請期待。

0x03 程式碼分析

根據flatmap-stream/package.json匯出的main

"main": "index.min.js",

在這其中有一段index.js所沒有的額外程式碼

這段程式碼的主要作用翻譯如下

解密的n[0]

解密的n[1]

其中

惡意程式碼主要作用 通過重新覆蓋bitcore-wallet-client/lib/credentials.js中getKeysFunc方法進行資訊的傳送

所使用的資訊如下:

傳送資訊所使用的公鑰

"-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxoV1GvDc2FUsJnrAqR4C\nDXUs/peqJu00casTfH442yVFkMwV59egxxpTPQ1YJxnQEIhiGte6KrzDYCrdeBfj\nBOEFEze8aeGn9FOxUeXYWNeiASyS6Q77NSQVk1LW+/BiGud7b77Fwfq372fUuEIk\n2P/pUHRoXkBymLWF1nf0L7RIE7ZLhoEBi2dEIP05qGf6BJLHPNbPZkG4grTDv762\nPDBMwQsCKQcpKDXw/6c8gl5e2XM7wXhVhI2ppfoj36oCqpQrkuFIOL2SAaIewDZz\nLlapGCf2c2QdrQiRkY8LiUYKdsV2XsfHPb327Pv3Q246yULww00uOMl/cJ/x76To\n2wIDAQAB\n-----END PUBLIC KEY-----";

傳送資訊的地址(寫死的域名和ip)

域名 copayapi.host IP 111.90.151.134

0x04 時間線

2018-11-21 @FallingSnow在專案Issue中提出問題

2018-11-27 360CERT釋出預警報告

2018-11-27 360CERT釋出分析報告

 

0x05 參考連結

  1. 黑客植入後門在流行的JavaScript庫進行比特幣資金竊取

  2. Malicious code found in npm package event-stream downloaded 8 million times in the past 2.5 months | Snyk

  3. I don’t know what to say. · Issue #116 · dominictarr/event-stream

  4. add flat map · dominictarr/[email protected]

  5. npm-stat: event-stream