စဉ်ဆက်မပြတ် ပေါင်းစည်းမှုနှင့် စဉ်ဆက်မပြတ် ပေးပို့မှု (CI/CD) pipelineဆော့ဖ်ဝဲလ်ကို “ခေတ်မီ” နည်းလမ်းဖြင့် တည်ဆောက်သည့် မည်သည့်ဆော့ဖ်ဝဲလ်အဖွဲ့အစည်း၏မဆို s များသည် အခြေခံအုတ်မြစ်များဖြစ်သည်။ အလိုအလျောက်လုပ်ဆောင်ခြင်းသည် ကြီးမားသောစွမ်းအားကို ပေးစွမ်းသော်လည်း developer အများစုသည် ၎င်းနှင့်သက်ဆိုင်သော တာဝန်ဝတ္တရားကို လွတ်သွားကြသည်။
developer: ဟုတ်ကဲ့၊ ကျွန်တော်တို့ ယူပါတယ် CI/CD လုံခွုံရေး ကုဒ်ထိန်းသိမ်းသူများအပေါ် အလေးအနက်ထားပြီး ခိုင်မာသောထိန်းချုပ်မှုရှိခြင်း၊ ပြန်လည်သုံးသပ်ခြင်း commitပေါင်းစည်းခြင်းမပြုမီ s; အလုပ်အကိုင်များနှင့် pipelineအကြီးတန်းဝန်ထမ်းများက ထိန်းသိမ်းထားပြီး၊ လျှို့ဝှက်ချက်များ မပေါက်ကြားစေရန် ဂရုစိုက်ကြသည်။ pipelines. ပြီးတော့ ဒီကိရိယာကို ဒီအရာအကြောင်း သိတဲ့ ဝန်ထမ်းတွေက တပ်ဆင်ပေးခဲ့တာပါ။ ဘာတွေ မှားသွားနိုင်လဲ။
ချစ်လှစွာသော ဆော့ဖ်ဝဲရေးသားသူ၊ CI/CD စနစ်တွေက ရှုပ်ထွေးပါတယ်။ ၎င်းရဲ့ ကျယ်ပြန့်တဲ့ တိုက်ခိုက်မှု မျက်နှာပြင်က မကောင်းဆိုးဝါး လုပ်ဆောင်သူတွေကို ဆွဲဆောင်ခဲ့ပါတယ်။ သတိထားပြီး ဘယ်တော့မှ အလွန်အကျွံ ယုံကြည်မှု မထားပါနဲ့။
တစ်ခါတစ်ရံတွင် မူရင်းဖွဲ့စည်းပုံကို သိမ်းဆည်းထားပြီး ဟက်ကာများအတွက် အကောင်းဆုံးမိတ်ဆွေ ဖြစ်လာပါသည်။ အရေးကြီးသော ချို့ယွင်းချက်များ ရှိနေနိုင်ပါသည်။ CI/CD pipeline အရင်းအမြစ်များ၊ စနစ်၏ဖွဲ့စည်းပုံတွင် သို့မဟုတ် လုပ်ငန်းစဉ်နှင့် အခြေအနေနှင့် သက်ဆိုင်သော pipeline နှင့် ၎င်းကို မည်သို့လှုံ့ဆော်ပေးသနည်း။
ဒီပို့စ်မှာ ကျွန်တော်တို့ကိုယ်တိုင် လူဆိုးသရုပ်ဆောင်တွေရဲ့ နေရာမှာ ဝင်ကြည့်ပါမယ်။ ကျွန်တော်တို့ဟာ သူတို့ရဲ့ အတွေးတွေကို ဖတ်နေတယ်လို့ မြင်ယောင်ကြည့်ပါ M3M3N70 (အမှတ်တရ မိုရီ?) နှင့် ရွှံ့နွံဒေါသ မှောင်မိုက်တဲ့ ဝဘ်တစ်နေရာရာမှာ၊ ဖြစ်နိုင်ချေရှိတဲ့ အနောက်တိုင်းမဟုတ်တဲ့ ဘာသာစကားတစ်ခုနဲ့ပေါ့၊ ဒါပေမယ့် မကောင်းဆိုးဝါးဟာ ကမ္ဘာတစ်ဝှမ်းမှာ ပျံ့နှံ့နေတယ်ဆိုတာ ဘယ်တော့မှ မလွတ်တမ်းသိပါစေ။
အရင်ခေတ်တွေတုန်းကတော့ အရမ်းလွယ်တယ်...
M3M3N70ကောင်းမွန်တဲ့ အတိတ်ကာလတွေကို ပြန်သွားရအောင်။ ကျွန်တော်တို့ရဲ့ လုပ်ငန်းက အရမ်းလွယ်ကူခဲ့တယ်… Zero-days တွေက အလွယ်တကူ အောင်မြင်ခဲ့တယ်၊ အက်ပ်တွေက ကျယ်ပြန့်စွာ ပွင့်လင်းနေပြီး အားနည်းချက်တွေကို အလွယ်တကူ အသုံးချနိုင်တယ်၊ ပြီးတော့ ကျွန်တော်တို့ဟာ ချက်ချင်းပဲ ဘေးတိုက် ရွေ့လျားနိုင်ခဲ့တယ်။
ရွှံ့နွံဒေါသ: ဟူးးးးးး! တချို့လူတွေက အခုထိ ဉာဏ်ကြီးရှင်တွေ မဟုတ်ကြသေးဘူး၊ ဒါပေမယ့် အရာအားလုံး ပြောင်းလဲသွားပြီ။ လူကြီးတွေက AppSec အမှိုက်တွေကို အများကြီး ဝေဖန်ခဲ့ကြတယ်။
M3M3N70ဟုတ်တယ်။ ဒါပေမယ့် အရူးအသစ်တွေက developer တွေပါ။ ကျွန်တော်တို့အတွက်တော့ ဒီလူတွေသုံးတဲ့ tool တွေကို ရှာရတာ ပိုလွယ်ပါတယ်။ အထူးသဖြင့် CI က ရွှေတွင်းကြီးတစ်ခုပါပဲ။ cloud access token တွေ၊ SCM အထောက်အထားများ၊ ထုတ်လုပ်မှုဒေတာဘေ့စ်စကားဝှက်များ၊ SSH သီးသန့်သော့များ၊ အခြား CI အသုံးပြုသူများ၏ အထောက်အထားများ… ပျင်းစရာကောင်းသော developer ကိစ္စရပ်များမှ တကယ့်အကြောင်းအရာသို့ ခုန်တက်ခြင်းသည် အတော်လေး ရိုးရှင်းပါသည်။
ဆော့ဖ်ဝဲလ်တည်ဆောက်ခြင်း၊ စမ်းသပ်ခြင်းနှင့် ဖြန့်ကျက်ခြင်းအတွက် အလိုအလျောက်လုပ်ဆောင်ခြင်း CI/CD ကိရိယာသည် လျှို့ဝှက်ချက်များကို command များသို့ အဆင့်ဆင့်ပေးပို့ရန် မကြာခဏ လိုအပ်ပါသည်။ ထို့အပြင် ၎င်းတို့သည် မကြာခဏ ပေါက်ကြားလေ့ရှိပြီး နာမည်ဆိုးဖြင့် ကျော်ကြားသော အကျိုးဆက်များနှင့်အတူ ဖြစ်သည်။
Pipelineတစ်ခါတစ်ရံ ပေါက်ကြားတတ်တဲ့ လျှို့ဝှက်ချက်တွေ လိုအပ်တယ်
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.
ကောင်းမွန်တဲ့ အတိတ်ကာလတွေကို Git သမိုင်းမှာ ရှာတွေ့ဖို့က ဖြစ်နိုင်ပါတယ်။ .env ဖိုင် (ဆော့ဖ်ဝဲရေးသားသူက ၎င်းကို ထည့်ရန် မေ့သွားသည်) .gitignore):
AWS_ACCESS_KEY_ID=AKIA...AWS_SECRET_ACCESS_KEY=wJalrXUtn...AWS_REGION=us-east-1APP_FOLDER=...S3BUCKET=...
GitHub workflow မှာ အသုံးပြုခဲ့တဲ့ .github/deploy.yaml ၎င်းတွင် ဤကဲ့သို့ တစ်ခုခုပါဝင်သည်-
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: ဝိုး! အဲဒီ aws key တွေက အလုပ်လုပ်နေတယ်! အက်ပ်ထဲက inocuos ပြောင်းလဲမှုတစ်ခုကို ကျွန်တော်တို့ အရင်ဆုံး စမ်းသပ်ပြီးတဲ့နောက်မှာ အဲဒီလူတွေ မသိလိုက်ကြတဲ့အတွက် sting ကို ထည့်လိုက်တယ်။ ဘင်ဂို! တကယ့်ကို campaign ပဲ...
မကောင်းဆိုးဝါးလူဟာ malware ပါတဲ့ ပြုပြင်ထားတဲ့ application တစ်ခုကို upload လုပ်ဖို့ AWS key တွေကို အသုံးပြုပြီး ඒ වෙනුවට කිරියට ක ... pipeline"တကယ့်ကမ်ပိန်းပဲ!" ဆိုတာက မက်မန်တိုက ဆင်းရဲသားကို ဖျက်ဆီးခဲ့တယ်လို့ ဆိုလိုနိုင်တယ်။
Memento က ဒီမှာ ပြောပြတာက ဥပမာမှာ AWS access key တွေလို လျှို့ဝှက်ချက်ပေါက်ကြားမှုတစ်ခု ဖြစ်ပွားခဲ့တာနဲ့ လျှို့ဝှက်ချက်ကို ပြန်ရုပ်သိမ်းရမယ် (အထက်က key တွေကို လှည့်ရမယ်)။ ချက်ချင်း။ အမြဲတမ်း ရှိပါတယ် ထိတွေ့မှု ပြတင်းပေါက် ယိုစိမ့်မှုကြားမှာ commit နှင့် လျှို့ဝှက်ပယ်ဖျက်ခြင်း။ Git history ကို ပြန်ရေးရတာ ခက်ခဲပါတယ်။ (အခိုင်မာဆုံးအာဏာရှင်နိုင်ငံတောင်မှ သမိုင်းကို ပြန်လည်ရေးသားဖို့ ကြိုးစားခဲ့ပေမယ့် အချည်းနှီးပါပဲ) ပြီးတော့ ထိရောက်မှုလည်း မရှိပါဘူး (ကျွန်တော်တို့ရဲ့ မိတ်ဆွေတွေဟာ လျှို့ဝှက်ပေါက်ကြားမှုရှိတဲ့ သိုလှောင်ရုံမတိုင်ခင်မှာ မိတ္တူကူးထားခဲ့ကြနိုင်ပါတယ်) commit)။ ခလုတ်များကို ချက်ချင်းလှည့်ပါ၊ ထိတွေ့မှုဝင်းဒိုးအတွင်း ပစ်မှတ်ထားသောအကောင့်အတွက် လှုပ်ရှားမှုမှတ်တမ်းများကို ဖတ်ရှုနေစဉ် ဆုတောင်းပါ။
အဖွဲ့အစည်းတွေက လုပ်သင့်တယ်လို့ ယူဆပါတယ် ရေရှည်လျှို့ဝှက်ချက်များကို အသုံးပြုခြင်းကို တားမြစ်ခြင်း CI/CD pipelines, နှင့် ၎င်းတို့ကို ယာယီအထောက်အထားများဖြင့် အစားထိုးပါ။ GitHub လုပ်ဆောင်ချက်များတွင် AWS သော့များပါသည့် ယခင်ဥပမာတွင်၊ အသုံးပြုခြင်းမှာ ပိုမိုလုံခြုံပါသည် OpenID Connect (OIDC) ဝန်ဆောင်မှုပေးသူ လုပ်ဆောင်ချက်များအတွက် လိုအပ်သော ရေတိုအထောက်အထားများ ရရှိရန်။
ရွှံ့နွံဒေါသ: မင်းတကယ်ကံကောင်းတာပဲ! hardcoded keys တွေနဲ့ leak လုပ်တဲ့ script တွေက အရင်တုန်းက အများသုံး S3 buckets တွေမှာတောင် အသုံးများတဲ့ အလေ့အကျင့်တစ်ခုပါ။ မင်းလုပ်ရမှာက bucket ထဲက object တွေကို ဖြတ်သွားပြီး စိတ်ဝင်စားစရာကောင်းတဲ့အရာတွေကို ရှာဖို့ grepping လုပ်ရုံပါပဲ။
တစ်ခါတစ်ရံတွင် ဖြန့်ကျက်ရန်အသုံးပြုသောနေရာ (ဤဥပမာတွင် AWS S3 bucket) သည် configuration ချို့ယွင်းချက်တစ်ခုကြောင့် (၎င်းကို မတွေ့ရှိဘဲ) ပြင်ပလူများဖတ်ရှုရန် ဖွင့်ထားလေ့ရှိသည်။ ရွှံ့နွံဒေါသ အသုံးပြုခဲ့တာက ဒီလိုပါ-
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>'"
လုံခြုံရေးချို့ယွင်းချက်များ ရှိမရှိ အလိုအလျောက် စကင်ဖတ်နိုင်သည့် provisioning template တွင် bucket ကို ဖန်တီးထားဖွယ်ရှိသည်။
ကိရိယာရဲ့ မူရင်းဖွဲ့စည်းပုံက ကျွန်တော်တို့အတွက် ကစားစရာတစ်ခုလိုပါပဲ
တိကျတဲ့ ဥပမာတွေ ပေးရအောင်၊ ဆွေးနွေးကြည့်ရအောင် Jenkins၊ အလွန်ရေပန်းစားသော CI ကိရိယာများထဲမှ တစ်ခုဖြစ်သည်။
ရွှံ့နွံဒေါသJenkins မှာ “Enable Security” ဆိုတဲ့ checkbox ကို မှတ်မိသေးလား၊ အဆင်ပြေအောင် ဘယ်အဖွဲ့အစည်းတွေများ ဒါကို activate မလုပ်ဖို့ ရွေးချယ်ခဲ့ကြလဲ။ ပြီးတော့ အဲဒီ “ဘယ်သူမဆို ဘာမဆို လုပ်နိုင်တယ်"ခွင့်ပြုချက်ပေါင်းစပ်မှုများကို မူရင်းအတိုင်းလား။ ပြီးတော့ Jenkins plugins တွေလိုမျိုး စိတ်အနှောင့်အယှက်ဖြစ်စေတဲ့ GitHub OAuth ပလပ်အင်၎င်းကို configure လုပ်သူက “Grant READ permissions to all Authenticated Users” နှင့် “Use GitHub repository permissions” နှစ်ခုလုံးကို ရွေးချယ်ခဲ့ပြီး သူတို့၏ ပရောဂျက်အားလုံးကို ကျွန်ုပ်တို့ ဝင်ရောက်ခွင့်ပေးခဲ့သည်။
(Jenkins ရေ၊ မင်းကို ဥပမာအနေနဲ့ ထားပေးလို့ တောင်းပန်ပါတယ် 😉)
လုံခြုံရေးမူများကို ကျွမ်းကျင်စွာ (စွဲလမ်းသူပင်) လိုက်နာပါ။ တစ်ခုမှာ မူရင်းအတိုင်း လုံခြုံအောင်ထားပါ အခြေခံမူ- ထိန်းချုပ်မှုများကို တတ်နိုင်သမျှ အလုံခြုံဆုံးဆက်တင်များသို့ ပုံသေသတ်မှတ်သင့်သည်။ လုံခြုံရေးကို ထည့်သွင်းထားသင့်သည် CI/CD ကိရိယာများနှင့် pipelineနောက်ပိုင်းတွင် စဉ်းစားမည့်အစား အခြေခံမှစတင်၍ လုပ်ဆောင်ပါသည်။ သို့သော် အသုံးပြုရလွယ်ကူမှုနှင့် အဆင်ပြေမှုသည် လုံခြုံရေးနှင့် မကြာခဏ ထိပ်တိုက်တွေ့လေ့ရှိသည်။
Jenkins ကိစ္စအတွက်၊ built-in authentication သည် အလွန်ပျက်စီးလွယ်ပါသည်။ Jenkins မှာ built-in authentication mechanisms တွေကို ဘယ်တော့မှ မသုံးပါနဲ့Role-based Authorization Strategy (“RBAC”) plugin ပါတဲ့ third-party mechanism (SAML, LDAP, Google …) ကို ရွေးချယ်တာ ပိုကောင်းပါတယ်။ ပြီးတော့ အထူးသတိထားပါ။ admin အကောင့်။
အလုပ်ကို ဘယ်လိုဂရုစိုက်ရမလဲ၊ pipeline Jenkins ရှိဖိုင်များကို ကိုင်တွယ်သည်။ အလားတူပင် ကုဒ်အဖြစ် ဖွဲ့စည်းပုံ ပလပ်အင် နှင့် Jenkins ပြင်ဆင်မှုသို့ သက်ဆိုင်သည့် ၎င်း၏ config ဖိုင်များ။
ကိုယ်တိုင်လက်ခံကျင်းပသည့်နေရာမှ ပြောင်းရွှေ့ခြင်း CI/CD စနစ်များမှ cloud-based SaaS စနစ်များအထိ အဖွဲ့အစည်းကွန်ရက်အတွင်း ဘေးတိုက်ရွေ့လျားမှုကို ခွင့်ပြုသည့် အန္တရာယ်အချို့ကို ဖယ်ရှားပေးသော်လည်း၊ ရှိပြီးသား အတွင်းပိုင်းစနစ်များနှင့် ပြင်ပစနစ်များအကြား ပြင်ပချိတ်ဆက်မှုများ ဖွင့်ရန်ကဲ့သို့သော အခြားအန္တရာယ်များကို ထည့်သွင်းထားသည်။ CI/CD ကိရိယာတခုဖြစ်တယ်။
အဖွဲ့အစည်းတွေက လုပ်ဆောင်သင့်ပါတယ်cisခိုင်မာအောင်ပြုလုပ်ရာတွင် သင့်လျော်သောဂရုစိုက်မှု CI/CD စနစ်ကို ကန့်သတ်ချက်အရှိဆုံး ဆက်တင်များဖြင့် စတင်ပြီး အနည်းဆုံးလိုအပ်သော ခွင့်ပြုချက်များဖြင့် တဖြည်းဖြည်း ဖွင့်လှစ်သည် pipeline ခြေလှမ်းများ။
လုံခြုံရေးကို configure လုပ်ခြင်း CI/CD tool တွေက ရှုပ်ထွေးနိုင်ပါတယ်။ အများစုမှာ plugin တွေ ဒါမှမဟုတ် extension တွေ ရှိပြီး အားနည်းချက်အများစုရှိပြီး update လုပ်ဖို့လိုအပ်ပါတယ်။
ထိုကဲ့သို့သော ရှုပ်ထွေးသောကိရိယာများ သို့မဟုတ် စံနှုန်းများအတွက် လုံခြုံရေးအမှားပြင်ဆင်မှုစကင်နာများသည် အထောက်အကူဖြစ်စေနိုင်ပါသည်။
ကုဒ်ထည့်သွင်းခြင်း pipeline ပျော်စရာနှင့် အကျိုးအမြတ်အတွက် အမိန့်များ
M3M3N70: command-injection လုပ်ဖို့ အားနည်းချက်ရှိတဲ့ action တွေနဲ့ script တွေဖြစ်တဲ့ Untrusted Code Checkouts တွေကို သုံးဖူးလား။
ဒီအပိုင်းက ပြသနေတာက pipeline ၎င်းကိုယ်တိုင်တွင် ကုဒ်ရေးသားခြင်းအမှားများ ရှိနိုင်ပြီး မကောင်းသော လုပ်ဆောင်သူများသည် ၎င်းတို့အတွင်းသို့ အလိုအလျောက် ကုဒ်လုပ်ဆောင်ခြင်းကို ထည့်သွင်းနိုင်စေပါသည်။ pipeline ကို မပြောင်းလဲဘဲ pipeline အရင်းအမြစ်ကိုယ်တိုင်ဥပမာအားဖြင့် PR ကိုအသုံးပြုခြင်း။
၏ ပထမဆုံး ဥပမာတစ်ခု ကံမကောင်းတဲ့ GitHub workflow:
# 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 ...
ကိုပေါင်းစပ်ပြီး pull_request_target မယုံကြည်ရသော PR ကို ရှင်းလင်းစွာ checkout လုပ်ထားသည့် workflow trigger သည် repository compromise ဖြစ်စေနိုင်သော အန္တရာယ်ရှိသော အလေ့အကျင့်တစ်ခုဖြစ်သည်။ ဥပမာတွင်၊ ကံမကောင်းစွာပဲ အောက်ပါတို့ပေါင်းစပ်မှုသည်-
pull_request_targetexternal forks တွေကနေတောင် default အနေနဲ့ target repository နဲ့ target repository secrets တွေကို write permission ရှိပြီး PR ရဲ့ target repository ရဲ့ context မှာ run ပါတယ်။- ရင်းမြစ်မှ PR ကုဒ်ကို စစ်ဆေးပါ၊ မယုံကြည်ရသော repo၊
- PR ထိန်းချုပ်ထားသော အကြောင်းအရာများတွင် လုပ်ဆောင်နိုင်သည့် မည်သည့် script ကိုမဆို trigger လုပ်ပါ၊ ဥပမာ-
npm installနှင့် - လှုံ့ဆော်မှုအတွက် အခြေအနေတစ်ခုကို အသုံးမပြုခြင်း
pull_request_target'ဤ PR ကို စိစစ်ပြီးပါပြီ' အညွှန်းတစ်ခုခုကို PR သို့ သတ်မှတ်ပေးမှသာ ဖြစ်ရပ်ကို လုပ်ဆောင်ရန် (ပြင်ပအသုံးပြုသူများသည် PR သို့ အညွှန်းများ သတ်မှတ်ပေး၍မရပါ)။
ဒုတိယဥပမာတစ်ခုသည် မယုံကြည်ရသော ထည့်သွင်းမှုကို (ပြဿနာ၊ မှတ်ချက် သို့မဟုတ်) pull request) ပေးပို့သော ငြင်းခုံမှုများအတွက် အရင်းအမြစ်အဖြစ် pipeline အသုံးအနှုန်းများမှတစ်ဆင့် အမိန့်ပေးပါသည်။ ဤသည်မှာ pipeline OS command injection အားနည်းချက်၏ ဗားရှင်း။
- name: Check title
run: |
title="$"
if [[ ! $title =~ ^.*:\ .*$ ]]; then
echo "Bad issue title"
exit 1
fi
run လုပ်ဆောင်ချက်သည် template ကိုအခြေခံ၍ ယာယီ shell script တစ်ခုကိုထုတ်ပေးသည်။ $ အစားထိုးလိုက်တာကြောင့် shell command injection ကို ခံရနိုင်ခြေရှိပါတယ်။ GitHub အကောင့်အတုရှိတဲ့ တိုက်ခိုက်သူတစ်ယောက်ဟာ title နဲ့ ပြဿနာတစ်ခု ဖန်တီးနိုင်ပါတယ်။ a"; bad_code_goes_here;#, ပြီးတော့ ဘွန်း!
ရွှံ့နွံဒေါသအိုး၊ အဲဒီလူတွေက ပြဿနာတစ်ခုကို ဖွင့်လိုက်ရုံနဲ့ command injection အတွက် တံခါးဖွင့်ပေးလိုက်တာပဲ…
GitHub လုပ်ဆောင်ချက်များတွင် ကုဒ်လုပ်ဆောင်ခြင်းဆိုင်ရာ အားနည်းချက်များ ရှိခဲ့သည်။ ဂါဂျီရာ-မှတ်ချက်၊ ယခု ပြင်ပြီးပါပြီ။ ဖတ်ရှုပေးပါ။ "GitHub workflows မှာ မယုံကြည်ရတဲ့ input" အပြည့်အဝအသေးစိတျအဘို့။
ဇာတ်လမ်းရဲ့ သင်ခန်းစာကတော့- PR ကို ဦးစွာ မသုံးသပ်ဘဲ မယုံကြည်ရသော အရင်းအမြစ်များမှ PR များကို ဘယ်တော့မှ စစ်ဆေးပြီး တည်ဆောက်ခြင်း မပြုပါနှင့်။ မူရင်းရင်းမြစ်ကို ပြင်းထန်စွာ အတည်ပြုခြင်းမရှိပါက ဤနေရာတွင် 'ယုံကြည်ရမှုမရှိ' ဆိုသည်မှာ မည်သည့် developer အကောင့်ကိုမဆို hijack လုပ်ခံရနိုင်ခြေရှိဟု ဆိုလိုနိုင်သည်။
မရည်ရွယ်ဘဲ malware ဖြန့်ကျက်မှု ဒီမှာ!
အဆက်မပြတ်ဖြန့်ကျက် အလိုအလျောက်လုပ်ဆောင်မှုရဲ့ အထွတ်အထိပ်ဖြစ်ပေမယ့် အဲဒီအထွတ်အထိပ်ကို သင့်လျော်တဲ့ အတည်ပြုချက်ထိန်းချုပ်မှုတွေ မရှိတာကြောင့် စိတ်ပျက်စေနိုင်ပါတယ်။ pipeline စီးဆင်းမှု။
အရင်းအမြစ်မှ အလိုအလျောက် ဖြန့်ကျက်ခြင်း၏ အန္တရာယ်များ commit ထုတ်လုပ်မှုစနစ်များအတွက် ၎င်းတွင် မတွေ့ရှိဘဲ ထုတ်လုပ်မှုပတ်ဝန်းကျင်များသို့ အန္တရာယ်ရှိသောကုဒ်များ ဖြန့်ကျက်နိုင်ခြေရှိသည့်အပြင် ဖြန့်ကျက်မှုလုပ်ငန်းစဉ်တွင် အမှားအယွင်းများကြောင့် အနှောင့်အယှက်များ သို့မဟုတ် ပြတ်တောက်မှုများဖြစ်စေနိုင်ခြေတို့ ပါဝင်သည်။
ဤအန္တရာယ်များကို လျှော့ချရန်အတွက် အဖွဲ့အစည်းများသည် ၎င်းတို့၏ ဖြန့်ကျက်မှုလုပ်ငန်းစဉ်တွင် “ခက်ခဲသော အနားယူမှု” ကို အကောင်အထည်ဖော်ရန် မကြာခဏ အကြံပြုလေ့ရှိပြီး ၎င်းတွင် လိုအပ်ပါသည်။ လူ့ခွင့်ပြုချက် ထုတ်ဝေမှုများကို အဆုံးပတ်ဝန်းကျင်များသို့ ဖြန့်ကျက်ခြင်းမပြုမီ။
သူတို့က တံခါးတွေကို ပိတ်နေတယ်
ရွှံ့နွံဒေါသ: ပျော်ရွှင်ဖွယ်ကောင်းသော ပုံသေစကားဝှက်များ CI/CD ကိရိယာများကို ဖျက်ပစ်နေပါသည်။ ဝင်ရောက်ခြင်း
/var/lib/jenkins/secrets/initialAdminPasswordအခုဆို လမ်းကြောင်းပျောက်နေပါပြီ။ ကိရိယာအများစုက 2FA ကို ပေးနေကြပြီး ကိုဗစ်က လူကြိုက်များအောင်လုပ်ထားတာဖြစ်ပြီး အပျင်းဆုံး ကုဒ်မျောက်တောင် သုံးနေကြပြီ။M3M3N70: ကျွန်တော်တို့ 2FA ကို တိုက်ဖျက်နေပါတယ်၊ ဒါပေမယ့် သိပ်မလွယ်ပါဘူး။ အဲဒီလူတွေကို လိမ်လည်လှည့်ဖြားဖို့က ခက်ပါတယ်။ “Scatter Swine” က Twilio နဲ့ လုပ်ခဲ့တာပါWebAuthn key တွေနဲ့ဆိုရင် အများကြီးပိုခက်ပါတယ်။ အနည်းဆုံးတော့ ကျွန်တော်တို့ ကြိုးစားကြည့်နိုင်ပါတယ် MFA ကိုကျော်ဖြတ်ရန် cookies များကိုခိုးယူပါဒါပေမယ့် developer ရဲ့ box ထဲကို ဝင်ရောက်ဖို့ လိုအပ်ပါတယ်။
Multi-Factor Authentication သည် အထောက်အထားစိစစ်ခြင်း လျှို့ဝှက်ချက်များ ပေါက်ကြားမှုအန္တရာယ်ကို ကန့်သတ်ရန်အတွက် မှန်ကန်သောလမ်းကြောင်းသို့ ဦးတည်သော ကောင်းမွန်သော ခြေလှမ်းတစ်ခုဖြစ်သည်။ ခေတ်မီ DevOps tool အများစုသည် MFA ကို ပံ့ပိုးပေးသည်။ ထို့အပြင် WebAuthn / U2F အောက်ရှိ အထောက်အထားစိစစ်ခြင်း key များ (ကိုကြည့်ပါ) FIDO2 ပရောဂျက်) များသည် DevOps တွင် MFA အတွက် အကောင်းဆုံးရွေးချယ်မှုဖြစ်ကောင်းဖြစ်နိုင်သည်၊ အကယ်၍ ကောင်းမွန်စွာစီမံခန့်ခွဲပါက။
ရွှံ့နွံဒေါသDevOps သမားတွေ နိုးထလာကြပြီ။ သူတို့မှာ “အနည်းဆုံးအခွင့်အရေး” ရှိတဲ့ အရည်အချင်းရှိတယ်။ ပြီးတော့ သူတို့က ကုဒ်ရေးတဲ့ မျောက်တွေ မဟုတ်တော့ဘူး။ အခု ကျွန်တော်တို့ဟာ သုံးသပ်သူတွေရဲ့ လက်ပူးလက်ကြပ် ဖမ်းမိခံရပြီ။
တကယ်တော့, pipelines တွေဟာ လွန်ခဲ့တဲ့ နှစ်အနည်းငယ်ကထက် အခုအချိန်မှာ အနည်းငယ် ပိုခိုင်မာလာပြီး အားနည်းတဲ့ action တွေနဲ့ script တွေကို ဖယ်ရှားလိုက်သလို ခိုးဝှက်ပြီး ဝှက်ထားတဲ့ droppers တွေကိုတောင် ထောက်လှမ်းနိုင်တဲ့ လုံခြုံရေး စမ်းသပ်မှု အဆင့်တွေ ထပ်တိုးလာပါတယ်။ commits နဲ့ package တွေကို ကျွန်တော်တို့ ပြန်ပေးဆွဲခဲ့တယ်။
စာဖတ်သူအတွက် မေးခွန်း- ဆော့ဖ်ဝဲကို အရင်းအမြစ်များမှ တည်ဆောက်ပြီး ထုတ်လုပ်မှုတွင် ဖြန့်ကျက်ခြင်းလုပ်ငန်းစဉ်သည် အန္တရာယ်များသော လုပ်ငန်းတစ်ခုလား။ သင်၏ DevOps သည်... အချိန်ကောင်းတွေပေါ့ လူဆိုးတွေအတွက်လား?
နောက်ဆုံးအကြံပြုချက်များ
ဘယ်ကနေစရမလဲ CI/CD pipelines?
ပထမအကြံပြုချက်က ဒီမှာ ရိုးရှင်းပါတယ်- ဂရုတစိုက် ပြန်လည်သုံးသပ် pipelines (သူတို့က ဝေဖန် လုံခြုံရေးပြဿနာများအတွက် အရင်းအမြစ်များ)။ ပြန်လည်သုံးသပ်ချက်များသည် ကုန်ကျစရိတ်များသော်လည်း လိုအပ်ပြီး စနစ်တကျလုပ်ဆောင်သင့်သည်။ ပြန်လည်သုံးသပ်သူများသည် မည်သည့်အရာကို ကြည့်ရှုရမည်ကို သိရှိသင့်သည်။ အဆင့်တိုင်းတွင် ချို့ယွင်းချက်များ ရှိမရှိ စစ်ဆေးရမည်။
အလိုအလျောက် အန္တရာယ်ရှိသော ကုဒ်စကင်နာများ တပ်ဆင်ထားသော ကျွမ်းကျင်သော ပြန်လည်သုံးသပ်သူများ ပေါင်းစပ်ခြင်းသည် အထောက်အကူ ဖြစ်ကောင်းဖြစ်နိုင်သည်။
ဒုတိယအကြံပြုချက်ကတော့ ရေးသားသူများကို လေ့ကျင့်ပေးသော developer များ pipelines နှင့် ၎င်းတို့ကို လုံခြုံရေးတွင် ထိန်းသိမ်းပါထည့်သွင်းစဉ်းစားရမည့်အချက်များ-
- ရေရှည် အထောက်အထားများကို ကိုင်တွယ်ရခြင်း၏ အနှောင့်အယှက်များကို ရှောင်ရှားရန်၊ အတွင်းပိုင်းနှင့် cloud ဝန်ဆောင်မှုများဖြင့် အထောက်အထားစိစစ်ခြင်းကို မည်သို့ စနစ်တကျ ကိုင်တွယ်ရမည်နည်း။
- ဘယ်လိုကန့်သတ်ရမလဲ pipeline၎င်းဝင်ရောက်ကြည့်ရှုရန် လိုအပ်သော အရင်းအမြစ်များ၏ တိကျသောအစုံသို့ s ပေးပို့သည်။ အနည်းဆုံးအခွင့်ထူးခံမှုမူသည် ပြန်လည်ထွန်းလင်းလာသည်။
- ပြုလုပ်ပုံအဆင့်ဆင့်ကို ဘယ်လိုရေးရမလဲ pipelineversion pinning ကဲ့သို့ ပြန်လည်ထုတ်လုပ်နိုင်ပြီး command injection အားနည်းချက်များကို ရှောင်ရှားနိုင်သည်။
- လုံခြုံရေးရှုထောင့်မှ ဖြန့်ကျက်မှုများကို မည်သို့အတည်ပြုရမည်နည်း (၎င်းတို့သည် အခြားသူများဖြစ်သည်!): မည်သည့်လုံခြုံရေး standards တွေကို ကိုက်ညီသင့်ပြီး သက်ဆိုင်ရာ စစ်ဆေးမှုများ/ဂိတ်များကို ဘယ်လိုထည့်သွင်းရမလဲ။ pipelines.
တတိယမြောက် အကြံပြုချက်အနေနဲ့ကတော့ configure လုပ်ပါ။ CI/CD စနစ်တကျ ဂရုတစိုက်။ ခိုင်မာသော အထောက်အထားစိစစ်ခြင်း၊ ပုံသေစကားဝှက်များ သို့မဟုတ် မလုံခြုံသောဆက်တင်များ မရှိခြင်း၊ အထူးအခွင့်အရေး အနည်းဆုံး... ထည့်သွင်းထားသော ပလပ်အင်များနှင့် တိုးချဲ့မှုများရှိ အားနည်းချက်များကို ဂရုစိုက်ပါ။ ဤသည်မှာ နောက်ပို့စ်များ၏ အဓိကအချက်ဖြစ်နိုင်သည်၊ ကျေးဇူးပြု၍ စောင့်မျှော်ကြည့်ရှုပါ။
စတုတ္ထမြောက် အကြံပြုချက်ကတော့ သုံးစွဲပါ။ CI/CD pipelineလုံခြုံရေး အလိုအလျောက်စနစ်အတွက် sရင်းမြစ်ကုဒ် ခွဲခြမ်းစိတ်ဖြာခြင်း (SAST), အရင်းအမြစ်ဖွဲ့စည်းမှု ခွဲခြမ်းစိတ်ဖြာခြင်း (SCA)၊ လျှို့ဝှက်ချက်များ ယိုစိမ့်မှုများကို စကင်ဖတ်ခြင်း၊ anti-malware tools များ၊ container security scanners များ သို့မဟုတ် automated runtime detectors (DAST နှင့် malware) များကို ပုံမှန်လည်ပတ်နိုင်သည်။ pipeline။ သင့်အဖွဲ့အစည်းသည် ပြဋ္ဌာန်းနိုင်သည် standardလုံခြုံရေးစကင်ဖတ်ခြင်းဆိုင်ရာ အကျုံးဝင်မှုအကြောင်း CI/CD.
သတိရပါ၊ ဤကိရိယာများသည် ကျွမ်းကျင်သူသုံးသပ်ချက်ကို ညီမျှခြင်းမှ မဖယ်ရှားပေးပါ၊ မဟုတ်ပါက သင်သည် မှားယွင်းသောလုံခြုံမှုခံစားရနိုင်သည်။
OWASP top-tens တွေကို ကျွမ်းကျင်စွာ အသုံးချနိုင်မယ်ဆိုရင် ကောင်းမွန်တဲ့ မကြာသေးမီက ပရောဂျက်တစ်ခုကတော့ OWASP ထိပ်ဆုံး ၁၀ CI/CD လုံခြုံရေးအန္တရာယ်.
ငြင်းဆိုချက်မှတ်စု
(1) ဤပို့စ်ရှိ ဥပမာများသည် GitHub ကိုအသုံးပြုထားသည် SCM၊ cloud provider အဖြစ် AWS နှင့် GitHub Actions သို့မဟုတ် Jenkins အဖြစ် CI/CD ကိရိယာ။ ၎င်းတို့သည် ၎င်းတို့၏ အခြားရွေးချယ်စရာများထက် အားနည်းခြင်း/ဘေးကင်းခြင်း မရှိပါ။ မကောင်းသော ရည်ရွယ်ချက် မရှိပါ။ ဤကိရိယာများသည် အစွမ်းထက်ပြီး သင့်လျော်စွာ အသုံးပြုရန် လိုအပ်သည်။
(2) M3M3N70 နှင့် ရွှံ့နွံဒေါသ စိတ်ကူးယဉ်ဇာတ်ကောင်များဖြစ်သည်။ အသက်ရှင်သည်ဖြစ်စေ၊ သေဆုံးသည်ဖြစ်စေ လူပုဂ္ဂိုလ်များ သို့မဟုတ် အုပ်စုများနှင့် ဆင်တူခြင်းသည် တိုက်ဆိုင်မှုသက်သက်သာဖြစ်သည်… သို့မဟုတ် ဟုတ်ပါသလား။
စာများများဖတ်ပါ။
- Haymore, A. et al. "ကျွန်ုပ်တို့ မည်သို့ ညှိနှိုင်းခဲ့ရသည်ဆိုသည့် လက်တွေ့ဘဝ ဇာတ်လမ်း ၁၀ ခု" CI/CD pipelines "NCC အုပ်စု၊ ၂၀၂၂ ခုနှစ်၊ ဇန်နဝါရီလ။
configure-aws-credentialsGitHub လုပ်ဆောင်ချက် နှင့် Amazon Web Services တွင် OpenID Connect ကို configure လုပ်ခြင်း GitHub workflows တွင် AWS command များကို ဖြန့်ကျက်ရန် မည်သို့လုပ်ဆောင်ရမည်ဆိုင်ရာ အသေးစိတ်အချက်အလက်များအတွက်။- လိုဘာဆက်စကီ ဂျေ။ “သင့်ရဲ့ GitHub Actions နဲ့ workflows တွေကို လုံခြုံအောင်ထားခြင်း အပိုင်း ၁: pwn requests တွေကို ကာကွယ်ခြင်း”GitLab လုံခြုံရေးဓာတ်ခွဲခန်း၊ ဒီဇင်ဘာ ၂၀၂၀။
- လိုဘာဆက်စကီ ဂျေ။ “သင့်ရဲ့ GitHub Actions နဲ့ workflows တွေကို လုံခြုံအောင်ထားခြင်း အပိုင်း ၂: မယုံကြည်ရတဲ့ input”GitLab လုံခြုံရေးဓာတ်ခွဲခန်း၊ ၂၀၂၁ ခုနှစ်၊ ဇန်နဝါရီလ။
- OWASP။ "OWASP ထိပ်တန်း ၁၀" CI/CD လုံခြုံရေးအန္တရာယ်များ”၂၀၂၂ ခုနှစ်၊ ဇူလိုင်လ။
- Saltzer J. နှင့် Schroeder M. “ကွန်ပျူတာစနစ်များရှိ သတင်းအချက်အလက်ကာကွယ်မှု”။ ၁၉၇၅ ခုနှစ်၊ ဧပြီလ။ လုံခြုံရေးမူများသည် နည်းပညာနှင့်အတူ တိုးတက်ပြောင်းလဲလာခဲ့သော်လည်း ၄၇ နှစ်အကြာတွင် S&S အတွေးအခေါ်အများစုသည် အကျုံးဝင်နေဆဲဖြစ်သည်။
- ယူကေ NCSC။ "တည်ဆောက်မှုနှင့် ဖြန့်ကျက်မှုကို လုံခြုံအောင်ပြုလုပ်ပါ" pipeline"ယူကေ အမျိုးသား ဆိုက်ဘာလုံခြုံရေးစင်တာ၊ ၂၀၁၉ ခုနှစ် ဖေဖော်ဝါရီလ။




