TL; DR
2026-cı ilin iyul ayının sonu və avqust ayının əvvəlində iki gün ərzində dərc edilmiş iyirmi npm paketi özlərini daxili UI komponent kitabxanaları və paylaşılan arxa plan yardımçı proqramları kimi təqdim edir. Onların heç biri reklam etdikləri funksiyanı tətbiq etmir. Hər biri bir stub sinfi, paketi daxili kimi təsvir edən README və adlı bir fayl göndərir. _polyfill.js.
Maraqlı tərəfi, həmin faylın haradan çağırıldığıdır. Bu quraşdırma çəngəli deyil — manifestlərdə heç bir əvvəlcədən quraşdırma, quraşdırma və ya quraşdırma sonrası əməliyyatı yoxdur. Bunun əvəzinə, sonuncu sətir index.js deyilir: try { require("./_polyfill"); } catch (_) {}. Tətbiq kodu paketi ilk dəfə idxal etdikdə faydalı yük işə düşür. Quraşdırma ilə --ignore-scriptsKi, standard quraşdırma zamanı təchizat zəncirinə məruz qalmanın azaldılması üçün tövsiyələr, bunun qarşısını almır.
Hansı _polyfill.js Məqsəd, üç Cloudflare Workers hostundan birindən platformaya xas bir icra edilə bilən faylı əldə etmək, onu təsadüfi ad altında müvəqqəti qovluğa yazmaq, icra edilə bilən kimi qeyd etmək və ana prosesdən ayrı işə salmaqdır. Həmin icra edilə bilən fayl özü bir yükləyicidir: o, son nöqtə təhlükəsizliyi məhsullarını proses adı ilə sayır, mövcud istifadəçi adını məlum analiz mühiti hesabları ilə müqayisə edir, yaddaşdakı AMSI və ETW telemetriya interfeyslərini yamaqlayır, Windows audio komponenti adı altında persistence quraşdırır və bir neçə meqabayt ölçüsündə üçüncü ikili faylı əldə edir. Üçüncü mərhələ şifrələnmiş şəkildə gəlir və şifrələnib diskə yazılmaq əvəzinə yaddaşda icra olunur.
1 avqustda, paketlərin əl ilə yoxlanılması zamanı zərərli olduğu təsdiqləndikdən təxminən dörd saat sonra, iyirmi addan on doqquzu öz naşirləri tərəfindən npm-dən iyirmi beş saniyəlik ardıcıllıqla silindi. 2 avqustda həmin adlardan biri yenidən qeydiyyata alındı - eyni kodu daşıyan fərqli bir hesab tərəfindən. Bu yazılan zaman çatdırılma infrastrukturu hər üç mərhələyə xidmət göstərirdi.
| Paketlər | 20 npm ad, ~74 nəşr olunmuş versiya |
| Mövzulara Ad Vermə | beaver-ui-* (13) accounts-* (3), üstəgəl afisha-storybook-default, bcore-bravo-eslint-config, arbocrate-sla-prober-arbocrate-sla-prober-core, a.poltoradnev-package-c |
| Trigger | Modul idxalı (require), npm həyat dövrü skripti deyil |
| Mərhələ 1 | _polyfill.js — axtarış və işə salma |
| Mərhələ 2 | Statik əlaqəli yükləyici, Linux-da UPX-paketli; son nöqtə təhlükəsizliyinin sayılması, AMSI/ETW yamaları, davamlılıq |
| Mərhələ 3 | beacon_linux.bin / beacon_mac.bin / update_win.exe, 4–13 MB; şifrələnmiş şəkildə çatdırılır, yaddaşda icra olunur |
| Tools | Linux x64 və arm64, macOS universal, Windows x64 |
| Yayıncılar | İki hesab, bir kod bazası |
| Status | 20 addan 19-u dərc olunmayıb operator tərəfindən; 1 yenidən nəşr olunub və canlı yayımlanıb; çatdırılma infrastrukturu canlı yayımlanıb |
Hücum anatomiyası
Mərhələ 1 — paket
Hər üzv eyni üç fayl formasını göndərir. indeks.js ilə bir sinif ixrac edir içində() bu, boolean təyin edir, a versiya()Və konfiqurasiya() seçim obyektini birləşdirir. Başqa heç nə. README.md quraşdırma xətti verir, a tələb sətri və “Daxili paket. Təlimatlar üçün CONTRIBUTING.md saytına baxın” cümləsi — CONTRIBUTING.md tarbolda deyil.
_polyfill.js 5 KB-dan bir az azdır və adi infrastruktur kodu kimi oxunur. Üç mühit yoxlaması ilə açılır:
if (process.env.DISABLE_TELEMETRY ||
process.env.ANALYTICS_OPT_OUT ||
process.env.DO_NOT_TRACK)
return;Bu dəyişənlər ənənəvi məxfilik nəzarətləridir. Burada onlar ikili faylın yüklənib icra edilib-edilmədiyini müəyyən edirlər. Ayarlayan maşın İZLƏMƏYİN tamamilə atlanır.
Növbəti addım "bir dəfə işlə" möhürüdür: bir fayl /tmp/.analytics_statevə ya analitik_vəziyyət altında % TEMP% Windows-da, modifikasiya müddəti 20,357 saniyəlik pəncərə ilə müqayisə edilir. Həmin pəncərədə modul dərhal geri qayıdır, buna görə də qurulma zamanı təkrarlanan idxal onlarla deyil, bir axtarış cəhdi ilə nəticələnir.
Təyinat hostları hərfi mənada mövcud deyil. Onlar icra zamanı fraqmentlərdən yığılır:
["oob-worker.cf102-","baf.workers.d","ev"].join("")
Üç host bu şəkildə qurulur və istifadədən əvvəl qarışdırılır, buna görə də sıra icraya görə dəyişir. Retrieval, IPv4-ə qoşulmuş HTTPS GET-dir. İstifadəçi Agent of node-fetch/2.6 — Node prosesinin yayılması üçün mümkün olan dəyər. 1,000 baytdan az cavab ləğv edilir və növbəti host sınaqdan keçirilir.
Əgər hər üçü sıradan çıxarsa, modul DNS-ə qayıdır. Bu, TXT sorğusu göndərir c. bir parça sayını əldə etmək üçün, sonra sorğular 0. vasitəsilə n. on ədəddən ibarət qruplarda cavabları birləşdirir və nəticəni base64-də deşifrə edir. Bu yol, xaricə gedən HTTP-nin filtrləndiyi, lakin DNS həllinin filtrlənmədiyi mühitlərdə davam edən eyni icra edilə bilən faylı DNS TXT qeydləri üzərində daşıyır.
Alınan baytlar yazılır /var/tmp/.cache_<8-hex> Unix-də və ya %TEMP%\dotnet_diag_<8-hex>.exe Windows-da — .NET diaqnostika artefaktı kimi oxunan fayl adı. Unix-də fayl 0755 rejimi ilə işə salınır. kürü donor yumurtaları, ayrı: doğru, stdio: “ignore”və unref(), beləliklə, uşaq onu başlatmış Node prosesindən daha uzun müddət yaşayır; Windows-da çağırış əlavə edir windowsGizlət: doğru.
Şəkli iki detal tamamlayır. Köməkçi kimi təyin olunur const _l = (…a) => process.stderr.write(“”) axtarışın hər addımında çağırılır — boş bir sətir yazır və arqumentlərini atır, qeydiyyatın yerləşəcəyi yeri tutur. Və hər paket 81 KB fayl göndərir lib/telemetry.js başlıq şərhində "HTTPS nəqliyyatı ilə son nöqtənin fırlanması və təkrarlanması" və "nasazlıq üçün DNS əsaslı xidmət kəşfi" ilə "Analytics SDK" təsvir olunur. Hazırkı quruluşda heç bir şey bunu tələb etmir.
Mərhələ 2 — yükləyici
Linux x64 ikili faylı, UPX 3.96 ilə sıxılmış statik şəkildə əlaqəli ELF-dir. macOS quruluşu, x86_64 və arm64-ü əhatə edən universal ikili fayldır; Windows quruluşu isə PE32+ konsolunun yürütülebilir faylıdır. Dördü də statik olaraq götürülmüş və yoxlanılmışdır; heç biri icra edilməmişdir.
Windows quruluşunun idxal və sətir cədvəli onun davranışını aydın şəkildə təsvir edir. Bu, həll edir IsDebuggerTəqdim edir, CheckRemoteDebuggerTəqdim edirvə NtQueryInformationProcessvə oxuyur SİSTEM\Cari Nəzarət Dəsti\Xidmətlər\Disk\Enum — dəyərləri virtual disk nəzarətçilərini müəyyən edən bir qeyd yolu. Bu çağırır GetDiskFreeSpaceExW və Qlobal YaddaşStatusEx, ev sahibinin resurslarının qısamüddətli analiz nümunəsi ilə uyğun olub olmadığını yoxlamaqla uyğundur.
İstifadəçi adlarının siyahısını daşıyır: Cari İstifadəçi, İT Admin, Honq Li, TEST QUTUSU, hapubws, milozlar, timmy, admin, malware, örnək, virus, ətraf mühitBunlardan bir neçəsi ictimaiyyətə açıq şəkildə sənədləşdirilmiş təhlil mühitlərinin əsərləridir.
Həmçinin, son nöqtə təhlükəsizliyi məhsullarının siyahısını və onların proses adlarını sadalayır CreateToolhelp32Snapshot və Process32FirstW/Proses32NövbətiW:
- CrowdStrike Falcon (
csfalconservice,CSFalconContainer) - Karbon Qara (
cb.exe) - Cylance (
cylancesvc.exe) - BitDefender (
bdagent.exe) - Kaspersky (
avp.exe,kavfs.exe) - Trend Micro və Dərin Təhlükəsizlik (
coreServiceShell,ds_agent.exe) - FireEye/Trellix (
xagt.exe) - Tan (
taniumclient.exe) - HitmanPro (
hmpalert.exe) - Elastik (
elastic-agent.exe,elastic-endpoint,filebeat.exe,winlogbeat.exe) - Wazuh və OSSEC (
wazuh-agent.exe,ossec-agent.exe) - Point yoxlayın
- Windows Defender
Daha iki simvol mövcuddur: AmsiScanBuffer, Windows-un yaddaşdakı məzmunu skan etmək üçün təqdim etdiyi giriş nöqtəsi və EtwEventWrite, Windows üçün Hadisə İzləməsinin hadisələri qeyd etdiyi funksiya. Hər ikisi, həmin interfeyslərin əks halda yarada biləcəyi telemetriyanı basqılayan prosesdaxili modifikasiya üçün ümumi hədəflərdir.
Windows-da davamlılıq iki dəfə görünür. İkili fayl kopyalanır %APPDATA%\Microsoft\Windows\Themes\SystemSoundsService.exevə iki mexanizm ona istinad edir: altındakı bir dəyər YAZILIM\Microsoft\Windows\CariVersiya\Runvə qeydə alınmış planlaşdırılmış tapşırıq
schtasks /Create /F /SC ONLOGON
/TN "\Microsoft\Windows\Multimedia\SystemSoundsService"
/TR "\"%s\""
/RL HIGHESTTapşırıq yolu, tapşırığın adı və icra edilə bilən faylın adı orijinal Windows audio komponentini əks etdirir. /RL ƏN YÜKSƏK ən yüksək mövcud imtiyaz səviyyəsini tələb edir.
macOS quruluşu platforma uyğun adlarla eyni nümunəni izləyir: o, bir xüsusiyyət siyahısı yazır ~/Library/LaunchAgents/com.apple.windowserver.helper.plist və onun icra edilə bilən versiyasını yerləşdirir ~/.local/share/runtime/com.apple.runtimeYoxlayır /Tətbiqlər/VMware Fusion.app və /Kitabxana/Tətbiq Dəstəyi/VMware Alətləri.
Şəbəkə qabiliyyəti üç nəqliyyat növünü əhatə edir: WININET.dll HTTPS üçün https://%s:%d%s format sətri, WS2_32.dll rozetkalar və DNSAPI.dll donor yumurtaları, DnsQuery_A yanaşı c.%s.%s format sətri — birinci mərhələdə istifadə edilən eyni hissə sayı sorğu forması.
Yuxarıdakı təsvir, ikili faylın idxal, sətir və qeyd yollarının yoxlama zamanı göstərdiyi şeydir. Eyni Windows nümunəsinin ictimai çoxmühərrikli təhlili, idxal cədvəlinin statik oxunuşunun öz-özünə müəyyən edə bilmədiyi detalları əlavə edir və burada birbaşa müşahidə kimi təkrarlanmaq əvəzinə istinad edilir. Bu təhlil AMSI və ETW istinadlarının sadəcə həll edilmədiyini, həm də yamalandığını bildirir — AmsiScanBuffer in amsi.dll və EtwEventWrite in ntdll.dll — proses üçün yaddaşdaxili məzmunun skan edilməsini və hadisənin izlənməsini basdırır. Anti-analiz yoxlamalarını əlavə olaraq zamana əsaslanan kimi bildirir CheckRemoteDebuggerTəqdim edirvə müəyyən edir GetThreadContext hardware-breakpoint yoxlaması kimi çağırış, ayıklama registrlərini oxuyur. Həmçinin tək nümunəli mutex-i bildirir, Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9}və adlar Sistem Səsləri Xidməti Run-key dəyəri kimi. Həmin mutex dəyəri burada bərpa edilən sətirlər arasında deyildi — çıxarış filtri istisna edilmiş böyük hərf-altıbucaqlı tokenlərdən istifadə edirdi — və göstərici cədvəlində birbaşa müşahidə əvəzinə həmin ictimai təhlilin gücünə əsasən qeyd olunur.
Mərhələ 3
Yükləyici eyni hostlardakı daha bir sıra yollara istinad edir. Təhlil zamanı hamısına çatmaq mümkün idi: beacon_linux.bin 5.3 MB-da, beacon_mac.bin 13.3 MB-da, yeniləmə_qazanma.exe 10.3 MB-da və qol.bin 4.3 MB-da. Bunlar əldə edilmədi və davranışları məlum deyil.
Windows yolu üçün yükləyicinin ictimai təhlili həmin üçüncü mərhələnin necə idarə olunduğunu təsvir edir: o, WinINet üzərindən yüklənir, şifrələnmiş şəkildə gəlir və yaddaşda şifrələnir və əks etdirici şəkildə icra olunur — yaddaş ayrılır, idxal həll edilir, köçürmələr emal olunur və nəzarət yeni bir axına ötürülür Mövzu yaratBu baxımdan, üçüncü mərhələ heç vaxt fayl sisteminə yazılmır, buna görə də fayl əsaslı aşkarlama və hadisədən sonrakı disk kriminalistikasının ondan bərpa edəcək heç bir şeyi yoxdur. Bu, həmçinin baytların çatdırılma hostundan alınmasının təhlil edilə bilən icra edilə bilən fayl deyil, şifrələnmiş mətn verəcəyi deməkdir.
İş qrafiki
Bütün zaman damğaları UTC-dir və hər hansı bir müşahidəçidən asılı olmayaraq paketin yaradılmasını və dərc olunmamasını qeyd edən npm reyestr metadatasından gəlir.
| Zaman | Hansı |
|---|---|
| 2026-07-31 09:25:05 → 09:29:56 | Hər biri versiyadan başlayaraq on ad yaradıldı 0.0.1, təxminən on üç saniyə ara ilə. |
| 2026-08-01 09:38 → 11:29 | Mövcud adlar şişirdilmiş versiya nömrələri vasitəsilə yüksəlir, 6.1.9 vasitəsilə 6.1.12, 9.9.9 vasitəsilə 9.9.12, 8.9.3 vasitəsilə 8.9.6, 5.4.6 vasitəsilə 5.4.9. |
| 2026-08-01 13:04:14 → 13:04:18 | Daha doqquz beaver-ui-* adlar dörd saniyəlik fasilə ilə yaradılıb və hər biri əvvəlki tarixçəsi olmadan birbaşa 12.x versiyasında dərc olunub. |
| 2026-08-01 ~13:00–14:30 | Əl ilə yoxlanıldıqda zərərli kimi təsnif edilən versiyalar. |
| 2026-08-01 17:39:49 → 17:40:14 | İyirmi addan on doqquzu, ardıcıl olaraq, təxminən 1.2 saniyə ara ilə, iyirmi beş saniyə ərzində dərc olunmayıb. |
| 2026-08-02 18:58:41 | a.poltoradnev-package-c fərqli bir texniki xidmət hesabı, versiyası altında yenidən yaradıldı 0.0.2. |
| 2026-08-02 19:20:28 | Versiya 33.9.5 eyni adla nəşr olunub. |
| 2026-08-02 20:14 | Hər üç çatdırılma hostu ikinci və üçüncü mərhələlərə xidmət göstərir; DNS ehtiyat nüsxəsi hissə sayımları ilə cavab verir. |
Bu yazılardan ikisi üzərində dayanmağa dəyər.
13:04-cü saniyədəki partlayış, hər birinin on ikidə bir versiyası olan və heç bir versiyası olmayan doqquz paketi dörd saniyədə reyestrdə yerləşdirdi. 0.0.1 altında. Bu miqyasda, bir günlük adlarla verilən versiya nömrələri, buraxılış tarixini təsvir etmir.
Dərcdən çıxarılma ardıcıllığı da eyni dərəcədə mexanikidir: on doqquz ad, iyirmi beş saniyə, hətta boşluq. npm bunları reyestr tərəfindən başladılan silinmənin geridə qoyduğu yer tutucusu əvəzinə adi dərcdən çıxarılma hadisələri kimi qeyd edir və bu da hərəkəti reyestrlə deyil, nəşriyyat hesabı ilə əlaqələndirir.
Kompromis göstəriciləri
Hostlar və yollar defangasiya olunub. Onları istehsal sistemindən həll etməyin və ya geri qaytarmayın.
| növü | Dəyər |
|---|---|
| Çatdırılma ev sahibi | oob-worker[.]cf99-9b3[.]workers[.]dev |
| Çatdırılma ev sahibi | oob-worker[.]cf102-baf[.]workers[.]dev |
| Çatdırılma ev sahibi | oob-worker[.]cf103-070[.]workers[.]dev |
| DNS daşınması | tin[.]dl[.]well1[.]site (Linux x64), tina[.] (arm64), ldr[.] (macOS), win[.] (Windows) — hissə sayı c.<domain>, məlumatlar <n>.<domain> |
| 2-cü mərhələ yolları | /pkg/package, /pkg/package-arm64, /pkg/loader_mac, /pkg/package.exe |
| 3-cü mərhələ yolları | /pkg/beacon_linux.bin, /pkg/beacon_mac.bin, /pkg/update_win.exe, /pkg/arm.bin |
| Buraxma yolu (Unix) | /var/tmp/.cache_<8-hex> |
| Buraxma yolu (Pəncərələr) | %TEMP%\dotnet_diag_<8-hex>.exe |
| Davamlılıq (Windows) | %APPDATA%\Microsoft\Windows\Themes\SystemSoundsService.exe; tapşırıq \Microsoft\Windows\Multimedia\SystemSoundsService; İşə salma düyməsi dəyəri SOFTWARE\Microsoft\Windows\CurrentVersion\Run\SystemSoundsService |
| Mutex (Windows) | Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9} |
| Davamlılıq (macOS) | ~/Library/LaunchAgents/com.apple.windowserver.helper.plistikili at ~/.local/share/runtime/com.apple.runtime |
| Bir dəfə işlədilən möhür | /tmp/.analytics_state, %TEMP%\analytics_state (20,357 saniyəlik pəncərə) |
| İmza tələb edin | HTTPS GET, IPv4 ilə bağlanmış, İstifadəçi Agenti: node-fetch/2.6 |
| Mərhələ 1 faylı | _polyfill.js, SHA-256 392dc9ec85042ce1796bfa9b8c7bf6e05c7710579aab8b7b1eb73788683883af |
| İstinad olunmamış fayl | lib/telemetry.js, SHA-256 2266c9b8e199daebe31a9afcb61d9b0d76706b63c92312fc8223d22de42e63c7 |
| Mərhələ 2 (Linux x64) | SHA-256 7e486657f30594afda379b97030252a09a19fe8055e25c9e371544f59bd8e9e3 |
| Mərhələ 2 (Linux arm64) | SHA-256 aafc37589c0d21fb729761a1579ca3b278b95bce152aacfa29243ffd27f5eeb7 |
| Mərhələ 2 (macOS) | SHA-256 c214746c74cae8ece8bdaf69aa05da4db6ce013f9e77452d1eed1a002fd9ba00 |
| Mərhələ 2 (Pəncərələr) | SHA-256 d632c2c0c7801c3da57cf849fe4b4ca8351d9a7fe73c31050bf5dbcc96a16791 |
Paket adları
Atribut və müşahidə olunan davranış
İki npm hesabı iştirak edir. On doqquz dərc olunmamış ad bir hesab tərəfindən dərc edilib; a.poltoradnev-paket-c 2 avqustda fərqli hesab adı və fərqli bir e-poçt domeni altında yenidən qeydiyyata alındı. Kod hər ikisində eyni mənşəlidir və ikinci qeydiyyat eyni çatdırılma hostlarını, eyni DNS ehtiyat domenlərini, eyni açılan yol quruluşunu və eyni run-once möhürünü daşıyır.
Yenidən nəşr olunmuş cütlükdə onun necə yığıldığı da göstərilir. 0.0.2 və 33.9.5 versiya sətirindən başqa bayt baxımından eynidir paket.jsonVə indeks.js göndərilib 0.0.2 elan const VERSIYASI = “33.9.5”Hər iki artefakt bir mənbə ağacından kəsilmiş və sonradan nömrələnmişdir. Yoxdur 0.0.2 inkişaf tarixi üçün 0.0.2 təmsil etmək üçün buraxılış.
Bütün dəst üzrə versiya nömrələməsi eyni məntiqə uyğundur. Bu kampaniyadakı paket adları ictimai reyestrdə deyil, təşkilat daxilində mövcud olacaq şeylər kimi oxunur: UI komponent dəsti, ESLint konfiqurasiyası, SLA zondlayıcısı, şəxsin adını daşıyan paket. Quruluş asılılığı adla həll etdikdə və şəxsi reyestrlə yanaşı ictimai reyestrə də müraciət etdikdə, daha yüksək versiya nömrəsi qalib gəlir. Yaradılan ad 0.0.1 Bazar ertəsi günü və daşıma 12.9.6 on Tuesday bu müqayisə üçün mövqe tutur.
İki nəşr dalğası da təkrarlamanı təklif edən şəkildə fərqlənir. Əvvəlki kod öz faydalı yük faylını adlandırırdı. setup.js və beş çatdırılma hostunu sadaladı; cari faylın adı belədir _polyfill.js və üçünü sadalayır. Əvvəlki versiya işə salındıqdan beş saniyə sonra silinmiş faylı sildi və prosesi silinmiş inode-dan işlətməyə məcbur etdi; cari versiya isə işləmir. İstinad olunmamış lib/telemetry.js hər iki tərəfdəki tartopun içində qalır, hələ də göndərilib, artıq naqilləri yoxdur.
Öldürmə açarları ilə bağlı bir müşahidə əvvəlcədən deməyə dəyərcisely, çünki bu, ümumi oxunuşla ziddiyyət təşkil edir. TELEMETRİKİ DƏYİŞDİRİLMƏSİ, ANALİTİK_OPT_OUTvə İZLƏMƏYİN qiymətləndirilir və başqa bir şey baş verməzdən əvvəl yoxlanılır. Təhlil mühiti onlardan hər hansı birini təyin edən tədqiqatçı heç bir şey etməyən bir paket müşahidə edir.
Təsir və müdafiəçilərin edə biləcəyi şeylər
İdxal-vaxt tetikleyicisinin praktik nəticəsi dardır və ayrıca qeyd etməyə dəyər. npm quraşdırma –ignore-scripts həyat dövrü skriptlərinin işləməsinin qarşısını alır və bu, əsaslı məsləhətdir. Burada heç bir təsiri yoxdur, çünki bu kod həyat dövrü skriptindən istifadə etmir. Faydalı yük tətbiq kodu, test çalışması, paketləmə və ya linter əvvəlcə modulu idxal etdikdə işə düşür. Quraşdıran və sonra dərhal quran CI çalışdırıcısında ikisi saniyə fərqi ilə işləyir.
Ov üçün davamlı siqnallar hərfi deyil, struktur xarakter daşıyır. Hostlar, fayl adı və buraxılış yolları dəyişəcək; bu formaları dəyişdirmək daha çətindir:
- Son ifadəsi a olan modul giriş nöqtəsi cəhd edin { tələb edir(“./x”); } tutmaq (_) {} ixrac edilən API-nin bir hissəsi olmayan bir fayl ətrafında. Orijinal polifilli paket onu yuxarıdan idxal edir və nəticəsini istifadə edir. Faylın altından idxal edilən hər bir xətanı udmaq xətanın işlənməsi demək deyil.
- Host simləri tərəfindən yığılmışdır .qoşul(“”) fraqmentlər massivindən. Qanuni kodun host adını massiv elementləri arasında bölmək üçün heç bir səbəbi yoxdur.
- Elan edilmiş asılılıqları boş, lakin çatan paket https, dnsvə uşaq_prosesi idxal zamanı. UI komponentini reklam edən bir paketdə axtarış və icra bütün tapıntıdır.
- Versiya nömrələri paketin yaşı ilə uyğunsuzdur. İlk dəfə bir neçə gün əvvəl ikirəqəmli böyük versiyada dərc olunmuş və arada heç bir buraxılışı olmayan bir ad, onun inkişafından başqa bir şeyi təsvir edir.
- Yazır / var / tmp or % TEMP% bir chmod 0755-ə və ayrılmış bir törəməyə. Ardıcıllıq qısa, nizamlı və nadir hallarda xoşxassəlidir.
Windows hostlarında iki ucuz, yüksək etibarlılıq yoxlaması mövcuddur. Davamlılıq artefaktları sabit sətirlərdir və onların heç biri təmiz sistemə aid deyil: planlaşdırılmış tapşırıq \Microsoft\Windows\Multimedia\SistemSəsləriXidməti, adlı Run-key dəyəri Sistem Səsləri Xidmətivə bu adın altındakı icra edilə bilən fayl %APPDATA%\Microsoft\Windows\Mövzular\Orijinal Windows audio xidməti bu yerlərin heç birində mövcud deyil. İkincisi, yükləyici sabit tək nümunəli mutex istifadə edir, Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9}; onun host üzərində olması bir göstəricidir və yükləyici mövcud mutex-i "artıq işləyir" kimi qəbul etdiyindən, bərpa işləri planlaşdırılarkən onu əvvəlcədən yaratmaq qısamüddətli peyvənd üçün uyğundur.
Üçüncü mərhələdə aşkarlama daha çətin bir problemdir və aydınlaşdırmağa dəyər. İctimai təhlillərə əsasən, bu, diskə yazılmaq əvəzinə, şifrələnir və yaddaşda xəritələşdirilir, buna görə də fayl skaneri və disk kriminalistikası bunu görməyəcək. Müşahidə edilə bilən şey yükləyicinin öz izidir - davamlılıq girişləri, mutex və çatdırılma hostlarına və ya DNS-TXT domenlərinə gedən sorğular.
Həm özəl, həm də açıq reyestrdən asılılıqları həll edən mühitlər üçün, buradakı heç bir şey azaldılmanı dəyişmir: ictimai adın onları qane edə bilməməsi üçün əhatə dairəsinin daxili adları və bu əhatə dairələri üçün qətnaməni daxili reyestrə yerləşdirmək. Yuxarıda təsvir edilən versiya inflyasiya davranışı yalnız daha yüksək ictimai versiyanın ad qazana biləcəyi yerlərdə işləyir.
Nəhayət, dərc olunmamış elanı sonluq kimi deyil, diqqətlə oxumağa dəyər. On doqquz ad reyestrdən iyirmi beş saniyə ərzində çıxdı və biri bir gün sonra yeni hesab altında geri qayıtdı, çatdırılma infrastrukturu isə toxunulmadı. Paketlərin silinməsi əməliyyatın silinməsi demək deyil; bu yazıldığı müddətdə hostlar hər mərhələdə xidmət göstərməyə davam etdilər. 31 iyul - 1 avqust tarixləri arasında bu adlardan birini həll edən hər hansı bir asılılıq ağacı, adın hələ də mövcud olub-olmamasından asılı olmayaraq, birinci mərhələni icra etmək imkanına malik kimi qəbul edilməlidir.
References
- Windows yükləyicisinin çoxmühərrikli təhlili — yuxarıda qeyd olunan AMSI/ETW yamaqlama, yaddaşda əks etdirici icra və mutex detalları üçün mənbə.
- npm skript sənədləri — bu kampaniyanın istifadə etmədiyi həyat dövrü hadisələri.
- npm quraşdırma sənədləri — örtüklər –ignore-scripts və onun əhatə dairəsi.







