TL; DR
Xygeni қауіпсіздік зерттеу тобы екі зиянды пакет арқылы жеткізілетін күрделі npm infostealer науқанын анықтады: консолофия және өздігінен робот-лофи.
Ең соңғы нұсқасы (consolelofy@1.3.0) жұмыс уақытында шифрын ашатын және орындалатын 216 КБ 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() - Қуатты жұмыс уақыты примитивтерін әлі де көрсететін құм жәшігін ұсынады
Негізгі техниканың қысқаша мазмұны
| Құрамдас | Конфигурация / Мән |
|---|---|
| Алгоритм | AES-256-CBC |
| Негізгі туынды | 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 жұмыс уақытын жүктейді
- Криптографиялық кітапханаларды орнатады
- Хром негізіндегі тіркелгі деректері қоймаларын шығарып алады
- 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 интерфейстерін пайдаланады
- Әкімшілік құралдармен үйлеседі
Бұл OS деңгейіндегі тіркелгі деректерін шифрлау, скраптау емес.
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 infostealer келесілерді санап көрсетеді:
- 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 клиенті бұзылған күйінде қалады.
Техникалық салыстыру: Заңды Selfbot және npm Infostealer
| Құрамдас | Заңды кітапхана | Nyx npm Infostealer |
|---|---|---|
| шифрлау | None | Толық AES шифрланған пайдалы жүктеме |
| Орындалу уақытындағы виртуалды машина | Қажет емес | vm.runInNewContext орындау |
| Тіркелгі деректеріне қол жеткізу | Тек Discord API | Браузер, әмияндар, DPAPI |
| Сыртқы жүктеулер | Жоқ | NuGet арқылы Python жұмыс уақыты |
| Тұрақтылық | Жоқ | Discord клиентіне инъекция |
| монетизациялау | Боттарды автоматтандыру | Сенiмхаттарды қайта сату |
Шифрлау қабатының өзі бұл науқанды әдеттегі ашық бастапқы коды бар форктан бөліп тұрады.
Заңды 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Ең қауіпті қауіптер - бұл бірінші көзқараста зиянды болып көрінетін қауіптер емес, бірақ жұмыс уақыты олардың шынайы мінез-құлқын ашқанға дейін құрылымдық тұрғыдан заңды болып көрінетін қауіптер.




