የዶከር ደህንነት ፍተሻ መገልገያዎችን የመተግበር ዘዴዎች እና ምሳሌዎች

የዶከር ደህንነት ፍተሻ መገልገያዎችን የመተግበር ዘዴዎች እና ምሳሌዎች
ሃይ ሀብር!

ዛሬ ባለው ተጨባጭ ሁኔታ በልማት ሂደቶች ውስጥ የመያዣነት ሚና እየጨመረ በመምጣቱ የተለያዩ ደረጃዎችን እና ከኮንቴይነሮች ጋር የተያያዙ አካላትን ደህንነት የማረጋገጥ ጉዳይ በመጨረሻው ደረጃ ላይ አይደለም. ቼኮችን በእጅ ማካሄድ አድካሚ ስራ ነው፣ ስለዚህ ይህንን ሂደት ወደ አውቶማቲክ ለማድረግ ቢያንስ የመጀመሪያ እርምጃዎችን መውሰድ ጥሩ ይሆናል።

በዚህ ጽሑፍ ውስጥ ፣ ይህንን ሂደት ለመፈተሽ ብዙ የዶከር ደህንነት መገልገያዎችን እና መመሪያዎችን ለመተግበር ዝግጁ የሆኑ ስክሪፕቶችን እናጋራለሁ ። የ Dockerfile ምስሎችን እና መመሪያዎችን ደህንነትን የመሞከር ሂደትን እንዴት ማደራጀት እንደሚቻል ለመሞከር ቁሳቁሶችን መጠቀም ይችላሉ። የልማት እና የትግበራ መሠረተ ልማት ለሁሉም ሰው የተለየ እንደሆነ ግልጽ ነው, ስለዚህ ከዚህ በታች በርካታ አማራጮችን እሰጣለሁ.

የደህንነት ፍተሻ መገልገያዎች

በተለያዩ የዶከር መሠረተ ልማት ጉዳዮች ላይ ፍተሻዎችን የሚያካሂዱ ብዙ ቁጥር ያላቸው የተለያዩ አጋዥ መተግበሪያዎች እና ስክሪፕቶች አሉ። አንዳንዶቹ በቀድሞው ጽሑፍ ውስጥ ተገልጸዋል (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), እና በዚህ ጽሑፍ ውስጥ በሦስቱ ላይ ማተኮር እፈልጋለሁ, ይህም በእድገት ሂደት ውስጥ የተገነቡትን ለዶከር ምስሎች የደህንነት መስፈርቶችን የሚሸፍኑ ናቸው. በተጨማሪም፣ የደህንነት ፍተሻዎችን ለማከናወን እነዚህ ሶስት መገልገያዎች ወደ አንድ የቧንቧ መስመር እንዴት እንደሚዋሃዱ የሚያሳይ ምሳሌ አሳይሻለሁ።

ሃዶሊንት
https://github.com/hadolint/hadolint

በመጀመሪያ የ Dockerfile መመሪያዎችን ትክክለኛነት እና ደህንነት ለመገምገም የሚረዳ በጣም ቀላል የኮንሶል መገልገያ (ለምሳሌ የተፈቀዱ የምስል መዝገብ ቤቶችን ብቻ ወይም ሱዶን በመጠቀም)።

የዶከር ደህንነት ፍተሻ መገልገያዎችን የመተግበር ዘዴዎች እና ምሳሌዎች

ዶክል
https://github.com/goodwithtech/dockle

የኮንሶል መገልገያ በምስሉ ላይ የሚሰራ (ወይም በተቀመጠው የታርቦል ምስል ላይ) የአንድን የተወሰነ ምስል ትክክለኛነት እና ደህንነት የሚፈትሽ ንብርብሩን እና አወቃቀሩን በመተንተን - ተጠቃሚዎች ምን እንደተፈጠሩ ፣ ምን አይነት መመሪያዎች ጥቅም ላይ እንደሚውሉ ፣ ምን ጥራዞች እንደተጫኑ , ባዶ የይለፍ ቃል መኖሩ, ወዘተ. ሠ. የቼኮች ብዛት በጣም ትልቅ ባይሆንም እና በበርካታ ቼኮች እና ምክሮች ላይ የተመሰረተ ነው. CIS (የበይነመረብ ደህንነት ማዕከል) ቤንችማርክ ለዶከር.
የዶከር ደህንነት ፍተሻ መገልገያዎችን የመተግበር ዘዴዎች እና ምሳሌዎች

