ቀጣይነት ያለው ውህደት እና ቀጣይነት ያለው ማሰማራት (CI/CD) pipelineዎች የተቀላጠፈ የሶፍትዌር ልማትን በማመቻቸት ረገድ ወሳኝ ሚና ይጫወታሉ። ሆኖም፣ እነዚህ pipelineከጊዜ ወደ ጊዜ ወሳኝ እየሆነ ሲሄድ፣ ከተጋላጭነት የመጠበቅ አስፈላጊነት የበለጠ ግልጽ እየሆነ ይሄዳል። ይህ ጥልቅ ምርመራ በ OWASP Top-10 ውስጥ ተለይቶ የታወቀውን ጉልህ አደጋ በመፍታት ላይ ያተኩራል። CI/CD የደህንነት አደጋዎች፡ የተመረዘ Pipeline አፈፃፀም (PPE)።

ምንድን ነው መርዛማው Pipeline አፈፃፀም (PPE)
በ OWASP Top-10 መሠረት CI/CD የደህንነት አደጋዎች፣ "የተመረዘ Pipeline ማስፈጸም (PPE) አደጋ የሚያመለክተው አንድ አጥቂ ወደ ምንጭ መቆጣጠሪያ ስርዓቶች መድረስ የሚችልበትን ችሎታ - እና ወደ ግንባታ አካባቢው መድረስ የሌለበት - ነው። ተንኮል አዘል ኮድ/ትዕዛዞችን ወደ ግንባታው ውስጥ በማስገባት የግንባታ ሂደቱን ለማዛባት pipeline ውቅር, በመሠረቱ 'መመረዝ' pipeline እና እንደ የግንባታ ሂደቱ አካል ተንኮል አዘል ኮድ ማስኬድ"
በጥቂት ቃላት፣ ፖይደንድ Pipeline አፈፃፀም (PPE) የሚመረተው ሲሆነው አጥቂው ሊለውጠው ይችላል pipeline ሎጂክ.
ሁለት ናቸው ተለዋጮች:
- ቀጥተኛ የPPE (ዲ-ፒፒኢ): በD-PPE ሁኔታ፣ አጥቂው የCI ውቅር ፋይሉን ያስተካክላል በማከማቻ ውስጥ ለውጡን በቀጥታ ወደ ማከማቻው ላይ ወደተጠበቀ የርቀት ቅርንጫፍ በመጫን ወይም ከቅርንጫፍ ወይም ከሹካ የተገኘውን ለውጥ ከPR ጋር በማስገባት ማግኘት ይችላሉ። ከሲአይ ጀምሮ pipeline አፈፃፀም የሚገለጸው በተሻሻለው የCI ውቅር ፋይል ውስጥ ባሉት ትዕዛዞች ሲሆን፣ የአጥቂው ተንኮል አዘል ትዕዛዞች በመጨረሻ ግንባታው አንዴ ከተጠናቀቀ በኋላ በግንባታ ኖድ ውስጥ ይሰራሉ። pipeline ተቀጣጥሏል።
- ቀጥተኛ ያልሆነ የPPE (አይ-ፒፒኢ): በአንዳንድ ሁኔታዎች፣ የD-PPE እድል ለተቃዋሚው ተደራሽ አይደለም። SCM ማከማቻ (ለምሳሌ፡- pipeline የCI ውቅር ፋይልን ከተለየ፣ ከተጠበቀው ቅርንጫፍ በተመሳሳይ ማከማቻ ውስጥ ለማውጣት ተዋቅሯል)። በእንደዚህ አይነት ሁኔታ፣ ከመመረዝ ይልቅ pipeline በራሱ፣ አንድ አጥቂ በተጠቀሰው ፋይል ውስጥ ተንኮል አዘል ኮድ ያስገባል። pipeline (ለምሳሌ፡ ከውስጥ የተጠቀሱ ስክሪፕቶች pipeline የማዋቀሪያ ፋይል)
በሁለቱም በኩል ፣ GitHub የተሻሻለውን ያስፈጽማል pipeline ቀደም ሲል የተደረገ ግምገማ ወይም ማፅደቅ ሳያስፈልግ.

