Ke eng e ka senyehang ka eona CI/CD pipelines?

Kopanyo e tsoelang pele le phano e tsoelang pele (CI/CD) pipelines ke motheo oa mokhatlo ofe kapa ofe oa software o hahang software ka tsela ea "sejoale-joale". Boiketsetso bo fana ka matla a maholo, empa bahlahisi ba bangata ba hloloheloa boikarabello boo bo bo tsamaisang.

developer indonesia: E, re nka CI/CD security ka botebo mme ba na le taolo e matla ho bahlokomedi ba khoutu, tlhahlobo commitpele ho kopanngoa ha dikopano; mesebetsi le pipelineli hlokomeloa ke basebetsi ba baholo, li hlokomela hore liphiri li se ke tsa senoloa pipelines. Mme sesebediswa se kentswe ke basebetsi ba tsebang ntho eo. Ke eng e ka senyehang?

Moqapi ea ratehang, CI/CD Mekhoa ea eona e rarahane. Sebaka sa eona se seholo sa tlhaselo se hohetse batho ba bolaeang. Ho molemo ho ba hlokolosi 'me u se ke ua itšepa ho feta tekano.

Ka linako tse ling tlhophiso ea kamehla e bolokoa 'me e ba motsoalle ea molemo ka ho fetisisa oa li-hacker. Liphoso tse tebileng li ka ba teng ho CI/CD pipeline mehlodi, tlhophisong ea sistimi, kapa ho potoloha ts'ebetso le moelelo oa pipeline le kamoo e qalisoang kateng.

Posong ena re tla ipeha boemong ba batšoantšisi ba babe. Ak'u nahane re ne re bala menahano ea M3M3N70 (Memori ea Mori?) le Bohale ba Mokhoabo kae-kae lebitleng le lefifi, mohlomong ka puo e seng ea bophirima, empa le ka mohla u se ke ua fosoa ke hore bobe bo atile lefatšeng ka bophara.

 

Mehleng e metle ea khale ho ne ho le bonolo haholo…

M3M3N70: Ho kgutlela mehleng e monate ya kgale kgwebo ya rona e ne e le bonolo haholo… Matsatsi a se nang letho e ne e le ditholwana tse sa lebellwang, di-app di ne di bulehile haholo ka di-vuln tse bonolo ho di sebedisa, mme re ne re ka tsamaya ka lehlakoreng ka potlako.

Bohale ba Mokhoabo: Fu#@Hell! Ba bang ba na le kelello e kang ea 'mutla', empa lintho li fetohile. Banna ba baholo ba ile ba beha mabaka a mangata ka lintho tseo tse mpe tsa AppSec.

M3M3N70: E. Empa maoatla a macha ke baqapi. Ho rona, ho bile bonolo ho sebelisa lisebelisoa tseo banna bana ba li sebelisang. CI, haholo-holo, ke moepo oa khauta! Li-tokens tsa phihlello ea leru, SCM mangolo a tumello, diphasewete tsa polokelo ya data ya tlhahiso, dinotlolo tsa poraefete tsa SSH, mangolo a tumello a basebedisi ba bang ba CI… Ho tloha dinthong tse tenang tsa ntshetsopele ho ya ho tsa nnete ho ne ho se bonolo.

Ho iketsetsa bakeng sa ho haha, ho leka le ho kenya software ka CI/CD Hangata sesebelisoa se hloka ho fetisetsa liphiri ho litaelo ka mehato. 'Me hangata lia lutla, ka liphello tse mpe.

Pipelinere hloka liphiri tseo ka linako tse ling li lutlang

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.

Mohlomong linako tse monate tsa khale e ne e le ho fumana historing ea Git .env faele (moqapi o lebetse ho e eketsa ho .gitignore):

AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=wJalrXUtn...
AWS_REGION=us-east-1
APP_FOLDER=...
S3BUCKET=...

e neng e sebelisoa mosebetsing oa GitHub .github/deploy.yaml e neng e na le ntho e kang ena:

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! Dinotlolo tseo tsa aws di ne di sebetsa! Re ile ra leka phetoho ya inocuos ho app pele, mme ra eketsa bohloko ha banna bao ba ne ba bonahala ba sa tsebe. Bingo! Letsholo le letle hakaakang…

Motho ea sebe o sebelisitse linotlolo tsa AWS feela ho kenya sesebelisoa se fetotsoeng se nang le malware ebe o tsamaisa taelo ea ho romela ka mangolo a joalo. Liphiri tse lutlileng, hammoho le tlhaiso-leseling e fumanehang ho pipeline"Letšolo le letle hakaakang!" mohlomong le bolela hore Memento e sentse mofutsana ea hlokofalitsoeng.

