Padayon nga integrasyon ug padayon nga paghatud (CI/CD) pipelineAng mga s mao ang pundasyon sa bisan unsang organisasyon sa software nga nagtukod og software sa "moderno" nga paagi. Ang automation naghatag og dakong gahum, apan kadaghanan sa mga developer wala makamatikod sa responsibilidad nga nalangkit niini.
developer: Oo, among kuhaon CI/CD seguridad seryoso ug adunay lig-on nga kontrol sa mga code maintainer, pagrepaso commits sa dili pa ang mga paghiusa; mga trabaho ug pipelinegimentinar sa mga senior staff, ilang giampingan nga dili mogawas ang mga sekreto sa pipelines. Ug ang himan gi-instalar sa mga personahe nga nahibalo niini. Unsa may posibleng madaot?
Minahal nga tigpalambo, CI/CD komplikado ang mga sistema. Ang halapad nga pag-atake niini nakadani sa mga dautang aktor. Mas maayo nga mag-amping ug dili gyud mokompiyansa.
Usahay ang default nga configuration gipadayon ug nahimong labing maayong higala sa mga hacker. Ang mga kritikal nga depekto mahimong makita sa CI/CD pipeline mga tinubdan, sa pagkahan-ay sa sistema, o sa palibot sa proseso ug konteksto sa pipeline ug unsaon kini pag-trigger.
Niini nga post, atong ibutang ang atong kaugalingon sa sitwasyon sa mga dili maayong aktor. Handurawa nga nagbasa kita sa mga pamalandong sa M3M3N70 (Memento Mori?) ug Kasuko sa Kalapukan sa usa ka dapit sa dark web, tingali sa usa ka pinulongan nga dili gikan sa Kasadpan, apan ayaw kalimti nga ang dautan mikaylap sa tibuok kalibutan.
Sa karaang panahon, sayon ra kaayo...
M3M3N70Balik sa karaang panahon, sayon ra kaayo ang among negosyo… Ang Zero-days dali ra kaayo, ang mga app abli pa nga adunay mga vuln nga dali ra gamiton, ug dali ra mi makalihok-lihok.
Kasuko sa KalapukanFu#@Hell! Naa pa gyuy mga buang diha, pero nausab na ang tanan. Daghan kaayong binuang ang mga dagkong tawo sa mga kalokohan sa AppSec.
M3M3N70Oo. Apan ang mga bag-ong buang mao ang mga developer. Para namo, mas sayon na ang paggamit sa mga himan nga gigamit niining mga tawhana. Ang CI, ilabi na, usa ka minahan sa bulawan! Mga token sa pag-access sa cloud, SCM mga kredensyal, mga password sa production database, mga pribadong yawe sa SSH, mga kredensyal sa ubang mga CI user… Ang pag-ambak gikan sa makalaay nga mga butang sa dev ngadto sa tinuod nga kinauyokan medyo sayon ra.
Awtomasyon para sa pagtukod, pagsulay ug pag-deploy sa software nga adunay CI/CD Ang himan kanunay kinahanglan nga mopasa sa mga sekreto ngadto sa mga sugo sa hinay-hinay. Ug kasagaran kini mogawas, nga adunay dili maayo nga mga sangputanan.
Pipelinekinahanglan ang mga sekreto nga usahay mabutyag
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.
Tingali ang maayong karaang mga panahon mao ang pagpangita sa kasaysayan sa Git og usa ka .env file (nakalimot ang developer sa pagdugang niini sa .gitignore):
AWS_ACCESS_KEY_ID=AKIA...AWS_SECRET_ACCESS_KEY=wJalrXUtn...AWS_REGION=us-east-1APP_FOLDER=...S3BUCKET=...
nga gigamit sa usa ka GitHub workflow .github/deploy.yaml nga adunay sulod nga sama niini:
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: wow! Nagtrabaho man gud tong mga aws key! Gisulayan una namo ang inocuos change sa app, dayon gidugang ang sting kay murag wala sila kabalo. Bingo! Pagkanindot nga campaign…
Gigamit lang sa dautang aktor ang mga AWS key aron mag-upload og giusab nga aplikasyon nga adunay malware ug dayon gipadagan ang deploy command nga adunay ingon nga mga kredensyal. Ang mga na-leak nga sekreto, uban sa impormasyon nga anaa sa pipeline“Pagkanindot nga kampanya!” lagmit nagpasabot nga si Memento nakaguba og dakong kadaot sa pobreng biktima.
Ang gisulti sa Memento dinhi mao nga sa higayon nga adunay nahitabong sekreto nga pagtulo, sama sa mga AWS access key sa ehemplo, kinahanglan nimong bawion ang sekreto (i-rotate ang mga key sa ibabaw) diha-diha dayonKanunay adunay bintana sa pagbutyag taliwala sa pagtulo commit ug ang tinago nga pagkawalay-pulos; Lisod ang pagsulat pag-usab sa kasaysayan sa Git (bisan ang pinakagahi nga awtoritaryan nga estado misulay sa pagsulat pag-usab sa kasaysayan, apan wala kini molampos) ug lagmit dili epektibo (ang atong mga higala basin naka-clone na sa wala pa ang repository nga adunay sekreto nga leak commitI-rotate dayon ang mga yawe, ug pag-ampo samtang nagbasa sa mga activity log para sa gitarget nga account atol sa exposure window!
Lagmit ang mga organisasyon kinahanglan pagdili sa paggamit sa mga sekreto sa dugay nga panahon CI/CD pipelines, ug ilisan kini og temporal credentials. Sa miaging ehemplo gamit ang AWS keys sa GitHub actions, mas luwas ang paggamit og Tighatag og OpenID Connect (OIDC) aron makakuha og mga mubo nga panahon nga mga kredensyal nga gikinahanglan alang sa mga aksyon.
Kasuko sa KalapukanSwerte kaayo ka! Kasagaran na nga praktis kaniadto ang pag-leak sa mga script nga adunay hardcoded keys, bisan sa mga pampublikong S3 buckets. Ang kinahanglan ra nimong buhaton mao ang pag-traverse sa mga butang sa bucket ug paghimo og pipila ka grepping aron makit-an ang mga makapainteres nga butang.
Usahay ang lugar nga gigamit para sa deployment (usa ka AWS S3 bucket niini nga pananglitan) bukas para mabasa gikan sa mga tagagawas, tungod sa usa ka depekto sa configuration (nga wala mamatikdi). Unsa Kasuko sa Kalapukan gigamit usa ka butang nga sama niini:
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>'"
Ang balde lagmit gihimo sa usa ka provisioning template nga awtomatikong ma-scan para sa mga depekto sa seguridad.
Ang default nga pag-configure sa himan usa ka dulaan alang kanamo
Aron makahatag og konkretong mga ehemplo, atong hisgutan Jenkins, usa sa pinakasikat nga mga himan sa CI.
Kasuko sa KalapukanNahinumdom ka ba sa checkbox nga “Enable Security” sa Jenkins, ug pila ka organisasyon ang mipili nga dili kini i-activate para sa kasayon? Ug kadtong “Bisan kinsa makahimo sa bisan unsa"mga kombinasyon sa pagtugot isip default? Ug kadtong mga makahasol nga Jenkins plugin, sama sa GitHub OAuth pluginAng tawo nga nag-configure niini mipili sa "Grant READ permissions to all Authenticated Users" ug "Use GitHub repository permissions", nga naghatag kanamo og access sa tanan nilang mga proyekto.
(Pasayloa ko, Jenkins, sa pagpakita nimo nga ehemplo 😉
Pagpabiling hanas (bisan adik) sa mga prinsipyo sa seguridad. Usa niini ang Luwas pinaagi sa default prinsipyo: ang mga kontrol kinahanglan nga i-default sa labing luwas nga mga setting nga posible. Ang seguridad kinahanglan nga ilakip sa CI/CD mga himan ug pipelinegikan sa sinugdanan, imbes nga usa lang ka ulahi nga hunahuna. Apan ang kasayon sa paggamit ug ang kasayon niini kasagarang mosumpaki sa seguridad.
Para sa kaso ni Jenkins, ang built-in nga authentication huyang kaayo: ayaw gyud gamita ang built-in nga mga mekanismo sa pag-authenticate sa JenkinsMas maayong mopili og third-party mechanism (SAML, LDAP, Google…), nga adunay Role-based Authorization Strategy (“RBAC”) plugin. Ug pag-amping pag-ayo sa admin account.
Pag-amping kon unsaon pagtrabaho ug pipeline ang mga file sa Jenkins gidumala. Parehas ra sa Plugin sa Pag-configure-isip-Kodigo ug ang mga config file niini, nga magamit sa Jenkins configuration.
Pagbalhin gikan sa self-hosted CI/CD ang mga sistema ngadto sa mga cloud-based nga SaaS nagwagtang sa pipila ka potensyal nga risgo nga nagtugot sa lateral nga paglihok sulod sa network sa organisasyon, apan gidugang ang uban, sama sa pag-abli sa mga eksternal nga koneksyon tali sa kasamtangan nga internal nga mga sistema ug sa externalized CI/CD himan.
Ang mga organisasyon kinahanglan nga mo-ehersisyocispag-amping pag-ayo sa pagpatig-a sa CI/CD sistema, sugod sa labing estrikto nga mga setting ug hinayhinay nga pag-abli uban ang labing gamay nga gikinahanglan nga mga permiso para sa pipeline mga lakang.
Pag-configure sa seguridad sa CI/CD Ang mga himan mahimong komplikado nga buluhaton. Daghan ang adunay mga plugin o extension nga adunay kadaghanan sa mga kahuyangan ug kinahanglan nga i-update.
Ang mga security misconfiguration scanner para sa ingon ka komplikado nga mga himan, o mga benchmark, mahimong makatabang.
Pag-inject og code pipeline mga mando para sa kalingawan ug ganansya
M3M3N70Nakagamit ka na ba og Untrusted Code Checkouts, nga mga vulnerable nga aksyon ug mga script nga vulnerable sa command-injection?
Kini nga seksyon nagpakita nga ang pipeline mismo mahimong adunay mga sayop sa pag-coding nga makapahimo sa mga dautang aktor sa pag-inject sa arbitraryong pagpatuman sa code sa pipeline nga walay pagbag-o sa pipeline tinubdan mismoPananglitan ang paggamit og PR
Usa ka unang ehemplo sa dili maayo nga workflow sa 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 ...
Paghiusa pull_request_target Ang workflow trigger nga adunay klaro nga checkout sa usa ka dili kasaligan nga PR usa ka delikado nga praktis nga mahimong mosangpot sa pagkompromiso sa repository. Sa pananglitan, ang dili maayo nga kombinasyon sa:
pull_request_targetpanghitabo, nga pinaagi sa default adunay pagtugot sa pagsulat sa target nga repository ug mga sekreto sa target nga repository, bisan gikan sa mga external forks, ug modagan sa konteksto sa target nga repository sa PR,- susiha ang PR code gikan sa tinubdan, dili kasaligan nga repo,
- pag-trigger sa bisan unsang script nga mahimong mo-operate sa mga sulud nga kontrolado sa PR, sama sa kaso sa
npm install, Ug - dili paggamit og kondisyon sa pag-trigger
pull_request_targetmodagan lang ang event kon ang usa ka klase sa 'this PR was vetted' nga label gi-assign sa PR (ang mga external user dili maka-assign og mga label sa PR).
Ang ikaduhang ehemplo nagkuha og dili kasaligan nga input (gikan sa usa ka isyu, komento o pull request) isip tinubdan sa mga argumento nga gipasa ngadto sa usa ka pipeline sugo pinaagi sa mga ekspresyon. Kini ang pipeline bersyon sa kahuyangan sa pag-inject sa sugo sa OS.
- name: Check title
run: |
title="$"
if [[ ! $title =~ ^.*:\ .*$ ]]; then
echo "Bad issue title"
exit 1
fi
Ang run operation makamugna og temporaryo nga shell script base sa template, uban sa $ gipulihan, nga naghimo niini nga daling maapektuhan sa shell command injection. Ang usa ka tig-atake nga adunay peke nga GitHub account mahimong makahimo og isyu sa usa ka titulo a"; bad_code_goes_here;#, ug boom!
Kasuko sa Kalapukan: Ah, kadtong mga tawhana nag-abli sa pultahan para sa command injection pinaagi lang sa pag-abli og isyu…
Adunay mga kahuyangan sa pagpatuman sa code sa mga aksyon sa GitHub, sama sa gajira-comment, naayo na karon. Palihug basaha "Dili kasaligan nga input sa mga workflow sa GitHub" alang sa hingpit nga mga detalye.
Ang moral sa istorya: Ayaw gyud pag-checkout ug paghimo og mga PR gikan sa dili kasaligan nga mga tinubdan nga wala una gisusi ang PR. Ang 'Dili kasaligan' dinhi, gawas kon ubos sa estrikto nga pag-authenticate sa gigikanan, mahimong magpasabot sa bisan unsang posibleng gi-hijack nga developer account.
Wala tuyoa nga pagkatag sa malware dinhi!
Padayon nga pag-deploy mao ang kinatas-ang automation, apan kana nga kinatas-ang punto mahimong mapakyas tungod sa kakulang sa angay nga mga kontrol sa pag-apruba sa pipeline modagayday.
Ang mga risgo sa hingpit nga awtomatik nga pag-deploy gikan sa tinubdan commit sa mga sistema sa produksiyon naglakip sa posibilidad nga ma-deploy ang malisyosong code sa mga palibot sa produksiyon nga dili mamatikdan, ingon man ang potensyal nga adunay mga sayup sa proseso sa pag-deploy nga hinungdan sa mga pagkabalda o mga pagkawala sa kuryente.
Aron maminusan kini nga mga risgo, kanunay nga girekomenda nga ang mga organisasyon mopatuman og "hard break" sa ilang proseso sa pag-deploy, nga nanginahanglan pag-uyon sa tawo sa dili pa i-deploy ang mga release ngadto sa mga end environment.
Gisirad-an nila ang mga pultahan
Kasuko sa Kalapukan: Kadtong malipayong default nga mga password sa CI/CD ang mga himan gipahiran. Pag-access sa
/var/lib/jenkins/secrets/initialAdminPasswordusa na ka patay nga track. Daghang mga himan karon ang naghatag sa 2FA, nga gipasikat sa Covid, ug bisan ang labing tapulan nga code monkey naggamit niini!M3M3N70Nakig-away mi sa 2FA, pero dili ingon ana kadali. Lisod ang pag-spear-phish anang mga tawhana, kay Ang "Scatter Swine" gihimo uban sa Twilio. Mas lisod kini gamit ang mga WebAuthn key. Labing menos, maningkamot kita nga kawata ang cookies aron malikayan ang MFA, apan kinahanglan nga mosulod sa developer's box.
Ang Multi-Factor Authentication usa ka maayong lakang padulong sa saktong direksyon aron malimitahan ang risgo sa mga leak sa authentication secrets. Kadaghanan sa mga modernong DevOps tools nagsuporta sa MFA. Ug ang mga authentication key ubos sa WebAuthn / U2F (tan-awa ang Proyekto sa FIDO2) tingali ang pinakamaayong kapilian para sa MFA sa DevOps, kon maayo ang pagdumala.
Kasuko sa KalapukanNagmata na ang mga DevOps guys. Naa na sa ilang dugo ang butang nga "labing gamay nga pribilehiyo". Ug dili na sila mga code monkey. Nadakpan na ta karon sa mga reviewer.
Sa pagkatinuod, pipelineAng mga s karon mas lig-on gamay kaysa pipila ka tuig ang milabay, nga gitangtang ang mga huyang nga aksyon ug mga script, ug adunay dugang nga mga lakang sa pagsulay sa seguridad nga nakamatikod pa gani sa among mga dropper nga gitago sa tago. commits ug mga pakete nga among gi-hijack.
Pangutana para sa magbabasa: ang proseso ba sa paghimo sa software gikan sa mga tinubdan ug pag-deploy niini ngadto sa produksiyon usa ka delikado nga negosyo? Makita ba nimo ang imong DevOps sa yugto sa maayong mga panahon para sa mga dautang tawo?
Katapusan nga Rekomendasyon
Asa magsugod CI/CD pipelines?
Ang unang rekomendasyon yano ra dinhi: Pag-amping review pipelines (sila mao kritikal mga kapanguhaan) para sa mga isyu sa seguridad. Mahal ang mga pagrepaso apan gikinahanglan, ug kinahanglan nga buhaton sa husto. Ang mga tigrepaso kinahanglan nga mahibalo kung unsa ang angay tan-awon. Ang matag lakang kinahanglan nga susihon alang sa mga depekto.
Tingali makatabang ang kombinasyon sa mga ekspertong tigsusi nga armado sa mga automated malisyosong code scanner.
Ang ikaduhang rekomendasyon mao ang mga developer sa tren nga nagsulat pipelines ug ipadayon sila sa seguridadMga butang nga angay hunahunaon:
- Unsaon pagdumala sa authentication sa hustong paagi gamit ang internal ug cloud services, nga malikayan ang kahasol sa pagdumala sa mga long-term credentials.
- Unsaon paglimite pipelinengadto sa eksaktong hugpong sa mga kahinguhaan nga kinahanglan niini nga ma-access. Ang prinsipyo sa labing gamay nga pribilehiyo misidlak pag-usab.
- Unsaon pagsulat sa mga lakang sa paghimo pipelinekini masubli sama sa pag-pin sa bersyon, ug paglikay sa mga kahuyangan sa command injection.
- Unsaon pag-aprobar sa mga deployment gikan sa perspektibo sa seguridad (sila ang uban!): unsang seguridad standardkinahanglan nga ipares ang s ug unsaon pagdugang sa katugbang nga mga tseke/ganghaan sa pipelines.
Ang ikatulong rekomendasyon mao ang i-configure ang CI/CD sistema nga adunay angay nga pag-ampingLig-on nga authentication, walay default nga password o dili luwas nga mga setting, gamay ra nga mga pribilehiyo… Atimana ang mga kahuyangan sa mga plugin ug extension nga na-install. Mahimo kini nga pokus sa mosunod nga mga post, palihug bantayi.
Ang ikaupat nga rekomendasyon mao ang leverage ang CI/CD pipelines para sa automation sa seguridad. Pag-analisar sa source code (SAST), pag-analisar sa komposisyon sa tinubdan (SCA), ang mga sekreto nga pag-scan sa mga leak, mga himan nga kontra-malware, mga scanner sa seguridad sa container, o mga automated runtime detector (DAST ug malware) mahimong ipadagan nga rutina sa pipelineUg ang imong organisasyon mahimong mopatuman standardbahin sa coverage sa security scanning sa CI/CD.
Pahinumdom, kini nga mga himan wala gihapon magtangtang sa pagrepaso sa eksperto gikan sa ekwasyon, kung dili mahimo nga adunay ka sayup nga pagbati sa seguridad.
Kon hanas ka sa OWASP top-tens, usa ka nindot nga bag-o nga proyekto mao ang OWASP Top 10 CI/CD Risgo sa Seguridad.
Pahibalo sa Pagpasabot
(1) Ang mga ehemplo niini nga post naggamit sa GitHub isip SCM, AWS isip tighatag og cloud, ug GitHub Actions o Jenkins isip CI/CD himan. Dili kini mas huyang/mas luwas kay sa ilang mga alternatibo. Walay daotang tuyo sa pagmantala! Kini nga mga himan gamhanan ug kinahanglan gamiton sa hustong paagi.
(2) M3M3N70 ug Kasuko sa Kalapukan mga hinimo-himo nga karakter. Ang bisan unsang pagkaparehas sa mga tawo o grupo, buhi man o patay, sulagma lang… o dili ba?
Para magbasa pa
- Haymore, A. ug uban pa. "10 ka tinuod nga istorya sa kalibutan kon giunsa nato pagkompromiso" CI/CD pipelines ”. NCC Group, Enero 2022.
configure-aws-credentialsAksyon sa GitHub ug Pag-configure sa OpenID Connect sa Amazon Web Services para sa mga detalye kon unsaon pagpadagan ang mga sugo sa AWS para sa pag-deploy sa mga workflow sa GitHub.- Lobacevski J. "Pagpabiling luwas sa imong mga Aksyon ug workflow sa GitHub Bahin 1: Pagpugong sa mga hangyo sa pwn"GitLab Security Lab, Disyembre 2020.
- Lobacevski J. “Pagpabiling luwas sa imong mga Aksyon ug workflow sa GitHub Bahin 2: Dili kasaligan nga input”GitLab Security Lab, Enero 2021.
- OWASP. "OWASP Top 10" CI/CD Mga Risgo sa Seguridad"Hulyo 2022.
- Saltzer J. ug Schroeder M. "Ang Pagpanalipod sa Impormasyon sa mga Sistema sa Kompyuter"Abr 1975. Ang mga prinsipyo sa seguridad milambo uban sa teknolohiya, apan 47 ka tuig ang milabay kadaghanan sa mga ideya sa S&S nagpabilin nga epektibo.
- NCSC sa UK. "Siguruha ang pagtukod ug pag-deploy" pipeline". UK National CyberSecurity Center, Pebrero 2019.




