Nan pòs anvan nou an sou CI/CD Pipelines, nou te wè kijan pou pirate yon CI/CD senaryo sa a prezimableman te pwoteje.
Ann sonje pwen nou te di nan pòs anvan an: nou te kòmanse ak kèk pipeline ki te vilnerab a Anpwazonnen endirèkteman Pipeline Egzekisyon (I-PPE) epi, pou nou ranje sa, nou deside divize a pipeline an de:
- 1ye pipeline (Build CI), san danje pou D-PPE ak I-PPE, ta verifye kòd PR a, fè build la, epi jenere yon artefak.
- 2yèm la pipeline (Tès CI), tou san danje pou D-PPE ak I-PPE ta verifye kòd debaz la (pou evite modifikasyon script shell) epi egzekite script orijinal yo kont atifak la.
- Pou senkronize CI Tès la pipeline pou kouri APRÈ CI Build la pipeline, nou te itilize kouri_travay_fonksyon deklanche.
Nou te rele sa Senaryo #3.

Malgre ke, jan nou te mansyone nan pòs sa a, gen lòt solisyon, nou deside aplike "solisyon" sa a pou rezon pedagojik, pou nou ka fouye an pwofondè nan vilnerabilite yo. CI/CD pipelines.
Apre sa, nou te wè kijan pou nou pirate senaryo sa a lè nou anpwazonnen atifak laSe sa nou rele Anpwazònman ak atifak, sa vle di kapasite pou modifye (pirate) la pipeline lojik pa modifye yon pipeline asosye.
Ki pwoblèm ki genyen ak apwòch sa a? Nou te wè pwoblèm nan rive lè nenpòt itilizatè “kreye” yon nouvo pipeline.
Si yon itilizatè ouvri yon PR ki gen yon nouvo pipeline, GitHub pral egzekite sa pipeline (si nou gen kèk kondisyon, jan nou te wè a) nan pòs la).
Apre sa, itilizatè a kapab kreye yon nouvo pipeline ak menm non ak Build CI !! Wi, li etonan, men GitHub pèmèt ou kreye de pipelines ki gen menm non an!!
Lè itilizatè a ouvri yon PR ak chanjman sa yo, "nouvo" a pipeline pral egzekite (telechaje yon atifak anpwazonnen) ak Deplwaye CI a pipeline pral egzekite apre sa, sa ki lakòz script shell "modifye" a ranplase script shell "orijinal" ki sitiye nan pipeline espas travay. Kidonk, "solisyon" sa a pa evite vilnerabilite I-PPE a (jan nou ka wè anba a)

Ki pwoblèm ki genyen? Omwen, gen kèk pwoblèm:
- Premyèman, Kijan pou asire w ke pwosesis konstriksyon an pa te modifye? Nan senaryo sa a, itilizatè malveyan an te kapab modifye pwosesis konstriksyon an lè l sèvi avèk li. pipeline pou kreye yon atifak anpwazonnen.
- Dezyèmman, Ki jan nou ka evalye orijin yon atifak?
Kesyon sa yo lage nou nan bra yo Atestasyon Lojisyèl domèn!!
Atestasyon Lojisyèl
An atestasyon se yon moso nan done reprezante prèv yon evènmanNan mond reyèl la, nou jeneralman rele sa yo sètifikasyon.
Pa egzanp, lè yon laboratwa teste san ou, done konsènan tès la anrejistre epi sètifye. Rezilta tès san yo verifye ta dwe apwouve bèso tibebe w la epi retrace.

Pi pre domèn IT nou an, ou ta ka devine ki sa ki ta yon tradiksyon pwosesis sa a, pa egzanp, yon pwosesis konpilasyon.

