„RuntimeBroker“ npm „Typosquat“ augalai „Crypto Clipper“

„RuntimeBroker“: npm „Typosquat“ įdiegia 40 grandinių „Crypto-Clipper“ kaip kelių operacinių sistemų „sistemos vykdymo laiko pagalbininką“

Lt; DR

2026-05-21 npm leidėjas jaggle išleido devynias versijas (1.0.0 per 1.0.8) apie @jaggle/resizeobserves maždaug per dviejų valandų langą.

Paketas yra teisėto turinio klaidingas pavyzdys. @juggle/resize-observer „polyfill“ – plačiai naudojamas paketas, atsisiunčiamas milijonais kartų per savaitę, tačiau jame nėra jokios realios „ResizeObserver“ versijos.

Vietoj to, pakuotės po diegimo kabliukas įdiegia susietą „Python“ naudingąją apkrovą, užregistruoja išlikimą kaip platformoje atrodantį vykdymo laiko tarpininką ir įdiegia kelių platformų iškarpinės užgrobėją, skirtą kriptovaliutų operacijoms.

Linux atkaklumas pasireiškia kaip python3-dbus-helper, macOS as com.apple.python.runtimeir Windows as PyRuntimeBroker.

Naudingoji apkrova nuolat stebi iškarpinę, ieškodama piniginės adresų daugiau nei 40 blokų grandinių ir tyliai pakeičia nukopijuotus adresus užpuoliko kontroliuojamomis piniginėmis.

Kenkėjiška programa veikia visiškai lokaliai, be jokios išorinės C2 infrastruktūros, todėl išfiltracijos mechanizmu tampa pats iškarpinės pakeitimas.

Pagrindinis IOC yra pats paketo pavadinimas: @jaggle/resizeobserves – atkreipkite dėmesį į praleistą balsę žodyje „jaggle“ ir pridėtą „s“ raidę žodyje „resizeobserves“.

Sunkumas: didelis.

Ataka: kaip ji veikia

npm:@jaggle/resizeobserves atsitiktinai žiūrint neatrodo kaip kenkėjiška programa npm rodinys, jos README.md yra pažodinis README failas iš npm:@juggle/resize-observer — tie patys kodo pavyzdžiai, tos pačios naudojimo instrukcijos, tas pats importuoti { ResizeObserver } iš '@juggle/resize-observer' nuorodos visame tekste. Plagiatas yra toks didelis, kad kiekvienas, žvilgtelėjęs į dokumentaciją, pamanytų, kad skaito teisėtus paketo dokumentus.

Geriausios paketas.json, priešingai, yra retas: ne Saugykla laukas, vienas jusu siuksliu įėjimas nukreiptas į bin/clipboard-guardian.js, Ir po įdiegimo vykdomas scenarijus mazgas npm-install.jsREADME „Pagrindinio naudojimo“ pavyzdžiuose nurodomas „JavaScript“ įgyvendinimas, kurio nėra jokioje tarball byloje. Vienintelis „JavaScript“ pakete yra diegimo scenarijus.

1 etapas – „npm“ po diegimo paleidžia „Python“ naudingąją apkrovą

npm-install.js yra platforminis. Jis suranda pieputis vykdomąjį failą išilgai fiksuoto paieškos kelio (/usr/bin/pip3, /usr/local/bin/pip, grįžtant prie python3 -m pip), įdiegia pridėtą „Python“ paketą iš „tarball“ katalogo ir – „Linux“ sistemoje – įkelia xclip or xsell per apt-get, Pacmanarba dnf jei nė vieno dar nėra:

Naudojimas –break-system-packages yra sąmoningas: šiuolaikinės „Linux“ distribucijos pateikia „Python“ su įjungtu PEP 668 išoriškai valdomos aplinkos žymekliu, kuris pagal numatytuosius nustatymus blokuoja pip diegimą visoje svetainėje. Diegimo scenarijus priverstinai atlieka diegimą.