Seo Memento e re bolellang sona mona ke hore hang ha ho se ho etsahetse ho dutla ha sephiri, joalo ka linotlolo tsa phihlello tsa AWS mohlaleng, o tlameha ho hlakola lekunutu (potoloha linotlolo tse ka holimo) hang-hangKamehla ho na le fensetere ea ho pepesehela pakeng tsa ho dutla ha metsi commit le ho se netefatsoe ha sephiri; ho ngola nalane ea Git bocha ho thata (esita le mmuso o thata ka ho fetisisa wa bompoli o lekile ho ngola nalane e jwalo botjha, empa ha ho a ka ha thusa letho) mme mohlomong ha e a ka ya atleha (metswalle ya rona e kanna ya ba e ile ya etsa jwalo ka pele ho polokelo ka ho dutla ha sephiri commit). Potoloha dikonopo hang-hang, 'me u rapele ha u ntse u bala litlaleho tsa mesebetsi bakeng sa ak'haonte e reriloeng nakong ea fensetere ea ho pepesehela!

Mohlomong mekhatlo e lokela ho thibelo ea ho sebelisa liphiri tsa nako e telele ho CI/CD pipelines, 'me u li nkele sebaka ka mangolo a tumello a nakoana. Mohlaleng o fetileng ka linotlolo tsa AWS liketsong tsa GitHub, ho bolokehile ho sebelisa Mofani oa OpenID Connect (OIDC) ho fumana mangolo a tumello a nako e khutšoanyane a hlokahalang bakeng sa liketso.

Bohale ba Mokhoabo: U bile le lehlohonolo haholo! Ho dutla ha dingolwa tse nang le dinotlolo tse thata e ne e le mokgwa o tlwaelehileng mehleng ya kgale, esita le dibaketeng tsa S3 tse fumanehang phatlalatsa. Seo o neng o hloka ho se etsa feela ke ho tsamaya dintho tse ka hara bakete le ho etsa di-grepping ho fumana dintho tse kgahlehang.

Ka linako tse ling sebaka se sebelisetsoang ho kenngoa (bakete ea AWS S3 mohlaleng ona) se ne se bulehile hore se baloe ke batho ba kantle, ka lebaka la phoso ea tlhophiso (e sa kang ea bonoa). Bohale ba Mokhoabo e sebelisitsoeng e ne e le ntho e kang ena:

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>'"

Mohlomong bakete e entsoe ka mokhoa oa ho lokisa lintho o ka skenoang ka bohona bakeng sa liphoso tsa ts'ireletso.

Tlhophiso ea kamehla ea sesebelisoa e ne e le papali ho rona

Ho fana ka mehlala e tiileng, a re bueng ka Jenkins, e 'ngoe ea lisebelisoa tsa CI tse tsebahalang haholo.

Bohale ba Mokhoabo: Na o hopola lebokose leo la ho hlahloba la "Enable Security" ho Jenkins, le hore na ke mekhatlo e mekae e khethileng ho se e qale ka lebaka la boiketlo? Le bao "Mang kapa mang a ka etsa eng kapa eng"Metswako ya tumello e le ya kamehla?" Mme di-plugin tseo tse tenang tsa Jenkins, jwalo ka Plugin ea GitHub OAuthMotho ea e hlophisitseng o khethile "Fana ka litumello tsa BALA ho Basebelisi bohle ba Netefalitsoeng" le "Sebelisa litumello tsa polokelo ea GitHub", a re fa phihlello ea merero eohle ea bona.