የPPE ቅድመ ምርመራ
የዚህን አይነት ተጋላጭነት እንዴት መለየት እንችላለን?
ይህንን ምሳሌ እንመልከት pipeline :
name: PR CI
on:
pull_request:
branches: [ main ]
env:
MY_SECRET: ${{ secrets.MY_SECRET }}
jobs:
pr_build_test_and_merge:
runs-on: ubuntu-latest
steps:
# checkout PR code
- name: Checkout repository
uses: actions/checkout@v4
# Simulation of a compilation
- name: Building ...
run: |
echo $MY_SECRET
mkdir ./bin
touch ./bin/mybin.exe
# Simulation of running tests
- name: Running tests ...
id : run_tests
run: |
echo Running tests..
chmod +x runtests.sh
./runtests.sh "${{ github.event.pull_request.user.login }}" "${{ github.workflow }}"
echo Tests executed.
እና የአስቂኝ ሼል ስክሪፕት ይዘት (runtests.sh):
#!/usr/bin/bash
echo "Executing Tests script [from user $1 at $2]" >> runtests.out
exit 0
የ pipeline በጣም ቀላል ነው፡ ዓላማው ለግምገማው አንዳንድ የመጀመሪያ ፍንጮችን መስጠት ነው Pull Request (PR) የመቀበል ሂደት፡
- በ ላይ ይቀሰቀሳል pull_request (ማለትም የህዝብ ግንኙነት ግንኙነት (PR) በሚፈጠርበት ጊዜ ሁሉ)
- የPR ኮዱን ይፈትሻል (ማለትም የተበረከተውን ኮድ)
- ግንባታውን ያደርጋል
- በተበረከተ ኮድ ላይ ሙከራዎችን ያካሂዳል (ለምሳሌ የሼል ስክሪፕት በመፈጸም)
ኮዱ ካልተጠናቀረ ወይም ፈተናዎቹን ካላለፈ ደረጃዎች #3 (ግንባታውን ያድርጉ) እና #4 (የሩጫ ሙከራ) ይከሽፋሉ። ስለዚህ፣ እነዚህ እርምጃዎች PR ለመቀበል አስፈላጊ ነገር ግን በቂ አይደሉም። ከተሳካ፣ የ repo አስተዳዳሪው የተበረከተውን ኮድ መገምገም ይቀጥላል እና በዚያ ላይ በመመስረት PRን ይቀበላል/ይቃወማል/አስተያየት ይሰጣል።
የኤክሲጂኒ ስካነር
ዚጌኒ CLI (“CLI”) ያቀርባልየኤክሲጂኒ ስካነር")" ውስጥ ሊካተት የሚችል pipeline ወይም በትእዛዝ መስመር ውስጥ ያሂዳል። የXygeni ስካነር ያስኬዳል pipelineዎች ተጋላጭነቶችን ለመፈተሽ እና የጂትሃብ PAT ከተሰጠ፣ በorg/repo ደረጃ ተጋላጭነቶችን ለማግኘት ከጂትሃብ ጋር ይገናኛል።
የኤክሲጂኒ ኢንቬንቶሪ
በዚህ ማከማቻ ላይ የXygeni Scannerን ስናከናውን፣ ጠቃሚ የሆኑ የሀብቶችን ስብስብ ያገኛል (የ የኤክሲጂኒ ኢንቬንቶሪ) የዕቃው ክምችት በብዙ የተለያዩ ዓይነቶች ይሞላል። CI/CD ንብረቶች, እንደ:
- የ SCM ስርዓት ማከማቻው የሚከማችበት ቦታ
- የ SCM ተሰኪዎች ተጭኗል/ጥቅም ላይ ውሏል
- የ የኮድ ማከማቻ በራሱ
- የ SCM ድርጅት ማከማቻው የሚገኝበት ቦታ
- የ CI/CD Pipelineኤስ እና ስራዎች
- የ CI/CD ስርዓት ከሚሰሩት pipelines
- IaC መረጃዎች በመጠባበቂያ ውስጥ የተገለጸ
- ውጫዊ ጥገኝነቶች
- ወዘተ ..
በእኛ ምሳሌ፣ ኢንቨስተሩን በተወሰነ የንብረት አይነት ማጣራት እንችላለን (SCM- እና ከCICD ጋር የተያያዙ ንብረቶች)፣ ስለዚህ የሚከተሉትን ማየት እንችላለን፡
- SCM ስርዓቱ የጂቲቢ ክላውድ ነው
- Repo በ GitHub Cloud ውስጥ የተከማቸ ሲሆን የአንድ የተወሰነ የ GitHub ድርጅት አካል ነው።
- ሁለት ናቸው pipelineበጂትሃብ (የተጎላበተ)CI/CD ስርዓት)
- በየ pipeline አንድ የተወሰነ እርምጃ ይዟል

