PhantomBot: Od krádeže prihlasovacích údajov k botnetu

PhantomBot: Kampaň typu Typosquat, ktorá sa zmenila z krádeže prihlasovacích údajov na kompletnú sadu botnetov

TL; DR

Jeden vydavateľ npm, deadcode09284814, viedol kampaň s preklepmi proti legitímnym axios a chalk-template balíky od polovice mája 2026.

Kampaň sa začala ako konvenčná krádež poverení a peňaženiek, ktorá odcudzila údaje do HTTPS tunel Serveo.

On 2026-05-17S axois-utils:1.0.9, operátor úplne vymenil užitočné zaťaženie: rovnaký trojitý install-hook scaffold, rovnaký vydavateľ, rovnaký názov balíka.

Inštalačný skript je však teraz multiplatformovým verbovaným DDoS botnetom.

Užitočné zaťaženie hovorí o localhost.run tunel a prijíma príkazy flood, čím sa infikované prostredia stávajú súčasťou botnetu s možnosťou DDoS útokov.

Prevádzkovateľ dokonca odoslal Binárny súbor servera C2 vo vnútri tarballu, čo ukazuje jasnú eskaláciu od krádeže prihlasovacích údajov k aktívnej infraštruktúre botnetu.

Dva balíky, štyri verzie stále aktívne v registri a jeden operátor teraz spúšťa oba moduly paralelne.

Závažnosť: vysoká.

Hlavný MOV Akákoľvek verzia axois-utils alebo chalk-tempalte od vydavateľa deadcode09284814

Útok: Ako to funguje

Kampaň je postavená na zámerne nudnom systéme doručovania: dva preklepové názvy balíkov, ktoré sa o jedno písmeno líšia od balíkov so stovkami miliónov stiahnutí týždenne (Axios, kriedová šablóna) a trojitá inštalácia hooks ktoré zaručujú prevedenie. Zaujímavé je, čo lešenie nesie — a skutočnosť, že prevádzkovateľ zmenil náklad bez toho, aby zmenil čokoľvek iné.

Spoločné lešenie

Každá publikovaná verzia oboch balíkov deklaruje rovnaké tri životné cykly hooks in package.json:

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

Zoznam užitočného zaťaženia pod všetkými tromi hooks je prehnané — po inštalácii sám by bežal v predvolenom nastavení npm installNa výbere záleží: npm install –ignore-scripts preskakuje skripty, ale niekoľko bežných pracovných postupov (obnovenie vyrovnávacej pamäte CI, ktoré sa opätovne spúšťajú v životnom cykle) hooks selektívne alebo vývojári, ktorí vykonávajú iba audit po inštalácii) urobiť z trojnásobne redundantného vyhlásenia najbezpečnejšiu voľbu pre útočníka.

kriedová šablóna pridáva druhý mechanizmus: deklaruje axois-utils:^1.0.7 ako behové prostredie závislosťInštalácia preklepu kriedová šablóna preto stiahne aj súrodenecký typosquat a spustia sa obe užitočné zaťaženia. Tieto dva balíky sú koordinovaný pár, nie nezávislé zoznamy.

Fáza A – zlodej poverení / peňaženiek (2026-05-15 → súčasnosť)

Fáza A je pôvodné užitočné zaťaženie. Nakladač je krátky postinstall.js ktorý ukazuje na reverzný tunel 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'; 

Subdoména Serveo kóduje cieľovú IP adresu (80.200.28.28) priamo v názve hostiteľa – rozpoznateľná konvencia pre túto službu. Operátor strieda náhodný prefix subdomény medzi verziami, aby sa vyhol blokovaniu naivných domén, ale základná IP adresa sa nikdy nezmení. (šablóny kriedy: 1.0.14 použitý 8a3e818ea8f11186-80-200-28-28…; použitie 1.0.16 / 1.0.19 / 1.0.20 f04a273bd84c0622-….)

postinstall.js ruky preč od phantom.js, 7 667-riadkový zväzkový „kolektorový“ modul. phantom.js prechádzky hostiteľa pre:

Súkromné ​​kľúče SSH (~/.ssh/*)
.npmrc obsah a akékoľvek npm_* tokeny prostredia
Súbory s prihlasovacími údajmi AWS, GCP a Azure
regulárny výraz tokenu osobného prístupu GitHub (ghp_*, gho_*, ghu_*, ghs_*)
Artefakty krypto peňaženiek pre Bitcoin, Exodus, Electrum, Monero, Litecoin, Dogecoin, Zcash, Dash
Rekurzívny .env* prejsť ~/projects, ~/dev, ~/code, ~/workspacea inštalačný cwd
História Shellu a kompletný popis process.env

Balík je odoslaný do tunela Serveo na adrese / zbieraťNeexistuje žiadne zahmlievanie, žiadna logika proti virtuálnym počítačom, žiadne stagingové spracovanie – operátor vsádza na objem a rýchlosť.

Fáza B – Nábor PhantomBot DDoS (17. 05. 2026, iba axois-utils:1.0.9)

Fáza B nahrádza súbory phantom.js + postinstall.js jedným súborom s názvom distrube.js (preklep je na strane operátora). Triple-hook scaffold v súbore package.json zostáva nezmenený; balík si zachováva rovnaký názov, rozsah a vzor pre navýšenie verzie. Navonok vyzerá axois-utils:1.0.9 ako menšie pokračovanie verzie 1.0.6. Vo vnútri ide o inú rodinu malvéru.

distrube.js otvára sa konfiguračným blokom, ktorý pomenúva vlastnú značku operátora:

// 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')}`;

Komentáre sú adresované budúcemu operátorovi, ktorý spúšťa súpravu („Použite URL adresu HTTPS localhost.run“). To, plus to, čo sa dodáva vedľa klienta bota, naznačuje, že nejde len o obeť – je to súprava.

Prietok:

  1. Vytrvalosť Spustí sa ako prvý. Skript sa nainštaluje tromi rôznymi spôsobmi v závislosti od operačného systému (v registri beh + Priečinok po spustení + schtasks vo Windowse; crontab + služba phantom-bot jednotka systemd + .bashrc/.zshrc pridať + /etc/rc.local na Linuxe; LaunchAgent com.phantom.bot.plist v systéme macOS). Názov služby perzistencie aj označenie LaunchAgent sú fantomový robot / com.phantom.bot, odkiaľ pochádza aj názov kampane.
  2. Systémové informácie exfil spustí sa raz – jednorazový POST odtlačku prsta na b94b6bcfa27554.lhr.life:443/collect s názvom hostiteľa, platformou, archom, používateľským menom, CPU/RAM, sieťovými rozhraniami, process.env, cwd, domovským adresárom, verziou uzla a verejnou IP adresou. Toto je oveľa menej agresívne ako fáza A: žiadne SSH, žiadne peňaženky, žiadna rekurzia .env. Úlohou bota je registrovať, nie kradnúť.
  3. Slučka srdcového tepu Otvára HTTPS POST každých 30 sekúnd na b94b6bcfa27554.lhr.life:443/. Používateľský agent je PhantomBot/1.0. Overenie TLS je explicitne zakázané (rejectUnauthorized: false). Odpoveď C2 je analyzovaná ako JSON vo formáte {type, target, port, duration, threads, method} a odoslaná.
  4. Povodňový arzenál je prepojený so šiestimi príkazmi:
Typ príkazu Moduly Poznámky
ping Odpoveď na otázku o živosti Bot sa identifikuje
http HTTP záplava Záplava požiadaviek vrstvy 7
https HTTPS záplava Rovnaké ako http, obalené TLS
tcp TCP záplava 65 KB náhodného obsahu spamu
udp UDP záplava 65 507-bajtové UDP pakety
rýchly DoS s rýchlym resetom HTTP/2 Technika CVE-2023-44487 z roku 2023

Všetkých päť modulov protipovodňovej ochrany zaberie terč, prístav, trvaniaa nite argument – ​​bot je generický flooder na prenájom, nie je zameraný na žiadnu konkrétnu obeť. Zoznam obetí operátora sa nachádza na C2, nie v balíku.

Čo je tu nové — dodaný binárny súbor C2

Fáza A má známy tvar: krádež poverení, inštalačný hook, tunelovanie C2 dodávateľom. Fáza B je Tiež známy tvar – DDoS botnety sú už roky neoddeliteľnou súčasťou škodlivých npm balíkov. Nezvyčajné je, že operátor odoslal strana servera zo súpravy vo vnútri tarballu npm:

  • c2 — 4-megabajtový skompilovaný binárny súbor Go ELF
  • c2.go — 426-riadkový zdrojový kód Go pre daný binárny kód

Ani jeden zo súborov nie je volaný žiadnym inštalačným hookom. Nie sú súčasťou užitočného zaťaženia obete. Nachádzajú sa v adresári balíka rovnako ako súbor s dokumentáciou. Najpravdepodobnejším výkladom je, že operátor presunul svoj vývojový pracovný strom do npm bez toho, aby upravil zoznam súborov – skutočný OpSec prešľap – a to, čo bolo dodané, bola kompletná obojstranná sada: klient, ktorého spúšťa obeť, a server, ktorý spúšťa operátor.

Toto je časť príbehu, ktorá ospravedlňuje označenie za „kompletnú súpravu botnetov“. Každý, kto si stiahol axois-utils:1.0.9 pred zastavením má nielen vzorku obete – má aj funkčný server C2.

Pivot, jednou vetou

Ten istý vydavateľ, tie isté názvy balíkov, ten istý trojitý systém scaffoldov, ten istý „fantomový“ branding – ale užitočné zaťaženie zmenilo model monetizácie cez nocod „zbierania tajomstiev, ktoré môžem ďalej predať“ po „prenájom zaplavenej kapacity, ktorú si môžem prenajať“. Časové limity TTP v čase inštalácie, ktoré by si mali obrancovia sledovať, sú v oboch fázach takmer identické; obrana založená na podpisoch je kľúčovaná k reťazcom peňaženky fázy A alebo k phantom.jsZberateľ so 7 667 riadkami by Fázu B úplne vynechal.

Dátum (UTC) udalosť
2026-05-15 Prvá publikácia: axois-utils:1.0.4 (Testovacia zostava pre LAN, vývojové zariadenie na 192.168.129.19)
2026-05-15 axois-utils:1.0.6 publikované — Fáza A C2 vymenená za 80.200.28.28 cez tunel Serveo; komentár k zdroju // Change to '80.200.28.28' for public potvrdzuje výmenu vývojárov a producentov
2026-05-16 chalk-tempalte:1.0.14 a 1.0.16 publikované — deklarovanie reťazového zavádzača axois-utils:^1.0.7 ako závislosť za behu; subdoména Serveo otočená
2026-05-16 Kampaň fázy A objavená počas rutinného skenovania npm; aplikované verdikty potvrdeného škodlivého kódu
2026-05-17 axois-utils:1.0.9 publikované — pivot užitočného zaťaženia: nábor PhantomBot DDoS cez tunel localhost.run; strana operátora c2 binárne a c2.go zdrojový kód je súčasťou tarballu
2026-05-17 chalk-tempalte:1.0.19 a 1.0.20 publikované — stále fáza A (kradnutie); operátor teraz spúšťa oba moduly paralelne
2026-05-17 Objav fázy B počas rutinného skenovania; verdikty aplikované na všetky 2026-05-17 verzia
(Prebiehajúce) Správy o zastavení šírenia čakajú na spracovanie; všetky štyri zverejnené balíky sú v čase písania článku stále dostupné v registri.

Indikátory kompromisu

Balíčky

ekosystém Balíček verzia
NPM axois-utils (preklep) 1.0.4, 1.0.6, 1.0.9
NPM chalk-tempalte (preklep z kriedovej šablóny) 1.0.14, 1.0.16, 1.0.19, 1.0.20

Identita autora

Pole Hodnota
vydavateľ npm deadcode09284814
E-mail vydavateľa phantomdeadcode@tutamail.com
SCM overenie nikto

Command-and-control

Fázy Endpoint transport
A f04a273bd84c0622-80-200-28-28.serveousercontent.com:443/collect HTTPS tunel Serveo
A 8a3e818ea8f11186-80-200-28-28.serveousercontent.com:443/collect HTTPS tunel Serveo (staršia verzia)
A 80.200.28.28:443/collect Podkladový koncový bod VPS
B b94b6bcfa27554.lhr.life:443/ localhost.run HTTPS reverzný tunel

Súborové výťahy (SHA-256)

rezeň SHA-256 Poznámky
c2 (Choď na ELF, 4 MB) 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 Server C2 na strane operátora, dodávaný vo vnútri axois-utils:1.0.9
c2.go (426 riadkov) 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 Zdrojový kód pre binárny súbor C2
distrube.js 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 Klient bota fázy B
phantom.js (chalk-tempalte:1.0.19) 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 Zberateľ poverení fázy A / peňaženiek
phantom.js (chalk-tempalte:1.0.20) d1c9e3f296ee9f7d5032f73f9c504cede50334bc14c394055fd5cb9c3a6e08b3 Kolektor fázy A (variant 1.0.20)
postinstall.js (chalk-tempalte:1.0.19 = 1.0.20) ffba9bdd6793edd5b38e12900252c1813a693f59c25af51c3b658cf3f27b6162 Zavádzač fázy A, bajtovo identický v oboch verziách

Atribúcia a motivácia

Túto kampaň sledujeme ako PhantomBot, pričom si operátor prevzal vlastnú značku od Používateľský agent: PhantomBot/1.0 hlavička srdcového tepu, služba phantom-bot jednotka systemd, com.phantom.bot Označenie LaunchAgent a phantomdeadcode@ e-mailový identifikátor. Operátor je konzistentný v súvislosti s týmto názvom v najmenej štyroch artefaktoch.

Katalóg signálov

  • vydavateľ - mŕtvy kód09284814 na npm. Účet s jedným používateľom, jednorazový e-mail Tutamail, nie SCM overenie. Žiadna predchádzajúca história publikácií okrem tejto kampane.
  • Opätovné použitie značky — „phantom“ sa zobrazuje v e-maile vydavateľa, v názve súboru zberateľa fázy A (phantom.js), v názve služby perzistencie fázy B (služba phantom-bot), v označení LaunchAgent (com.phantom.bot) a v používateľskom agentovi bota (PhantomBot/1.0).
  • Infraštruktúra — Jeden VPS na 80.200.28.28 fronty Fázy A prostredníctvom rotácie subdomény Serveo; Fáza B sa presúva do a localhost.run spätný tunel (b94b6bcfa27554.lhr.life). Obe služby dodávateľa sú bezplatné a vyžadujú iba odchádzajúce SSH na strane operátora, čo je v súlade s nízkorozpočtovými nastaveniami s nízkou prevádzkovou bezpečnosťou.
  • Štýl kódu — Čistý JavaScript v celom texte; žiadne zmätenie, žiadne kódovanie reťazcov, žiadne kontroly anti-VM. Názvy premenných sú popisné (stealSystemInfo, executeCommand, httpFlood). Komentáre v distrube.js priamo oslovovať budúceho operátora („Použite URL adresu HTTPS vášho localhost.run“), čo naznačuje, že súbor bol určený na distribúciu ako súprava, nie na použitie jedným útočníkom.
  • Preklep z Operačnej bezpečnosti — Archív fázy B obsahuje klienta bota aj server C2 na strane operátora (c2 ŠKRÍTOK + c2.go zdroj). Toto je v súlade s operátorom, ktorý odoslal svoj pracovný strom do npm bez auditu zoznamu súborov. Buď je operátor neskúsený, alebo je súprava znamenalo na verejnú distribúciu a binárny súbor C2 je súčasťou produktu.
  • Sebapotvrdenie - axois-utils:1.0.4 obsahuje komentár k zdroju // Zmena na '80.200.28.28' pre verejné na riadku 12, potvrdzujúc postup vývoja / staging / produkcie, ktorý operátori zvyčajne popierajú.

Motivácia

Fáza A je priamočiara finančná krádež: prihlasovacie údaje, cloudové kľúče, tokeny GitHub a krypto peňaženky majú likvidné trhy s ďalším predajom. Fáza B je tiež finančná, ale nepriama: služby DDoS na prenájom („booter“) si prenajímajú kapacitu zahltenú každou minútou a boty, ako je ten, ktorý je tu uvedený, sú inventárom, na ktorom tieto služby bežia. 30-sekundový srdcový tep, všeobecný terč/prístav/trvania schéma príkazov a arzenál päťprotokolov protipovodňovej ochrany sú standard produkt operátora bootera.

Paralelné spustenie oboch modulov — šablóny kriedy: 1.0.19 a 1.0.20 pokračovať v preprave zlodeja, zatiaľ čo axois-utils:1.0.9 dodáva bota – naznačuje, že prevádzkovateľ skôr zaisťuje zdroje príjmov, než aby opustil fázu A. Zmena smeru je pridanie, nie náhrada.

Čo netvrdíme

Nepodarilo sa nám potvrdiť skutočnú identitu za mŕtvy kód09284814 handle a túto kampaň nepripisujeme žiadnemu menovanému aktérovi hrozby, skupine ani krajine. Značka „phantom“ je v artefaktoch dostatočne konzistentná, aby naznačovala jediného operátora, ale dodávanie binárneho súboru C2 v štýle súpravy necháva otvorenú možnosť, že budúce balíky z nesúvisiacich handlerov budú znova používať rovnaký kód.

Vplyv - CSR

Legitímne ciele drepov Axios a kriedová šablóna sú v ekosystéme JavaScriptu vo veľkej miere závislé; Axios sám o sebe patrí medzi tridsať najsťahovanejších npm balíkov. Názvy s preklepmi sú od skutočných vzdialené len jedno stlačenie klávesu (axoisAxios, šablónašablóna) a obe sú jazykovo pravdepodobné pravopisné chyby.

Pred odstránením sa nám nepodarilo získať spoľahlivé štatistiky sťahovania škodlivých verzií – npm neuchováva počty sťahovaní pre jednotlivé verzie po zrušení publikovania balíka a npms.ioProxy v štýle - sú v tomto rozsahu hlučné. Akákoľvek organizácia, ktorej súbor zámku sa rozhoduje pre balík s názvom axois-utils or kriedová šablóna od vydavateľa mŕtvy kód09284814 by sa malo považovať za ohrozené: striedať všetky prítomné poverenia process.env na postihnutom hostiteľovi auditujte vektory perzistencie pre každý operačný systém (pozrite si časť „Čo by mali obrancovia urobiť“ nižšie) a odstráňte závislosť.

Vznikajúce vzorce

Táto kampaň je príkladom posunu, ktorý sme zaznamenali v niekoľkých nedávnych incidentoch týkajúcich sa nových projektov: Lešenie s montážnym hákom je odolným prínosomužitočné zaťaženie je vymeniteľnéTen istý vydavateľ, ten istý balík, ten istý predinštalovať / inštalovať / po inštalácii trojnásobný a dokonca rovnaká kadencia pri zvyšovaní verzií – jediná vec, ktorá sa medzitým zmenila axois-utils:1.0.6 a axois-utils:1.0.9 bol to súbor hooks spustiť. Detekcia založená na podpise je kľúčovaná k dátovej časti fázy A (reťazce cesty k peňaženke, phantom.jsZberač s 7 667 riadkami, hostiteľ Serveo C2), by označil prvé tri verzie a úplne by zmeškal fázu B.

Rovnaký vzorec je viditeľný aj v ďalších kampaniach z roku 2026, ktoré sme sledovali: jeden operátor so stabilnou základňou, striedajúci sa medzi krádežou poverení, klientmi podvádzajúcimi pri skúškach, expiláciou cez Telegram-botov a teraz aj náborom DDoS. Obrancovia, ktorí sa spoliehajú na podpisy užitočného zaťaženia, budú v druhom kole každej kampane prehrávať.

Dôsledkom je, že Časy TTP v čase inštalácie sú lepším signálomTrojité deklarácie install-hook, inštalačné skripty, ktoré importujú https or child_process, nainštalujte skripty, ktoré zapisujú do spúšťacích priečinkov používateľa, a nainštalujte skripty, ktoré prekladajú názvy hostiteľov na bezplatných službách s reverzným tunelom (Serveo, localhost.run, ngrok, cloudflared) sú zriedkavé v legitímnych balíkoch a bežné v škodlivých.

Čo by mali obrancovia robiť

  • Audit uzamknutých súborov. Hľadať každých package-lock.json / priadza.zámok / pnpm-lock.yaml vo vašej organizácii pre presné reťazce axois-utils a kriedová šablónaAkýkoľvek zápas berte ako kompromis.
  • Striedať tajomstvá na postihnutých hostiteľoch. Fáza A hromadne zhromaždila prihlasovacie údaje SSH, cloudu, GitHubu, npm a peňaženky. Predpokladajte všetky prihlasovacie údaje, ktoré sú kedy prítomné v process.env, ~ / .ssh, ~/.aws, ~/.npmrc, ~ / .configalebo akékoľvek iné .env* súbor na postihnutom hostiteľovi je sprístupnený.
  • Odstráňte perzistenciu (fáza B). V systéme Windows odstráňte HKCU\Softvér\Microsoft\Windows\Aktuálna verzia\Spustiť\Aktualizácia systému, odstrániť %APPDATA%\Microsoft\Windows\Ponuka Štart\Programy\Po spustení\system-update.bata schtasks /delete /tn SystemUpdate /fV systéme Linux crontab -e a odstrániť @reštart uzol …, systemctl –užívateľ zakázať –teraz phantom-bot.service potom vymaž ~/.config/systemd/user/phantom-bot.service, kroviny .bashrc / .zshrc / /etc/rc.localV systéme macOS, launchctl unload ~/Library/LaunchAgents/com.phantom.bot.plist potom vymažte plist.
  • Blokujte hostiteľov C2. Pridajte štyri koncové body C2 z tabuľky IOC do zoznamu blokovaných výstupných operácií. *.serveousercontent.com a *.lhr.life* môže byť hromadne zablokované, ak vaše prostredie nemá legitímne využitie pre služby reverzného tunelovania.
  • Hľadanie podľa TTP v čase inštalácie, nie užitočné zaťaženie. Položky uzamykateľného súboru inventára, ktorých package.json deklaroval predinštalovať, inštalovaťa po inštalácii všetky ukazujú na ten istý skript. Skontrolujte vek balíka a stav overenia vydavateľa. Tento vzorec je v legitímnych balíkoch zriedkavý a je najspoľahlivejším signálom, ktorý PhantomBot opakovane používa.
  • Audit pre binárny súbor C2. Každý, kto si stiahol axois-utils:1.0.9 má server C2 operátora (c2 ELF, sha256 165fa92d…) na disku. Skenovať vyrovnávacie pamäte a úložiská artefaktov CI. Binárny súbor je sám o sebe neaktívny, ale jeho prítomnosť na pracovnej stanici je jednoznačným dôkazom, že balík bol nainštalovaný.

Záverečná čiara

Ten istý operátor, ten istý balík a ten istý inštalačný hook môžu v priebehu 48 hodín priniesť úplne odlišné hrozby. Sledujte scaffold, nie payload.

nástroje na analýzu zloženia softvéru SCA
Stanovte si priority, odstraňujte a zabezpečte svoje softvérové ​​riziká
Získajte svoj bezplatný účet.
Nie je potrebná kreditná karta.

Zabezpečte si vývoj a dodávku softvéru

s produktovým balíkom Xygeni