PhantomBot volituste vargusest botnetivõrguks

PhantomBot: Typosquat kampaania, mis muutis volituste varguse algpõhjuseks võtmed kätte botnetikomplekti.

TL; DR

Üks npm-i väljaandja, deadcode09284814, on korraldanud legitiimse vastu trükivigadega kampaania axios ja chalk-template pakette alates 2026. aasta mai keskpaigast.

Kampaania algas tavapärase volituste ja rahakoti varastamisena, mille käigus vargati andmeid Serveo HTTPS tunnel.

On 2026-05-17Koos axois-utils:1.0.9, vahetas operaator kasuliku koormuse täielikult: sama kolmekordne installikonksu karkass, sama avaldaja, sama paketi nimi.

Kuid installiskript on nüüd platvormideülene DDoS-i botneti värbamine.

Kasulik koormus räägib a-ga localhost.run tunnel ja aktsepteerib üleujutuskäsklusi, muutes nakatunud keskkonnad DDoS-võimelise botneti osaks.

Operaator saatis isegi C2 serveri binaarfail tarballi sees, mis näitab selget eskaleerumist volituste vargusest aktiivse botnetitaristuni.

Kaks paketti, neli registris endiselt aktiivset versiooni ja üks operaator käitab nüüd mõlemat moodulit paralleelselt.

Raskusaste: kõrge.

ROKi pealkiri Mistahes axois-utils või chalk-tempalte versioon kirjastajalt deadcode09284814

Rünnak: kuidas see toimib

Kampaania on üles ehitatud tahtlikult igavale edastusraamistikule: kaks typosquat-tüüpi paketinime, mis erinevad ühe tähe võrra pakettidest, millel on sadu miljoneid iganädalasi allalaadimisi (aksioosid, kriidimall) ja kolmekordne install hooks mis garanteerivad teostuse. Huvitav on see, mida tellingud viib läbi — ja asjaolu, et operaator muutis lasti midagi muud muutmata.

Jagatud tellingud

Mõlema paketi iga avaldatud versioon deklareerib sama kolme elutsüklit hooks in pakett.json:

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

Kasuliku koormuse loetlemine kõigi kolme all hooks on liialdus — pärast installimist üksi töötaks vaikimisi npm installiValik on oluline: npm install –ignoreeri skripte jätab skriptid vahele, kuid mitmed levinud töövood (CI vahemälu taastab), mis käivitavad elutsükli uuesti hooks valikuliselt või arendajad, kes auditeerivad ainult pärast installimist) teevad ründaja jaoks kõige kindlamaks valikuks kolmekordselt redundantse deklaratsiooni.

kriiditempel lisab teise mehhanismi: see deklareerib axois-utils:^1.0.7 käituskeskkonnana sõltuvustTyposquatted'i installimine kriidimall Seetõttu tõmbab sisse ka õe-venna typosquati ja mõlemad paketifailid käivituvad. Need kaks paketti on koordineeritud paar, mitte sõltumatud loendid.

A-etapp — volituste/rahakoti varastaja (15.05.2026 → praegune aeg)

A-faas on algne kasulik koormus. Laadur on lühike postinstall.js mis osutab Serveo HTTPS-i pöördtunnelile:

// 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 alamdomeen kodeerib sihtkoha IP-aadressi (80.200.28.28) otse hostinimes – selle teenuse puhul äratuntav konventsioon. Operaator vahetab versioonide vahel juhuslikku alamdomeeni eesliidet, et vältida naiivseid domeenide blokeeritud nimekirju, kuid aluseks olev IP-aadress ei liigu kunagi.kriidi-templi:1.0.14 Kasutatud 8a3e818ea8f11186-80-200-28-28…; 1.0.16 / 1.0.19 / 1.0.20 kasutamine f04a273bd84c0622-….)

postinstall.js käed eemale phantom.js, 7,667-realine komplekteeritud „kollektori“ moodul. phantom.js jalutab peremehe poole:

SSH privaatvõtmed (~/.ssh/*)
.npmrc sisu ja mis tahes npm_* keskkonna märgid
AWS-i, GCP ja Azure'i mandaadifailid
GitHubi isikliku juurdepääsu tunnuse regulaaravaldus (ghp_*, gho_*, ghu_*, ghs_*)
Krüptorahakottide artefaktid Bitcoini, Exoduse, Electrumi, Monero, Litecoini, Dogecoini, Zcashi ja Dashi jaoks
Rekursiivne .env* kõndida läbi ~/projects, ~/dev, ~/code, ~/workspaceja installi cwd
Shelli ajalugu ja täielik process.env

Pakk postitatakse Serveo tunnelisse aadressil / kogudaPuudub segamine, VM-vastane loogika ega lavastuslik lähenemine – operaatori panus on mahule ja kiirusele.

B-etapp — PhantomBot DDoS-i värbamine (17.05.2026, ainult axois-utils:1.0.9)

B-faas asendab phantom.js + postinstall.js ühe failiga nimega distrube.js (trükivea tegi operaator). Kolmekordne konksuga telling failis package.json jääb samaks; pakett säilitab sama nime, ulatuse ja versioonimuutuste mustri. Väljastpoolt näeb axois-utils:1.0.9 välja nagu väike järg versioonile 1.0.6. Sisuliselt on see aga teistsugune pahavaraperekond.

distrube.js avaneb konfiguratsiooniplokiga, mis nimetab operaatori enda brändingu:

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

Kommentaarid on adresseeritud tulevasele komplekti käitavale operaatorile („Kasutage oma localhost.run HTTPS URL-i“). See ja lisaks botkliendiga kaasnevale annab märku, et tegemist pole lihtsalt ohvri kasuliku koormusega – see on komplekt ise.

Vool:

  1. Püsivus käivitub esimesena. Skript installib end operatsioonisüsteemiti kolmel erineval viisil (registri jooks + Käivituskaust + ülesanded Windowsis; crontab + phantom-bot.service süsteemitud üksus + .bashrc/.zshrc lisa + /etc/rc.local Linuxis; LaunchAgent com.phantom.bot.plist macOS-is). Nii püsivusteenuse nimi kui ka LaunchAgenti silt on fantoomrobot / com.phantom.bot, kust pärineb ka kampaania nimi.
  2. Süsteemiinfo exfil käivitub üks kord — ühekordne sõrmejälje POST failile b94b6bcfa27554.lhr.life:443/collect, mis sisaldab hostinime, platvormi, arhitektuuri, kasutajanime, protsessori/mälu, võrguliideseid, process.env, cwd, kodukataloogi, sõlme versiooni ja avalikku IP-aadressi. See on palju vähem agressiivne kui A-faas: pole SSH-d, rahakotte ega .env rekursiooni. Boti ülesanne on registreeruda, mitte varastada.
  3. Südamelöögi tsükkel avab iga 30 sekundi järel HTTPS POST-i aadressile b94b6bcfa27554.lhr.life:443/. Kasutajaagent on PhantomBot/1.0. TLS-i verifitseerimine on selgesõnaliselt keelatud (rejectUnauthorized: false). C2 vastus parsitakse JSON-failina kujul {type, target, port, duration, threads, method} ja saadetakse välja.
  4. Üleujutuse arsenal on ühendatud kuue käsuga:
Käsu tüüp moodulid märkused
ping Elujõu vastus Bot tuvastab end
http HTTP üleujutus 7. kihi taotluste üleujutus
https HTTPS-i üleujutus Sama mis http, TLS-mähitud
tcp TCP üleujutus 65 KB juhusliku sisuga rämpsposti
Udp UDP üleujutus 65 507-baidised UDP-paketid
kiire HTTP/2 kiire lähtestamisega DoS 2023. aasta CVE-2023-44487 tehnika

Kõik viis üleujutusmoodulit võtavad a sihtmärk, port, kestusja niidid argument — bot on üldine palgatav flooder, mis pole suunatud ühelegi konkreetsele ohvrile. Operaatori ohvrite nimekiri asub C2-s, mitte paketis.

Mis on siin uut — tarnitud C2 binaarfail

A-etapp on tuttav kujund: volituste vargus, paigalduskonks, müüja poolt tunneldatud C2. B-etapp on Ka tuttav kuju – DDoS-i botnetid on aastaid olnud pahatahtlike npm-pakettide sihtmärk. Ebatavaline on see, et operaator saatis serveripoolne npm tarballi komplektist:

  • c2 — 4-megabaidine kompileeritud Go ELF binaarfail
  • c2.go — selle binaarfaili 426-realine Go lähtekood

Kumbagi faili ei kutsu välja ükski installikonks. Need ei ole osa ohvri kasulikust koormusest. Need asuvad paketikataloogis samamoodi nagu dokumentatsioonifail. Kõige usutavam lugemine on see, et operaator lükkas oma arendustöö tööpuu npm-i peale ilma faililoendit kureerimata – tõeline OpSec-lipuke – ja kaasas oli täielik kahepoolne komplekt: klient, mida ohver käitab, ja server, mida operaator käitab.

See on loo see osa, mis õigustab „võtmed kätte botnetikomplekti” raamistamist. Igaüks, kes laadis alla axois-utils:1.0.9 Enne eemaldamist pole neil mitte ainult ohvri näidis – neil on ka toimiv C2 server.

Pöördepunkt ühes lauses

Sama kirjastaja, samad paketinimed, sama kolmekordne tugisüsteem, sama „fantoombränding” – aga kasulik koormus muutis üleöö monetiseerimismudelit: alates „saagikoristussaladuste saagist, mida saan edasi müüa“ kuni „üleujutusmahu rentimiseni, mida saan liisida“. Installiaegsed TTP-d, mida kaitsjad peaksid jälgima, on mõlemas faasis peaaegu identsed; allkirjapõhised kaitsemehhanismid on võtmega seotud A-faasi rahakotitee stringidega või phantom.js7,667-realine koguja oleks B-faasist täielikult mööda vaadanud.

Kuupäev (UTC) sündmus
2026-05-15 Esimene väljaanne: axois-utils:1.0.4 (LAN-testi ehitus, arendusriist aadressil 192.168.129.19)
2026-05-15 axois-utils:1.0.6 avaldatud — A-faasi C2 asendati 80.200.28.28 Serveo tunneli kaudu; allika kommentaar // Change to '80.200.28.28' for public kinnitab arendaja ja toote vahetust
2026-05-16 chalk-tempalte:1.0.14 ja 1.0.16 avaldatud — aheldatud laadur deklareerib axois-utils:^1.0.7 käitusaja sõltuvusena; Serveo alamdomeen on pööratud
2026-05-16 Rutiinse NPM-skannimise käigus avastati A-faasi kampaania; rakendati kinnitatud pahatahtlikkuse otsuseid
2026-05-17 axois-utils:1.0.9 avaldatud — kasuliku koormuse pivot: PhantomBot DDoS-i värbamine localhost.run tunneli kaudu; operaatori pool c2 binaarne ja c2.go allikas tarnitud tarballis
2026-05-17 chalk-tempalte:1.0.19 ja 1.0.20 avaldatud — ikka veel faas A (varastaja); operaator käitab nüüd mõlemat moodulit paralleelselt
2026-05-17 B-faasi avastamine rutiinse skaneerimise käigus; kohtuotsuseid rakendati kõigis 2026-05-17 versioonid
(jätkuv) Eemaldamisaruanded on ootel; kõik neli avaldatud paketti on kirjutamise ajal registris endiselt saadaval.

Kompromissi näitajad

Paketid

Ökosüsteemi Pakend Variandid
npm axois-utils (axios'e tüposkvaat) 1.0.4, 1.0.6, 1.0.9
npm chalk-tempalte (kriidimalli tüposquat) 1.0.14, 1.0.16, 1.0.19, 1.0.20

Autori identiteet

Väli Väärtus
npm-i väljaandja deadcode09284814
Väljaandja e-posti aadress phantomdeadcode@tutamail.com
SCM kontrollimine mitte ükski

Käsklus ja kontroll

Faas Lõpp-punkt Transport
A f04a273bd84c0622-80-200-28-28.serveousercontent.com:443/collect Serveo HTTPS tunnel
A 8a3e818ea8f11186-80-200-28-28.serveousercontent.com:443/collect Serveo HTTPS tunnel (varasem versioon)
A 80.200.28.28:443/collect Aluseks olev VPS-i lõpp-punkt
B b94b6bcfa27554.lhr.life:443/ localhost.run HTTPS-i pöördtunnel

Failide kokkuvõtted (SHA-256)

Fail SHA-256 märkused
c2 (Mine ELF-i, 4 MB) 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 Operaatoripoolne C2 server, tarnitakse sees axois-utils:1.0.9
c2.go (426 rida) 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 C2 binaarkoodi lähtekood
distrube.js 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 B-faasi botiklient
phantom.js (chalk-tempalte:1.0.19) 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 A-faasi volituste/rahakoti koguja
phantom.js (chalk-tempalte:1.0.20) d1c9e3f296ee9f7d5032f73f9c504cede50334bc14c394055fd5cb9c3a6e08b3 A-faasi kollektor (variant 1.0.20)
postinstall.js (chalk-tempalte:1.0.19 = 1.0.20) ffba9bdd6793edd5b38e12900252c1813a693f59c25af51c3b658cf3f27b6162 A-faasi laadur, mõlemas versioonis baitidentne

Omistamine ja motivatsioon

Me jälgime seda kampaaniat järgmiselt PhantomBot, võttes operaatori enda kaubamärgi Kasutajaagent: PhantomBot/1.0 südamelöökide päis phantom-bot.service süsteemitud üksus com.phantom.bot LaunchAgent silt ja fantomdeadcode@ e-posti aadress. Operaator on selle nime osas vähemalt nelja artefakti puhul järjepidev.

Signaalide kataloog

  • kirjastaja - surnud kood09284814 npm-is. Ühe käega konto, Tutamaili ühekordne e-post, ei SCM kinnitus. Lisaks sellele kampaaniale pole varasemaid avaldatud materjale.
  • Brändingu taaskasutamine — „phantom” esineb väljaandja e-kirjas, A-faasi koguja failinimes (phantom.js), B-faasi püsivuse teenuse nimes (phantom-bot.service), LaunchAgent sildil (com.phantom.bot) ja boti kasutajaagendi (PhantomBot/1.0).
  • Infrastruktuur — Üks VPS aadressil 80.200.28.28 faas A liigub Serveo alamdomeeni rotatsiooni kaudu; faas B liigub a-le localhost.run tagasikäik tunnel (b94b6bcfa27554.lhr.eluMõlemad pakkuja teenused on tasuta ja vajavad operaatori poolelt ainult väljaminevat SSH-d, mis on kooskõlas väikese eelarve ja vähese operatsiooniturvalisusega seadistustega.
  • koodi stiil — Lihtne JavaScript kogu ulatuses; pole mingit segadust tekitavat teksti, stringide kodeerimist ega VM-vastaseid kontrolle. Muutujate nimed on kirjeldavad (stealSystemInfo, käskluskäsk, httpFlood). Kommentaarid jaotises distrube.js pöörduda otse tulevase operaatori poole („Kasutage oma localhost.run HTTPS URL-i”), mis viitab sellele, et fail oli mõeldud levitamiseks komplektina, mitte ühe ründaja poolt kasutamiseks.
  • Operatiivturvalisuse libisemine — B-faasi tarball sisaldab nii botiklienti kui ka operaatoripoolset C2-serverit (c2 ELF + c2.go allikas). See on kooskõlas operaatoriga, kes saatis oma tööpuu npm-i ilma faililoendit auditeerimata. Kas operaator on kogenematu või on komplekt tähendas avalikult levitada ja C2 binaarfail on toote osa.
  • Enesekinnitus - axois-utils:1.0.4 sisaldab allika kommentaari // Avalike jaoks muutke väärtuseks '80.200.28.28' real 12, kinnitades arendus-/etapi-/tootmisjärgus olemist, mida operaatorid tavaliselt eitavad.

Motiveerimine

A-faasi kasulik koormus on otsene finantsvargus: volitustel, pilvevõtmetel, GitHubi žetoonidel ja krüptorahakottidel on kõik likviidsed edasimüügiturud. B-faas on samuti finantsiline, kuid kaudne: DDoS-i teenused rendivad minuti kaupa üleujutusvõimsust ja robotid, nagu siin pakutav, on inventar, millel need teenused töötavad. 30-sekundiline südamelöök, üldine sihtmärk/port/kestus käsklusskeem ja viieprotokolliline üleujutuse arsenal on standard saapaoperaatori toode.

Mõlema mooduli paralleelne käitamine — kriidi-templi:1.0.19 ja 1.0.20 jätka varastaja saatmist samal ajal axois-utils:1.0.9 saadab boti – viitab sellele, et operaator maandab tuluallikaid, selle asemel et A-faasist loobuda. Pöördepunkt on lisamine, mitte asendaja.

Mida me ei väida

Me ei ole suutnud kinnitada reaalse maailma identiteeti selle taga surnud kood09284814 käepide ja me ei omista seda kampaaniat ühelegi nimetatud ohutegijale, grupile ega riigile. „Fantoom“ bränding on artefaktide lõikes piisavalt järjepidev, et viidata ühele operaatorile, kuid C2 binaarfaili komplektlaadne saatmine jätab avatuks võimaluse, et tulevased paketid sõltumatutelt käepidemetelt taaskasutavad sama koodi.

mõju

Õigustatud küki sihtmärgid aksioosid ja kriidimall on JavaScripti ökosüsteemis laialdaselt sõltuvad; aksioosid üksi kuulub kolmekümne enim allalaaditud npm-paketi hulka. Typosquat-nimed on ühe klahvivajutuse kaugusel tegelikest (aksoisaksioosid, tempaltešabloon) ja mõlemad on keeleliselt usutavad kirjavead.

Enne eemaldamist ei õnnestunud meil saada pahatahtlike versioonide kohta usaldusväärset allalaadimisstatistikat – npm ei säilita versioonide kaupa allalaadimiste arvu pärast paketi avaldamise tühistamist ja npms.io-stiilis puhverserverid on sellises ulatuses lärmakad. Iga organisatsioon, mille lukustusfail annab tulemuseks paketi nimega axois-utils or kriiditempel kirjastajalt surnud kood09284814 tuleks käsitleda kui ohustatud isikut: vahetage kõiki olemasolevaid volitusi protsess.keskkond Auditeerige kahjustatud hostil püsivusvektoreid iga operatsioonisüsteemi kohta (vt allpool jaotist „Mida kaitsjad peaksid tegema”) ja eemaldage sõltuvus.

Tärkavad mustrid

See kampaania on hea näide muutusest, mida oleme näinud mitmes hiljutises NPM-i intsidendis: Paigalduskonksuga tellingud on vastupidav vara; kasulik koormus on vahetatavSama kirjastaja, sama pakett, sama eelinstallimine / paigaldama / pärast installimist kolmekordne ja isegi sama versiooni-tõukerütmi kadents – ainus asi, mis vahepeal muutus axois-utils:1.0.6 ja axois-utils:1.0.9 oli see fail hooks käivitamine. Allkirjapõhine tuvastus, mis on seotud A-faasi kasuliku koormusega (rahakoti tee stringid, phantom.js'i 7,667-realine koguja, Serveo C2 host, oleks märgistanud kolm esimest versiooni ja jätnud B-faasi üldse vahele.

Sama muster on nähtav ka teistes 2026. aasta kampaaniates, mida oleme jälginud: üks operaator stabiilse tugisambaga, vaheldumisi mandaatide varguse, eksamipettuste klientide, Telegram-roboti abil e-posti teel värbamise ja nüüd ka DDoS-värbamise vahel. Kaitsjad, kes tuginevad kasuliku andmevoo allkirjadele, kaotavad iga kampaania teise vooru.

Järeldus on see, et Installiaegsed TTP-d on parem signaalKolmekordsed installikonksu deklaratsioonid, imporditavate failide installiskriptid. https or lapseprotsess, installige skripte, mis kirjutavad kasutaja käivituskaustadesse, ja installige skripte, mis lahendavad hostinimesid tasuta pöördtunnelteenustes (Serveo, localhost.run, ngrok, cloudflared) on kõik haruldased legitiimsetes pakettides ja levinud pahatahtlikes pakettides.

Mida kaitsjad peaksid tegema

  • Lukustusfaili audit. Otsi iga pakett-lukk.json / lõng.lukk / pnpm-lock.yaml teie organisatsioonis täpsete stringide jaoks axois-utils ja kriiditempelKohtle iga matši kompromissina.
  • Pööra saladusi mõjutatud peremeesorganismidel. A-faasis kogutakse hulgi SSH, pilve, GitHubi, npm-i ja rahakoti volikirju. Eeldatakse, et kõik volikirjad on kunagi olemas. protsess.keskkond, ~ / .ssh, ~/.aws, ~/.npmrc, ~ / .konfigvõi mis tahes .ümbrik* kahjustatud hostil olev fail on avalikustatud.
  • Eemaldage püsivus (etapp B). Windowsis kustutage HKCU\Tarkvara\Microsoft\Windows\Praegune versioon\Käivita\SüsteemiUuendus, eemaldage %APPDATA%\Microsoft\Windows\Start menüü\Programmid\Startup\system-update.batja schtasks /delete /tn SystemUpdate /fLinuxis crontab -e ja eemaldage @reboot sõlm …, systemctl –kasutaja keelamine –nüüd phantom-bot.service siis kustuta ~/.config/systemd/user/phantom-bot.service, nühkima .bashrc / .zshrc / /etc/rc.localmacOS-is launchctl unload ~/Library/LaunchAgents/com.phantom.bot.plist seejärel kustutage loendiloend.
  • Blokeeri C2 hostid. Lisa IOC tabelis olevad neli C2 lõpp-punkti oma väljuva andmevoo blokeerimisloendisse. *.serveousercontent.com ja *.lhr.elu saab hulgi blokeerida, kui teie keskkonnal pole tagasitunneli teenuste jaoks seaduslikku kasutust.
  • Jahtimine installimise ajal tekkiva TTP järgi, mitte kasulik koormus. Inventuuri lukustusfaili kirjed, mille pakett.json kuulutab eelinstallimine, paigaldamaja pärast installimist kõik osutavad samale skriptile. Võrrelge paketi vanust ja avaldaja kinnituse olekut. See muster on legitiimsete pakettide puhul haruldane ja on kõige usaldusväärsem signaal, mida PhantomBot taaskasutab.
  • C2 binaarfaili audit. Igaüks, kes laadis alla axois-utils:1.0.9 omab operaatori C2 serverit (c2 ELF, sha256 165fa92d…) kettal. Skannib vahemälusid ja CI artefaktide salvestusruume. Binaarfail ise on passiivne, kuid selle olemasolu tööjaamas on ühemõtteline tõend paketi installimise kohta.

Lõppjoon

Sama operaator, sama pakett ja sama installikonks võivad 48 tunni jooksul edastada täiesti erinevaid ohte. Jälgige tellinguid, mitte koormust.

sca-tööriistad-tarkvara-kompositsiooni-analüüsi-tööriistad
Tarkvarariskide prioriseerimine, leevendamine ja turvamine
Hankige oma tasuta konto.
Krediitkaarti pole vaja.

Turvaline tarkvaraarendus ja -tarne

Xygeni tootekomplektiga