Enfòmasyon sou anviwònman sèvè konpilasyon an ak zouti yo, materyèl yo (kòd sous la), ak pwodwi/artefak yo (kòd binè a) ta fè pati atestasyon sa a.
Natirèlman, atestasyon an dwe pwodui pa yon atestatè otorize (otantifye e ki pa repudiab) pou li ka bay kredibilite.
Petèt, kèk nan nou ta ka ap panse ... e kisa ki la diferans ki genyen ant siyati ak atestasyon?
Siyati Kòd ak Atestasyon
Nan yon nivo ki wo, yon siyati kreye lè l sèvi avèk yon pè kle ak yon atifak. Pè kle a konsiste de yon kle piblik ak yon kle prive.

Itilizatè a siyen yon atifak lè l sèvi avèk kle prive a, epi lòt moun ka verifye siyati a lè l sèvi avèk kle piblik la. Kle prive a dwe rete sekrè, men kle piblik la distribye toupatou.
Siyati yo ka itilize pou pwouve ke moun ki gen kle prive a te itilize kle prive a pou siyen atifak la.
Siyati pa pwouve
- Itilizatè a entansyon pou siyen atik la (yo te ka twonpe yo), oubyen
- Entansyon itilizatè a pou fè nenpòt reklamasyon espesifik sou atifak la
avèk Sètifika, olye pou yo siyen yon atifak dirèkteman, itilizatè yo kreye yon kalite dokiman ki kaptire entansyon yo dèyè siyen atik la ak nenpòt reklamasyon espesifik yo te fèt kòm yon pati nan siyati sa a.
Kad Atestasyon An-toto
Kad ki pi komen an se Kad Atestasyon an antye
- defini yon standard fòma pou atestasyon ki lye sijè yo, atifak yo dekri yo, ak metadone otantifye sou atifak la
- bay yon seri predika predefini pou kominike done meta otantifye atravè ak atravè chenn ekipman pou lojisyèl yo
Ann antre nan kèk detay sou fòma atestasyon an.
An Atestasyon se yon dokiman ki siyen dijitalman ki genyen Deklarasyon.
The Deklarasyon se kouch mitan atestasyon an, ki lye li ak yon bagay patikilye Sijè epi idantifye san anbigwite kalite yo Predikat:
- Sijè: a referans kriptografikman an sekirite pou atifak la (anjeneral atravè yon hach), ak
- Predikayon seri espesifik reklamasyon Yo rele sa yon Deklarasyon sou atifak sa a. Ou ka itilize deklarasyon sa yo pou eksprime (epi pita pwouve) nenpòt bagay ou ka panse! Yo ka reprezante apwobasyon manyèl, provenans atifak, rezilta tès otomatik, yon tras odit, oswa plis ankò!
Lè Deklarasyon sa a siyen kriptografikman, yo refere li kòm yon Atestasyon

Nan fason sa a, pa egzanp, Alice kreye yon Deklarasyon sou yon atifak epi siyen li lè l sèvi avèk kle prive li, pou kreye yon Atestasyon.
- Bob kapab lè sa a verifye siyati a nan Atestasyon sa a, sa ki pèmèt li fè konfyans nan reklamasyon yo anndan an.
Bob ka itilize reklamasyon sa yo apre sa. deside si wi ou non pou pèmèt yo itilize atifak sa a.

Èske Atestasyon yo ka ede rezoud pwoblèm anpwazònman pa atifak?
Apre entwodiksyon sa a sou Atestasyon yo, ann retounen sou pwoblèm nou an. Ki jan atestasyon yo ka ede nou rezoud pwoblèm nou an, sa vle di pou evite anpwazònman ak atifak?
Itilizatè malveyan an te kapab kreye yon atifak san l pa kontoune mekanis "ofisyèl" la, sa vle di lè l sèvi avèk pwòp pipeline pou jenere atifak la.
Li ta etonan si nou te ka pwouve ke atifak y ap telechaje yo te konstwi avèk dokiman ofisyèl yo. pipelineSa a se sèlman yon egzanp sou sa nou ta ka rele "Pwen manipilasyon", men ta ka gen anpil lòt ankò.

