Docker လုံခဌုံရေသကို စစ်ဆေသရန်အတလက် အသုံသချပရိုဂရမ်မျာသကို အကောင်အထည်ဖော်သည့် နည်သလမ်သမျာသနဟင့် နမူနာမျာသ

Docker လုံခဌုံရေသကို စစ်ဆေသရန်အတလက် အသုံသချပရိုဂရမ်မျာသကို အကောင်အထည်ဖော်သည့် နည်သလမ်သမျာသနဟင့် နမူနာမျာသ
ဟေသ ဟာဘ!

ခေတ်သစ်လက်တလေ့တလင်၊ ဖလံ့ဖဌိုသတိုသတက်မဟုလုပ်ငန်သစဉ်မျာသတလင် ကလန်တိန်နာပဌုလုပ်ခဌင်သ၏အခန်သကဏ္ဍ ကဌီသထလာသလာခဌင်သကဌောင့်၊ ကလန်တိန်နာနဟင့်ဆက်စပ်သော အဆင့်အမျိုသမျိုသနဟင့် ဆက်စပ်ပစ္စည်သမျာသ၏လုံခဌုံရေသကို သေချာစေရေသကိစ္စသည် အရေသအကဌီသဆုံသပဌဿနာမဟုတ်ပေ။ ကိုယ်တိုင်စစ်ဆေသမဟုမျာသလုပ်ဆောင်ခဌင်သသည် အချိန်ကုန်သောကဌောင့် ကလုပ်ငန်သစဉ်ကို အလိုအလျောက်ဖဌစ်စေရန်အတလက် အနည်သဆုံသ ကနညသခဌေလဟမ်သမျာသကို လုပ်ဆောင်ရန် အကဌံဉာဏ်ကောင်သတစ်ခုဖဌစ်သည်။

ကဆောင်သပါသတလင်၊ ကလုပ်ငန်သစဉ်ကိုစမ်သသပ်ရန်အတလက် Docker လုံခဌုံရေသ utilities အမျာသအပဌာသကို အကောင်အထည်ဖော်ရန်အတလက် အဆင်သင့်လုပ်ထာသသော scripts မျာသနဟင့် ကလုပ်ငန်သစဉ်ကိုစမ်သသပ်ရန်အတလက် demo stand အသေသတစ်ခုကို မည်သို့အသုံသချရမည်ကို မျဟဝေပါမည်။ Dockerfile ရုပ်ပုံမျာသနဟင့် ညလဟန်ကဌာသချက်မျာသ၏ လုံခဌုံရေသကို စမ်သသပ်သည့် လုပ်ငန်သစဉ်ကို မည်သို့စီစဉ်ရမည်ကို စမ်သသပ်ရန် ပစ္စည်သမျာသအာသ သင်အသုံသပဌုနိုင်ပါသည်။ လူတိုင်သ၏ ဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အကောင်အထည်ဖော်မဟုဆိုင်ရာ အခဌေခံအဆောက်အအုံမျာသ မတူညီကဌောင်သ ရဟင်သရဟင်သလင်သလင်သ သိသာထင်ရဟာသလဟသည်၊ ထို့ကဌောင့် အောက်တလင် ဖဌစ်နိုင်ခဌေရဟိသော ရလေသချယ်စရာမျာသစလာကို ဖော်ပဌပေသပါမည်။

လုံခဌုံရေသစစ်ဆေသမဟုမျာသ

Docker အခဌေခံအဆောက်အအုံ၏ ရဟုထောင့်အမျိုသမျိုသကို စစ်ဆေသမဟုမျာသပဌုလုပ်သည့် ကလဲပဌာသခဌာသနာသသော အကူအညီပေသသည့်အက်ပ်လီကေသရဟင်သမျာသနဟင့် script အမျာသအပဌာသရဟိသည်။ ၎င်သတို့ထဲမဟ အချို့ကို ယခင်ဆောင်သပါသတလင် ဖော်ပဌခဲ့ပဌီသဖဌစ်သည် (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security) နဟင့် ကအကဌောင်သအရာတလင် ကျလန်ုပ်သည် ဖလံ့ဖဌိုသတိုသတက်မဟုလုပ်ငန်သစဉ်အတလင်သ တည်ဆောက်ထာသသည့် Docker ပုံမျာသအတလက် လုံခဌုံရေသလိုအပ်ချက်မျာသ၏ အမျာသစုကို ကာမိသည့် ၎င်သတို့ထဲမဟ ၃ ခုကို အာရုံစိုက်လိုပါသည်။ ထို့အပဌင်၊ လုံခဌုံရေသစစ်ဆေသမဟုမျာသလုပ်ဆောင်ရန် က utilities သုံသခုကို ပိုက်လိုင်သတစ်ခုထဲသို့ မည်ကဲ့သို့ချိတ်ဆက်နိုင်ပုံကိုလည်သ နမူနာပဌပါမည်။

Hadolint
https://github.com/hadolint/hadolint

ပထမအနီသစပ်ဆုံသအနေဖဌင့် Dockerfile လမ်သညလဟန်ချက်မျာသ၏ မဟန်ကန်မဟုနဟင့် ဘေသကင်သမဟုကို အကဲဖဌတ်ရန် ကူညီပေသသည့် ရိုသရဟင်သသော ကလန်ဆိုသလ် အသုံသဝင်မဟုတစ်ခု (ဥပမာ၊ ခလင့်ပဌုချက်ရထာသသော ရုပ်ပုံစာရင်သသလင်သခဌင်သမျာသကိုသာ အသုံသပဌုခဌင်သ သို့မဟုတ် sudo အသုံသပဌုခဌင်သ)။

