Entegrasyon kontinyèl ak livrezon kontinyèl (CI/CD) pipelineOtomatizasyon yo se fondasyon nenpòt òganizasyon lojisyèl ki bati lojisyèl nan yon fason "modèn". Otomatizasyon bay anpil pouvwa, men pifò devlopè yo pa pran responsablite li gen ladan l.
DeveloperWi, nou pran CI/CD sekirite seryezman epi gen yon gwo kontwòl sou moun k ap kenbe kòd yo, revize commits anvan fizyon; travay ak pipelineanplwaye siperyè yo kenbe yo, yo veye pou yo pa divilge sekrè nan pipelineEpi zouti a te enstale pa pèsonèl ki konnen bagay la. Kisa ki ka ale mal?
Chè devlopè, CI/CD Sistèm yo konplèks. Gwo sifas atak li yo te atire aktè malveyan. Li pi bon pou ou fè atansyon epi pa janm gen twòp konfyans nan tèt ou.
Konfigirasyon defo a pafwa konsève epi li vin pi bon zanmi pou entru yo. Defo kritik ka prezan nan CI/CD pipeline sous yo, nan konfigirasyon sistèm nan, oubyen alantou pwosesis la ak kontèks la pipeline ak kijan li deklanche.
Nan pòs sa a, nou pral mete tèt nou nan plas move aktè yo. Imajine nou t ap li refleksyon moun ki... M3M3N70 (Souvni Mori?) ak Raj marekaj yon kote nan dark web la, pwobableman nan yon lang ki pa oksidantal, men pa janm rate ke mal la ap gaye atravè lemond.
Nan bon tan lontan yo, li te tèlman fasil...
M3M3N70Nan bon vye tan yo, biznis nou te tèlman fasil... Pwoblèm "zero-day" yo te fasil pou jwenn, aplikasyon yo te ouvè byen laj ak vilnerabilite fasil pou eksplwate, epi nou te ka deplase lateralman byen vit.
Raj marekajF#@Help! Gen kèk moun ki gen tèt yo fou la deja, men bagay yo chanje. Gwo mesye yo te mete anpil kouraj sou bagay AppSec sa a.
M3M3N70Wi. Men, nouvo moun sòt yo se devlopè yo. Pou nou, li te pi fasil pou nou chwazi zouti mesye sa yo itilize yo. Entèlijans entegre a, an patikilye, se yon min lò! Jeton aksè nwaj yo, SCM kalifikasyon, modpas baz done pwodiksyon, kle prive SSH, kalifikasyon lòt itilizatè CI... Sote soti nan bagay devlopman raz yo pou ale nan bagay reyèl yo te yon ti jan fasil.
Otomatizasyon pou konstwi, teste ak deplwaman lojisyèl ak yon CI/CD Zouti a souvan bezwen pase sekrè bay kòmand yo pa etap. Epi byen souvan yo koule, ak konsekans grav.
Pipelinebezwen sekrè ki pafwa koule
M3M3N70: The code monkeys slipped their AWS keys in a pipeline on a GitHub commit, later they removed the thing but not changed git history. For our scripts it was trivial to scan the history, grab the key and wreak havoc.
Petèt bon tan lontan yo se te pou jwenn nan listwa Git yon .env dosye (devlopè a te bliye ajoute li nan .gitignore):
AWS_ACCESS_KEY_ID=AKIA...AWS_SECRET_ACCESS_KEY=wJalrXUtn...AWS_REGION=us-east-1APP_FOLDER=...S3BUCKET=...
ki te itilize nan yon workflow GitHub .github/deploy.yaml ki te gen yon bagay konsa ladan l:
jobs:
build:
name: Automated build and deployment into AWS
runs-on: ubuntu-22.04
steps:
# Load environment from .env file
- id: dotenv
uses: falti/dotenv-action@v1.0.2
- name: Configure AWS Credentials
uses:
with:
args: --acl public-read --follow-symlinks --delete
aws-access-key-id: $
aws-secret-access-key: $
aws-region: $
# ... build steps skipped ...
- name: Upload compiled code for deployment
working-directory: $/packaged_app
run: aws s3 cp my-app.zip s3://$
- name: Deploy the app
run: aws deploy create-deployment ...
M3M3N70: waw! Kle aws sa yo t ap mache! Nou te teste yon chanjman inosan nan aplikasyon an dabò, apre sa nou te ajoute chanjman an paske mesye yo te sanble pa okouran. Bingo! Ala yon kanpay...
Malveyan an te tou senpleman itilize kle AWS yo pou telechaje yon aplikasyon modifye ak malveyan epi answit li te egzekite kòmand deployman an ak kalifikasyon sa yo. Sekrè yo te koule, ansanm ak enfòmasyon ki nan... pipeline"Ala yon kanpay!" vle di pwobableman ke Memento te fè ravaj nan pòv viktim nan.
Sa Memento di nou la a se ke yon fwa yon flit sekrè rive, tankou kle aksè AWS nan egzanp lan, ou dwe revoke sekrè a (wote kle ki anwo yo) Menm lè aToujou gen yon fenèt ekspozisyon ant koule a commit ak invalidasyon sekrè a; Reekri istwa Git la difisil (menm eta otoritè ki pi di a te eseye reekri istwa sa a, san rezilta) e pwobableman pa efikas (zanmi nou yo te ka klone anvan depo a ak flit sekrè a commit). Vire kle yo imedyatman, epi priye pandan w ap li jounal aktivite yo pou kont sib la pandan fenèt ekspozisyon an!
Pwobableman òganizasyon yo ta dwe entèdi itilizasyon sekrè alontèm nan CI/CD pipelines, epi ranplase yo ak kalifikasyon tanporèl. Nan egzanp anvan an ak kle AWS nan aksyon GitHub yo, li pi an sekirite pou itilize yon Founisè OpenID Connect (OIDC) pou jwenn kalifikasyon pou yon ti tan ki nesesè pou aksyon yo.
Raj marekajOu te gen anpil chans! Nan tan lontan, te gen yon pratik komen pou kite script ak kle kode an dirèk, menm sou bokit S3 aksesib piblikman. Tout sa ou te bezwen fè se travèse objè yo nan bokit la epi fè kèk grepping pou jwenn bagay enteresan.
Pafwa zòn ki te itilize pou deplwaman an (yon bokit AWS S3 nan egzanp sa a) te ouvè pou moun deyò li, akòz yon defo konfigirasyon (ki pa t detekte). Kisa Raj marekaj te itilize yon bagay tankou sa a:
aws s3 ls --recursive s3://<bucket_name>/<path>/ | \
awk '{print $4}' | \
xargs -I FNAME sh -c "echo FNAME; \
aws s3 cp s3://<bucket_name>/FNAME - | \
grep '<regex_pattern>'"
Yo te pwobableman kreye bokit la nan yon modèl pwovizyonman ke yo te ka eskane otomatikman pou defo sekirite.
Konfigirasyon zouti a pa defo te tankou yon jwèt pou nou.
Pou nou bay egzanp konkrè, ann pale de Jenkins, youn nan zouti CI ki pi popilè yo.
Raj marekajÈske ou sonje kaz "Aktive Sekirite" a nan Jenkins, epi konbyen òganizasyon ki chwazi pou pa aktive li pou konvenyans? Epi sa yo "Nenpòt moun ka fè nenpòt bagay"konbinezon pèmisyon pa default? Epi plugin Jenkins anmèdan sa yo, tankou Plugin GitHub OAuthMoun ki te konfigire l la te chwazi tou de "Akòde pèmisyon READ pou tout itilizatè otantifye yo" ak "Sèvi ak pèmisyon depo GitHub yo", sa ki ban nou aksè a tout pwojè yo.
(Eskiz mwen, Jenkins, pou m mete w kòm egzanp 😉)
Rete abil (menm dejwe) nan prensip sekirite yo. Youn nan yo se Sekirize pa default prensip: kontwòl yo ta dwe itilize paramèt ki pi an sekirite posib pa defo. Sekirite ta dwe entegre nan CI/CD zouti ak pipelines depi nan baz rive anwo, olye pou yo yon bagay yo te panse apre. Men, fasilite pou itilize ak konvenyans souvan antre an konfli ak sekirite.
Pou ka Jenkins lan, otantifikasyon entegre a twò frajil: Pa janm sèvi ak mekanis otantifikasyon entegre nan Jenkins yoLi pi bon pou w chwazi yon mekanis twazyèm pati (SAML, LDAP, Google…), avèk yon plugin estrateji otorizasyon ki baze sou wòl (“RBAC”). Epi fè anpil atansyon ak... admin kont.
Pran swen kijan travay la ye epi pipeline dosye nan Jenkins yo jere. Menm bagay la tou ak Plugin konfigirasyon-kòm-kòd ak fichye konfigirasyon li yo, ki aplike nan konfigirasyon Jenkins lan.
Soti nan yon sistèm otonòm CI/CD Sistèm SaaS ki baze sou nwaj la elimine kèk risk potansyèl ki pèmèt mouvman lateral nan rezo òganizasyon an, men li te ajoute lòt, tankou oblije louvri koneksyon ekstèn ant sistèm entèn ki deja egziste yo ak sistèm ekstènalize yo. CI/CD zouti.
Òganizasyon yo ta dwe fè egzèsiscispran swen nesesè nan redi a CI/CD sistèm nan, kòmanse avèk paramèt ki pi restriksyon yo epi piti piti louvri avèk pèmisyon minimòm ki nesesè pou la pipeline etap.
Konfigirasyon sekirite nan CI/CD Zouti yo kapab yon travay konplèks. Anpil ladan yo gen plugins oubyen ekstansyon ki gen pifò nan vilnerabilite yo epi ki bezwen mete ajou.
Eskanè move konfigirasyon sekirite pou zouti konplèks sa yo, oubyen tès depistaj yo ka ede.
Enjekte kòd nan pipeline kòmandman pou plezi ak pwofi
M3M3N70Èske w te janm itilize Untrusted Code Checkouts, aksyon ak script vilnerab ki vilnerab a enjeksyon kòmand?
Seksyon sa a montre ke pipeline li menm te kapab gen erè kodaj ki pèmèt move aktè yo enjekte ekzekisyon kòd abitrè nan pipeline san yo pa chanje a pipeline sous li menmPa egzanp, lè w ap itilize yon PR
Yon premye egzanp yon yon pwoblèm ak GitHub:
# INSECURE. Provided as an example only.
on:
pull_request_target #1
jobs:
build:
name: Build and test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: $ #2
- uses: actions/setup-node@v1
- run: |
npm install #3
npm build
# ... more steps ...
Konbine pull_request_target Deklanchman workflow ak yon checkout eksplisit nan yon PR ki pa fyab se yon pratik danjere ki ka mennen nan konpwomi depo. Nan egzanp lan, konbinezon malere de:
pull_request_targetevènman an, ki pa default gen pèmisyon ekri nan depo sib la ak sekrè depo sib la, menm soti nan fouchèt ekstèn, epi li fonksyone nan kontèks depo sib PR a,- tcheke kòd PR a nan sous la, depo ki pa fyab,
- deklanche nenpòt script ki ka opere sou kontni kontwole pa PR, tankou nan ka a
npm install, epi - pa itilize yon kondisyon pou deklanche a
pull_request_targetEvènman an pou l fonksyone sèlman si yon kalite etikèt 'PR sa a te verifye' te asiyen a PR a (itilizatè ekstèn yo pa ka asiyen etikèt a PR a).
Yon dezyèm egzanp pran enfòmasyon ki pa fyab (ki soti nan yon pwoblèm, yon kòmantè oubyen pull request) kòm sous pou agiman yo pase bay yon pipeline kòmand atravè ekspresyon. Sa a se pipeline vèsyon vilnerabilite enjeksyon kòmand sistèm operasyon an.
- name: Check title
run: |
title="$"
if [[ ! $title =~ ^.*:\ .*$ ]]; then
echo "Bad issue title"
exit 1
fi
Operasyon egzekisyon an jenere yon script shell tanporè ki baze sou modèl la, avèk $ ranplase, sa ki fè li vilnerab a enjeksyon kòmand shell. Yon atakè ak yon fo kont GitHub te kapab kreye yon pwoblèm ak yon tit a"; bad_code_goes_here;#, epi boum!
Raj marekajOh, mesye sa yo t ap louvri pòt la pou enjeksyon kòmandman an tou senpleman lè yo te louvri yon pwoblèm...
Te gen vilnerabilite nan ekzekisyon kòd nan aksyon GitHub yo, tankou kòmantè-gajira, kounye a rezoud. Tanpri li "Entre ki pa fyab nan workflows GitHub yo" pou plis detay plen.
Moral istwa a: Pa janm verifye epi bati PR ki soti nan sous ki pa fyab san ou pa verifye PR a anvan. "Pa fyab" isit la, sof si li anba yon otantifikasyon drakonyen sou orijin, sa ka vle di nenpòt kont devlopè ki potansyèlman pirate.
Deplwaman malveyan sanzatann isit la!
Deplwaman kontinyèl se klimaks automatisation an, men klimaks sa a ta ka vin fristre pa mank kontwòl apwobasyon apwopriye sou la pipeline koule.
Risk ki genyen nan deplwaman konplètman otomatize depi sous la commit Pwoblèm nan sistèm pwodiksyon yo gen ladan yo posiblite pou kòd move deplwaye nan anviwònman pwodiksyon san yo pa detekte li, ansanm ak posiblite pou erè nan pwosesis deplwaman an lakòz entèripsyon oswa pann sèvis.
Pou diminye risk sa yo, souvan yo rekòmande pou òganizasyon yo aplike yon "poz difisil" nan pwosesis deplwaman yo, ki mande apwobasyon moun anvan yo deplwaye vèsyon yo nan anviwònman final yo.
Y ap fèmen pòt yo
Raj marekajModpas default sa yo ki fè kè moun kontan nan CI/CD zouti yo ap efase. Aksè a
/var/lib/jenkins/secrets/initialAdminPasswordse yon chemen ki pa mache kounye a. Anpil zouti kounye a ap bay 2FA, ke Covid te fè popilè, e menm makak kòd ki pi parese a ap itilize li!M3M3N70N ap goumen kont 2FA, men se pa fasil konsa. Li difisil pou fè spear-phishing ak mesye sa yo, paske "Scatter Swine" te fè ak TwilioAvèk kle WebAuthn yo, li pi difisil. Omwen, nou ka eseye vòlè bonbon pou kontoune MFA, men bezwen antre nan bwat devlopè a.
Otantifikasyon Milti-Faktè se yon bon pa nan bon direksyon an pou limite risk pou gen flit sekrè otantifikasyon. Pifò nan zouti DevOps modèn yo sipòte MFA. Epi kle otantifikasyon anba WebAuthn / U2F (gade Pwojè FIDO2) yo petèt pi bon opsyon pou MFA nan DevOps, si yo byen jere.
Raj marekajMesye DevOps yo ap reveye. Yo gen bagay "privilèj ki pi piti a" nan san yo. Epi yo pa tankou makak kòd ankò. Kounye a, evalyatè yo kenbe nou nan men yo.
An reyalite, pipelineKounye a, yo pi solid pase kèk ane de sa, yo retire aksyon ak script fèb yo, epi ak etap tès sekirite adisyonèl ki menm detekte dropper nou yo kache an sekrè. commits ak pakè nou te detounen yo.
Kesyon pou lektè a: èske pwosesis pou konstwi lojisyèl la apati sous yo epi deplwaye l an pwodiksyon se yon biznis ki riske? Èske ou ka wè DevOps ou a nan etap... bon tan lontan pou mechan yo?
Rekòmandasyon final yo
Ki kote pou kòmanse CI/CD pipelines?
Premye rekòmandasyon an senp isit la: Ak anpil atansyon revize pipelines (yo ye kritik resous) pou pwoblèm sekirite. Revizyon yo koute chè men nesesè, epi yo ta dwe fèt byen. Moun k ap fè revizyon yo ta dwe konnen sa pou yo gade. Yo dwe verifye chak etap pou wè si gen defo.
Petèt yon konbinezon evalyatè ekspè ame ak eskanè kòd move otomatik ta ka ede.
Dezyèm rekòmandasyon an se pou fòme devlopè ki ekri pipelineepi kenbe yo an sekiriteBagay pou konsidere:
- Kijan pou byen jere otantifikasyon ak sèvis entèn ak sèvis nwaj yo, pou evite pwoblèm pou jere kalifikasyon alontèm.
- Kijan pou limite pipelines nan ansanm resous egzak li bezwen aksè a. Prensip privilèj minimòm lan klere ankò.
- Kijan pou ekri etap sa yo pou fè pipelines reproduktib tankou pinning vèsyon, epi evite vilnerabilite enjeksyon kòmand.
- Kijan pou apwouve deplwaman nan pèspektiv sekirite a (se lòt moun!): ki sekirite standards yo ta dwe matche ak kijan pou ajoute chèk/pòtay korespondan nan la pipelines.
Yon twazyèm rekòmandasyon se pou konfigirasyon an CI/CD sistèm avèk swen ki nesesèOtantifikasyon solid, pa gen modpas defo oswa paramèt ki pa an sekirite, privilèj minimòm... Fè atansyon ak vilnerabilite nan plugins ak ekstansyon ki enstale yo. Sa a ta ka sijè prensipal pòs kap vini yo, tanpri rete branche.
Katriyèm rekòmandasyon an se pou ogmante a CI/CD pipelines pou automatisation sekiriteAnaliz kòd sous (SAST), analiz konpozisyon sous (SCA), eskanè flit sekrè, zouti anti-malveyan, eskanè sekirite kontenè, oswa detektè otomatik nan fonksyonman (DAST ak malveyan) ka fonksyone regilyèman sou pipelineEpi òganizasyon w lan ka aplike standards sou pwoteksyon sou eskanè sekirite nan CI/CD.
Sonje byen, zouti sa yo pa retire revizyon ekspè nan ekwasyon an, sinon ou ta ka gen yon fo sans sekirite.
Si ou abitye ak dis premye OWASP yo, yon bèl pwojè resan se OWASP Top 10 CI/CD Risk sekirite.
Remak Limit responsabilite nou
(1) Egzanp ki nan pòs sa a ap itilize GitHub kòm SCM, AWS kòm founisè nwaj, ak GitHub Actions oubyen Jenkins kòm CI/CD zouti. Yo pa pi fèb / pi an sekirite pase altènativ yo. Pa gen okenn move entansyon pou laprès! Zouti sa yo pwisan epi yo bezwen itilize kòmsadwa.
(2) M3M3N70 ta dwe apwouve bèso tibebe w la epi Raj marekaj se pèsonaj fiksyonèl. Nenpòt resanblans ak moun oswa gwoup, vivan oswa mouri, se jis yon konyensidans... oswa èske se vre?
Pou li plis
- Haymore, A. et al. 10 istwa reyèl sou kijan nou te fè konpwomi CI/CD pipelines ”Gwoup NCC, Janvye 2022.
configure-aws-credentialsAksyon GitHub ta dwe apwouve bèso tibebe w la epi Konfigirasyon OpenID Connect nan Amazon Web Services pou plis detay sou kijan pou egzekite kòmand AWS pou deplwaman nan workflows GitHub yo.- Lobacevski J. "Kenbe Aksyon ak workflows GitHub ou yo an sekirite Pati 1: Anpeche demann pwn"Laboratwa Sekirite GitLab, Desanm 2020.
- Lobacevski J. "Kenbe Aksyon ak workflows GitHub ou yo an sekirite Pati 2: Done ki pa fyab"Laboratwa Sekirite GitLab, Janvye 2021.
- OWASP. "OWASP Top 10 yo CI/CD Risk Sekirite yoJiyè 2022.
- Saltzer J. ak Schroeder M. "Pwoteksyon Enfòmasyon nan Sistèm Odinatè"Avril 1975. Prensip sekirite yo te evolye avèk teknoloji, men 47 ane apre, pifò ide S&S yo toujou an vigè.
- NCSC Wayòm Ini a. "Sekirize konstriksyon ak deplwaman an pipeline"Sant Nasyonal pou Sibèsekirite Wayòm Ini a, Fevriye 2019.