(Ke kopa tshwarelo, Jenkins, ka ho o beha mohlala 😉

Lula u tseba melao-motheo ea tšireletso (esita le haeba u lemaletse eona). E 'ngoe ke Sireletsa ka boiketsetso molao-motheo: ditaolo di lokela ho sebediswa ho latela di-setting tse sireletsehileng ka ho fetisisa kamoo ho ka kgonehang. Tshireletso e lokela ho hahuwa ho CI/CD lisebelisoa le pipelineho tloha qalong ho ea holimo, ho e-na le ho ba ntho e nahanoang ka morao. Empa ho ba bonolo ho e sebelisa le ho ba bonolo hangata ho thulana le tšireletso.

Bakeng sa nyeoe ea Jenkins, netefatso e hahiloeng kahare e fokola haholo: le ka mohla u se ke ua sebelisa mekhoa ea netefatso e hahiloeng ho Jenkins. Ho molemo ho khetha mokhoa oa motho oa boraro (SAML, LDAP, Google ...), o nang le plugin ea Leano la Authorization le Thehiloeng ho Role-Based (“RBAC”). 'Me u be hlokolosi haholo ka admin akhaonto.

Hlokomela hore na mosebetsi le pipeline lifaele tsa Jenkins lia sebetsoa. ​​Ho tšoana le ka Plugin ea tlhophiso-joaloka-Khoutu le difaele tsa yona tsa config, tse sebetsang ho configuration ya Jenkins.

Ho tloha ho beng ba ikemetseng CI/CD litsamaiso ho ea ho tsa SaaS tse thehiloeng marung li felisa likotsi tse ling tse ka bang teng tse lumellang motsamao o ka thoko ka har'a netweke ea mokhatlo, empa li ekelitse tse ling, joalo ka ho tlameha ho bula likhokahano tsa kantle pakeng tsa litsamaiso tse teng tsa kahare le tse kantle. CI/CD sesebelisoa.

Mekhatlo e lokela ho ikitlaetsacistlhokomelo e loketseng ho thatafatsa CI/CD tsamaiso, ho qala ka di-setting tse thibelang ka ho fetisisa mme butle-butle ho buleha ka ditumello tse fokolang tse hlokahalang bakeng sa pipeline mehato.

Ho hlophisa tshireletso ho CI/CD Lisebelisoa e ka ba tse rarahaneng haholo. Tse ngata li na le li-plugins kapa li-extensions tse nang le bofokoli bo bongata 'me li hloka ho ntlafatsoa.

Li-scanner tsa ts'ireletso tse fosahetseng bakeng sa lisebelisoa tse rarahaneng joalo, kapa litekanyetso li ka thusa.

Khoutu ea ho kenya pipeline litaelo tsa boithabiso le phaello

M3M3N70Na o kile wa sebedisa Di-Checkout tsa Khoutu tse sa Tshepahaleng, tseo diketso le dingolwa tse kotsing ya ho kenngwa ka taelo?

Karolo ena e bontša hore pipeline ka boyona e ka ba le diphoso tsa ho ngola khoutu tse dumellang batho ba babe ho kenya tshebetsong khoutu ka tsela e sa reroang ho pipeline ntle le ho fetola pipeline mohloli ka boonaMohlala, ho sebelisa PR

Mohlala oa pele oa mosebetsi o sa thabiseng oa 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 ...

Ho kopanya pull_request_target Sesosa sa mosebetsi ka ho hlahloba ka ho hlaka PR e sa tšepahaleng ke mokhoa o kotsi o ka lebisang ho sekisetsa polokelong. Mohlaleng, motsoako o sa thabiseng oa:

  • pull_request_target ketsahalo, eo ka boiketsetso e nang le tumello ea ho ngola ho polokelo e reretsoeng le liphiri tsa polokelo e reretsoeng, esita le ho tsoa liferekong tsa kantle, 'me e sebetsa moelelong oa polokelo e reretsoeng ea PR,
  • hlahloba khoutu ea PR ho tsoa mohloling, repo e sa tšepahaleng,
  • qala sengoloa sefe kapa sefe se ka sebetsang ho dikahare tse laolwang ke PR, jwalo ka tabeng ya npm install, 'me
  • ho se sebelise boemo ho qholotsa pull_request_target ketsahalo e tla sebetsa feela haeba mofuta o itseng oa leibole ea 'PR ena e ne e hlahlobiloe' e abetsoe PR (basebelisi ba kantle ba ke ke ba abela PR mabitso).

Mohlala oa bobeli o nka tlhahiso e sa tšepahaleng (ho tsoa bothateng, maikutlong kapa pull request) e le mohloli oa likhang tse fetisetsoang ho pipeline taelo ka dipolelwana. Ena ke pipeline mofuta oa bofokoli ba ente ea taelo ea OS.

- name: Check title
run: |
title="$"
if [[ ! $title =~ ^.*:\ .*$ ]]; then
echo "Bad issue title"
exit 1
fi

Ts'ebetso ea ho matha e hlahisa sengoloa sa nakoana sa khetla se thehiloeng ho template, ka $ e nketsoe sebaka, e leng se etsang hore e be kotsing ea ho kenngoa taelo ea khetla. Mohlaseli ea nang le ak'haonte ea bohata ea GitHub a ka baka bothata ka sehlooho a"; bad_code_goes_here;#, le ho phatloha! 

Bohale ba Mokhoabo: Oh, banna bao ba ne ba bula lemati la ho kenya taelo ka ho bula bothata feela…

Ho bile le bofokoli ba ts'ebetso ea khoutu liketsong tsa GitHub, joalo ka gajira-comment, joale e lokisitsoe. Ka kopo bala "Tlhahiso e sa tšepahaleng mesebetsing ea GitHub" bakeng sa lintlha tse feletseng.

Thuto ea bohlokoa ea pale: Le ka mohla u se ke ua lefa le ho haha ​​li-PR ho tsoa mehloling e sa tšepahaleng ntle le ho hlahloba PR pele. 'Ho sa tsheptjwe' mona, ntle le haeba ho na le netefatso e matla ya hore na tšimoloho e tswa hokae, ho ka bolela akhaonto efe kapa efe ya moqapi e ka utsuwang.

 

Ho kenngwa ha malware ho sa reroang mona!

Tšebeliso e tsoelang pele ke sehlohlolo sa boiketsetso, empa sehlohlolo seo se ka ferekanngoa ke ho hloka taolo e nepahetseng ea tumello ho pipeline phalla.

Likotsi tsa ho kenngoa ha thepa ka boiketsetso ho tsoa mohloling commit ho litsamaiso tsa tlhahiso ho kenyelletsa monyetla oa hore khoutu e kotsi e sebelisoe libakeng tsa tlhahiso ntle le ho bonoa, hammoho le monyetla oa hore liphoso ts'ebetsong ea ho kenya tšebetsong li bake tšitiso kapa ho tima ha data.

E le ho fokotsa likotsi tsena, hangata ho kgothaletswa hore mekgatlo e kenye tshebetsong "kgato e thata" tshebetsong ya yona ya ho kenya batho mosebetsing, e leng se hlokang tumello ya batho pele ditokollo di romelwa dibakeng tse qetellang.

Ba koala mamati

Bohale ba Mokhoabo: Liphasewete tseo tse thabisang tsa kamehla tse ho CI/CD lisebelisoa li ntse li hlakoloa. Ho fihlella /var/lib/jenkins/secrets/initialAdminPassword Hona joale ha e sa le eo. Lisebelisoa tse ngata joale li fana ka 2FA, eo Covid e e entseng hore e tume, 'me esita le tšoene e botsoa ka ho fetisisa ea khoutu e teng e e sebelisa!

M3M3N70: Re loana le 2FA, empa ha ho bonolo hakaalo. Ho thata ho hlasela banna bao ka lerumo, joalo ka ha "Scatter Swine" e entse le Twilio. Ka dinotlolo tsa WebAuthn ho thata haholo. Bonyane, re ka leka ho utsoa li-cookie ho qoba MFA, empa o hloka ho kena ka har'a lebokose la moqapi.

Netefatso ea Mabaka a Mangata ke mohato o motle o lebisang tseleng e nepahetseng bakeng sa ho fokotsa kotsi ea ho lutla ha liphiri tsa netefatso. Bongata ba lisebelisoa tsa sejoale-joale tsa DevOps li tšehetsa MFA. Le linotlolo tsa netefatso tlas'a WebAuthn / U2F (sheba Morero oa FIDO2) mohlomong ke khetho e ntle ka ho fetisisa bakeng sa MFA ho DevOps, haeba e laoloa hantle.

Bohale ba Mokhoabo: Bahlankana ba DevOps baa tsoha. Ba na le ntho e "se nang le tokelo e nyane" maling a bona. 'Me ha e sa le litšoene tsa khoutu. Joale re tšoaroa ka leeme ke bahlahlobi.

Haele hantle, pipelineHona joale li matla hanyane ho feta lilemong tse 'maloa tse fetileng, ka liketso tse fokolang le lingoloa tse tlositsoeng, le ka mehato e meng ea liteko tsa ts'ireletso e ileng ea lemoha le li-dropper tsa rona tse patiloeng ka lenyele. commitle liphutheloana tseo re li utsoitseng.

Potso bakeng sa 'mali: na ts'ebetso ea ho aha software ho tsoa mehloling le ho e kenya tlhahisong ke khoebo e kotsi? Na u ka bona DevOps ea hau mohatong oa linako tse monate bakeng sa batho ba babe?

Litlhahiso tsa ho qetela

Moo u ka qalang teng CI/CD pipelines?

Tlhahiso ea pele e bonolo mona: Ka hloko tekolo botjha pipelines (ke ho bohlokoa mehlodi) bakeng sa litaba tsa ts'ireletso. Litlhahlobo li bitsa chelete e ngata empa lia hlokahala, 'me li lokela ho etsoa ka nepo. Bahlahlobi ba lokela ho tseba seo ba lokelang ho se sheba. Mohato o mong le o mong o lokela ho hlahlojoa bakeng sa liphoso.

Mohlomong motsoako oa bahlahlobi ba litsebi ba hlometseng ka li-scanner tsa khoutu tse kotsi tse iketsang o ka thusa.

Kgothaletso ya bobedi ke ho koetlisa bahlahisi ba ngolang pipelinele ho li boloka li sireletsehileLintho tseo u lokelang ho li nahana:

  • Mokhoa oa ho sebetsana le netefatso ka nepo ka lits'ebeletso tsa kahare le tsa leru, ho qoba khathatso ea ho sebetsana le mangolo a tumello a nako e telele.
  • Mokhoa oa ho fokotsa pipelineho ea ho sete e nepahetseng ea mehloli eo e hlokang ho e fumana. Molao-motheo oa litokelo tse fokolang o khanya hape.
  • Mokhoa oa ho ngola mehato ea ho etsa pipelinee ka boela ea hlahisoa hape joalo ka ho penya mofuta, le ho qoba bofokoli ba ho kenya taelo.
  • Mokhoa oa ho amohela ho kenngoa ha lisebelisoa ho latela pono ea ts'ireletso (ke ba bang!): ke ts'ireletso efe standards e lokela ho bapiswa le mokhoa oa ho eketsa licheke/liheke tse tsamaellanang ho pipelines.

Tlhahiso ea boraro ke ho lokisa CI/CD tsamaiso ka tlhokomelo e loketsengNetefatso e matla, ha ho na diphasewete tsa kamehla kapa di-setting tse sa sireletsehang, ditokelo tse fokolang… Hlokomela bofokodi ho di-plugins le dikatoloso tse kentsweng. Ena e ka ba ntlha ya bohlokwa ya diposo tse latelang, ka kopo dula o mametse.

Tlhahiso ea bone ke ho sebelisa monyetla oa ho CI/CD pipelines bakeng sa ts'ireletso ea othomathikiTlhahlobo ea khoutu ea mohloli (SAST), tlhahlobo ea motsoako oa mohloli (SCA), diphiri tsa ho skena ha di-secret dutting, disebediswa tse lwantshang malware, di-scanner tsa tshireletso ya dijana, kapa di-detector tsa nako ya ho sebetsa tse iketsahallang (DAST le malware) di ka sebediswa kgafetsa ho pipeline'Me mokhatlo oa hau o ka 'na oa qobella standardmabapi le tšireletso mabapi le ho hlahloba ts'ireletso ho CI/CD.

Hopola, lisebelisoa tsena ha li tlose tlhahlobo ea litsebi ho tsoa ho equation, ho seng joalo u ka ba le maikutlo a fosahetseng a tšireletso.

Haeba o tseba OWASP top-tens, projeke e ntle ya morao tjena ke OWASP Holimo ho 10 CI/CD Kotsi ea Tšireletso.

Tlhokomeliso ea Boitlhotlhollo

(1) Mehlala e posong ena e sebelisa GitHub e le SCM, AWS e le mofani oa leru, le GitHub Actions kapa Jenkins e le CI/CD sesebelisoa. Ha li fokola / ha li bolokehe ho feta mekhoa e meng ea tsona. Ha ho na sepheo se sebe sa boralitaba! Lisebelisoa tsena li matla 'me li hloka ho sebelisoa ka nepo.

(2) M3M3N70 'me Bohale ba Mokhoabo ke baanegwa ba iqapetsoeng. Ho tšoana le batho kapa lihlopha, ba phelang kapa ba shoeleng, ke ntho e etsahalang ka tšohanyetso feela… kapa na ho joalo?

Ho bala haholoanyane

lisebelisoa tsa tlhahlobo ea sebopeho sa software ea lisebelisoa tsa sca
Beha pele, lokisa, le ho sireletsa likotsi tsa software ea hau
Fumana Ak'haonte ea Hao ea Mahala.
Ha ho na karete ea mokitlane e hlokahalang.

Sireletsa Ntlafatso le Phano ea Software ea Hao

ka Xygeni Product Suite