ඩොකර් ආරක්ෂාව පරීක්ෂා කිරීම සඳහා උපයෝගිතා ක්රියාත්මක කිරීමේ ක්රම සහ උදාහරණ

ඩොකර් ආරක්ෂාව පරීක්ෂා කිරීම සඳහා උපයෝගිතා ක්රියාත්මක කිරීමේ ක්රම සහ උදාහරණ
හෙලෝ, හබ්ර්!

නූතන යථාර්ථයේ දී, සංවර්ධන ක්‍රියාවලීන්හි බහාලුම්කරණයේ වැඩෙන භූමිකාව හේතුවෙන්, බහාලුම් හා සම්බන්ධ විවිධ අවධීන් සහ ආයතනවල ආරක්ෂාව සහතික කිරීමේ ගැටළුව අවම වැදගත් කරුණක් නොවේ. අතින් චෙක්පත් සිදු කිරීම කාලය ගත වන බැවින් මෙම ක්‍රියාවලිය ස්වයංක්‍රීය කිරීම සඳහා අවම වශයෙන් මූලික පියවර ගැනීම හොඳ අදහසකි.

මෙම ලිපියෙන්, මම ඩොකර් ආරක්ෂණ උපයෝගිතා කිහිපයක් ක්‍රියාත්මක කිරීම සඳහා සූදානම් කළ ස්ක්‍රිප්ට් සහ මෙම ක්‍රියාවලිය පරීක්ෂා කිරීම සඳහා කුඩා ආදර්ශන ස්ථාවරයක් යෙදවිය යුතු ආකාරය පිළිබඳ උපදෙස් බෙදා ගන්නෙමි. Dockerfile පින්තූර සහ උපදෙස් වල ආරක්ෂාව පරීක්ෂා කිරීමේ ක්‍රියාවලිය සංවිධානය කරන්නේ කෙසේද යන්න පිළිබඳව අත්හදා බැලීමට ඔබට ද්‍රව්‍ය භාවිතා කළ හැකිය. සෑම කෙනෙකුගේම සංවර්ධනය සහ ක්‍රියාත්මක කිරීමේ යටිතල පහසුකම් වෙනස් බව පැහැදිලිය, එබැවින් පහත මම හැකි විකල්ප කිහිපයක් ලබා දෙන්නෙමි.

ආරක්ෂක පිරික්සුම් උපයෝගිතා

ඩොකර් යටිතල ව්‍යුහයේ විවිධ පැතිවල චෙක්පත් සිදු කරන විවිධ උපකාරක යෙදුම් සහ ස්ක්‍රිප්ට් විශාල සංඛ්‍යාවක් ඇත. ඒවායින් සමහරක් දැනටමත් පෙර ලිපියේ විස්තර කර ඇත (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), සහ මෙම ද්‍රව්‍යය තුළ මම ඒවායින් තුනක් කෙරෙහි අවධානය යොමු කිරීමට කැමැත්තෙමි, එය සංවර්ධන ක්‍රියාවලියේදී ගොඩනඟන ලද ඩොකර් රූප සඳහා ආරක්ෂක අවශ්‍යතාවලින් වැඩි ප්‍රමාණයක් ආවරණය කරයි. මීට අමතරව, ආරක්ෂක පරීක්ෂාවන් සිදු කිරීම සඳහා මෙම උපයෝගිතා තුන එක් නල මාර්ගයකට සම්බන්ධ කළ හැකි ආකාරය පිළිබඳ උදාහරණයක් ද මම පෙන්වන්නම්.

හැඩොලින්ට්
https://github.com/hadolint/hadolint

පළමු ආසන්න වශයෙන්, Dockerfile උපදෙස්වල නිරවද්‍යතාවය සහ ආරක්ෂාව ඇගයීමට උපකාරී වන තරමක් සරල කොන්සෝල උපයෝගීතාවයක් (උදාහරණයක් ලෙස, බලයලත් රූප සටහන් පමණක් භාවිතා කිරීම හෝ sudo භාවිතා කිරීම).

ඩොකර් ආරක්ෂාව පරීක්ෂා කිරීම සඳහා උපයෝගිතා ක්රියාත්මක කිරීමේ ක්රම සහ උදාහරණ