ከላይ ያለውን በመምረጥ pipeline አንዳንድ ድክመቶችን ማየት እንችላለን፡-
- At pipeline ደረጃ ላይ፣ ለሁለቱም ተጋላጭ ነው በቀጥታ ና ቀጥተኛ ያልሆነ የPPE መከላከያ።
የተመረዙትን ሰዎች ዝርዝር ሁኔታ ማየት እንችላለን Pipeline የአፈጻጸም ተጋላጭነቶች


ዢጄኒ ይህን ያረጋግጣል ለዲ-ፒፒኢ ተጋላጭነት ምክንያቱም በ ላይ ስለተቀሰቀሰ Pull Request ክስተት እና ምንም ተጨማሪ የደህንነት መቆጣጠሪያዎች የሉም፣ ስለዚህ ማንኛውም የሪፖ ተጠቃሚ ማሻሻል ይችላል pipeline እና እነዚያ ማሻሻያዎች ያለ ምንም ግምገማ ወይም ፈቃድ ይከናወናሉ።
በተመሳሳይ መልኩ፣ Xygeniም እንዲሁ መሆኑን ይገነዘባል ለ I-PPE ተጋላጭነት ከሼል ስክሪፕት በተጠራው ጥሪ ምክንያት pipeline፦ ማንኛውም የሪፖ ተጠቃሚ የሼል ስክሪፕትን ማሻሻል ይችላል እና እነዚያ ማሻሻያዎች ያለ ምንም ግምገማ ወይም ማረጋገጫ ይከናወናሉ።
የበለጠ ማወቅ ይፈልጋሉ?
የPPE አጠቃቀም
የመከላከያ መከላከያ (PPE) ለመጠቀም፣ የሚከተሉትን ሁኔታዎች እንመልከት ሁለት አይነት የሪፖ ተጠቃሚዎች:
- An ውስጣዊ ተጠቃሚ (በዚያ ማከማቻ ላይ የሚሰራ ውስጣዊ ገንቢ)፣ በማከማቻ ቦታው ላይ የመፃፍ ፈቃዶች ያሉት
- An ውጫዊ ተጠቃሚ (በዚያ ማከማቻ ላይ የሚሰራ ነገር ግን በማከማቻው ላይ የተነበቡ ፈቃዶች ያሉት የውጭ ምንጭ ገንቢ)፣ ማለትም ማከማቻውን ቅርንጫፍ ማድረግ እና በሹካ ላይ እንዲሠራ መገደድ አይፈቀድለትም።
ሁለቱም ተንኮል አዘል አጥቂዎች (ወይም በተንኮል አዘል ተዋናይ የተመሰሉ) እንደሆኑ እናስብ። ማከማቻው የተወሰነ ምስጢር ይዟል እና ሁለቱም ይፈልጋሉ። የማከማቻ ሚስጥር ለመስረቅ እና በጠላፊ ቁጥጥር ስር ወዳለው አገልጋይ ይልኩታል። ይህንን ለማድረግ የፖዚደንስን ጥቅም ይጠቀማሉ። Pipeline የአፈጻጸም ተጋላጭነቶች pipeline.