Scenarijus taip pat palaiko sudo. Kai veikiantis uid yra a rezultatas sudo npm diegimas, scenarijuje rašoma SUDO_USER ir investuoja į getentpasswd rasti tikras vartotojo namų katalogą, tada įrašo savo išsaugojimo failus ten, o ne į / RootIšlikimas yra individualus kiekvienam vartotojui, o ne visai sistemai.

2 etapas – išlikimas skirtingose ​​operacinėse sistemose naudojant vykdymo laiko tarpininkų pavadinimus

Įdiegus „Python“ paketą, scenarijus kiekvienoje operacinėje sistemoje užregistruoja automatinio paleidimo įrašą skirtingu pavadinimu:

  • Linux — sisteminis vartotojo blokas adresu ~/.config/systemd/user/python3-dbus-helper.serviceĮrenginio Aprašymas is Python D-Bus vykdymo laiko pagalbininkasScenarijus taip pat bando jį įjungti per systemctl – vartotojo įjungimas, grįžtant prie rankinės simbolinės nuorodos, esančios numatytasis.target.wants/ kai „systemctl“ nepavyksta. Jei vykdoma su sudo, scenarijus persijungia į sudo -u systemctl – vartotojas, Su XDG_RUNTIME_DIR nustatyti taip, kad veiktų vartotojo magistralės iškvietimas.
  • macOS — „LaunchAgent“ plist'as adresu ~/Library/LaunchAgents/com.apple.python.runtime.plist su RunAtLoad=true bei KeepAlive=true, tada įkelta per launchctl įkėlimas.
  • Windows — suplanuota užduotis pavadinimu „PyRuntimeBroker“, suaktyvinama prisijungus prie prisijungimo, kurios vykdymo laiko apribojimas yra nulis (t. y. nėra skirtojo laiko apribojimo), užregistruota per „PowerShell“.

Visi trys vardai iš pirmo žvilgsnio atrodo patikimi. python3-dbus-helper laikosi teisėtos „Python-D-Bus“ integracijos „Linux“ darbalaukiuose pavadinimų suteikimo konvencijos. com.apple.python.runtime imituoja „Apple“ atvirkštinio DNS žymėjimą savo paslaugoms. PyRuntimeBroker atkartoja „Windows“ „RuntimeBroker.exe“ – tikra, pasirašyta „Microsoft“ paslauga, kuri tarpininkauja leidimų užklausoms UWP programoms. Šiame kontekste nė viena iš jų nėra tikra „Apple“ / „Microsoft“ / „Python“ paslauga, tačiau gynėjas atlieka greitą vizualinę analizę. systemctl – vartotojų sąrašo vienetai or Gauti suplanuotą užduotį vargu ar sudrebės.

3 etapas – iškarpinės užgrobėjas

Python naudingoji apkrova, įdiegta adresu clipboard_guardian/guardian.py, vykdo begalinį ciklą, kas 400 milisekundžių apklausdamas sistemos iškarpinę. Kiekvieno tikso metu jis ištraukia dabartinį iškarpinės turinį per pyperclip.paste() ir vykdo juos pagal daugiau nei keturiasdešimties iš anksto sukompiliuotų reguliariųjų išraiškų sąrašą, apimantį piniginės adresų formatus, skirtus Ethereum, Bitcoin, Monero, Solana, TRON, TON, Ripple, Litecoin, Dogecoin, Polkadot, NEAR, Cosmos, Algorand, Stellar, Cardano, Bitcoin Cash, Dash, Zcash, Aptos, Sui, Tezos, MultiversX, Harmony, Terra, Injective, Osmosis, Kava, Celestia, Nano, Filecoin, Ronin, Ergo, DigiByte, Hedera, BNB Smart Chain ir keliems kitiems, kurie numatytojoje konfigūracijoje yra tušti, bet yra įtraukti į sąrašą (Sei, IOTA, Kaspa, Flow, Nervos, Decred, Ravencoin).

Kai randamas atitikmuo, scenarijus nuskaito užpuoliko adresą tai grandinei iš ~/.config/clipboard-guardian/config.json (arba jo platformos atitikmenis) ir perrašo iškarpinę pakeistu tekstu:

Nėra tinklo švyturio. Įrenginys neskambina namo, neregistruoja užkrėstų kompiuterių ir nieko neišfiltruoja. Išfiltravimas yra pats pakeitimas: kai vartotojas nukopijuoja gavėjo adresą iš savo piniginės sąsajos ir įklijuoja jį į siuntimo dialogo langą, įklijuotas adresas priklauso operatoriui. Lėšos prarandamos duomenų juostoje, vartotojui skaidriai.

Kas čia naujo

Palyginti su bendriniu kriptovaliutų šablonu, išsiskiria kelios detalės:

1. npm → Python kryžminimas. Dauguma kriptovaliutų, kuriuos matome npm, yra grynas „JavaScript“, dažnai užmaskuotas _0x masyvo sukimas arba įvertinimas (atob(…)) stekai. Šiame pavyzdyje „npm tarball“ naudojamas tik kaip „Python“ paketo pristatymo apvalkalas – švarus „Python“ – ir leidžiama „pip“ tvarkyti priklausomybių diegimą (Pyperclip, psutil, neprivaloma setproctitle) deklaruota sujungtame rinkinyje pyproject.tomlNėra jokio „JavaScript“ klaidinimo, kurį reikėtų įveikti. Pats „Clipper“ yra paprastas, lengvai skaitomas „Python“.

2. Trijų OS išlikimo žymės pasirinktos dėl patikimumo. Daugelis skirtingų platformų diegimo programų registruoja pastovumą bendriniais pavadinimais (atnaujinimo paslauga, helper.plist). Šiame pavyzdyje pasistengta parinkti etiketes, kurios kiekvienoje OS būtų panašios į platformos gimtąsias vykdymo laiko tarpininkavimo programas. Pavadinimas yra vienintelis bandymas slaptai veikti – nėra rootkit, vartotojo srities slėpimo, kelio užmaskavimo. Lažinuosi, kad gynėjai retai atlieka auditą. ~/.config/systemd/user/ ir kad paslauga, pavadinta python3-dbus-helper neišsiskirs atsitiktinėje apžvalgoje.

3. Proceso pavadinimo maskavimas yra realus, bet antianalizė snaudžia. Python naudingoji apkrova apibrėžia a _maskavimo_procesas() funkcija, kuri nustato proceso pavadinimą per setproctitle (Linux / macOS) arba Nustatyti konsolės pavadinimą (Windows) – ir pagrindinis () tai vadina. Taigi ps į parodys python3-dbus-helper VIETOJ python3 …/guardian.pyTačiau tas pats modulis apibrėžia veikia_monitorius() funkcija, kurioje išvardijami žinomi procesų stebėjimo įrankiai (htop, viršus, Užduočių tvarkyklė, Veiklos monitorius, Procesų įsilaužėlis, Išteklių monitorius, GNOME / KDE / Xfce / MATE sistemos monitoriai ir kt.) — ir pagrindinis () niekada to nekviečia. Pakeitimo ciklas veikia besąlygiškai, nepriklausomai nuo to, ar vartotojas yra atidaręs proceso monitorių. Funkcija yra negyvas kodas pateiktoje versijoje. Labiausiai tikėtina, kad tai ankstesnės iteracijos likutis arba dar nesukurtos funkcijos pastoliai. Bet kuriuo atveju, publikuotos naudingosios apkrovos antianalizės paviršius yra vienas proceso pavadinimo pervadinimas, o ne aktyvus monitoriaus apėjimas.

4. Sujungtos konfigūracijos sujungimo elgsena. npm-install.js įrašo numatytąjį piniginių sąrašą į ~/.config/clipboard-guardian/config.json ir, jei konfigūracijos failas jau yra, sujungia visus raktus, kurių esama reikšmė yra tuščia. Tai reiškia, kad vartotojas, kuris anksčiau buvo užkrėstas ir iš dalies išvalė konfigūraciją, tarkime, ištuštinęs ethereum reikšmė – ji bus iš naujo užpildyta kiekvieno vėlesnio kenkėjiško paketo diegimo metu. Jokiame kodo kelyje išsaugojimo failas nevalomas.

