PhantomBot од кражба на акредитиви до ботнет

PhantomBot: Кампања на Typosquat што се насочи од кражба на акредитиви до комплет за ботнет „клуч на рака“

TL; ДР

Еден единствен npm издавач, deadcode09284814, водеше кампања за типоскват против легитимните axios chalk-template пакети од средината на мај 2026 година.

Кампањата започна како конвенционален крадец на акредитиви и паричник, со што се извлекуваа податоци до Serveo HTTPS тунел.

On 2026-05-17, Со axois-utils:1.0.9, операторот целосно го замени товарот: иста тројна инсталација-кука скела, ист издавач, исто име на пакет.

Но, инсталациската скрипта сега е крос-платформски регрут за DDoS ботнет.

Товарот зборува за localhost.run тунел и прифаќа команди за поплавување, претворајќи ги заразените средини во дел од ботнет способен за DDoS.

Операторот дури и го испратил Бинарен C2 сервер во внатрешноста на tarball-от, што покажува јасна ескалација од кражба на акредитиви до активна инфраструктура на ботнет.

Два пакета, четири верзии сè уште активни во регистарот и еден оператор кој сега ги извршува двата модули паралелно.

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

Наслов МОК Било која верзија од axois-utils или chalk-tempalte од издавачот deadcode09284814

Нападот: Како функционира

Кампањата е изградена врз намерно здодевна шема за испорака: две типоскват имиња на пакети, една буква од пакети со стотици милиони неделни преземања (аксиози, шаблон-за-креда), и тројна инсталација hooks што гарантира извршување. Она што е интересно е што скелето носи — и фактот дека операторот го променил товарот без да промени ништо друго.

Заедничкото скеле

Секоја објавена верзија на двата пакети ги декларира истите три животни циклуси hooks in пакет.json:

Наведување на товарот под сите три hooks е претерано — постинсталација сам би работел во стандардна состојба npm инсталирајИзборот е важен: npm инсталација –игнорирање-скрипти прескокнува скрипти, но неколку вообичаени работни процеси (CI кеш враќања кои го повторуваат животниот циклус hooks селективно, или програмери кои само вршат ревизија постинсталација) направете тројно редундантна декларација како најбезбедна опција за напаѓачот.

креда-шаблон додава втор механизам: тој декларира axois-utils:^1.0.7 како извршување зависностИнсталирање на typosquatted шаблон-за-креда затоа го вклучува и типоскватот за браќа и сестри, и двата корисни товара се извршуваат. Двата пакета се координиран пар, а не независни листинзи.

Фаза А — крадец на акредитиви / паричник (2026-05-15 → досега)

Фаза А е оригиналниот товар. Утоварувачот е краток постинсталирање.js што покажува кон обратен тунел на Serveo HTTPS:

Поддоменот 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-….)

постинсталирање.js рацете тргнати кон фантом.js, комплетен „колекторски“ модул од 7,667 линии. фантом.js го шета домаќинот за:

SSH приватни клучеви (~/.ssh/*)
.npmrc содржината и било која npm_* енв токени
Датотеки со акредитиви за AWS, GCP и Azure
Регистарски знак за личен пристап на GitHub (ghp_*, gho_*, ghu_*, ghs_*)
Артефакти од крипто-паричник за Bitcoin, Exodus, Electrum, Monero, Litecoin, Dogecoin, Zcash, Dash
Рекурзивен .env* прошетка низ ~/projects, ~/dev, ~/code, ~/workspaceи инсталацијата cwd
Историјата на Шел и целосната process.env

Пакетот е испратен во тунелот Сервео на /собираНема замаглување, нема анти-ВМ логика, нема поставување во сцена - операторот се фокусира на јачината на звукот и брзината.

Фаза Б — Регрутирање на PhantomBot DDoS (2026-05-17, само axois-utils:1.0.9)

Фазата Б ги заменува phantom.js + postinstall.js со една датотека со име distrube.js (печатната грешка е на операторот). Тројната шема со куки во 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')}`;

Коментарите се упатени до иден оператор кој ќе го извршува комплетот („Користете ја вашата URL адреса за HTTPS од localhost.run“). Тоа, плус она што се испорачува веднаш до клиентот на ботот, е информацијата дека ова не е само товар на жртвата - туку е комплетот.

Протокот:

  1. Упорност прво се извршува. Скриптата се инсталира на три различни начини за секој оперативен систем (регистар Испратена + Папка за стартување + schtasks на Windows; crontab + phantom-bot.service системска единица + .башрц/.zshrc додај + / и друго / локално на Линукс; LaunchAgent com.phantom.bot.plist на macOS). Името на услугата за перзистенција и етикетата LaunchAgent се и двете фантом-бот / com.phantom.bot, од каде што доаѓа и името на кампањата.
  2. Системски информации exfil се извршува еднаш — еднократен POST за отпечаток од прст до b94b6bcfa27554.lhr.life:443/collect што ги содржи името на хостот, платформата, arch, корисничкото име, CPU/RAM, мрежните интерфејси, process.env, cwd, homedir, верзијата на node и јавната 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. Арсенал на поплави е поврзан со шест команди:
Тип на команда Модули забелешки
пинг Одговор од Liveness Ботот се идентификува себеси
http HTTP поплава Поплава со барања од слој 7
https HTTPS поплава Исто како http, TLS-обвиткано
tcp TCP поплава Спам со случајно вчитување од 65 KB
udp UDP поплава UDP пакети од 65,507 бајти
Брзиот HTTP/2 DoS со брзо ресетирање Техниката 2023 CVE-2023-44487

Сите пет модули за поплавување земаат целни, пристаниште, времетраењето, и теми аргумент — ботот е генерички „flooder“ за изнајмување, не е наменет за некоја конкретна жртва. Списокот на жртви на операторот се наоѓа на C2, а не во пакетот.

Што е ново овде — испорачаниот бинарен C2

Фазата А е позната форма: кражба на акредитиви, кука за инсталација, тунелиран од добавувач C2. Фазата Б е Исто така познат облик — DDoS ботнетите со години се дел од злонамерните npm пакети. Она што е невообичаено е што операторот го испратил серверска страна од комплетот во npm tarball-от:

  • c2 — бинарна датотека Go ELF од 4 мегабајти компајлирана
  • c2.go — изворниот код на Go од 426 реда за таа бинарна датотека

Ниту една датотека не е повикана од која било кука за инсталација. Тие не се дел од товарот на жртвата. Тие се наоѓаат во директориумот на пакети на ист начин како што би се наоѓала датотека со документација. Најверодостојното толкување е дека операторот го префрлил своето работно дрво за развој на npm без да ја курира листата на датотеки - вистински OpSec slip - и она што го испратил е комплетниот двостран комплет: клиентот што го извршува жртвата и серверот што го извршува операторот.

Ова е делот од приказната што го оправдува обликувањето на „комплет за ботнет на клуч“. Секој што го преземал axois-utils:1.0.9 пред деактивирањето нема само примерок од жртвата — тие имаат и функционален C2 сервер.

Вртежот, во една реченица

Ист издавач, исти имиња на пакети, иста тројна кука, исто „фантомско“ брендирање - но товарот го промени моделот на монетизација преку ноќ: од „тајни за берба што можам да ги препродадам“ до „изнајмување капацитет за поплавување што можам да го изнајмам“. TTP-ите за време на инсталација што бранителите треба да ги следат се речиси идентични во обете фази; одбрани базирани на потписи поврзани со низите на патеката на паричникот на Фаза А или до фантом.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 објавено — Фаза А C2 заменета со 80.200.28.28 преку тунелот Сервео; коментарот на изворот // 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 (типоскват на шаблонот со креда) 1.0.14, 1.0.16, 1.0.19, 1.0.20

Идентитет на авторот

Поле Vrednost
издавач на npm deadcode09284814
Е-пошта на издавачот phantomdeadcode@tutamail.com
SCM верификација никој

Команда-и-контрола

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

Датотечни прегледи (SHA-256)

датотека SHA-256 забелешки
c2 (Оди на ELF, 4 MB) 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 C2 сервер од страна на операторот, испорачан внатре axois-utils:1.0.9
c2.go (426 реда) 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 Оди на изворот за бинарниот 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 заглавие на отчукувањата на срцето, на phantom-bot.service системска единица, com.phantom.bot Ознаката LaunchAgent и phantomdeadcode@ рачка за е-пошта. Операторот е конзистентен во врска со ова име низ најмалку четири артефакти.

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

  • Издавач - мртов код09284814 на npm. Сметка со еднократна употреба, е-пошта за еднократна употреба Tutamail, не SCM верификација. Нема претходна историја на објавување по оваа кампања.
  • Повторна употреба на брендирање — „phantom“ се појавува во е-поштата на издавачот, во името на датотеката на колекционерот од Фаза А (фантом.js), во името на услугата за перзистентност на Фаза Б (phantom-bot.service), во етикетата LaunchAgent (com.phantom.bot), и во корисничкиот агент на ботот (PhantomBot/1.0).
  • Инфраструктура — Еден VPS на 80.200.28.28 ја предводи Фазата А преку ротација на поддоменот Serveo; Фазата Б се движи кон localhost.run обратен тунел (b94b6bcfa27554.lhr.life). И двете услуги на добавувачите се бесплатни и бараат само излезен SSH од страна на операторот, што е во согласност со поставувањата со низок буџет и ниска OpSec.
  • стил на код — Обичен JavaScript низ целиот текст; без замаглување, без кодирање на стрингови, без проверки против VM. Имињата на променливите се описни (крадењенаСистемскиИнфо, извршикоманда, httpFlood). Коментари во distrube.js директно се обраќа на иден оператор („Користете ја вашата URL-адреса за HTTPS на localhost.run“), што сугерира дека датотеката била наменета да се редистрибуира како комплет, а не да ја користи еден напаѓач.
  • OpSec ливче — Tarball-от од фаза Б ги испорачува и клиентот на бот и серверот C2 од страна на операторот (c2 ЕЛФ + c2.go извор). Ова е во согласност со оператор кој го префрлил своето работно дрво на npm без да ја ревидира листата на датотеки. Или операторот е неискусен, или комплетот е значеше да биде јавно дистрибуирана, а бинарниот C2 е дел од производот.
  • Самопотврдување - axois-utils:1.0.4 го содржи изворниот коментар // Променете на „80.200.28.28“ за јавност на ред 12, со што се потврдува прогресијата во развивањето / поставувањето / производството што операторите обично ја негираат.

Мотивација

Оптоварувањето од Фаза А е едноставна финансиска кражба: акредитивите, cloud клучевите, GitHub токените и крипто паричниците имаат ликвидни пазари за препродажба. Фазата Б е исто така финансиска, но индиректна: DDoS-за-изнајмување („booter“) услугите изнајмуваат капацитет за поплавување секоја минута, а ботовите како оној што е испорачан овде се инвентарот на кој работат тие услуги. 30-секундното срцебиење, генеричкото целни/пристаниште/времетраењето командна шема и арсеналот на поплави од пет протоколи се standard производ на бутер оператор.

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

Она што не го тврдиме

Не бевме во можност да потврдиме реален идентитет зад мртов код09284814 рачка, и не ја припишуваме оваа кампања на ниту еден именуван актер на закана, група или земја. Брендирањето „фантом“ е доволно конзистентно низ артефактите за да сугерира еден оператор, но испораката на бинарниот C2 во стил на комплет остава отворена можност идните пакети од неповрзани рачки да го користат истиот код повторно.

Влијание, трендови и што треба да прават бранителите

Влијание

Легитимните цели на сквотовите аксиози шаблон-за-креда се широко зависни од нив во екосистемот на JavaScript; аксиози сам се наоѓа меѓу триесетте најпреземани npm пакети. Имињата на typosquat се само еден притискање на копче од вистинските (аксоисаксиози, шаблонскидефиниција), и обете се лингвистички веројатни правописни грешки.

Не можевме да добиеме сигурна статистика за преземања за злонамерните верзии пред отстранувањето — npm не ги задржува броевите на преземања по верзија откако пакетот ќе биде поништен од објавувањето и npms.io-стил прокси се бучни на оваа скала. Секоја организација чија заклучена датотека се претвора во пакет со име аксоис-утилс or креда-шаблон од издавачот мртов код09284814 треба да се третира како компромитирано: ротирајте ги сите акредитиви што се присутни во процес.енв на засегнатиот хост, ревидирајте ги векторите на перзистенција по оперативен систем (видете „Што треба да прават бранителите“ подолу) и отстранете ја зависноста.

Нови модели

Оваа кампања е пример за промена што ја видовме во неколку неодамнешни инциденти со npm: скелето со куки за инсталација е траен имот; товарот може да се замениИстиот издавач, истиот пакет, истиот претходна инсталација / инсталира / постинсталација троен, па дури и истата верзија-испакнат каденца - единственото нешто што се промени помеѓу axois-utils:1.0.6 axois-utils:1.0.9 дали датотеката беше hooks извршување. Детекција базирана на потпис клучена за товарот од Фаза А (низи на патеката на паричникот, фантом.jsКолекционерот од 7,667 линии, домаќинот Serveo C2) ќе ги означеше првите три верзии и целосно ќе ја пропуштеше Фазата Б.

Истиот модел е видлив и во другите кампањи од 2026 година што ги следевме: еден оператор со стабилна платформа, менување помеѓу кражба на акредитиви, клиенти кои мамат испити, ексфил на бот на Telegram, а сега и DDoS регрутирање. Бранителите кои се потпираат на потписи за payload ќе продолжат да ја губат втората рунда од секоја кампања.

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

Што треба да прават бранителите

  • Ревизија на Lockfile. Пребарај секој пакет-брава.json / предиво.заклучување / pnpm-lock.yaml во вашата организација за точните низи аксоис-утилс креда-шаблонТретирајте го секое совпаѓање како компромис.
  • Ротирајте ги тајните на засегнатите домаќини. Фаза А масовно собрани акредитиви за SSH, cloud, GitHub, npm и паричник. Претпоставете ги сите акредитиви што некогаш се присутни во процес.енв, ~ / .ssh, ~/.aws, ~/.npmrc, ~/.config, или кој било .env* датотеката на засегнатиот домаќин е изложена.
  • Отстранете ја перзистентноста (Фаза Б). На Windows, избришете HKCU\Software\Microsoft\Windows\CurrentVersion\Run\SystemUpdate, отстрани %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\system-update.bat, и schtasks /delete /tn SystemUpdate /fНа Linux, crontab-e и отстрани @reboot јазол …, systemctl – оневозможување на корисник – сега phantom-bot.service потоа избриши ~/.config/systemd/user/phantom-bot.service, пилинг .башрц / .zshrc / / и друго / локалноНа macOS, launchctl unload ~/Library/LaunchAgents/com.phantom.bot.plist потоа избришете ја листата.
  • Блокирајте ги C2 домаќините. Додајте ги четирите C2 крајни точки во IOC табелата на вашата листа за блокирање на излез. *.serveousercontent.com *.lhr.life може да биде блокирано на големо ако вашата околина нема легитимна употреба за услуги за обратен тунел.
  • Лов по TTP за време на инсталација, а не корисен товар. Записи за заклучување на инвентар чии пакет.json прогласена претходна инсталација, инсталира, и постинсталација сите покажуваат кон истата скрипта. Вкрстена проверка со возраста на пакетот и статусот на верификација на издавачот. Овој образец е редок кај легитимните пакети и е единствениот најсигурен сигнал што PhantomBot го користи повторно.
  • Ревизија за бинарниот C2. Секој што преземал axois-utils:1.0.9 го има C2 серверот на операторот (c2 ЕЛФ, sha256 165fa92d…) на дискот. Скенирајте кешови и складишта на CI артефакти. Бинарната датотека е неактивна сама по себе, но нејзиното присуство на работната станица е недвосмислен доказ дека пакетот е инсталиран.

Завршна линија

Истиот оператор, истиот пакет и истата инсталаторна кука можат да испорачаат сосема различни закани во рок од 48 часа. Внимавајте на скелето, а не на товарот.

алатки-за-анализа-на-композиции-на-sca-алатки
Дајте приоритет, санирајте и обезбедете ги вашите софтверски ризици
Добијте ја вашата бесплатна сметка.
Не е потребна кредитна картичка.

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

со Xygeni Product Suite