በሁለቱም ሁኔታዎች (ውጫዊ እና ውስጣዊ ተጠቃሚ) ይከፍታሉ Pull Request ከተመሳሳይ ማሻሻያዎች ጋር፦
- የ pipeline እና የሼል ስክሪፕት ተሻሽሏል ወደ ምስጢሩን ያንብቡ ከአካባቢው እና ወደ ጠላፊ ቁጥጥር የሚደረግበት አገልጋይ ይላኩት
ማስተካከያዎች እንደሚከተለው ሊሆኑ ይችላሉ-



ሁለቱም ተጠቃሚዎች የሚከተሉትን ይፈጥራሉ Pull Request ከተሻሻሉት ጋርየህዝብ ግንኙነት ግንኙነት ሲፈጠር፣ GitHub ሁለቱንም ማሻሻያዎች ያስፈጽማል (ያለቅድመ ግምገማ ወይም ማፅደቅ አያስፈልግም)ይህም የሚከተሉትን ያስከትላል፦

ለጽሑፍ እና ለንባብ ተጠቃሚዎችም ተመሳሳይ ነው፣ በሁለቱም ሁኔታዎች D-PPE እና I-PPE ይከናወናሉ፣ ልዩነቱ ከ የተነበበው ተጠቃሚ ምስጢሮቹን ማግኘት አይችልም። (!!!!)
ይህ ምክንያት የሆነው፣ ከሹካ የመጣ የህዝብ ግንኙነት ግንኙነት (PR) ካለ፣ GitHub የማከማቻ ሚስጥሮችን ማግኘት አይፈቅድም። ምንም እንኳን የተነበበው ተጠቃሚ ምስጢሮቹን ማንበብ ባይችልም፣ እሱ/እሷ አሁንም ሌላ ማንኛውንም ፕሮግራም ማስኬድ ይችላሉ። የተለመደው የጥቃት ምሳሌ ክሪፕቶ ማዕድን የሚያወርዱ የPRs መፍጠር ነው፣ ስለዚህ የጂትሃብ ሯጭ የተመረዘ ማዕድን ሲያስፈጽም የክሪፕቶ ማዕድን ማውጫውን ያስፈጽማል። pipeline.
ይህ ደህንነቱ የተጠበቀ አካባቢ አይደለም፣ እርግጥ ነው!! የሪፖ አስተዳዳሪው ይህንን ለማስወገድ ምን ሊያደርግ ይችላል?
ከተወሰነ ጉግል ጋር ከተገናኙ በኋላ፣ የሪፖ አስተዳዳሪው ለማሻሻል ወሰነ pipeline በ ላይ እንዲነቃ pull_request_target ክስተት። ለምን? ምክንያቱም pipelineበ pull_request_target ላይ የተቀሰቀሰው s አፈጻጸምን አይፈቅድም። pipeline ማሻሻያዎች, ማለትም ምንም አይነት የተጠቃሚ ማሻሻያ ቢኖርም "ኦሪጅናል" pipeline ይፈጸማል።
የእኛን ምሳሌ በመከተል፣ ጥቃቱ እንደበፊቱ ተመሳሳይ ይሆናል። ከዚያ በኋላ ምን ይሆናል? pipeline ማሻሻያ?

