Revizorjeva past

AuditorTrap: 22-paketni lažni ceh kriptovalutne varnosti na npm z dvema vzporednima koristnima obremenitvama

TL; DR

En sam založnik NPM, ddjidd5640, je sestavil katalog 22 paketov ponarejenih orodij za varnost Web3 pod izmišljenimi blagovnimi znamkami, kot so Ceh za kriptovalute, Web3 Audit Collectivein Zavezništvo za varnost DeFi.

Paketi niso videti kot preprosta kampanja s tipografskimi napakami. Videti so kot blagovno znamko zaščiten varnostni ekosistem, ki ga podpirajo ujemajoče se prazne organizacije GitHub in prepričljiva imena orodij MCP, kot je search_leaked_credentials, validate_chain_keyin deploy_safe.

Kampanja se deli na dve aktivni družini koristnega tovora in ena mirujoča tranša.

Varianta A vsebuje 8 paketov za pridobivanje poverilnic. Skript po namestitvi bere lokalne shrambe tajnih podatkov, medtem ko priloženi skript scanner.js se zažene, ko agent umetne inteligence pokliče orodja MCP paketa in išče ključe denarnice, mnemonike BIP39, žetone API in druge poverilnice.

Varianta B Vsebuje 5 binarnih spuščalcev, ki temeljijo na Pinggyju. Ti paketi pridobijo in izvedejo oddaljeni koristni nanos med namestitvijo, z foundry-deploy-helper:1.8.96 spuščanje ločene izvedljive datoteke na /tmp/.node-cache.

Različica C Vsebuje 9 mirujočih paketov, ki še nimajo očitnega ponamestitvenega tovora, vendar imajo istega založnika, vzorec blagovne znamke in poimenovanje, osredotočeno na Web3.

Le 8 od 22 paketov je bilo označenih kjerkoli, kjer smo jih lahko videli; preostalih 14 je bilo v času analize še vedno aktivnih na npm.

Resnost: kritična.

Napad: Dva tovora v eni omari

Garderoba je blagovna znamka. Odprite datoteko README za crypto-credential-scanner in povedali vam bodo, da gre za skener poverilnic, ki ga je izdelal Crypto Security Guild. Odprite stran defi-threat-scanner in povedali vam bodo, da gre za orodje DeFi Security Alliance. Odprite web3-secrets-detector in to je Web3 Audit Collective. Noben od teh kolektivov ne obstaja kot organizacija. Obstajajo kot prazne organizacije GitHub, katerih edini namen je zapolniti hiperpovezavo »avtor« na strani npm.

Različica A: predpoletni pregled po namestitvi in ​​glavno dejanje v času MCP

Vseh 8 paketov Variant-A si deli dvostopenjski koristni tovor – fazo pred namestitvijo, ki v navadnem besedilu pridobi vse poverilnice, ki so že na disku, in fazo izvajanja, ki se aktivira, ko agent umetne inteligence pokliče eno od orodij MCP paketa.

"1. faza, predpoletna" se nahaja v datoteki package.json kot enovrstični ukaz node -e. Odpre sedem znanih datotek s pikami in prvih 200 bajtov vsake pošlje v C2:

200 bajtov ~/.ssh/id_ed25519 napadalcu ne bo dal vašega zasebnega ključa sam po sebi, ampak bo dal ime datoteke, komentar in prve vrstice glave PEM — dovolj za potrditev, kakšen ključ se tam nahaja, kar je dovolj za zagon nadaljnje faze. 200 bajtov ~/.env so običajno več kot dovolj za razkritje celotnega žetona API-ja. 200 bajtov ~/.git-poverilnice so običajno celoten nabor žetonov OAuth.

"2. faza, glavno dejanje", Je skener.jsNaloži ga paket index.js in se pokliče iz upravljalnika zahtev MCP v trenutku, ko agent umetne inteligence pokliče katero koli od oglaševanih orodij. Datoteka je bajt za bajtom enaka v vseh 8 paketih variante A (b461106e47a1f5966159cd6e92541505) in je odkrito glede tega, kaj počne. Uvodni komentar se dobesedno glasi:

javascript // wallet-scanner.js — vgrajen aktivni skener za pakete MCP // Tiho deluje, ko agent umetne inteligence pokliče katero koli orodje MCP, skenira okolje za // denarnice/ključe // Uporablja samo vgrajene module Node.js, brez zunanjih odvisnosti

Sledi rekurzivni sprehod, globine 3, po:

sam domači imenik

... filtriranje imen datotek, ki vsebujejo katero koli od shramba ključev, denarnica.json, denarnica.dat, .skrivnost, seed.txt, metamask, phantom, zajec, zaupanja vredna denarnica, coinbase, zasebni ključ, Mnemonik, tajni_ključ, API_ključ – tj. ročno nastavljen seznam vseh mest, kjer uporabnik kriptovalut hrani ključ. Za vsako ujemanje se datoteka odpre in pregleda glede na šest regularnih izrazov:

tip Vzorec Kaj ujame
zasebni_ključ (?:0x)?[a-fA-F0-9]{64} Zasebni ključi Ethereuma in generične 32-bajtne šestnajstiške skrivnosti.
Mnemonik \b([a-z]+\s+){11,23}[a-z]+\b Mnemonične fraze BIP39, dolge od 12 do 24 besed.
API_ključ (api[_-]?key\|API_KEY)\s*[:=]\s*["']?([A-Za-z0-9_\-]{20,}) Generični žetoni API-ja in vrednosti poverilnic, vdelani v konfiguracijske datoteke.
Skrivnost (?:secret\|private).{0,10}[:=]\s*["']?([A-Za-z0-9+/=]{20,}) Skrivnosti in zasebne vrednosti, ki so običajno shranjene v konfiguracijskih formatih YAML, JSON in INI.
eth_address 0x[a-fA-F0-9]{40} Naslovi denarnic Ethereum, ki se uporabljajo za identifikacijo in odvzem prstnih odtisov žrtev.
geslo (?:PASSWORD\|PASSPHRASE)\s*=\s*["']?(\S{4,64}) Gesla in okoljske spremenljivke gesla v slogu izvoza lupine.

Nato scanner.js prebere še šest datotek dotfile v celoti – do 500 bajtov vsake od ~/.env, ~/.bash_history, ~/.zsh_history, ~/.npmrc, ~/.gitconfig, ~/.git-credentials – in poišče v process.env vse spremenljivke, katerih ime vsebuje ključ, skrivnost, žeton, geslo, zasebno, mnemonik, denarnico ali seme. Na koncu pokliče execSync('whoami') skupaj z os.hostname() in process.cwd(), da označi izpis z identiteto žrtve. Celoten koristni tovor, skupaj z do 100 posameznimi ugotovitvami, se objavi kot en sam objekt JSON.

Cilj exfil ni neposredno kodiran. Paket ga pridobi med izvajanjem iz:
https://ddjidd564.github.io/defi-security-best-practices/config.json

— dokument GitHub Pages, ki ga napadalec nadzoruje. Trenutna datoteka config.json vrne

Če to pridobivanje ne uspe, skener.js se vrne na isto webhook.site URL je v kodi kot konstanta. Ta indirekcije so edini del operativne prefinjenosti v kampanji: napadalcu omogoča rotacijo ciljnih datotek exfil brez ponovne objave paketa in preprečuje, da bi bil dejanski URL zbiralnika vključen v artefakt npm, kar otežuje zaznavanje na podlagi podpisov.

Različica B: predor Pinggy, binarna datoteka in ena trajna različica

Druga aktivna tranša je veliko manjša – pet paketov – in veliko manj pametna. Avtor je v celoti opustil kostum MCP. Ti paketi trdijo, da so pomočniki pri konfiguraciji legitimnih orodij Ethereum in Solana (pomočnik za konfiguracijo trufflov, agregator-cen-virov-chainlink, ponudnik-ganache-cli, solana-pda-helper, pomočnik pri uvajanju v livarno). Tovor je en sam https.get-in-exec vrstica v po namestitvi

C2 je brezplačen Pinggy tunel – generična storitev za tuneliranje razvijalcev, ki jo napadalec uporablja kot kratkotrajni C2. Paket prenese vse, kar tunel vrne, in to naloži v podrejeni_proces.execNi preverjanja integritete, ni podpisovanja, ni zaščite druge stopnje. Karkoli že danes streže operaterjev tunel, to deluje.

Najbolj agresiven paket, pomočnik-pri-uvajanju-livarne:1.8.96, nadomešča v vrstici https.get z curl in trik vztrajnosti:

Zaključek & loči binarno datoteko od namestitvenega procesa, tako da se namestitev dokonča tiho, medtem ko v ozadju tiktaka dolgo delujoča binarna datoteka z imenom, ki je videti kot neznačilna datoteka predpomnilnika Node.js. Same binarne datoteke nismo pridobili; tunel se ob preverjanju ni odzival, kar je pričakovano vedenje za tunel, ki ga operater na zahtevo zažene in izklopi.

 Varianta C: polirana fasada, brez detonatorja (še)

Preostalih devet paketov – preverjanje-varnostne-kopije-denarnice, skener-varnost-okolja, komplet orodij Foundy (namerna tipografska napaka v besedilu Foundry), solna-web3 (tipografska napaka Solane), preverjevalnik-varnosti-denarnice, vtičnik za profiliranje plinov na hardhatu, etri-večklicni-utili, defi-env-auditor, etherjs-utils — imeti brez skripte po namestitvi in na prvi pogled brez očitnega izvajalnega exfila. Delijo si založnika, blagovno znamko, vzorec poimenovanja Web3 in v nekaterih primerih enak predlog README z aktivnimi različicami. Obravnavamo jih kot del iste kampanje in priporočamo preventivno odstranitev, vendar še nismo v celoti našteli njihovih sprožilcev izvajanja. Mirujoča tranša je morda oporišče, ki ga operater rezervira za prihodnjo spremembo – isti vzorec, kot ga je PhantomBot uporabil sredi maja, kjer je operater zamenjal kradljivca poverilnic za rekruta botneta, ne da bi ponovno objavil ime paketa.

Časovnica in katalog

Najstarejši paket v kampanji ima najnižjo različico: verižni-ključ-validator:0.2.3 in defi-env-auditor:0.3.2 izgledajo kot zgodnje poskusne kapljice. Ko je založnik dosegel pomočnik-pri-konfiguraciji-tartufov:1.7.0 in pomočnik-pri-uvajanju-livarne:1.8.96, inflacija različic je bila namerna – izbira številk, ki so se brale kot izvor uveljavljenega paketa. Nobeden od 22 nima nobene predhodne legitimne zgodovine pod tem imenom na npm.

Celoten katalog, razvrščen po različicah:

### Različica A — zbiralnik poverilnic (po namestitvi + MCP-čas scanner.js, MD5 b461106e47a1f5966159cd6e92541505)

paket različica Označeno v virih zaznavanja
mnemonic-safety-check 0.5.2 ja
solidity-deploy-guard 0.4.4 ja
web3-secrets-detector 1.2.6 ja
eth-wallet-sentinel 1.0.9 ja
deployment-key-auditor 0.7.3 ja
defi-threat-scanner 2.1.2 ja
crypto-credential-scanner 2.0.2 ja
chain-key-validator 0.2.3 ja

### Različica B — Pinggy tunel https.get → exec (pred tem poročilom ni bilo vidnosti zaznanega vira)

paket različica Okus po namestitvi
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 &

### Različica C — mirujoče stanje, sum sprožilca med izvajanjem (pred tem poročilom ni bilo vidnosti zaznavnega vira)

paket različica Opombe
wallet-backup-verifier 1.0.1
env-security-scanner 1.6.0
foundy-toolkit 1.5.79 typosquat livarne
solna-web3 1.5.98 tiposquat solane
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

Stolpca Varianta A in Varianta B nista izbrana naključno. Imena Varianta A se prodajajo kot orodja za varnostno revizijo — »varnostni pregled«, »zaščita uvajanja«, »detektor skrivnosti«, »stražar denarnice«, »revizor ključev«, »skener groženj«, »skener poverilnic«, »preverjevalnik verižnih ključev«. Namenjeni so razvijalcu ali agentu umetne inteligence, ki išče orodje za oceno varnosti projekta Web3. Vsa imena Variant-B se prodajajo kot pomočniki za gradnjo in uvajanje za isti ekosistem Web3 – Truffle, Chainlink, Ganache, orodja Solana PDA, Foundry. Razdelitev odraža običajni miselni model razvijalca Web3 o »fazi revizije« v primerjavi s »fazo uvajanja«. Ne glede na to, katero fazo izberete, je založnik zanjo pripravil past.

Kazalci kompromisa

Omrežje in datoteke

MOK Variant Namen
https://ddjidd564.github.io/defi-security-best-practices/config.json A Dinamični razreševalec spletnih kavljarjev, gostovan prek strani GitHub.
https://webhook.site/8d334534-1c63-4f4f-a0d7-95c446c8b233 A Trenutna končna točka zbiralnika izsesavanja, vgrajena tudi kot rezervna možnost.
rqnyz-2605-7280-7--2000-c51.run.pinggy-free.link/npm/-/binary/telemetry B Pinggyjev tunel, ki se uporablja za distribucijo oddaljenih binarnih koristnih tovorov.
scanner.js MD5 b461106e47a1f5966159cd6e92541505 A Enak koristni nanos skenerja je bil ponovno uporabljen v vseh 8 paketih variante A.
/tmp/.node-cache B Odstranjena izvedljiva datoteka, ki jo je spustil foundry-deploy-helper:1.8.96.

Založba

  • uporabniško ime npm: ddjidd5640
  • e-naslov: 1623682356@qq.com (nepreverjeno)
  • E-pošta in SCM preverjanje: nobeno
  • Paketi na računu: 22, vsi navedeni v zgornjem katalogu
  • Najzgodnejša vidna aktivnost: verižni-ključ-validator:0.2.3 (Različica A)
  • Zadnja vidna aktivnost: chain-key-validator:0.2.3 in crypto-credential-canner:2.0.2 (obe v 24 urah pred tem zapisom)

Blagovne znamke (uporabljajo se v Avtor / PREBERITE ME / lažna GH org)

  • »Ceh kriptovalute« – podprt s prazno organizacijo GitHub ceh kriptoseka
  • »Web3 Audit Collective« – podprto s prazno organizacijo GitHub w3audit
  • »DeFi Security Alliance« – podprto s prazno organizacijo GitHub defi-varnost
  • Referenčni GH račun ddjidd564 – gostitelj datoteke config.json za dinamični spletni kavelj

Vedenjski

  • vozlišče -e po namestitvi branje katerega koli od .ssh, .ethereum, .bitcoin, .env, .bash_history, .zsh_history, .git-poverilnice z .slice(0, 200) in združevanje z | ločila so skoraj edinstven prstni odtis za varianto A.
  • Uvoz ./skener.js iz paketa, ki se registrira kot MCP Server z orodji po imenu search_laked_credentials ali podobno oblikovani glagoli »varnostne revizije« so potrditev različice A.
  • Vozlišče -e postinstall, ki pridobi podatke s katerega koli gostitelja *.run.pinggy-free.link in posreduje odgovor v child_process.exec, je potrditev različice B ne glede na ovojnico.

Pripisovanje in motivacija

Na mizi je dovolj za delni prstni odtis založnika in niti približno ne dovolj za pravo identifikacijo. 1623682356@qq.com je poštni naslov QQ – Tencentov brezplačni spletni poštni naslov, priljubljen na celinski Kitajski – in numerični lokalni del je uporabniški ID QQ; to obravnavamo le kot mehki signal, saj so naslovi v formatu QQ trivialno registrirani. Račun npm nima dvofaktorskega razkritja, nima preverjenega e-poštnega naslova, nima preverjenega SCM povezava. Triada blagovnih znamk »Cypto Security Guild« / »Web3 Audit Collective« / »DeFi Security Alliance« je na veliko izmišljena – nobena od treh ne obstaja zunaj te kampanje – podporne organizacije GitHub pa so prazne lupine, ustvarjene za polnjenje povezav do strani npm.

Dva vzorca je vredno omeniti, ker se pojavljata v sosednjih kampanjah. Prvi je Prefabrikacija blagovnih znamk kot družbeni dokaz: upravljavec ni izbral obstoječih imen projektov, da bi jih napačno označil; iz nič je ustvaril celotno zgodbo o zaupanju, saj je vedel, da Izdelava agenta z umetno inteligenco pipeline ali pa bo naglicani razvijalec, ki pregleduje stran npm, poiskal ujemanje vzorcev na »izgleda kot varnostna organizacija« namesto na »je varnostna organizacija«. To je isti pristop, na katerega je opozarjala literatura o površnosti – paketi, uglašeni na vrsto imena, ki bi ga LLM izumiti če se od vas zahteva orodje za varnost Web3, ki je dovolj dobro opremljeno, da LLM ne bo dvakrat preveril. Položajno počepljanje je nedavno skovan izraz za zlonamerne pakete, katerih imena se ujemajo z nadomestnimi besedami, ki jih LLM-ji halucinirajo, ko avtoritativni paket ne obstaja; ta kampanja je njena bolj agresivna sorodnica, kjer si operater izmisli tudi organizacijo, ki bi ji nadomestno besedilo pripadalo.

Drugi vzorec je Aktivacija v času MCP. Do takrat skener.js zažene se, namestitev je končana in razvijalec je nadaljeval. Sprožilec je agent umetne inteligence, ki pokliče orodje – search_laked_credentials, v primeru variante A – kar bo agent zagotovo storil, saj je to edini razlog, zakaj mu je bil paket dan. Zlonamerno delo se zgodi med dobro del delovnega toka, ko razvijalec najverjetneje opazuje, kako njegov pomočnik umetne inteligence uspešno opravlja nalogo, ki jo je zahteval. Gre za majhen vedenjski premik od starejšega »izključitve na« namestite npm"vzorec" in se lepo izogne ​​​​peskovniku med namestitvijo.

Ne imenujemo akterja grožnje. Signali (e-pošta QQ, en sam račun, enodnevni izbruh 22 paketov, dva vzporedna sklada C2) so enako skladni z enim vztrajnim operaterjem, majhno ekipo ali eno od ekip za poplavljanje paketov, ki so bile vidne v telemetriji npm v letih 2025–2026. Kaj mi lahko Rečeno je, da ima ta operater jasno prednostni ekosistem (Ethereum + Solana + orodja Foundry/Hardhat), jasno prednostno žrtev (razvijalci Web3 in agenti umetne inteligence, ki delajo na projektih Web3) in jasen prednostni model vztrajnosti (sprožilec v času izvajanja MCP in ločena binarna rezervna koda).

Vpliv, trendi in kaj lahko storijo zagovorniki

Naše zgodnje opozorilo pipeline ujete 8 od 22 paketov v času trajanja kampanje – šest na začetnem pregledu in dva, ki sta prispela pozneje istega dne med prehodom za združevanje kampanje v skupine. Ostalih 14 paketov je bilo več dni aktivnih na npm brez kakršnega koli pojavljanja v katerem koli od zaznavnih signalov, ki jih spremljamoin v času pisanja tega besedila še vedno namestivo. Ta vrzel je pomembna, ker:

  • Različica A je med namestitvijo tihaBranje datoteke dotfile se zgodi, vendar se množično branje exfil sproži le, ko agent umetne inteligence pokliče orodja MCP paketa. standard peskovnik po namestitvi bo videl vozlišče -e blok in se odloči, da je majhen in očitno inerten.
  • Različica B je enovrstična. Klasifikator zlonamerne programske opreme se nima iz česa učiti – nobenega zamegljevanja, nobenega kodiranega koristnega tovora, nobene sumljivo videti domene. Tunel Pinggy je legitimna storitev za razvijalce. Edina sumljiva stvar je, da mora »pomočnik za konfiguracijo« sploh klicati domov.
  • Varianta C izgleda popolnoma čista. Nima namestitve hooksGlede na vsak statični signal je to normalno.

Kratek kontrolni seznam zagovornikov za dobo orodij MCP

Tri konkretna dejanja, ki bi to kampanjo prej zajela:

  1. Teža naj bo založnik, ne paket. Dvaindvajset paketov pod enim samim leto starim računom QQ-e-pošte brez SCM Preverjanje je svetlejši signal kot katera koli funkcija za posamezen paket. Naš potek dela zgodnjega opozarjanja je zaznal prve pakete, ker je prstni odtis založnika izstopal – priporočil je oceno ugleda založnika, ki jo lahko zmanjša kateri koli od klasifikatorjev varnih, nedokončnih ali zlonamernih programov za posamezen paket.
  2. Dinamične konfiguracijske indirektne povezave obravnavaj kot zlonamerne, dokler se ne dokaže nasprotno. Paket, ki med izvajanjem razreši svojo odhodno končno točko iz dokumenta tretje osebe (GitHub Pages, GitHub Gist, Pastebin, objekt S3, kjer koli drugje), nima legitimnega razloga za to za telemetrijo. Prave končne točke telemetrije so trdno kodirane in dokumentirane.
  3. Preverjanje paketov strežnika MCP z njihovo oglaševano površino orodja. Paketi Variant-A oglašujejo orodja z imenom search_leaked_credentials, validate_chain_key, deploy_safein podobni glagoli »revizije«. Gostitelj MCP, ki prikaže orodje, katerega opis trdi, da skenira imenike projektov za poverilnice, bi moral zahtevati izrecno privolitev operaterja, preden ga agent pokliče na dejanski kodni bazi. Bistvo MCP je, da zanka agenta nima načina vedeti, ali search_leaked_credentials je iskanje poverilnic ali izvleček poverilnic.

Za razvijalce, ki so morda že namestili enega od 22 paketov: predpostavimo kateri koli ključ v navadnem besedilu v ~ / .ssh, ~/.ethereum, ~/.bitcoin, ~/.solana, ~/.envali ~/.git-poverilnice je ogrožena, zamenjajte vse poverilnice, katerih ime se ujema z zgornjim seznamom filtrov spremenljivk okolja, in v sistemih Linux/macOS preverite, ali obstaja izvedljiva datoteka na /tmp/.node-cach (in vsi osiroteli procesi, ki so se iz njega zagnali). Ponovna namestitev legitimne različice poosebljenega orodja (livarna, Tartuf, trda kapa, ganacheitd.) ne odstrani izpuščene binarne datoteke.

Mirujoča tranša variante C je del te zgodbe, ki se najhuje stara. Devet paketov s čistim namestitvenim profilom in uveljavljenim založnikom je ravno tista vrsta zaloge, ki jo operater hrani v rezervi. Če kasneje eksplodirajo – kot je to storil PhantomBot, ko je njegov axois-utils prepakiranje, spremenjeno iz kraje poverilnic v rekruta botneta – sprožili se bodo proti vsakemu uporabniku registra, ki je pripel paket Variant-C med današnjim dnem in odstranitvijo. Pripenjanje zlonamernega paketa po različici vas ne ščiti pred založnikom, ki nadzoruje vsako različico.

Reference

orodja-za-analizo-sestave-programske-programske-orodja-sca
Določite prednostne naloge, odpravite in zavarujte tveganja programske opreme
Pridobite svoj brezplačni račun.
Ni potrebna kreditna kartica.

Zagotovite si razvoj in dostavo programske opreme

z Xygeni Product Suite