Data / Laikas (UTC) renginys
2026-05-21 18:50:32 @jaggle/resizeobserves@1.0.0 paskelbta.
2026-05-21 19:55:55 1.0.1 paskelbta – pirmoji versija pažymėta išorinio nuskaitymo metu.
2026-05-21 19:58:10 1.0.2 paskelbta.
2026-05-21 20:05:03 1.0.3 paskelbta.
2026-05-21 20:09:24 1.0.4 paskelbta.
2026-05-21 20:13:48 1.0.5 paskelbta.
2026-05-21 20:41:52 1.0.6 paskelbta.
2026-05-21 20:43:56 1.0.7 paskelbtas – prideda try/catch apvalkalas aplink piniginės konfigūracijos rašymo veiksmą npm-install.js.
2026-05-21 20:46:15 1.0.8 paskelbta – diegimo programos pavadinimas pakeistas npm-install.jsnpm-install.cjs (baitų atžvilgiu identiškas turinys).
2026-05-22 Paskelbti nuosprendžiai ir Tarptautiniai teisės aktai (TOK). Versijos vis dar yra registre paskelbimo metu (tebevykdoma).

Devyni variantai per vieną valandą ir penkiasdešimt šešias minutes yra greitas rezultatas net ir pritūpus su smūgį į pritūpimus. Modelis atitinka a publikavimo ir įrašymo kampanija — užtvindyti registrą vienu serveriu, leisti aptikimui tęsti savo darbą ir pereiti prie naujo serverio, kai pašalinama viena versija. Matomi pokyčiai visame registro vykdyme yra kosmetiniai: 1.0.1 versijoje pridėta aiški informacija /usr/bin/pip3stiliaus keliai į pip paieškos sąrašą (sudo-compatibility), 1.0.7 versijoje „wallet-config“ rašymas buvo įtrauktas į try/catch, o 1.0.8 versijoje diegimo programa buvo pervadinta iš . Js į .cjs išlaikant jo turinį baitiškai identišką. .cjs pervadinti takelius su npm įspėjimais apie dviprasmišką modulio skiriamąją gebą paketuose be aiškaus „Tipas“ lauke ir gali būti bandymas nuslopinti diegimo metu kylantį triukšmą, kuris galėtų atkreipti dėmesį. „Python“ naudingoji apkrova – vienintelė dalis, kuri iš tikrųjų vagia – visose devyniose versijose nepasikeitė.

Kompromiso rodikliai

Paketai

ekosistema Paketas versijos Statusas
npm @jaggle/resizeobserves 1.0.0 per 1.0.8 Paskelbimo metu paskelbta; pateiktas pašalinimo prašymas.

Failai ir maišos

Kelias Pastaba
clipboard_guardian/guardian.py
(md5 f7935c2c82bc881288611ab6cd634f17)
Identiškas visose devyniose publikuotose versijose (1.0.0 per 1.0.8). Kirpimo mašinos naudingoji apkrova.
npm-install.js (1.0.0 – 1.0.7)
npm-install.cjs (1.0.8)
Nuolatinis diegimo įrenginys; tas pats veikimo būdas nuo pradžios iki galo. 1.0.7's .js bei 1.0.8's .cjs yra baitų atžvilgiu identiški.
~/.config/clipboard-guardian/config.json „Linux“ išsaugojimo konfigūracijos ir piniginės paketas.
~/Library/Application Support/clipboard-guardian/config.json „macOS“ išsaugojimo konfigūracijos ir piniginės paketas.
%APPDATA%\clipboard-guardian\config.json „Windows“ išsaugojimo konfigūracijos ir piniginės paketas.
~/.config/systemd/user/python3-dbus-helper.service „Linux“ automatinio paleidimo išlikimas.
~/Library/LaunchAgents/com.apple.python.runtime.plist „macOS LaunchAgent“ išlikimas.
~/Library/Logs/com.apple.python.runtime.log „macOS stdout“ / „stderr“ žurnalas agentui.
Scheduled Task PyRuntimeBroker „Windows“ automatinio paleidimo užduotis (AtLogOn, be skirtojo laiko).

Elgesio rodikliai

