npm Inligtingsdief

Nuwe npm Infostealer-ontdekking: Nyx ​​Stealer kaap Discord-sessies

TL; DR

Die Xygeni Sekuriteitsnavorsingspan het 'n gesofistikeerde npm-inligtingsdiefveldtog geïdentifiseer wat deur twee kwaadwillige pakkette gelewer is: konsolofy en selfbot-lofy.

Die nuutste weergawe (consolelofy@1.3.0) integreer 'n 216KB AES-geënkripteerde vrag wat tydens looptyd ontsyfer en uitgevoer word via vm.runInNewContext()Omdat die kwaadwillige logika volledig geïnkripteer is, kan statiese skandeerders wat op stringinspeksie staatmaak, nie die gedrag daarvan waarneem tot uitvoeringstyd nie.

Sodra dit ontsyfer is, die vrag, intern gebrandmerk Nyx Steeler, teikens:

  • Discord-verifikasietokens
  • 50+ blaaierbewyswinkels
  • 90+ kriptogeldeenheid-beursie-uitbreidings
  • Roblox, Instagram, Spotify, Steam, Telegram en TikTok-sessies
  • Discord-lessenaarkliënt-volharding

Al 20 weergawes oor beide pakkette is aangemeld en as kwaadwillig bevestig.

Tegniese oorsig van hierdie npm-inligtingsdief

Anders as tradisionele installasietyd-wanware, maak hierdie veldtog staat op 'n runtime dekripsiemodel.

Daar is:

  • Geen kwaadwillige preinstall or postinstall hooks
  • Geen ooglopende netwerkoproepe tydens installasie nie
  • Geen logika vir die oes van gewone teksbewyse nie

Die vrag aktiveer wanneer die module ingevoer word. Die hele kwaadwillige inhoud word geïnkripteer en materialiseer eers in die geheue tydens looptyd.

Hierdie ontwerp vermy spesifiek opsporing tydens pakketinstallasie.

Hoe hierdie npm-inligtingsdief werklik uitgevoer word

Voordat ons ontleed wat Nyx Stealer steel, moet ons verstaan hoe dit uitvoer.

Die kwaadwillige logika binne hierdie npm-inligtingsdief volg 'n konsekwente patroon:

'n Klein laaier dekripteer 'n groot geïnkripteerde vrag en voer dit dinamies binne 'n Node.js VM-konteks uit.

Hierdie ontwerp is doelbewus. Die aanvaller versteek nie funksionaliteit agter verdoeseling alleen nie, hulle is die verwydering van die kwaadwillige kode van statiese sigbaarheid heeltemal.

Hoëvlak-uitvoeringsmodel

Op 'n hoë vlak doen die omhulsel vier dinge:

  • Lei 'n AES-sleutel af van 'n hardgekodeerde wagwoordfrase met behulp van SHA-256
  • Dekripteer 'n groot heksadesimale kodeteks met behulp van AES-256-CBC
  • Voer die gedekripteerde JavaScript uit met behulp van vm.runInNewContext()
  • Verskaf 'n sandput wat steeds kragtige looptydprimitiwe blootstel

Kerntegniek Opsomming

Komponent Konfigurasie / Waarde
Algoritme AES-256-CBC
Sleutel afleiding SHA-256 (wagwoordfrase)
Inisialiseringsvektor (IV) 16 grepe van 0x00
Uitvoering vm.runInNewContext(gedekripteer, sandput)

Krities, die sandput gaan deur:

  • require
  • process
  • Buffer
  • timers
  • module-uitvoere

Dit beteken dat die gedekripteerde vrag volle vermoë behou om:

  • Kweekprosesse
  • Lees en skryf lêers
  • Maak netwerkoproepe
  • Wysig plaaslike toepassings

Hierdie is nie 'n beperkte VM nie. Dit is 'n VM wat as 'n uitvoeringstrampoline gebruik word.

Looptyd-enkripsiepatroon (kernuitvoeringsmeganisme)

Die laaier is klein.
Die kwaadwillige liggaam is nie.

Hieronder is die uitvoeringspatroon wat binne die pakket gevind word:

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); }

Waarom hierdie sake

Die gedekripteerde vrag:

  • Is nie bestaan ​​in gewone teks binne die npm-pakket
  • Is onsigbaar vir eenvoudige grep of statiese stringskandering
  • Materialiseer slegs in die geheue tydens looptyd
  • Voer uit met volle Node-looptydvermoëns

Hierdie AES + VM-uitvoeringskombinasie is 'n sterk gedragsaanwyser van 'n npm-inligtingsdief probeer statiese inspeksie ontduik.

