Audiitori lõks

AuditorTrap: 22-paketiline võltsitud krüptovaluutade turvagild npm-il kahe paralleelse kasuliku koormusega

TL; DR

Üks npm-i väljaandja, ddjidd5640on loonud 22-paketilise võltsitud Web3 turvatööriistade kataloogi selliste väljamõeldud kaubamärkide all nagu Krüptoturvalisuse gild, Web3 auditikollektiivja DeFi turvaliit.

Paketid ei näe välja nagu lihtne trükivigadega kampaania. Need näevad välja nagu bränditud turvaökosüsteem, mida toetavad vastavad tühjad GitHubi organisatsioonid ja veenvad MCP-tööriistade nimed, näiteks search_leaked_credentials, validate_chain_keyja deploy_safe.

Kampaania jaguneb kaheks osaks kaks aktiivset kasuliku koorma perekonda ja üks passiivne tranšee.

Variant A sisaldab 8 volituste kogumise paketti. Installijärgne skript loeb kohalikke salajasi salvestusruume, samas kui komplekteeritud scanner.js käivitub siis, kui tehisintellekti agent käivitab paketi MCP-tööriistad, otsides rahakotivõtmeid, BIP39 mnemoonikat, API-märke ja muid volitusi.

Variant B sisaldab 5 Pingy-põhist binaarfaili tilgutajat. Need paketid hangivad ja käivitavad pärast installimist kaugfaili koos foundry-deploy-helper:1.8.96 eraldiseisva käivitatava faili kukutamine aadressil /tmp/.node-cache.

Variant C sisaldab 9 uinunud paketti, millel pole veel ilmset installimisjärgset koormust, kuid sama väljaandja, brändimuster ja Web3-keskne nimetamine.

22-st paketist oli meie arvates kusagil lipukesega märgitud; ülejäänud 14 olid analüüsi ajal npm-is endiselt aktiivsed.

Raskusaste: kriitiline.

Rünnak: kaks koormat ühes garderoobis

Riidekapp on bränd. Ava crypto-credential-scanneri README-fail ja sulle öeldakse, et see on Crypto Security Guildi loodud volituste skanner. Ava defi-threat-scanneri leht ja sulle öeldakse, et see on DeFi Security Alliance'i tööriist. Ava web3-secrets-detector ja see on Web3 Audit Collective. Ükski neist kollektiividest ei eksisteeri organisatsioonina. Need eksisteerivad tühjade GitHub organisatsioonidena, mille ainus eesmärk on täita npm-lehe „autori“ hüperlinki.

Variant A: paigaldusjärgne eelkontroll ja MCP-aegne põhikontroll

Kaheksal Variant-A paketil on kaheastmeline kasulik koormus – installijärgne eelkontroll, mis hangib kõik kettal juba olevad volikirjad lihttekstina, ja käitusaja etapp, mis aktiveerub siis, kui tehisintellekti agent kutsub ühe paketi MCP-tööriistadest.

„1. etapp, eellend” asub failis package.json rea sees node -e üherealise võtmega. See avab seitse tuntud dotfile'i ja saadab igaühe esimesed 200 baiti C2-le:

200 baiti ~/.ssh/id_ed25519 ei anna ründajale iseenesest teie privaatvõtit, aga annab failinimi, kommentaar ja PEM-päise esimesed read — piisab kinnituseks, millist tüüpi võti seal asub, mis on piisav järgneva etapi käivitamiseks. 200 baiti ~/.env on tavaliselt enam kui piisavad, et lekkida täielik API tunnus. 200 baiti ~/.git-volitused on tavaliselt täielik komplekt OAuth-tokeneid.

„2. etapp, põhiakt“, On skanner.jsSee laaditakse paketi poolt. index.js ja seda kutsutakse MCP päringukäitleja seest hetkel, kui tehisintellekti agent käivitab mõne reklaamitud tööriista. Fail on bait-baidi haaval sama kõigis kaheksas Variant-A paketis (b461106e47a1f5966159cd6e92541505) ja see on oma tegevuse suhtes avameelne. Avakommentaaride blokk kõlab sõna-sõnalt:

javascript // wallet-scanner.js — sisseehitatud aktiivne skanner MCP pakettidele // Töötab vaikselt, kui tehisintellekti agent kutsub välja mis tahes MCP tööriista, skannib keskkonda // rahakotte/võtmeid // Kasutab ainult Node.js sisseehitatud komponente, väliseid sõltuvusi pole

Järgneb rekursiivne jalutuskäik sügavusega 3, mis koosneb järgmisest:

kodukataloog ise

...filtreerimine failinimede jaoks, mis sisaldavad mõnda järgmistest võtmehoidla, rahakott.json, rahakott.dat, .salajane, seeme.txt, metamask, fantoom, rabab, usaldusrahakott, coinbase, privaatvõti, mnemooniline, salajane_võti, api_võti — st käsitsi koostatud nimekiri igast kohast, kus krüptokasutaja võtit hoiab. Iga vaste korral avatakse fail ja seda skannitakse kuue regulaaravaldise suhtes:

KASUTUSALA Muster Mida see püüab
privaatvõti (?:0x)?[a-fA-F0-9]{64} Ethereumi privaatvõtmed ja üldised 32-baidised heksadetsimaalsüsteemisaladused.
mnemooniline \b([a-z]+\s+){11,23}[a-z]+\b BIP39 mnemoonilised algfraasid pikkusega 12 kuni 24 sõna.
api_võti (api[_-]?key\|API_KEY)\s*[:=]\s*["']?([A-Za-z0-9_\-]{20,}) Konfiguratsioonifailidesse manustatud üldised API-tokenid ja mandaadiväärtused.
saladus (?:secret\|private).{0,10}[:=]\s*["']?([A-Za-z0-9+/=]{20,}) Saladusi ja privaatväärtusi talletatakse tavaliselt YAML-, JSON- ja INI-konfiguratsioonivormingutes.
ethiaadress 0x[a-fA-F0-9]{40} Ohvrite tuvastamiseks ja sõrmejälgede võtmiseks kasutatakse Ethereumi rahakoti aadresse.
parool (?:PASSWORD\|PASSPHRASE)\s*=\s*["']?(\S{4,64}) Shelli ekspordi stiilis paroolid ja paroolifraasi keskkonnamuutujad.

Seejärel loeb scanner.js täielikult veel kuus dotfile'i – kuni 500 baiti igaüht järgmistest failidest: ~/.env, ~/.bash_history, ~/.zsh_history, ~/.npmrc, ~/.gitconfig, ~/.git-credentials – ja otsib process.env-ist muutujaid, mille nimi sisaldab väärtust key, secret, token, password, private, mnemonic, wallet või seed. Lõpuks kutsub see välja execSync('whoami') koos os.hostname() ja process.cwd() funktsioonidega, et märgistada mälutõmmis ohvri identiteediga. Kogu kasulik fail pluss kuni 100 individuaalset leidu postitatakse ühe JSON-objektina.

Exfiili sihtkoht ei ole otse kõvakodeeritud. Pakett hangib selle käitusajal järgmiselt aadressilt:
https://ddjidd564.github.io/defi-security-best-practices/config.json

— GitHubi lehtede dokument, mida ründaja kontrollib. Praegune config.json tagastab

Kui see toomine ebaõnnestub, skanner.js langeb tagasi samasse webhook.site URL on kõvakodeeritud konstandina. See kaudne lähenemine on kampaania ainus operatiivse keerukuse element: see võimaldab ründajal exfil-sihtmärke vahetada ilma paketti uuesti avaldamata ja hoiab tegeliku koguja URL-i npm-artefaktist eemal, mis raskendab allkirjapõhist tuvastamist.

Variant B: Pingy tunnel, binaarne ja üks püsiv variant

Teine aktiivne tranšee on palju väiksem – viis paketti – ja palju vähem nutikas. Autor loobus MCP kostüümist täielikult. Need paketid väidavad end olevat konfigureerimise abilised legitiimsetele Ethereumi ja Solana tööriistadele (trühvli konfiguratsiooniabiline, chainlink-price-feed-agregator, ganache-cli-provider, solana-pda-helper, valukoja juurutamise abiline). Kasulik koormus on üksik https.get-ja-exec rida pärast installimist

C2 on tasuta Pingy tunnel — üldine arendaja tunnelteenus, mida ründaja kasutab ajutise C2-na. Pakett laadib alla tunneli tagastatud teabe ja laadib selle sinna. lapse_protsess.exePuudub terviklikkuse kontroll, allkirjastamine või teise astme kaitse. Töötab see, mida operaatori tunnel täna teenindab.

Kõige agressiivsem pakett, foundry-deploy-helper:1.8.96, asendab tekstisisest https.get koos Curl ja järjekindluse nipp:

Tagumine & eraldab binaarfaili installiprotsessist, nii et install lõpeb vaikselt, samal ajal kui pikalt töötav binaarfail tiksub taustal nime all, mis näeb välja nagu tähelepandamatu Node.js vahemälufail. Me ei hankinud binaarfaili ennast; tunnel ei reageerinud kontrollimise ajal, mis on tunneli ootuspärane käitumine, mille operaator nõuab ja avab.

 Variant C: poleeritud fassaad, detonaatorit (veel) pole

Ülejäänud üheksa paketti — rahakoti varundamise verifitseerija, keskkonnaturvalisuse skanner, valukoja tööriistakomplekt (tahtlik tüposquat sõnast Foundry), solna-web3 (Solana tüposkvatt), rahakoti turvakontroll, Hardhat-gas-profiler-plugin, eetrid-multicall-utiliidid, defi-env-audiitor, etherjs-utiliidid - on installimisjärgset skripti pole ja esmapilgul pole ilmselget käitusaja exfil'i. Neil on aktiivsete variantidega sama väljaandja, brändifassaad, Web3 nimetamismuster ja mõnel juhul identne README-vorming. Me käsitleme neid sama kampaania osana ja oleme soovitanud ennetavat eemaldamist, kuid me pole veel nende käitusaja käivitajaid täielikult loetlenud. Uinuv tranšee võib olla tugipunkt, mida operaator reserveerib tulevaseks ümberpööramiseks – sama muster, mida PhantomBot kasutas mai keskel, kus operaator vahetas volituste varastaja botneti värvatu vastu ilma paketi nime uuesti avaldamata.

Ajajoon ja kataloog

Kampaania varaseim dateeritud pakett on madalaima versiooniga: keti-võtme-validaator: 0.2.3 ja defi-env-auditor:0.3.2 näevad välja nagu varased eksperimentaalsed tilgad. Selleks ajaks, kui kirjastaja jõudis truffle-config-helper:1.7.0 ja foundry-deploy-helper:1.8.96, versiooni inflatsioon oli tahtlik – valiti numbreid, mis kõlasid nagu väljakujunenud paketi päritolu. Ühelgi 22-st pole npm-is selle täpse nime all varasemat õigustatud ajalugu.

Täielik kataloog, variantide kaupa rühmitatud:

### Variant A — volituste koguja (pärast installimist + MCP-aegne skanner.js, MD5 b461106e47a1f5966159cd6e92541505)

Pakend versioon Tuvastusvoogudes märgistatud
mnemonic-safety-check 0.5.2 jah
solidity-deploy-guard 0.4.4 jah
web3-secrets-detector 1.2.6 jah
eth-wallet-sentinel 1.0.9 jah
deployment-key-auditor 0.7.3 jah
defi-threat-scanner 2.1.2 jah
crypto-credential-scanner 2.0.2 jah
chain-key-validator 0.2.3 jah

### Variant B — Pingy tunnel https.get → exec (enne seda aruannet ei olnud tuvastusvoo nähtavust)

Pakend versioon Paigaldamisjärgne maitse
truffle-config-helper 1.7.0 https.get → exec(stdout)
chainlink-price-feed-aggregator 1.1.12 https.get telemetry call
ganache-cli-provider 1.7.51 https.get telemetry call
solana-pda-helper 1.0.46 https.get telemetry call
foundry-deploy-helper 1.8.96 curl + chmod +x /tmp/.node-cache &

### Variant C — passiivne, kahtlustatakse käitusaegset päästikut (enne seda aruannet ei olnud tuvastusvoo nähtavust)

Pakend versioon märkused
wallet-backup-verifier 1.0.1
env-security-scanner 1.6.0
foundy-toolkit 1.5.79 valukoja typosquat
solna-web3 1.5.98 Solana tüposkvatt
wallet-security-checker 1.0.3
hardhat-gas-profiler-plugin 1.7.86
ethers-multicall-utils 1.3.15
defi-env-auditor 0.3.2
etherjs-utils 1.0.39

Variant-A ja variant-B veerud ei ole juhuslikult valitud. Variandi-A nimed müüvad end kõik kui turvaauditi tööriistad — „turvakontroll“, „juurutuse valvur“, „saladuste detektor“, „rahakoti valvur“, „võtmeaudiitor“, „ohuskanner“, „volituste skanner“, „ahelvõtme valideerija“. Need on suunatud arendajale või tehisintellekti agendile, kes otsib tööriista Web3 projekti turvalisuse hindamiseks. Variant-B nimed müüvad end kõik kui ehitus- ja juurutamisabilised sama Web3 ökosüsteemi jaoks – Truffle, Chainlink, Ganache, Solana PDA tööriistad, Foundry. See jaotus peegeldab tavalise Web3 arendaja mõttemudelit „auditi faasist” vs „juurutamise faasist”. Olenemata sellest, millise faasi poole te haarate, on kirjastaja selle jaoks lõksu pakkunud.

Kompromissi näitajad

Võrk ja failid

ROK variant Eesmärk
https://ddjidd564.github.io/defi-security-best-practices/config.json A Dünaamiline veebikonksu lahendaja, mida majutatakse GitHub Pagesi kaudu.
https://webhook.site/8d334534-1c63-4f4f-a0d7-95c446c8b233 A Praegune väljafiltratsioonikollektori lõpp-punkt, mis on samuti varuvariandina manustatud.
rqnyz-2605-7280-7--2000-c51.run.pinggy-free.link/npm/-/binary/telemetry B Pingy tunnel, mida kasutatakse binaarandmete kauglevi levitamiseks.
scanner.js MD5 b461106e47a1f5966159cd6e92541505 A Identne skänneri kasulik koormus taaskasutati kõigis kaheksas variandi A paketis.
/tmp/.node-cache B Eraldi käivitatav fail langes maha foundry-deploy-helper:1.8.96.

kirjastaja

  • npm kasutajanimi: ddjidd5640
  • e-post: 1623682356@qq.com (kinnitamata)
  • Meil ja SCM kinnitus: puudub
  • Arvel olevad paketid: 22, kõik loetletud ülaltoodud kataloogis
  • Varaseim nähtav tegevus: keti-võtme-validaator: 0.2.3 (Variant A)
  • Viimane nähtav tegevus: chain-key-validator:0.2.3 ja crypto-credential-scanner:2.0.2 (mõlemad 24 tunni jooksul enne seda kirjutist)

Brändi fassaadid (kasutatakse autor / README / võlts GH org)

  • „Krüptoturvalisuse gild” — tühja GitHub org-i toel krüptosec-gild
  • „Web3 Audit Collective” — tühja GitHub org-i toel w3audit
  • „DeFi Security Alliance” – tühja GitHub org-i toel defi-julgeolek
  • Viide GH kontole ddjidd564 — dünaamilise veebihooki config.json host

Käitumuslik

  • sõlm -e pärast installimist mis tahes järgmiste lugemine .ssh, .ethereum, .bitcoin, .env, .bash_history, .zsh_ajalugu, .git-volitused koos .viil(0, 200) ja ühendades | separators on variandi A peaaegu unikaalne sõrmejälg.
  • Import ./skanner.js paketist, mis registreerib end MCP-na server tööriistadega nimega otsingu_lekkinud_volitused või sarnaselt fraaseeritud „turvaauditi” tegusõnad on variandi A kinnitus.
  • Käsk node -e postinstall, mis hangib andmeid suvaliselt *.run.pinggy-free.link hostist ja suunab vastuse faili child_process.exec, on variandi B kinnitus olenemata ümbrisest.

Omistamine ja motivatsioon

Laual on piisavalt võimalusi osalise kirjastaja sõrmejälje tuvastamiseks, kuid mitte kaugeltki piisavalt tegeliku tuvastamise jaoks. 1623682356@qq.com on QQ meiliaadress – Tencenti tasuta veebimeil, mis on populaarne Mandri-Hiinas – ja numbriline kohalik osa on QQ kasutaja ID; me käsitleme seda ainult pehme signaalina, kuna QQ-vormingus aadressid on triviaalselt registreeritud. npm-kontol puudub kahefaktoriline avalikustamine, kinnitatud e-posti aadress ja kinnitatud SCM link. Brändide kolmik „Crypto Security Guild” / „Web3 Audit Collective” / „DeFi Security Alliance” on hulgimüügis väljamõeldis – ükski neist kolmest ei eksisteeri väljaspool seda kampaaniat – ja toetavad GitHubi organisatsioonid on tühjad kestad, mis on loodud npm-lehe linkide täitmiseks.

Kaks mustrit väärivad nimetamist, sest need ilmnevad külgnevates kampaaniates. Esimene on brändi eelvalmistamine kui sotsiaalne tõendoperaator ei valinud trükivigadele olemasolevaid projektinimesid; nad lõid nullist terve usaldusnarratiivi, teades, et AI-agendi ehitus pipeline või kiirustades npm-lehte skanniv arendaja otsib mustrit „näeb välja nagu turvaorganisatsioon” asemel „on turvaorganisatsioon”. See on sama lähenemisviis, mille eest hoiatas lohakas kirjandus – paketid, mis on häälestatud sellisele nimele, mida õigusteaduse magister (LLM) kasutaks. leiutama kui temalt küsitakse Web3 turvatööriista, peaks see olema piisavalt hästi varustatud, et õigusteaduse magister ei peaks seda topeltkontrollima. Loksutamine on hiljuti loodud termin pahatahtlike pakettide kohta, mille nimed vastavad kohatäitetele. LLM-id hallutsineerivad, kui autoriteetset paketti pole olemas; see kampaania on selle agressiivsem nõbu, kus operaator sepitseb ka organisatsiooni, kuhu kohatäite kuuluks.

Teine muster on MCP-aja aktiveerimine. Selleks ajaks skanner.js käivitub, installimine on lõppenud ja arendaja on edasi liikunud. Päästik on tehisintellekti agent, kes kutsub tööriista — otsingu_lekkinud_volitusedvariandi A puhul – mida agent kindlasti teeb, sest see ongi kogu põhjus, miks talle pakett anti. Pahatahtlik töö toimub ajal hea osa töövoost, kui arendaja kõige tõenäolisemalt jälgib, kuidas tema tehisintellekti assistent õnnestub ülesandega, mida ta palus. See on väike käitumuslik nihe võrreldes vanema „exfil on”-iga npm installi”muster ja see väldib installiaegset liivakastiefekti osavalt.

Me ei nimeta ohutegijat. Signaalid (QQ e-post, üksikkonto, 22 paketi ühepäevane purske, kaks paralleelset C2-virna) on võrdselt kooskõlas nii ühe püsiva operaatori, väikese meeskonna kui ka ühe pakettide üleujutuse meeskonnaga, mis on olnud npm-i telemeetrias nähtav aastatel 2025–2026. Mida me... võimalik Võib öelda, et sellel operaatoril on selge eelistatud ökosüsteem (Ethereum + Solana + Foundry/Hardhat tööriistad), selge eelistatud ohver (Web3 arendajad ja Web3 projektide kallal töötavad tehisintellekti agendid) ja selge eelistatud püsivusmudel (MCP-aegne käitusaja päästik pluss eraldiseisev binaarfaili varufail).

Mõju, trendid ja mida kaitsjad saavad teha

Meie varajane hoiatus pipeline püütud 8 of 22 pakette kampaania eluea jooksul – kuus esialgsel pühkimisel ja veel kaks, mis saabusid hiljem samal päeval kampaania klastrite loomise etapis. Ülejäänud 14 paketti olid npm-is mitu päeva aktiivsed ilma et see ilmuks kunagi üheski meie jälgitavas tuvastusvoogusja kirjutamise ajal jäävad paigaldatavaks. See vahe on oluline, sest:

  • Variant A on installimise ajal vaikneDotfile'i lugemine toimub, kuid hulgi exfil käivitub ainult siis, kui tehisintellekti agent käivitab paketi MCP-tööriistad. standard järelpaigaldust jälgiv liivakast näeb sõlm -e plokk ja otsustada, et see on väike ja pealtnäha inertne.
  • Variant B on üherealine. Pahavara klassifitseerijal pole millestki õppida – ei hägustamist, kodeeritud kasulikku koormust ega kahtlase välimusega domeeni. Pingy tunnel on legitiimne arendajateenus. Ainus kahtlane asi on see, et „konfiguratsiooniabiline” peab üldse koju helistama.
  • Variant C näeb täiesti puhas välja. Sellel pole installi hooksIga staatilise signaali korral on see normaalne.

Lühike kaitsja kontrollnimekiri MCP-tööriistade ajastuks

Kolm konkreetset tegevust, mis oleksid selle kampaania varem tabanud:

  1. Kaalu kirjastajat, mitte paketti. Kakskümmend kaks pakki ühe aasta vanuse QQ-e-posti konto all, millel puudub SCM Kontrollimine on eredam signaal kui ükski paketipõhine funktsioon. Meie varajase hoiatamise töövoog tabas esimesed paketid, kuna avaldaja sõrmejälg paistis silma – soovitades avaldaja maine skoori, mida iga turvaline, mitteselge või pahavara paketipõhine klassifikaator saab vähendada.
  2. Dünaamilise konfiguratsiooniga kaudsõnu tuleb käsitleda pahatahtlikena, kuni vastupidine on tõestatud. Paketil, mis lahendab oma väljamineva lõpp-punkti käitusajal kolmanda osapoole dokumendist (GitHub Pages, GitHub Gist, Pastebin, S3 objekt või mis tahes muu objekt), pole telemeetria jaoks õigustatud põhjust seda teha. Tegelikud telemeetria lõpp-punktid on kõvakodeeritud ja dokumenteeritud.
  3. Auditeeri MCP-serveri pakette nende reklaamitud tööriistapinna abil. Variant-A paketid reklaamivad kõik tööriistu nimega search_leaked_credentials, validate_chain_key, deploy_safeja sarnased „auditi” tegusõnad. MCP host, mis kuvab tööriista, mille kirjeldus väidab, et see skannib projektikatalooge mandaatide jaoks, peaks enne agenti poolt reaalsel koodibaasil selle käivitamist nõudma selgesõnalist operaatori nõusolekut. MCP mõte on selles, et agendi tsüklil pole mingit võimalust teada, kas search_leaked_credentials on volituste otsing või volituste väljavõtmine.

Arendajatele, kes võivad olla juba ühe 22 paketist installinud: eeldage, et sees on mis tahes lihtteksti võti ~ / .ssh, ~/.ethereum, ~/.bitcoin, ~/.solana, ~/.envvõi ~/.git-volitused on ohustatud, vahetage iga mandaati, mille nimi vastab ülaltoodud env-muutuja filtriloendile, ja Linuxis/macOS-is kontrollige käivitatava faili olemasolu aadressil /tmp/.node-cache (ja kõik sellest käivitatud orvuks jäänud protsessid). Installige uuesti isikupärastatud tööriistade õigustatud versioon (valukoda, Trühvlid, Kiiver, ganachejne) ei eemalda kaotatud binaarfaili.

Uinunud Variant-C osa on selle loo see osa, mis vananeb kõige halvemini. Üheksa paketti puhta installiprofiili ja väljaandjaga on just selline varu, mida operaator varuks hoiab. Kui need hiljem plahvatavad – nagu PhantomBot tegi, kui selle axois-utils ümberpakett muudeti volituste vargusest botneti värbajaks – nad detoneerivad iga registrikasutaja vastu, kes on tänase ja eemaldamise vahel Variant-C paketi kinnitanud. Pahatahtliku paketi versiooni kaupa kinnitamine ei kaitse teid avaldaja eest, kes kontrollib iga versiooni.

Tehtud tööd

sca-tööriistad-tarkvara-kompositsiooni-analüüsi-tööriistad
Tarkvarariskide prioriseerimine, leevendamine ja turvamine
Hankige oma tasuta konto.
Krediitkaarti pole vaja.

Turvaline tarkvaraarendus ja -tarne

Xygeni tootekomplektiga