Maxaa khaldami kara CI/CD pipelines?

Isdhexgal joogto ah iyo gaarsiin joogto ah (CI/CD) pipelines waa aasaaska urur kasta oo software ah oo ku dhisa software-ka hab "casri ah". Otomaatiggu wuxuu bixiyaa awood weyn, laakiin horumariyayaashu badankood waxay seegaan mas'uuliyadda ka dhalan karta.

Developer: Haa, waan qaadanaynaa CI/CD ammaanka si dhab ah oo aad u xakameyn karto kuwa ilaaliya koodhka, dib u eeg commitka hor isku-darka; shaqooyinka iyo pipelineshaqaalaha sare ayaa ilaaliya, waxayna ka taxadaraan inaysan qarin sirta gudaha pipelines. Qalabkana waxaa rakibay shaqaale yaqaana waxa. Maxaa khaldami kara?

Horumariye qaali ah, CI/CD Nidaamyadu waa kuwo adag. Weerarkeeda ballaaran wuxuu soo jiitay jilayaasha xunxun. Waxaa fiican inaad ka digtoonaato oo aadan waligaa kalsooni badan qabin.

Qaabeynta caadiga ah mararka qaarkood waa la ilaaliyaa waxayna noqotaa saaxiibka ugu fiican ee jabsadayaasha. Cilladaha muhiimka ah ayaa ku jiri kara gudaha CI/CD pipeline ilo, habaynta nidaamka, ama agagaarka geeddi-socodka iyo macnaha guud ee pipeline iyo sida loo kiciyo.

Qoraalkan waxaan isku gelin doonnaa booska jilayaasha xun. Bal qiyaas inaan akhrinaynay fikradaha ku saabsan M3M3N70 (Memento Mori?) iyo Cadhada Qoyan meel shabakadda mugdiga ah ku taal, malaha luqad aan reer galbeed ahayn, laakiin ha moogaan in sharka uu ku faafay adduunka oo dhan.

 

Waagii hore ee wanaagsanaa aad bay u fududayd…

M3M3N70: Dib ugu noqoshada waagii hore ee wanaagsanaa ganacsigeennu aad buu u fududaa… Maalmaha eber-maalmood waxay ahaayeen kuwo aan la isku halleyn karin, barnaamijyaduna si ballaaran ayay u furnaayeen oo si fudud looga faa'iidaysan karo, waxaanan si tartiib tartiib ah ugu dhaqaaqi karnaa dhinaca.

Cadhada Qoyan: Fu#@Jahannamo! Qaar baa halkaas ka fikiray, laakiin wax baa is beddelay. Raggii waaweynaa aad bay u danaynayeen waxa AppSec ku saabsan.

M3M3N70: Haa. Laakiin nacasyada cusub waa horumariyayaasha. Annaga, way noo fududaatay inaan isticmaalno qalabka ay nimankani isticmaalaan. CI, gaar ahaan, waa macdan dahab ah! Calaamadaha marin u helka daruuraha, SCM aqoonsiyada, ereyada sirta ah ee keydka xogta wax soo saarka, furayaasha gaarka ah ee SSH, aqoonsiyada isticmaaleyaasha kale ee CI… Ka boodista waxyaabaha horumarinta ee caajiska ah una gudubta kuwa dhabta ah waxay ahayd wax aan fududayn.

Otomaatigga dhismaha, tijaabinta iyo gelinta software-ka iyadoo la adeegsanayo CI/CD Qalabku wuxuu inta badan u baahan yahay inuu sir u gudbiyo amarrada tallaabooyin. Badanaana waa la daadiyo, taasoo leh cawaaqib xumo.

Pipelinewaxay u baahan yihiin sir mararka qaarkood la daadiyo

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.

Malaha waayihii hore ee wanaagsanaa waxay ahayd in laga helo taariikhda Git .env faylka (horumariyaha ayaa illowday inuu ku daro .gitignore):

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

kaas oo loo adeegsaday habka shaqada ee GitHub .github/deploy.yaml taas oo ka koobnayd wax sidan oo kale ah:

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! Furayaashaas aws-ka ayaa shaqeynayay! Waxaan marka hore tijaabinay isbeddel inocuos ah oo ku dhacay abka, ka dibna waxaan ku darnay qaniinyada maadaama raggaasi ay u muuqdeen kuwo aan ogayn. Bingo! Waa olole aad u wanaagsan…

