PhantomBot Van Geloofsbriefdiefstal tot Botnet

PhantomBot: 'n Typosquat-veldtog wat van geloofsbriewediefstal na 'n kant-en-klare botnet-stel oorgeskakel het

TL; DR

'n Enkele npm-uitgewer, deadcode09284814, het 'n tiposquat-veldtog teen die wettige gevoer axios en chalk-template pakkette sedert middel Mei 2026.

Die veldtog het begin as 'n konvensionele geloofsbriewe- en beursie-dief, wat data na 'n Serveo HTTPS-tonnel.

On 2026-05-17, Met axois-utils:1.0.9, die operateur het die vrag heeltemal omgeruil: dieselfde driedubbele installasie-haak-steierwerk, dieselfde uitgewer, dieselfde pakketnaam.

Maar die installasieskrip is nou 'n kruisplatform DDoS botnet-rekrut.

Die vrag spreek van 'n localhost.run tonnel en aanvaar vloedbevele, wat besmette omgewings in deel van 'n DDoS-bekwame botnet omskep.

Die operateur het selfs die C2-bediener binêre binne die tarbal, wat 'n duidelike eskalasie van geloofsbriewediefstal tot aktiewe botnet-infrastruktuur toon.

Twee pakkette, vier weergawes steeds aktief op die register, en een operateur wat nou albei modules parallel laat loop.

Ernstigheid: hoog.

Opskrif IOK Enige axois-utils of chalk-tempalte weergawe van uitgewer deadcode09284814

Die Aanval: Hoe Dit Werk

Die veldtog is gebou op 'n doelbewus vervelige afleweringssteierwerk: twee tiposquat-pakketname, een letter af van pakkette met honderde miljoene weeklikse aflaaie (Axios, kryt-sjabloon), en drievoudige installasie hooks wat uitvoering waarborg. Wat interessant is, is wat die steierwerk dra — en die feit dat die operateur die vrag verander het sonder om enigiets anders te verander.

Die gedeelde steierwerk

Elke gepubliseerde weergawe van beide pakkette verklaar dieselfde drie lewensiklusse hooks in pakket.json:

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

Lys die vrag onder al drie hooks is oordadig — na-installasie alleen sou in 'n verstek loop npm installeerDie keuse maak saak: npm installeer –ignore-skripte slaan skripte oor, maar verskeie algemene werkvloeie (CI-kasherstellings wat die lewensiklus heruitvoer) hooks selektief, of ontwikkelaars wat slegs oudit na-installasie) maak 'n drievoudige oorbodige verklaring die veiligste weddenskap vir die aanvaller.

kryt-sjabloon voeg 'n tweede meganisme by: dit verklaar axois-utils:^1.0.7 as 'n looptyd afhanklikheidInstalleer die typosquatted kryt-sjabloon trek dus ook die sibbe-typosquat in, en beide vragte loop. Die twee pakkette is 'n gekoördineerde paar, nie onafhanklike lyste nie.

Fase A — geloofsbriewe / beursie-dief (2026-05-15 → hede)

Fase A is die oorspronklike vrag. Die laaier is 'n kort postinstall.js wat na 'n Serveo HTTPS omgekeerde tonnel wys:

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

Die Serveo-subdomein kodeer die bestemmings-IP (80.200.28.28) direk in die gasheernaam — 'n herkenbare konvensie vir daardie diens. Die operateur roteer die ewekansige subdomeinvoorvoegsel tussen weergawes om naïewe domeinblokkeringslyste te vermy, maar die onderliggende IP beweeg nooit.kryt-sjabloon: 1.0.14 gebruik 8a3e818ea8f11186-80-200-28-28…; 1.0.16 / 1.0.19 / 1.0.20 gebruik f04a273bd84c0622-….)

postinstall.js hande af na fantoom.js, 'n gebundelde "versamelaar"-module van 7 667 reëls. fantoom.js loop die gasheer vir:

SSH privaat sleutels (~/.ssh/*)
.npmrc inhoud en enige npm_* env-tokens
AWS-, GCP- en Azure-bewyslêers
GitHub persoonlike-toegang-token regex (ghp_*, gho_*, ghu_*, ghs_*)
Kripto-beursie-artefakte vir Bitcoin, Exodus, Electrum, Monero, Litecoin, Dogecoin, Zcash, Dash
'n Rekursiewe .env* loop deur ~/projects, ~/dev, ~/code, ~/workspace, en die installasie-cwd
Shell-geskiedenis en die volledige process.env

Die bundel word na die Serveo-tonnel GEPOS by / versamelDaar is geen verduistering, geen anti-VM-logika, geen stadiumbepaling nie – die operateur se weddenskap is op volume en spoed.

Fase B — PhantomBot DDoS-rekrut (2026-05-17, axois-utils:1.0.9 alleenlik)

Fase B vervang phantom.js + postinstall.js met 'n enkele lêer genaamd distrube.js (die tikfout is die operator s'n). Die drievoudige haak-scaffold in package.json bly onveranderd; die pakket behou dieselfde naam, omvang en weergawe-bump-patroon. Van buite af lyk axois-utils:1.0.9 soos 'n klein opvolg op 1.0.6. Binne is dit 'n ander malware-familie.

distrube.js maak oop met 'n konfigurasieblok wat die operateur se eie handelsmerk benoem:

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

Die kommentaar is gerig aan 'n toekomstige operateur wat die kit uitvoer ("Gebruik jou localhost.run HTTPS URL"). Dit, plus wat langs die botkliënt verskyn, is die aanduiding dat dit nie net 'n slagoffervrag is nie - dit is die kit.

Die vloei:

  1. Volharding loop eerste. Die skrip installeer homself op drie verskillende maniere per bedryfstelsel (register Run + Opstartmap + stasks op Windows; crontab + fantoom-bot.diens stelseleenheid + .bashrc/.zshrc voeg by + /etc/rc.local op Linux; LaunchAgent com.phantom.bot.plist op macOS). Die persistensiediensnaam en die LaunchAgent-etiket is albei spook-bot / com.phantom.bot, wat ook is waar die veldtognaam vandaan kom.
  2. Stelselinligting exfil loop een keer — 'n eenmalige vingerafdruk-POST na b94b6bcfa27554.lhr.life:443/collect wat gasheernaam, platform, argief, gebruikersnaam, SVE/RAM, netwerkkoppelvlakke, process.env, cwd, tuisgids, node-weergawe en publieke IP bevat. Dit is baie minder aggressief as Fase A: geen SSH, geen beursies, geen .env-rekursie nie. Die bot se taak is om in te skryf, nie om te steel nie.
  3. Hartkloplus maak elke 30 sekondes 'n HTTPS POST oop na b94b6bcfa27554.lhr.life:443/. Die gebruikersagent is PhantomBot/1.0. TLS-verifikasie is eksplisiet gedeaktiveer (rejectUnauthorized: false). Die C2-respons word as JSON van die vorm {type, target, port, duration, threads, method} ontleed en versend.
  4. Vloedarsenaal is gekoppel aan ses bevele:
Tipe opdrag module Notes
ping Lewendigheid antwoord Bot identifiseer homself
http HTTP-vloed Laag-7 versoekvloed
https HTTPS-vloed Dieselfde as http, TLS-toegedraai
tcp TCP-vloed 65 KB ewekansige-vrag-strooipos
UDP UDP-vloed 65 507-greep UDP-pakkies
vinnige HTTP/2 vinnige herstel DoS Die 2023 CVE-2023-44487-tegniek

Al vyf vloedmodules neem 'n teiken, hawe, duur, en drade argument — die bot is 'n generiese huur-oorstromer, nie gemik op enige spesifieke slagoffer nie. Die operateur se slagofferlys is op die C2, nie in die pakket nie.

Wat is nuut hier — die verskeepte C2-binêre weergawe

Fase A is 'n bekende vorm: geloofsbriewediefstal, installasiehaak, verskaffer-getunnelde C2. Fase B is Ook 'n bekende vorm — DDoS-botnette is al jare lank 'n kenmerk van kwaadwillige npm-pakkette. Wat ongewoon is, is dat die operateur die bediener kant van die kit binne die npm-tarball:

  • c2 — 'n 4-megagreep saamgestelde Go ELF binêre
  • c2.go — die 426-reël Go-bron vir daardie binêre lêer

Geen lêer word deur enige installasiehaak aangeroep nie. Hulle is nie deel van die slagoffer se vrag nie. Hulle sit in die pakketgids op dieselfde manier as 'n dokumentasielêer. Die mees aanneemlike lesing is dat die operateur hul ontwikkelingswerkboom na npm gestoot het sonder om die lêerlys te kureer - 'n ware OpSec-glip - en wat gestuur is, is die volledige tweesydige stel: die kliënt wat 'n slagoffer laat loop, en die bediener wat die operateur laat loop.

Dit is die deel van die storie wat die "klaargemaakte botnet-stel"-raamwerk regverdig. Enigiemand wat dit afgelaai het axois-utils:1.0.9 voor die afskakeling het nie net 'n slagoffermonster nie - hulle het 'n werkende C2-bediener.

Die spilpunt, in een sin

Dieselfde uitgewer, dieselfde pakketname, dieselfde driedubbele haak-steierwerk, dieselfde "spook"-handelsmerk - maar die vrag het oornag die monetiseringsmodel verander: van "oesgeheime wat ek kan herverkoop" tot "huur vloedkapasiteit wat ek kan lease". Die installasietyd-TTP's wat verdedigers moet dophou, is byna identies in beide fases; handtekeninggebaseerde verdediging gekoppel aan Fase A se beursie-padstringe of aan fantoom.jsse versamelaar van 7 667 reëls sou Fase B heeltemal gemis het.

Datum (UTC) Event
2026-05-15 Eerste publikasie: axois-utils:1.0.4 (LAN-toetsbou, ontwikkelaarsrig by 192.168.129.19)
2026-05-15 axois-utils:1.0.6 gepubliseer — Fase A C2 omgeruil na 80.200.28.28 via Serveo-tonnel; die bronkommentaar // Change to '80.200.28.28' for public bevestig die dev→prod-ruiling
2026-05-16 chalk-tempalte:1.0.14 en 1.0.16 gepubliseer — gekettingde laaier verklaar axois-utils:^1.0.7 as 'n looptydafhanklikheid; Serveo-subdomein geroteer
2026-05-16 Fase A-veldtog ontdek tydens roetine npm-skandering; bevestigde kwaadwillige uitsprake toegepas
2026-05-17 axois-utils:1.0.9 gepubliseer — vragmotor-draaipunt: PhantomBot DDoS-werf via localhost.run-tonnel; operateurkant c2 binêre en c2.go bron gestuur in die tarbal
2026-05-17 chalk-tempalte:1.0.19 en 1.0.20 gepubliseer — steeds Fase A (steeler); operateur laat nou beide modules parallel loop
2026-05-17 Ontdekking van Fase B tydens roetine-skandering; uitsprake toegepas op alles 2026-05-17 weergawes
(Deurlopende) Verwyderingsverslae hangende; al vier gepubliseerde pakkette bly beskikbaar op die register ten tyde van skryf

Aanwysers van Kompromie

Pakkette

ekosisteem pakket weergawes
NPM axois-utils (tiposquat van axios) 1.0.4, 1.0.6, 1.0.9
NPM chalk-tempalte (tikosquat van kryt-sjabloon) 1.0.14, 1.0.16, 1.0.19, 1.0.20

Outeuridentiteit

Veld waarde
npm-uitgewer deadcode09284814
Uitgewer se e-posadres phantomdeadcode@tutamail.com
SCM verifikasie niemand

Bevel-en-beheer

Fase eindpunt vervoer
A f04a273bd84c0622-80-200-28-28.serveousercontent.com:443/collect Serveo HTTPS-tonnel
A 8a3e818ea8f11186-80-200-28-28.serveousercontent.com:443/collect Serveo HTTPS-tonnel (vroeëre weergawe)
A 80.200.28.28:443/collect Onderliggende VPS-eindpunt
B b94b6bcfa27554.lhr.life:443/ localhost.run HTTPS omgekeerde tonnel

Lêerverdelings (SHA-256)

File SHA-256 Notes
c2 (Gaan ELF, 4 MB) 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 Operateurkant C2-bediener, binne gestuur axois-utils:1.0.9
c2.go (426 reëls) 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 Gaan na die bronkode vir die C2-binêre kode
distrube.js 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 Fase B botkliënt
phantom.js (chalk-tempalte:1.0.19) 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 Fase A-bewysstuk / beursie-versamelaar
phantom.js (chalk-tempalte:1.0.20) d1c9e3f296ee9f7d5032f73f9c504cede50334bc14c394055fd5cb9c3a6e08b3 Fase A-kollektor (1.0.20-variant)
postinstall.js (chalk-tempalte:1.0.19 = 1.0.20) ffba9bdd6793edd5b38e12900252c1813a693f59c25af51c3b658cf3f27b6162 Fase A-laaier, byte-identies oor beide weergawes

Toeskrywing en Motivering

Ons volg hierdie veldtog as PhantomBot, wat die operateur se eie handelsmerk van die Gebruikersagent: PhantomBot/1.0 hartklopkop, die fantoom-bot.diens systemd-eenheid, die com.phantom.bot LaunchAgent-etiket, en die fantoomdooiekode@ e-pos handvatsel. Die operateur is konsekwent oor hierdie naam oor ten minste vier artefakte.

Seine katalogus

  • uitgewer - dooiekode09284814 op npm. Enkelhandige rekening, Tutamail weggooibare e-pos, nee SCM verifikasie. Geen vorige publikasiegeskiedenis buite hierdie veldtog nie.
  • Hergebruik van handelsmerke — “phantom” verskyn in die uitgewer se e-pos, in die Fase A-versamelaar se lêernaam (fantoom.js), in die Fase B-persistensiediensnaam (fantoom-bot.diens), in die LaunchAgent-etiket (com.phantom.bot), en in die bot Gebruiker-Agent (PhantomBot/1.0).
  • Infrastruktuur — 'n Enkele VPS by 80.200.28.28 fronteer Fase A via Serveo subdomein rotasie; Fase B beweeg na 'n plaaslike gasheer.run omgekeerde tonnel (b94b6bcfa27554.lhr.leweBeide verskaffersdienste is gratis en vereis slegs uitgaande SSH aan die operateur se kant, in ooreenstemming met lae-begroting, lae-OpSec-opstellings.
  • kode styl — Gewone JavaScript deurgaans; geen verdoeseling, geen stringkodering, geen anti-VM-kontroles nie. Veranderlike name is beskrywend (steelStelselinligting, uitvoerBevel, httpVloed). Kommentaar in distrube.js 'n toekomstige operator direk aanspreek ("Gebruik jou localhost.run HTTPS URL"), wat daarop dui dat die lêer bedoel was om as 'n kit herversprei te word, nie deur 'n enkele aanvaller gebruik te word nie.
  • OpSec-strokie — Die Fase B-tarbal stuur beide die botkliënt en die operateurkant C2-bediener (c2 ELF + c2.go bron). Dit stem ooreen met 'n operateur wat hul werkboom na npm gestoot het sonder om die lêerlys te oudit. Óf die operateur is onervare, óf die kit is bedoel om publiek versprei te word en die C2-binêre lêer is deel van die produk.
  • Selfbevestiging - axois-utils:1.0.4 bevat die bronkommentaar // Verander na '80.200.28.28' vir publiek op lyn 12, wat die ontwikkelings-/opvoerings-/produksievordering bevestig wat operateurs tipies ontken.

Motivering

Die Fase A-vrag is eenvoudige finansiële diefstal: geloofsbriewe, wolksleutels, GitHub-tokens en kripto-beursies het almal likiede herverkoopmarkte. Fase B is ook finansieel, maar indirek: DDoS-te-huur ("booter")-dienste huur vloedkapasiteit per minuut, en robotte soos die een wat hier gestuur word, is die voorraad waarop daardie dienste loop. Die 30-sekonde hartklop, die generiese teiken/hawe/duur bevelskema, en die vyf-protokol vloedarsenaal is die standard produk van 'n opstartoperateur.

Laat beide modules parallel loop — kryt-sjabloon: 1.0.19 en 1.0.20 gaan voort om die dief te stuur terwyl axois-utils:1.0.9 stuur die bot — dui daarop dat die operateur inkomstestrome verskans eerder as om Fase A te laat vaar. Die spilpunt is 'n Daarbenewens, nie 'n plaasvervanger nie.

Wat ons nie beweer nie

Ons kon nie 'n werklike identiteit agter die bevestig nie. dooiekode09284814 handvatsel, en ons skryf nie hierdie veldtog toe aan enige genoemde bedreigingsakteur, groep of land nie. Die "fantoom"-handelsmerk is konsekwent genoeg oor artefakte om 'n enkele operateur voor te stel, maar die kitstyl-versending van die C2-binêre laat die moontlikheid oop dat toekomstige pakkette van onverwante handvatsels dieselfde kode sal hergebruik.

impak

Die wettige hurk-teikens Axios en kryt-sjabloon word wyd afhanklik gemaak in die JavaScript-ekosisteem; Axios alleen staan ​​onder die dertig mees afgelaaide npm-pakkette. Die typosquat-name is een toetsaanslag weg van die regte name (axoisAxios, sjabloonsjabloon), en albei is taalkundig aanneemlike spelfoute.

Ons kon nie betroubare aflaaistatistieke vir die kwaadwillige weergawes bekom voor verwydering nie — npm behou nie aflaaitellings per weergawe nadat 'n pakket gedepubliseer is nie, en npms.io-styl proxies is raserig op hierdie skaal. Enige organisasie wie se sluitlêer na 'n pakket met die naam oplos axois-utils or kryt-sjabloon van uitgewer dooiekode09284814 moet as gekompromitteerd behandel word: roteer elke teenwoordige geloofsbriewe in proses.omgewing op die betrokke gasheer, oudit persistensievektore per bedryfstelsel (sien "Wat verdedigers moet doen" hieronder), en verwyder die afhanklikheid.

Ontluikende patrone

Hierdie veldtog is 'n voorbeeld van 'n verskuiwing wat ons in verskeie onlangse npm-voorvalle gesien het: Die installasiehaak-steier is die duursame bate; die vrag is omruilbaarDieselfde uitgewer, dieselfde pakket, dieselfde vooraf installeer / installeer / na-installasie drievoudig, en selfs dieselfde weergawe-stampkadens — die enigste ding wat verander het tussen axois-utils:1.0.6 en axois-utils:1.0.9 was die lêer die hooks hardloop. Handtekeninggebaseerde opsporing gekoppel aan die Fase A-vrag (beursie-padstringe, fantoom.jsse 7 667-reël versamelaar, die Serveo C2-gasheer) sou die eerste drie weergawes gemerk het en Fase B heeltemal gemis het.

Dieselfde patroon is sigbaar in ander 2026-veldtogte wat ons dopgehou het: 'n enkele operateur met 'n stabiele steierwerk, wat wissel tussen geloofsbriewediefstal, eksamen-kulkliënte, Telegram-bot-exfil, en nou DDoS-werwing. Verdedigers wat op vraghandtekeninge staatmaak, sal die tweede ronde van elke veldtog aanhou verloor.

Die gevolgtrekking is dat Installasietydse TTP's is die beter seinDrievoudige installasie-haak-verklarings, installeer skripte wat invoer https or kind_proses, installeer skripte wat na gebruikersopstartlêers skryf, en installeer skripte wat gasheername op gratis omgekeerde-tonneldienste oplos (Serveo, plaaslike gasheer.run, ngrok, cloudflared) is almal skaars in wettige pakkette en algemeen onder kwaadwillige pakkette.

Wat verdedigers moet doen

  • Sluitlêeroudit. Soek elke pakket-lock.json / garen.slot / pnpm-slot.yaml in jou organisasie vir die presiese snare axois-utils en kryt-sjabloonBeskou enige wedstryd as 'n kompromie.
  • Roteer geheime op geaffekteerde gashere. Fase A het SSH-, wolk-, GitHub-, npm- en beursie-bewyse in grootmaat versamel. Neem aan dat elke bewys ooit teenwoordig is in proses.omgewing, ~/.ssh, ~/.aws, ~/.npmrc, ~ / .config, of enige .omgewing* lêer op die betrokke gasheer word blootgestel.
  • Verwyder volharding (Fase B). Verwyder op Windows HKCU\Software\Microsoft\Windows\HuidigeVersie\Run\StelselOpdatering, verwyder %APPDATA%\Microsoft\Windows\Start Menu\Programme\Opstart\system-update.bat, en schtasks /delete /tn Stelselopdatering /fOp Linux, crontab-e en verwyder @herlaai-knoop …, systemctl –gebruiker deaktiveer –nou fantoom-bot.diens verwyder dan ~/.config/systemd/gebruiker/phantom-bot.service, skrop .bashrc / .zshrc / /etc/rc.localOp macOS, launchctl aflaai ~/Biblioteek/LaunchAgents/com.phantom.bot.plist verwyder dan die plist.
  • Blokkeer die C2-gashere. Voeg die vier C2-eindpunte in die IOC-tabel by jou uitgangsblokklys. *.serveousercontent.com en *.lhr.lewe kan grootliks geblokkeer word as jou omgewing geen wettige gebruik vir omgekeerde tonneldienste het nie.
  • Soek volgens installasietyd-TTP, nie vrag nie. Voorraad-sluitlêerinskrywings waarvan pakket.json verklaar vooraf installeer, installeer, en na-installasie almal wys na dieselfde skrip. Kruiskontroleer teen pakketouderdom en uitgewerverifikasiestatus. Hierdie patroon is skaars in wettige pakkette en is die enkele mees betroubare sein wat PhantomBot hergebruik.
  • Oudit vir die C2 binêre. Enigiemand wat afgelaai het axois-utils:1.0.9 het die operateur se C2-bediener (c2 ELF, sha256 165fa92d…) op skyf. Skandeer kasgeheue en CI-artefakbergings. Die binêre lêer is op sigself dormant, maar die teenwoordigheid daarvan op 'n werkstasie is ondubbelsinnige bewys dat die pakket geïnstalleer is.

Sluitingslyn

Dieselfde operateur, dieselfde pakket en dieselfde installasiehaak kan binne 48 uur heeltemal verskillende bedreigings lewer. Hou die steierwerk dop, nie die vrag nie.

sca-tools-sagteware-samestelling-analise-gereedskap
Prioritiseer, herstel en beveilig jou sagtewarerisiko's
Kry jou gratis rekening.
Geen kredietkaart benodig nie.

Beveilig u sagteware-ontwikkeling en -lewering

met Xygeni-produksuite