ትሪቪ
https://github.com/aquasecurity/trivy

ይህ መገልገያ ሁለት አይነት ተጋላጭነቶችን ለማግኘት ያለመ ነው - የስርዓተ ክወና ግንባታ ችግሮች (አልፓይን ፣ ሬድሃት (ኤል) ፣ ሴንትኦኤስ ፣ ዴቢያን ጂኤንዩ ፣ ኡቡንቱ ይደገፋሉ) እና የጥገኝነት ችግሮች (Gemfile.lock ፣ Pipfile.lock ፣ composer.lock ፣ pack-lock) .json፣ yarn.lock፣ Cargo.lock)። ትሪቪ በማከማቻው ውስጥ ያለውን ምስል እና የአካባቢውን ምስል መቃኘት እና እንዲሁም በተላለፈው የ.ታር ፋይል ላይ በመመስረት በ Docker ምስል መቃኘት ይችላል።

የዶከር ደህንነት ፍተሻ መገልገያዎችን የመተግበር ዘዴዎች እና ምሳሌዎች

መገልገያዎች ትግበራ አማራጮች

በገለልተኛ ሁኔታዎች ውስጥ የተገለጹትን አፕሊኬሽኖች ለመሞከር, ሁሉንም መገልገያዎችን እንደ ቀላል ሂደት አካል ለመጫን መመሪያዎችን እሰጣለሁ.

ዋናው ሃሳብ በእድገት ጊዜ የሚፈጠሩትን Dockerfiles እና Docker ምስሎችን በራስ ሰር የይዘት ፍተሻ እንዴት መተግበር እንደሚችሉ ማሳየት ነው።

ማረጋገጫው ራሱ የሚከተሉትን ደረጃዎች ያካትታል:

  1. የ Dockerfile መመሪያዎችን ትክክለኛነት እና ደህንነት በሊንተር መገልገያ ማረጋገጥ ሃዶሊንት
  2. የመጨረሻውን እና መካከለኛ ምስሎችን ትክክለኛነት እና ደህንነት ማረጋገጥ - መገልገያ ዶክል
  3. በመሠረታዊ ምስል ውስጥ የተለመዱ የታወቁ ተጋላጭነቶችን (CVE) ማረጋገጥ እና በርካታ ጥገኛዎች - በመገልገያው ትሪቪ

በኋላ ላይ በጽሁፉ ውስጥ እነዚህን እርምጃዎች ለመተግበር ሶስት አማራጮችን እሰጣለሁ-
የመጀመሪያው የጊትላብ ምሳሌን በመጠቀም የ CI / ሲዲ ቧንቧን በማዋቀር ነው (የሙከራ ምሳሌን የማሳደግ ሂደት መግለጫ)።
ሁለተኛው የሼል ስክሪፕት በመጠቀም ነው.
ሦስተኛው Docker ምስሎችን ለመቃኘት Docker ምስል በመገንባት ነው።
ለእርስዎ የሚስማማውን አማራጭ መምረጥ, ወደ መሠረተ ልማት ያስተላልፉ እና ከፍላጎትዎ ጋር ማመቻቸት ይችላሉ.

ሁሉም አስፈላጊ ፋይሎች እና ተጨማሪ መመሪያዎች እንዲሁ በማጠራቀሚያው ውስጥ ይገኛሉ፡- https://github.com/Swordfish-Security/docker_cicd

GitLab CI/ሲዲ ውህደት

በመጀመሪያው አማራጭ የ GitLab ማከማቻ ስርዓትን እንደ ምሳሌ በመጠቀም የደህንነት ፍተሻዎችን እንዴት ተግባራዊ ማድረግ እንደሚቻል እንመለከታለን። እዚህ በደረጃዎቹ ውስጥ እናልፋለን እና እንዴት የሙከራ አካባቢን በ GitLab ከባዶ ማዋቀር እንደሚቻል ፣የፍተሻ ሂደትን እንፈጥራለን እና የሙከራ Dockerfileን እና የዘፈቀደ ምስልን ለመፈተሽ መገልገያዎችን እናያለን - የጁስሾፕ መተግበሪያ።

