Edellisessä jaksossa Avoimen lähdekoodin haittaohjelmapaketit: Ongelma, keskustelimme siitä, miksi uhkatoimijat olivat niin innostunut julkaisemaan uusia haitallisia komponentteja tai lisäämään haittaohjelmia olemassa olevien komponenttien uusimpiin versioihin: Avoimen lähdekoodin infrastruktuuri mahdollistaa kenen tahansa missä tahansa luoda lyhytaikaisen tilin komponenttirekisterissä (kuten NPM, PyPI, Docker Hub tai Visual Studio Marketplace) tai yhteistyökehitysalustalla (kuten GitHub). Nolla kustannuksia ja monia mahdollisuuksia hyödyntää ohjelmistotiimien perinteisesti kolmansien osapuolten komponentteihin kohdistamaa ylimääräistä luottamusta.
Epätasapaino hyökkääjien jakamien haittaohjelmien levittämisen helppouden ja ohjelmistoja kehittävien organisaatioiden (kaikkien?) vaikeuden välillä välttää haittaohjelmatartuntaa (ja toimittaa haittaohjelmia muille jakamansa ohjelmiston mukana) johti siihen, että viime vuonna lähes neljännesmiljoonan haitallisen paketin raja saavutettiin.
Tämä on niin laaja ongelma, ettei yksikään organisaatio pysty ratkaisemaan sitä, ja yhteisö on parhaillaan uudistamassa avoimen lähdekoodin prosessia luottamuksen, oletusarvoisen ja sisäänrakennetun turvallisuuden periaatteiden sekä komponenttien elinkaaren osalta. Tarkastelemme näitä ideoita seuraavassa jaksossa. Suojautuminen avoimen lähdekoodin haittaohjelmilta: Mikä toimii (ei toimi).
Muista, että puhumme ohjelmistokomponenteista, jotka useimmiten vastaavat ohjelmistopaketituudelleenkäytettävät komponentit, jotka on pakattu siten, että niihin voidaan viitata riippuvuuksina ohjelmistomanifestissa, ja ne asennetaan paketinhallintaohjelmalla tai koontityökalulla. Huomaa, että tätä tapausta voidaan laajentaa koskemaan julkisia kontti kuvat (käytetään konttien suoritusympäristöissä ja orkestrointialustoilla, kuten Kubernetesissa), ja ohjelmistotyökalujen laajennukset (rakentamiseen, automatisointiin ja käyttöönottoon).
Tässä analysoimme, miten tämä haitallisiin komponentteihin perustuva hyökkäystaktiikka toimii aiempien esimerkkien ja haittaohjelmien varhaisvaroitusalustallamme havaitsemamme perusteella (MEW). Analysoimme haitallisia komponentteja eri ulottuvuuksissa:
(1) valittu jakelutapa (käytetty rekisteri uudessa vai olemassa olevassa komponentissa ja julkaistun komponenttiversion tartuttamiseen käytetty tekniikka), (2) miten haittaohjelma aktivoituu tai laukeaa, (3) haitallinen käyttäytyminen eli mitä haitallisia toimia havaitaan ja mikä on hyökkääjän motiivi, (4) mitkä tekniikat ovat yleisiä hämärtämiseen, piiloutumiseen huomaamatta jäämiseksi, sivuttaisliikkeeseen, viestintään komento- ja ohjausjärjestelmien (C2) kanssa jne.; ja (5) tekniikat, joilla saavutetaan riittävä suosio ja luottamus, jotta uhrit päätyvät asentamaan komponentin.
Valittu jakelumekanismi
Havaitsemme "taustamelu”yksinkertaisista haitallisista paketeista, jotka käyttävät kirjoitusvirheitä huijatakseen varomattomia kehittäjiä, joiden riippuvuuden paketin nimessä on kirjoitusvirhe. Monet suositut paketit saavat tulvan samalla tavalla nimettyjä paketteja, joissa on kirjoitusvirheitä, sillä odotuksella, että ne huijaavat varomattomia kehittäjiä.
He käyttävät lyhytaikaista tiliä, julkaisevat joukon typosquat-paketteja, luovat toisen ja julkaisevat kolmannen ryhmän… Käyttämällä automaatiota ja kekseliäisyyttä he voivat saavuttaa jonkin verran hienostuneisuutta, mutta tyypillisesti ne ovat melko triviaaleja. Kutsumme niitä sisäisesti ”anjovista”. Valtuustietojen varastaminen on päätavoite, mutta toisinaan löydämme vakoiluohjelmia, jotka varastavat lähdekoodia tai arkaluonteisia tietoja, kuten henkilötietoja (PII), leikepöydän tietoja ja muita epäilyksiä.
Yllättäen näemme kehittyneempiä haittaohjelmia, ”haita”. Vähemmistö on kohdistettu tiettyihin ryhmiin tai organisaatioihin, tyypillisesti kryptovaluuttojen tyhjentäjillä tai verkkoskannereilla, jotka aktivoidaan ehdollisesti, ehkä samalla tavalla kuin aiemmin nähty lähestymistapa. tapahtumavirran tapaus hyökkäyksen hyötykuorman salauksen purkamisen vain silloin, kun pakettiin viitataan kohdepaketista.
Jakautumismekanismia analysoitiin erinomaisessa ja nykyään klassikkona tunnetussa artikkelissa ”Backstabber's Knife Collection: Katsaus avoimen lähdekoodin ohjelmistojen toimitusketjuhyökkäyksiin”, joka on pakko lukea. Olet varmasti nähnyt tämän hienon kaavion aiemmin:
Kaikkia keinoja tutkittiin, mukaan lukien uudet ja olemassa olevat paketit; lähdekoodiin, koontijärjestelmään tai itse pakattuun komponenttiin vaikuttaminen; varastettujen tunnistetietojen tai sosiaalisen manipuloinnin käyttö; hylättyjen tilien ja arkistojen kaappaaminen tai ylläpidettyjen tilien myrkyttäminen. Joillekin hyökkäyksille annettiin nimiä (typosquatting, Riippuvuussekavuus, Ilmeinen hämmennys, Repo-tunkkausjne.) ja niistä on jo keskusteltu muualla.
Entä valitut rekisterit?
NPM on edelleen johtava haitallisten pakettien kokonaismäärässä, mutta PyPI:ssä havaittiin piikki tänä vuonna alkaen. Python on suosittu ekosysteemi datatieteelle ja koneoppimiselle. Itse asiassa haittaohjelmien tiheys on nyt suurempi PyPI:ssä kuin NPM:ssä.
Miten haittaohjelma laukeaa
Haitallisia paketteja laukeaa asennuksen aikana vain 4 tapauksessa 10:stä (viime vuosina luku oli lähes 6 tapausta 10:stä). Loput suorittavat haitallista toimintaa suorituksen aikana, ja yksi tapaus 100:sta laukesi testien suorittamisen aikana. Vastustajat näyttävät tietävän, että asennusskriptien hallitsematon suorittaminen oli poistettu käytöstä monissa paikoissa.
Mitä pahat pojat saavat?
Listaamme haitallisen käyttäytymisen kategoriat suosituimmista alkaen. Huomaa, että vaikutukset voivat olla melko erilaisia: a pyyhin on itsepäisesti tuhoisa, mutta se ei ole yleistä ja sitä on nähty vain muutamissa tapauksissa, jotka liittyivät kohdennettuihin kybersodan kampanjoihin tai raa'aan haktivismiin. Seuraavat kategoriat ovat melko yleisiä:
- InfoStealer / Credentials DrainerYlivoimaisesti yleisimmät, yli 90 %, yksinkertaisista hyökkäyksistä ovat yksinkertaisia varastushyökkäyksiä, jotka etsivät pääasiassa tunnistetietoja, kuten salasanoja, käyttöoikeustunnuksia, API-avaimia ja yksityisiä avaimia (SSH:ta ja vastaavia varten). Se on luultavasti yksinkertaisin kirjoittaa (yhdessä pyyhkijöiden kanssa?). Ne luetteloivat tunnettuja tiedostoja/hakemistoja ja muita lähteitä (esim. rekisteriavaimia), pakkaavat sisällön ja lähettävät tiedot C2-palvelimelle. Idea on yksinkertainen: "Julkaisen tietojenkalastelutunnistetietojen varastushyökkäyksen, jotta voin myöhemmin käyttää tunnistetietoja suunnatun hyökkäyksen käynnistämiseen".
Havaittu C2-verkostoituminen on tyypillisesti halpaa ja likaista, kuten Telegram-kanavat tai ngrokin kaltaiset tunnelointityökalut (usein VPN-ulostulo-IP-osoitteiden kautta paljastuvien käänteisten välityspalvelimien muodossa). Mahdollisuuksia on satoja (!), ja monet GitHub-projektit ovat osa salasanan varastaja -aiheErikoistumisohjelmat, kuten näppäinpainallusten tallentajat, ovat harvinaisia haitallisissa paketeissa ja säilökuvissa, mutta yleisempiä työkalulaajennuksissa, joissa odotetaan käyttäjän toimia.
- Tiputtaja / LataajaToiseksi suosituin, tyypillisesti ensimmäiseksi monivaiheisissa hyökkäyksissä. Yli joka kolmas haitallinen komponentti sisältää droppereita (jos haitallinen hyötykuorma sisältyy pakettiin) tai latausohjelmia (hyötykuorma ladataan päätepisteestä hyökkääjän hallinnassa). Hyötykuorma on usein tunnettu binäärihaittaohjelman variantti, ja sitä ajetaan ja joskus säilytetään takaporttien, vakoiluohjelmien, kryptovaluuttojen tyhjentäjien ja muiden käyttötapausten asentamista varten. Ladattu tai käyttöönotettu hyötykuorma aloittaa toisen vaiheen hyökkäyksen olemassa olevien haittaohjelmabinaarien tarjoamalla teholla. Binaarit voidaan jakaa paketin sisällä, usein naamioituna kuviksi tai oletettavasti harmittomiksi tiedostotyypeiksi, jotta vältetään havaitseminen yhdistettäessä odottamattomiin sivustoihin.
- Kryptovaluuttojen varastajat / louhijatTaloudellisesti motivoituneet vastustajat ovat valmiita käyttämään pilviresurssejasi kryptolouhintaohjelmien suorittamiseen (he jopa havaitsevat, jos ne toimivat pilvivirtuaalikoneessa). Heitä ei kiinnosta alhainen voittosuhde 1 dollari jokaista uhrilta varastetusta pilvi-infrastruktuurista veloitettua 53 dollaria kohden. Uhrit eivät välttämättä ole tietoisia tästä, ennen kuin he saavat odottamattoman laskun. Onneksi tämä tulee ja menee. Cryptojacking haitallisten pakettien kampanjat ilmestyvät toisinaan ja katoavat sitten, huijaten lompakon käyttäjiä tai lopulta kohdistaen ne lompakon tarjoajaan, kuten Ledger-hyökkäys.
Muut käyttäytymismallit, kuten käyttöönotto takaoven etäkoodin suorittaminen avaamalla käänteinen komentotulkki on nykyään harvinaisempaa kuin ennen. Esimerkiksi 123rf_avustaja_verkkosivu paketti (nyt poistettu rekisteristä) avautuu ilman hämärrystä käänteisen komentotulkin avulla, joka on kopioitu ja liitetty rekisteristä Käänteinen kuoren huijausarkki:
Laillisten ja haitallisten komponenttien lisäksi olemme havainneet useita väärinkäytöksiä, mukaan lukien:
Roskapostipaketit
On olemassa tuhansia pieniä paketteja, enimmäkseen NPM:ssä, joissa ei ole haittaohjelmia, mutta jotka lupaavat helppoa ansiota, käärmeöljyä, linkkejä Viagra-tarjouksiin ja kaikkea sellaista. Muutamat käyttäjät julkaisevat tällaista roskapostia ja kuluttavat paljon kaistanleveyttä rekisteristä. Toinen(t) toimija(t) mahdollisesti Indonesiasta yrittivät saada hyötyä... väärinkäyttää teetäRank tarkoitettu avoimen lähdekoodin kehittäjien palkitsemiseen luomalla kymmeniätuhansia toisiinsa liittyviä NPM-paketteja niihin liittyvine GitHub-mallirepositorioineen. Tämä on selkeä käyttöehtojen rikkomus.
Bug bounty- ja tietoturvatutkimushuijaukset
Kun paketti kuvailee itseään tiedon kerääjänä hyviä tarkoituksia varten, kuten tietoturva-aukkojen havaitsemiseksi bug bounty -ohjelmia varten tai ekosysteemin tiettyjen osa-alueiden tutkimiseksi, olemme nähneet tuhansia paketteja tässä kategoriassa, jotka hakevat tunnistetietoja, mutta eivät liian arkaluontoisia tietoja Burp Collaborator -osoitteeseen PortSwiggeristä (esim. isäntä oastify.com-verkkotunnuksessa). Havaitsimme usein kopioita... Riippuvuussekavuus Alex Birsanin konseptitodistus, kuten aurora-webmail-pro paketti (poistettu rekisteristä), joka yksinkertaisesti suorittaa tämän ikävän koodin esiasennusskriptissä:
Ja sisälsi myös "Tämä on yksinkertainen riippuvuushyökkäys, joka todistaa konseptin toimivuuden.” vastuuvapauslausekkeen kuvaus package.jsonTämä on selkeä käyttöehtojen rikkomus, vaikka sillä ei olisikaan pahansuopaisuutta.
Hyviä uutisia? Emme ole (vielä) nähneet kiristysohjelmahyökkäyksiä haitallisten komponenttien kautta. Tuntemattomista syistä kyberrikolliset näyttävät suosivan perinteisempiä sähköpostipohjaisia tietojenkalasteluhyökkäyksiä, RDP-pohjaisia ja automaattisia latausmekanismeja.
Lisähavaitut tekniikat
Monia tekniikoita käytettiin pysyvyyteen, puolustuksen väistelyyn, tiedonkeruuseen, viestintään komento- ja ohjausyksiköiden kanssa ja soluttautumiseen.
Sitkeys Haitallisten komponenttien suojaus saadaan käyttämällä toisen vaiheen binäärihaittaohjelman pysyvyysominaisuuksia, mutta joskus toiminta sijaitsee paketin koodissa, ja yleisimpiä ovat ajoitetut tehtävät ja Windowsin rekisterin muutokset.
obfuscation on yleinen, mutta yksinkertainen. Useimmat kirjoitusvirheitä aiheuttavat paketit (muista ”anjovista”?”) eivät käytä lainkaan obfuskaatiota; monet käyttävät joko triviaaleja (base64/heksadesimaalikoodausta tai substituutiosalauksia, kuten rot13) tai käyttävät saatavilla olevia koodin obfuskaattoreita ja minifiointia, joka on helposti kumottavissa oikeilla työkaluilla. Vain ”hait” tekevät todellista, perusteellista obfuskaatiota, jota on vaikea takaisinmallintaa.
Hämärtäminen voi piilottaa hyökkäyksen, mutta miksi avoimen lähdekoodin komponentin koodia pitäisi hämätä? Onko olemassa todisteita siitä, että jokin pitäisi piilottaa näkyviltä? Olemme löytäneet monia esimerkkejä ei-haitallisista paketeista, jotka käyttävät hämärtämistä suojatakseen immateriaalioikeuksia, mikä on ristiriidassa "avoimen lähdekoodin" kanssa. Hämärtämistä voidaan käyttää todisteena haittaohjelmasta, mutta se ei ole lopullinen todiste. Sitä on myös vaikea selvittää.
Välttely puolustusmekanismeista omaksuu yksinkertaisia tekniikoita. Haittakoodi on usein suojattu yritä … saalis lohkot, jotka jättävät huomiotta kaikki poikkeukset, joten epänormaalia toimintaa ei näytetä lokeissa. Ympäristön (virtuaalikoneessa tai säilössä) varmennus on harvinaista, ellei kyseessä ole tiettyyn organisaatioon tai ympäristöön kohdistuva haittaohjelma.
Binääritiedostojen naamiointi kuviin ja PDF-tiedostoihin (eräänlainen steganografia) oli toinen tekniikka, jolla nähtiin välttyvän havaitsemiselta.
Koska yleisimmät haitalliset komponentit ovat infostealers-ohjelmia, tiedonkeruu on välttämätöntä. Salaisuuksia (salasanoja, käyttöoikeustunnuksia, API-avaimia, kryptografisia avaimia) skannataan rutiininomaisesti lokitiedostoista, ympäristömuuttujista ja jopa leikepöydältä (nähty pankkitroijalaisten ja kryptovaluuttojen varastajien kohdalla). Lähdekoodin vuotaminen on myös yleistä, koska paketin asennus tapahtuu usein kehityssolmussa, jossa sisäisiä git-repositorioita saatetaan kloonata. Olemme nähneet pakettien luetteloivan hakemistoja etsiessään git-repositorioita. Sijaintien, kuten .env, private.pem, settings.py, app.js tai application.properties, etsiminen on melko yleistä.
Tietojen purku on toinen laajalti käytetty toiminto. Vain pieni osa haitallisista paketeista edes yrittää piilottaa purettujen tietojen määränpäätä. Telegram-kanavat ja ngrokin kaltaiset tunnelit käytetään usein. Ja niitä on monia tyypillisesti valkoiselle listalle listattuja verkkotunnuksia, joita käytetään eksfiltraatioon.
Muut tekniikat, kuten etuoikeuksien eskalointi tai sivuttaisliike, olivat harvinaisempia.
Suosion ja luottamuksen saavuttaminen
Kuvittele teknologiarikollinen, jolla on valmiiksi keksitty tappavan pahaenteinen juttu ja joka miettii: "Miten teen tästä paskanjauhannasta luotettavan noille tietämättömille idiooteille?".
Tämä tarkoittaa sitä, miten haitallisen komponentin merkintä saadaan näyttämään useita tähtiä / haaraumia (suosion mukaan) sekä versioita / ongelmia ja pull requests (aktiivisuutta varten). Ajatuksena on saada kuvitteellista suosiota (tähtiä) ja huollettavia sekä vakuuttava vaikutelma merkityksellisyydestä ja ylläpidosta.
Rekisteri ei tarkista, vastaavatko GitHub-projektin sisältö ja paketin sisältö toisiaan.Tämä on tunnettu ongelma ohjelmistojen toimitusketjussa. Julkiset rekisterit ovat jättimäisiä sinkkelia, jotka nielevät kaiken niille heitetyn. Voit linkittää minkä tahansa repositorion.
Jos haitallinen paketti kirjoitusvirheellisesti peittää suositun paketin, se on helppoa: viittaa vain olemassa olevaan GitHub-repositorioon paketin luomiseen ja sen rekisteriin julkaisemiseen käytetyssä riippuvuusmanifestissa. Uusien pakettien luomiseen väärennetyssä GitHub-repositoriossa saatat tarvita enemmän kekseliäisyyttä, ehkä luomalla väärennettyjä tähtienkatselu/haarautuminen GitHub-tilit skriptauksen kautta.
Ja jos pakettisi sisältö on kohtuullisen samanlainen kuin repositorion sisältö, lisää pari hyvin suunniteltua muutosta sinne tänne... Voit lisätä haittaohjelmasi uuteen, suosittua pakettia muistuttavaan pakettiin, joka viittaa olemassa olevan repositorioon, ja odottaa kirjoitusvirheitä. Jos joku uskaltaa verrata paketin tarball-tiedoston sisältöä GitHub-repositorion sisältöön, haittaohjelmien lisäyskohtien erot voivat helposti jäädä huomaamatta. Olemme nähneet tämän lähestymistavan monta kertaa aiemminkin.
Olisi tervetullutta, jos komponenttiin liittyisi peukalointia estävä merkintä alkuperästä, pakkauksen valmistustavasta, lähteistä ja valmistajasta. Mutta se onkin toinen tarina.
Onko komponentti X haittaohjelma?
Onko olemassa (kattavaa) tietokantaa haitallisista paketeista? Ei. Avoimen lähdekoodin haavoittuvuuksille on annettu CVE-tunnus, mutta vain muutamille haitallisille paketeille (erityisesti otsikoihin nousseille) annetaan sellainen. Haitallisten pakettien CVE-tunnus on CWE-506 (upotettu haitallinen koodi).
Tavalliset haittaohjelmatyökalut (VirusTotal, MalwareBazaar, SOREL-20M…) eivät tarjoa erityisiä suojausvaihtoehtoja haitallisille komponenteille. Se olisi tervetullutta!
Tutkimuskäyttöön on olemassa esimerkkitietokantoja ja analyysiaineistoja (käytämme niistä muutamia), mutta merkintöjä päivitetään vasta, kun haitallinen paketti tiedetään, mikä on usein liian myöhäistä. Jos olet kiinnostunut, OpenSSF Haitalliset paketit on mukava alku.
Seuraavassa viestissä käsittelemme sitä, miten tietyn paketin haitallisuus voidaan selvittää. Varoitus: kyllä, haitallisia komponentteja voidaan tarkistaa jo altistumisikkunan alkuvaiheessa, ennen kuin rekisteri poistaa tunnetun haitallisen komponentin.
Kirjallisuutta
Seuraavassa jaksossa ”Suojautuminen avoimen lähdekoodin haittaohjelmilta: Mikä toimii (ei toimi)" Keskustelemme avoimen lähdekoodin tietoturvan tehtävistä ja kielletyistä asioista. Useimmilla turvallisuustietoisilla ammattilaisilla on intuitiivinen käsitys siitä, miten tätä uhkaa tulisi käsitellä, mutta väärinkäsityksiä on runsaasti.
Tarkastelemme, miksi nämä ajatukset ovat virheellisiä ja miten tällaiset väärinkäsitykset lisäävät tämän hyökkäysmekanismin suosiota ja organisaatioiden kohtaamaa valtavaa riskiä. Sen jälkeen tarkastelemme, mikä toimii ja mitä vaivaa ja resursseja tarvitaan.
Aiomme myös julkaista haitallisten pakettien kehityksestä niiden tarkoituksen, injektointimekanismin ja hyökkäystekniikoiden osalta.
Pysy kanavalla!





