PhantomBot: Dari Pencurian Kredensial Menjadi Botnet

PhantomBot: Kampanye Typosquat yang Beralih dari Pencurian Kredensial ke Perangkat Botnet Siap Pakai

TL; DR

Satu penerbit npm tunggal, deadcode09284814, telah menjalankan kampanye typosquat terhadap akun yang sah. axios ke chalk-template paket sejak pertengahan Mei 2026.

Kampanye ini dimulai sebagai pencurian kredensial dan dompet konvensional, yang mengekstraksi data ke suatu tempat. Terowongan HTTPS Serveo.

On 2026-05-17, dengan axois-utils:1.0.9, operator tersebut mengganti seluruh muatan (payload): kerangka kerja triple install-hook yang sama, penerbit yang sama, nama paket yang sama.

Namun, skrip instalasi tersebut kini menjadi perekrut botnet DDoS lintas platform.

Muatan tersebut berkomunikasi dengan sebuah localhost.run Membuat terowongan dan menerima perintah serangan DDoS, mengubah lingkungan yang terinfeksi menjadi bagian dari botnet yang mampu melakukan serangan DDoS.

Operator itu bahkan mengirimkan biner server C2 Di dalam file tarball, terlihat jelas adanya peningkatan dari pencurian kredensial menjadi infrastruktur botnet aktif.

Dua paket, empat versi masih aktif di registri, dan satu operator sekarang menjalankan kedua modul secara paralel.

Tingkat keparahan: tinggi.

Judul IOC Versi axois-utils atau chalk-template apa pun dari penerbit deadcode09284814

Serangan: Bagaimana Cara Kerjanya

Kampanye ini dibangun di atas kerangka penyampaian yang sengaja membosankan: dua nama paket typosquat, hanya berbeda satu huruf dari paket yang diunduh ratusan juta kali setiap minggunya (aksioma, templat kapur), dan pemasangan tiga kali lipat hooks yang menjamin eksekusi. Yang menarik adalah kerangka kerjanya. membawa — dan fakta bahwa operator mengubah muatan tanpa mengubah hal lain.

Perancah bersama

Setiap versi yang diterbitkan dari kedua paket tersebut menyatakan tiga siklus hidup yang sama. hooks in package.json:

Mencantumkan muatan di bawah ketiganya hooks itu berlebihan — pascainstal sendirian akan berjalan secara default instalasi npmPilihan itu penting: npm install –ignore-scripts Melewati skrip, tetapi beberapa alur kerja umum (pemulihan cache CI yang menjalankan kembali siklus hidup) hooks secara selektif, atau pengembang yang hanya melakukan audit pascainstal) membuat deklarasi tiga kali lipat redundansi adalah taruhan teraman bagi penyerang.

templat kapur menambahkan mekanisme kedua: ia menyatakan axois-utils:^1.0.7 sebagai runtime ketergantunganMemasang typosquatting templat kapur Oleh karena itu, paket typosquat yang merupakan saudara kandung juga ikut terlibat, dan kedua muatan (payload) tersebut berjalan. Kedua paket tersebut merupakan pasangan yang terkoordinasi, bukan daftar yang independen.

Fase A — pencuri kredensial/dompet (15-05-2026 → sekarang)

Fase A adalah muatan asli. Loadernya pendek. postinstall.js yang mengarah ke terowongan balik HTTPS Serveo:

Subdomain Serveo mengenkode IP tujuan (80.200.28.28) langsung di nama host — konvensi yang mudah dikenali untuk layanan tersebut. Operator merotasi awalan subdomain acak di antara versi untuk menghindari daftar blokir domain yang naif, tetapi IP yang mendasarinya tidak pernah berubah.chalk-template:1.0.14 bekas 8a3e818ea8f11186-80-200-28-28…; 1.0.16 / 1.0.19 / 1.0.20 gunakan f04a273bd84c0622-….)

postinstall.js lepas tangan phantom.js, sebuah modul "kolektor" terbundel dengan 7,667 baris. phantom.js mengantar tuan rumah untuk:

Kunci privat SSH (~/.ssh/*)
.npmrc isi dan segala sesuatu npm_* token lingkungan
Berkas kredensial AWS, GCP, dan Azure
Ekspresi reguler token akses pribadi GitHub (ghp_*, gho_*, ghu_*, ghs_*)
Artefak dompet kripto untuk Bitcoin, Exodus, Electrum, Monero, Litecoin, Dogecoin, Zcash, Dash.
Rekursif .env* berjalan melalui ~/projects, ~/dev, ~/code, ~/workspace, dan instal cwd
Sejarah Shell dan selengkapnya process.env

Bundel tersebut dikirim melalui POS ke terowongan Serveo di / mengumpulkanTidak ada pengaburan, tidak ada logika anti-VM, tidak ada staging — operator bertaruh pada volume dan kecepatan.

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

Fase B menggantikan phantom.js + postinstall.js dengan satu file bernama distrube.js (kesalahan ketik ada pada operator). Kerangka triple-hook di package.json tidak berubah; paket tersebut mempertahankan nama, cakupan, dan pola peningkatan versi yang sama. Dari luar, axois-utils:1.0.9 tampak seperti peningkatan kecil dari 1.0.6. Namun di dalamnya, ini adalah keluarga malware yang berbeda.

ditrusi.js Diawali dengan blok konfigurasi yang menyebutkan merek dagang operator itu sendiri:

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

Komentar tersebut ditujukan kepada operator di masa mendatang yang menjalankan perangkat tersebut (“Gunakan URL HTTPS localhost.run Anda”). Hal itu, ditambah dengan apa yang dikirimkan selanjutnya ke klien bot, menunjukkan bahwa ini bukan hanya muatan korban — melainkan perangkat itu sendiri.

Aliran:

  1. Ketekunan dijalankan pertama kali. Skrip tersebut menginstal dirinya sendiri dalam tiga cara berbeda per sistem operasi (registri). Run + Folder startup + tugas sch di Windows; crontab + layanan bot hantu unit sistem + .bashrc/.zsrc tambahkan + /etc/rc.local di Linux; LaunchAgent com.phantom.bot.plist (pada macOS). Nama layanan persistensi dan label LaunchAgent keduanya robot hantu / com.phantom.bot, yang juga merupakan asal nama kampanye tersebut.
  2. Eksfiltrasi informasi sistem Berjalan sekali — satu kali permintaan POST sidik jari ke b94b6bcfa27554.lhr.life:443/collect yang membawa nama host, platform, arsitektur, nama pengguna, CPU/RAM, antarmuka jaringan, process.env, direktori kerja saat ini, direktori home, versi node, dan IP publik. Ini jauh kurang agresif daripada Fase A: tanpa SSH, tanpa dompet, tanpa rekursi .env. Tugas bot adalah untuk mendaftarkan, bukan untuk mencuri.
  3. Siklus detak jantung Membuka permintaan HTTPS POST setiap 30 detik ke b94b6bcfa27554.lhr.life:443/. User-Agent adalah PhantomBot/1.0. Verifikasi TLS dinonaktifkan secara eksplisit (rejectUnauthorized: false). Respons C2 diuraikan sebagai JSON dalam bentuk {type, target, port, duration, threads, method} dan dikirim.
  4. Banjir gudang senjata terhubung ke enam perintah:
Jenis perintah Modul Catatan
ping Balasan langsung Bot tersebut mengidentifikasi dirinya.
http banjir HTTP Banjir permintaan Layer-7
https Banjir HTTPS Sama seperti http, dibungkus TLS.
tcp TCP banjir Spam muatan acak 65 KB
udp banjir UDP Paket UDP berukuran 65,507 byte
cepat Serangan DoS dengan pengaturan ulang cepat HTTP/2 Teknik CVE-2023-44487 tahun 2023

Kelima modul penanggulangan banjir tersebut mengambil alih target, pelabuhan, lamanya, dan benang Argumennya adalah bot yang beroperasi sebagai penyedia layanan flooding generik, tidak menargetkan korban tertentu. Daftar korban operator tersimpan di C2, bukan di dalam paket.

Apa yang Baru di Sini — biner C2 yang telah dikirim

Fase A berbentuk familiar: pencurian kredensial, pemasangan hook, vendor-tunneled C2. Fase B adalah juga Bentuk yang familiar — botnet DDoS telah menjadi ciri khas paket npm berbahaya selama bertahun-tahun. Yang tidak biasa adalah operator yang mengirimkannya. sisi server dari kit di dalam tarball npm:

  • c2 — sebuah biner Go ELF yang telah dikompilasi berukuran 4 megabyte
  • c2.go — kode sumber Go sepanjang 426 baris untuk biner tersebut

Kedua file tersebut tidak dipanggil oleh hook instalasi apa pun. File-file tersebut bukan bagian dari muatan korban. File-file tersebut berada di direktori paket dengan cara yang sama seperti file dokumentasi. Interpretasi yang paling masuk akal adalah bahwa operator mendorong pohon kerja pengembangan mereka ke npm tanpa mengkurasi daftar file — sebuah kesalahan OpSec yang nyata — dan yang dikirimkan adalah kit dua sisi lengkap: klien yang dijalankan korban, dan server yang dijalankan operator.

Inilah bagian cerita yang membenarkan penggunaan istilah "kit botnet siap pakai". Siapa pun yang mengunduh axois-utils:1.0.9 Sebelum melakukan penertiban, mereka tidak hanya memiliki sampel korban, tetapi juga server C2 yang berfungsi.

Inti permasalahannya, dalam satu kalimat.

Penerbit yang sama, nama kemasan yang sama, kerangka tiga kait yang sama, merek "hantu" yang sama — tetapi Muatan tersebut mengubah model monetisasi dalam semalam.: dari “memanen rahasia yang dapat saya jual kembali” menjadi “menyewa kapasitas banjir yang dapat saya sewakan”. TTP (Tactics, Techniques, and Procedures) pada saat instalasi yang harus diperhatikan oleh para pembela hampir identik di kedua fase; pertahanan berbasis tanda tangan yang dikunci ke string jalur dompet Fase A atau ke phantom.jsKolektor jalur sepanjang 7,667 saluran itu akan melewatkan Fase B sepenuhnya.

Tanggal (UTC) Acara
2026-05-15 Publikasi pertama: axois-utils:1.0.4 (Rakitan uji LAN, perangkat pengembangan di 192.168.129.19)
2026-05-15 axois-utils:1.0.6 diterbitkan — Fase A C2 diganti menjadi 80.200.28.28 melalui terowongan Serveo; komentar sumber // Change to '80.200.28.28' for public mengkonfirmasi perpindahan dari lingkungan pengembangan ke lingkungan produksi.
2026-05-16 chalk-tempalte:1.0.14 ke 1.0.16 diterbitkan — pemuat berantai menyatakan axois-utils:^1.0.7 sebagai dependensi runtime; subdomain Serveo dirotasi
2026-05-16 Kampanye Fase A ditemukan selama pemindaian npm rutin; vonis terkonfirmasi sebagai berbahaya telah diterapkan.
2026-05-17 axois-utils:1.0.9 Diterbitkan — Pivot payload: Rekrutmen DDoS PhantomBot melalui terowongan localhost.run; sisi operator c2 biner dan c2.go sumber dikirim dalam tarball
2026-05-17 chalk-tempalte:1.0.19 ke 1.0.20 Diterbitkan — masih Fase A (pencuri); operator sekarang menjalankan kedua modul secara paralel.
2026-05-17 Penemuan Fase B selama pemindaian rutin; putusan diterapkan di semua 2026-05-17 Versi
(berkelanjutan) Laporan penghapusan masih menunggu; keempat paket yang telah diterbitkan tetap tersedia di registri pada saat penulisan ini.

Indikator Kompromi

Paket Exklusif

Ekosistem Paket versi
npm axois-utils (typosquat dari axios) 1.0.4, 1.0.6, 1.0.9
npm chalk-tempalte (typosquat dari chalk-template) 1.0.14, 1.0.16, 1.0.19, 1.0.20

Identitas penulis

Bidang Nilai
penerbit npm deadcode09284814
Email penerbit phantomdeadcode@tutamail.com
SCM verifikasi tak satupun

Perintah dan kendali

Tahap Titik akhir angkutan
A f04a273bd84c0622-80-200-28-28.serveousercontent.com:443/collect Terowongan HTTPS Serveo
A 8a3e818ea8f11186-80-200-28-28.serveousercontent.com:443/collect Terowongan HTTPS Serveo (versi sebelumnya)
A 80.200.28.28:443/collect Titik akhir VPS yang mendasarinya
B b94b6bcfa27554.lhr.life:443/ localhost.run terowongan terbalik HTTPS

Ringkasan berkas (SHA-256)

File SHA-256 Catatan
c2 (Go ELF, 4 MB) 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 Server C2 sisi operator, dikirim di dalam axois-utils:1.0.9
c2.go (426 baris) 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 Sumber Go untuk biner C2
distrube.js 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 Klien bot Fase B
phantom.js (chalk-tempalte:1.0.19) 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 Pengumpul kredensial/dompet Fase A
phantom.js (chalk-tempalte:1.0.20) d1c9e3f296ee9f7d5032f73f9c504cede50334bc14c394055fd5cb9c3a6e08b3 Kolektor Fase A (varian 1.0.20)
postinstall.js (chalk-tempalte:1.0.19 = 1.0.20) ffba9bdd6793edd5b38e12900252c1813a693f59c25af51c3b658cf3f27b6162 Loader Fase A, identik secara byte di kedua versi.

Atribusi & Motivasi

Kami melacak kampanye ini sebagai Bot Hantu, mengambil merek operator sendiri dari Agen Pengguna: PhantomBot/1.0 judul detak jantung, layanan bot hantu unit sistemd, itu com.phantom.bot label LaunchAgent, dan kode mati hantu@ Alamat email. Operator konsisten menggunakan nama ini setidaknya di empat artefak.

Katalog sinyal

  • Publisher - kode mati09284814 di npm. Akun tunggal, email sekali pakai Tutamail, tidak ada SCM verifikasi. Tidak ada riwayat publikasi sebelumnya selain kampanye ini.
  • Penggunaan kembali merek — “phantom” muncul dalam email penerbit, dalam nama file kolektor Fase A (phantom.js), dalam nama layanan persistensi Fase B (layanan bot hantu), pada label LaunchAgent (com.phantom.bot), dan di User-Agent bot (PhantomBot/1.0).
  • Infrastruktur — Satu VPS di 80.200.28.28 Fase A melalui rotasi subdomain Serveo; Fase B bergerak ke a localhost.jalankan terowongan terbalik (b94b6bcfa27554.lhr.lifeKedua layanan vendor tersebut gratis dan hanya memerlukan SSH keluar di sisi operator, sesuai dengan pengaturan berbiaya rendah dan keamanan operasional rendah.
  • Gaya kode — Menggunakan JavaScript murni sepenuhnya; tanpa pengaburan kode, tanpa pengkodean string, tanpa pemeriksaan anti-VM. Nama variabel bersifat deskriptif (mencuriInfoSistem, jalankan perintah, httpBanjir). Komentar di ditrusi.js secara langsung ditujukan kepada operator di masa mendatang ("Gunakan URL HTTPS localhost.run Anda"), menunjukkan bahwa file tersebut dimaksudkan untuk didistribusikan sebagai sebuah paket, bukan untuk digunakan oleh satu penyerang saja.
  • Kesalahan OpSec — Tarball Fase B menyertakan klien bot dan server C2 sisi operator (c2 ELF + c2.go (sumber). Ini konsisten dengan operator yang mendorong working tree mereka ke npm tanpa mengaudit daftar file. Operator tersebut mungkin kurang berpengalaman, atau kit-nya bermasalah. berarti untuk didistribusikan secara publik dan biner C2 merupakan bagian dari produk tersebut.
  • Konfirmasi diri - axois-utils:1.0.4 berisi komentar sumber // Ubah menjadi '80.200.28.28' untuk publik pada baris 12, mengkonfirmasi perkembangan dev / staging / production yang biasanya disangkal oleh operator.

Motivasi

Muatan Fase A adalah pencurian finansial langsung: kredensial, kunci cloud, token GitHub, dan dompet kripto semuanya memiliki pasar penjualan kembali yang likuid. Fase B juga bersifat finansial, tetapi tidak langsung: layanan DDoS sewaan ("booter") menyewa kapasitas serangan per menit, dan bot seperti yang dikirim di sini adalah inventaris yang digunakan layanan tersebut. Detak jantung 30 detik, yang bersifat umum target/pelabuhan/lamanya skema perintah, dan persenjataan banjir lima protokol adalah standard produk dari operator booter.

Menjalankan kedua modul secara paralel — chalk-template:1.0.19 ke 1.0.20 terus mengirimkan si pencuri sementara axois-utils:1.0.9 pengiriman bot — menunjukkan bahwa operator sedang melakukan lindung nilai aliran pendapatan daripada meninggalkan Fase A. Perubahan haluan ini adalah sebuah tambahan, bukan pengganti.

Apa yang tidak kami klaim

Kami belum dapat mengkonfirmasi identitas sebenarnya di balik kode mati09284814 Kami tidak mengaitkan kampanye ini dengan aktor ancaman, kelompok, atau negara tertentu. Penamaan "hantu" cukup konsisten di seluruh artefak untuk menunjukkan satu operator, tetapi pengiriman biner C2 dalam bentuk paket membuka kemungkinan bahwa paket-paket mendatang dari pihak yang tidak terkait akan menggunakan kembali kode yang sama.

Dampak, Tren & Apa yang Harus Dilakukan Para Pemain Bertahan

Dampak

Target-target pendudukan lahan yang sah aksioma ke templat kapur sangat diandalkan dalam ekosistem JavaScript; aksioma sendiri termasuk di antara tiga puluh paket npm yang paling banyak diunduh. Nama-nama typosquat hanya berbeda satu ketukan tombol dari nama aslinya (axoisaksioma, templatTemplate), dan keduanya merupakan kesalahan ejaan yang masuk akal secara linguistik.

Kami tidak dapat memperoleh statistik unduhan yang andal untuk versi berbahaya tersebut sebelum penghapusan — npm tidak menyimpan jumlah unduhan per versi setelah paket tidak dipublikasikan, dan npms.ioProxy bergaya - ini berisik pada skala ini. Organisasi mana pun yang file lock-nya mengarah ke paket bernama axois-utils or templat kapur dari penerbit kode mati09284814 harus dianggap telah disusupi: lakukan rotasi pada setiap kredensial yang ada di proses.env Pada host yang terdampak, audit vektor persistensi per OS (lihat “Apa yang harus dilakukan oleh pihak yang bertanggung jawab atas pertahanan” di bawah), dan hapus ketergantungan tersebut.

Pola yang muncul

Kampanye ini merupakan contoh pergeseran yang telah kita lihat dalam beberapa insiden npm baru-baru ini: Perancah kait pemasangan adalah aset yang tahan lama.; muatannya dapat ditukarPenerbit yang sama, kemasan yang sama, semuanya sama. prainstal / install / pascainstal tiga kali lipat, dan bahkan irama peningkatan versi yang sama — satu-satunya hal yang berubah di antara keduanya axois-utils:1.0.6 ke axois-utils:1.0.9 apakah berkas itu hooks jalankan. Deteksi berbasis tanda tangan yang dikunci ke muatan Fase A (string jalur dompet, phantom.jsPengumpul data 7,667 baris (host Serveo C2) akan menandai tiga versi pertama dan melewatkan Fase B sepenuhnya.

Pola yang sama terlihat di berbagai kampanye 2026 lainnya yang telah kami lacak: satu operator dengan kerangka kerja yang stabil, berganti-ganti antara pencurian kredensial, klien kecurangan ujian, eksfiltrasi bot Telegram, dan sekarang perekrutan DDoS. Para pembela yang mengandalkan tanda tangan muatan akan terus kalah di ronde kedua setiap kampanye.

Kesimpulannya adalah bahwa TTP (Tactics, Techniques, and Procedures) pada saat instalasi memberikan sinyal yang lebih baik.Deklarasi install-hook rangkap tiga, skrip instalasi yang mengimpor https or proses_anak, menginstal skrip yang menulis ke folder startup pengguna, dan menginstal skrip yang menyelesaikan nama host pada layanan reverse-tunnel gratis (Serveo, localhost.jalankan( , ngrok, cloudflared) semuanya jarang ditemukan dalam paket yang sah dan umum ditemukan pada paket yang berbahaya.

Apa yang harus dilakukan para pemain bertahan?

  • Audit berkas kunci. Cari setiap package-lock.json / benang.kunci / pnpm-lock.yaml di organisasi Anda untuk mendapatkan string yang tepat. axois-utils ke templat kapurAnggaplah setiap pertandingan sebagai sebuah kompromi.
  • Rahasia yang diputar pada inang yang terinfeksi. Fase A mengumpulkan kredensial SSH, cloud, GitHub, npm, dan wallet secara massal. Asumsikan setiap kredensial yang pernah ada di proses.env, ~ / .ssh, ~/.aws, ~/.npmrc, ~ / .config, atau apa saja .env* Berkas pada host yang terdampak terekspos.
  • Hilangkan persistensi (Fase B). Di Windows, hapus HKCU\Software\Microsoft\Windows\CurrentVersion\Run\SystemUpdate, hapus %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\system-update.bat, dan schtasks /delete /tn SystemUpdate /fDi Linux, -e crontab dan hapus @reboot node …, systemctl –user disable –now phantom-bot.service lalu hapus ~/.config/systemd/user/phantom-bot.servicegosok .bashrc / .zsrc / /etc/rc.localDi macOS, launchctl unload ~/Library/LaunchAgents/com.phantom.bot.plist lalu hapus file plist tersebut.
  • Blokir host C2. Tambahkan keempat endpoint C2 dalam tabel IOC ke daftar blokir egress Anda. *.serveousercontent.com ke *.lhr.life dapat diblokir secara keseluruhan jika lingkungan Anda tidak memiliki penggunaan yang sah untuk layanan reverse-tunnel.
  • Cari berdasarkan TTP saat instalasi, bukan muatan. Entri berkas kunci inventaris yang package.json menyatakan prainstal, install, dan pascainstal Semua mengarah ke skrip yang sama. Lakukan pengecekan silang terhadap usia paket dan status verifikasi penerbit. Pola ini jarang ditemukan pada paket yang sah dan merupakan sinyal paling andal yang digunakan kembali oleh PhantomBot.
  • Audit untuk biner C2. Siapa pun yang mengunduh axois-utils:1.0.9 memiliki server C2 operator (c2 ELF, sha256 165fa92d…) pada disk. Pindai cache dan penyimpanan artefak CI. Biner tersebut tidak aktif dengan sendirinya, tetapi keberadaannya di workstation merupakan bukti yang jelas bahwa paket tersebut telah diinstal.

Garis penutup

Operator yang sama, paket yang sama, dan mekanisme instalasi yang sama dapat menghadirkan ancaman yang sama sekali berbeda dalam waktu 48 jam. Perhatikan kerangka dasarnya, bukan muatannya.

perangkat lunak analisis komposisi sca
Prioritaskan, perbaiki, dan amankan risiko perangkat lunak Anda.
Dapatkan Akun Gratis Anda.
Tidak perlu kartu kredit.

Amankan Pengembangan dan Pengiriman Perangkat Lunak Anda

dengan Rangkaian Produk Xygeni