Jilaaga xun wuxuu si fudud u isticmaalay furayaasha AWS si uu u soo geliyo codsi wax laga beddelay oo leh malware ka dibna wuxuu ku socodsiiyay amarka dejinta isagoo wata aqoonsiyadaas. Sirta la daadiyay, iyo macluumaadka ku jira pipeline"Waa olole!" waxay u badan tahay inay la macno tahay in Memento uu burbur u geystay dhibbanaha saboolka ah.

Waxa Memento halkan noogu sheegayo waa in marka daadasho qarsoodi ah dhacdo, sida furayaasha gelitaanka AWS ee tusaalaha, waa inaad ka noqotaa sirta (rog furayaasha kor ku xusan) isla markaabaHad iyo jeer waxaa jira daaqadda soo-gaadhista inta u dhaxaysa daadinta commit iyo baabi'inta sirta ah; Dib u qorista taariikhda Git waa adag tahay (xitaa dawladda ugu adag ee kalitalisnimada ayaa isku dayday dib u qorista taariikhda noocaas ah, laakiin waxba ma tarin) oo malaha waxtar ma lahayn (saaxiibbadeen ayaa laga yaabaa inay nuqul ka sameeyeen ka hor kaydka iyagoo wata sirta qarsoon. commit) Isla markiiba wareeji furayaasha, oo ducayso inta aad akhrinayso diiwaanka hawlaha ee akoonka la beegsaday inta lagu jiro daaqadda soo-gaadhista!

Malaha ururadu waa inay mamnuucida isticmaalka sirta muddada dheer ee gudaha CI/CD pipelines, oo ku beddel aqoonsiyada ku meel gaarka ah. Tusaalaha hore ee furayaasha AWS ee ficillada GitHub, way ka ammaan badan tahay in la isticmaalo Bixiyaha OpenID Connect (OIDC) si aad u hesho aqoonsiyo waqti gaaban ah oo loo baahan yahay ficillada.

Cadhada Qoyan: Aad ayaad u nasiib badnayd! Daadinta qoraallada furaha adag waxay ahayd caado caadi ah waagii hore, xitaa baaldiyada S3 ee dadweynaha laga heli karo. Waxa kaliya ee aad u baahan tahay inaad sameyso waa inaad dhex marto walxaha ku jira baaldiga oo aad sameyso xoogaa xiiso leh si aad u hesho waxyaabo xiiso leh.

Mararka qaar meesha loo isticmaalay dejinta (baaldi AWS S3 ah oo ku jira tusaalahan) waxay u furnayd akhrinta dadka dibadda ka yimid, sababtoo ah cillad habayn ah (oo aan la ogaan). Maxaa Cadhada Qoyan isticmaalka waxay ahayd wax sidan oo kale ah:

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

Baaldiga waxaa loo sameeyay qaab-dhismeed dejineed kaas oo si toos ah loogu baari karo cilladaha amniga.

Qaabeynta caadiga ah ee qalabku waxay noo ahayd alaab carruureed

Si aan tusaalooyin la taaban karo u bixinno aan ka hadalno Jenkins, mid ka mid ah qalabka CI-ga ugu caansan.

Cadhada QoyanMa xasuusataa sanduuqa "Enable Security" ee ku jira Jenkins, iyo inta hay'adood ee aan u baahnayn inay hawlgeliyaan si ay u fududaato? Iyo kuwa "Qof kastaa wuu sameyn karaa wax kasta"Ogolaanshaha isku-darka sida caadiga ah? Iyo kuwa Jenkins ee dhibka badan, sida Qalabka GitHub OAuthNinkii habeeyey wuxuu doortay labadaba "Ogolaanshaha AKHRISKA sii dhammaan Isticmaalayaasha La Xaqiijiyay" iyo "Isticmaal oggolaanshaha kaydka GitHub", taasoo na siinaysa marin u helidda dhammaan mashaariicdooda.