signalas Aprašymas
pip install --break-system-packages iš npm po įdiegimo Priverčia diegti „Python“ visoje svetainėje, apeinant PEP 668 apsaugą.
apt-get install -y xclip (arba pacman/dnf) Įdiegia iškarpinės įrankius „Linux“ sistemoje paketo diegimo metu.
python3-dbus-helper.service systemd vartotojo vienetas Patvarumas užregistruotas patikimai atrodančiu vykdymo laiko pagalbininko pavadinimu.
com.apple.python.runtime LaunchAgent Nuolatinės etiketės neegzistavimas už teisėtų „Apple“ sistemos kelių ribų.
PyRuntimeBroker Suplanuota užduotis Netikras „Windows“ vykdymo laiko brokeris be teisėto diegimo šaltinio.
Python procesas pavadinimu python3-dbus-helper importuoti pyperclip bei psutil Rodomo proceso pavadinimo ir importuotų bibliotekų veikimo neatitikimas.
Iškarpinė pasikeičia ~0.4 s po piniginės adreso nukopijavimo Kriptovaliutos adreso pakeitimo parašo elgsena.

Puolėjo piniginės rinkinys (gynėjų medžioklės sąrašas)

Piniginės sąrašas pateikiamas užkoduotas npm-install.js bei clipboard_guardian/guardian.pyApsaugos programos gali naudoti šį sąrašą ir kaip blokavimo sąrašą (bet kokį pervedimą į šiuos adresus iš įmonių piniginių laikyti įtartinu), ir kaip paieškos raktą (bet kurios iš šių eilučių buvimą neautentifikuotame konfigūracijos faile, kūrimo artefakte ar kūrėjo kompiuteryje laikyti užkrato indikatoriumi).

„Attacker“ piniginės paketas

grandinė Adresas
Ethereum / BSC 0x450c0E58Fc2ba03632d3F5780ad8C966648B6F18
Roninas (EVM) ronin:450c0E58Fc2ba03632d3F5780ad8C966648B6F18
Bitcoin bc1qs2mpls4p0f7fng073gy2rcdgjpf7la4eugpt6y
Bitcoin Cash bitcoincash:qqmvyxxklzp7l3eslxavhc8phl6hprdf25lwc29nlt
Litecoin ltc1qnefc8x59a9cwtqnflt8hmqvezqw4hc7lt3fkqe
Dogecoin DNEJmYRZtzyK44tZea4S7wV3otTyRk48Fy
brūkšnys XtJ7E6mnhPK93Vib29PGQrTmQjhTTqFwbS
Zcash t1d4hcEnBjdh9X6Wb6R2dxqjnxddJ6ocP8M
DigiByte DPmH2dhiGK3hk3A69tZUMz6tHzGFHBzSrH
Monero 42zhAidVhP7QETk83JAspS59ASALSHFio44vmu6MdDCz15cSqtqsG4QVyzY8vTrjGrTEA6zMbWW6Yft1Ynz1xLfCN5FVbXf
J. Solana DWBAmQLi9gP6mk7UfJfQGYTV1UPK32WekLTqg83q1mc5
TRON TVgEgMemmJABYYnbNr1Wi8bSgADEkdEBt2
TON UQDTSkvwmptU9eG988KgxS3WjnYAZlXgfpJxnz4mhWZAvULr
Ripple r9tj3cMCiqRijNYqNVYNuwKykkQfS8FE4H
Polkadot 1JSkYqXQE4d28HdcmTPhbgCrdiPFTfSHxD67tam16p53oBG
NEAR 5d6aec44551529e8cd9ebd3aaa84b3832fc3c7463596b2b6e72635b80096a364
Kosmosas cosmos1pzfl3kv5g8g0ernj86rwpar08u2zl9suthx28e
osmosas osmo1pzfl3kv5g8g0ernj86rwpar08u2zl9surv463t
Celestija celestia1pzfl3kv5g8g0ernj86rwpar08u2zl9su6ah6a5
Injektyvus inj1g5xquk8u9wsrvvkn74uq4kxfvejgkmccn578gh
Kava kava1kjfvgcz4q0y9yae2f3pa33vhj2estxxj3sqqux
Harmonija one19hn0n7dzkhtl9ta9ekv5592s85jwstpka76t3a
Žemė terra1h0dwu8z405jagdlr0fgr9jllac2sxajzlgme5x
Algorandas XSAMN3FTB5SUHUQFENBDDRXIMOPNFVLKAWA3RNOU54DWROMDZ6SR7DZ2PI
žvaigždžių GACNZSV4EQO65NZZUOBS3TMJM7GFTSRNKQBVJOX5P2G7U7SEBQ2ZUDJE
Cardano addr1qyj050vla4cglmyrgm4vzf3dxtn0gynpks4t7vp7s3lg49e9wt0s94hcztzdgecxcz5hu9uk56q60yth6d66w026s2kq3ma56f
MultiverseX erd1slvlgqsmwzk0c8xtksm4eq5vdfnc26slpzqsyxhz456zvme5rpasue6ge0
Aptos 0x580ecda1ebd6ca5a46be2097568d013308bd54ef1d147acb880b59f7709f280e
Sui 0xf7e8a9a970fa65c058745c4b2cf2a856cc0283863e4ed1e142648f26097b0c78
Nano nano_393n56a5pfz8zg3nkzf7mytfgagzhu5mn9i3xiqg54weq8n1u8jgezxas7dn
Filecoin f1fypyww3xubopfnv7q6yh5l4bko44wmfktf3ckui
Tezos tz1RccjnorHk61bt73ArLXcdgFjEj6T1ochk
Ergo 9g1pNQGnFg7Hk1d9Z66bgHMkguGU7R41btypAnbG1NF5FJoNdBA
Hedera 0.0.10488092

