Napaka z enim znakom, ki je povzročila zlonamerno programsko opremo
Začelo se je s tipkarsko napako. Nekje v množičnem navalu novih funkcij in združevanja PR-jev je nekdo vtipkal @utils_core Namesto @utils-core v paket.jsonTa enojni znak ni sprožil napake. Namesto tega je tiho vnesel zlonamerni paket, podoben CI/CD zagon, s čimer se izkoristi zaupanje v pripete različice in avtomatizacija. Dobrodošli v svetu tipografskih napak v odprtokodni kodi.
Typosquatting: vektor napada, ki uspeva na podlagi človeških napak
Tipografsko prevarovanje je točno to, kar se sliši: zlonamerni akterji registrirajo pakete z imeni, ki so skoraj enaka legitimnim. V hitro spreminjajočih se okoljih to deluje, ker razvijalci zaupajo, da so njihovi paket.json in package-lock.json odražajo njihova pričakovanja. En lik je drugačen? Prav tako bi lahko bil neviden v PR razliki.
NPM ima zgodovino izkoriščanja s tipografskimi napakami. Paketi, kot so navzkrižno okolje Namesto navzkrižno okolje or tok dogodkov Zakulisna vrata so že pokazala, kako učinkoviti so lahko ti dvojniki. Ti lažni paketi pogosto prestanejo preglede preprosto zato, ker so videti pravilno in ne povzročajo takojšnjih napak med izvajanjem.
Pogoste pasti vključujejo:
- Veznjak proti podčrtaju: lodash-core vs lodash_core
- Množine: zahteva vs zahteva
- Nadomestni znaki: izraz Namesto express
Kjer package-lock.json postane slepa pega
Razvijalec popravi tipkarsko napako. Vsaj tako mislijo. Ampak do zdaj, package-lock.json je že zaklenil paket napadalca. In tu se skriva pravo tveganje.
Za razliko od paket.json, ki se ureja ročno in je deležen večjega nadzora, package-lock.json je samodejno generiran s strani NPMPosledično se pogosto obravnava kot formalnost, se preskoči ali pa se le bežno preleti. pull request ocene. Ni neobičajno, da ekipe označijo sistem kot »prehrupnega« ali pa mu brez poglobljenega pregleda implicitno zaupajo.
Napadalci to vedo. Zanašajo se na to. Ko enkrat zlonamerni paket je omenjeno zaradi tipkarske napake v paket.json, paket-zaklepanje.json zabeleži razrešeno različico. Tudi če je tipkarska napaka kasneje popravljena, lahko zlonamerni vnos ostane prisoten, razen če je datoteka zaklepanja izrecno obnovljena.
Še huje, pripenjanje različic, ki naj bi zagotavljalo doslednost, se lahko izjalovi. Napadalci lahko različico svojega lažnega paketa prilagodijo legitimnemu. Če CI/CD Če sistem slepo zaupa pripetim različicam, ne bo zaznal, da namešča paket z znano dobro številko različice, vendar iz drugega, zlonamernega vira.
Ta tiha vztrajnost je tisto, kar naredi package-lock.json tako nevarno. Zagotavlja deterministične gradnje, da, vendar tudi zagotavlja, da slab paket ostane, razen če ga ročno odkrijemo in očistimo.
CI/CDKjer zlonamerna programska oprema udari – package.json
V značilnem CI/CD pipeline, zlonamernemu paketu ni treba čakati do izvajanja. Razreši se in sproži veliko prej v toku:
Rešitev odvisnosti
Naš pipeline potegne natančne različice odvisnosti iz package-lock.json, ki zdaj vključuje tipografsko napačno napisan paket zaradi tipkarske napake v paket.json.
Faza namestitve
Med npm ci so nameščene vse odvisnosti, vključno z zlonamerno. Brez opozoril, brez pozivov, samo tiha namestitev.
Izvajanje skripta po namestitvi
Podobni paket vključuje skript po namestitvi, ki se samodejno zažene po končani namestitvi. Tukaj pride do vdora.
Primer psevdokod:
Opis psevdokod:
Med fazo namestitve, če je prisoten kavelj življenjskega cikla po namestitvi, lažni paket sproži svojo skrito logiko – pogosto še preden se gradnje ali testi sploh zaženejo. To lahko vključuje pošiljanje zunanjih zahtev, vstavljanje zadnjih vrat ali druga nepooblaščena dejanja.
⚠️ Opozorilo: Ta psevdokoda je namenjena zgolj demonstracijskim namenom in se je ne sme uporabljati v resničnih okoljih.
Nobeno opozorilo se ne sproži. Nič ne odpove. Okolje je že ogroženo, preden vaše pipeline celo pride do faze testiranja.
Odkrijte razliko, preden bo prepozno
Pogosta napaka: predpostavka paket.json pove celotno zgodbo. Ne pove. Prava moč je v kombinaciji package.json + package-lock.json.
Tukaj je treba iskati:
- Ali package-lock.json vključujejo nepričakovane pakete?
- Ali kakšne odvisnosti izvirajo iz neznanih registrov ali imajo nenavadne obsege?
- Ali so številke različic preveč specifične ali napačno poravnane?
Uporabite orodja CLI, kot so:
- revizija NPM označiti znane težave
- npm ls za ogled celotnega drevesa odvisnosti
- diff primerjati različice med paket.json in package-lock.json
Utrdi svoje PipelineObramba, ki deluje
Za zaščito pred tipkanjem:
- Uveljavi omejitve obsega v paket.json.
- Dodaj predzdružitev hooks za lint in potrjevanje odvisnosti.
- Uporaba npm ci da se izognete nenamernemu premiku različice.
- Redno skenirajte package-lock.json za anomalije.
In kar je najpomembneje: z nepreverjenimi vnosi ravnajte package-lock.json kot potencialna tveganja. Vsak commit je treba obravnavati kot kontrolno točko dobavne verige.
Samodejno zaznavanje: Kako pomagajo orodja, kot je Xygeni
Čeprav niso čarobna rešitev, avtomatizirana orodja, kot je Ksigeni igrajo ključno vlogo pri zmanjševanju faktorja človeških napak, na katerem uspevajo tipografske napake. Xygeni se neposredno integrira v vaš DevOps potek dela in doda plast zaščite v realnem času pred ugrabitvijo odvisnosti, še preden se ta sploh izvede.
Takole pomaga Xygeni:
- Zaznavanje sumljivih imen paketov:
Uporablja pametno hevristiko za zaznavanje vzorcev tipkanja v paket.json, pri čemer iščejo manjše različice v znanih imenih paketov (kot so dodani podčrti, transpozicije ali zamenjave črk). - Preverjanje neznane zgoščene vrednosti:
Primerja zgoščeno vrednost vsake odvisnosti v package-lock.json v primerjavi z bazo podatkov znanih in dobrih artefaktov iz zaupanja vrednih registrov. Tudi če ime in različica paketa izgledata v redu, neujemanje zgoščevalne vrednosti sproži rdečo zastavico. - Blokiranje pred gradnjo:
Prestreže in blokira namestitev vseh nepreverjenih ali sumljivih paketov, preden dosežejo namestitveno ali postinstalcijsko fazo v CI/CD pipeline. - Analiza grafa odvisnosti:
Neprekinjeno pregleduje celotno drevo odvisnosti za poskuse posrednih tipografskih napak ali zlonamerne tranzitivne odvisnosti. - Opozorila in poročanje:
Zagotavlja podrobna in uporabna opozorila, ki prikazujejo, kaj je bilo označeno, zakaj in od kod prihaja v verigi odvisnosti.
Ker ekosistemi paketov postajajo vse bolj zapleteni, postajajo orodja, kot je Xygeni, bistvena. Ročni pregled se ne more skalirati z naraščanjem odvisnosti ali hitrimi iteracijami. Xygeni vstopi v avtomatizacijo kritičnih preverjanj, ki so sodobna. pipelinepotreba, s čimer se zmanjša vrzel med zaupanjem in preverjanjem.
En lik. Resnične posledice.
To ni bila eksotika Zero-DayŠlo je za tipkarsko napako. En napačno postavljen znak v paket.json, tiho okrepljeno z package-lock.jsonin zlonamerna programska oprema je bila samodejno poslana med rutino CI/CD teči.
To je prava nevarnost tipografskih napak: ne potrebuje kompleksnosti. Izkorišča hitrost, zaupanje in avtomatizacijo. Temu kompromisu bi se lahko izognili z ustreznimi kontrolami:
- Samodejno skeniranje za odkrivanje sumljivih imen in različic paketov pred namestitvijo.
- Nadzor zaklepnih datotek za odkrivanje nepregledanih ali nepričakovanih vnosov v package-lock.json.
- Hevristika preverjanja imena označiti skorajšnja ujemanja z zaupanja vrednimi paketi.
En sam znak je bil dovolj. Pravilna preverjanja bi ga ustavila, še preden bi se dotaknil tvojega. pipelineZaupanje ni dovolj. V sodobnih DevSecOps sistemih vse preverite ali pa tvegate vse.