(Raali gelin, Jenkins, inaad tusaale ahaan kuu soo qaadatay 😉

Ku dadaal (xitaa balwad) mabaadi'da amniga. Mid ka mid ah waa Ammaan ahaan ku ilaali si caadi ah Mabda'a: kontarooladu waa inay noqdaan kuwa ugu amniga badan ee suurtogalka ah. Amniga waa in lagu dhisaa CI/CD qalabka iyo pipelines laga bilaabo bilowga, halkii laga noqon lahaa fikrad dambe. Laakiin saaxiibtinimada isticmaalaha iyo sahlanaanta badanaa waxay la dagaallamaan amniga.

Kiiska Jenkins, aqoonsiga ku dhex jira waa mid aad u jilicsan: waligaa ha isticmaalin farsamooyinka aqoonsiga ee ku dhex jira Jenkins. Waxaa fiican inaad doorato farsamo dhinac saddexaad ah (SAML, LDAP, Google ...), oo leh qalab-hawleed ku salaysan Istaraatiijiyadda Ogolaanshaha (“RBAC”). Oo aad taxaddar aad u weyn ka muujiso admin xisaabta.

Ka taxaddar sida shaqada loo qabto iyo sida loo pipeline faylasha Jenkins waa la maareeyaa. Sidoo kale Plugin-ka Qaabeynta-sida-Koodhka iyo faylasha habaynta, kuwaas oo khuseeya habaynta Jenkins.

Ka guurista is-martigelinta CI/CD nidaamyada SaaS ee ku salaysan daruuraha waxay meesha ka saarayaan khataraha iman kara qaarkood oo u oggolaanaya dhaqdhaqaaqa dhinaca ee shabakadda ururka, laakiin waxay ku dareen kuwo kale, sida furitaanka xiriiro dibadeed oo u dhexeeya nidaamyada gudaha ee jira iyo kuwa dibadda laga saaray CI/CD qalab.

Ururadu waa inay sameeyaancise taxaddar ku habboon adkaynta CI/CD nidaamka, oo ka bilaabaya dejimaha ugu xaddidan oo si tartiib tartiib ah u furaya rukhsadaha ugu yar ee loo baahan yahay pipeline talaabooyinka.

Dejinta amniga gudaha CI/CD Qalabku wuxuu noqon karaa mid adag. Qaar badan waxay leeyihiin plugins ama kordhin kuwaas oo leh inta badan nuglaanta una baahan in la cusbooneysiiyo.

Iskaan-gareeyayaasha khaldan ee amniga ee qalabkaas adag, ama halbeegyada ayaa ku caawin kara.

Ku-darka koodhka gudaha pipeline amarro madadaalo iyo faa'iido leh

M3M3N70: Ma waligaa isticmaashay Hubinta Koodhka Aan La Aamini Karin, ficillada iyo qoraallada nugul ee u nugul duritaanka amarka?

Qaybtani waxay muujinaysaa in pipeline lafteedu waxay yeelan kartaa khaladaad koodh ah oo u suurtagelinaya jilayaasha xun inay ku shubaan fulinta koodka aan kala sooca lahayn pipeline iyada oo aan la beddelin pipeline isha laftiisaTusaale ahaan isticmaalka PR

Tusaalaha ugu horreeya ee a Shaqo-socodka nasiib darrada ah ee 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 ...

Isku-darka pull_request_target kicinta shaqada oo leh hubin cad oo PR aan la aamini karin waa dhaqan khatar ah oo horseedi kara tanaasul kayd ah. Tusaale ahaan, isku-darka nasiib darrada ah ee:

  • pull_request_target dhacdo, kuwaas oo si caadi ah u haysta ogolaansho qoraal ah oo ku socota kaydka bartilmaameedka iyo sirta kaydka bartilmaameedka, xitaa kuwa ka imanaya fargeetooyinka dibadda, oo ku shaqeeya macnaha guud ee kaydka bartilmaameedka ee PR,
  • ka hubi koodhka PR-ka isha, kaydka aan la aamini karin,
  • kicin qoraal kasta oo ka shaqeyn kara waxyaabaha PR-ga la xakameeyey, sida kiiska npm install, Iyo
  • aan shuruud loo isticmaalin kicinta pull_request_target dhacdada waa in la socodsiiyaa oo keliya haddii nooc ka mid ah 'PR-kan la hubiyay' calaamadda loo qoondeeyay PR (dadka dibadda isticmaala ma siin karaan calaamadaha PR-ka).

Tusaale labaad wuxuu qaataa talo aan la aamini karin (laga soo bilaabo arrin, faallo ama pull request) sidii ilo dood ah oo loo gudbiyay a pipeline amar iyada oo loo marayo tibaaxaha. Kani waa pipeline nooca nuglaanta duritaanka amarka OS-ka.

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

Hawlgalka socodsiintu wuxuu soo saaraa qoraal qolof ku meel gaar ah oo ku salaysan qaab-dhismeedka, oo leh $ la beddelay, taasoo ka dhigaysa mid u nugul duritaanka amarka qolofka. Weeraryahan leh akoon GitHub been abuur ah ayaa abuuri kara dhibaato cinwaan a"; bad_code_goes_here;#, iyo kor u kaca! 

Cadhada Qoyan: Oh, nimankaas waxay albaabka u furayeen duritaanka amarka iyagoo si fudud u furaya arrin…

Waxaa jiray nuglaanta fulinta koodka ee falalka GitHub, sida gajira-faallo, hadda waa la hagaajiyay. Fadlan akhri "Qormo aan la isku halleyn karin oo ku jirta socodka shaqada ee GitHub" faahfaahin buuxda.

Anshaxa sheekada: Weligaa ha iska hubin oo ha dhisin PR-yada ilo aan la aamini karin adigoon marka hore dib u eegin PR-ga. 'Lama aamini karo' halkan, haddii aan la helin xaqiijin adag oo asalka ah, waxay macnaheedu noqon kartaa akoon kasta oo horumariye ah oo la afduuban karo.

 

Daadgureynta malware-ka aan loogu talagalin halkan!

Hawlgalinta joogtada ah waa dhammaadka otomaatiga ah, laakiin dhammaadkaas waxaa laga yaabaa inuu niyad jabo la'aanta xakamaynta oggolaanshaha ee ku saabsan pipeline socodka.

Khataraha ka imaan kara keenista otomaatiga ah ee si buuxda uga timaadda isha commit nidaamyada wax soo saarka waxaa ka mid ah suurtagalnimada in koodhka xaasidnimada leh la geeyo deegaannada wax soo saarka iyada oo aan la ogaan, iyo sidoo kale suurtagalnimada in khaladaadka ku jira habka dejinta ay keenaan carqaladeyn ama cillad.

Si loo yareeyo khatarahaas, waxaa badanaa lagu taliyaa in ururadu ay hirgeliyaan "jab adag" geeddi-socodkooda dejinta, kaas oo u baahan ogolaanshaha aadanaha ka hor inta aan la sii dayn goobaha dhammaadka.

Albaabada ayay xirayaan

Cadhada Qoyan: Furaha sirta ah ee caadiga ah ee farxadda leh ee ku jira CI/CD Qalabka waa la tirtirayaa. Helitaanka /var/lib/jenkins/secrets/initialAdminPassword hadda waa waddo aan la gaari karin. Qalab badan ayaa hadda bixiya 2FA, taas oo Covid uu caan ka dhigay, xitaa daanyeerka ugu caajiska badan ee halkaas jooga ayaa isticmaalaya!

M3M3N70: Waxaan la dagaalamaynaa 2FA, laakiin ma fududa. Way adag tahay in la been abuuro raggaas, sida "Scatter Swine" wuxuu ku sameeyay TwilioFuraha WebAuthn aad bay u adag tahay. Ugu yaraan, waan isku dayi karnaa inaan xatoo cookies si aad uga gudubto MFA, laakiin waxay u baahan tahay in la jabsado sanduuqa horumariyaha.

Xaqiijinta Arrimaha Badan waa tallaabo wanaagsan oo loo qaaday jihada saxda ah si loo xaddido khatarta ah in sirta xaqiijinta ay daadato. Inta badan qalabka casriga ah ee DevOps wuxuu taageeraa MFA. Furayaasha xaqiijinta ee hoos yimaada WebAuthn / U2F (fiiri Mashruuca FIDO2) ayaa laga yaabaa inay yihiin ikhtiyaarka ugu fiican ee MFA ee DevOps, haddii si habboon loo maareeyo.

Cadhada Qoyan: Ragga DevOps way soo kacayaan. Waxay dhiiggooda ku leeyihiin waxa ugu "mudnaanta ugu yar". Mana aha daanyeerro cod ah hadda. Hadda waxaa na qabtay dib-u-eegayaasha oo si xun noo soo bandhigaya.

Dhab ahaan, pipelines hadda way ka xoog badan yihiin sidii ay ahaayeen dhowr sano ka hor, iyadoo ficillada iyo qoraallada daciifka ah laga saaray, iyo tallaabooyin tijaabo amni oo dheeraad ah oo xitaa lagu ogaaday in droppers-keennu ay ku qarsoon yihiin qarsoodi. commits iyo baakadaha aan afduubnay.

Su'aal akhristaha loogu talagalay: ma habka loo dhisayo software-ka laga soo bilaabo ilo iyo in la geeyo wax soo saarku waa ganacsi khatar ah? Ma arki kartaa DevOps-kaaga marxaladda waqtiyo wanaagsan kuwa xun?

Talooyinka kama dambeysta ah

Halkee laga bilaabayaa CI/CD pipelines?

Talada ugu horreysa waa mid fudud halkan: dib u eegis pipelines (iyagu waa muhiim ah agabyada) arrimaha amniga. Dib u eegistu waa qaali laakiin waa lagama maarmaan, waana in si habboon loo sameeyaa. Dib u eegistu waa inay ka warqabaan waxa la eegayo. Tallaabo kasta waa in laga hubiyaa cilladaha.

Malaha isku-darka dib-u-eegayaasha khabiirada ah oo ku hubaysan iskaan-gareeyayaasha koodhka ee otomaatiga ah ayaa ku caawin kara.

Talada labaad waa in tababar horumariyayaal wax qora pipelineoo ay ku ilaaliyaan amnigaWaxyaabaha la tixgelinayo:

  • Sida si habboon loogu maareeyo xaqiijinta adeegyada gudaha iyo daruuraha, iyadoo laga fogaanayo dhibka ka dhasha maaraynta shahaadooyinka muddada dheer.
  • Sida loo xaddido pipelines ilaa kaydka saxda ah ee ay u baahan tahay inay gasho. Mabda'a mudnaanta ugu yar ayaa mar kale soo ifbaxaya.
  • Sida loo qoro tallaabooyinka la sameeyo pipelines la soo saari karo sida nooca lagu dhejiyo, iyo ka fogaanshaha nuglaanta duritaanka amarka.
  • Sida loo ansixiyo hawlgalinta marka laga eego dhinaca amniga (waa kuwa kale!): amniga noocee ah standards waa in la waafajiyaa iyo sida loogu daro jeegag/albaab u dhigma gudaha pipelines.

Talo saddexaad waa in habayn CI/CD nidaam taxaddar leh. Xaqiijin xooggan, erayga sirta ah ee caadiga ah ama dejimaha aan amniga lahayn, mudnaanta ugu yar… Ka taxaddar nuglaanta ku jirta plugins-ka iyo kordhinta la rakibay. Tani waxay noqon kartaa diiradda qoraallada soo socda, fadlan la soco.

Talada afraad waa in la sameeyo ka faa'iidayso CI/CD pipelines ee otomaatiga amnigaFalanqaynta koodhka isha (SAST), falanqaynta halabuurka isha (SCA), siraha daadanaya iskaanka, qalabka ka hortagga malware-ka, iskaanka amniga weelka, ama dareemayaasha waqtiga-socodka otomaatiga ah (DAST iyo malware-ka) si joogto ah ayaa loogu shaqeyn karaa pipelineUrurkaaguna wuu fulin karaa standardku saabsan caymiska ku saabsan baaritaanka amniga ee gudaha CI/CD.

Xasuuso, qalabkani weli kama saarayo dib u eegista khubarada isla'egta, haddii kale waxaad yeelan kartaa dareen ammaan oo been ah.

Haddii aad ku fiican tahay OWASP Top-tens, mashruuc dhawaan la sameeyay oo wanaagsan ayaa ah OWASP Sare 10 CI/CD Khatarta Amniga.

Ogeysiis Afeef ah

(1) Tusaalooyinka qoraalkan ku jira waxay isticmaalayaan GitHub sida SCM, AWS oo ah bixiyaha daruuraha, iyo GitHub Actions ama Jenkins sida CI/CD qalab. Ma aha kuwo ka liita/ka ammaan badan beddelkooda. Ma jiraan ujeedo xun oo saxaafadda ah! Qalabkani waa kuwo awood badan oo u baahan in si habboon loo isticmaalo.

(2) M3M3N70 iyo Cadhada Qoyan waa jilayaal khiyaali ah. Wax u eg dad ama kooxo, nolol ama geeri, waa wax iska soo horjeeda… mise waa?

Si aad wax badan u akhrido

qalabka-sca-tools-software-ka-samaynta-qalabka-falanqaynta
Mudnaanta sii, hagaaji, oo sug khataraha software-kaaga
Hel Akoonkaaga Bilaashka ah.
Looma baahna kaarka deynta.

Sug Horumarinta Software-kaaga iyo Bixintaada

oo leh Xygeni Product Suite