Grandinės su reguliariųjų išraiškų aprėptimi, bet tuščiais piniginės lizdais numatytojoje konfigūracijoje – „Sei“, „IOTA“, „Kaspa“, „Flow“, „Nervos“, „Decred“, „Ravencoin“, „Beacon-Chain BNB“ – šioje versijoje nėra aktyviai pakeičiamos, bet yra aptinkamos. Laikykite jas stebėjimo, o ne pakeitimo sritimi.

Priskyrimas ir motyvacija

Kampanija siūlo menką priskyrimo paviršių. Nepavyko patvirtinti operatoriaus tapatybės. Ką galime užfiksuoti:

  • Leidėjo metaduomenys. NPM paskyra žvangėti nurodo savo el. pašto adresą kaip olgascarlet@deltajohnsons.comDomenas deltajohnsons.com nerodo įmonės tapatybės, kurią galėtume patvirtinti. NPM paskyroje nėra el. pašto patvirtinimo ir nėra SCM patvirtinimas. Nėra susijusio viešojo „GitHub“ buvimo.
  • Saugyklos laukas. Geriausios paketas.json neneša Saugykla laukas. Teisėtas npm:@juggle/resize-observer nurodo tikrą „GitHub“ saugyklą su tūkstančiais žvaigždučių ir aktyvių problemų. Saugyklos nuorodos nebuvimas yra greičiausias vizualinis požymis „npm“ vartotojo sąsajoje.
  • README plagiatas. Paketas README yra teisėtas. @juggle/resize-observer README baitas po baito, įskaitant importuoti pavyzdžiai, kurie nurodo @juggle/resize-observer pats (ne publikavimo paketas). Operatorius net nesivargino perrašyti importuojamų failų – įprastas signalas, kad „readme“ buvo panaikintas, o ne pritaikytas.
  • Nėra infrastruktūros, kuria būtų galima remtis. Nėra C2 galinio taško, DNS paieškos, IP adreso. Kenkėjiškas elgesys yra visiškai įkapsuliuotas vietiniame karpytoje ir užkoduotame piniginės pakete. Dėl to domeno arba ASN pagrindu veikiantis keitimas negalimas. Apsauginiai serveriai, keičiantys pinigines skirtingose ​​kampanijose, turėtų palyginti pinigines su bet kokiu ankstesniu karpytoju, kurį jie turi; piniginės pakartotinis naudojimas skirtinguose paketuose yra lengviausiai valdomas kampanijų ryšys.
  • Pavadinimo pasirinkimas. @jaggle/resizeobserves yra vienu simboliu nuo @žongliruoti ir viena nuokrypa nuo gerai žinomo dydžio keitimo stebėtojasBendras redagavimo atstumas yra du glifai. Tai sąmoningas vizualinis susidūrimas, o ne bendras pritūpimas.

