Lt; DR
Dvidešimt „npm“ paketų, paskelbtų per dvi dienas 2026 m. liepos pabaigoje ir rugpjūčio pradžioje, pateikiami kaip vidinės vartotojo sąsajos komponentų bibliotekos ir bendros posistemio programos. Nė vienas iš jų neįdiegia funkcionalumo, kurį reklamuoja. Kiekvienas iš jų pateikia stub klasę, README failą, kuriame paketas aprašomas kaip vidinis, ir failą pavadinimu _polyfill.js.
Įdomiausia yra tai, iš kur tas failas iškviečiamas. Tai nėra diegimo kabliukas — manifestuose visiškai nėra nurodyta, kad reikia atlikti išankstinio diegimo, diegimo ar po diegimo veiksmus. Vietoj to, paskutinė eilutė index.js rašoma: try { require("./_polyfill"); } catch (_) {}Naudingoji apkrova paleidžiama pirmą kartą, kai programos kodas importuoja paketą. Diegimas naudojant --ignore-scripts, standard patarimai, kaip sumažinti tiekimo grandinės poveikį diegimo metu, netrukdo tam.
Ką _polyfill.js atlieka šias užduotis: nuskaityti platformai būdingą vykdomąjį failą iš vieno iš trijų „Cloudflare Workers“ serverių, įrašyti jį į laikiną katalogą atsitiktiniu pavadinimu, pažymėti kaip vykdomąjį failą ir paleisti atskirai nuo pagrindinio proceso. Šis vykdomasis failas pats savaime yra įkroviklis: jis išvardija galinių taškų apsaugos produktus pagal proceso pavadinimą, patikrina dabartinį vartotojo vardą su žinomomis analizės aplinkos paskyromis, pataiso AMSI ir ETW telemetrijos sąsajas atmintyje, įdiegia išsaugojimą „Windows“ garso komponento vardu ir nuskaito trečiąjį kelių megabaitų dydžio dvejetainį failą. Trečiasis etapas pristatomas užšifruotas ir yra iššifruojamas ir vykdomas atmintyje, o ne įrašomas į diską.
Rugpjūčio 1 d., maždaug po keturių valandų nuo tada, kai rankiniu būdu peržiūrėjus buvo patvirtinta, kad paketai yra kenkėjiški, devyniolika iš dvidešimties vardų buvo pašalinti iš „npm“ jų pačių leidėjo per dvidešimt penkias sekundes. Rugpjūčio 2 d. vienas iš šių vardų buvo užregistruotas dar kartą – naudojant kitą paskyrą su tuo pačiu kodu. Rašymo metu pristatymo infrastruktūra aptarnavo visus tris etapus.
| Paketai | 20 npm pavadinimų, ~74 publikuotos versijos |
| Temų pavadinimai | beaver-ui-* (13) accounts-* (3), plius afisha-storybook-default, bcore-bravo-eslint-config, arbocrate-sla-prober-arbocrate-sla-prober-core, a.poltoradnev-package-c |
| Sukelti | Modulio importavimas (require), o ne npm gyvavimo ciklo scenarijus |
| 1 Etapas | _polyfill.js — paieška ir paleidimas |
| 2 Etapas | Statiškai susietas įkėlėjas, UPX supakuotas Linux sistemoje; galinių taškų saugumo išvardijimas, AMSI/ETW pataisymai, duomenų išsaugojimas |
| 3 Etapas | beacon_linux.bin / beacon_mac.bin / update_win.exe, 4–13 MB; pristatoma užšifruota, vykdoma atmintyje |
| Platformos | „Linux x64“ ir „arm64“, universali „macOS“, „Windows x64“ |
| Leidėjai | Dvi paskyros, viena kodų bazė |
| Statusas | 19 iš 20 vardų nepaskelbta operatoriaus; 1 perpublikuotas ir paskelbtas tiesiogiai; pristatymo infrastruktūra veikia |
Atakos anatomija
1 etapas – paketas
Kiekvienas narys siunčia tą pačią trijų failų formą. rodyklė.js eksportuoja klasę su init () kuris nustato loginę reikšmę, a versija (), Ir konfigūruoti() kuris sujungia parinkčių objektą. Nieko daugiau. README.md pateikia diegimo eilutę, a reikalauti eilutė ir sakinys „Vidinis paketas. Gaires žr. CONTRIBUTING.md“ — PRIEDAS.md nėra tarball faile.
_polyfill.js yra šiek tiek mažiau nei 5 KB dydžio ir skaitomas kaip įprastas infrastruktūros kodas. Jis atidaromas su trimis aplinkos patikrinimais:
if (process.env.DISABLE_TELEMETRY ||
process.env.ANALYTICS_OPT_OUT ||
process.env.DO_NOT_TRACK)
return;Šie kintamieji yra įprasti privatumo valdikliai. Čia jie kontroliuoja, ar dvejetainis failas yra atsisiunčiamas ir vykdomas. Mašina, kuri nustato NE_STEKTI yra visiškai praleidžiamas.
Toliau pateikiamas vienkartinis antspaudas: failas adresu /tmp/.analytics_statearba analitinės_būsenos pagal % TEMP% „Windows“ sistemoje, kurios modifikavimo laikas lyginamas su 20 357 sekundžių langu. Tame lange modulis grąžina duomenis nedelsiant, todėl pakartotinis importavimas kompiliavimo metu sukuria vieną paieškos bandymą, o ne dešimtis.
Paskirties serveriai nėra pateikiami kaip literalai. Jie surenkami vykdymo metu iš fragmentų:
["oob-worker.cf102-","baf.workers.d","ev"].join("")
Tokiu būdu sukuriami trys mazgai, kurie prieš naudojimą sumaišomi, todėl jų eilės tvarka kiekvieno vykdymo metu skiriasi. Paieška yra HTTPS GET, prijungtas prie IPv4 su User-agent of node-fetch/2.6 — tikėtina reikšmė, kurią turėtų skleisti mazgo procesas. Atsakymas, mažesnis nei 1,000 baitų, atmetamas ir bandomas kitas mazgas.
Jei visi trys nepavyksta, modulis grįžta prie DNS. Jis pateikia TXT užklausą apie norint gauti fragmentų skaičių, tada pateikiamos užklausos 0. per n. dešimties vienetų partijomis sujungia atsakymus ir base64 dekoduoja rezultatą. Šis kelias per DNS TXT įrašus perduoda tą patį vykdomąjį failą, kuris išlieka aplinkose, kuriose filtruojamas išeinantis HTTP, bet nefiltruojamas DNS.
Gauti baitai įrašomi į /var/tmp/.cache_<8-šešioliktainis> „Unix“ sistemoje arba %TEMP%\dotnet_diag_<8-hex>.exe „Windows“ sistemoje – failo pavadinimas, kuris skaitomas kaip .NET diagnostikos artefaktas. „Unix“ sistemoje failui suteikiamas 0755 režimas. Paleidimas yra neršti su atsiribojęs: tiesa, stdio: „ignoruoti“ir neatpažinta(), taigi vaikas išgyvena ilgiau nei jį paleidęs Node procesas; sistemoje „Windows“ iškvietimas prideda „WindowsHide“: tiesa.
Paveikslą užbaigia dvi detalės. Pagalbininkas apibrėžiamas kaip const _l = (…a) => process.stderr.write(“”) iškviečiamas kiekviename paieškos etape – jis įrašo tuščią eilutę ir atmeta savo argumentus, užimdamas vietą, kurioje būtų registruojamas žurnalas. Kiekvienas paketas pateikia 81 KB failą adresu lib/telemetry.js kurio antraštės komentare aprašomas „Analytics SDK“ su „HTTPS perdavimu su galinių taškų rotacija ir pakartotiniu bandymu“ ir „DNS pagrindu veikiančia paslaugų paieška, skirta perjungimui“. Dabartinėje versijoje to nereikia.
2 etapas – krautuvas
„Linux x64“ dvejetainis failas yra statiškai susietas ELF, suspaustas naudojant UPX 3.96. „macOS“ versija yra universalus dvejetainis failas, apimantis „x86_64“ ir „arm64“; „Windows“ versija yra konsolės vykdomasis failas be PE32+ duomenų. Visi keturi buvo gauti ir patikrinti statiškai; nė vienas nebuvo vykdomas.
„Windows“ kompiliavimo importavimo ir eilučių lentelė aiškiai aprašo jos veikimą. Ji išsprendžia Ar yra derintuvas, Nuotolinio derinimo sistemos patikrinimasir NtQueryInformationProcess, ir skaito SYSTEM\CurrentControlSet\Services\Disk\Enum — registro kelias, kurio reikšmės identifikuoja virtualius disko valdiklius. Jis iškviečia GetDiskFreeSpaceExW bei GlobalMemoryStatusEx, atitinkantis pagrindinio kompiuterio išteklių atitikimo trumpalaikiam analizės egzemplioriui tikrinimą.
Jame yra vartotojo vardų sąrašas: Dabartinis vartotojas, IT administratorius, Hong Lee, BANDYMŲ DĖŽUTĖ, hapubws, milozs, timpa, admin, kenkėjiška programa, pavyzdys, virusas, aplinkaKeletas iš jų yra viešai dokumentuotų analizės aplinkų artefaktai.
Taip pat pateikiamas galinių taškų apsaugos produktų sąrašas ir jų procesų pavadinimai, išvardyti iki CreateToolhelp32Snapshot bei Process32FirstW/Process32NextW:
- „CrowdStrike Falcon“. (
csfalconservice,CSFalconContainer) - Suodžių (
cb.exe) - Cylance (
cylancesvc.exe) - BitDefender (
bdagent.exe) - "Kaspersky (
avp.exe,kavfs.exe) - „Trend Micro“ ir „Deep Security“ (
coreServiceShell,ds_agent.exe) - „FireEye“ / „Trellix“ (
xagt.exe) - Taniumas (
taniumclient.exe) - HitmanPro (
hmpalert.exe) - Elastingas (
elastic-agent.exe,elastic-endpoint,filebeat.exe,winlogbeat.exe) - Wazuh ir OSSEC (
wazuh-agent.exe,ossec-agent.exe) - Check Point
- "Windows Defender"
Yra dar du simboliai: AmsiScanBuffer, įėjimo taškas, kurį „Windows“ pateikia atminties turinio nuskaitymui, ir EtwEventWrite, funkcija, per kurią „Event Tracing for Windows“ įrašo įvykius. Abu jie yra įprasti proceso metu modifikuojamų duomenų, kurie slopina telemetriją, kurią kitaip generuotų tos sąsajos, taikiniai.
„Windows“ sistemoje du kartus pasirodo „Persistence“. Dvejetainis failas nukopijuojamas į %APPDATA%\Microsoft\Windows\Themes\SystemSoundsService.exe, ir į tai remiasi du mechanizmai: vertė, esanti žemiau PROGRAMINĖ ĮRANGA\Microsoft\Windows\Dabartinė versija\Vykdytiir suplanuota užduotis, užregistruota kaip
schtasks /Create /F /SC ONLOGON
/TN "\Microsoft\Windows\Multimedia\SystemSoundsService"
/TR "\"%s\""
/RL HIGHESTUžduoties kelias, užduoties pavadinimas ir vykdomojo failo pavadinimas atspindi autentišką „Windows“ garso komponentą. /RL AUKŠČIAUSIAS prašo aukščiausio įmanomo privilegijų lygio.
„macOS“ kompiliavimas atitinka tą patį modelį su platformai tinkamais pavadinimais: jis rašo ypatybių sąrašą ~/Library/LaunchAgents/com.apple.windowserver.helper.plist ir patalpina vykdomąjį failą ~/.local/share/runtime/com.apple.runtimeJis tikrina, ar /Programos/VMware Fusion.app bei /Biblioteka/Programų palaikymas/VMware įrankiai.
Tinklo pajėgumai apima tris transporto rūšis: WININET.dll HTTPS su https://%s:%d%s formato eilutė, WS2_32.dll lizdai ir DNSAPI.dll su DnsQuery_A šalia a c.%s.%s formato eilutė – ta pati fragmentų skaičiaus užklausos forma, kurią naudoja pirmasis etapas.
Aukščiau pateiktas aprašymas rodo, ką dvejetainių failų importavimas, eilutės ir registro keliai rodo patikrinimo metu. Vieša kelių variklių to paties „Windows“ pavyzdžio analizė papildo detales, kurių negalima nustatyti vien statiškai nuskaitant importavimo lentelę, todėl čia tai priskiriama, o ne pakartojama kaip tiesioginis stebėjimas. Šioje analizėje teigiama, kad AMSI ir ETW nuorodos yra ne tik išspręstos, bet ir pataisytos. AmsiScanBuffer in amsi.dll bei EtwEventWrite in ntdll.dll — kuris slopina atminties turinio nuskaitymą ir įvykių sekimą procesui. Be to, jis praneša apie antianalizės patikrinimus kaip pagrįstus laiku Nuotolinio derinimo sistemos patikrinimasir identifikuoja GetThreadContext iškviečiamas kaip aparatinės įrangos lūžio taško patikrinimas, skaitantis derinimo registrus. Taip pat pranešama apie vieno egzemplioriaus muteksą, Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9}ir vardai Sistemos garsų paslauga kaip „Run-key“ reikšmė. Šios „mutex“ reikšmės nebuvo tarp čia atkurtų eilučių – naudotas ištraukimo filtras neįtraukė šešioliktainių žetonų su didžiosiomis raidėmis, sujungtų skliausteliuose, – ir ji įrašyta indikatorių lentelėje remiantis vieša analize, o ne tiesioginiu stebėjimu.
3 Etapas
Įkroviklis nurodo kitą kelių rinkinį tame pačiame pagrindiniame kompiuteryje. Visi jie buvo pasiekiami analizės metu: beacon_linux.bin esant 5.3 MB, beacon_mac.bin esant 13.3 MB, update_win.exe esant 10.3 MB ir arm.bin 4.3 MB dydžio. Jie nebuvo gauti, o jų veikimas nežinomas.
„Windows“ kelio viešoji įkrovos analizė aprašo, kaip tvarkomas trečiasis etapas: jis nuskaitomas per „WinINet“, pristatomas užšifruotas, iššifruojamas atmintyje ir vykdomas refleksyviai – atmintis paskirstoma, importas atliekamas, perkėlimas apdorojamas ir valdymas perduodamas naujam siūlui per Sukurti temąDėl šios priežasties trečiasis etapas niekada neįrašomas į failų sistemą, todėl failais pagrįstas aptikimas ir diskų teismo ekspertizė po incidento neturi ko iš jo atkurti. Tai taip pat reiškia, kad nuskaitant baitus iš pristatymo serverio būtų gautas šifruotas tekstas, o ne analizuojamas vykdomasis failas.
Chronologija
Visos laiko žymos yra UTC ir gaunamos iš npm registro metaduomenų, kurie registruoja paketo sukūrimą ir nepublikavimą nepriklausomai nuo jokio stebėtojo.
| Kada | Ką |
|---|---|
| 2026-07-31 09:25:05 → 09:29:56 | Sukurta dešimt pavadinimų, kiekvienas pradedant nuo versijos 0.0.1, maždaug trylikos sekundžių skirtumu. |
| 2026-08-01 09:38 → 11:29 | Esami pavadinimai kyla dėl išpūstų versijų numerių, 6.1.9 per 6.1.12, 9.9.9 per 9.9.12, 8.9.3 per 8.9.6, 5.4.6 per 5.4.9. |
| 2026-08-01 13:04:14 → 13:04:18 | Devyni toliau beaver-ui-* vardai, sukurti per keturių sekundžių pertrauką, kiekvienas tiesiogiai publikuojamas 12.x versijoje be ankstesnės istorijos. |
| 2026-08-01 ~13:00–14:30 | Rankinės peržiūros metu priskirtos kenkėjiškoms versijoms. |
| 2026-08-01 17:39:49 → 17:40:14 | Devyniolika iš dvidešimties vardų nebuvo publikuoti per dvidešimt penkias sekundes, paeiliui, maždaug 1.2 sekundės skirtumu. |
| 2026-08-02 18:58:41 | a.poltoradnev-package-c vėl sukurta naudojant kitą prižiūrėtojo paskyrą, versija 0.0.2. |
| 2026-08-02 19:20:28 | versija 33.9.5 išleistas tuo pačiu pavadinimu. |
| 2026-08-02 20:14 | Visi trys pristatymo mazgai aptarnauja antrąjį ir trečiąjį etapus; atsarginis DNS atsako su fragmentų skaičiumi. |
Verta apmąstyti du iš šių įrašų.
13:04 val. įvykęs incidentas per keturias sekundes į registrą įtraukė devynis paketus, kurių kiekvienoje buvo po vieną versiją dvyliktame rinkinyje ir nė vienos. 0.0.1 po juo. Tokio mastelio versijų numeriai, skirti vienai dienai senesniems pavadinimams, neapibūdina leidimo istorijos.
Nepaskelbimo seka yra tokia pat mechaniška: devyniolika vardų, dvidešimt penkios sekundės, lyginiai tarpai. npm juos įrašo kaip įprastus nepaskelbimo įvykius, o ne kaip vietos žymeklį, kurį palieka registro inicijuotas pašalinimas, todėl veiksmas priskiriamas publikavimo paskyrai, o ne registrui.
Kompromiso rodikliai
Pagrindiniai kompiuteriai ir keliai yra pašalinti. Neišspręskite ir neieškokite jų iš gamybinės sistemos.
| Tipas | Reikšmė |
|---|---|
| Pristatymo serveris | oob-worker[.]cf99-9b3[.]workers[.]dev |
| Pristatymo serveris | oob-worker[.]cf102-baf[.]workers[.]dev |
| Pristatymo serveris | oob-worker[.]cf103-070[.]workers[.]dev |
| DNS perdavimas | tin[.]dl[.]well1[.]site (Linux x64), tina[.] (ranka64), ldr[.] („MacOS“), win[.] (Windows) – fragmentų skaičius ties c.<domain>, duomenys adresu <n>.<domain> |
| 2 etapo keliai | /pkg/package, /pkg/package-arm64, /pkg/loader_mac, /pkg/package.exe |
| 3 etapo keliai | /pkg/beacon_linux.bin, /pkg/beacon_mac.bin, /pkg/update_win.exe, /pkg/arm.bin |
| Numetimo kelias (Unix) | /var/tmp/.cache_<8-hex> |
| Numetimo kelias („Windows“) | %TEMP%\dotnet_diag_<8-hex>.exe |
| Patvarumas („Windows“) | %APPDATA%\Microsoft\Windows\Themes\SystemSoundsService.exe; užduotis \Microsoft\Windows\Multimedia\SystemSoundsServiceVykdymo rakto reikšmė SOFTWARE\Microsoft\Windows\CurrentVersion\Run\SystemSoundsService |
| Mutex (Windows) | Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9} |
| Patvarumas (macOS) | ~/Library/LaunchAgents/com.apple.windowserver.helper.plistdvejetainis ties ~/.local/share/runtime/com.apple.runtime |
| Vienkartinio naudojimo antspaudas | /tmp/.analytics_state, %TEMP%\analytics_state (20 357 s langas) |
| Prašymo parašas | HTTPS GET, IPv4 prisegtas, vartotojo agentas: node-fetch/2.6 |
| 1 etapo failas | _polyfill.js, SHA-256 392dc9ec85042ce1796bfa9b8c7bf6e05c7710579aab8b7b1eb73788683883af |
| Nenurodytas failas | lib/telemetry.js, SHA-256 2266c9b8e199daebe31a9afcb61d9b0d76706b63c92312fc8223d22de42e63c7 |
| 2 etapas („Linux x64“) | SHA-256 7e486657f30594afda379b97030252a09a19fe8055e25c9e371544f59bd8e9e3 |
| 2 etapas („Linux arm64“) | SHA-256 aafc37589c0d21fb729761a1579ca3b278b95bce152aacfa29243ffd27f5eeb7 |
| 2 etapas („macOS“) | SHA-256 c214746c74cae8ece8bdaf69aa05da4db6ce013f9e77452d1eed1a002fd9ba00 |
| 2 etapas („Windows“) | SHA-256 d632c2c0c7801c3da57cf849fe4b4ca8351d9a7fe73c31050bf5dbcc96a16791 |
Paketų pavadinimai
Priskyrimas ir stebimas elgesys
Dalyvauja dvi npm paskyros. Devyniolika neskelbtų vardų buvo paskelbti vienos paskyros; a.poltoradnev-package-c buvo perregistruota rugpjūčio 2 d. kitu paskyros pavadinimu ir kitu el. pašto domenu. Abiejų paskyrų kodas yra tas pats, o antroji registracija turi tuos pačius pristatymo serverius, tuos pačius atsarginius DNS domenus, tą pačią išsiuntimo kelio konstrukciją ir tą patį vienkartinio paleidimo antspaudą.
Pakartotinai publikuotoje poroje taip pat parodyta, kaip ji buvo surinkta. 0.0.2 bei 33.9.5 yra baitų atžvilgiu identiški, išskyrus versijos eilutę paketas.json, rodyklė.js išsiųstas kaip 0.0.2 pareiškia konstanta VERSIJA = „33.9.5“Abu artefaktai buvo iškirpti iš vieno šaltinio medžio ir vėliau sunumeruoti. Nėra 0.0.2 vystymosi istorija 0.0.2 leidimas atstovauti.
Viso rinkinio versijų numeravimas vadovaujasi ta pačia logika. Šioje kampanijoje paketų pavadinimai skaitomi kaip dalykai, kurie egzistuotų organizacijos viduje, o ne viešajame registre: vartotojo sąsajos komponentų rinkinys, ESLint konfigūracija, SLA zondas, paketas, pavadintas asmens vardu. Kai kompiliavimo metu priklausomybė išsprendžiama pagal pavadinimą ir ieškoma informacijos viešajame registre kartu su privačiu registru, laimi didesnis versijos numeris. Pavadinimas, sukurtas adresu 0.0.1 pirmadienį ir nešdamas 12.9.6 antradienį yra pasirengęs tam palyginimui.
Du publikavimo etapai taip pat skiriasi tuo, kas rodo iteraciją. Ankstesnis kodas savo naudingosios apkrovos failą pavadino setup.js ir išvardijo penkis pristatymo mazgus; dabartinis failas pavadintas _polyfill.js ir išvardija tris. Ankstesnė versija pašalino pašalintą failą praėjus penkioms sekundėms po paleidimo, palikdama procesą veikiantį iš ištrinto inodo; dabartinė versija to nedaro. Nenurodytas lib/telemetry.js lieka abiejų pusių tarball faile, vis dar išsiųstas, nebėra prijungtas.
Verta paminėti vieną pastebėjimą apie išjungimo jungiklius iš anksto.cisely, nes tai prieštarauja įprastam aiškinimui. DISABLE_TELEMETRY, ANALITIKOS_ATSISAKYMAS_ir NE_STEKTI yra paisomi ir patikrinami prieš ką nors kita. Tyrėjas, kurio analizės aplinka nustato bet kurį iš jų, pastebi paketą, kuris visiškai nieko neveikia.
Poveikis ir ką gali padaryti gynėjai
Praktinė importo laiko suveikimo pasekmė yra siaura ir verta ją aptarti atskirai. npm diegimas – ignoruoti scenarijus neleidžia vykdyti gyvavimo ciklo scenarijų, ir tai yra geras patarimas. Čia jis neturi jokio poveikio, nes šis kodas nenaudoja gyvavimo ciklo scenarijaus. Naudingoji apkrova paleidžiama, kai programos kodas, bandomasis paleidimas, paketavimo programa arba linteris pirmiausia importuoja modulį. CI vykdiklyje, kuris įdiegiamas ir iš karto kompiliuojamas, šie du veiksmai atliekami per kelias sekundes.
Medžioklei patvarūs signalai yra struktūriniai, o ne pažodiniai. Pagrindiniai kompiuteriai, failo pavadinimas ir įkėlimo keliai keisis; šias formas sunkiau keisti:
- Modulio įėjimo taškas, kurio galutinis teiginys yra try { require(“./x”); } catch (_) {} aplink failą, kuris nėra eksportuotos API dalis. Paketas su tikru „polyfill“ importuoja jį viršuje ir naudoja jo rezultatą. Visų klaidų, gautų importuojant iš failo apačios, prarijimas nėra klaidų apdorojimas.
- Pagrindinio kompiuterio eilutės, surinktos .prisijungti("") iš fragmentų masyvo. Teisėtas kodas neturi jokios priežasties skaidyti pagrindinio kompiuterio pavadinimo tarp masyvo elementų.
- Paketas, kurio deklaruotos priklausomybės yra tuščios, bet kuris siekia hTTPS, dnsir vaikas_procesas importo metu. Visas radinys yra paieška ir vykdymas pakete, kuris reklamuoja vartotojo sąsajos komponentą.
- Versijų numeriai neatitinka paketo amžiaus. Pavadinimas, pirmą kartą paskelbtas prieš kelias dienas dviženkle pagrindine versija be jokių tarpinių leidimų, apibūdina kažką kita, o ne jo vystymąsi.
- Rašo į / var / tmp or % TEMP% po chmod iki 0755 ir atsiskyręs nerštas. Seka yra trumpa, tvarkinga ir retai kada nekenksminga kartu.
„Windows“ pagrindiniuose kompiuteriuose yra du pigūs, didelio patikimumo patikrinimai. Patvarumo artefaktai yra fiksuotos eilutės ir nė vienas iš jų nepriklauso švariai sistemai: suplanuota užduotis „Microsoft“ „Windows“ „Multimedia“ „SystemSoundsService“, „Run-key“ reikšmė, pavadinta Sistemos garsų paslaugair to paties pavadinimo vykdomąjį failą, esantį %APPDATA%\Microsoft\Windows\Temos\Originali „Windows“ garso paslauga nėra nė vienoje iš šių vietų. Antra, įkrovos programa naudoja fiksuotą vieno egzemplioriaus „mutex“, Global\{7A3B9E1F-C2D4-4F8A-B5E6-D7A1F0C3E2B9}; jo buvimas pagrindiniame kompiuteryje yra indikatorius, ir kadangi įkroviklis esamą mutex traktuoja kaip „jau veikiantį“, jo išankstinis sukūrimas yra tinkama trumpalaikė inokuliacija, kol planuojamas taisymas.
Aptikimas trečiajame etape yra sudėtingesnė problema, kurią verta išsiaiškinti. Remiantis viešosios analizės duomenimis, jis iššifruojamas ir susiejamas su atmintimi, o ne įrašomas į diską, todėl failų nuskaitymas ir diskų teismo ekspertizė jo nematys. Lieka stebėti paties įkrovos programos pėdsaką – išsaugojimo įrašus, „mutex“ ir siunčiamas užklausas pristatymo kompiuteriams arba DNS-TXT domenams.
Aplinkose, kurios sprendžia priklausomybes tiek iš privataus, tiek iš viešojo registro, čia nurodytas sušvelninimo veiksmas nepasikeičia: tai apima vidinius pavadinimus, kad viešas pavadinimas jų negalėtų patenkinti, ir šių sričių skiriamąją gebą prisegimas prie vidinio registro. Aukščiau aprašytas versijų išplėtimo elgesys veikia tik tada, kai vardą gali gauti aukštesnė viešoji versija.
Galiausiai, nepublikavimą verta perskaityti atidžiai, o ne laikyti jo pabaiga. Devyniolika vardų per dvidešimt penkias sekundes paliko registrą, o vienas grįžo po dienos nauja paskyra, o pristatymo infrastruktūra liko nepaliesta. Paketų pašalinimas nėra operacijos pašalinimas; pagrindiniai kompiuteriai toliau teikė paslaugas kiekviename etape, kol buvo rašoma. Bet koks priklausomybių medis, kuris nuo liepos 31 d. iki rugpjūčio 1 d. išsprendė vieną iš šių vardų, turėtų būti laikomas turėjusiu galimybę vykdyti pirmąjį etapą, nepriklausomai nuo to, ar vardas vis dar egzistuoja.
Nuorodos
- Kelių variklių „Windows“ krautuvo analizė — aukščiau nurodyto AMSI/ETW pataisų, atspindinčio vykdymo atmintyje ir „mutex“ detalių šaltinis.
- npm scenarijų dokumentacija — gyvavimo ciklo įvykiai, kurių ši kampanija nenaudoja.
- npm diegimo dokumentacija — viršeliai –Ignoruoti scenarijus ir jos taikymo sritis.