Jan ou ka wè nan foto ki anwo a, gen plizyè pwen kote moun ka fè manipilasyon. Nan fason sa a, konsomatè a pipeline (Tès CI nan egzanp nou an) dwe evalye entegrite pwosesis konstriksyon an kòm byen ke nan entegrite atifak la li menm.
Nan egzanp nou an, nou kreye atifak anpwazonnen an lè nou entwodui yon nouvo (anpwazonnen) pipeline ki manipile pwosesis konstriksyon an. Men, itilizatè malveyan an te kapab:
- modifye kòd la apre yo fin retire li nan SCM pou jenere yon binè move
- ranplase binè ki kòrèk la ki pwodui pa konpilasyon an ak nenpòt lòt binè move.
- konpwomèt Rejis Atifak la epi telechaje yon atifak anpwazonnen ki konstwi nan nenpòt lòt fason
- elatriye.
Jan ou ka wè, ka gen plizyè pwen "manipilasyon".
Sa ki enpòtan la a? Li evidan pou pwoteje tout pwen "manipilasyon" sa yo. Men, alafen, sa ki pi enpòtan an se ke "konsomatè" atifak la ka evalye entegrite atifak la, epi deside si li pral kontinye avè l oswa non.
Nou kapab evalye entegrite yon atifak nan de fason.
Youn nan yo se lè w evalye orijin nan atifak la.
Lè w jenere yon Atestasyon Provenans, nou bay metadone itil (byen otantifye e ki pa repudie) sou atifak la. Nan egzanp sa yo, nou pral itilize Sèl Xygeni (Kouch Atestasyon Lojisyèl pou Konfyans), konpozan pou jenere, anrejistre, epi verifye atestasyon lojisyèl.