Motyvacija, pagrįsta naudingosios apkrovos elgsena: grynas pajamų gavimas per oportunistinį iškarpinės pakeitimą. Nėra jokio kredencialų rinkimo, jokio pagrindinio kompiuterio pirštų atspaudų spausdinimo, jokio aplinkos kintamųjų skaitymo. Operatoriui nerūpi, kas yra auka – jam rūpi, kad kitas aukos pervedimas būtų nukreiptas į vieną iš išvardytų adresų. Keturiasdešimties grandinių aprėptis yra loterijos modelis veikiant: užmeskite plačiai, tikėkitės, kad vienas didelės vertės pasta pateks kartą per N įdiegimų.

Operatorius, regis, nesirūpina pašalinimu. Devynių versijų paskelbimas per dvi valandas pagal tą pačią taikymo sritį yra tarsi paskelbimo ir įrašymo operacija: maksimaliai padidinkite registro pėdsaką, kol nepasiekia pašalinimo delsos, tada tęskite. Mes nepastebėjome... @jaggle rašymo metu pakartotinai publikuojame pagal naują taikymo sritį, tačiau tikimės panašių taikymo sričių (@jaggie, @juggle-, @joggle) pasirodys artimiausiomis dienomis, jei operatorius vis dar aktyvus.

Poveikis, tendencijos ir ką turėtų daryti gynėjai

 poveikis

Iš dabartinio duomenų rinkinio neįmanoma kiekybiškai įvertinti poveikio realiais pinigais. Apkarpymo programa nerašo jokių telemetrijos duomenų, o piniginės dar nebuvo stebimos gaunant pakeistus pervedimus analizės pabaigos datai (tolesnis išvardytų grandinių patikrinimas yra mūsų sąraše). Teisėtas npm:@juggle/resize-observer Vidutinis savaitinis atsisiuntimų skaičius siekia septynženklį skaičių – tai didelio srauto typosquat taikinys – o kenkėjiškas paketas atskleidimo metu veikė mažiau nei 24 valandas, todėl pažeidžiamų programų skaičius sumažėja, bet jos nesumažėja.

Vertas stebėti sprogimo spindulį, kuris nėra tiesiogiai atsisiunčiamas @jaggle/resizeobserves — jie greičiausiai maži. Tai **tranzitiniai diegimai**: kūrėjas prideda paketą prie smėlio dėžės projekto, paleidžia npm įdiegti, ir tada pamiršta, kad diegimo kabliukas kada nors buvo paleistas. Kiekviena mašina, kuri apdorojo poįdiegimą, dabar automatiškai paleidžiant turi vartotojo iškarpinės užgrobėją, nepriklausomai nuo to, ar projektas vis dar yra diske. Paketo katalogo pašalinimas iš mazgo_moduliai **nepašalina** atkaklumo.

Atsirandantys modeliai

Ši kampanija iliustruoja dvi tendencijas.

npm kaip Python naudingosios apkrovos pristatymo apvalkalas. „npm tarball“ yra 4 eilučių diegimo failas; tikrasis „stealer“ yra „Python“, kurį visoje sistemoje įdiegia pieputis iš sugrupuoto katalogo. Tai nėra naujiena – jau esame matę, kaip „npm“ paketai atsisako „Python“ – tačiau tai tampa pastebimai dažnesne forma kriptovaliutų kirpimo kampanijose. Operatoriaus pranašumas yra dvejopas: „Python“ iškarpų bibliotekos (Pyperclip pirmieji iš jų) yra švaresni ir labiau pritaikyti įvairioms platformoms nei „JavaScript“ atitikmenys, ir dauguma automatizuotų npm skaitytuvų labai vertina „JavaScript“ failus ir „Python“ .py lengvai suriša. Kaina yra ta, kad įrengimo vieta yra daug triukšmingesnė – nauja pip diegimas sunku paslėpti kūrėjo kompiuteryje, kuris paprastai to nedaro pip diegimas metu npm įdiegti.