ඩොකල්
https://github.com/goodwithtech/dockle

රූපයක් සමඟ ක්‍රියා කරන (හෝ රූපයක සුරකින ලද තාර ලේඛනාගාරයක් සමඟ) ක්‍රියා කරන කොන්සෝල උපයෝගීතාවයකි, එය යම් රූපයක නිරවද්‍යතාවය සහ ආරක්ෂාව පරීක්ෂා කරයි, එහි ස්ථර සහ වින්‍යාසය විශ්ලේෂණය කරයි - කුමන පරිශීලකයින් නිර්මාණය කර ඇත්ද, කුමන උපදෙස් භාවිතා කරන්නේද, වෙළුම් සවි කර ඇත, හිස් මුරපදයක් තිබීම යනාදිය. d. මෙතෙක් චෙක්පත් ගණන ඉතා විශාල නොවන අතර අපගේම චෙක්පත් සහ නිර්දේශ කිහිපයක් මත පදනම් වේ CIS (අන්තර්ජාල ආරක්ෂණ මධ්‍යස්ථානය) මිණුම් ලකුණ ඩොකර් සඳහා.
ඩොකර් ආරක්ෂාව පරීක්ෂා කිරීම සඳහා උපයෝගිතා ක්රියාත්මක කිරීමේ ක්රම සහ උදාහරණ

ට්රයිවි
https://github.com/aquasecurity/trivy

මෙම උපයෝගිතාව ඉලක්ක කර ඇත්තේ දුර්වලතා වර්ග දෙකක් සොයා ගැනීමයි - OS ගොඩනැගීමේ ගැටළු (Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu) සහ පරායත්තතා සමඟ ගැටලු (Gemfile.lock, Pipfile.lock, composer.lock, පැකේජය. -lock.json , yarn.lock, cargo.lock). Trivy හට ගබඩාවේ ඇති රූපයක් සහ දේශීය රූපයක් යන දෙකම පරිලෝකනය කළ හැකි අතර, ඩොකර් රූපය සමඟින් මාරු කළ .tar ගොනුව මත පදනම්ව පරිලෝකනය කළ හැක.

ඩොකර් ආරක්ෂාව පරීක්ෂා කිරීම සඳහා උපයෝගිතා ක්රියාත්මක කිරීමේ ක්රම සහ උදාහරණ

උපයෝගිතා ක්රියාත්මක කිරීම සඳහා විකල්ප

විස්තර කරන ලද යෙදුම් හුදකලා පරිසරයක උත්සාහ කිරීම සඳහා, තරමක් සරල කළ ක්‍රියාවලියක් තුළ සියලුම උපයෝගිතා ස්ථාපනය කිරීම සඳහා උපදෙස් ලබා දෙන්නෙමි.

ප්‍රධාන අදහස වන්නේ සංවර්ධනය අතරතුර නිර්මාණය කරන ලද ඩොකර්ෆයිල්ස් සහ ඩොකර් රූපවල ස්වයංක්‍රීය අන්තර්ගත සත්‍යාපනය ක්‍රියාත්මක කළ හැකි ආකාරය නිරූපණය කිරීමයි.

චෙක්පතම පහත පියවර වලින් සමන්විත වේ:

  1. ලින්ටර් උපයෝගිතා භාවිතයෙන් Dockerfile උපදෙස් වල නිවැරදිභාවය සහ ආරක්ෂාව පරීක්ෂා කිරීම හැඩොලින්ට්
  2. උපයෝගිතා භාවිතයෙන් අවසාන සහ අතරමැදි රූපවල නිවැරදිභාවය සහ ආරක්ෂාව පරීක්ෂා කිරීම ඩොකල්
  3. මූලික රූපයේ ප්‍රසිද්ධියේ දන්නා දුර්වලතා (CVE) සහ පරායත්තතා ගණනාවක් තිබේදැයි පරීක්ෂා කිරීම - උපයෝගීතාව භාවිතා කිරීම ට්රයිවි