GitLabን በመጫን ላይ
1. ዶከርን ጫን

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

2. ሱዶ ሳይጠቀሙ ከዶከር ጋር መስራት እንዲችሉ የአሁኑን ተጠቃሚ ወደ መክተቻው ቡድን ይጨምሩ።

sudo addgroup <username> docker

3. የእርስዎን አይፒ ያግኙ፡-

ip addr

4. GitLabን በመያዣው ውስጥ ይጫኑ እና ያሂዱ፣ የአይፒ አድራሻውን በአስተናጋጅ ስም በራስዎ ይቀይሩት፡-

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. የአከባቢዎን አይፒ በአሳሹ ውስጥ ይክፈቱ እና ለስር ተጠቃሚው የይለፍ ቃል ለመቀየር የሚያቀርበውን ገጽ ይመልከቱ።
የዶከር ደህንነት ፍተሻ መገልገያዎችን የመተግበር ዘዴዎች እና ምሳሌዎች
አዲስ የይለፍ ቃል ያዘጋጁ እና ወደ GitLab ይሂዱ።

6. አዲስ ፕሮጀክት ይፍጠሩ ለምሳሌ cicd-test እና በመነሻ ፋይል ያስጀምሩት። README.md:
የዶከር ደህንነት ፍተሻ መገልገያዎችን የመተግበር ዘዴዎች እና ምሳሌዎች
7. አሁን GitLab Runner: በጥያቄ ላይ ሁሉንም አስፈላጊ ስራዎች የሚያከናውን ወኪል መጫን አለብን.
የቅርብ ጊዜውን ስሪት ያውርዱ (በዚህ አጋጣሚ በሊኑክስ 64-ቢት ስር)

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. ለሯጩ የስርዓተ ክወና ተጠቃሚ ያክሉ እና አገልግሎቱን ይጀምሩ፡-

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) እና በሩነሮች ትር ላይ URL እና የምዝገባ ማስመሰያ ያግኙ፡-
የዶከር ደህንነት ፍተሻ መገልገያዎችን የመተግበር ዘዴዎች እና ምሳሌዎች
11. ዩአርኤሉን እና የምዝገባ ማስመሰያውን በመተካት ሯጩን ያስመዝግቡ፡-

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 እናገኛለን, በዚህ ውስጥ መገልገያዎቻችንን ለመጀመር መመሪያዎችን ማከል ያስፈልገናል. በዚህ ማሳያ ውስጥ፣ የመተግበሪያ ግንባታ እና ኮንቴይነላይዜሽን ደረጃዎች የሉንም፣ ነገር ግን በእውነተኛ አካባቢ እነሱ የፍተሻ ደረጃዎችን ይቀድማሉ እና ምስሎችን እና ለመተንተን Dockerfile ያመነጫሉ።

የቧንቧ መስመር ውቅር

1. ፋይሎችን ወደ ማከማቻው አክል mydockerfile.df (ይህ የምንፈትነው የዶክተር ፋይል ሙከራ ነው) እና የ GitLab CI/CD ሂደት ውቅር ፋይል .gitlab-cicd.yml, ይህም ለቃኚዎች መመሪያዎችን ይዘረዝራል (በፋይል ስም ውስጥ ያለውን ነጥብ ያስተውሉ).

የ.yaml ማዋቀር ፋይሉ የተመረጠውን ዶከርፋይል እና በ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 ፋይል ውስጥ ያሉትን የመገልገያ መለኪያዎችን መለወጥ ያስፈልግዎታል)

ማሳሰቢያ፡ ትሪቪ መጫን ያስፈልገዋል ሪች и ሂድ. አለበለዚያ በ RedHat ላይ የተመሰረቱ ምስሎችን ሲቃኝ እና የተጋላጭነት ዳታቤዝ ዝመናዎችን ሲያገኝ ስህተቶችን ይፈጥራል።

