Pentesting CI/CD Methodology
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
VCS označava Sistem za kontrolu verzija, ovaj sistem omogućava programerima da upravljaju svojim izvorni kodom. Najčešći je git i obično ćete pronaći kompanije koje ga koriste na jednoj od sledećih platformi:
Github
Gitlab
Bitbucket
Gitea
Cloud provajderi (oni nude svoje VCS platforme)
CI/CD pipelines omogućavaju programerima da automatizuju izvršavanje koda za različite svrhe, uključujući izgradnju, testiranje i implementaciju aplikacija. Ovi automatizovani radni tokovi se pokreću određenim radnjama, kao što su push-ovi koda, pull zahtevi ili zakazani zadaci. Korisni su za pojednostavljenje procesa od razvoja do produkcije.
Međutim, ovi sistemi moraju biti izvršeni negde i obično sa privilegovanim akreditivima za implementaciju koda ili pristup osetljivim informacijama.
Čak i ako neke VCS platforme omogućavaju kreiranje pipelines, u ovoj sekciji ćemo analizirati samo potencijalne napade na kontrolu izvornog koda.
Platforme koje sadrže izvorni kod vašeg projekta sadrže osetljive informacije i ljudi moraju biti veoma oprezni sa dozvolama dodeljenim unutar ove platforme. Ovo su neki uobičajeni problemi na VCS platformama koje napadač može zloupotrebiti:
Leaking: Ako vaš kod sadrži leak-ove u commit-ima i napadač može pristupiti repozitorijumu (jer je javan ili jer ima pristup), mogao bi otkriti leak-ove.
Pristup: Ako napadač može pristupiti nalogu unutar VCS platforme, mogao bi dobiti veću vidljivost i dozvole.
Registracija: Neke platforme će samo omogućiti spoljnim korisnicima da kreiraju nalog.
SSO: Neke platforme neće dozvoliti korisnicima da se registruju, ali će omogućiti svakome da pristupi sa važećim SSO (tako da napadač može koristiti svoj github nalog da uđe, na primer).
Akreditivi: Korisničko ime+Lozinka, lični tokeni, ssh ključevi, Oauth tokeni, kolačići... postoji nekoliko vrsta tokena koje korisnik može ukrasti da bi na neki način pristupio repozitorijumu.
Webhook-ovi: VCS platforme omogućavaju generisanje webhook-ova. Ako nisu zaštićeni nevidljivim tajnama, napadač bi mogao da ih zloupotrebi.
Ako nema tajne, napadač bi mogao zloupotrebiti webhook treće strane
Ako je tajna u URL-u, isto se dešava i napadač takođe ima tajnu
Kompromitovanje koda: Ako zlonamerna osoba ima neku vrstu write pristupa nad repozitorijumima, mogla bi pokušati da ubaci zlonamerni kod. Da bi bila uspešna, možda će morati da obiđe zaštite grana. Ove akcije se mogu izvesti sa različitim ciljevima na umu:
Kompromitovati glavnu granu da bi kompromitovala produkciju.
Kompromitovati glavnu (ili druge grane) da bi kompromitovala mašine programera (jer obično izvršavaju testove, terraform ili druge stvari unutar repozitorijuma na svojim mašinama).
Kompromitovati pipeline (proverite sledeću sekciju)
Najčešći način definisanja pipeline-a je korišćenjem CI konfiguracione datoteke koja se hostuje u repozitorijumu koji pipeline gradi. Ova datoteka opisuje redosled izvršenih poslova, uslove koji utiču na tok i postavke okruženja za izgradnju. Ove datoteke obično imaju dosledno ime i format, na primer — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), i YAML datoteke GitHub Actions smeštene pod .github/workflows. Kada se pokrene, posao pipeline-a povlači kod iz odabranog izvora (npr. commit / grana), i izvršava komande navedene u CI konfiguracionoj datoteci protiv tog koda.
Stoga je krajnji cilj napadača da na neki način kompromituje te konfiguracione datoteke ili komande koje izvršavaju.
Putanja Poisoned Pipeline Execution (PPE) koristi dozvole u SCM repozitorijumu da manipuliše CI pipeline-om i izvršava štetne komande. Korisnici sa potrebnim dozvolama mogu modifikovati CI konfiguracione datoteke ili druge datoteke koje koristi posao pipeline-a da uključe zlonamerne komande. Ovo "otrovava" CI pipeline, što dovodi do izvršenja ovih zlonamernih komandi.
Da bi zlonamerna osoba bila uspešna u izvođenju PPE napada, mora biti u mogućnosti da:
Ima write pristup VCS platformi, jer se obično pipeline-i pokreću kada se izvrši push ili pull zahtev. (Proverite VCS pentesting metodologiju za sažetak načina dobijanja pristupa).
Imajte na umu da ponekad spoljni PR računa kao "write pristup".
Čak i ako ima write dozvole, mora biti siguran da može modifikovati CI konfiguracionu datoteku ili druge datoteke na koje se konfiguracija oslanja.
Za to, možda će morati da bude u mogućnosti da obiđe zaštite grana.
Postoje 3 vrste PPE:
D-PPE: Direktni PPE napad se dešava kada akter modifikuje CI konfiguraciju datoteke koja će biti izvršena.
I-DDE: Indirektni PPE napad se dešava kada akter modifikuje datoteku na koju se CI konfiguraciona datoteka oslanja (kao što je make datoteka ili terraform konfiguracija).
Javni PPE ili 3PE: U nekim slučajevima, pipeline-i mogu biti pokrenuti od strane korisnika koji nemaju write pristup u repozitorijumu (i koji možda čak nisu ni deo organizacije) jer mogu poslati PR.
3PE Injekcija komandi: Obično, CI/CD pipeline-i će postaviti promenljive okruženja sa informacijama o PR-u. Ako tu vrednost može kontrolisati napadač (kao što je naslov PR-a) i koristi se na opasnom mestu (kao što je izvršavanje sh komandi), napadač može ubaciti komande tamo.
Poznavanje 3 vrste za toksičnost pipeline-a, hajde da proverimo šta napadač može dobiti nakon uspešne eksploatacije:
Tajne: Kao što je ranije pomenuto, pipeline-i zahtevaju privilegije za svoje poslove (pribavljanje koda, izgradnja, implementacija...) i te privilegije se obično dodeljuju u tajnama. Ove tajne su obično dostupne putem env promenljivih ili datoteka unutar sistema. Stoga će napadač uvek pokušati da eksfiltrira što više tajni.
U zavisnosti od platforme pipeline-a, napadač može morati da specificira tajne u konfiguraciji. To znači da ako napadač ne može da modifikuje CI konfiguracioni pipeline (I-PPE, na primer), mogao bi samo eksfiltrirati tajne koje taj pipeline ima.
Računanje: Kod se izvršava negde, u zavisnosti od toga gde se izvršava, napadač bi mogao biti u mogućnosti da se dalje preusmeri.
Na lokaciji: Ako se pipeline-i izvršavaju na lokaciji, napadač bi mogao završiti u internoj mreži sa pristupom više resursima.
Cloud: Napadač bi mogao pristupiti drugim mašinama u cloud-u, ali takođe bi mogao eksfiltrirati IAM uloge/token-e servisnih naloga token-e iz njega da bi dobio dalji pristup unutar cloud-a.
Mašine platforme: Ponekad će poslovi biti izvršeni unutar mašina platforme pipeline-a, koje obično su unutar cloud-a sa nema više pristupa.
Izaberi to: Ponekad će platforma pipeline-a imati konfigurisanih nekoliko mašina i ako možete modifikovati CI konfiguracionu datoteku, možete naznačiti gde želite da izvršite zlonamerni kod. U ovoj situaciji, napadač će verovatno pokrenuti reverznu ljusku na svakoj mogućoj mašini da pokuša da je dalje eksploatiše.
Kompromitovanje produkcije: Ako ste unutar pipeline-a i konačna verzija se gradi i implementira iz njega, mogli biste kompromitovati kod koji će završiti u produkciji.
Chain-bench je open-source alat za reviziju vašeg softverskog lanca snabdevanja za bezbednosnu usklađenost zasnovan na novom CIS Software Supply Chain benchmark. Revizija se fokusira na ceo SDLC proces, gde može otkriti rizike od vremena koda do vremena implementacije.
Proverite ovaj zanimljiv članak o top 10 CI/CD rizicima prema Cider-u: https://www.cidersecurity.io/top-10-cicd-security-risks/
Na svakoj platformi koju možete pokrenuti lokalno naći ćete kako da je pokrenete lokalno tako da je možete konfigurisati kako želite da je testirate
Gitea + Jenkins lab: https://github.com/cider-security-research/cicd-goat
Checkov: Checkov je alat za statičku analizu koda za infrastrukturu kao kod.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)