ලිපියේ පසුව මම මෙම පියවරයන් ක්රියාත්මක කිරීම සඳහා විකල්ප තුනක් ලබා දෙන්නෙමි:
පළමුවැන්න නම්, උදාහරණයක් ලෙස GitLab භාවිතා කරමින් CI/CD නල මාර්ගය වින්‍යාස කිරීම (පරීක්ෂණ අවස්ථාවක් ඉහළ නැංවීමේ ක්‍රියාවලිය පිළිබඳ විස්තරයක් සමඟ).
දෙවැන්න shell script එකක් භාවිතා කිරීමයි.
තුන්වන එක ඩොකර් රූප පරිලෝකනය කිරීම සඳහා ඩොකර් රූපයක් තැනීම ඇතුළත් වේ.
ඔබට වඩාත් ගැලපෙන විකල්පය තෝරා ගත හැකිය, එය ඔබගේ යටිතල පහසුකම් වෙත මාරු කර ඔබගේ අවශ්යතා සඳහා එය අනුගත කරන්න.

අවශ්‍ය සියලුම ලිපිගොනු සහ අමතර උපදෙස් ද ගබඩාවේ පිහිටා ඇත: https://github.com/Swordfish-Security/docker_cicd

GitLab CI/CD වෙත ඒකාබද්ධ කිරීම

පළමු විකල්පය තුළ, උදාහරණයක් ලෙස GitLab ගබඩා පද්ධතිය භාවිතයෙන් ඔබට ආරක්‍ෂක චෙක්පත් ක්‍රියාත්මක කරන්නේ කෙසේදැයි අපි බලමු. මෙන්න අපි පියවර හරහා ගොස් GitLab සමඟ මුල සිටම පරීක්ෂණ පරිසරයක් ස්ථාපනය කරන්නේ කෙසේද, ස්කෑනිං ක්‍රියාවලියක් නිර්මාණය කරන්නේ කෙසේද සහ පරීක්ෂණ Dockerfile සහ අහඹු රූපයක් පරීක්ෂා කිරීම සඳහා උපයෝගිතා දියත් කරන්නේ කෙසේද - JuiceShop යෙදුම.

GitLab ස්ථාපනය කිරීම
1. Docker ස්ථාපනය කරන්න:

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

2. වත්මන් පරිශීලකයා docker කණ්ඩායමට එක් කරන්න එවිට ඔබට sudo භාවිතා නොකර docker සමඟ වැඩ කළ හැක:

sudo addgroup <username> docker

3. ඔබගේ IP සොයන්න:

ip addr

4. කන්ටේනරය තුළ GitLab ස්ථාපනය කර දියත් කරන්න, සත්කාරක නාමයේ ඇති 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 විවෘත කර root පරිශීලකයා සඳහා මුරපදය වෙනස් කිරීමට ඔබෙන් ඉල්ලා සිටින පිටුවක් බලන්න:
ඩොකර් ආරක්ෂාව පරීක්ෂා කිරීම සඳහා උපයෝගිතා ක්රියාත්මක කිරීමේ ක්රම සහ උදාහරණ
නව මුරපදයක් සකසා GitLab වෙත යන්න.

