Pentesting CI/CD Methodology
Last updated
Last updated
VCS označava Sistem za kontrolu verzija, ovaj sistem omogućava programerima da upravljaju svojim izvornim 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 sopstvene VCS platforme)
Pipelines omogućavaju programerima da automatizuju izvršavanje koda (za izgradnju, testiranje, implementaciju... svrhe) nakon što se određene radnje dese: push, PR, cron... Oni su veoma korisni za automatizaciju svih koraka od razvoja do produkcije.
Međutim, ovi sistemi moraju biti izvršeni negde i obično sa privilegovanim akreditivima za implementaciju koda.
Čak i ako neke VCS platforme omogućavaju kreiranje pipelina, u ovom odeljku ć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 koje se dodeljuju unutar ove platforme. Ovo su neki uobičajeni problemi sa VCS platformama koje napadač može zloupotrebiti:
Curenje: Ako vaš kod sadrži curenja u commit-ovima i napadač može pristupiti repozitorijumu (jer je javan ili jer ima pristup), on može otkriti curenja.
Pristup: Ako napadač može pristupiti nalogu unutar VCS platforme, on može dobiti veću vidljivost i dozvole.
Registracija: Neke platforme će dozvoliti samo eksternim korisnicima da kreiraju nalog.
SSO: Neke platforme neće dozvoliti korisnicima da se registruju, ali će dozvoliti svakome da pristupi sa validnim SSO (tako da napadač može koristiti svoj github nalog da pristupi 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 pristupio repozitorijumu na neki način.
Webhook-ovi: VCS platforme omogućavaju generisanje webhook-ova. Ako nisu zaštićeni sa nevidljivim tajnama, napadač može zloupotrebiti ove webhook-ove.
Ako nije postavljena tajna, napadač može zloupotrebiti webhook treće strane
Ako je tajna u URL-u, isto se dešava i napadač takođe ima tajnu
Kompromitacija koda: Ako zlonamerni akter ima neku vrstu pisanog pristupa repozitorijumima, on može pokušati da ubaci zlonamerni kod. Da bi bio uspešan, možda će morati da zaobiđe zaštitu grane. Ove akcije se mogu izvršiti sa različitim ciljevima:
Kompromitacija glavne grane da bi se kompromitovala produkcija.
Kompromitacija glavne (ili drugih grana) da bi se kompromitovali računari programera (jer obično izvršavaju testove, terraform ili druge stvari unutar repozitorijuma na svojim računarima).
Kompromitacija pipeline-a (proverite sledeće odeljke)
Najčešći način definisanja pipeline-a je korišćenjem konfiguracionog fajla CI-a koji se nalazi u repozitorijumu koji pipeline gradi. Ovaj fajl opisuje redosled izvršavanja poslova, uslove koji utiču na tok i postavke okruženja za izgradnju. Ovi fajlovi obično imaju dosledno ime i format, na primer - Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), i GitHub Actions YAML fajlovi smešteni pod .github/workflows. Kada se pokrene, posao pipeline-a vuče kod sa izabranog izvora (npr. commit / grana) i izvršava komande navedene u konfiguracionom fajlu CI-a protiv tog koda.
Stoga je krajnji cilj napadača da na neki način kompromituje te konfiguracione fajlove ili komande koje izvršavaju.
Put trovanja izvršavanja pipeline-a (PPE) zloupotrebljava dozvole u SCM repozitorijumu da manipuliše CI pipeline-om i izvršava štetne komande. Korisnici sa potrebnim dozvolama mogu izmeniti konfiguracione fajlove CI-a ili druge fajlove koje koristi posao pipeline-a da bi uključili zlonamerne komande. Ovo "trovanje" CI pipeline-a dovodi do izvršavanja ovih zlonamernih komandi.
Da bi zlonamerni akter bio uspešan u izvođenju napada PPE, mora biti u mogućnosti da:
Ima pisan pristup VCS platformi, jer se pipeline-ovi obično pokreću kada se iz
Chain-bench je alat otvorenog koda za proveru usklađenosti sigurnosti vašeg softverskog lanca snabdevanja na osnovu novog CIS Software Supply Chain benchmarka. Provera se fokusira na ceo proces SDLC-a, gde može otkriti rizike od vremena kodiranja do vremena implementacije.
Proverite ovaj interesantan članak o top 10 CI/CD rizika prema Cider-u: https://www.cidersecurity.io/top-10-cicd-security-risks/
Na svakoj platformi koju možete pokrenuti lokalno, pronaći ćete kako je pokrenuti lokalno kako biste je mogli konfigurisati onako kako želite da je testirate.
Gitea + Jenkins laboratorija: https://github.com/cider-security-research/cicd-goat
Checkov: Checkov je alat za statičku analizu koda za infrastrukturu-kao-kod.