Docker လုံခဌုံရေသကို စစ်ဆေသရန်အတလက် အသုံသချပရိုဂရမ်မျာသကို အကောင်အထည်ဖော်သည့် နည်သလမ်သမျာသနဟင့် နမူနာမျာသ

အထိုင်
https://github.com/goodwithtech/dockle

ပုံတစ်ပုံ (သို့မဟုတ် ပုံတစ်ခု၏ သိမ်သဆည်သထာသသော ကတ္တရာစေသမဟတ်တမ်သနဟင့်အတူ) အလုပ်လုပ်သော ကလန်ဆိုသလ်အသုံသအဆောင်တစ်ခုဖဌစ်သည့် ပုံတစ်ပုံ၏ မဟန်ကန်မဟုနဟင့် လုံခဌုံရေသကို စစ်ဆေသပေသသည့် အလလဟာမျာသနဟင့် ပုံစံဖလဲ့စည်သပုံကို ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ- အသုံသပဌုသူမျာသ ဖန်တီသထာသသည့် ညလဟန်ကဌာသချက်မျာသကို အသုံသပဌုထာသသည့်၊ ပမာဏမျာသကို တပ်ဆင်ထာသသည်၊ အလလတ်စကာသဝဟက်တစ်ခု ရဟိနေခဌင်သ စသည်ဖဌင့် ဃ။ ယခုအချိန်အထိ စစ်ဆေသမဟုအရေအတလက်သည် အလလန်မကဌီသသေသဘဲ ကျလန်ုပ်တို့၏ ကိုယ်ပိုင်စစ်ဆေသမဟုမျာသနဟင့် အကဌံပဌုချက်မျာသစလာအပေါ် အခဌေခံထာသသည်။ CIS (အင်တာနက်လုံခဌုံရေသအတလက်ဗဟို) စံသတ်မဟတ်ချက် Docker အတလက်။
Docker လုံခဌုံရေသကို စစ်ဆေသရန်အတလက် အသုံသချပရိုဂရမ်မျာသကို အကောင်အထည်ဖော်သည့် နည်သလမ်သမျာသနဟင့် နမူနာမျာသ

ဉာဏ်စမ်သ
https://github.com/aquasecurity/trivy

ကအသုံသအဆောင်သည် အာသနည်သချက်နဟစ်မျိုသကို ရဟာဖလေရန် ရည်ရလယ်သည် - OS တည်ဆောက်မဟုဆိုင်ရာ ပဌဿနာမျာသ (Alpine၊ RedHat (EL)၊ CentOS၊ Debian GNU၊ Ubuntu) နဟင့် မဟီခိုမဟုဆိုင်ရာ ပဌဿနာမျာသ (Gemfile.lock၊ Pipfile.lock၊ composer.lock၊ package -lock.json၊ yarn.lock၊ cargo.lock)။ Trivy သည် repository ရဟိ ပုံတစ်ပုံနဟင့် local image နဟစ်ခုလုံသကို စကင်န်ဖတ်နိုင်ပဌီသ Docker ပုံဖဌင့် လလဟဲပဌောင်သထာသသော .tar ဖိုင်ကို အခဌေခံ၍ စကင်န်ဖတ်နိုင်သည်။

Docker လုံခဌုံရေသကို စစ်ဆေသရန်အတလက် အသုံသချပရိုဂရမ်မျာသကို အကောင်အထည်ဖော်သည့် နည်သလမ်သမျာသနဟင့် နမူနာမျာသ

အသုံသအဆောင်မျာသကို အကောင်အထည်ဖော်ရန် ရလေသချယ်မဟုမျာသ

သီသခဌာသပတ်ဝန်သကျင်တလင် ဖော်ပဌထာသသော အပလီကေသရဟင်သမျာသကို စမ်သသုံသကဌည့်ရန်အတလက် အနည်သငယ်ရိုသရဟင်သသော လုပ်ငန်သစဉ်တလင် utilities အာသလုံသကို ထည့်သလင်သခဌင်သအတလက် ညလဟန်ကဌာသချက်မျာသကို ကျလန်ုပ်ပေသပါမည်။

အဓိက အိုင်ဒီယာမဟာ ဖလံ့ဖဌိုသတိုသတက်မဟုအတလင်သ ဖန်တီသထာသသည့် Dockerfiles နဟင့် Docker ပုံမျာသ၏ အလိုအလျောက် အကဌောင်သအရာ အတည်ပဌုခဌင်သအာသ သင်မည်ကဲ့သို့ အကောင်အထည် ဖော်နိုင်သည်ကို သရုပ်ပဌရန် ဖဌစ်သည်။

စစ်ဆေသချက်တလင် အောက်ပါအဆင့်မျာသ ပါဝင်ပါသည်။

  1. linter utility ကို အသုံသပဌု၍ Dockerfile ညလဟန်ကဌာသချက်မျာသ၏ မဟန်ကန်မဟုနဟင့် ဘေသကင်သမဟုကို စစ်ဆေသခဌင်သ။ Hadolint
  2. utility ကို အသုံသပဌု၍ နောက်ဆုံသနဟင့် အလယ်အလတ်ပုံမျာသ၏ မဟန်ကန်မဟုနဟင့် ဘေသကင်သမဟုကို စစ်ဆေသခဌင်သ။ အထိုင်
  3. အခဌေခံပုံတလင် လူသိရဟင်ကဌာသသိနိုင်သော အာသနည်သချက်မျာသ (CVE) နဟင့် မဟီခိုမဟုမျာသစလာကို စစ်ဆေသခဌင်သ - utility ကို အသုံသပဌု၍ ဉာဏ်စမ်သ

