TL; DR
ผู้เผยแพร่ npm รายเดียว deadcode09284814ได้ดำเนินแคมเปญ typosquat ต่อต้านโดเมนที่ถูกต้องตามกฎหมาย axios และ chalk-template แพ็คเกจต่างๆ ตั้งแต่กลางเดือนพฤษภาคม 2026 เป็นต้นไป
แคมเปญนี้เริ่มต้นจากการเป็นแฮกเกอร์ขโมยข้อมูลประจำตัวและกระเป๋าเงินดิจิทัลแบบทั่วไป โดยทำการดึงข้อมูลออกไปยัง... อุโมงค์ HTTPS ของ Serveo.
On 2026-05-17และ axois-utils:1.0.9ผู้ดำเนินการได้เปลี่ยนเพย์โหลดทั้งหมด: โครงสร้างการติดตั้งแบบสามขั้นตอนเหมือนเดิม ผู้เผยแพร่เหมือนเดิม และชื่อแพ็กเกจเหมือนเดิม
แต่ตอนนี้สคริปต์การติดตั้งกลายเป็นเครื่องมือสร้างบอทเน็ต DDoS ที่ใช้งานได้บนหลายแพลตฟอร์มแล้ว
เนื้อหาที่ส่งมานั้นสื่อถึง... localhost.run มัลแวร์นี้จะสร้างอุโมงค์และรับคำสั่งโจมตีแบบ DDoS ทำให้สภาพแวดล้อมที่ติดมัลแวร์กลายเป็นส่วนหนึ่งของบอทเน็ตที่สามารถโจมตีแบบ DDoS ได้
ผู้ประกอบการยังได้จัดส่งสินค้าอีกด้วย ไบนารีเซิร์ฟเวอร์ C2 ภายในไฟล์บีบอัด (tarball) แสดงให้เห็นถึงการยกระดับอย่างชัดเจนจากการขโมยข้อมูลประจำตัวไปสู่โครงสร้างพื้นฐานบอทเน็ตที่ใช้งานได้จริง
ปัจจุบันมีแพ็กเกจสองชุด สี่เวอร์ชันที่ยังคงใช้งานอยู่บนรีจิสทรี และมีผู้ปฏิบัติงานหนึ่งรายที่ใช้งานทั้งสองโมดูลพร้อมกัน
ระดับความรุนแรง: สูง
การโจมตี: วิธีการทำงาน
แคมเปญนี้สร้างขึ้นบนโครงสร้างการจัดส่งที่น่าเบื่อโดยเจตนา: ชื่อแพ็กเกจที่สะกดผิดสองชื่อ ซึ่งต่างจากแพ็กเกจที่มีการดาวน์โหลดหลายร้อยล้านครั้งต่อสัปดาห์เพียงตัวอักษรเดียว (Axios, แม่แบบชอล์ก) และการติดตั้งแบบสามเท่า hooks ที่รับประกันการดำเนินการ สิ่งที่น่าสนใจคือโครงสร้างนั้นคืออะไร ดำเนินการ — และข้อเท็จจริงที่ว่าผู้ประกอบการเปลี่ยนสินค้าที่บรรทุกโดยไม่เปลี่ยนสิ่งอื่นใดเลย
นั่งร้านที่ใช้ร่วมกัน
ทุกเวอร์ชันที่เผยแพร่ของทั้งสองแพ็กเกจประกาศวงจรชีวิตสามแบบเหมือนกัน hooks in package.json:
"scripts": { "preinstall": "node <payload>.js", "install": "node <payload>.js", "postinstall": "node <payload>.js" } ระบุเพย์โหลดภายใต้ทั้งสามรายการ hooks มันมากเกินไป — หลังการติดตั้ง การทำงานโดยลำพังจะเป็นค่าเริ่มต้น ติดตั้ง NPMการเลือกนั้นสำคัญ: npm install –ignore-scripts ข้ามสคริปต์ แต่มีเวิร์กโฟลว์ทั่วไปหลายอย่าง (การกู้คืนแคช CI ที่เรียกใช้วงจรชีวิตซ้ำ) hooks เลือกอย่างใดอย่างหนึ่ง หรือนักพัฒนาที่ตรวจสอบเพียงอย่างเดียว หลังการติดตั้งการประกาศซ้ำซ้อนสามครั้งจึงเป็นทางเลือกที่ปลอดภัยที่สุดสำหรับผู้โจมตี
แม่แบบชอล์ก เพิ่มกลไกที่สอง: มันประกาศ axois-utils:^1.0.7 ในฐานะรันไทม์ เมืองขึ้นการติดตั้ง typosquatted แม่แบบชอล์ก ดังนั้นจึงดึงเอา typosquat ที่เป็นพี่น้องเข้ามาด้วย และเพย์โหลดทั้งสองก็จะทำงาน แพ็กเกจทั้งสองเป็นคู่ที่ทำงานร่วมกัน ไม่ใช่รายการที่แยกจากกัน
ระยะที่ A — ผู้ขโมยข้อมูลประจำตัว/กระเป๋าเงินดิจิทัล (15 พฤษภาคม 2026 → ปัจจุบัน)
เฟส A คือน้ำหนักบรรทุกดั้งเดิม ตัวโหลดมีขนาดสั้น postinstall.js ซึ่งชี้ไปยังอุโมงค์ย้อนกลับ HTTPS ของ 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'; โดเมนย่อย Serveo เข้ารหัส IP ปลายทาง (80.200.28.28) โดยตรงในชื่อโฮสต์ ซึ่งเป็นธรรมเนียมปฏิบัติที่รู้จักกันดีสำหรับบริการนั้น ผู้ให้บริการจะหมุนเวียนคำนำหน้าโดเมนย่อยแบบสุ่มระหว่างเวอร์ชันต่างๆ เพื่อหลีกเลี่ยงรายการบล็อกโดเมนที่ไม่รอบคอบ แต่ที่อยู่ IP พื้นฐานจะไม่เปลี่ยนแปลง (แม่แบบชอล์ก:1.0.14 มือสอง 8a3e818ea8f11186-80-200-28-28…; 1.0.16 / 1.0.19 / 1.0.20 ใช้งาน f04a273bd84c0622-….)
postinstall.js ห้ามยุ่งกับ แฟนทอม.เจเอสโมดูล "ตัวเก็บรวบรวม" แบบรวมกลุ่มที่มีจำนวน 7,667 บรรทัด แฟนทอม.เจเอส เดินพาเจ้าภาพไป:
คีย์ส่วนตัว SSH (~/.ssh/*) |
.npmrc เนื้อหาและสิ่งใดๆ npm_* โทเค็น env |
| ไฟล์ข้อมูลรับรอง AWS, GCP และ Azure |
นิพจน์ปกติสำหรับโทเค็นการเข้าถึงส่วนบุคคลของ GitHub (ghp_*, gho_*, ghu_*, ghs_*) |
| สิ่งประดิษฐ์กระเป๋าเงินดิจิทัลสำหรับ Bitcoin, Exodus, Electrum, Monero, Litecoin, Dogecoin, Zcash, Dash |
การเรียกซ้ำ .env* เดินผ่าน ~/projects, ~/dev, ~/code, ~/workspaceและการติดตั้ง cwd |
ประวัติของเชลล์และข้อมูลทั้งหมด process.env |
แพ็กเกจถูกส่งแบบ POST ไปยังอุโมงค์ Serveo ที่ / เก็บรวบรวมไม่มีการปกปิดข้อมูล ไม่มีตรรกะต่อต้าน VM ไม่มีขั้นตอนการเตรียมการ ผู้ให้บริการจึงเน้นที่ปริมาณและความเร็วเป็นหลัก
ขั้นตอนที่ B — การรับสมัคร PhantomBot DDoS (17 พฤษภาคม 2026, เฉพาะ axois-utils:1.0.9 เท่านั้น)
เฟส B แทนที่ phantom.js + postinstall.js ด้วยไฟล์เดียวชื่อ distrube.js (พิมพ์ผิดเพราะผู้ดำเนินการพิมพ์) โครงสร้าง triple-hook ใน package.json ยังคงไม่เปลี่ยนแปลง แพ็กเกจยังคงใช้ชื่อ ขอบเขต และรูปแบบการเพิ่มเวอร์ชันเหมือนเดิม จากภายนอก axois-utils:1.0.9 ดูเหมือนจะเป็นเวอร์ชันปรับปรุงเล็กน้อยจาก 1.0.6 แต่ภายในแล้ว มันคือตระกูลมัลแวร์ที่แตกต่างออกไป
ดิสตรูเบ.เจเอส เริ่มต้นด้วยบล็อกการตั้งค่าที่ระบุชื่อแบรนด์ของผู้ให้บริการ:
// 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')}`; |
ข้อความดังกล่าวมีใจความถึงผู้ใช้งานชุดเครื่องมือในอนาคต (“ใช้ URL HTTPS localhost.run ของคุณ”) นอกจากนั้นแล้ว สิ่งที่มาพร้อมกับโปรแกรมบอทก็เป็นสิ่งที่บ่งบอกว่านี่ไม่ใช่แค่เพย์โหลดสำหรับเหยื่อ แต่เป็นชุดเครื่องมือต่างหาก
การไหล:
- การติดตา ทำงานก่อน สคริปต์จะติดตั้งตัวเองในสามวิธีที่แตกต่างกันต่อระบบปฏิบัติการ (รีจิสทรี) วิ่ง + โฟลเดอร์เริ่มต้น + งาน Schtasks บน Windows; crontab + บริการบอทแฟนทอม หน่วย systemd + .bashrc/.zshrc เพิ่ม + /etc/rc.local บนระบบลินุกซ์; LaunchAgent com.phantom.bot.plist บน macOS) ทั้งชื่อบริการการคงสถานะและป้ายกำกับ LaunchAgent ต่างก็เป็น หุ่นยนต์ผี / คอม.แฟนทอม.บอทซึ่งเป็นที่มาของชื่อแคมเปญด้วยเช่นกัน
- ข้อมูลระบบส่งออก ทำงานเพียงครั้งเดียว — ส่งข้อมูลลายนิ้วมือแบบครั้งเดียวผ่าน POST ไปยัง b94b6bcfa27554.lhr.life:443/collect โดยส่งข้อมูลชื่อโฮสต์ แพลตฟอร์ม สถาปัตยกรรม ชื่อผู้ใช้ CPU/RAM อินเทอร์เฟซเครือข่าย ไฟล์ process.env ตำแหน่งปัจจุบัน ไดเร็กทอรีโฮม เวอร์ชัน Node และ IP สาธารณะ ขั้นตอนนี้รุนแรงน้อยกว่าขั้นตอน A มาก: ไม่มี SSH ไม่มีกระเป๋าเงินดิจิทัล และไม่มีการตรวจสอบไฟล์ .env ซ้ำ หน้าที่ของบอทคือการลงทะเบียน ไม่ใช่การขโมย
- จังหวะการเต้นของหัวใจแบบวนซ้ำ เปิดคำขอ HTTPS POST ทุก 30 วินาทีไปยัง b94b6bcfa27554.lhr.life:443/ User-Agent คือ PhantomBot/1.0 การตรวจสอบ TLS ถูกปิดใช้งานอย่างชัดเจน (rejectUnauthorized: false) การตอบสนองจาก C2 จะถูกแยกวิเคราะห์เป็น JSON ในรูปแบบ {type, target, port, duration, threads, method} แล้วส่งออกไป
- คลังอาวุธน้ำท่วม เชื่อมต่อกับคำสั่งหกคำสั่ง:
| ประเภทคำสั่ง | โมดูล | หมายเหตุ : |
|---|---|---|
| ปิง | การตอบกลับแบบเรียลไทม์ | บอทระบุตัวตนของตัวเอง |
| ที่ http | น้ำท่วม HTTP | การส่งคำขอจำนวนมากในเลเยอร์ 7 |
| ที่ https | การโจมตีด้วย HTTPS | เหมือนกับ HTTP ที่ห่อหุ้มด้วย TLS |
| TCP | TCP น้ำท่วม | สแปมที่มีเพย์โหลดแบบสุ่มขนาด 65 KB |
| UDP | UDP น้ำท่วม | แพ็กเก็ต UDP ขนาด 65,507 ไบต์ |
| รวดเร็ว | HTTP/2 rapid-reset DoS | เทคนิค CVE-2023-44487 ปี 2023 |
โมดูลป้องกันน้ำท่วมทั้งห้าโมดูลใช้ เป้า, พอร์ต, ระยะเวลาและ หัวข้อ ข้อโต้แย้ง — บอทนี้เป็นบอทรับจ้างโจมตีแบบทั่วไป ไม่ได้มุ่งเป้าไปที่เหยื่อรายใดรายหนึ่งโดยเฉพาะ รายชื่อเหยื่อของผู้ดำเนินการนั้นอยู่ในเซิร์ฟเวอร์ควบคุมและสั่งการ (C2) ไม่ได้อยู่ในแพ็กเกจ
มีอะไรใหม่บ้างในไฟล์ไบนารี C2 ที่จัดส่งแล้ว
เฟส A มีรูปแบบที่คุ้นเคย: การขโมยข้อมูลประจำตัว, การติดตั้งโปรแกรม, การควบคุมและสั่งการผ่านอุโมงค์ของผู้จำหน่าย เฟส B คือ ด้วย รูปทรงที่คุ้นเคย — บอทเน็ต DDoS เป็นส่วนหนึ่งของแพ็กเกจ npm ที่เป็นอันตรายมานานหลายปีแล้ว สิ่งที่ผิดปกติคือผู้ดำเนินการได้จัดส่ง ฝั่งเซิร์ฟเวอร์ ของชุดเครื่องมือภายในไฟล์ tarball ของ npm:
- c2 — ไฟล์ไบนารี Go ELF ที่คอมไพล์แล้ว ขนาด 4 เมกะไบต์
- ซี2.โก — ซอร์สโค้ดภาษา Go จำนวน 426 บรรทัดสำหรับไฟล์ไบนารีนั้น
ไฟล์ทั้งสองไม่ได้ถูกเรียกใช้งานโดย hook การติดตั้งใดๆ พวกมันไม่ใช่ส่วนหนึ่งของ payload ที่เหยื่อใช้ พวกมันอยู่ในไดเร็กทอรีของแพ็กเกจในลักษณะเดียวกับไฟล์เอกสาร การตีความที่น่าจะเป็นไปได้มากที่สุดคือ ผู้ดำเนินการได้อัปโหลด working tree ของการพัฒนาไปยัง npm โดยไม่ได้คัดกรองรายการไฟล์ — ซึ่งเป็นความผิดพลาดด้านความปลอดภัยในการปฏิบัติงานอย่างร้ายแรง — และสิ่งที่ถูกส่งไปคือชุดเครื่องมือสองฝั่งที่สมบูรณ์: ไคลเอนต์ที่เหยื่อใช้งาน และเซิร์ฟเวอร์ที่ผู้ดำเนินการใช้งาน
นี่คือส่วนหนึ่งของเรื่องราวที่สนับสนุนการเรียกมันว่า "ชุดเครื่องมือบอทเน็ตสำเร็จรูป" ใครก็ตามที่ดาวน์โหลด axois-utils:1.0.9 ก่อนที่จะทำการปิดระบบ พวกเขาไม่เพียงแต่มีตัวอย่างเหยื่อเท่านั้น แต่ยังมีเซิร์ฟเวอร์ควบคุมและสั่งการ (C2) ที่ใช้งานได้จริงอีกด้วย
จุดเปลี่ยนสำคัญ ในประโยคเดียว
สำนักพิมพ์เดียวกัน ชื่อแพ็กเกจเดียวกัน โครงสร้างแบบตะขอสามอันเดียวกัน แบรนด์ "ลวง" เดียวกัน — แต่ ข้อมูลที่ส่งไปนั้นเปลี่ยนแปลงรูปแบบการสร้างรายได้ในชั่วข้ามคืนจาก “เก็บเกี่ยวความลับที่ฉันสามารถนำไปขายต่อได้” ไปจนถึง “เช่าความจุของน้ำท่วมที่ฉันสามารถให้เช่าได้” เทคนิคและวิธีการในการติดตั้งที่ฝ่ายป้องกันควรจับตาดูนั้นแทบจะเหมือนกันในทั้งสองเฟส การป้องกันแบบใช้ลายเซ็นที่เชื่อมโยงกับสตริงเส้นทางกระเป๋าเงินของเฟส A หรือไปยัง แฟนทอม.เจเอสตัวเก็บรวบรวมข้อมูล 7,667 เส้นของเขาจะพลาดเฟส B ไปโดยสิ้นเชิง
| วันที่ (UTC) | อีเว้นท์ |
|---|---|
| 2026-05-15 | ตีพิมพ์ครั้งแรก: axois-utils:1.0.4 (การสร้างทดสอบ LAN, อุปกรณ์พัฒนาที่ 192.168.129.19) |
| 2026-05-15 | axois-utils:1.0.6 เผยแพร่แล้ว — เฟส A C2 สลับเป็น 80.200.28.28 ผ่านอุโมงค์ Serveo; ความคิดเห็นจากแหล่งที่มา // Change to '80.200.28.28' for public ยืนยันการสลับจากเวอร์ชันพัฒนาไปสู่เวอร์ชันใช้งานจริง |
| 2026-05-16 | chalk-tempalte:1.0.14 และ 1.0.16 เผยแพร่แล้ว — ตัวโหลดแบบลูกโซ่ประกาศ axois-utils:^1.0.7 เป็นการพึ่งพาในขณะรันไทม์; โดเมนย่อย Serveo ถูกหมุน |
| 2026-05-16 | ตรวจพบแคมเปญระยะที่ A ระหว่างการสแกน npm ตามปกติ และได้ยืนยันสถานะว่าเป็นมัลแวร์แล้ว |
| 2026-05-17 | axois-utils:1.0.9 เผยแพร่แล้ว — จุดเปลี่ยนของเพย์โหลด: PhantomBot รับสมัคร DDoS ผ่านอุโมงค์ localhost.run; ฝั่งผู้ปฏิบัติงาน c2 ไบนารีและ c2.go แหล่งที่มาถูกจัดส่งในไฟล์ทาร์บอล |
| 2026-05-17 | chalk-tempalte:1.0.19 และ 1.0.20 เผยแพร่แล้ว — ยังคงเป็นเฟส A (ตัวขโมย); ขณะนี้ผู้ดำเนินการกำลังใช้งานทั้งสองโมดูลพร้อมกัน |
| 2026-05-17 | ตรวจพบระยะ B ระหว่างการสแกนตามปกติ; คำตัดสินถูกนำไปใช้กับทุกกรณี 2026-05-17 รุ่น |
| (ต่อเนื่อง) | รายงานการลบกำลังอยู่ระหว่างดำเนินการ แพ็กเกจทั้งสี่ที่เผยแพร่แล้วยังคงมีอยู่ในระบบทะเบียน ณ เวลาที่เขียนบทความนี้ |
ตัวบ่งชี้การประนีประนอม
แบบรวดเร็ว
| ระบบนิเวศ (Ecosystem) | แพ็คเกจ | รุ่น |
|---|---|---|
| NPM | axois-utils (พิมพ์ผิดจากคำว่า axios) | 1.0.4, 1.0.6, 1.0.9 |
| NPM | chalk-tempalte (พิมพ์ผิดจาก chalk-template) | 1.0.14, 1.0.16, 1.0.19, 1.0.20 |
อัตลักษณ์ผู้เขียน
| สนาม | ความคุ้มค่า |
|---|---|
| npm publisher | deadcode09284814 |
| อีเมลผู้จัดพิมพ์ | phantomdeadcode@tutamail.com |
| SCM การตรวจสอบ | ไม่มี |
การสั่งการและควบคุม
| ระยะ | ปลายทาง | การขนส่ง |
|---|---|---|
| A | f04a273bd84c0622-80-200-28-28.serveousercontent.com:443/collect | อุโมงค์ HTTPS ของ Serveo |
| A | 8a3e818ea8f11186-80-200-28-28.serveousercontent.com:443/collect | อุโมงค์ HTTPS ของ Serveo (เวอร์ชันก่อนหน้า) |
| A | 80.200.28.28:443/collect | จุดสิ้นสุด VPS พื้นฐาน |
| B | b94b6bcfa27554.lhr.life:443/ | localhost.run HTTPS reverse-tunnel |
ค่าแฮชของไฟล์ (SHA-256)
| เนื้อไม่มีมัน | SHA-256 | หมายเหตุ : |
|---|---|---|
c2 (ไฟล์ Go ELF, ขนาด 4 MB) | 165fa92d237fd017c227d00da06ab788212a62be94bf61e95df2d22d00377ef2 | เซิร์ฟเวอร์ C2 ฝั่งผู้ปฏิบัติงาน จัดส่งภายใน axois-utils:1.0.9 |
c2.go (426 บรรทัด) | 7d0ae79fdb1e9968f3323a3712b624643a782ba3efb2cf3a2cb9c4c5513cea30 | ดูที่ซอร์สโค้ดของไบนารี C2 |
distrube.js | 308b15c023088a7188dea4ef609010ac2493eb4c365b103053d7621a9ca5b935 | ไคลเอนต์บอทเฟส B |
phantom.js (chalk-tempalte:1.0.19) | 9e380ec88d3ccf3929e1a104e3b868d4d7b59ca189a8a431a54e9f3357dfdd81 | ตัวเก็บรวบรวมข้อมูลประจำตัว/กระเป๋าเงินดิจิทัล เฟส A |
phantom.js (chalk-tempalte:1.0.20) | d1c9e3f296ee9f7d5032f73f9c504cede50334bc14c394055fd5cb9c3a6e08b3 | ตัวเก็บรวบรวมเฟส A (รุ่น 1.0.20) |
postinstall.js (chalk-tempalte:1.0.19 = 1.0.20) | ffba9bdd6793edd5b38e12900252c1813a693f59c25af51c3b658cf3f27b6162 | ตัวโหลดเฟส A มีโครงสร้างไบต์เหมือนกันในทั้งสองเวอร์ชัน |
การอ้างอิงและแรงจูงใจ
เราติดตามแคมเปญนี้อยู่ แฟนทอมบอตโดยนำตราสินค้าของผู้ประกอบการมาใช้จาก User-Agent: PhantomBot/1.0 ส่วนหัวของจังหวะการเต้นของหัวใจ บริการบอทแฟนทอม หน่วย systemd, คอม.แฟนทอม.บอท ป้ายกำกับ LaunchAgent และ phantomdeadcode@ ที่อยู่อีเมล ผู้ดำเนินการใช้ชื่อนี้อย่างสม่ำเสมอในเอกสารอย่างน้อยสี่ฉบับ
แคตตาล็อกสัญญาณ
- สำนักพิมพ์ - รหัสตาย 09284814 บน npm บัญชีแบบใช้ครั้งเดียว อีเมลแบบใช้แล้วทิ้ง Tutamail ไม่มี SCM การตรวจสอบยืนยัน ไม่มีประวัติการเผยแพร่ใดๆ นอกเหนือจากแคมเปญนี้
- การนำแบรนด์กลับมาใช้ใหม่ — คำว่า “phantom” ปรากฏในอีเมลของผู้เผยแพร่ ในชื่อไฟล์ตัวเก็บรวบรวมข้อมูลเฟส A (แฟนทอม.เจเอส) ในชื่อบริการความคงทนของเฟส B (บริการบอทแฟนทอม) ในป้ายกำกับ LaunchAgent (คอม.แฟนทอม.บอท) และในบอท User-Agent (PhantomBot/1.0).
- โครงสร้างพื้นฐาน — VPS หนึ่งเครื่องที่ 80.200.28.28 แนวหน้าเฟส A ผ่านการหมุนเวียนโดเมนย่อย Serveo; เฟส B ย้ายไปยัง a โลคัลโฮสต์รัน อุโมงค์ย้อนกลับ (b94b6bcfa27554.lhr.lifeบริการของทั้งสองผู้ให้บริการนั้นฟรีและต้องการเพียงแค่การเชื่อมต่อ SSH ขาออกจากฝั่งผู้ให้บริการ ซึ่งสอดคล้องกับการตั้งค่าที่มีงบประมาณต่ำและระดับความปลอดภัยในการปฏิบัติงานต่ำ
- สไตล์รหัส — ใช้ JavaScript ธรรมดาตลอดทั้งโปรแกรม ไม่มีการเข้ารหัสลับ ไม่มีการตรวจสอบ Anti-VM ชื่อตัวแปรมีความหมายชัดเจน (stealSystemInfo, ดำเนินการคำสั่ง, httpFlood). ความคิดเห็นใน ดิสตรูเบ.เจเอส ระบุถึงผู้ดำเนินการในอนาคตโดยตรง ("ใช้ URL HTTPS localhost.run ของคุณ") ซึ่งบ่งชี้ว่าไฟล์ดังกล่าวมีจุดประสงค์เพื่อแจกจ่ายเป็นชุดเครื่องมือ ไม่ได้ถูกใช้โดยผู้โจมตีเพียงคนเดียว
- ความผิดพลาดด้านความปลอดภัยในการปฏิบัติงาน — ไฟล์ tarball ของเฟส B ประกอบด้วยทั้งไคลเอ็นต์บอทและเซิร์ฟเวอร์ C2 ฝั่งผู้ปฏิบัติงาน (c2 เอลฟ์ + ซี2.โก (แหล่งที่มา) นี่สอดคล้องกับกรณีที่ผู้ดูแลระบบได้อัปโหลดเวิร์กทรีของตนไปยัง npm โดยไม่ได้ตรวจสอบรายการไฟล์ ผู้ดูแลระบบอาจไม่มีประสบการณ์ หรือชุดเครื่องมือมีปัญหา หมายความว่า เพื่อเผยแพร่สู่สาธารณะ และไบนารี C2 เป็นส่วนหนึ่งของผลิตภัณฑ์
- การยืนยันตนเอง - axois-utils:1.0.4 ประกอบด้วยความคิดเห็นต้นฉบับ // เปลี่ยนเป็น '80.200.28.28' สำหรับสาธารณะ ในบรรทัดที่ 12 ยืนยันความคืบหน้าของขั้นตอนการพัฒนา/ทดสอบ/ใช้งานจริง ซึ่งผู้ปฏิบัติงานมักปฏิเสธ
แรงจูงใจ
เพย์โหลดเฟส A คือการโจรกรรมทางการเงินโดยตรง: ข้อมูลประจำตัว คีย์คลาวด์ โทเค็น GitHub และกระเป๋าเงินคริปโตล้วนมีตลาดซื้อขายที่มีสภาพคล่องสูง เฟส B ก็เกี่ยวข้องกับการเงินเช่นกัน แต่เป็นทางอ้อม: บริการ DDoS-for-hire ("booter") ให้เช่าความสามารถในการโจมตีแบบนาทีต่อนาที และบอทอย่างเช่นที่ส่งมานี้คือสินค้าคงคลังที่บริการเหล่านั้นใช้ในการดำเนินงาน การตรวจสอบสถานะทุกๆ 30 วินาที และข้อมูลทั่วไปอื่นๆ เป้า/พอร์ต/ระยะเวลา แผนผังคำสั่ง และคลังอาวุธโจมตีแบบฟลัดห้าโปรโตคอล คือ standard ผลิตภัณฑ์ของผู้ดำเนินการบูสเตอร์
เรียกใช้งานทั้งสองโมดูลพร้อมกัน — แม่แบบชอล์ก:1.0.19 และ 1.0.20 ส่งของโจรต่อไปในขณะที่ axois-utils:1.0.9 การจัดส่งบอท — บ่งชี้ว่าผู้ดำเนินการกำลังป้องกันความเสี่ยงด้านรายได้แทนที่จะละทิ้งเฟส A การเปลี่ยนแปลงนี้คือ นอกจากนี้, ไม่ใช่การทดแทน
สิ่งที่เราไม่ได้เรียกร้อง
เรายังไม่สามารถยืนยันตัวตนที่แท้จริงของบุคคลดังกล่าวได้ รหัสตาย 09284814 เราไม่ได้ระบุว่าแคมเปญนี้เป็นฝีมือของกลุ่มผู้ก่อภัยคุกคาม กลุ่ม หรือประเทศใดโดยเฉพาะ การใช้ชื่อ "แฟนทอม" นั้นสอดคล้องกันมากพอในหลักฐานต่างๆ จนบ่งชี้ว่าอาจเป็นผู้ดำเนินการรายเดียว แต่การจัดส่งไบนารี C2 ในรูปแบบชุดเครื่องมือเปิดโอกาสที่แพ็กเกจในอนาคตจากกลุ่มที่ไม่เกี่ยวข้องจะนำโค้ดเดียวกันไปใช้ซ้ำ
ผลกระทบ แนวโน้ม และสิ่งที่กองหลังควรทำ
เรื่องราว
เป้าหมายการฝึกท่าสควอทที่ถูกต้อง Axios และ แม่แบบชอล์ก เป็นสิ่งที่ถูกพึ่งพาอย่างกว้างขวางในระบบนิเวศของ JavaScript; Axios แพ็กเกจ npm ที่มีการดาวน์โหลดมากที่สุด 30 อันดับแรกก็มีอยู่หลายแพ็กเกจ ชื่อที่สะกดผิดนั้นแทบจะเหมือนกับชื่อจริงทุกประการ (แอ็กซอยส์ ↔ Axios, วิหาร ↔ เทมเพลต) และทั้งสองคำเป็นการสะกดผิดที่ฟังดูสมเหตุสมผลทางภาษาศาสตร์
เราไม่สามารถรวบรวมสถิติการดาวน์โหลดที่เชื่อถือได้สำหรับเวอร์ชันที่เป็นอันตรายก่อนที่จะทำการลบออกได้ เนื่องจาก npm ไม่เก็บจำนวนการดาวน์โหลดต่อเวอร์ชันหลังจากที่แพ็กเกจถูกยกเลิกการเผยแพร่แล้ว และ npms.ioพร็อกซีแบบ -style มักสร้างเสียงรบกวนในระดับนี้ องค์กรใดก็ตามที่ไฟล์ล็อกระบุถึงแพ็กเกจชื่อ axois-utils or แม่แบบชอล์ก จากสำนักพิมพ์ รหัสตาย 09284814 ควรพิจารณาว่าข้อมูลประจำตัวนั้นถูกบุกรุก: หมุนเวียนข้อมูลประจำตัวทั้งหมดที่มีอยู่ กระบวนการ.env บนโฮสต์ที่ได้รับผลกระทบ ให้ตรวจสอบเวกเตอร์การคงอยู่ของไวรัสต่อระบบปฏิบัติการ (ดูหัวข้อ “สิ่งที่ผู้ป้องกันควรทำ” ด้านล่าง) และลบการพึ่งพาไวรัสออก
รูปแบบที่เกิดขึ้นใหม่
แคมเปญนี้เป็นตัวอย่างของการเปลี่ยนแปลงที่เราได้เห็นในเหตุการณ์ npm หลายครั้งที่ผ่านมา: นั่งร้านแบบขอเกี่ยวติดตั้งเป็นสินทรัพย์ที่ทนทาน; ข้อมูลที่ส่งสามารถสลับเปลี่ยนได้สำนักพิมพ์เดียวกัน บรรจุภัณฑ์เดียวกัน ทุกอย่างเหมือนกัน ติดตั้งล่วงหน้า / ติดตั้ง / หลังการติดตั้ง สามเท่า และแม้แต่จังหวะการเพิ่มเวอร์ชันที่เหมือนกัน — สิ่งเดียวที่เปลี่ยนแปลงไประหว่าง axois-utils:1.0.6 และ axois-utils:1.0.9 ไฟล์นั้นคือไฟล์อะไร hooks รัน การตรวจจับตามลายเซ็นโดยใช้เพย์โหลดเฟส A เป็นคีย์ (สตริงเส้นทางกระเป๋าเงิน, แฟนทอม.เจเอสตัวเก็บรวบรวมข้อมูล 7,667 บรรทัด (ของ Serveo C2 host) จะตรวจจับเวอร์ชันสามเวอร์ชันแรกได้ และพลาดขั้นตอน B ไปโดยสิ้นเชิง
รูปแบบเดียวกันนี้ปรากฏให้เห็นในแคมเปญอื่นๆ ของปี 2026 ที่เราติดตามมา: ผู้ดำเนินการรายเดียวที่มีโครงสร้างพื้นฐานที่มั่นคง สลับไปมาระหว่างการขโมยข้อมูลประจำตัว ลูกค้าโกงข้อสอบ การขโมยข้อมูลผ่านบอท Telegram และตอนนี้คือการสรรหาผู้กระทำความผิดด้วย DDoS ผู้ป้องกันที่พึ่งพาลายเซ็นของเพย์โหลดจะพ่ายแพ้ในรอบที่สองของทุกแคมเปญเสมอ
ผลที่ตามมาก็คือ TTPs ในช่วงเวลาติดตั้งเป็นสัญญาณที่ดีกว่าการประกาศ install-hook สามรายการ สคริปต์การติดตั้งที่นำเข้า ที่ https or กระบวนการของเด็กติดตั้งสคริปต์ที่เขียนข้อมูลลงในโฟลเดอร์เริ่มต้นของผู้ใช้ และติดตั้งสคริปต์ที่แก้ไขชื่อโฮสต์บนบริการ reverse-tunnel ฟรี (Serveo, โลคัลโฮสต์รันช่องโหว่ด้านความปลอดภัย (เช่น ngrok และ cloudflared) มักพบได้น้อยในแพ็กเกจที่ถูกต้องตามกฎหมาย แต่พบได้ทั่วไปในแพ็กเกจที่เป็นอันตราย
สิ่งที่กองหลังควรทำ
- การตรวจสอบไฟล์ล็อก. ค้นหาทุก แพคเกจ lock.json / เส้นด้ายล็อค / pnpm-lock.yaml ในองค์กรของคุณสำหรับสตริงที่แน่นอน axois-utils และ แม่แบบชอล์กจงมองทุกการแข่งขันเป็นการประนีประนอม
- หมุนเวียนความลับ บนโฮสต์ที่ได้รับผลกระทบ ขั้นตอน A รวบรวมข้อมูลประจำตัว SSH, คลาวด์, GitHub, npm และกระเป๋าเงินดิจิทัลจำนวนมาก สมมติว่าข้อมูลประจำตัวทั้งหมดที่มีอยู่แล้ว กระบวนการ.env, ~ / .ssh, ~/.aws, ~/.npmrc, ~ / .configหรืออะไรก็ได้ .env* ไฟล์บนโฮสต์ที่ได้รับผลกระทบถูกเปิดเผยแล้ว
- กำจัดความคงอยู่ (ขั้นตอน B) บนระบบ Windows ให้ลบออก HKCU\Software\Microsoft\Windows\CurrentVersion\Run\SystemUpdate, ลบ %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\system-update.batและ schtasks /delete /tn SystemUpdate /fบนระบบลินุกซ์ crontab -e และลบ @reboot node …, systemctl –user disable –now phantom-bot.service จากนั้นลบ ~/.config/systemd/user/phantom-bot.serviceขัดถู .bashrc / .zshrc / /etc/rc.localบน macOS, launchctl unload ~/Library/LaunchAgents/com.phantom.bot.plist จากนั้นให้ลบไฟล์ plist ทิ้ง
- บล็อกโฮสต์ C2 เพิ่มเอนด์พอยต์ C2 ทั้งสี่ตัวในตาราง IOC ลงในรายการบล็อกขาออกของคุณ *.serveousercontent.com และ *.lhr.life สามารถบล็อกการเชื่อมต่อทั้งหมดได้หากสภาพแวดล้อมของคุณไม่มีการใช้งานที่ถูกต้องตามกฎหมายสำหรับบริการ reverse-tunnel
- ค้นหาโดย TTP เวลาติดตั้งไม่ใช่ข้อมูลที่ส่งไป รายการล็อกไฟล์สินค้าคงคลังที่มี package.json ประกาศ ติดตั้งล่วงหน้า, ติดตั้งและ หลังการติดตั้ง ทั้งหมดชี้ไปที่สคริปต์เดียวกัน ตรวจสอบกับอายุของแพ็กเกจและสถานะการยืนยันของผู้เผยแพร่ รูปแบบนี้พบได้ยากในแพ็กเกจที่ถูกต้องตามกฎหมาย และเป็นสัญญาณที่น่าเชื่อถือที่สุดเพียงอย่างเดียวที่บ่งชี้ว่า PhantomBot นำมาใช้ซ้ำ
- ตรวจสอบความถูกต้องของไฟล์ไบนารี C2 ใครก็ตามที่ดาวน์โหลด axois-utils:1.0.9 มีเซิร์ฟเวอร์ C2 ของผู้ดำเนินการ (c2 อีแอลเอฟ, ชา256 165fa92d…) บนดิสก์ สแกนแคชและที่เก็บอาร์ติแฟกต์ CI ไบนารีนั้นจะอยู่ในสถานะไม่ได้ใช้งาน แต่การปรากฏอยู่บนเวิร์กสเตชันเป็นหลักฐานที่ชัดเจนว่าแพ็กเกจนั้นได้รับการติดตั้งแล้ว
เส้นปิดท้าย
ผู้ดำเนินการรายเดียวกัน แพ็กเกจเดียวกัน และตัวเชื่อมการติดตั้งเดียวกัน สามารถส่งมอบภัยคุกคามที่แตกต่างกันอย่างสิ้นเชิงได้ภายใน 48 ชั่วโมง ให้จับตาดูโครงสร้างพื้นฐาน ไม่ใช่ตัวภัยคุกคามเอง