እንደተጠበቀው, D-PPE አልተተገበረም ነገር ግን፣ ምክንያቱም I-PPE አሁንም እዚያው ስለሆነ፣ የተነበበው ተጠቃሚ አሁን የመጠባበቂያ ሚስጥሩን መድረስ ይችላል!!!
አንባቢው አሁን ምስጢሮችን የማግኘት እድሉ የሰጠው በምን ምክንያት ነው? pipeline ሊሻሻል አይችልም፣ አሁንም የሼል ስክሪፕትን ማሻሻል ይቻላል። ሀ pipeline በ pull_request_target ላይ ከተነሳ፣ በልዩ መብት ሁነታ ይፈጸማል so እንዲሁም የሼል ስክሪፕት ይሆናልየሼል ስክሪፕት የመጠባበቂያ ሚስጥሮችን ማግኘት እንዲችል ያደርጋል!!
የመከላከያ እርምጃዎች
GitHub ከተንኮል አዘል የህዝብ ግንኙነት (PRs) ለመከላከል አንዳንድ እርምጃዎችን ይሰጣል።
የቅርንጫፍ ጥበቃ ደንቦች
በጂትሆብ (GitHub) አማካኝነት በተመረጡ ቅርንጫፎች ላይ የቅርንጫፍ ጥበቃ ደንቦችን መግለጽ ይችላሉ።
ለተጠበቁ ቅርንጫፎችዎ፣ የሚከተለውን ፖሊሲ መግለጽ ይችላሉ ይጠይቃል ሀ pull request ከመዋሃድ በፊት (እንዲሁም እንደ አስፈላጊ የማረጋገጫ ብዛት፣ ከኮድ ባለቤቶች የተሰጡ ግምገማዎች፣ ወዘተ ያሉ ተጨማሪ ሁኔታዎች)
ልዩ ትኩረት ሊሰጣቸው የሚገቡ ሁለት ቅድመ ሁኔታዎች የሚከተሉት ናቸው፡
- "የተወሰኑ ተዋናዮች አስፈላጊ የሆኑትን እንዲያልፉ ይፍቀዱላቸው pull requests".
- "ከላይ ያሉትን ቅንብሮች ማለፍ አይፍቀዱ"
አብዛኛዎቹ ሁኔታዎች ለፖሊሲው ጥብቅነትን ቢጨምሩም፣ እነዚህ ሁኔታዎች ፖሊሲውን የሚያለዝቡ ሲሆን ይህም ለምሳሌ ማስረጃዎች “በተሰጣቸው” ተዋናዮች ከተሰረቁ ለተንኮል ድርጊቶች ክፍት በር ሊፈጥር ይችላል።
የGITHUB_TOKEN ፈቃዶችን ገድብ (ዝቅተኛ መብት)
የጂቲሃብ ቶከን ፈቃዶችን ለሚያስፈልጉት ብቻ ይገድቡ፤ በዚህ መንገድ፣ አጥቂዎች የእርስዎን አደጋ ላይ ሊጥሉ ቢችሉም እንኳ pipeline፣ ብዙ ማድረግ አይችሉም።
የክር ኢንተርፖሌሽንን በመጠቀም ያስወግዱ pipeline የenv ተለዋዋጮች
በአንተ ውስጥ አንዳንድ የግቤት ተለዋዋጮችን በምትጠቀምበት ጊዜ ሁሉ pipelineበነባሪነት እንደ “ያልታመነ” መረጃ ሊቆጠሩ እንደሚገባ ልብ ይበሉ (ይዘታቸው በዋና ተጠቃሚው ቁጥጥር ስር ነው)። የማይታመኑ እርምጃዎች እና የስራ ፍሰቶች ደህንነታቸው የተጠበቀ ና የጂቱብ እርምጃዎችን ይወቁ።
የሕብረቁምፊ ኢንተርፖሌሽን ከመጠቀም ይልቅ የግቤት ተለዋዋጮችን በስክሪፕቶች ውስጥ ለማስገባት ሁልጊዜ የአካባቢ ተለዋዋጮችን መጠቀም አለብዎት።
የሥራ ፍሰት እና የማረጋገጫ መስፈርቶች
ያህል ሕዝባዊ repos፣ GitHub ለመግለጽ ያስችላል ከ "ውጫዊ" PRዎች ጋር እንዴት እንደሚሰራ.
የጂትሆብ ድርጅት ቅንብሮች (“Org >> ቅንብሮች >> እርምጃዎች >> አጠቃላይ”) ውጫዊ የህዝብ ግንኙነትን እንዴት ማስተዳደር እንደሚቻል ይግለጹ፡