Platformoms būdingi pavadinimai kaip vienintelė paslėpta priemonė. Keletas pastaruoju metu populiarių programišių ir mažos apkrovos programų vagysčių visiškai atsisakė kodo lygio maskavimo ir pasirinko teisėtai atrodančias pastovumo etiketes. python3-dbus-helper, com.apple.python.runtimeir PyRuntimeBroker yra vadovėliniai pavyzdžiai – vardai, kuriuos gynėjo akis praleis keturiasdešimties vartotojų paslaugų sąraše. Tai pigi ir patvari slapto veikimo forma: pašalinimas atliekamas kiekvienam paketui, tačiau išsaugojimo failai išlieka ir pašalinus, o paslauga, pavadinta realiai atrodančio platformos komponento vardu, nebus išvalyta niekuo, išskyrus aiškų auditą.

Ką turėtų daryti gynėjai

  • Auditas ~/.config/systemd/user/, ~/Library/LaunchAgents/ ir Get-ScheduledTask produkcija kūrėjų kompiuteriuose, skirtuose IOC išvardytiems įrašams. Pašalinus „npm“ paketą, jie lieka; juos reikia pašalinti rankiniu būdu.
  • Blokuoti pervedimus į nurodytus piniginės adresus įmonių iždo ir DeFi piniginių ribose, kur galimas adresų leidžiamųjų sąrašų sudarymas.
  • Ieškokite ~/.config/clipboard-guardian/config.json (ir platformos atitikmenis) visame kūrėjo kompiuterių parke. Failo buvimas yra didelio patikimumo užkrėtimas, nepriklausomai nuo to, kuri paketo versija jį pateikė.
  • Ieškokite clipboard_guardian/guardian.py faile node_modules/ „Build-Cache“ momentinėse kopijose, kurios gali būti sukurtos iki pašalinimo. Failo md5 yra stabilus visose peržiūrėtose versijose.
  • „Lockfile-pin“ @juggle/resize-observer (teisėtas paketas), kad būsimuose diegimuose nebūtų galima rasti nieko kito dėl vieno simbolio įvedimo klaidos, ypač darbo eigose be užrakinimo failų, pvz., NPX.
  • Apdorokite bet kokį npm po diegimo iškviečiant pip diegimą kaip labai sunkus statybojepipeline politika. Nėra jokios pagrįstos priežasties, kodėl „npm“ paketui diegimo metu reikėtų naudoti „pip“ – „Python“ įrankiai platina „Python“ įrankius.
  • Ieškoti procesams pavadinimu „python3-dbus-helper“, kurie importuoja „pyperclip“, palyginamų stebėjimo duomenų, naudojant „process_iter()-comparable“ – užmaskavimo neatitikimas (D-Bus pagalbininkas, laikantis iškarpinės biblioteką) yra aiškiausias mūsų turimas elgesio rodiklis.
  • Keisti iš užkrėstų kompiuterių įklijuotus piniginės adresus. Iškarpinės užgrobėjas pažeidžia kelią tarp piniginės vartotojo sąsajos ir įklijavimo paskirties vietos; užkrėtimo metu nukopijuoti adresai gali būti nepastebimai pakeisti. Viskas, kas išsiųsta užkrėtimo laikotarpiu, turėtų būti laikoma potencialiai netinkamai nukreipta.

Išvada: išsaugojimas išlieka ilgiau nei pašalinimas. Registras galiausiai pašalins @jaggle/resizeobserves visose devyniose versijose; „systemd“ blokas, „LaunchAgent“ ir „Scheduled Task“ patys nepašalinami.

Nuorodos

sca-tools-software-composition-analyses-tools
Prioritetizuoti, pašalinti ir apsaugoti savo programinės įrangos rizikas
Gaukite nemokamą paskyrą.
Nebūtina kreditinės kortelės.

Apsaugokite savo programinės įrangos kūrimą ir tiekimą

su „Xygeni“ produktų rinkiniu