Met ander woorde:

As jy die pakketbronboom skandeer, sien jy nie 'n diewer nie.
Jy sien 'n dekripteerder.

Wat gebeur na dekripsie

Sodra dit uitgevoer is, loods Nyx Stealer parallelle data-insamelingsgolwe.

Golf 1: Onttrekking van blaaierbewyse

Die wanware:

  • Laai 'n Python-looptyd af vanaf NuGet CDN
  • Installeer kriptografiese biblioteke
  • Onttrek Chromium-gebaseerde geloofsbriewe-winkels
  • Dekripteer DPAPI-beskermde geheime

In plaas daarvan om inheemse bindings saam te stel, gebruik dit PowerShell om Windows DPAPI direk te bel.

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'); }

Hierdie benadering:

  • Vermy samestellingsartefakte
  • Gebruik inheemse Windows-kripto-API's
  • Meng in administratiewe gereedskap

Dit is OS-vlak geloofsbriewe-dekripsie, nie skraap nie.

Golf 2: Discord-token-dekripsie

Die steeler is protokolbewus. Dit verstaan ​​Discord se geïnkripteerde tokenformaat.

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'); }

Operasionele vloei:

  • Onttrek die hoofsleutel van Discord Local State
  • Dekripteer hoofsleutel via DPAPI
  • Dekripteer AES-GCM-token-blobs
  • Valideer tokens teen Discord API
  • Verryk met Nitro, kentekens, faktuurinligting

Dit is nie generiese geloofsbriewe-storting nie. Dit is protokolbewuste sessie-kaping.

Golf 3: Teikenstelling van kriptogeldeenheid-beursies

Die npm-inligtingsdief noem:

  • 90+ blaaierbeursie-uitbreidings
  • 27 lessenaar beursies
  • Koue beursiepaaie
  • Exodus saadlêers

Voorbeeld saaddekripsiepoging:

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'); }

Indien suksesvol, is die beursie-kompromitering onmiddellik en onomkeerbaar.

Dit verteenwoordig die veldtog se hoogste waarde monetiseringsvektor.

Volharding via Discord Desktop Injection

Nadat geloofsbriewe ingesamel is, probeer Nyx Stealer volharding deur die plaaslike te wysig. Onenigheid kliënt.

teiken:

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

Operasionele volgorde

Die inligtingsdief voer die volgende stappe uit:

  • Beëindig lopende Discord-prosesse
  • Vind geïnstalleerde Discord-variante (Stable, Canary, PTB) op
  • Oorskryf discord_desktop_core/index.js
  • Spuit aanvaller-beheerde webhook-logika in
  • Herbegin Discord

Dit verseker dat toekomstige Discord-sessies outomaties vars verifikasietokens lek.

Dit is belangrik dat hierdie volharding nie staatmaak op geskeduleerde take of registerwysigings nie. Dit maak gebruik van toepassingsvlak-kodewysiging, 'n meer onopvallende benadering.

Selfs al word die kwaadwillige npm-pakket later verwyder, bly die Discord-kliënt gekompromitteer.

Tegniese vergelyking: Wettige Selfbot vs npm Infostealer

Komponent Wettige Biblioteek Nyx npm Inligtingsdief
Enkripsie Geen Volledige AES-geënkripteerde vrag
Looptyd-VM Nie nodig vm.runInNewContext uitvoering
Toegang tot geloofsbriewe Slegs Discord API Blaaier, beursies, DPAPI
Eksterne aflaaie Geen Python-looptyd via NuGet
Volharding Geen Discord-kliëntinspuiting
monetization Bot-outomatisering Herverkoop van geloofsbriewe

Die enkripsielaag alleen skei hierdie veldtog reeds van 'n tipiese oopbronvurk.

'n Wettige Discord-selfbot het geen rede om sy hele kodebasis te enkripteer, PowerShell te skep om toegang tot DPAPI te verkry, eksterne looptye af te laai of die interne werking van rekenaartoepassings te wysig nie. Wanneer daardie vermoëns binne 'n afhanklikheid verskyn wat beweer dat dit Discord-interaksies outomatiseer, word die argitektoniese wanverhouding onmoontlik om te ignoreer.

Vanuit 'n ondersoekoogpunt laat hierdie npm-inligtingsdief spore oor verskeie lae. Die mees betroubare aanwysers is egter nie hardgekodeerde URL'e of spesifieke lêerpaaie nie, aangesien dit tussen weergawes kan verander. In plaas daarvan is die duursame seine struktureel.

