TL; DR
ერთი npm გამომცემელი, deadcode09284814, ლეგიტიმური მმართველობის წინააღმდეგ აწარმოა ტიპოსკვატის კამპანია axios მდე chalk-template პაკეტები 2026 წლის მაისის შუა რიცხვებიდან.
კამპანია დაიწყო, როგორც ტრადიციული რწმუნებათა სიგელებისა და საფულის ქურდობა, მონაცემების მოპარვით. Serveo HTTPS გვირაბი.
On 2026-05-17ერთად axois-utils:1.0.9, ოპერატორმა მთლიანად შეცვალა დატვირთვა: იგივე სამმაგი ინსტალაციის კაუჭის სქემა, იგივე გამომცემელი, იგივე პაკეტის სახელი.
თუმცა, ინსტალაციის სკრიპტი ახლა პლატფორმების მიხედვით გადაკეთებული DDoS ბოტნეტის რეკრუტირებაა.
ტვირთი მეტყველებს იმაზე, localhost.run გვირაბი და იღებს flood ბრძანებებს, რაც ინფიცირებულ გარემოს DDoS-თავსებადი ბოტნეტის ნაწილად აქცევს.
ოპერატორმა კი გაგზავნა C2 სერვერის ორობითი ფაილი tarball-ის შიგნით, რაც აშკარად აჩვენებს ავტორიზაციის მოპარვიდან აქტიურ ბოტნეტის ინფრასტრუქტურამდე გადასვლის ტენდენციას.
ორი პაკეტი, ოთხი ვერსია კვლავ აქტიურია რეესტრში და ერთი ოპერატორი ორივე მოდულს პარალელურად მართავს.
სიმძიმე: მაღალი.
შეტევა: როგორ მუშაობს ის
კამპანია განზრახ მოსაწყენ მიწოდების სქემაზეა აგებული: ორი ტიპოსკვარტიანი პაკეტის სახელი, ერთი ასოთი ჩამორჩენილი პაკეტებიდან, რომლებსაც ყოველკვირეული ჩამოტვირთვების ასობით მილიონი შემთხვევა აქვთ (აქსიოსი, ცარცის შაბლონი), და სამმაგი ინსტალაცია hooks რომლებიც შესრულების გარანტიას იძლევა. საინტერესოა, თუ რა ხარაჩოა ახორციელებს — და ის ფაქტი, რომ ოპერატორმა შეცვალა ტვირთი სხვა არაფრის შეცვლის გარეშე.
საერთო ხარაჩო
ორივე პაკეტის ყველა გამოქვეყნებული ვერსია აცხადებს ერთსა და იმავე სამ სასიცოცხლო ციკლს hooks in პაკეტი.json:
"scripts": { "preinstall": "node <payload>.js", "install": "node <payload>.js", "postinstall": "node <payload>.js" } სამივეს ქვეშ ტვირთის ჩამოთვლა hooks ზედმეტია — პოსტინსტალაცია მარტო ნაგულისხმევად იმუშავებდა npm ინსტალაციაარჩევანი მნიშვნელოვანია: npm ინსტალაცია – იგნორირება-სკრიპტები გამოტოვებს სკრიპტებს, მაგრამ რამდენიმე გავრცელებული სამუშაო პროცესი (CI ქეშის აღდგენა, რომელიც ხელახლა ამუშავებს სასიცოცხლო ციკლს) hooks შერჩევით, ან დეველოპერები, რომლებიც მხოლოდ აუდიტს აკეთებენ პოსტინსტალაცია) სამმაგი ზედმეტი დეკლარაცია თავდამსხმელისთვის ყველაზე უსაფრთხო ვარიანტია.
ცარცის შაბლონი მეორე მექანიზმსაც ამატებს: ის აცხადებს axois-utils:^1.0.7 როგორც გაშვების დრო დამოკიდებულებაtyposquatted-ის ინსტალაცია ცარცის შაბლონი შესაბამისად, ის ასევე იზიდავს single typosquat-ს და ორივე დატვირთვა მუშაობს. ორი პაკეტი წარმოადგენს კოორდინირებულ წყვილს და არა დამოუკიდებელ ჩამონათვალს.
ფაზა A — სერთიფიკატი/საფულის მოპარვა (2026-05-15 → დღემდე)
ფაზა A არის ორიგინალური ტვირთი. დამტვირთავი მოკლეა პოსტინსტალაცია.js რომელიც მიუთითებს Serveo HTTPS-ის უკუ გვირაბზე:
// 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-….)
პოსტინსტალაცია.js ხელები შორს phantom.js, 7,667 ხაზიანი „კოლექციონერის“ მოდული. phantom.js მასპინძელს ასეირნებს:
SSH კერძო გასაღებები (~/.ssh/*) |
.npmrc შინაარსი და ნებისმიერი npm_* env ტოკენები |
| AWS, GCP და Azure-ის ავტორიზაციის ფაილები |
GitHub-ის პირადი წვდომის ნიშნის რეგულარული მნიშვნელობა (ghp_*, gho_*, ghu_*, ghs_*) |
| კრიპტო-საფულის არტეფაქტები ბიტკოინის, Exodus-ის, Electrum-ის, Monero-ს, Litecoin-ის, Dogecoin-ის, Zcash-ის, Dash-ისთვის |
რეკურსიული .env* გავლა ~/projects, ~/dev, ~/code, ~/workspaceდა ინსტალაციის cwd |
Shell-ის ისტორიები და სრული process.env |
შეკვრა იგზავნება სერვეოს გვირაბში შემდეგ მისამართზე: / შეგროვებაარ არსებობს დაბნეულობა, ანტი-ვირტუალური ლოგიკა, არც ეტაპობრივი დამუშავება — ოპერატორის ფსონი ხმის მოცულობასა და სიჩქარეზეა.
ფაზა B — PhantomBot DDoS-ის რეკრუტირება (2026-05-17, მხოლოდ axois-utils:1.0.9)
B ფაზაში phantom.js + postinstall.js ფაილებს ერთი ფაილით ცვლის, სახელწოდებით distrube.js (შეცდომა ოპერატორის ბრალია). package.json-ში სამმაგი კაუჭის სქემა უცვლელია; პაკეტი ინარჩუნებს იმავე სახელს, მასშტაბს და ვერსიის ცვლილების ნიმუშს. გარეგნულად, axois-utils:1.0.9 1.0.6-ის მცირე გაგრძელებას ჰგავს. შიგნით, ეს არის მავნე პროგრამების განსხვავებული ოჯახი.
distrube.js იხსნება კონფიგურაციის ბლოკით, რომელიც ოპერატორის საკუთარ ბრენდინგს ასახელებს:
// 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')}`; |
კომენტარები მიმართულია ნაკრების მომავალი ოპერატორისადმი („გამოიყენეთ თქვენი localhost.run HTTPS URL“). ეს, პლუს ის, რაც ბოტ კლიენტს ახლავს თან, არის იმის თქმა, რომ ეს არ არის მხოლოდ მსხვერპლის დატვირთვა - ეს არის ნაკრები.
ნაკადი:
- არსებულ პირველი გაეშვება. სკრიპტი თავად ინსტალირდება სამი განსხვავებული გზით თითოეული ოპერაციული სისტემისთვის (რეესტრის გასაშვებად + გაშვების საქაღალდე + schtasks Windows-ზე; crontab + phantom-bot.service სისტემური ერთეული + .ბაშრკ/.zshrc დამატება + /etc/rc.local Linux-ზე; LaunchAgent com.phantom.bot.plist macOS-ზე). მუდმივი სერვისის სახელი და LaunchAgent-ის ეტიკეტი ორივეა ფანტომ-რობოტი / com.phantom.bot, საიდანაც ასევე მომდინარეობს კამპანიის სახელწოდება.
- სისტემის ინფორმაციის exfil ერთხელ მუშაობს — ერთჯერადი თითის ანაბეჭდის POST-ით b94b6bcfa27554.lhr.life:443/collect-ზე, რომელიც შეიცავს hostname-ს, platform-ს, arch-ს, username-ს, CPU/RAM-ს, network interfaces-ს, process.env-ს, cwd-ს, homedir-ს, node version-ს და public IP-ს. ეს გაცილებით ნაკლებად აგრესიულია, ვიდრე A ფაზა: არ არის SSH, არ არის საფულეები, არ არის .env რეკურსია. ბოტის ამოცანაა რეგისტრაცია და არა მოპარვა.
- გულისცემის ციკლი ყოველ 30 წამში ხსნის HTTPS POST-ს b94b6bcfa27554.lhr.life:443/-ზე. მომხმარებლის აგენტია PhantomBot/1.0. TLS ვერიფიკაცია აშკარად გამორთულია (rejectUnauthorized: false). C2 პასუხი დამუშავდება როგორც JSON {type, target, port, duration, threads, method} ფორმის და გაიგზავნება.
- წყალდიდობის არსენალი ექვს ბრძანებაზეა დაკავშირებული:
| ბრძანების ტიპი | მოდულები | შენიშვნები |
|---|---|---|
| Ping | Liveness-ის პასუხი | ბოტი საკუთარ თავს იდენტიფიცირებს |
| http | HTTP-ის წყალდიდობა | მე-7 დონის მოთხოვნის დატბორვა |
| https | HTTPS-ის წყალდიდობა | იგივეა, რაც http, TLS-შეფუთული |
| tcp | TCP-ის წყალდიდობა | 65 კბ შემთხვევითი ჩატვირთვის სპამი |
| უდფ | UDP წყალდიდობა | 65,507 ბაიტიანი UDP პაკეტები |
| სწრაფი | HTTP/2 სწრაფი გადატვირთვის DoS | 2023 CVE-2023-44487 ტექნიკა |
ხუთივე წყალდიდობის მოდული იღებს სამიზნე, პორტი, ხანგრძლივობადა თემა არგუმენტი — ბოტი არის ზოგადი, დაქირავებული ფლოდერი, რომელიც არ არის განკუთვნილი რომელიმე კონკრეტული მსხვერპლისთვის. ოპერატორის მსხვერპლთა სია ინახება C2-ზე და არა პაკეტში.
სიახლეები — მოწოდებული C2 ბინარული ფაილი
ფაზა A ნაცნობი ფორმაა: ავტორიზაციის ქურდობა, ინსტალაციის კაუჭი, მომწოდებლის მიერ გვირაბში გავლებული C2. ფაზა B არის ასევე ნაცნობი ფორმა — DDoS ბოტნეტები წლების განმავლობაში მავნე npm პაკეტების მუდმივი რესურსი იყო. უჩვეულო ის არის, რომ ოპერატორმა გაგზავნა სერვერის მხარე npm tarball-ის შიგნით არსებული კომპლექტის შესახებ:
- c2 — 4 მეგაბაიტიანი კომპილირებული Go ELF ორობითი ფაილი
- c2.go — ამ ბინარული ფაილის 426-სტრიქონიანი Go წყარო
არცერთი ფაილი არ იძახება ინსტალაციის კაუჭით. ისინი არ წარმოადგენენ მსხვერპლის დატვირთვის ნაწილს. ისინი პაკეტების დირექტორიაში იმყოფებიან ისევე, როგორც დოკუმენტაციის ფაილი. ყველაზე დამაჯერებელი ვერსია ის არის, რომ ოპერატორმა თავისი განვითარების სამუშაო ხე npm-ზე გადაიტანა ფაილების სიის კურაციის გარეშე - ნამდვილი OpSec ფურცელი - და რაც მოჰყვა არის სრული ორმხრივი ნაკრები: კლიენტი, რომელსაც მსხვერპლი მართავს და სერვერი, რომელსაც ოპერატორი მართავს.
ეს არის ისტორიის ის ნაწილი, რომელიც ამართლებს „გასაღები ბოტნეტის ნაკრების“ ჩარჩოს. ყველამ, ვინც ჩამოტვირთა axois-utils:1.0.9 განადგურებამდე არა მხოლოდ მსხვერპლის ნიმუში ჰყავს — მათ აქვთ მოქმედი C2 სერვერი.
საყრდენი წერტილი, ერთი წინადადებით
იგივე გამომცემელი, იგივე პაკეტების სახელები, იგივე სამმაგი კაუჭის სქემა, იგივე „ფანტომური“ ბრენდინგი — მაგრამ ტვირთმა მონეტიზაციის მოდელი ერთ ღამეში შეცვალა„მოსავლის საიდუმლოებებიდან, რომელთა ხელახლა გაყიდვაც შემიძლია“-დან „წყალდიდობის გაქირავებამდე, რომლის იჯარით აღებაც შემიძლია“. ინსტალაციის დროის TTP-ები, რომლებსაც დამცველები უნდა აკვირდებოდნენ, თითქმის იდენტურია ორივე ფაზაში; ხელმოწერაზე დაფუძნებული თავდაცვა, რომელიც დაკავშირებულია A ფაზის საფულის გზის სტრიქონებთან ან phantom.jsმისი 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 სერვეოს გვირაბის გავლით; წყაროს კომენტარი // Change to '80.200.28.28' for public ადასტურებს dev→prod-ის შეცვლას |
| 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 ვერსიები |
| (მიმდინარე) | მოლოდინის რეჟიმშია წაშლის შესახებ ანგარიშები; ოთხივე გამოქვეყნებული პაკეტი რეესტრში ხელმისაწვლელი რჩება წერის მომენტისთვის. |
კომპრომისის ინდიკატორები
პაკეტები
| ეკოსისტემა | პაკეტი | ვერსიები |
|---|---|---|
| npm | axois-utils (აქსიოსის ტიპოსკვატი) | 1.0.4, 1.0.6, 1.0.9 |
| npm | chalk-tempalte (ცარცის შაბლონის ტიპოსკვატი) | 1.0.14, 1.0.16, 1.0.19, 1.0.20 |
ავტორის ვინაობა
| საველე | ღირებულება |
|---|---|
| npm გამომცემელი | deadcode09284814 |
| გამომცემლის ელ. ფოსტა | phantomdeadcode@tutamail.com |
| SCM შემოწმების | არცერთი |
ბრძანება და კონტროლი
| ფაზა | საბოლოო წერტილი | ტრანსპორტი |
|---|---|---|
| A | f04a273bd84c0622-80-200-28-28.serveousercontent.com:443/collect | Serveo HTTPS გვირაბი |
| A | 8a3e818ea8f11186-80-200-28-28.serveousercontent.com:443/collect | Serveo HTTPS გვირაბი (ადრეული ვერსია) |
| A | 80.200.28.28:443/collect | ძირითადი VPS საბოლოო წერტილი |
| B | b94b6bcfa27554.lhr.life:443/ | localhost.run HTTPS უკუ-ტუნელი |
ფაილების დაიჯესტები (SHA-256)
| ფაილი | SHA-256 | შენიშვნები |
|---|---|---|
c2 (გადადით ELF-ზე, 4 მბ) | 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 ფაზის ჩამტვირთავი, ორივე ვერსიაში ბაიტების იდენტური |
ატრიბუცია და მოტივაცია
ჩვენ ამ კამპანიას ვაკვირდებით, როგორც PhantomBot, ოპერატორის საკუთარი ბრენდინგის აღებით მომხმარებლის აგენტი: PhantomBot/1.0 გულისცემის სათაური, the phantom-bot.service სისტემური ერთეული, com.phantom.bot LaunchAgent-ის ეტიკეტი და phantomdeadcode@ ელფოსტის სახელური. ოპერატორი ამ სახელთან დაკავშირებით თანმიმდევრულია სულ მცირე ოთხ არტეფაქტში.
სიგნალების კატალოგი
- გამომცემლობა - მკვდარი კოდი 09284814 npm-ზე. ერთჯერადი ანგარიში, Tutamail ერთჯერადი ელ.ფოსტა, არა SCM ვერიფიკაცია. ამ კამპანიის შემდეგ წინა გამოქვეყნების ისტორია არ არსებობს.
- ბრენდინგის ხელახალი გამოყენება — „phantom“ ჩნდება გამომცემლის ელფოსტაში, A ფაზის კოლექციონერის ფაილის სახელში (phantom.js), B ფაზის მუდმივი სერვისის სახელში (phantom-bot.service), LaunchAgent-ის ეტიკეტში (com.phantom.bot), და ბოტის მომხმარებლის აგენტში (PhantomBot/1.0).
- ინფრასტრუქტურის — ერთი VPS 80.200.28.28 A ფაზას Serveo ქვედომენის როტაციის გზით უძღვება; B ფაზა გადადის a-ზე localhost.run საპირისპირო გვირაბი (b94b6bcfa27554.lhr.life). ორივე მომწოდებლის სერვისი უფასოა და ოპერატორის მხრიდან მხოლოდ გამავალ SSH-ს მოითხოვს, რაც თავსებადია დაბალი ბიუჯეტის და დაბალი OpSec-ის მქონე დაყენებებთან.
- კოდის სტილი — მარტივი JavaScript მთელი ტექსტი; არანაირი დაბნეულობა, არანაირი სტრიქონების კოდირება, არანაირი ანტი-ვირტუალური შემოწმებები. ცვლადების სახელები აღწერითი ხასიათისაა (სისტემის ინფორმაციის მოპარვა, ბრძანების შესრულება, httpფლუდი). კომენტარები distrube.js პირდაპირ მიმართავს მომავალ ოპერატორს („გამოიყენეთ თქვენი localhost.run HTTPS URL“), რაც იმაზე მიუთითებს, რომ ფაილი განკუთვნილი იყო კომპლექტის სახით გადასანაწილებლად და არა ერთი თავდამსხმელის მიერ გამოსაყენებლად.
- OpSec-ის ჩეკი — B ფაზის tarball-ი მოიცავს როგორც ბოტ კლიენტს, ასევე ოპერატორის მხარის C2 სერვერს (c2 ელფი + c2.go წყარო). ეს შეესაბამება ოპერატორს, რომელმაც თავისი სამუშაო ხე npm-ზე გადაიტანა ფაილების სიის აუდიტის გარეშე. ან ოპერატორი გამოუცდელია, ან ნაკრები ნიშნავდა საჯაროდ გასავრცელებლად და C2 ბინარული ფაილი პროდუქტის ნაწილია.
- თვითდადასტურება - axois-utils:1.0.4 შეიცავს წყაროს კომენტარს // საჯაროდ შეცვლა '80.200.28.28'-ზე მე-12 სტრიქონში, რომელიც ადასტურებს განვითარების / დადგმის / წარმოების პროგრესიას, რასაც ოპერატორები, როგორც წესი, უარყოფენ.
მოტივაცია
A ფაზის ტვირთი პირდაპირი ფინანსური ქურდობაა: ავტორიზაციის მონაცემებს, ღრუბლოვან გასაღებებს, GitHub ტოკენებს და კრიპტო საფულეებს აქვთ ლიკვიდური გადაყიდვის ბაზრები. B ფაზა ასევე ფინანსურია, მაგრამ არაპირდაპირი: დაქირავებული („booter“) DDoS სერვისები წუთობრივად ქირაობენ დატბორვის ტევადობას, ხოლო აქ მოწოდებული ბოტები წარმოადგენენ ინვენტარს, რომელზეც ეს სერვისები მუშაობენ. 30-წამიანი გულისცემა, ზოგადი სამიზნე/პორტი/ხანგრძლივობა ბრძანების სქემა და ხუთპროტოკოლიანი წყალდიდობის არსენალი არის standard ბუტერის ოპერატორის პროდუქტი.
ორივე მოდულის პარალელურად გაშვება — ცარცის შაბლონი: 1.0.19 მდე 1.0.20 გააგრძელეთ მპარავის გადაზიდვა მანამ, სანამ axois-utils:1.0.9 ბოტის გაგზავნა - მიანიშნებს, რომ ოპერატორი შემოსავლის ნაკადებს ჰეჯირებისკენ მიმართავს, იმის ნაცვლად, რომ მიატოვოს A ფაზა. გარდამტეხი ეტაპი არის გარდა ამისა, არა შემცვლელი.
რასაც ჩვენ არ ვამტკიცებთ
ჩვენ ვერ შევძელით რეალური ვინაობის დადასტურება, რომელიც ამ ინფორმაციის უკან დგას. მკვდარი კოდი 09284814 სახელური და ჩვენ ამ კამპანიას არ მივაწერთ რომელიმე დასახელებულ საფრთხის შემქმნელს, ჯგუფს ან ქვეყანას. „ფანტომის“ ბრენდინგი საკმარისად თანმიმდევრულია არტეფაქტებს შორის, რათა ერთი ოპერატორის არსებობაზე მიუთითოს, მაგრამ C2 ბინარული ფაილის კომპლექტური ტიპის მიწოდება ტოვებს იმის შესაძლებლობას, რომ მომავალში ერთმანეთთან დაუკავშირებელი სახელურებიდან მიღებული პაკეტები იგივე კოდს ხელახლა გამოიყენებენ.
გავლენა, ტენდენციები და რა უნდა გააკეთონ დამცველებმა
ზემოქმედების
ლეგიტიმური ჩაკეტვის სამიზნეები აქსიოსი მდე ცარცის შაბლონი ფართოდ არიან დამოკიდებულნი JavaScript-ის ეკოსისტემაში; აქსიოსი მარტო ის ოცდაათ ყველაზე ხშირად ჩამოტვირთულ npm პაკეტს შორისაა. typosquat-ის სახელები ნამდვილი სახელებისგან ერთი კლავიშის დაჭერით არის დაშორებული (აქსოისი ↔ აქსიოსი, თარგი ↔ თარგი), და ორივე ლინგვისტურად დასაშვები ორთოგრაფიული შეცდომაა.
წაშლამდე ვერ შევძელით მავნე ვერსიების ჩამოტვირთვის სანდო სტატისტიკის მოპოვება — npm არ ინახავს თითოეული ვერსიის ჩამოტვირთვის რაოდენობას პაკეტის გამოქვეყნების გაუქმების შემდეგ და npms.io-სტილის პროქსი ფაილები ამ მასშტაბით ხმაურიანია. ნებისმიერი ორგანიზაცია, რომლის დაბლოკვის ფაილიც პაკეტად გადაიქცევა, სახელწოდებით აქსოის-უტილსი or ცარცის შაბლონი გამომცემლისგან მკვდარი კოდი 09284814 კომპრომეტირებულად უნდა ჩაითვალოს: ყველა არსებული რწმუნებათა სიგელის როტაცია უნდა მოხდეს პროცესი.გარნირი დაზარალებულ ჰოსტზე, შეამოწმეთ მუდმივობის ვექტორები თითოეული ოპერაციული სისტემისთვის (იხილეთ ქვემოთ „რა უნდა გააკეთონ დამცველებმა“) და წაშალეთ დამოკიდებულება.
განვითარებადი ნიმუშები
ეს კამპანია იმ ცვლილების მაგალითია, რომელიც ბოლო დროს რამდენიმე npm ინციდენტში ვნახეთ: სამონტაჟო კაუჭის ხარაჩო გამძლე აქტივია; ტვირთის შეცვლა შესაძლებელიაიგივე გამომცემელი, იგივე პაკეტი, იგივე წინასწარი ინსტალაცია / ინსტალაცია / პოსტინსტალაცია სამმაგი და იგივე ვერსია - დარტყმის კადენცია - ერთადერთი, რაც შეიცვალა axois-utils:1.0.6 მდე axois-utils:1.0.9 ფაილი იყო ის, hooks გაშვება. ხელმოწერაზე დაფუძნებული აღმოჩენა, რომელიც დაკავშირებულია A ფაზის დატვირთვასთან (საფულის გზის სტრიქონები, phantom.jsმისი 7,667-სტრიქონიანი კოლექციონერი, Serveo C2 ჰოსტი) პირველ სამ ვერსიას მონიშნავდა და B ფაზას საერთოდ გამოტოვებდა.
იგივე სქემა შეინიშნება ჩვენს მიერ თვალყურადევნებულ სხვა 2026 წლის კამპანიებშიც: ერთი ოპერატორი სტაბილური სკაფალოთი, რომელიც ცვლის მონაცემებს სერთიფიკატების მოპარვის, გამოცდების მოტყუების კლიენტების, Telegram-bot exfil-ის და ახლა უკვე DDoS რეკრუტირების დროს. დამცველები, რომლებიც ხელმოწერებზე არიან დამოკიდებულნი, ყოველი კამპანიის მეორე რაუნდს წააგებენ.
დასკვნა ის არის, რომ ინსტალაციის დროს TTP-ები უკეთესი სიგნალიასამმაგი ინსტალაციის კაუჭის დეკლარაციები, იმპორტირებული ინსტალაციის სკრიპტები https or შვილობილი_პროცესი, დააინსტალირეთ სკრიპტები, რომლებიც წერენ მომხმარებლის გაშვების საქაღალდეებში და დააინსტალირეთ სკრიპტები, რომლებიც წყვეტენ ჰოსტის სახელებს უფასო საპირისპირო გვირაბის სერვისებზე (Serveo, localhost.run, ngrok, cloudflared) იშვიათია ლეგიტიმურ პაკეტებში და გავრცელებულია მავნე პაკეტებში.
რა უნდა გააკეთონ დამცველებმა
- Lockfile-ის აუდიტი. მოძებნეთ ყველა პაკეტი-lock.json / ნართი.საკეტი / pnpm-lock.yaml თქვენს ორგანიზაციაში ზუსტი სტრიქონებისთვის აქსოის-უტილსი მდე ცარცის შაბლონინებისმიერი მატჩი კომპრომისად მიიჩნიეთ.
- საიდუმლოებების როტაცია დაზარალებულ მასპინძლებზე. A ფაზის SSH, ღრუბლოვანი, GitHub, npm და საფულის სერთიფიკატების მასობრივი შეგროვება. ჩათვალეთ ყველა არსებული სერთიფიკატი პროცესი.გარნირი, / .სშ, ~/.aws, ~/.npmrc, ~/.config, ან ნებისმიერი .env* დაზარალებულ ჰოსტზე ფაილი გამოვლენილია.
- მუდმივობის მოხსნა (ფაზა B). Windows-ზე, წაშალეთ HKCU\Software\Microsoft\Windows\CurrentVersion\Run\SystemUpdate, ამოიღეთ %APPDATA%\Microsoft\Windows\Start მენიუ\Programs\Startup\system-update.batდა schtasks /delete /tn სისტემის განახლება /fLinux-ზე, crontab -e და ამოიღეთ @გადატვირთვის კვანძი …, systemctl –მომხმარებლის გამორთვა –ახლა phantom-bot.service შემდეგ წაშლა ~/.config/systemd/user/phantom-bot.service, სკრაბი .ბაშრკ / .zshrc / /etc/rc.localmacOS-ზე, launchctl unload ~/Library/LaunchAgents/com.phantom.bot.plist შემდეგ წაშალეთ სია.
- C2 ჰოსტების დაბლოკვა. IOC ცხრილში არსებული ოთხი C2 საბოლოო წერტილი დაამატეთ თქვენს გასასვლელ ბლოკების სიას. *.serveousercontent.com მდე *.lhr.life შეიძლება საბითუმო დაბლოკვა, თუ თქვენს გარემოს არ აქვს უკუგვირაბის სერვისების ლეგიტიმური გამოყენება.
- ინსტალაციის დროის TTP-ის მიხედვით ძიება, არა ტვირთამწეობა. ინვენტარის დაბლოკვის ფაილის ჩანაწერები, რომელთა პაკეტი.json აცხადებს წინასწარი ინსტალაცია, ინსტალაციადა პოსტინსტალაცია ყველა ერთი და იგივე სკრიპტზე მიუთითებს. შეადარეთ პაკეტის ასაკს და გამომცემლის ვერიფიკაციის სტატუსს. ეს ნიმუში იშვიათია ლეგიტიმურ პაკეტებში და წარმოადგენს ყველაზე სანდო სიგნალს, რომელსაც PhantomBot ხელახლა იყენებს.
- C2 ბინარული ფაილის აუდიტი. ყველას, ვინც გადმოწერა axois-utils:1.0.9 აქვს ოპერატორის C2 სერვერი (c2 ელფი, sha256 165fa92d…) დისკზე. ქეშების და CI არტეფაქტების საცავების სკანირება. ბინარული ფაილი თავისთავად მიძინებულია, მაგრამ მისი ყოფნა სამუშაო სადგურზე ცალსახა მტკიცებულებაა იმისა, რომ პაკეტი დაინსტალირებული იყო.
დახურვის ხაზი
ერთი და იგივე ოპერატორს, ერთსა და იმავე პაკეტს და ერთსა და იმავე ინსტალაციის კაუჭს შეუძლია 48 საათის განმავლობაში სრულიად განსხვავებული საფრთხეების გავრცელება. ყურადღება მიაქციეთ ხარაჩოს და არა დატვირთვას.