በነባሪነት፣ GitHub ለመጀመሪያ ጊዜ አስተዋፅዖ አበርካቾች የህዝብ ግንኙነት (PR) ፈቃድ ይፈልጋል፣ ይህም ተንኮል አዘል የጥያቄ ጥቃቶችን የበለጠ ውስብስብ ያደርገዋል። ቢሆንም፣ አጥቂው ለምሳሌ አንዳንድ ንፁህ ነገሮችን በማበርከት የፕሮጀክቱን አስተናጋጆች እምነት ሊያተርፍ ይችላል። pull request ከእውነተኛው ጥቃት በፊት።
ከዚህ አንፃር እ.ኤ.አ. ሦስተኛው አማራጭ (ለሁሉም የውጭ ተባባሪዎች ፈቃድ የሚፈልግ) ከፍተኛ የቁጥጥር ደረጃን ይጨምራል።
ያህል የግል እንደገና፣ GitHub በድርጅታዊ እና በሪፖ-ደረጃ ላይ ጠቃሚ ቁጥጥርን ይሰጣል።

"የስራ ፍሰቶችን ከሚከተሉት ያሂዱ Pull Requests"(በነባሪነት ያልተረጋገጠ) ተጠቃሚዎች ከፎርክ PRs (የንባብ ብቻ ፈቃዶች እና ምስጢሮች መዳረሻ የሌላቸውን GITHUB_TOKEN በመጠቀም) የስራ ፍሰቶችን እንዲያሄዱ ያስችላቸዋል።" ይህንን አማራጭ ከመጨረሻው ጋር በመምረጥ ("ለፎርክ PRs የስራ ፍሰቶች ፈቃድ ይጠይቁ")"፣ ከግል ማከማቻዎች ጋር ተመሳሳይ ፖሊሲ ላይ መድረስ ይችላሉ (ከላይ እንደሚታየው)።
በ PPE አጠቃቀም ላይ እንዳየነው፣ ከተነበበ ተጠቃሚ ከፎርክ የስራ ፍሰቶችን ለማስኬድ ያስችላል pull requests ደህንነቱ የተጠበቀ አይደለም!!
የተቀሩት አማራጮች (“)ከፎርክ የጻፍ ቶከኖችን ወደ የስራ ፍሰቶች ይላኩ pull requests"እና"ሚስጥሮችን እና ተለዋዋጮችን ወደ የስራ ፍሰቶች ከ ይላኩ ለ pull requests") የደህንነት ደረጃን ዝቅ ማድረግ በፎርክ PRዎች ላይ ተተግብሯል።
ይህንን የሹካ ፖሊሲ በድርጅታዊ ደረጃ ወይም በRepo-ደረጃ መግለጽ ይችላሉ። መመሪያው በorg-ደረጃ ከተሰናከለ፣ በRepo-ደረጃ ሊነቃ አይችልም። ነገር ግን፣ መመሪያው በorg-ደረጃ ከነቃ፣ በRepo-ደረጃ ሊሰናከል ይችላል።

ቅኝት
አንዳንድ ነገሮች መኖራቸው የሚያስከትለውን አንድምታ እንዳዩ ተስፋ እናደርጋለን pipeline ለመርዝ ተጋላጭ Pipeline ማስፈጸም። በጣም ቀላል ነው commit ተጋላጭ pipelineእና ደህንነቱ የተጠበቀ መጻፍ ከባድ ነው።
ስለዚህ እንደዚህ አይነት ተጋላጭነቶችን ለማወቅ የXygeni Scannerን መጠቀም በጣም ጠቃሚ ነው።
ብልግና መኖሩን ሳታውቅ መፍታት አትችልም!!
ግን… አሁንም አንድ ጥያቄ እየተጠየቀ ነው… የ I-PPE ችግርን እንዴት ማስወገድ ይቻላል?
ይህ የሚቀጥለው ጽሑፋችን ርዕሰ ጉዳይ ይሆናል 🙂… በተዘዋዋሪ የተመረዘ Pipeline አፈፃፀም (I-PPE) !!







