Fampidirana mitohy sy fanaterana mitohy (CI/CD) pipelineNy s no fototry ny fikambanana rindrambaiko rehetra izay manorina rindrambaiko amin'ny fomba "maoderina". Ny automation dia manome hery lehibe, saingy ny ankamaroan'ny mpamorona rindrambaiko dia tsy mahatsapa ny andraikitra aterak'izany.
DeveloperEny, mandray izahay CI/CD security matotra ary manana fifehezana matanjaka amin'ireo mpikojakoja kaody, famerenana commits alohan'ny fampiraisana; asa sy pipelinetazonin'ny mpiasa ambony, ary mikarakara ny tsy famoahana tsiambaratelo ao amin'ny pipelines. Ary ny fitaovana dia napetraky ny olona izay mahafantatra tsara izany. Inona no mety ho olana?
Ry mpamorona hajaina, CI/CD Sarotra ny rafitra. Ny fanafihana mivelatra dia nahasarika ireo mpanao ratsy. Tsara kokoa ny mitandrina ary tsy matoky tena loatra.
Indraindray dia tazonina ny fikirakirana mahazatra ary lasa namana tsara indrindra ho an'ny mpijirika. Mety hisy lesoka lehibe amin'ny CI/CD pipeline loharano, ao amin'ny firafitry ny rafitra, na manodidina ny dingana sy ny tontolon'ny pipeline ary ny fomba isehoany.
Ato amin'ity lahatsoratra ity dia hametraka ny tenantsika eo amin'ny toeran'ireo mpilalao ratsy isika. Alaivo sary an-tsaina hoe namaky ny eritreritr'i M3M3N70 (Memento Mori?) ary Fahatezerana amin'ny honahona any ho any ao amin'ny tranonkala maizina, angamba amin'ny fiteny tsy tandrefana, fa aza adino mihitsy fa miely eran-tany ny ratsy.
Fahiny dia mora be izany...
M3M3N70: Raha niverina tamin'ny andro taloha izahay dia tena mora ny asanay… Tsy nisy olana firy ny Zero-days, nisokatra be ny fampiharana niaraka tamin'ny vulns mora nampiasaina, ary afaka nifindrafindra toerana haingana izahay.
Fahatezerana amin'ny honahona: Fu#@Hell! Mbola misy ihany ny olona adala any, fa niova ny zava-drehetra. Ireo lehilahy lehibe dia nanao tsinontsinona an'io resaka AppSec io.
M3M3N70Eny. Fa ireo mpamorona vaovao no adala. Ho anay, mora kokoa ny mampiasa ireo fitaovana ampiasain'ireto olona ireto. Ny CI, indrindra indrindra, dia toeram-pitrandrahana volamena! Token fidirana amin'ny rahona, SCM fahazoan-dàlana, tenimiafina momba ny angon-drakitra famokarana, fanalahidy manokana SSH, fahazoan-dàlana hafa an'ny mpampiasa CI… Somary tsotra ihany ny fitsambikinana avy amin'ny zavatra fampandrosoana mankaleo mankany amin'ny tena votoatiny.
Fandehanana mandeha ho azy ho an'ny fananganana, fitsapana ary fametrahana rindrambaiko miaraka amin'ny CI/CD Matetika ity fitaovana ity dia mila mampita tsiambaratelo amin'ny baiko amin'ny dingana maromaro. Ary matetika izy ireo dia tafaporitsaka, izay miteraka vokany ratsy.
Pipelinemila tsiambaratelo izay indraindray miparitaka
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.
Angamba ny fotoana tsara taloha dia ny nahitana tao amin'ny tantaran'ny Git .env rakitra (hadinon'ny mpamorona ny nampiditra azy tao amin'ny .gitignore):
AWS_ACCESS_KEY_ID=AKIA...AWS_SECRET_ACCESS_KEY=wJalrXUtn...AWS_REGION=us-east-1APP_FOLDER=...S3BUCKET=...
izay nampiasaina tao amin'ny workflow GitHub .github/deploy.yaml izay nisy zavatra toy izao:
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! Niasa tsara ireo fanalahidy aws! Notsapainay aloha ny fanovana inocuos tao amin'ny fampiharana, avy eo dia nampianay ny sting satria toa tsy fantatr'ireo lehilahy ireo izany. Bingo! Fampielezan-kevitra re izany...
Nampiasa fotsiny ny lakilen'ny AWS ilay mpilalao ratsy fanahy mba hampidirana rindranasa novaina misy malware ary avy eo dia nampiasa ny baiko deploy miaraka amin'izany fahazoan-dàlana izany. Ny tsiambaratelo tafaporitsaka, miaraka amin'ny fampahalalana voarakitra ao amin'ny pipeline"Fampielezan-kevitra re izany!" dia mety midika fa nandravarava ilay niharam-boina mahantra i Memento.
Ny lazain'i Memento amintsika eto dia rehefa misy fivoahana miafina mitranga, toy ny lakilen'ny fidirana AWS amin'ny ohatra, dia tsy maintsy manafoana ny tsiambaratelo ianao (avadiho ireo lakile etsy ambony) avy hatranyMisy foana ny varavarankely fampiharihariana eo anelanelan'ny fivoahan'ny rano commit ary ny fanafoanana miafina; Sarotra ny manoratra indray ny tantaran'ny Git (na dia ny fanjakana jadona henjana indrindra aza dia nanandrana nanoratra indray ny tantara toy izany, saingy tsy nahomby) ary mety tsy nahomby (mety ho efa nanao dika mitovy tamin'ny tahiry miafina ny namantsika talohan'ny nivoahan'ny vaovao miafina commit). Ahodino avy hatrany ny fanalahidy, ary mivavaha sady mamaky ny diarin'ny kaonty kendrena mandritra ny fotoana fampiharihariana!
Angamba tokony ho fandrarana ny fampiasana tsiambaratelo maharitra CI/CD pipelines, ary soloo amin'ny fahazoan-dàlana ara-potoana izy ireo. Ao amin'ny ohatra teo aloha miaraka amin'ny lakile AWS ao amin'ny hetsika GitHub, dia azo antoka kokoa ny mampiasa Mpanome tolotra OpenID Connect (OIDC) mba hahazoana fahazoan-dàlana vetivety ilaina amin'ny hetsika.
Fahatezerana amin'ny honahonaTsara vintana ianao! Fanao mahazatra fahiny ny famoahana script misy lakile voafafa, na dia amin'ny bucket S3 azon'ny daholobe idirana aza. Ny hany ilainao atao dia ny mikaroka ireo zavatra ao anaty bucket ary manao fikarohana mba hahitana zavatra mahaliana.
Indraindray ny faritra ampiasaina amin'ny fametrahana (AWS S3 bucket amin'ity ohatra ity) dia nisokatra hovakian'ny olona ivelany, noho ny lesoka amin'ny fikirakirana (izay tsy hita). Inona no Fahatezerana amin'ny honahona nampiasaina dia toy izao:
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>'"
Azo inoana fa noforonina tao anaty môdely famatrana izay azo jerena ho azy raha misy lesoka ara-piarovana ilay siny.
Kilalao ho anay ny fikirakirana ny fitaovana mahazatra
Mba hanomezana ohatra mivaingana, andeha hiresaka momba ny Jenkins, iray amin'ireo fitaovana CI malaza indrindra.
Fahatezerana amin'ny honahonaTadidinao ve ilay boaty "Enable Security" tao amin'ny Jenkins, ary firy ny fikambanana nisafidy ny tsy hampandeha azy io mba hanamorana ny asa? Ary ireo "Afaka manao na inona na inona ny olona rehetra"fifangaroan'ny fahazoan-dàlana ho toy ny mahazatra? Ary ireo plugin Jenkins manelingelina ireo, toy ny Plugin GitHub OAuthIlay lehilahy nanamboatra azy dia nifidy ny "Omeo alalana READ ho an'ny mpampiasa voamarina rehetra" sy ny "Use GitHub repository permissions", izay manome anay fidirana amin'ny tetikasany rehetra.
(Miala tsiny, Jenkins, noho ny nanomezako anao ohatra 😉)
Tazomy ho zatra (na dia andevozin'ny zava-mahadomelina aza) ny fitsipiky ny fiarovana. Ny iray dia ny Azo antoka amin'ny alàlan'ny default fitsipika: ny fanaraha-maso dia tokony hampiasa ny fikirana azo antoka indrindra azo atao. Ny fiarovana dia tokony hampidirina ao anatin'ny CI/CD fitaovana ary pipelinehatrany am-boalohany, fa tsy hoe eritreritra tsy voahevitra tsara. Saingy matetika mifanipaka amin'ny fiarovana ny fahamoran'ny fampiasana sy ny fahamoran'ny fampiasana.
Ho an'ny tranga Jenkins, marefo loatra ny fanamarinana tafiditra ao anatiny: aza mampiasa mihitsy ireo fomba fanamarinana efa tafiditra ao amin'ny JenkinsTsara kokoa ny misafidy rafitra avy amin'ny antoko fahatelo (SAML, LDAP, Google...), miaraka amin'ny plugin Role-based Authorization Strategy ("RBAC"). Ary mitandrema tsara amin'ny admin kaonty.
Mikarakara ny fomba fiasan'ny asa sy pipeline voakarakara ireo rakitra ao amin'ny Jenkins. Toy izany koa amin'ny Plugin Configuration-as-Code ary ireo rakitra fikirakirana azy, izay mihatra amin'ny fikirakirana Jenkins.
Mifindra avy amin'ny fampiantranoana tena CI/CD Ny fanovana ny rafitra mankany amin'ny SaaS miorina amin'ny rahona dia manafoana ny mety ho risika sasany izay mamela ny fivezivezena mivelatra ao anatin'ny tambajotran'ny fikambanana, saingy nampiana hafa koa, toy ny tsy maintsy fanokafana fifandraisana ivelany eo amin'ny rafitra anatiny efa misy sy ny rafitra ivelany. CI/CD fitaovana.
Tokony hanao ezaka ireo fikambananacisfitandremana tsara amin'ny fanamafisana ny CI/CD rafitra, manomboka amin'ny fikirana voafetra indrindra ary misokatra tsikelikely amin'ny fahazoan-dàlana kely indrindra ilaina ho an'ny pipeline dingana.
Fametrahana ny fiarovana ao amin'ny CI/CD Mety ho sarotra ny fitaovana sasany. Maro amin'izy ireo no manana plugins na extensions izay manana ny ankamaroan'ny fahalemena ka mila havaozina.
Mety hanampy ny fampiasana scanner na benchmark tsy mifanaraka amin'ny fikirakirana ny fiarovana ho an'ny fitaovana sarotra toy izany.
Fampidirana kaody pipeline baiko ho an'ny fahafinaretana sy tombony
M3M3N70Efa nampiasa Untrusted Code Checkouts ve ianao, izay hetsika sy script marefo mora idirana amin'ny baiko?
Ity fizarana ity dia mampiseho fa ny pipeline mety manana fahadisoana amin'ny kaody izay ahafahan'ny mpanao ratsy mampiditra fampiharana kaody tsy ara-dalàna ao amin'ny pipeline tsy manova ny pipeline loharano mihitsyOhatra amin'ny fampiasana PR
Ohatra voalohany amin'ny fomba fiasa GitHub mampalahelo:
# 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 ...
fanakambanana pull_request_target Ny fampahavitrihana ny workflow miaraka amin'ny fanamarinana mazava tsara ny PR tsy azo itokisana dia fomba fanao mampidi-doza izay mety hitarika amin'ny fanitsakitsahana ny repository. Ao amin'ny ohatra, ny fitambaran'ny:
pull_request_targethetsika, izay manana alalana hanoratra amin'ny tahiry kendrena sy tsiambaratelon'ny tahiry kendrena, na dia avy amin'ny forks ivelany aza, ary miasa ao anatin'ny tontolon'ny tahiry kendrena an'ny PR,- jereo ny kaody PR avy amin'ny loharano, repo tsy azo itokisana,
- manetsika izay script rehetra mety miasa amin'ny votoaty fehezin'ny PR, toy ny amin'ny trangan'ny
npm install, ary - tsy mampiasa fepetra iray mba hampihetsika
pull_request_targettsy hiasa raha tsy misy karazana marika 'voamarina ity PR ity' omena ny PR (tsy afaka manome marika ho an'ny PR ny mpampiasa ivelany).
Ny ohatra faharoa dia maka fidirana tsy azo itokisana (avy amin'ny olana, fanehoan-kevitra na pull request) ho loharanon'ny adihevitra alefa any amin'ny pipeline baiko amin'ny alalan'ny fanehoan-kevitra. Ity no pipeline ny fahalemen'ny tsindrona baiko OS.
- name: Check title
run: |
title="$"
if [[ ! $title =~ ^.*:\ .*$ ]]; then
echo "Bad issue title"
exit 1
fi
Ny fandidiana "run" dia mamorona script shell vonjimaika mifototra amin'ny môdely, miaraka amin'ny $ soloina, ka mahatonga azy ho mora voan'ny tsindrona baiko shell. Mety hiteraka olana amin'ny lohateny ny mpanafika manana kaonty GitHub sandoka a"; bad_code_goes_here;#, ary boom!
Fahatezerana amin'ny honahonaOh, ireo lehilahy ireo dia nanokatra ny varavarana ho an'ny tsindrona baiko tamin'ny alàlan'ny fanokafana olana fotsiny…
Nisy lesoka tamin'ny fanatanterahana ny kaody tao amin'ny hetsika GitHub, toy ny gajira-comment, voavaha izao. Azafady vakio "Fampidirana tsy azo itokisana ao amin'ny workflows GitHub" ho an'ny antsipiriany feno.
Ny moraly ny tantara: Aza mividy na manorina PR avy amin'ny loharano tsy azo itokisana mihitsy raha tsy efa nandinika ny PR-ny aloha. Ny hoe "Tsy azo itokisana" eto, raha tsy hoe eo ambany fanamarinana henjana ny fiaviany, dia mety hidika hoe kaonty mpamorona mety ho nisy naka an-keriny.
Fametrahana malware tsy niniana natao teto!
Fametrahana tsy tapaka no fara tampony amin'ny automation, saingy mety ho voasakana izany fara tampony izany noho ny tsy fisian'ny fanaraha-maso ny fankatoavana sahaza eo amin'ny pipeline mikoriana.
Ny loza ateraky ny fametrahana mandeha ho azy tanteraka avy amin'ny loharano commit Anisan'ny mety ho fiparitahan'ny kaody ratsy ao amin'ny tontolo famokarana ny mety hisian'ny kaody mampidi-doza nefa tsy hita, ary koa ny mety hisian'ny lesoka mandritra ny fizotran'ny fametrahana izay hiteraka fanelingelenana na fahatapahana.
Mba hampihenana ireo risika ireo, matetika dia asaina mampihatra "fialana mafy" amin'ny fizotran'ny fametrahana azy ireo ny fikambanana, izay mitaky fankatoavan’ny olombelona alohan'ny hampiasana ireo famoahana any amin'ny tontolo farany.
Manidy ny varavarana izy ireo
Fahatezerana amin'ny honahonaIreo tenimiafina mahazatra mahafinaritra ao amin'ny CI/CD fafana ireo fitaovana. Miditra amin'ny
/var/lib/jenkins/secrets/initialAdminPasswordTsy misy intsony ny 2FA ankehitriny. Maro ireo fitaovana manome ny 2FA, izay nataon'ny Covid malaza, ary na dia ny gidro code kamo indrindra aza dia mampiasa izany!M3M3N70Miady amin'ny 2FA izahay, saingy tsy mora izany. Sarotra ny misambotra ireo olona ireo, satria "Scatter Swine" dia niaraka tamin'i TwilioSarotra kokoa ny mampiasa ny fanalahidy WebAuthn. Farafaharatsiny, afaka miezaka isika mangalatra cookies mba handalovana ny MFA, saingy mila miditra ao anatin'ny sehatry ny mpamorona rindrambaiko.
Dingana tsara amin'ny lalana marina ny Multi-Factor Authentication mba hampihenana ny mety hisian'ny fivoahan'ny tsiambaratelo fanamarinana. Ny ankamaroan'ny fitaovana DevOps maoderina dia manohana ny MFA. Ary ny lakilen'ny fanamarinana ao amin'ny WebAuthn / U2F (jereo Tetikasa FIDO2) angamba no safidy tsara indrindra ho an'ny MFA ao amin'ny DevOps, raha tantanina tsara.
Fahatezerana amin'ny honahonaMifoha ireo olona ao amin'ny DevOps. Manana ny zavatra "tsy dia manan-tombontsoa loatra" ao amin'ny rany izy ireo. Ary tsy rajako mpamorona kaody intsony izy ireo. Tratran'ny mpandinika am-bava isika izao.
Raha ny tena izy, pipelineMatanjaka kokoa noho ny roa taona lasa izay ny s ankehitriny, nesorina ireo fihetsika sy script malemy, ary misy dingana fitsapana fiarovana fanampiny izay nahitana ireo "droppers" miafina miafina mihitsy aza. commits sy fonosana izay nalaina an-keriny.
Fanontaniana ho an'ny mpamaky: mety hampidi-doza ve ny fizotran'ny fananganana rindrambaiko avy amin'ny loharano ary ny fametrahana azy amin'ny famokarana? Hitanao ve ny DevOps-nao eo amin'ny dingana... fotoana mahafinaritra taloha ho an'ireo mpanao ratsy ve?
Torohevitra farany
Aiza no hanombohana CI/CD pipelines?
Tsotra ny soso-kevitra voalohany eto: Mitandrema tsara famerenana pipelines (izy ireo dia manakiana (loharano) ho an'ny olana ara-piarovana. Lafo vidy ny famerenana nefa ilaina, ary tokony hatao araka ny tokony ho izy. Tokony ho fantatry ny mpandinika izay tokony hojerena. Tsy maintsy jerena ny dingana tsirairay raha misy lesoka.
Angamba mety hanampy ny fitambaran'ireo mpandinika manam-pahaizana manana fitaovana mpitsikilo kaody mampidi-doza mandeha ho azy.
Ny tolo-kevitra faharoa dia ny mampiofana ireo mpamorona izay manoratra pipelineary tazomy ho fiarovana izy ireoZavatra tokony hodinihina:
- Ahoana ny fomba fitantanana araka ny tokony ho izy ny fanamarinana amin'ny serivisy anatiny sy rahona, mba hisorohana ny fanelingelenana amin'ny fikirakirana fahazoan-dàlana maharitra.
- Ahoana ny fomba famerana pipelineamin'ny loharanon-karena marina ilainy hidirana. Mamirapiratra indray ny fitsipiky ny tombontsoa kely indrindra.
- Ahoana ny fomba hanoratana ireo dingana hanaovana pipelineazo averina toy ny fametahana dikan-teny, ary ny fisorohana ny fahalemen'ny tsindrona baiko.
- Ahoana ny fomba fanekena ny fametrahana avy amin'ny fomba fijery fiarovana (hafa izy ireo!): fiarovana inona standardtokony hampifanarahana ny s ary ny fomba hanampiana seky/vavahady mifanaraka amin'izany ao amin'ny pipelines.
Ny tolo-kevitra fahatelo dia ny configure ny CI/CD rafitra amim-pitandremanaFanamarinana matanjaka, tsy misy tenimiafina mahazatra na fikirana tsy azo antoka, tombontsoa kely indrindra… Karakarao ireo lesoka amin'ny plugins sy extensions napetraka. Mety ho ifantohan'ny lahatsoratra manaraka izany, azafady araho hatrany.
Ny tolo-kevitra fahefatra dia ny leverage ny CI/CD pipelines ho an'ny fanaraha-maso ny fiarovanaFamakafakana kaody loharano (SAST), famakafakana ny firafitry ny loharano (SCA), ny fijerena ny fivoahan'ny tsiambaratelo, ny fitaovana fanoherana ny malware, ny scanner fiarovana ny fitoeran-javatra, na ny mpitsikilo mandeha ho azy (DAST sy malware) dia azo ampiasaina tsy tapaka amin'ny pipelineAry mety hampihatra ny lalàna ny fikambanananao standardmomba ny fandrakofana momba ny fanaraha-maso ny fiarovana ao amin'ny CI/CD.
Tsarovy fa ireo fitaovana ireo dia tsy manala ny hevitry ny manam-pahaizana, raha tsy izany dia mety hanana fahatsapana ho voaro diso ianao.
Raha mahay mandray anjara amin'ny OWASP top-tens ianao, dia tetikasa tsara vao haingana ny OWASP Top 10 CI/CD Loza ho an'ny fiarovana.
Fanamarihana momba ny fandavana andraikitra
(1) Ireo ohatra ato amin'ity lahatsoratra ity dia mampiasa ny GitHub ho toy ny SCM, AWS ho mpamatsy rahona, ary GitHub Actions na Jenkins ho CI/CD fitaovana. Tsy malemy/azo antoka kokoa noho ireo safidy hafa izy ireo. Tsy misy fikasana ratsy amin'ny fampahalalam-baovao! Mahery vaika ireo fitaovana ireo ary mila ampiasaina araka ny tokony ho izy.
(2) M3M3N70 sy Fahatezerana amin'ny honahona olona foronina. Ny fitoviana amin'ny olona na vondrona, velona na maty, dia kisendrasendra fotsiny... sa tsia?
Raha hamaky bebe kokoa
- Haymore, A. et al. "Tantara 10 tena misy eto amin'izao tontolo izao momba ny fomba nanaovantsika marimaritra iraisana" CI/CD pipelines ". Vondrona NCC, Janoary 2022.
configure-aws-credentialsHetsika GitHub sy Fametrahana ny OpenID Connect ao amin'ny Amazon Web Services raha mila fanazavana fanampiny momba ny fomba fampandehanana ny baiko AWS ho an'ny fametrahana azy ao amin'ny workflows GitHub.- Lobacevski J. "Fihazonana ny fiarovana ny hetsika sy ny workflows ao amin'ny GitHub Fizarana 1: Fisorohana ny fangatahana pwn"Laboratoara Fiarovana GitLab, Desambra 2020.
- Lobacevski J. "Fihazonana ny fiarovana ny hetsika sy ny fizotran'ny asa ao amin'ny GitHub Fizarana 2: Fidirana tsy azo itokisana". Laboratoara Fiarovana GitLab, Janoary 2021.
- OWASP. "OWASP Top 10" CI/CD Loza ateraky ny fiarovanaJolay 2022.
- Saltzer J. sy Schroeder M. "Ny Fiarovana ny Fampahalalana ao amin'ny Rafitra Solosaina"Apr 1975. Niara-nivoatra tamin'ny teknolojia ny fitsipiky ny fiarovana, saingy 47 taona aty aoriana dia mbola manan-kery ny ankamaroan'ny hevitra momba ny S&S.
- NCSC any Angletera. "Ataovy azo antoka ny fananganana sy ny fametrahana pipeline"Foibe Nasionaly momba ny Fiarovana An-tserasera any Angletera, Febroary 2019.