2. ፋይሎቹን ወደ ማከማቻው ካከሉ በኋላ, በእኛ የማዋቀሪያ ፋይል ውስጥ ባለው መመሪያ መሰረት, GitLab በራስ-ሰር የግንባታ እና የፍተሻ ሂደቱን ይጀምራል. በ CI / ሲዲ → የቧንቧ መስመሮች ትሩ ላይ, የመመሪያውን ሂደት ማየት ይችላሉ.

በውጤቱም, አራት ተግባራት አሉን. ከእነዚህ ውስጥ ሦስቱ በቀጥታ በመቃኘት ውስጥ የተሳተፉ ናቸው, እና የመጨረሻው (ሪፖርት) ከተበተኑ ፋይሎች የፍተሻ ውጤቶች ጋር ቀለል ያለ ዘገባ ይሰበስባል.
የዶከር ደህንነት ፍተሻ መገልገያዎችን የመተግበር ዘዴዎች እና ምሳሌዎች
በነባሪነት ትራይቪ በምስሉ ላይ ወሳኝ የሆኑ ተጋላጭነቶች ከተገኙ አፈፃፀሙን ያቆማል። በተመሳሳይ ጊዜ ሃዶሊንት ሁል ጊዜ በአፈፃፀሙ ኮድ ውስጥ ስኬትን ይመልሳል ፣ ምክንያቱም አፈፃፀሙ ሁል ጊዜ አስተያየቶች ስላሉት ግንባታው እንዲቆም ያደርገዋል።

በእርስዎ ልዩ መስፈርቶች ላይ በመመስረት እነዚህ መገልገያዎች የአንድ የተወሰነ ወሳኝ ችግሮች ሲገኙ የግንባታ ሂደቱን እንዲያቆሙ የመውጫ ኮድ ማዋቀር ይችላሉ። በእኛ ሁኔታ ፣ግንባታው የሚቆመው ትሪቪ በ SHOWSTOPPER ተለዋዋጭ ውስጥ ከገለጽነው ከባድነት ጋር ተጋላጭነትን ካወቀ ብቻ ነው። .gitlab-ci.yml.
የዶከር ደህንነት ፍተሻ መገልገያዎችን የመተግበር ዘዴዎች እና ምሳሌዎች

የእያንዳንዱ መገልገያ አሠራር ውጤት በእያንዳንዱ የፍተሻ ተግባር መዝገብ ውስጥ በቀጥታ በ json ፋይሎች በቅርስ ክፍል ውስጥ ወይም በቀላል HTML ዘገባ ውስጥ ሊታይ ይችላል (ከዚህ በታች ባለው ላይ የበለጠ)
የዶከር ደህንነት ፍተሻ መገልገያዎችን የመተግበር ዘዴዎች እና ምሳሌዎች

3. የመገልገያ ሪፖርቶችን በትንሹ በሰዎች ሊነበብ በሚችል መልኩ ለማቅረብ፣ ትንሽ የፓይዘን ስክሪፕት ሶስት json ፋይሎችን ወደ አንድ የኤችቲኤምኤል ፋይል ከብልሽት ሠንጠረዥ ለመቀየር ይጠቅማል።
ይህ ስክሪፕት በተለየ የሪፖርት ተግባር ተጀምሯል፣ እና የመጨረሻው ቅርስ ከሪፖርት ጋር የኤችቲኤምኤል ፋይል ነው። የስክሪፕት ምንጩ እንዲሁ በማጠራቀሚያው ውስጥ አለ እና ከእርስዎ ፍላጎቶች፣ ቀለሞች፣ ወዘተ ጋር ሊስማማ ይችላል።
የዶከር ደህንነት ፍተሻ መገልገያዎችን የመተግበር ዘዴዎች እና ምሳሌዎች

የሼል ስክሪፕት

ሁለተኛው አማራጭ በሲአይ/ሲዲ ሲስተም ውስጥ የሌሉ የዶከር ምስሎችን ለመፈተሽ ለሚፈልጉ ጉዳዮች ተስማሚ ነው ፣ ወይም ሁሉም መመሪያዎች በአስተናጋጁ ላይ በቀጥታ ሊከናወኑ በሚችሉ ቅፅ ​​ውስጥ ሊኖርዎት ይገባል ። ይህ አማራጭ በንጹህ ምናባዊ (ወይም እንዲያውም እውነተኛ) ማሽን ላይ ሊሠራ በሚችል ዝግጁ በሆነ የሼል ስክሪፕት ተሸፍኗል። ስክሪፕቱ ከላይ ካለው gitlab-ሯጭ ጋር ተመሳሳይ መመሪያዎችን ይከተላል።