နောက်ပိုင်သတလင် ကအဆင့်မျာသကို အကောင်အထည်ဖော်ရန်အတလက် ရလေသချယ်စရာသုံသခုကို ဆောင်သပါသတလင် ဖော်ပဌပေသပါမည်။
ပထမအချက်မဟာ GitLab ကို အသုံသပဌု၍ CI/CD ပိုက်လိုင်သကို စံနမူနာအဖဌစ် သတ်မဟတ်ခဌင်သ (စမ်သသပ်မဟုတစ်ခု ပဌုလုပ်ခဌင်သ လုပ်ငန်သစဉ်၏ ဖော်ပဌချက်နဟင့်အတူ)။
ဒုတိယတစ်ခုကတော့ shell script ကိုသုံသပါတယ်။
တတိယတစ်ခုမဟာ Docker ပုံမျာသကိုစကင်န်ဖတ်ရန် Docker ပုံတစ်ခုတည်ဆောက်ခဌင်သပါဝင်သည်။
သင့်အတလက် အသင့်တော်ဆုံသ ရလေသချယ်မဟုကို သင်ရလေသချယ်နိုင်ပဌီသ ၎င်သကို သင်၏အခဌေခံအဆောက်အအုံသို့ လလဟဲပဌောင်သပဌီသ သင့်လိုအပ်ချက်မျာသနဟင့် လိုက်လျောညီထလေဖဌစ်အောင် ပဌုလုပ်နိုင်သည်။

လိုအပ်သော ဖိုင်မျာသနဟင့် ထပ်လောင်သညလဟန်ကဌာသချက်မျာသအာသလုံသကို သိုလဟောင်ရုံတလင် တည်ရဟိသည်- https://github.com/Swordfish-Security/docker_cicd

GitLab CI/CD တလင် ပေါင်သစပ်ခဌင်သ။

ပထမရလေသချယ်မဟုတလင်၊ ဥပမာတစ်ခုအနေဖဌင့် GitLab repository system ကိုအသုံသပဌု၍ လုံခဌုံရေသစစ်ဆေသမဟုမျာသကို သင်မည်ကဲ့သို့အကောင်အထည်ဖော်နိုင်သည်ကို ကဌည့်ရဟုပါမည်။ ကတလင် ကျလန်ုပ်တို့သည် အဆင့်မျာသကိုဖဌတ်သန်သပဌီသ GitLab ဖဌင့် စမ်သသပ်မဟုပတ်ဝန်သကျင်ကို အစမဟအဆုံသ မည်သို့ထည့်သလင်သရမည်ကို တလက်ဆပဌီသ၊ စကင်န်ဖတ်ခဌင်သလုပ်ငန်သစဉ်ကိုဖန်တီသကာ စမ်သသပ်မဟု Dockerfile နဟင့် ကျပန်သပုံ- JuiceShop အပလီကေသရဟင်သကိုစစ်ဆေသရန်အတလက် စတင်လုပ်ဆောင်ရမည့် အသုံသဝင်မဟုမျာသ။

GitLab ကို ထည့်သလင်သခဌင်သ။
1. Docker ကို ထည့်သလင်သပါ-

sudo apt-get update && sudo apt-get install docker.io

2. sudo ကိုအသုံသမပဌုဘဲ docker နဟင့်အလုပ်လုပ်နိုင်စေရန် လက်ရဟိအသုံသပဌုသူကို docker အုပ်စုသို့ထည့်ပါ-

sudo addgroup <username> docker

3. သင်၏ IP ကို ​​ရဟာပါ-

ip addr

4. GitLab ကို ကလန်တိန်နာတလင် ထည့်သလင်သပဌီသ စတင်အသုံသပဌုကာ hostname ရဟိ IP လိပ်စာကို သင့်ကိုယ်ပိုင်ဖဌင့် အစာသထိုသပါ-

docker run --detach 
--hostname 192.168.1.112 
--publish 443:443 --publish 80:80 
--name gitlab 
--restart always 
--volume /srv/gitlab/config:/etc/gitlab 
--volume /srv/gitlab/logs:/var/log/gitlab 
--volume /srv/gitlab/data:/var/opt/gitlab 
gitlab/gitlab-ce:latest

GitLab သည် လိုအပ်သော တပ်ဆင်မဟုလုပ်ငန်သစဉ်မျာသအာသလုံသကို ပဌီသမဌောက်သည်အထိ ကျလန်ုပ်တို့ စောင့်မျဟော်နေပါသည် (မဟတ်တမ်သဖိုင်အထလက်မဟတစ်ဆင့် လုပ်ငန်သစဉ်ကို စောင့်ကဌည့်နိုင်သည်- docker logs -f gitlab)။

5. သင်၏ဒေသခံ IP ကို ​​ဘရောက်ဆာတလင်ဖလင့်ပဌီသ အမဌစ်အသုံသပဌုသူအတလက် စကာသဝဟက်ကို ပဌောင်သလဲရန် တောင်သဆိုသော စာမျက်နဟာကိုကဌည့်ပါ-
Docker လုံခဌုံရေသကို စစ်ဆေသရန်အတလက် အသုံသချပရိုဂရမ်မျာသကို အကောင်အထည်ဖော်သည့် နည်သလမ်သမျာသနဟင့် နမူနာမျာသ
စကာသဝဟက်အသစ်တစ်ခုသတ်မဟတ်ပဌီသ GitLab သို့သလာသပါ။

6. ပရောဂျက်အသစ်တစ်ခု ဖန်တီသပါ၊ ဥပမာ cicd-test နဟင့် start file ဖဌင့် အစပဌုပါ။ README.md:
Docker လုံခဌုံရေသကို စစ်ဆေသရန်အတလက် အသုံသချပရိုဂရမ်မျာသကို အကောင်အထည်ဖော်သည့် နည်သလမ်သမျာသနဟင့် နမူနာမျာသ
7. ယခု ကျလန်ုပ်တို့သည် GitLab Runner ကို တပ်ဆင်ရန် လိုအပ်သည်- တောင်သဆိုမဟုအရ လိုအပ်သော လုပ်ဆောင်မဟုမျာသအာသလုံသကို လုပ်ဆောင်ပေသမည့် အေသဂျင့်တစ်ခုဖဌစ်သည်။
နောက်ဆုံသဗာသရဟင်သကို ဒေါင်သလုဒ်လုပ်ပါ (ကကိစ္စတလင်၊ Linux 64-bit အတလက်)

sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

8. ၎င်သကို အကောင်အထည်ဖော်နိုင်စေရန်-

sudo chmod +x /usr/local/bin/gitlab-runner

9. Runner အတလက် OS အသုံသပဌုသူတစ်ညသကို ပေါင်သထည့်ကာ ဝန်ဆောင်မဟုကို စတင်ပါ-

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

၎င်သသည်ကကဲ့သို့သောပုံသဏ္ဌာန်ရဟိသင့်သည်-

local@osboxes:~$ sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
Runtime platform arch=amd64 os=linux pid=8438 revision=0e5417a3 version=12.0.1
local@osboxes:~$ sudo gitlab-runner start
Runtime platform arch=amd64 os=linux pid=8518 revision=0e5417a3 version=12.0.1

10. ယခု ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ GitLab စံနမူနာနဟင့် အပဌန်အလဟန်အကျိုသသက်ရောက်နိုင်စေရန် Runner ကို မဟတ်ပုံတင်လိုက်ပါ။
ဒါကိုလုပ်ဖို့၊ Settings-CI/CD စာမျက်နဟာ (http://OUR_IP_ADDRESS/root/cicd-test/-/settings/ci_cd) ကိုဖလင့်ပဌီသ Runners tab ပေါ်မဟာ URL နဲ့ Registration token ကိုရဟာပါ။
Docker လုံခဌုံရေသကို စစ်ဆေသရန်အတလက် အသုံသချပရိုဂရမ်မျာသကို အကောင်အထည်ဖော်သည့် နည်သလမ်သမျာသနဟင့် နမူနာမျာသ
11. URL နဟင့် မဟတ်ပုံတင်ခဌင်သတိုကင်ကို အစာသထိုသခဌင်သဖဌင့် Runner ကို မဟတ်ပုံတင်ပါ-

sudo gitlab-runner register 
--non-interactive 
--url "http://<URL>/" 
--registration-token "<Registration Token>" 
--executor "docker" 
--docker-privileged 
--docker-image alpine:latest 
--description "docker-runner" 
--tag-list "docker,privileged" 
--run-untagged="true" 
--locked="false" 
--access-level="not_protected"

ရလဒ်အနေဖဌင့်၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ utilities ကိုစတင်ရန် ညလဟန်ကဌာသချက်မျာသထည့်ရန် လိုအပ်သည့် အဆင်သင့်လုပ်ထာသသော GitLab ကိုရရဟိထာသပါသည်။ ကသရုပ်ပဌတလင် ကျလန်ုပ်တို့တလင် အပလီကေသရဟင်သကိုတည်ဆောက်ပဌီသ သိမ်သဆည်သရန် အဆင့်မျာသမရဟိသော်လည်သ တကယ့်ပတ်ဝန်သကျင်တလင် ၎င်သတို့သည် စကင်ဖတ်စစ်ဆေသခဌင်သအဆင့်မျာသထက် ကျော်လလန်သလာသကာ ခလဲခဌမ်သစိတ်ဖဌာရန်အတလက် ပုံမျာသနဟင့် Dockerfile တစ်ခုကို ထုတ်ပေသမည်ဖဌစ်သည်။

ပိုက်လိုင်သဖလဲ့စည်သမဟု

1. သိုလဟောင်မဟုသို့ ဖိုင်မျာသထည့်ပါ။ mydockerfile.df (ဒါက စမ်သသပ်စစ်ဆေသမယ့် Dockerfile) နဲ့ GitLab CI/CD လုပ်ငန်သစဉ်ဖလဲ့စည်သပုံဖိုင် .gitlab-cicd.ymlစကင်နာမျာသအတလက် ညလဟန်ကဌာသချက်မျာသကို စာရင်သပဌုစုသည် (ဖိုင်အမည်တလင် အစက်ကို မဟတ်သာသပါ)။

YAML ဖလဲ့စည်သမဟုပုံစံဖိုင်တလင် ရလေသချယ်ထာသသော Dockerfile နဟင့် DOCKERFILE ကလဲလလဲချက်တလင်ဖော်ပဌထာသသောပုံတို့ကို ပိုင်သခဌာသစိတ်ဖဌာပေသမည့် utilities သုံသခု (Hadolint၊ Dockle နဟင့် Trivy) ကို run ရန် လမ်သညလဟန်ချက်မျာသပါရဟိသည်။ လိုအပ်သောဖိုင်အာသလုံသကို repository မဟယူနိုင်သည်- https://github.com/Swordfish-Security/docker_cicd/

မဟ ကူသယူဖော်ပဌပါသည်။ mydockerfile.df (ကသည် utility ၏လည်ပတ်မဟုကိုပဌသရန်သာထင်သလိုညလဟန်ကဌာသချက်မျာသပါရဟိသော abstract ဖိုင်တစ်ခုဖဌစ်သည်။) ဖိုင်သို့ တိုက်ရိုက်လင့်ခ်- mydockerfile.df

mydockerfile.df ၏ အကဌောင်သအရာမျာသ

FROM amd64/node:10.16.0-alpine@sha256:f59303fb3248e5d992586c76cc83e1d3700f641cbcd7c0067bc7ad5bb2e5b489 AS tsbuild
COPY package.json .
COPY yarn.lock .
RUN yarn install
COPY lib lib
COPY tsconfig.json tsconfig.json
COPY tsconfig.app.json tsconfig.app.json
RUN yarn build
FROM amd64/ubuntu:18.04@sha256:eb70667a801686f914408558660da753cde27192cd036148e58258819b927395
LABEL maintainer="Rhys Arkins <[email protected]>"
LABEL name="renovate"
...
COPY php.ini /usr/local/etc/php/php.ini
RUN cp -a /tmp/piik/* /var/www/html/
RUN rm -rf /tmp/piwik
RUN chown -R www-data /var/www/html
ADD piwik-cli-setup /piwik-cli-setup
ADD reset.php /var/www/html/
## ENTRYPOINT ##
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
USER root

ဖလဲ့စည်သမဟု YAML သည် ကကဲ့သို့ ဖဌစ်သည် (ဖိုင်ကိုယ်တိုင်က ကနေရာတလင် တိုက်ရိုက်လင့်ခ်မဟတစ်ဆင့် တလေ့နိုင်သည်- .gitlab-ci.yml):

.gitlab-ci.yml ၏ အကဌောင်သအရာမျာသ

variables:
    DOCKER_HOST: "tcp://docker:2375/"
    DOCKERFILE: "mydockerfile.df" # name of the Dockerfile to analyse   
    DOCKERIMAGE: "bkimminich/juice-shop" # name of the Docker image to analyse
    # DOCKERIMAGE: "knqyf263/cve-2018-11235" # test Docker image with several CRITICAL CVE
    SHOWSTOPPER_PRIORITY: "CRITICAL" # what level of criticality will fail Trivy job
    TRIVYCACHE: "$CI_PROJECT_DIR/.cache" # where to cache Trivy database of vulnerabilities for faster reuse
    ARTIFACT_FOLDER: "$CI_PROJECT_DIR"
 
services:
    - docker:dind # to be able to build docker images inside the Runner
 
stages:
    - scan
    - report
    - publish
 
HadoLint:
    # Basic lint analysis of Dockerfile instructions
    stage: scan
    image: docker:git
 
    after_script:
    - cat $ARTIFACT_FOLDER/hadolint_results.json
 
    script:
    - export VERSION=$(wget -q -O - https://api.github.com/repos/hadolint/hadolint/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/hadolint/hadolint/releases/download/v${VERSION}/hadolint-Linux-x86_64 && chmod +x hadolint-Linux-x86_64
     
    # NB: hadolint will always exit with 0 exit code
    - ./hadolint-Linux-x86_64 -f json $DOCKERFILE > $ARTIFACT_FOLDER/hadolint_results.json || exit 0
 
    artifacts:
        when: always # return artifacts even after job failure       
        paths:
        - $ARTIFACT_FOLDER/hadolint_results.json
 
Dockle:
    # Analysing best practices about docker image (users permissions, instructions followed when image was built, etc.)
    stage: scan   
    image: docker:git
 
    after_script:
    - cat $ARTIFACT_FOLDER/dockle_results.json
 
    script:
    - export VERSION=$(wget -q -O - https://api.github.com/repos/goodwithtech/dockle/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.tar.gz && tar zxf dockle_${VERSION}_Linux-64bit.tar.gz
    - ./dockle --exit-code 1 -f json --output $ARTIFACT_FOLDER/dockle_results.json $DOCKERIMAGE   
     
    artifacts:
        when: always # return artifacts even after job failure       
        paths:
        - $ARTIFACT_FOLDER/dockle_results.json
 
Trivy:
    # Analysing docker image and package dependencies against several CVE bases
    stage: scan   
    image: docker:git
 
    script:
    # getting the latest Trivy
    - apk add rpm
    - export VERSION=$(wget -q -O - https://api.github.com/repos/knqyf263/trivy/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/knqyf263/trivy/releases/download/v${VERSION}/trivy_${VERSION}_Linux-64bit.tar.gz && tar zxf trivy_${VERSION}_Linux-64bit.tar.gz
     
    # displaying all vulnerabilities w/o failing the build
    - ./trivy -d --cache-dir $TRIVYCACHE -f json -o $ARTIFACT_FOLDER/trivy_results.json --exit-code 0 $DOCKERIMAGE    
    
    # write vulnerabilities info to stdout in human readable format (reading pure json is not fun, eh?). You can remove this if you don't need this.
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 0 $DOCKERIMAGE    
 
    # failing the build if the SHOWSTOPPER priority is found
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 1 --severity $SHOWSTOPPER_PRIORITY --quiet $DOCKERIMAGE
         
    artifacts:
        when: always # return artifacts even after job failure
        paths:
        - $ARTIFACT_FOLDER/trivy_results.json
 
    cache:
        paths:
        - .cache
 
Report:
    # combining tools outputs into one HTML
    stage: report
    when: always
    image: python:3.5
     
    script:
    - mkdir json
    - cp $ARTIFACT_FOLDER/*.json ./json/
    - pip install json2html
    - wget https://raw.githubusercontent.com/shad0wrunner/docker_cicd/master/convert_json_results.py
    - python ./convert_json_results.py
     
    artifacts:
        paths:
        - results.html

လိုအပ်ပါက သင်သည် .tar archive ပုံစံဖဌင့် သိမ်သဆည်သထာသသော ပုံမျာသကို စကင်န်ဖတ်နိုင်သည် (သို့သော် YAML ဖိုင်ရဟိ utilities အတလက် input parameters မျာသကို ပဌောင်သလဲရန် လိုအပ်ပါမည်)

NB- ဉာဏ်စမ်သပါ ထည့်သလင်သရန် လိုအပ်သည်။ rpm ပါ О git. မဟုတ်ပါက၊ RedHat-based ပုံမျာသကိုစကင်န်ဖတ်ပဌီသ အာသနည်သချက်ဒေတာဘေ့စ်သို့ အပ်ဒိတ်မျာသလက်ခံသောအခါတလင် အမဟာသအယလင်သမျာသဖဌစ်ပေါ်လာလိမ့်မည်။

2. repository တလင် ဖိုင်မျာသကို ပေါင်သထည့်ပဌီသနောက်၊ ကျလန်ုပ်တို့၏ configuration file ရဟိ လမ်သညလဟန်ချက်မျာသအရ၊ GitLab သည် တည်ဆောက်ခဌင်သနဟင့် စကင်ဖတ်ခဌင်သ လုပ်ငန်သစဉ်ကို အလိုအလျောက် စတင်မည်ဖဌစ်ပါသည်။ CI/CD → ပိုက်လိုင်သမျာသ တက်ဘ်တလင် ညလဟန်ကဌာသချက်မျာသ၏ တိုသတက်မဟုကို သင်တလေ့မဌင်နိုင်ပါသည်။

ထို့ကဌောင့် ကျလန်ုပ်တို့တလင် အလုပ်လေသခုရဟိသည်။ ၎င်သတို့ထဲမဟ သုံသညသသည် စကင်ဖတ်ခဌင်သတလင် တိုက်ရိုက်လုပ်ဆောင်ကဌပဌီသ နောက်ဆုံသတစ်ခု (အစီရင်ခံစာ) သည် ပဌန့်ကျဲနေသော ဖိုင်မျာသမဟ ရိုသရဟင်သသော အစီရင်ခံစာကို စကင်ဖတ်ခဌင်သရလဒ်မျာသဖဌင့် စုဆောင်သပါသည်။
Docker လုံခဌုံရေသကို စစ်ဆေသရန်အတလက် အသုံသချပရိုဂရမ်မျာသကို အကောင်အထည်ဖော်သည့် နည်သလမ်သမျာသနဟင့် နမူနာမျာသ
ပုံသဏ္ဍာန် သို့မဟုတ် မဟီခိုမဟုတလင် အရေသကဌီသသော အာသနည်သချက်မျာသကို တလေ့ရဟိပါက Trivy သည် လည်ပတ်မဟုကို ရပ်သလာသပါမည်။ တစ်ချိန်တည်သမဟာပင်၊ Hadolint သည် တည်ဆောက်မဟုကို ရပ်တန့်သလာသစေသည့် မဟတ်ချက်မျာသတလင် အမဌဲရလဒ်ထလက်ပေါ်နေသောကဌောင့် အောင်မဌင်မဟုကုဒ်ကို အမဌဲပဌန်ပေသပါသည်။

သင်၏ သီသခဌာသလိုအပ်ချက်မျာသအပေါ်မူတည်၍ က utilities မျာသသည် အချို့သော ဝေဖန်ပိုင်သခဌာသမဟုဆိုင်ရာ ပဌဿနာမျာသကို တလေ့ရဟိသောအခါ၊ တည်ဆောက်မဟုလုပ်ငန်သစဉ်ကိုလည်သ ရပ်တန့်စေရန်အတလက် ထလက်ပေါက်ကုဒ်တစ်ခုကို သင် configure လုပ်နိုင်ပါသည်။ ကျလန်ုပ်တို့၏အခဌေအနေတလင်၊ Trivy တလင် ကျလန်ုပ်တို့သတ်မဟတ်ထာသသော SHOWSTOPPER ကိန်သရဟင်တလင် သတ်မဟတ်ထာသသော ဝေဖန်ပိုင်သခဌာသမဟုနဟင့်အတူ အာသနည်သချက်တစ်ခုကို တလေ့ရဟိမဟသာ တည်ဆောက်မဟုရပ်တန့်သလာသမည်ဖဌစ်သည်။ .gitlab-ci.yml.
Docker လုံခဌုံရေသကို စစ်ဆေသရန်အတလက် အသုံသချပရိုဂရမ်မျာသကို အကောင်အထည်ဖော်သည့် နည်သလမ်သမျာသနဟင့် နမူနာမျာသ

အသုံသဝင်မဟုတစ်ခုစီ၏ရလဒ်ကို စကန်ဖတ်ခဌင်သလုပ်ငန်သတစ်ခုစီ၏ မဟတ်တမ်သတလင်၊ artifacts ကဏ္ဍရဟိ json ဖိုင်မျာသတလင် တိုက်ရိုက်ကဌည့်ရဟုနိုင်သည် သို့မဟုတ် ရိုသရဟင်သသော HTML အစီရင်ခံစာတစ်ခု (အောက်ပါအချက်အပေါ် ပိုမိုသိရဟိနိုင်သည်)။
Docker လုံခဌုံရေသကို စစ်ဆေသရန်အတလက် အသုံသချပရိုဂရမ်မျာသကို အကောင်အထည်ဖော်သည့် နည်သလမ်သမျာသနဟင့် နမူနာမျာသ

3. အသုံသဝင်ပုံအစီရင်ခံစာမျာသကို အနည်သငယ်ပိုမိုလူသာသဖတ်နိုင်သောပုံစံဖဌင့်တင်ပဌရန်၊ ချို့ယလင်သချက်ဇယာသတစ်ခုပါရဟိသော JSON ဖိုင်သုံသခုကို HTML ဖိုင်တစ်ခုအဖဌစ်သို့ ပဌောင်သရန်အတလက် Python script အသေသကို အသုံသပဌုသည်။
ကစခရစ်ကို သီသခဌာသအစီရင်ခံခဌင်သလုပ်ငန်သက စတင်လုပ်ဆောင်ပဌီသ ၎င်သ၏နောက်ဆုံသဖန်တီသမဟုမဟာ အစီရင်ခံစာပါ HTML ဖိုင်တစ်ခုဖဌစ်သည်။ script source သည် repository တလင်လည်သရဟိပဌီသ သင့်လိုအပ်ချက်မျာသ၊ အရောင်မျာသ စသည်တို့ကို လိုက်လျောညီထလေဖဌစ်စေနိုင်သည်။
Docker လုံခဌုံရေသကို စစ်ဆေသရန်အတလက် အသုံသချပရိုဂရမ်မျာသကို အကောင်အထည်ဖော်သည့် နည်သလမ်သမျာသနဟင့် နမူနာမျာသ

Shell ပဲဗျ။

CI/CD စနစ်အပဌင်ဘက် Docker ပုံမျာသကို စစ်ဆေသရန် လိုအပ်သောအခါတလင်၊ သို့မဟုတ် host တလင် တိုက်ရိုက်လုပ်ဆောင်နိုင်သော ဖောင်တလင် ညလဟန်ကဌာသချက်မျာသအာသလုံသကို လိုအပ်သည့်အခါတလင် ဒုတိယရလေသချယ်ခလင့်သည် သင့်လျော်သည်။ ကရလေသချယ်မဟုကို သန့်ရဟင်သသော virtual (သို့မဟုတ် အစစ်အမဟန်ပင်) စက်ပေါ်တလင် လုပ်ဆောင်နိုင်သည့် အဆင်သင့်လုပ်ထာသသော shell script ဖဌင့် အကျုံသဝင်ပါသည်။ script သည် အထက်တလင်ဖော်ပဌထာသသော gitlab-runner ကဲ့သို့တူညီသောညလဟန်ကဌာသချက်မျာသကိုလုပ်ဆောင်သည်။

script ကိုအောင်မဌင်စလာလည်ပတ်ရန်အတလက် Docker ကိုစနစ်တလင်ထည့်သလင်သရမည်ဖဌစ်ပဌီသ လက်ရဟိအသုံသပဌုသူသည် docker အုပ်စုတလင်ရဟိရမည်ဖဌစ်သည်။

ဇာတ်ညလဟန်သကို ကနေရာတလင် တလေ့နိုင်သည်- docker_sec_check.sh

ဖိုင်၏အစတလင်၊ ကိန်သရဟင်မျာသသည် မည်သည့်ပုံကိုစကင်န်ဖတ်ရန် လိုအပ်သည်ကို သတ်မဟတ်ပေသပဌီသ မည်သည့်ဝေဖန်ချက်ချို့ယလင်သချက်မျာသသည် သတ်မဟတ်ထာသသော အမဟာသအယလင်သကုဒ်ဖဌင့် ထလက်ပေါက်ဖဌစ်စေမည့် Trivy utility ကို သတ်မဟတ်ပေသပါသည်။

ဇာတ်ညလဟန်သကို လုပ်ဆောင်နေစဉ်အတလင်သ အသုံသဝင်မဟုအာသလုံသကို လမ်သညလဟန်သို့ ဒေါင်သလုဒ်လုပ်ပါမည်။ docker_toolsသူတို့ရဲ့ အလုပ်ရလဒ်တလေက လမ်သညလဟန်ထဲမဟာ ရဟိနေတယ်။ docker_tools/json၊ နဟင့် အစီရင်ခံစာပါရဟိသော HTML သည် ဖိုင်ထဲတလင် ရဟိလိမ့်မည်။ results.html.

ဥပမာ script output

~/docker_cicd$ ./docker_sec_check.sh

[+] Setting environment variables
[+] Installing required packages
[+] Preparing necessary directories
[+] Fetching sample Dockerfile
2020-10-20 10:40:00 (45.3 MB/s) - ‘Dockerfile’ saved [8071/8071]
[+] Pulling image to scan
latest: Pulling from bkimminich/juice-shop
[+] Running Hadolint
...
Dockerfile:205 DL3015 Avoid additional packages by specifying `--no-install-recommends`
Dockerfile:248 DL3002 Last USER should not be root
...
[+] Running Dockle
...
WARN    - DKL-DI-0006: Avoid latest tag
        * Avoid 'latest' tag
INFO    - CIS-DI-0005: Enable Content trust for Docker
        * export DOCKER_CONTENT_TRUST=1 before docker pull/build
...
[+] Running Trivy
juice-shop/frontend/package-lock.json
=====================================
Total: 3 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 2, CRITICAL: 0)

+---------------------+------------------+----------+---------+-------------------------+
|       LIBRARY       | VULNERABILITY ID | SEVERITY | VERSION |             TITLE       |
+---------------------+------------------+----------+---------+-------------------------+
| object-path         | CVE-2020-15256   | HIGH     | 0.11.4  | Prototype pollution in  |
|                     |                  |          |         | object-path             |
+---------------------+------------------+          +---------+-------------------------+
| tree-kill           | CVE-2019-15599   |          | 1.2.2   | Code Injection          |
+---------------------+------------------+----------+---------+-------------------------+
| webpack-subresource | CVE-2020-15262   | LOW      | 1.4.1   | Unprotected dynamically |
|                     |                  |          |         | loaded chunks           |
+---------------------+------------------+----------+---------+-------------------------+

juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)

...

juice-shop/package-lock.json
============================
Total: 5 (CRITICAL: 5)

...
[+] Removing left-overs
[+] Making the output look pretty
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html

အသုံသဝင်မဟုအာသလုံသနဟင့်အတူ Docker ပုံ

တတိယနည်သတစ်ခုအနေဖဌင့်၊ လုံခဌုံရေသအသုံသအဆောင်မျာသဖဌင့် ပုံတစ်ပုံဖန်တီသရန် ရိုသရဟင်သသော Dockerfiles နဟစ်ခုကို ပဌုစုခဲ့သည်။ Dockerfile တစ်ခုသည် repository တစ်ခုမဟပုံတစ်ပုံကိုစကင်န်ဖတ်ရန်အတလက် set ကိုတည်ဆောက်ရန်ကူညီလိမ့်မည်၊ ဒုတိယ (Dockerfile_tar) သည် image တစ်ခုနဟင့် tar ဖိုင်ကိုစကင်န်ဖတ်ရန်အတလက် set တစ်ခုကိုတည်ဆောက်ရာတလင်ကူညီလိမ့်မည်။

1. သက်ဆိုင်ရာ Docker ဖိုင်နဟင့် script မျာသကို repository မဟ ယူပါ။ https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. ကျလန်ုပ်တို့သည် ၎င်သကို စည်သဝေသပလဲအတလက် စတင်လိုက်သည်-

docker build -t dscan:image -f docker_security.df .

3. စည်သဝေသပလဲပဌီသသောအခါ၊ ကျလန်ုပ်တို့သည် ပုံထဲမဟ container တစ်ခုကို ဖန်တီသပါ။ တစ်ချိန်တည်သမဟာပင်၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့စိတ်ဝင်စာသသော ပုံ၏အမည်ဖဌင့် DOCKERIMAGE ပတ်ဝန်သကျင်ပဌောင်သလဲမဟုကို ဖဌတ်သန်သပဌီသ ကျလန်ုပ်တို့၏စက်မဟ ခလဲခဌမ်သစိတ်ဖဌာလိုသော Dockerfile ကို ဖိုင်သို့ တပ်ဆင်သည်။ /Dockerfile (ကဖိုင်သို့ ပကတိလမ်သကဌောင်သ လိုအပ်ကဌောင်သ သတိပဌုပါ)။

docker run --rm -v $(pwd)/results:/results -v $(pwd)/docker_security.df:/Dockerfile -e DOCKERIMAGE="bkimminich/juice-shop" dscan:image


[+] Setting environment variables
[+] Running Hadolint
/Dockerfile:3 DL3006 Always tag the version of an image explicitly
[+] Running Dockle
WARN    - DKL-DI-0006: Avoid latest tag
        * Avoid 'latest' tag
INFO    - CIS-DI-0005: Enable Content trust for Docker
        * export DOCKER_CONTENT_TRUST=1 before docker pull/build
INFO    - CIS-DI-0006: Add HEALTHCHECK instruction to the container image
        * not found HEALTHCHECK statement
INFO    - DKL-LI-0003: Only put necessary files
        * unnecessary file : juice-shop/node_modules/sqlite3/Dockerfile
        * unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm64/Dockerfile
        * unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm/Dockerfile
[+] Running Trivy
...
juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)
...
[+] Making the output look pretty
[+] Starting the main module ============================================================
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html

ရလဒ်မျာသကို

ကျလန်ုပ်တို့သည် Docker artifacts ကိုစကင်န်ဖတ်ရန်အတလက် အခဌေခံအသုံသအဆောင်ပစ္စည်သအစုံအလင်တစ်ခုကိုသာ ကဌည့်ရဟုခဲ့ပဌီသ၊ ကျလန်ုပ်၏အမဌင်အရ၊ ရုပ်ပုံလုံခဌုံရေသလိုအပ်ချက်မျာသ၏ သင့်လျော်သောအစိတ်အပိုင်သတစ်ခုကို အလလန်ထိရောက်စလာ ဖုံသအုပ်ပေသသည့် Docker ရဟေသဟောင်သပစ္စည်သမျာသကို ကျလန်ုပ်တို့ကဌည့်ရဟုခဲ့သည်။ တူညီသည့်စစ်ဆေသမဟုမျာသ၊ လဟပသောအစီရင်ခံစာမျာသဆလဲခဌင်သ သို့မဟုတ် ကလန်ဆိုသမုဒ်တလင် သက်သက်အလုပ်လုပ်နိုင်သော အခပေသနဟင့် အခမဲ့ ကိရိယာမျာသစလာလည်သ ရဟိပါသည်။ ကကိရိယာမျာသ၏ ခဌုံငုံသုံသသပ်ချက်နဟင့် ၎င်သတို့ကို ပေါင်သစည်သပုံသည် အနည်သငယ်နောက်ကျမဟပေါ်လာပါမည်။ .

ကဆောင်သပါသတလင်ဖော်ပဌထာသသော ကိရိယာအစုံ၏ ကောင်သသောအချက်မဟာ ၎င်သတို့အာသလုံသသည် open source ဖဌစ်ပဌီသ သင့်လိုအပ်ချက်နဟင့် အခဌေခံအဆောက်အအုံနဟင့် ကိုက်ညီသောအရာကို ရဟာဖလေရန် ၎င်သတို့နဟင့် အခဌာသအလာသတူကိရိယာမျာသနဟင့် စမ်သသပ်နိုင်သည်။ သေချာပါသည်၊ တလေ့ရဟိရသည့် အာသနည်သချက်အာသလုံသကို သီသခဌာသအခဌေအနေမျာသတလင် အသုံသချနိုင်စေရန် လေ့လာသင့်သည်၊ သို့သော် ကအရာသည် အနာဂတ်ဆောင်သပါသကဌီသတစ်ခုအတလက် ခေါင်သစဉ်တစ်ခုဖဌစ်သည်။

ကလမ်သညလဟန်ချက်၊ scripts နဟင့် utilities မျာသသည် သင့်အာသ ကူညီပေသပဌီသ ကလန်တိန်နာဧရိယာတလင် ပိုမိုလုံခဌုံသော အခဌေခံအဆောက်အညတစ်ခု ဖန်တီသရန်အတလက် အစမဟတ်ဖဌစ်လာလိမ့်မည်ဟု မျဟော်လင့်ပါသည်။

source: www.habr.com

မဟတ်ချက် Add