Pentesting CI/CD Methodology
Last updated
Last updated
VCS staan vir Version Control System, hierdie stelsels stel ontwikkelaars in staat om hul bronkode te bestuur. Die mees algemene een is git en jy sal gewoonlik maatskappye vind wat dit gebruik op een van die volgende platforms:
Github
Gitlab
Bitbucket
Gitea
Wolkmakelaars (hulle bied hul eie VCS-platforms aan)
Pyplyne stel ontwikkelaars in staat om die uitvoering van kode te outomatiseer (vir bou, toets, implementering... doeleindes) nadat sekere aksies plaasvind: 'n druk, 'n PR, cron... Hulle is baie nuttig om alle stappe van ontwikkeling tot produksie te outomatiseer.
Hierdie stelsels moet egter êrens uitgevoer word en gewoonlik met bevoorregte legitimasie om kode te implementeer.
Selfs al laat sommige VCS-platforms toe om pyplyne te skep, gaan ons in hierdie gedeelte slegs potensiële aanvalle op die beheer van die bronkode analiseer.
Platforms wat die bronkode van jou projek bevat, bevat sensitiewe inligting en mense moet baie versigtig wees met die verleen van toestemmings binne hierdie platform. Hier is 'n paar algemene probleme wat voorkom by VCS-platforms wat 'n aanvaller kan misbruik:
Lekke: As jou kode lekke bevat in die commits en die aanvaller toegang tot die bewaarplek het (omdat dit openbaar is of omdat hy toegang het), kan hy die lekke ontdek.
Toegang: As 'n aanvaller toegang tot 'n rekening binne die VCS-platform kan kry, kan hy meer sigbaarheid en toestemmings verkry.
Registrasie: Sommige platforms sal slegs eksterne gebruikers toelaat om 'n rekening te skep.
SSO: Sommige platforms sal nie gebruikers toelaat om te registreer nie, maar sal enigeen toelaat om toegang te verkry met 'n geldige SSO (sodat 'n aanvaller byvoorbeeld sy github-rekening kan gebruik om toegang te verkry).
Legitimasie: Gebruikersnaam+Pwd, persoonlike tokens, ssh-sleutels, Oauth-tokens, koekies... daar is verskeie soorte tokens wat 'n gebruiker kan steel om op een of ander manier toegang tot 'n bewaarplek te verkry.
Webhooks: VCS-platforms maak dit moontlik om webhooks te genereer. As hulle nie beskerm word met nie-sigbare geheime nie, kan 'n aanvaller dit misbruik.
As daar geen geheim is nie, kan die aanvaller die webhook van die derde party-platform misbruik
As die geheim in die URL is, gebeur dieselfde en die aanvaller het ook die geheim
Kode-kompromie: As 'n kwaadwillige aktor enige soort skryftoegang oor die bewaarplekke het, kan hy probeer om kwaadwillige kode in te spuit. Om suksesvol te wees, moet hy dalk takbeskerming omseil. Hierdie aksies kan met verskillende doelwitte uitgevoer word:
Kompromitteer die hooftak om produksie te kompromitteer.
Kompromitteer die hooftak (of ander takke) om ontwikkelaars se masjiene te kompromitteer (aangesien hulle gewoonlik toets, terraform of ander dinge binne die bewaarplek op hul masjiene uitvoer).
Kompromitteer die pyplyn (sien volgende afdeling)
Die mees algemene manier om 'n pyplyn te definieer, is deur 'n CI-konfigurasie-lêer wat in die bewaarplek waarop die pyplyn gebou word, gehuisves word. Hierdie lêer beskryf die volgorde van uitgevoerde take, voorwaardes wat die vloei beïnvloed, en instellings vir die bou-omgewing. Hierdie lêers het tipies 'n konsekwente naam en formaat, byvoorbeeld — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), en die GitHub Actions YAML-lêers wat onder .github/workflows geleë is. Wanneer dit geaktiveer word, haal die pyplyn-taak die kode van die gekose bron (bv. toewysing / tak), en voer die opdragte uit wat in die CI-konfigurasie-lêer teen daardie kode gespesifiseer is.
Daarom is die uiteindelike doel van die aanvaller om op een of ander manier daardie konfigurasie-lêers of die opdragte wat hulle uitvoer te kompromitteer.
Die Vergiftigde Pyplynuitvoering (PPE) pad maak gebruik van toestemmings in 'n SCM-bewaarplek om 'n CI-pyplyn te manipuleer en skadelike opdragte uit te voer. Gebruikers met die nodige toestemmings kan CI-konfigurasie-lêers of ander lêers wat deur die pyplyn-taak gebruik word, wysig om skadelike opdragte in te sluit. Dit "vergiftig" die CI-pyplyn, wat lei tot die uitvoering van hierdie skadelike opdragte.
Om suksesvol 'n PPE-aanval uit te voer, moet 'n kwaadwillige aktor in staat wees om:
Skryftoegang tot die VCS-platform hê, aangesien pyplyne gewoonlik geaktiveer word wanneer 'n druk of 'n pull-aanvraag uitgevoer word. (Sien die VCS pentesting-metodologie vir 'n opsomming van maniere om toegang te verkry).
Let daarop dat 'n **eksterne PR as "skryftoeg
Chain-bench is 'n oopbron-gereedskap vir die oudit van jou sagteware-voorsieningskettingstapel vir sekuriteitsnakoming gebaseer op 'n nuwe CIS Software Supply Chain-norm. Die ouditering fokus op die hele SDLC-proses, waar dit risiko's vanaf koodetyd tot implementeringstyd kan blootstel.
Lees hierdie interessante artikel oor die top 10 CI/CD-risiko's volgens Cider: https://www.cidersecurity.io/top-10-cicd-security-risks/
Op elke platform wat jy plaaslik kan hardloop, sal jy vind hoe om dit plaaslik te begin sodat jy dit kan konfigureer soos jy wil om dit te toets
Gitea + Jenkins-laboratorium: https://github.com/cider-security-research/cicd-goat
Checkov: Checkov is 'n statiese koodanalise-gereedskap vir infrastruktuur-as-kode.