ስክሪፕቱ በተሳካ ሁኔታ እንዲሰራ Docker በሲስተሙ ላይ መጫን አለበት እና አሁን ያለው ተጠቃሚ በዶክተር ቡድን ውስጥ መሆን አለበት።

ስክሪፕቱ ራሱ እዚህ ሊገኝ ይችላል፡- ዶከር_ሰከንድ_ቼክ.sh

በፋይሉ መጀመሪያ ላይ ተለዋዋጮች የትኛው ምስል መቃኘት እንዳለበት እና ምን ዓይነት ጉድለቶች እንዳሉት የትሪቪ መገልገያ በተጠቀሰው የስህተት ኮድ እንዲወጣ ያደርጋቸዋል።

በስክሪፕቱ አፈፃፀም ወቅት ሁሉም መገልገያዎች ወደ ማውጫው ይወርዳሉ docker_tools, የሥራቸው ውጤቶች - በማውጫው ውስጥ docker_tools/json, እና ከሪፖርቱ ጋር ያለው HTML በፋይሉ ውስጥ ይሆናል ውጤቶች.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

Docker ምስል ከሁሉም መገልገያዎች ጋር

እንደ ሶስተኛ አማራጭ ከደህንነት መገልገያዎች ጋር ምስል ለመፍጠር ሁለት ቀላል Dockerfiles አዘጋጅቻለሁ። አንድ Dockerfile ምስሉን ከማጠራቀሚያው ውስጥ ለመቃኘት አንድ ስብስብ ለመገንባት ይረዳል፣ ሁለተኛው (Dockerfile_tar) የታር ፋይሉን በምስሉ ለመቃኘት ስብስብ ይገነባል።

1. ተገቢውን የዶከር ፋይል እና ስክሪፕቶችን ከማከማቻው ውስጥ እንወስዳለን 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

ውጤቶች

አንድ መሰረታዊ የዶከር አርቲፊክስ መቃኛ መገልገያዎችን ብቻ ሸፍነናል፣ይህም ጥሩ የምስል ደህንነት መስፈርቶችን በሚገባ ይሸፍናል ብዬ አስባለሁ። ተመሳሳይ ፍተሻዎችን የሚያከናውኑ፣ የሚያምሩ ሪፖርቶችን ለመሳል ወይም በኮንሶል ሁነታ፣ በኮንቴይነር አስተዳደር ሲስተምስ ሽፋን ወዘተ ብቻ የሚሰሩ ብዙ ሌሎች የሚከፈልባቸው እና ነጻ መሳሪያዎች አሉ።የእነዚህ መሳሪያዎች አጠቃላይ እይታ እና እንዴት እነሱን ማዋሃድ እንደሚቻል ትንሽ ቆይቶ ሊታይ ይችላል።

በአንቀጹ ውስጥ የተገለጹት የመሳሪያዎች ስብስብ አወንታዊ ጎን ሁሉም በክፍት ምንጭ ላይ የተገነቡ ናቸው እና ከእርስዎ ፍላጎቶች እና የመሠረተ ልማት ባህሪዎች ጋር በትክክል የሚስማማውን ለማግኘት ከነሱ እና ከሌሎች ተመሳሳይ መሳሪያዎች ጋር መሞከር ይችላሉ ። እርግጥ ነው, የተገኙት ሁሉም ድክመቶች በተወሰኑ ሁኔታዎች ላይ ተፈፃሚነት እንዲኖራቸው ማጥናት አለባቸው, ግን ይህ ለወደፊት ትልቅ ጽሑፍ ርዕስ ነው.

እነዚህ መመሪያዎች፣ ስክሪፕቶች እና መገልገያዎች እንደሚረዱዎት እና በኮንቴይነሬሽን መስክ የበለጠ ደህንነቱ የተጠበቀ መሠረተ ልማት ለመፍጠር መነሻ ይሆናሉ ብዬ ተስፋ አደርጋለሁ።

ምንጭ: hab.com

አስተያየት ያክሉ