PhantomBot: Od krádeže přihlašovacích údajů k botnetu

PhantomBot: Kampaň typu Typosquat, která se z krádeže přihlašovacích údajů vyvinula v hotovou sadu pro botnet

TL, DR

Jeden vydavatel NPM, deadcode09284814, vedl kampaň s překlepy proti legitimním axios a chalk-template balíčky od poloviny května 2026.

Kampaň začala jako konvenční krádež přihlašovacích údajů a peněženek, která vylákala data do HTTPS tunel Serveo.

On 2026-05-17s axois-utils:1.0.9, operátor zcela vyměnil datovou část: stejný trojitý instalační hook scaffold, stejný vydavatel, stejný název balíčku.

Instalační skript je ale nyní multiplatformní verb do DDoS botnetu.

Užitečné zatížení hovoří o localhost.run tunel a přijímá příkazy flood, čímž se infikovaná prostředí stávají součástí botnetu s možností DDoS útoků.

Provozovatel dokonce odeslal Binární soubor serveru C2 uvnitř tarballu, což ukazuje jasnou eskalaci od krádeže přihlašovacích údajů k aktivní infrastruktuře botnetu.

Dva balíčky, čtyři verze stále aktivní v registru a jeden operátor nyní spouští oba moduly paralelně.

Závažnost: vysoká.

Hlavní MOV Jakákoli verze axois-utils nebo chalk-tempalte od vydavatele deadcode09284814

Útok: Jak to funguje

Kampaň je postavena na záměrně nudném systému doručování: dva překlepy v názvech balíčků, o jedno písmeno odlišné od balíčků se stovkami milionů týdenních stažení (axios, křídová šablona) a trojitou instalaci hooks které zaručují provedení. Zajímavé je, co lešení nese — a skutečnost, že provozovatel změnil náklad, aniž by změnil cokoli jiného.

Sdílené lešení

Každá publikovaná verze obou balíčků deklaruje stejné tři životní cykly. hooks in balíček.json:

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

Výpis užitečného zatížení pod všemi třemi hooks je přehnané – po instalaci sám by běžel ve výchozím nastavení npm installNa volbě záleží: npm install –ignore-scripts přeskakuje skripty, ale několik běžných pracovních postupů (obnovení mezipaměti CI, které znovu spouštějí životní cyklus) hooks selektivně nebo vývojáři, kteří pouze auditují po instalaci) učinit z trojitě redundantní deklarace nejbezpečnější sázku pro útočníka.

křídová šablona přidává druhý mechanismus: deklaruje axois-utils:^1.0.7 jako běhové prostředí závislostInstalace překlepu křídová šablona proto načte i sourozenecký typosquat a oba datové části se spustí. Tyto dva balíčky jsou koordinovaný pár, nikoli nezávislé výpisy.

Fáze A — zloděj přihlašovacích údajů / peněženek (2026-05-15 → současnost)

Fáze A je původní užitečné zatížení. Nakladač je krátký postinstall.js který ukazuje na reverzní tunel HTTPS služby Serveo:

// 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 cílovou IP adresu (80.200.28.28) přímo v názvu hostitele – rozpoznatelná konvence pro danou službu. Operátor střídá náhodný prefix subdomény mezi verzemi, aby se vyhnul blokovacím seznamům naivních domén, ale podkladová IP adresa se nikdy nezmění. (křída-šablona:1.0.14 použitý 8a3e818ea8f11186-80-200-28-28…; použití 1.0.16 / 1.0.19 / 1.0.20 f04a273bd84c0622-….)

postinstall.js ruce pryč od phantom.js, sběratelský modul s 7 667 řádky. phantom.js prochází hostitele po dobu:

Soukromé klíče SSH (~/.ssh/*)
.npmrc obsah a jakékoli npm_* tokeny prostředí
Soubory s přihlašovacími údaji AWS, GCP a Azure
Regex osobního přístupového tokenu GitHubu (ghp_*, gho_*, ghu_*, ghs_*)
Artefakty krypto peněženky pro Bitcoin, Exodus, Electrum, Monero, Litecoin, Dogecoin, Zcash, Dash
Rekurzivní .env* projít ~/projects, ~/dev, ~/code, ~/workspacea instalační cwd
Historie Shellu a kompletní informace process.env

Balíček je odeslán do tunelu Serveo na adrese / sbíratNeexistuje žádné zmatkování, žádná logika proti virtuálním strojům ani staging – operátor sází na objem a rychlost.

Fáze B – Nábor PhantomBot DDoS útoků (17. 05. 2026, pouze axois-utils:1.0.9)

Fáze B nahrazuje phantom.js + postinstall.js jedním souborem s názvem distrube.js (překlep je na straně operátora). Triple-hook scaffold v package.json zůstává nezměněn; balíček si zachovává stejný název, rozsah a vzor pro zvýšení verze. Zvenčí vypadá axois-utils:1.0.9 jako drobné pokračování verze 1.0.6. Uvnitř se jedná o jinou rodinu malwaru.

distrube.js otevírá se konfiguračním blokem, který pojmenovává 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áře jsou adresovány budoucímu operátorovi, který bude sadu spouštět („Použijte HTTPS URL localhost.run“). To, plus to, co je dodáváno s klientem bota, je varovným signálem, že se nejedná jen o datovou část oběti – jde o samotnou sadu.

Průtok:

  1. Perzistence Spustí se jako první. Skript se sám nainstaluje třemi různými způsoby v závislosti na operačním systému (registr Běh + Složka po spuštění + schtasks ve Windows; crontab + služba phantom-bot jednotka systemd + .bashrc/.zshrc přidat + /etc/rc.local na Linuxu; LaunchAgent com.phantom.bot.plist v systému macOS). Název služby perzistence a popisek LaunchAgent jsou oba fantomový robot / com.phantom.bot, odkud také pochází název kampaně.
  2. Systémové informace exfil spustí se jednou – jednorázový POST s otiskem prstu na b94b6bcfa27554.lhr.life:443/collect s uvedením názvu hostitele, platformy, archu, uživatelského jména, CPU/RAM, síťových rozhraní, process.env, cwd, domovského adresáře, verze uzlu a veřejné IP adresy. Toto je mnohem méně agresivní než Fáze A: žádné SSH, žádné peněženky, žádná rekurze .env. Úkolem bota je registrovat, ne krást.
  3. Smyčka srdečního tepu Otevírá HTTPS POST každých 30 sekund na b94b6bcfa27554.lhr.life:443/. Uživatelský agent je PhantomBot/1.0. Ověřování TLS je explicitně zakázáno (rejectUnauthorized: false). Odpověď C2 je analyzována jako JSON ve formátu {type, target, port, duration, threads, method} a odeslána.
  4. Povodňový arzenál je zapojen do šesti příkazů:
Typ příkazu Modul Poznámky
ping Odpověď na živost Bot se identifikuje
http HTTP záplava Záplava požadavků vrstvy 7
https HTTPS záplava Stejné jako http, zabalené v TLS
tcp TCP záplava 65 KB náhodného datového obsahu spamu
udp UDP záplava 65 507 bajtů UDP paketů
rychlý DoS s rychlým resetem HTTP/2 Technika CVE-2023-44487 z roku 2023

Všech pět protipovodňových modulů zabere cíl, přístav, trvání, a nitě argument – ​​bot je obecný flooder k pronájmu, který není zaměřen na žádnou konkrétní oběť. Seznam obětí operátora se nachází na C2, nikoli v balíčku.

Co je zde nového — dodaný binární soubor C2

Fáze A má známý tvar: krádež přihlašovacích údajů, instalační hook, tunelování C2 dodavatelem. Fáze B je také známý tvar – DDoS botnety jsou již léta nedílnou součástí škodlivých npm balíčků. Neobvyklé je, že operátor dodal strana serveru sady uvnitř tarballu npm:

  • c2 — 4MB kompilovaný binární soubor Go ELF
  • c2.go — 426řádkový zdrojový kód Go pro daný binární kód

Ani jeden ze souborů není vyvolán žádným instalačním hookem. Nejsou součástí datové části oběti. Nacházejí se v adresáři balíčku stejně jako soubor s dokumentací. Nejpravděpodobnějším výkladem je, že operátor odeslal svůj vývojový pracovní strom do npm bez úpravy seznamu souborů – skutečný OpSec překlep – a to, co bylo dodáno, je kompletní oboustranná sada: klient, kterého spouští oběť, a server, který spouští operátor.

Toto je část příběhu, která ospravedlňuje označení za „kompletní sadu pro botnet“. Každý, kdo si stáhl axois-utils:1.0.9 před zastavením má nejen vzorek oběti – má také funkční server C2.

Pivot, jednou větou

Stejný vydavatel, stejné názvy balíčků, stejný trojitý systém scaffoldů, stejný „fantomový“ branding – ale datové zatížení přes noc změnilo model monetizaceod „sklízení tajemství, která mohu dále prodat“ po „pronájem kapacity pro zahlcení, kterou mohu pronajmout“. Doby trvání instalace (TTP), které by si měli obránci hlídat, jsou v obou fázích téměř identické; obrana založená na podpisech je klíčována k řetězcům peněženky fáze A nebo k phantom.jsSběratel s 7 667 řádky by Fázi B zcela minul.

Datum (UTC) událost
2026-05-15 První publikace: axois-utils:1.0.4 (Testovací sestavení pro LAN, vývojové zařízení na 192.168.129.19)
2026-05-15 axois-utils:1.0.6 publikováno — Fáze A C2 vyměněna za 80.200.28.28 přes tunel Serveo; komentář ke zdroji // Change to '80.200.28.28' for public potvrzuje swap mezi vývojáři a produkčními produkty
2026-05-16 chalk-tempalte:1.0.14 a 1.0.16 publikováno — deklarace řetězeného zavaděče axois-utils:^1.0.7 jako závislost za běhu; subdoména Serveo otočena
2026-05-16 Kampaň fáze A odhalena během rutinního skenování NPM; aplikovány verdikty o potvrzeném škodlivém produktu.
2026-05-17 axois-utils:1.0.9 publikováno — pivot datového zatížení: nábor PhantomBot DDoS přes tunel localhost.run; strana operátora c2 binární a c2.go zdrojový kód je součástí tarballu
2026-05-17 chalk-tempalte:1.0.19 a 1.0.20 publikováno — stále Fáze A (zloděj); operátor nyní spouští oba moduly paralelně
2026-05-17 Objev fáze B během rutinního skenování; verdikty aplikované na všechny 2026-05-17 verze
(pokračující) Zprávy o zastavení šíření čekají na vyřízení; všechny čtyři zveřejněné balíčky jsou v době psaní článku stále k dispozici v registru.

Ukazatele kompromisu

Balíčky

Ekosystém Balíček verze
Npm axois-utils (překlep) 1.0.4, 1.0.6, 1.0.9
Npm chalk-tempalte (typosquat z křídové šablony) 1.0.14, 1.0.16, 1.0.19, 1.0.20

Identita autora

Pole Hodnota
vydavatel npm deadcode09284814
E-mail vydavatele phantomdeadcode@tutamail.com
SCM ověření žádný

Command-and-control

Fáze Konečný bod DOPRAVA
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ší verze)
A 80.200.28.28:443/collect Podkladový VPS endpoint
B b94b6bcfa27554.lhr.life:443/ localhost.run HTTPS reverzní tunel

Souborové výtahy (SHA-256)

Soubor SHA-256 Poznámky
c2 (Přejít na ELF, 4 MB) 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 Server C2 na straně operátora, dodáván uvnitř axois-utils:1.0.9
c2.go (426 řádků) 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 Zdrojový kód Go pro binární soubor C2
distrube.js 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 Klient botů fáze B
phantom.js (chalk-tempalte:1.0.19) 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 Fáze A - sběrač pověření / peněženek
phantom.js (chalk-tempalte:1.0.20) d1c9e3f296ee9f7d5032f73f9c504cede50334bc14c394055fd5cb9c3a6e08b3 Kolektor fáze A (varianta 1.0.20)
postinstall.js (chalk-tempalte:1.0.19 = 1.0.20) ffba9bdd6793edd5b38e12900252c1813a693f59c25af51c3b658cf3f27b6162 Zavaděč fáze A, bajtově identický v obou verzích

Atribuce a motivace

Tuto kampaň sledujeme jako PhantomBot, přičemž si operátor přebírá vlastní značku od Uživatelský agent: PhantomBot/1.0 záhlaví srdečního tepu, služba phantom-bot jednotka systemd, ta com.phantom.bot Popisek LaunchAgent a phantomdeadcode@ e-mailový handle. Operátor je ohledně tohoto názvu konzistenční napříč nejméně čtyřmi artefakty.

Katalog signálů

  • Vydavatel - mrtvý kód09284814 na npm. Účet s jedním správcem, jednorázový e-mail Tutamail, ne SCM ověření. Žádná předchozí publikační historie mimo tuto kampaň.
  • Opětovné použití značky — „phantom“ se objevuje v e-mailu vydavatele, v názvu souboru kolektoru fáze A (phantom.js), v názvu služby perzistence fáze B (služba phantom-bot), v popisku LaunchAgent (com.phantom.bot) a v uživatelském agentu bota (PhantomBot/1.0).
  • Infrastruktura — Jeden VPS na 80.200.28.28 fronty Fáze A prostřednictvím rotace subdomény Serveo; Fáze B se přesouvá do localhost.run zpětný tunel (b94b6bcfa27554.lhr.life). Obě služby dodavatele jsou zdarma a vyžadují pouze odchozí SSH na straně operátora, což je v souladu s nízkorozpočtovými nastaveními s nízkými provozními náklady.
  • styl kódu — Čistý JavaScript v celém textu; žádné zmatkování, žádné kódování řetězců, žádné kontroly anti-VM. Názvy proměnných jsou popisné (stealSystemInfo, executeCommand, httpFlood). Komentáře v distrube.js přímo oslovovat budoucího operátora („Použijte URL adresu HTTPS vašeho localhost.run“), což naznačuje, že soubor byl určen k další distribuci jako sada, nikoli k použití jedním útočníkem.
  • Prohlášení o operační bezpečnosti — Archiv fáze B obsahuje jak bot klienta, tak i server C2 na straně operátora (c2 ELF + c2.go zdroj). To je v souladu s operátorem, který odeslal svůj pracovní strom do npm bez auditu seznamu souborů. Buď je operátor nezkušený, nebo je sada znamenalo k veřejné distribuci a binární soubor C2 je součástí produktu.
  • Sebepotvrzení - axois-utils:1.0.4 obsahuje komentář ke zdroji // Změnit na '80.200.28.28' pro veřejné na řádku 12, potvrzující postup vývoje / staging / produkce, který operátoři obvykle popírají.

Motivace

Fáze A představuje přímočarou finanční krádež: přihlašovací údaje, cloudové klíče, tokeny GitHubu a krypto peněženky mají likvidní trhy pro další prodej. Fáze B je také finanční, ale nepřímá: služby DDoS for-hire („booter“) si pronajímají kapacitu každou minutu a boti, jako je ten, který je zde uveden, jsou inventářem, na kterém tyto služby běží. 30sekundový srdeční tep, obecný cíl/přístav/trvání schéma příkazů a pětiprotokolová arzenál povodní jsou standard produkt operátora bootera.

Spuštění obou modulů paralelně — křída-šablona:1.0.19 a 1.0.20 pokračujte v přepravě zloděje, zatímco axois-utils:1.0.9 odesílá bota – naznačuje, že provozovatel se snaží zajistit zdroje příjmů, spíše než aby opustil fázi A. Pivot je přidání, nikoli náhrada.

Co netvrdíme

Nebyli jsme schopni potvrdit skutečnou identitu za mrtvý kód09284814 handle a tuto kampaň nepřipisujeme žádnému jmenovanému aktérovi hrozby, skupině ani zemi. Značení „fantoma“ je napříč artefakty dostatečně konzistentní, aby naznačovalo jediného operátora, ale dodávání binárního souboru C2 ve stylu stavebnice ponechává otevřenou možnost, že budoucí balíčky z nesouvisejících handleů budou znovu používat stejný kód.

Dopad

Legitimní cíle pro dřepy axios a křídová šablona jsou v ekosystému JavaScriptu široce závislé; axios sám o sobě patří mezi třicet nejstahovanějších npm balíčků. Názvy s překlepy jsou od skutečných názvů vzdáleny jen o stisknutí klávesy (axoisaxios, šablonašablona) a oba jsou jazykově pravděpodobné pravopisné chyby.

Před odstraněním balíčku se nám nepodařilo získat spolehlivé statistiky stahování škodlivých verzí – npm neukládá počty stahování pro jednotlivé verze po zrušení publikování balíčku a npms.ioProxy ve stylu - jsou v tomto měřítku hlučné. Jakákoli organizace, jejíž soubor zámku se definuje jako balíček s názvem axois-utils or křídová šablona od vydavatele mrtvý kód09284814 by mělo být považováno za ohrožené: střídat všechny dostupné přihlašovací údaje process.env na postiženém hostiteli auditujte vektory perzistence pro každý operační systém (viz níže „Co by měli obránci dělat“) a odstraňte závislost.

Vznikající vzorce

Tato kampaň je příkladem posunu, který jsme zaznamenali v několika nedávných incidentech týkajících se nových marketingových aktivit: Lešení s montážními háky je trvanlivým aktivem; užitečné zatížení je vyměnitelnéStejný vydavatel, stejný balíček, stejný předinstalace / instalovat / po instalaci trojitý, a dokonce i stejná kadence při zvyšování verze – jediná věc, která se mezitím změnila axois-utils:1.0.6 a axois-utils:1.0.9 byl to soubor hooks spustit. Detekce založená na podpisu s klíčem k datové části fáze A (řetězce cesty k peněžence, phantom.jsSběrač o délce 7 667 řádků, hostitel Serveo C2), by označil první tři verze a Fáze B by zcela minul.

Stejný vzorec je patrný i u dalších kampaní z roku 2026, které jsme sledovali: jeden operátor se stabilní základnou, střídající se mezi krádeží přihlašovacích údajů, klienty podvádějícími zkoušky, expilací pomocí Telegram-botů a nyní i náborem DDoS. Obránci, kteří se spoléhají na podpisy dat, budou i nadále prohrávat druhé kolo každé kampaně.

Důsledkem je, že Doba trvání instalace (TTP) je lepším signálem.Trojité deklarace install-hooku, instalační skripty, které importují https or podřízený_proces, nainstalujte skripty, které zapisují do spouštěcích složek uživatele, a nainstalujte skripty, které překládají názvy hostitelů na bezplatných službách reverzního tunelování (Serveo, localhost.run, ngrok, cloudflared) jsou vzácné v legitimních balíčcích a běžné v těch škodlivých.

Co by měli obránci dělat

  • Audit uzamčených souborů. Hledat každých balíček-lock.json / yarn.lock / pnpm-lock.yaml ve vaší organizaci pro přesné řetězce axois-utils a křídová šablonaBerte jakýkoli zápas jako kompromis.
  • Otáčení tajných kódů na postižených hostitelích. Fáze A hromadně shromažďovala přihlašovací údaje SSH, cloudu, GitHubu, npm a peněženky. Předpokládejme všechny přihlašovací údaje, které kdy byly přítomny v process.env, ~ / .ssh, ~/.aws, ~/.npmrc, ~ / .config, nebo nějaký .env* soubor na postiženém hostiteli je zpřístupněn.
  • Odstraňte perzistenci (fáze B). Ve Windows smažte HKCU\Software\Microsoft\Windows\Aktuální verze\Spustit\Aktualizace systému, odstranit %APPDATA%\Microsoft\Windows\Nabídka Start\Programy\Po spuštění\system-update.bat, a schtasks /delete /tn SystemUpdate /fV Linuxu crontab -e a odstranit @reboot uzel …, systemctl –uživatel zakázat –nyní phantom-bot.service poté smažte ~/.config/systemd/user/phantom-bot.service, křoviny .bashrc / .zshrc / /etc/rc.localV systému macOS launchctl unload ~/Library/LaunchAgents/com.phantom.bot.plist pak smažte soubor plist.
  • Zablokujte hostitele C2. Přidejte čtyři koncové body C2 z tabulky IOC do seznamu blokovaných výstupních adres. *.serveousercontent.com a *.lhr.life* lze hromadně zablokovat, pokud vaše prostředí nemá legitimní využití pro služby reverzního tunelování.
  • Hledání podle TTP v době instalace, nikoli užitečné zatížení. Položky uzamčeného souboru inventáře, jejichž balíček.json prohlašuje, předinstalace, instalovat, a po instalaci všechny ukazují na stejný skript. Proveďte křížovou kontrolu porovnání stáří balíčku a stavu ověření vydavatele. Tento vzorec je u legitimních balíčků vzácný a je nejspolehlivějším signálem, který PhantomBot opakovaně používá.
  • Audit pro binární soubor C2. Každý, kdo si stáhl axois-utils:1.0.9 má server C2 operátora (c2 ELF, sha256 165fa92d…) na disku. Prohledejte mezipaměti a úložiště artefaktů CI. Binární soubor je sám o sobě neaktivní, ale jeho přítomnost na pracovní stanici je jednoznačným důkazem, že balíček byl nainstalován.

Závěrečná čára

Stejný operátor, stejný balíček a stejný instalační hook mohou během 48 hodin poskytnout zcela odlišné hrozby. Sledujte scaffold, ne payload.

nástroje pro analýzu složení softwaru SCA
Stanovte priority, opravte a zabezpečte svá softwarová rizika
Získejte svůj bezplatný účet.
Nevyžaduje se žádná kreditní karta.

Zajistěte si vývoj a dodávky softwaru

s produktovým balíčkem Xygeni