6. නව ව්‍යාපෘතියක් සාදන්න, උදාහරණයක් ලෙස cicd-test සහ එය ආරම්භක ගොනුව සමඟ ආරම්භ කරන්න README.md:
ඩොකර් ආරක්ෂාව පරීක්ෂා කිරීම සඳහා උපයෝගිතා ක්රියාත්මක කිරීමේ ක්රම සහ උදාහරණ
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. ධාවකය සඳහා 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 අවස්ථාව සමඟ අන්තර් ක්‍රියා කළ හැකිය.
මෙය සිදු කිරීම සඳහා, Settings-CI/CD පිටුව විවෘත කරන්න (http://OUR_IP_ADDRESS/root/cicd-test/-/settings/ci_cd) සහ Runners පටිත්තෙහි URL සහ ලියාපදිංචි ටෝකනය සොයා ගන්න:
ඩොකර් ආරක්ෂාව පරීක්ෂා කිරීම සඳහා උපයෝගිතා ක්රියාත්මක කිරීමේ ක්රම සහ උදාහරණ
11. URL සහ ලියාපදිංචි ටෝකනය ආදේශ කිරීම මගින් ධාවකය ලියාපදිංචි කරන්න:

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"

එහි ප්‍රතිඵලයක් වශයෙන්, අපි සූදානම්ව වැඩ කරන GitLab එකක් ලබා ගනිමු, එයට අපගේ උපයෝගිතා ආරම්භ කිරීමට උපදෙස් එකතු කළ යුතුය. මෙම demo තුළ අපට යෙදුම ගොඩනඟා එය බහාලුම් කිරීමට පියවර නැත, නමුත් සැබෑ පරිසරයකදී මේවා ස්කෑන් කිරීමේ පියවරයන්ට පෙරාතුව සහ විශ්ලේෂණය සඳහා රූප සහ ඩොකර්ෆයිල් ජනනය කරයි.

නල මාර්ග වින්යාසය

1. ගබඩාවට ගොනු එක් කරන්න mydockerfile.df (මෙය අපි පරීක්ෂා කරන පරීක්ෂණ Dockerfile) සහ GitLab CI/CD ක්‍රියාවලි වින්‍යාස ගොනුව .gitlab-cicd.yml, ස්කෑනර් සඳහා උපදෙස් ලැයිස්තුගත කරයි (ගොනු නාමයේ තිත සටහන් කරන්න).

YAML වින්‍යාස ගොනුවේ තෝරාගත් Dockerfile සහ DOCKERFILE විචල්‍යයේ දක්වා ඇති රූපය විශ්ලේෂණය කරන උපයෝගිතා තුනක් (Hadolint, Dockle, සහ Trivy) ධාවනය කිරීමට උපදෙස් අඩංගු වේ. අවශ්‍ය සියලුම ගොනු ගබඩාවෙන් ලබාගත හැක: https://github.com/Swordfish-Security/docker_cicd/

උපුටා ගැනීමකි mydockerfile.df (මෙය උපයෝගීතාවයේ ක්‍රියාකාරිත්වය ප්‍රදර්ශනය කිරීම සඳහා පමණක් අත්තනෝමතික උපදෙස් මාලාවක් සහිත වියුක්ත ගොනුවකි). ගොනුවට සෘජු සබැඳිය: 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 සංරක්ෂිතයක් ආකාරයෙන් පරිලෝකනය කළ හැකිය (කෙසේ වෙතත්, ඔබට YAML ගොනුවේ උපයෝගිතා සඳහා ආදාන පරාමිති වෙනස් කිරීමට අවශ්‍ය වනු ඇත)

සැ.යු: Trivy ස්ථාපනය කිරීම අවශ්‍යයි rpm වේ и යන්න. එසේ නොමැතිනම්, එය RedHat මත පදනම් වූ පින්තූර පරිලෝකනය කිරීමේදී සහ අවදානම් දත්ත ගබඩාවට යාවත්කාලීන කිරීම් ලබා ගැනීමේදී දෝෂ ඇති කරයි.

2. නිධියට ගොනු එකතු කිරීමෙන් පසු, අපගේ වින්‍යාස ගොනුවේ උපදෙස් අනුව, GitLab ස්වයංක්‍රීයව ගොඩනැගීම සහ ස්කෑන් ක්‍රියාවලිය ආරම්භ කරයි. CI/CD → Pipelines ටැබය මත ඔබට උපදෙස් වල ප්‍රගතිය දැකිය හැක.

එහි ප්රතිඵලයක් වශයෙන්, අපට කාර්යයන් හතරක් ඇත. ඒවායින් තුනක් ස්කෑන් කිරීම සමඟ සෘජුව කටයුතු කරන අතර, අවසාන එක (වාර්තාව) ස්කෑනිං ප්‍රතිඵල සහිත විසිරුණු ගොනු වලින් සරල වාර්තාවක් රැස් කරයි.
ඩොකර් ආරක්ෂාව පරීක්ෂා කිරීම සඳහා උපයෝගිතා ක්රියාත්මක කිරීමේ ක්රම සහ උදාහරණ
පෙරනිමියෙන්, රූපයේ හෝ පරායත්තතාවල විවේචනාත්මක දුර්වලතා අනාවරණය වුවහොත් Trivy ධාවනය නතර කරයි. ඒ අතරම, Hadolint සෑම විටම සාර්ථක කේතයක් ලබා දෙයි, මන්ද එය සැමවිටම අදහස් දැක්වීමට හේතු වන අතර එමඟින් ගොඩනැගීම නතර වේ.

ඔබේ නිශ්චිත අවශ්‍යතා මත පදනම්ව, ඔබට පිටවීමේ කේතයක් වින්‍යාසගත කළ හැකි අතර එමඟින් මෙම උපයෝගිතා යම් විවේචනාත්මක ගැටළු හඳුනා ගන්නා විට, ඒවා ගොඩනැගීමේ ක්‍රියාවලිය ද නවත්වයි. අපගේ නඩුවේදී, SHOWSTOPPER විචල්‍යයේ අප සඳහන් කළ විවේචනාත්මකභාවය සමඟ Trivy අවදානමක් හඳුනා ගන්නේ නම් පමණක් ගොඩනැගීම නතර වේ. .gitlab-ci.yml.
ඩොකර් ආරක්ෂාව පරීක්ෂා කිරීම සඳහා උපයෝගිතා ක්රියාත්මක කිරීමේ ක්රම සහ උදාහරණ

එක් එක් උපයෝගිතා වල ප්‍රතිඵලය එක් එක් ස්කෑනිං කාර්යයේ ලොගයේ, කෞතුක වස්තු කොටසේ json ගොනුවල හෝ සරල HTML වාර්තාවකින් (පහත ඒ ගැන වැඩි විස්තර) බැලිය හැක.
ඩොකර් ආරක්ෂාව පරීක්ෂා කිරීම සඳහා උපයෝගිතා ක්රියාත්මක කිරීමේ ක්රම සහ උදාහරණ

3. උපයෝගිතා වාර්තා තරමක් මිනිසුන්ට කියවිය හැකි ආකාරයෙන් ඉදිරිපත් කිරීම සඳහා, JSON ගොනු තුනක් දෝෂ සහිත වගුවක් සහිත එක් HTML ගොනුවක් බවට පරිවර්තනය කිරීමට කුඩා Python ස්ක්‍රිප්ට් එකක් භාවිතා කරයි.
මෙම ස්ක්‍රිප්ට් එක වෙනම වාර්තා කාර්යයක් මගින් දියත් කර ඇති අතර, එහි අවසාන කෞතුක වස්තුව වාර්තාවක් සහිත HTML ගොනුවකි. ස්ක්‍රිප්ට් මූලාශ්‍රය ද ගබඩාවේ ඇති අතර ඔබේ අවශ්‍යතා, වර්ණ ආදියට ගැලපෙන පරිදි සකස් කළ හැක.
ඩොකර් ආරක්ෂාව පරීක්ෂා කිරීම සඳහා උපයෝගිතා ක්රියාත්මක කිරීමේ ක්රම සහ උදාහරණ

Shell පිටපත

දෙවන විකල්පය ඔබට CI/CD පද්ධතියෙන් පිටත ඩොකර් රූප පරීක්ෂා කිරීමට අවශ්‍ය වූ අවස්ථා සඳහා සුදුසු වේ, නැතහොත් ඔබට ධාරකය මත කෙලින්ම ක්‍රියාත්මක කළ හැකි පෝරමයක සියලු උපදෙස් තිබිය යුතුය. මෙම විකල්පය පිරිසිදු අථත්‍ය (හෝ සැබෑ) යන්ත්‍රයක් මත ධාවනය කළ හැකි සූදානම් කළ ෂෙල් ස්ක්‍රිප්ට් එකකින් ආවරණය කර ඇත. ස්ක්‍රිප්ට් එක ඉහත විස්තර කර ඇති gitlab-runner ගේ උපදෙස්ම ක්‍රියාත්මක කරයි.

ස්ක්‍රිප්ට් එක සාර්ථකව ක්‍රියාත්මක වීමට නම්, පද්ධතිය මත ඩොකර් ස්ථාපනය කර තිබිය යුතු අතර වත්මන් පරිශීලකයා ඩොකර් සමූහයේ සිටිය යුතුය.

ස්ක්‍රිප්ට් එක මෙතැනින් සොයා ගත හැක: docker_sec_check.sh

ගොනුවේ ආරම්භයේදී, විචල්‍යයන් මඟින් ස්කෑන් කළ යුත්තේ කුමන රූපයද යන්න සහ නිශ්චිත දෝෂ කේතය සමඟ Trivy උපයෝගීතාව පිටවීමට හේතු වන විවේචනාත්මක දෝෂයන් සඳහන් කරයි.

ස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීමේදී, සියලුම උපයෝගිතා නාමාවලියට බාගනු ලැබේ docker_tools, ඔවුන්ගේ කාර්යයේ ප්රතිඵල නාමාවලියෙහි ඇත docker_tools/json, සහ වාර්තාව සහිත HTML ගොනුවෙහි ඇත results.html.

උදාහරණ ස්ක්‍රිප්ට් ප්‍රතිදානය

~/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

සියලුම උපයෝගිතා සහිත ඩොකර් රූපය

තෙවන විකල්පය ලෙස, මම ආරක්ෂිත උපයෝගිතා සහිත රූපයක් නිර්මාණය කිරීම සඳහා සරල Dockerfiles දෙකක් සම්පාදනය කළෙමි. එක් Dockerfile එකක් ගබඩාවකින් රූපයක් පරිලෝකනය කිරීම සඳහා කට්ටලයක් තැනීමට උපකාරී වනු ඇත, දෙවැන්න (Dockerfile_tar) රූපයක් සහිත තාර ගොනුවක් පරිලෝකනය කිරීම සඳහා කට්ටලයක් තැනීමට උපකාරී වේ.

1. අදාල Docker ගොනුව සහ ස්ක්‍රිප්ට් ගබඩාවෙන් ගන්න https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. අපි එය එකලස් කිරීම සඳහා දියත් කරමු:

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

3. එකලස් කිරීම අවසන් වූ පසු, අපි රූපයෙන් කන්ටේනරයක් සාදන්නෙමු. ඒ සමඟම, අපි කැමති රූපයේ නම සහිත DOCKERIMAGE පරිසර විචල්‍යය සමත් කර අපගේ යන්ත්‍රයේ සිට ගොනුවට විශ්ලේෂණය කිරීමට අවශ්‍ය 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

ප්රතිඵල

අපි ඩොකර් කෞතුක වස්තු පරිලෝකනය කිරීම සඳහා එක් මූලික උපයෝගිතා කට්ටලයක් පමණක් දෙස බැලුවෙමු, එය මගේ මතය අනුව, රූප ආරක්ෂණ අවශ්‍යතාවයන්ගෙන් යහපත් කොටසක් ඉතා ඵලදායී ලෙස ආවරණය කරයි. එකම චෙක්පත් සිදු කළ හැකි, අලංකාර වාර්තා ඇඳීමට හෝ තනිකරම කොන්සෝල ආකාරයෙන් ක්‍රියා කළ හැකි, බහාලුම් කළමනාකරණ පද්ධති ආවරණය කළ හැකි ගෙවීම් සහ නොමිලේ මෙවලම් විශාල ප්‍රමාණයක් ඇත. මෙම මෙවලම් පිළිබඳ දළ විශ්ලේෂණයක් සහ ඒවා ඒකාබද්ධ කරන්නේ කෙසේද යන්න ටික වේලාවකට පසුව දිස්වනු ඇත. .

මෙම ලිපියේ විස්තර කර ඇති මෙවලම් කට්ටලයේ හොඳ දෙය නම් ඒවා සියල්ලම විවෘත මූලාශ්‍ර වන අතර ඔබට ඒවා සහ වෙනත් සමාන මෙවලම් සමඟ ඔබේ අවශ්‍යතා සහ යටිතල ව්‍යුහයට ගැලපෙන දේ සොයා ගැනීමට අත්හදා බැලිය හැකිය. ඇත්ත වශයෙන්ම, සොයාගත් සියලුම දුර්වලතා නිශ්චිත කොන්දේසි වල යෙදීම සඳහා අධ්‍යයනය කළ යුතුය, නමුත් මෙය අනාගත විශාල ලිපියක් සඳහා මාතෘකාවකි.

මෙම මාර්ගෝපදේශය, ස්ක්‍රිප්ට් සහ උපයෝගිතා ඔබට උපකාර වන අතර බහාලුම් ප්‍රදේශයේ වඩාත් ආරක්ෂිත යටිතල පහසුකම් නිර්මාණය කිරීමේ ආරම්භක ලක්ෂ්‍යයක් වනු ඇතැයි මම බලාපොරොත්තු වෙමි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න