Op pakketvlak is die sterkste rooi vlag die kombinasie van 'n groot geïnkripteerde vrag en 'n looptyd-dekripsie-omhulsel wat onmiddellik uitgevoer word via vm.runInNewContext()Alhoewel enkripsie alleen nie inherent kwaadwillig is nie, is die gebruik van AES-dekripsie gevolg deur dinamiese VM-uitvoering binne 'n Discord-hulpprogramma hoogs anomaal.

Op gasheervlak sluit verdagte patrone onverwagte DPAPI-dekripsie-aktiwiteit, proses wat vanuit 'n Node.js-afhanklikheidskonteks ontstaan, en wysiging van plaaslike toepassingslêers wat nooit deur derdeparty-biblioteke verander moet word nie. Net so verteenwoordig uitgaande webhook-styl kommunikasie wat deur 'n ontwikkelingsafhanklikheid geïnisieer word, op die netwerklaag nog 'n betekenisvolle anomalie.

Met ander woorde, die opsporingsoppervlak is nie 'n enkele aanduiding van kompromie nie. Dit is die korrelasie van enkripsie, looptyd-uitvoering, toegang tot geloofsbriewe en volhardingsgedrag wat die bedreiging openbaar.

Opsporing en Versagting met Xygeni

npm Inligtingsdief

Hierdie npm-inligtingsdief is geïdentifiseer deur Xygeni se vroeë waarskuwing oor wanware (MEW) deur gelaagde gedragskorrelasie eerder as eenvoudige handtekeningooreenstemming.

In plaas daarvan om na bekende kwaadwillige stringe te soek, evalueer MEW strukturele afwykings oor die volledige bronboom. In hierdie geval het opsporing ontstaan ​​uit die konvergensie van verskeie seine: 'n ingebedde AES-dekripsierroetine in die module-toegangspunt, onmiddellike uitvoering binne 'n VM-konteks, en 'n duidelike vermoë-tot-voorneme-wanverhouding.

Dit is belangrik dat geeneen van hierdie seine alleen kwaadwillige opset bewys nie. Wanneer hulle egter saam geanaliseer word, ontbloot hulle 'n poging om looptydgedrag te verberg. Hierdie gelaagde benadering verminder vals positiewe aansienlik terwyl dit hoë-betroubaarheids-voorsieningskettingbedreigings identifiseer.

Verder illustreer hierdie geval waarom installasie-tyd-inspeksie alleen onvoldoende is. Die kwaadwillige logika is nie in lewensiklusskripte geleë nie. Dit aktiveer eers nadat die module gelaai het en word eers sigbaar sodra dit in die geheue gedekripteer is. Daarom vereis effektiewe verdediging enkripsiebewuste analise, gedragspatroonherkenning en deurlopende afhanklikheidsmonitering na installasiegebeurtenisse.

Registerverwydering is reaktief. Looptydbewuste analise is voorkomend.

Waarom hierdie npm-inligtingsdief saak maak

Nyx Stealer verteenwoordig 'n strukturele evolusie in npm-gebaseerde wanware.

Histories het baie kwaadwillige pakkette staatgemaak op sigbare installasietyd-skripte of ooglopende geloofsbriewe-eksfiltrasie-eindpunte. In teenstelling hiermee enkripteer hierdie veldtog sy vrag, stel uitvoering uit na looptyd, benut wettige bedryfstelsel-API's en vestig volharding binne vertroude toepassings.

Gevolglik hoef die aanvaller nie die npm-infrastruktuur self te benut nie. In plaas daarvan slaag die aanval omdat afhanklikheidsinstallasie vertroue impliseer. Ontwikkelaars neem aan dat die invoer van 'n biblioteek 'n veilige operasie is, veral wanneer dit homself as 'n geloofwaardige vurk van 'n gewilde instrument voordoen.

Soos ekosisteme aanhou groei en vurke vermeerder, word daardie implisiete vertrouensgrens 'n toenemend aantreklike aanvalsoppervlak. Daarom vereis verdediging teen moderne npm-inligtingsteelers die herkenning van argitektoniese patrone eerder as om na statiese stringe te soek.

Uiteindelik versterk hierdie veldtog 'n kritieke les in software supply chain securityDie gevaarlikste bedreigings is nie dié wat met die eerste oogopslag kwaadwillig lyk nie, maar dié wat struktureel wettig lyk totdat die looptyd hul ware gedrag openbaar.

sca-tools-sagteware-samestelling-analise-gereedskap
Prioritiseer, herstel en beveilig jou sagtewarerisiko's
Kry jou gratis rekening.
Geen kredietkaart benodig nie.

Beveilig u sagteware-ontwikkeling en -lewering

met Xygeni-produksuite