TL; DR
2026-05-21 avaldas npm-i väljaandja jaggle avaldas üheksa versiooni (1.0.0 läbi 1.0.8) of @jaggle/resizeobserves umbes kahetunnise akna jooksul.
Pakett on õigustatud sisust ebatäpne. @juggle/resize-observer polyfill – laialdaselt kasutatav pakett, millel on miljoneid allalaadimisi iganädalaselt –, kuid millel puudub tegelik ResizeObserveri implementatsioon.
Selle asemel paki järelpaigalduskonks paigaldab komplekteeritud Pythoni kasuliku koormuse, registreerib püsivuse platvormipõhise välimusega käitusaja vahendajana ja juurutab platvormideülese lõikelaua kaaperdaja, mis on suunatud krüptovaluuta tehingutele.
Linux püsivus avaldub kui python3-dbus-helper, macOS as com.apple.python.runtimeja Windows as PyRuntimeBroker.
Kasulik koormus jälgib pidevalt lõikelaual rahakoti aadresse enam kui 40 plokiahelat ja asendab kopeeritud aadressid vaikselt ründaja kontrollitud rahakottidega.
Pahavara toimib täielikult lokaalselt, ilma väljamineva C2 infrastruktuurita, muutes lõikelaua asendamise enda väljafiltreerimise mehhanismiks.
Peamine IOC on paketi nimi ise: @jaggle/resizeobserves — pange tähele väljalangenud täishäälikut sõnas „jaggle“ ja lisatud „s“-tähte sõnas „resizeobserves“.
Raskusaste: kõrge.
Rünnak: kuidas see toimib
npm:@jaggle/resizeobserves ei näe juhuslikul peal välja nagu pahavara npm-vaade. selle README.md on sõnasõnaline README fail npm:@juggle/resize-observer — samad koodinäidised, samad kasutusjuhised, sama impordi { ResizeObserver } kaustast '@juggle/resize-observer' viited kõikjal. Plagiaat on nii täielik, et igaüks, kes dokumentatsioonile pilgu heidab, eeldaks, et loeb seadusliku paketi dokumente.
. pakett.jsonseevastu on hõre: ei Hoidla väli, üksik konteiner sisenemine osutab aadressile bin/lõikelaua-guardian.jsJa pärast installimist skript, mis töötab sõlm npm-install.jsREADME-faili „Põhikasutuse” näited viitavad JavaScripti implementatsioonile, mida tarballis ei eksisteeri. Ainus JavaScript paketis on installiskript.
1. etapp — npm postinstall käivitab Pythoni kasuliku koormuse
npm-install.js on platvormiteadlik. See leiab pip käivitatav fail mööda fikseeritud otsinguteed (/usr/bin/pip3, /usr/local/bin/pip, langedes tagasi python3 -m pip), installib tarballi kataloogist kaasasoleva Pythoni paketi ja — Linuxis — tõmbab sisse xclip or xsell kaudu apt-get, pacmanvõi DNF kui kumbagi pole juba olemas:
Kasutamist –break-system-paketid on tahtlik: tänapäevased Linuxi distributsioonid tarnivad Pythoni nii, et PEP 668 väliselt hallatava keskkonna marker on lubatud, mis blokeerib vaikimisi saidiülesed pip-installid. Installiskript sunnib installi läbi.
Skript on ka sudo-teadlik. Kui töötav uid on tulemus a-st sudo npm install, skript loeb SUDO_USER ja läheb välja getent parool et leida reaalne kasutaja kodukataloogi ja kirjutab seejärel oma püsivusfailid sinna, mitte .dll-i / RootPüsivus on kasutajapõhine, mitte süsteemiülene.
2. etapp — operatsioonisüsteemideülene püsivus käitusaja vahendajate nimede all
Pärast Pythoni paketi installimist registreerib skript igas operatsioonisüsteemis automaatse käivituse kirje erineva nime all:
- Linux — systemd kasutajaüksus aadressil ~/.config/systemd/user/python3-dbus-helper.serviceSeadme Kirjeldus is Pythoni D-Busi käitusaja abimeesSkript proovib seda ka läbi lubada. systemctl –kasutaja lubamine, mis langeb tagasi käsitsi kasutatavale sümbollingile all vaikimisi.sihtmärk.soovid/ kui systemctl ebaõnnestub. Kui skript töötab sudo all, lülitub see ümber sudo -u systemctl –kasutajaKoos XDG_RUNTIME_DIR seatud nii, et kasutajabussi kõne töötaks.
- macOS — LaunchAgenti plist aadressil ~/Library/LaunchAgents/com.apple.python.runtime.plist koos RunAtLoad=true ja KeepAlive=true, seejärel laaditakse läbi launchctl laadimine.
- Windows — ajastatud ülesanne nimega PyRuntimeBroker, mis käivitatakse sisselogimisel AtLogOn, mille täitmisaja piirang on null (st ajalõpu pole) ja mis on registreeritud PowerShelli kaudu.
Kõik kolm nime on esmapilgul usaldusväärsed. python3-dbus-helper järgib Linuxi töölaudadel õigustatud Python-D-Bus integratsiooni nimetamiskonventsiooni. com.apple.python.runtime jäljendab Apple'i pöörd-DNS-märgistamist oma teenuste jaoks. PyRuntimeBroker kajastab Windowsi oma RuntimeBroker.exe — päris, allkirjastatud Microsofti teenus, mis vahendab UWP-rakenduste loataotlusi. Ükski neist pole selles kontekstis päris Apple'i/Microsofti/Pythoni teenus, vaid kaitsja, kes teeb kiire visuaalse skannimise systemctl –kasutajate loendiüksused or Get-ScheduledTask on ebatõenäoline, et võpatab.
3. etapp – lõikelaua kaaperdaja
Pythoni kasulik koormus, mis on installitud aadressile clipboard_guardian/guardian.py, käivitab lõpmatu tsükli, küsitledes süsteemi lõikelauda iga 400 millisekundi järel. Igal sekundil tõmbab see lõikelaua praeguse sisu välja pyperclip.paste() ja käivitab need enam kui neljakümne eelnevalt kompileeritud regulaaravaldise nimekirja suhtes, mis hõlmavad rahakoti aadressivorminguid Ethereumi, Bitcoini, Monero, Solana, TRONi, TONi, Ripple'i, Litecoini, Dogecoini, Polkadoti, NEARi, Cosmose, Algorandi, Stellari, Cardano, Bitcoin Cashi, Dashi, Zcashi, Aptose, Sui, Tezose, MultiversXi, Harmony, Terra, Injective'i, Osmosise, Kava, Celestia, Nano, Filecoini, Ronini, Ergo, DigiByte'i, Hedera, BNB Smart Chaini ja mitme teise jaoks, mis on vaikimisi konfiguratsioonis tühjad, kuid mille varad on lisatud.
Kui vaste leiab, loeb skript ründaja aadressi selle ahela jaoks ~/.config/clipboard-guardian/config.json (või selle platvormi ekvivalendid) ja kirjutab lõikelaua asendatud tekstiga üle:
Võrgumajakat pole. Lõikeseade ei helista koju, ei registreeri nakatunud masinaid ega filtreeri midagi välja. Väljafiltreerimine on asendamine ise: kui kasutaja kopeerib saaja aadressi oma rahakoti kasutajaliidesest ja kleebib selle saatmisdialoogi, kuulub kleebitud aadress operaatorile. Vahendid lähevad riba sees kaotsi, kasutaja jaoks läbipaistvalt.
Mis on siin uut?
Võrreldes üldise krüptoklipperi malliga paistavad silma mõned detailid:
1. npm → Pythoni ristmik. Enamik npm-is nähtavaid krüptokäärijaid on puhas JavaScript, mida sageli segatakse _0x massiivi pöörlemine või eval(atob(…)) pinu. See näidis kasutab npm tarballi vaid Pythoni paketi – puhta Pythoni – tarneümbrisena ja laseb pipil hallata sõltuvuste installimist (Pyperclip, psutil, valikuline setproctitle) deklareeritud komplekteeritud kujul pyproject.tomlJavaScripti hägustamist pole vaja ületada. Lõikevahend ise on lihtne ja loetav Python.
2. Usaldusväärsuse tõttu valitud Tri-OS püsivuse sildid. Paljud platvormideülesed installijad registreerivad püsivuse üldnimede all (uuendaja.teenus, abistaja.plist). See näidis võtab vaevaks valida sildid, mis meenutavad iga operatsioonisüsteemi platvormil põhinevaid käitusaja vahendajaid. Nimetamine on ainus katse varjata – puudub juurkomplekt, kasutajamaa peitmine ja tee hägustamine. Võimalik, et kaitsjad auditeerivad harva. ~/.config/systemd/kasutaja/ ja et teenus nimega python3-dbus-helper ei paista juhuslikus arvustuses silma.
3. Protsessi pealkirja varjamine on reaalne, kuid analüüsivastasus on uinunud. Pythoni kasulik koormus defineerib a _disguise_process() funktsioon, mis määrab protsessi pealkirja setproctitle (Linux/macOS) või Määra konsooli pealkiriW (Windows) — ja peamine () nimetab seda. Nii et ps to näitab python3-dbus-helper asemel python3 …/guardian.pySiiski defineerib sama moodul is_monitor_running() funktsioon, mis loetleb teadaolevaid protsesside jälgimise tööriistu (htop, btop, Tegumihaldur, Tegevuste monitor, Protsessihäkker, Ressursimonitor, GNOME / KDE / Xfce / MATE süsteemimonitorid jne) — ja peamine () ei kutsu seda kunagi välja. Asendustsükkel töötab tingimusteta, olenemata sellest, kas kasutajal on protsessimonitor avatud või mitte. Funktsioon on tarnitud versioonis surnud kood. See on tõenäoliselt varasema iteratsiooni jääk või telling funktsioonile, mida pole veel ühendatud. Mõlemal juhul on avaldatud kasuliku koormuse analüüsivastane pind üks protsessi pealkirja ümbernimetamine, mitte aktiivse monitori vältimine.
4. Komplekteeritud konfiguratsioonide ühendamise käitumine. npm-install.js kirjutab vaikimisi rahakottide nimekirja ~/.config/clipboard-guardian/config.json ja kui konfiguratsioonifail on juba olemas, liidetakse kõik võtmed, mille olemasolev väärtus on tühi. See tähendab kasutajat, kes on varem nakatunud ja konfiguratsiooni osaliselt puhastanud – näiteks tühjendades faili ethereum väärtus — see täidetakse iga järgneva pahatahtliku paketi installimisel uuesti. Püsivusfaili ei puhastata üheski kooditees.
| Kuupäev/kellaaeg (UTC) | sündmus |
|---|---|
2026-05-21 18:50:32 | @jaggle/resizeobserves@1.0.0 avaldatud. |
2026-05-21 19:55:55 | 1.0.1 avaldatud — esimene versioon märgistatud välise skannimise teel. |
2026-05-21 19:58:10 | 1.0.2 avaldatud. |
2026-05-21 20:05:03 | 1.0.3 avaldatud. |
2026-05-21 20:09:24 | 1.0.4 avaldatud. |
2026-05-21 20:13:48 | 1.0.5 avaldatud. |
2026-05-21 20:41:52 | 1.0.6 avaldatud. |
2026-05-21 20:43:56 | 1.0.7 avaldatud — lisab try/catch ümbris wallet-config kirjutamise etapi ümber npm-install.js. |
2026-05-21 20:46:15 | 1.0.8 avaldatud — paigaldaja ümbernimetatud npm-install.js → npm-install.cjs (baitidentne sisu). |
2026-05-22 | Kohtuotsused ja rahvusvahelised kohtulahendid on avaldatud. Versioonid on avaldamise ajal registris endiselt alles (töötab pooleli). |
Üheksa versiooni ühe tunni ja viiekümne kuue minutiga on kiire isegi tüposkvaki jaoks. Muster on kooskõlas a-ga avalda-ja-kirjuta kampaania — registreerib registri ühe käepidemega, laseb tuvastamisel oma rada minna ja pärast ühe versiooni eemaldamist liigub see uue käepideme juurde. Nähtavad deltad kogu versioonis on kosmeetilised: versioonile 1.0.1 on lisatud selgesõnaline /usr/bin/pip3-stiilis teed pip-otsinguloendisse (sudo-ühilduvus), 1.0.7 pakkis wallet-config kirjutamise try/catch-i ja 1.0.8 nimetas installija ümber . Js et .cjs säilitades samal ajal selle sisu baitidentsena. .cjs ümbernimetada rajad npm hoiatustega ebamäärase moodulilahenduse kohta pakettides ilma selgesõnalise hoiatuseta "tüüp" väljal ja see võib olla katse summutada installimise ajal tekkivat müra, mis võiks tähelepanu köita. Pythoni kasulik koormus – ainus osa, mis tegelikult varastab – on kõigis üheksas versioonis muutmata.
Kompromissi näitajad
Paketid
| Ökosüsteemi | Pakend | Variandid | olek |
|---|---|---|---|
| npm | @jaggle/resizeobserves | 1.0.0 läbi 1.0.8 | Avaldamise ajal aktiivne; eemaldamist taotletud. |
Failid ja räsiväärtused
| Tee | märkused |
|---|---|
clipboard_guardian/guardian.py(md5 f7935c2c82bc881288611ab6cd634f17) | Identne kõigis üheksas avaldatud versioonis (1.0.0 läbi 1.0.8). Lõikuri kasulik koormus. |
npm-install.js (1.0.0 – 1.0.7)npm-install.cjs (1.0.8) | Püsivuse paigaldaja; sama otsast lõpuni käitumine. 1.0.7's .js ja 1.0.8's .cjs on bait-identsed. |
~/.config/clipboard-guardian/config.json | Linuxi püsivuse konfiguratsiooni ja rahakoti pakett. |
~/Library/Application Support/clipboard-guardian/config.json | macOS-i püsivuse konfiguratsiooni ja rahakoti pakett. |
%APPDATA%\clipboard-guardian\config.json | Windowsi püsivuse konfiguratsiooni ja rahakoti pakett. |
~/.config/systemd/user/python3-dbus-helper.service | Linuxi automaatse käivituse püsivus. |
~/Library/LaunchAgents/com.apple.python.runtime.plist | macOS LaunchAgenti püsivus. |
~/Library/Logs/com.apple.python.runtime.log | macOS-i stdout/stderr logi agendi jaoks. |
Scheduled Task PyRuntimeBroker | Windowsi automaatkäivituse ülesanne (AtLogOn, ajalõpu pole). |
Käitumisnäitajad
| Signaali | Kirjeldus |
|---|---|
pip install --break-system-packages npm-i järelinstallilt | Sunnib saidiülese Pythoni installimise, möödudes PEP 668 kaitsest. |
apt-get install -y xclip (või pacman/dnf) | Paigaldab lõikelaua utiliidid Linuxile paketi installimise ajal. |
python3-dbus-helper.service süsteemitud kasutajaüksus | Püsivus on registreeritud usutava välimusega käitusaja abistaja nime all. |
com.apple.python.runtime LaunchAgent | Püsivusmärgis väljaspool seaduslikke Apple'i süsteemiteid. |
PyRuntimeBroker Ajastatud ülesanne | Võltsitud Windowsi käitusaja vahendaja püsivus ilma legitiimse installija allikata. |
Pythoni protsess pealkirjaga python3-dbus-helper importivate pyperclip ja psutil | Kuvatud protsessi nime ja imporditud teekide käitumuslik mittevastavus. |
| Lõikelaud muutub ~0.4 sekundit pärast rahakoti aadressi kopeerimist | Krüptovaluuta aadressi asendamise allkirja käitumine. |
Ründaja rahakoti komplekt (kaitsja otsimise nimekiri)
Rahakottide nimekiri tarnitakse kõvakodeeritult npm-install.js ja clipboard_guardian/guardian.pyKaitsjad saavad seda nimekirja kasutada nii blokeerimisloendina (käsitleda kõiki ettevõtte rahakottidest nendele aadressidele tehtud ülekandeid kahtlastena) kui ka jahivõtmena (käsitleda mis tahes nende stringide olemasolu autentimata konfiguratsioonifailis, ehitusartefaktis või arendaja masinas nakkuse indikaatorina).
Ründaja rahakoti komplekt
| kett | AADRESS |
|---|---|
| Ethereum / BSC | 0x450c0E58Fc2ba03632d3F5780ad8C966648B6F18 |
| Ronin (EVM) | ronin:450c0E58Fc2ba03632d3F5780ad8C966648B6F18 |
| Bitcoin | bc1qs2mpls4p0f7fng073gy2rcdgjpf7la4eugpt6y |
| Bitcoin Cash | bitcoincash:qqmvyxxklzp7l3eslxavhc8phl6hprdf25lwc29nlt |
| Litecoin | ltc1qnefc8x59a9cwtqnflt8hmqvezqw4hc7lt3fkqe |
| Dogecoin | DNEJmYRZtzyK44tZea4S7wV3otTyRk48Fy |
| Kriips | XtJ7E6mnhPK93Vib29PGQrTmQjhTTqFwbS |
| Zcash | t1d4hcEnBjdh9X6Wb6R2dxqjnxddJ6ocP8M |
| DigiByte | DPmH2dhiGK3hk3A69tZUMz6tHzGFHBzSrH |
| Monero | 42zhAidVhP7QETk83JAspS59ASALSHFio44vmu6MdDCz15cSqtqsG4QVyzY8vTrjGrTEA6zMbWW6Yft1Ynz1xLfCN5FVbXf |
| Solana | DWBAmQLi9gP6mk7UfJfQGYTV1UPK32WekLTqg83q1mc5 |
| TRON | TVgEgMemmJABYYnbNr1Wi8bSgADEkdEBt2 |
| TON | UQDTSkvwmptU9eG988KgxS3WjnYAZlXgfpJxnz4mhWZAvULr |
| Ripple | r9tj3cMCiqRijNYqNVYNuwKykkQfS8FE4H |
| Polkadot | 1JSkYqXQE4d28HdcmTPhbgCrdiPFTfSHxD67tam16p53oBG |
| NEAR | 5d6aec44551529e8cd9ebd3aaa84b3832fc3c7463596b2b6e72635b80096a364 |
| Cosmos | cosmos1pzfl3kv5g8g0ernj86rwpar08u2zl9suthx28e |
| Osmoos | osmo1pzfl3kv5g8g0ernj86rwpar08u2zl9surv463t |
| Celestia | celestia1pzfl3kv5g8g0ernj86rwpar08u2zl9su6ah6a5 |
| Injektiivne | inj1g5xquk8u9wsrvvkn74uq4kxfvejgkmccn578gh |
| Kava | kava1kjfvgcz4q0y9yae2f3pa33vhj2estxxj3sqqux |
| Harmoonia | one19hn0n7dzkhtl9ta9ekv5592s85jwstpka76t3a |
| Terra | terra1h0dwu8z405jagdlr0fgr9jllac2sxajzlgme5x |
| Algorand | XSAMN3FTB5SUHUQFENBDDRXIMOPNFVLKAWA3RNOU54DWROMDZ6SR7DZ2PI |
| Stellar | GACNZSV4EQO65NZZUOBS3TMJM7GFTSRNKQBVJOX5P2G7U7SEBQ2ZUDJE |
| Cardano | addr1qyj050vla4cglmyrgm4vzf3dxtn0gynpks4t7vp7s3lg49e9wt0s94hcztzdgecxcz5hu9uk56q60yth6d66w026s2kq3ma56f |
| MultiverseX | erd1slvlgqsmwzk0c8xtksm4eq5vdfnc26slpzqsyxhz456zvme5rpasue6ge0 |
| asjakohane | 0x580ecda1ebd6ca5a46be2097568d013308bd54ef1d147acb880b59f7709f280e |
| sui | 0xf7e8a9a970fa65c058745c4b2cf2a856cc0283863e4ed1e142648f26097b0c78 |
| Nano | nano_393n56a5pfz8zg3nkzf7mytfgagzhu5mn9i3xiqg54weq8n1u8jgezxas7dn |
| Filecoin | f1fypyww3xubopfnv7q6yh5l4bko44wmfktf3ckui |
| Tezos | tz1RccjnorHk61bt73ArLXcdgFjEj6T1ochk |
| Ergo | 9g1pNQGnFg7Hk1d9Z66bgHMkguGU7R41btypAnbG1NF5FJoNdBA |
| Hedera | 0.0.10488092 |
Vaikimisi konfiguratsioonis regulaaravaldistega hõlmatud, kuid tühjade rahakotipesadega ahelaid – Sei, IOTA, Kaspa, Flow, Nervos, Decred, Ravencoin, Beacon-Chain BNB – selles versioonis aktiivselt ei asendata, kuid need tuvastatakse. Käsitlege neid jälgimisulatuse, mitte asendusulatusena.
Omistamine ja motivatsioon
Kampaania omistamispind on õhuke. Me ei ole suutnud operaatori identiteeti kinnitada. Mida me saame salvestada:
- Väljaandja metaandmed. NPM-konto kõigutama loetleb oma e-posti aadressi järgmiselt olgascarlet@deltajohnsons.comDomeen deltajohnsons.com ei vasta ettevõtte identiteetile, mida saaksime kontrollida. NPM-i kontol puudub e-posti aadressi kinnitus ja SCM kinnitus. Avalikku GitHubi kohalolekut pole.
- Hoidla väli. . pakett.json ei kanna Hoidla väli. Õigustatud npm:@juggle/resize-observer osutab päris GitHubi repositooriumile, millel on tuhandeid tähti ja aktiivseid probleeme. Repositooriumi lingi puudumine on npm-i kasutajaliidese kiireim visuaalne märk.
- README plagiaat. Pakett README on legitiimne @juggle/resize-observer README bait-baidi haaval, sealhulgas import näited, mis viitavad @juggle/resize-observer ise (mitte avaldamispakett). Operaator ei vaevunud isegi imporditud faile ümber kirjutama – tavaline märk sellest, et readme fail eemaldati, mitte ei kohandatud.
- Puudub infrastruktuur, millele toetuda. Puudub C2 lõpp-punkt, DNS-i otsing ega IP-aadress. Pahatahtlik käitumine on täielikult kapseldatud kohalikku lõikurisse ja kõvakodeeritud rahakotipaketti. See muudab domeeni- või ASN-põhise ümberlülitamise kättesaamatuks. Kaitsjad, kes kampaaniate vahel ümberlülituvad, peaksid rahakotid räsi abil võrdlema mis tahes varasema lõikuriga, mis neil on; rahakoti korduvkasutamine eri pakettides on kõige lihtsamini hallatav kampaaniateülene seos.
- Nimevalik. @jaggle/resizeobserves on ühe tähe võrra erinev @žongleerima ja ühe käände võrra tuntud suuruse muutmise vaatlejaKombineeritud redigeerimiskaugus on kaks glüüfi. See on tahtlik visuaalne kokkupõrge, mitte üldine kükitamine.
Motivatsioon, mis põhineb kasuliku koormuse käitumisel: puhas monetiseerimine oportunistliku lõikelauale asendamise kaudu. Puudub volituste kogumine, hosti sõrmejälgede võtmine ega keskkonnamuutujate lugemine. Operaatorit ei huvita, kes on ohver — teda huvitab, et ohvri järgmine ülekanne osutaks ühele loetletud aadressidest. Neljakümne ahelaga katvus on loteriimudel tegevuses: edasta laialt, loodetavasti maandub üks väärtuslik pasta iga N installi kohta.
Operaator ei paista eemaldamise pärast muret tundvat. Üheksa versiooni avaldamine kahe tunni jooksul sama ulatuse all kõlab kui avaldamise ja põletamise käideldamine: maksimeerida registri jalajälge enne, kui eemaldamise latentsusaeg järele jõuab, ja seejärel edasi liikuda. Me ei ole täheldanud @jaggle kirjutamise ajal avaldatakse see uue ulatuse all, kuid eeldame sarnaseid ulatusi (@jaggie, @žongleeri-, @joggle) ilmuvad lähipäevil, kui operaator on endiselt aktiivne.
Mõju, trendid ja mida kaitsjad peaksid tegema
mõju
Praeguse andmestiku põhjal ei ole võimalik reaalraha mõju kvantifitseerida. Lõikevahendaja ei kirjuta telemeetriat ja analüüsi piiri seisuga ei ole rahakotid veel asendatud ülekandeid vastu võtnud (loetletud kettide järelkontroll on meie nimekirjas). Legitiimne npm:@juggle/resize-observer keskmiselt ulatub iganädalaste allalaadimiste arv seitsmekohalise arvuni – suure liiklusega tüposquat-sihtmärk – ja pahatahtlik pakett oli avalikustamise ajal aktiivne alla 24 tunni, mis piirab küll nakatunud populatsiooni, kuid ei nulli seda.
Jälgimist väärt plahvatusraadius ei ole otsene allalaadimine @jaggle/resizeobserves — need on tõenäoliselt väikesed. Tegemist on **transitiivsete installidega**: arendaja lisab paketi liivakastiprojekti ja käivitab npm installija seejärel unustades, et installikonks üldse käivitus. Igal masinal, mis pärast installimist töötles, on nüüd automaatse käivitamise ajal kasutajapõhine lõikelaua kaaperdaja, olenemata sellest, kas projekt on ikka veel kettal. Paketikataloogi eemaldamine sõlme_moodulid **ei** eemalda püsivust.
Tärkavad mustrid
See kampaania ilmestab kahte trendi.
npm Pythoni kasuliku koormuse kohaletoimetamise ümbrisena. npm tarball on neljarealine installer; tegelik varastaja on Python, mille paigaldab kogu süsteemi pip komplekteeritud kataloogist. See pole uus – oleme varem näinud npm-pakettide Pythoni eemaldamist –, kuid see on muutumas krüptoklipperikampaaniates mõõdetavalt tavalisemaks. Operaatori eelis on kahetine: Pythoni lõikelaua teegid (Pyperclip esimesena neist) on puhtamad ja platvormideülesemad kui JavaScripti ekvivalendid ning Enamik automatiseeritud npm-skannereid kaalub JavaScripti faile ja Pythoni faile tugevalt .py kimbud kergelt. Hind seisneb selles, et paigalduskoha jalajälg on palju valjem – värske pip install on arendaja masinal, mis tavaliselt seda ei tee, raske peita pip install ajal npm installi.
Platvormil põhinevad nimed on ainus varjatud lahendus. Mitmed hiljutised koodilõikurid ja väikese kasuliku koormuse varastajad on kooditasemel hägustamise täielikult hüljanud ja eelistanud õigustatud välimusega püsivussilte. python3-dbus-helper, com.apple.python.runtimeja PyRuntimeBroker on õpikunäited – nimed, mille kaitsja silm neljakümne kasutajateenuse nimekirjas vahele jätab. See on odav ja vastupidav varjatuse vorm: eemaldamine toimub paketi kohta, kuid püsifailid jäävad eemaldamisest ellu ja teenust, mis on nimetatud reaalse välimusega platvormikomponendi järgi, ei puhastata millegi muu kui selgesõnalise auditiga.
Mida kaitsjad peaksid tegema
- Auditeeri ~/.config/systemd/user/, ~/Library/LaunchAgents/ ja Get-ScheduledTask väljund arendajate masinatel IOC-des loetletud kirjete jaoks. npm-paketi eemaldamine jätab need alles; need tuleb käsitsi eemaldada.
- Blokeeri ülekanded loetletud rahakoti aadressidele ettevõtte ja riigikassa ning DeFi-rahakottide piiridel, kus aadresside lubamisloend on saadaval.
- Otsi ~/.config/clipboard-guardian/config.json faili (ja platvormi ekvivalendid) kogu arendajaarvutite pargis. Faili olemasolu on kõrge usaldusväärsusega nakkus olenemata sellest, millisest paketiversioonist see pärines.
- Otsi node_modules/-ist clipboard_guardian/guardian.py vahemälu hetktõmmistes, mis võivad olla eemaldamisele eelnevad. Faili md5 on kõigis ülevaadatud versioonides stabiilne.
- Lukustusfaili pin @juggle/resize-observer (legitiimne pakett), et tulevased installid ei saaks ühe tähemärgi suuruse kirjavea tõttu midagi muud tuvastada, eriti lukustusfailideta töövoogudes, näiteks npx.
- Töötle mis tahes npm-i järelinstalli, mis kutsub esile pip-installi kui kõrge raskusastmega ehitusespipeline poliitika. Npm-paketil pole installimise ajal pipi vajamiseks õigustatud põhjust – Pythoni tööriistad levitavad Pythoni tööriistu.
- Otsi process_iter()-võrdlevaid jälgimisandmeid protsesside kohta nimega python3-dbus-helper, mis impordivad pyperclipi — varjamise mittevastavus (D-Busi abimees, kes hoiab lõikelaua teeki) on kõige selgem käitumuslik indikaator, mis meil on.
- Nakatunud masinatest kleebitud rahakoti aadresside vahetamine. Lõikelaua kaaperdaja seob rahakoti kasutajaliidese ja kleepimise sihtmärgi vahelise tee; nakatumise ajal kopeeritud aadresse võidakse märkamatult muuta. Kõike nakatumisperioodi jooksul saadetud teavet tuleks käsitleda potentsiaalselt valesti suunatud aadressina.
Kokkuvõte: püsivus elab kauem kui eemaldamine. Register eemaldab lõpuks @jaggle/resizeobserves kõigis üheksas versioonis; systemd üksus, LaunchAgent ja Scheduled Task ei eemalda ennast.
Tehtud tööd
- @juggle/resize-observer npm-is — legitiimne pakett, mida see typosquat jäljendab; kasulik lähtepunktina bait-baidi haaval README plagiaadi jaoks.
- @jaggle/resizeobserves registri metaandmed — avaldada üheksa pahatahtliku versiooni ajatemplid, mis on kasulikud kohtuekspertiisi ajajoonena.