- name: Building ...
run: |
# mvn will compile and create target/MyApp.war
mvn clean package
- name: Generating provenance
run: |
#!/usr/bin/env bash
shopt -s expand_aliases
alias salt=$PWD/salt_pro/xygeni_salt/salt
echo " "
echo "-----------"
echo "Generating Provenance with CLI ..."
salt at slsa \
--basedir ${GITHUB_WORKSPACE}/target \
--key="${PRIVATE_KEY}" \
--public-key=${GITHUB_WORKSPACE}/Test1_public.pem \
--key-password=${KEY_PASSWD} \
--output-unsigned=${GITHUB_WORKSPACE}/cli_provenance_${PIPELINE}_unsigned.json \
--pipeline ${PIPELINE} --pretty-print \
--file ./MyApp.war
Nan kòd ki anwo a, ou ka wè gen yon etap ki bati fichye lagè a ak yon dezyèm etap ki jenere Atestasyon ProvenansPou fè sa, la pipeline itilize kle prive a epi li enkli kle piblik la tou nan atestasyon an.
Dèyè sèn nan, Xygeni a sèl kòmand lan estoke atestasyon an nan yon chèk (ke yo rele tou yon rejis atestasyon, Dosye nan ka nou an men ou ka itilize nenpòt lòt). Fè sa, konsomatè a pipeline ka gen ladan Xygeni Motè Verifikasyon pou verifye orijin atifak la epi evalye entegrite atifak la.
- name: 'Verifying the attestation'
run: |
#!/usr/bin/bash
echo " "
echo "-------"
# Calculate sha256sum for the artifact
SHA_SUM=$(sha256sum ./MyApp.war | cut -f1 -d ' ')
# Recover the attestation Id from the sha256sum
ATT_ID=$(echo $(salt -q registry search --digest sha256:$SHA_SUM --format json) | jq -r .[-1].gitoidSha256)
echo " "
echo "-------"
# Download the provenance attestation
echo "Downloading the provenance attestation ..."
salt -q reg get --id=$ATT_ID --format=json > ${GITHUB_WORKSPACE}/provenance_kk.signed.json
echo " "
echo "-------"
echo "Verifying provenance ..."
salt verify \
--basedir ${GITHUB_WORKSPACE} \
--attestation=${GITHUB_WORKSPACE}/provenance_kk.signed.json \
--public-key=${GITHUB_WORKSPACE}/Test1_public.pem \
--file ./MyApp.war
Pwosesis verifikasyon an evalye:
- The Atifak sha256sum lan valab (sa vle di gen yon atestasyon sou "sijè" sa a), epi
- The atestasyon an byen otantifye (li te pwodui lè l sèvi avèk kle prive ki apwopriye a)
Pwosesis verifikasyon sa a ka evalye si tou de atifak la ak atestasyon an valab.
Men, jan ou sonje, nan ka nou an, yon moun "malveyan" te pwodui atifak la. pipeline (sa vle di pa orijinal la pa yon modifikasyon pipeline). Lè sa a, nou dwe kontinye epi verifye yon lòt aspè: ke Atifak la te pwodui pa "orijinal la" pipeline, pa okenn lòt.
Pou fè sa, jis mete yon liy senp pou verifye kondisyon sa a, pa egzanp:
echo " "
echo "-------"
# Download the provenance attestation
echo "Downloading the provenance attestation ..."
salt -q reg get --id=$ATT_ID --format=json > ${GITHUB_WORKSPACE}/provenance_kk.signed.json
WFR=$(jq -r .payload ${GITHUB_WORKSPACE}/provenance_kk.signed.json |base64 -d | jq -r .predicate.buildDefinition.internalParameters.environment.GITHUB_WORKFLOW_REF)
echo $WFR | grep cicd_top10_3_salt\/.github\/workflows\/build.yml
Verifikasyon adisyonèl sa a ap echwe si "kof" nou an pa t pwodui atifak la. pipeline.
Si atifak la te pwodui pa orijinal nou an pipeline (cicd_top10_3_salt/.github/workflows/build.yml), kòmand grep la ap reyisi, sinon, li pral echwe, kraze pipeline epi anile nenpòt lòt etap.
"Konstriktè a" pipeline se jis yon pwen manipilasyon pou verifye men, jan nou te mansyone anvan, gen kèk lòt pwen manipilasyon nou ta dwe verifye.
Pou egzanp, E si yo te modifye kòd sous la apre yo te fin tcheke depo a epi anvan kòmandman konstriksyon an? Nan ka sa a, kòd ki pou konstwi a pa menm ak sa ki estoke nan la SCM.
Pou tcheke pwen manipilasyon sa a tèlman fasil ke tcheke hachage materyèl la nan chak etap.
SHA_ATT_MATERIAL=$(jq -r .payload ${GITHUB_WORKSPACE}/provenance_kk.signed.json | base64 -d | jq -r .predicate.attestations[0].predicate.materials[].digest[])
SHA_STEP_MATERIAL=$(jq -r .payload ${GITHUB_WORKSPACE}/provenance_kk.signed.json | base64 -d | jq -r .predicate.attestations[3].predicate.materials[0].digest[])
Konklizyon
An rezime, yon Atestasyon Lojisyèl se yon deklarasyon ki fèt sou yon lojisyèl, sa vle di yon deklarasyon otantifye (metadone) sou yon atifak lojisyèl oswa yon koleksyon atifak lojisyèl.
Atestasyon lojisyèl yo se yon jeneralizasyon siyati kòd/atifak brit. Atestasyon an se yon dokiman siyen (nan yon fòma bay, tipikman ki baze sou JSON) ki asosye metadone ak yon atifak. Yo reprezante prèv ki lye antre (materyèl) ak sòti (atifak pwodui) nan chak etap konstriksyon.
Atestasyon yo bay yon dosye verifye sou etap ki te fèt pou konstwi atifak lojisyèl final yo, ki gen ladan materyèl antre pou chak etap ak kòmandman konstriksyon yo egzekite.
An konklizyon, Atestasyon Lojisyèl yo se yon bon mekanis pou verifye anpil aspè entegrite diferan nan pwosesis konstriksyon nou an.
Ou fini seri a? Pa enkyete w! Ou lib pou retounen nan 'Anpwazonnen Pipeline Ekzekisyon (PPE)' oubyen nenpòt lòt pòs ki reveye enterè w ankò!
Rete branche, nou pral fouye an pwofondè nan atestasyon lojisyèl yo ak build security nan lòt pòs blog yo.







