Docker-ийн аюулгүй байдлыг шалгах хэрэгслүүдийг хэрэгжүүлэх арга, жишээ

Docker-ийн аюулгүй байдлыг шалгах хэрэгслүүдийг хэрэгжүүлэх арга, жишээ
Хөөе Хабр!

Өнөөгийн бодит байдалд чингэлэгжилтийн хөгжлийн үйл явцад гүйцэтгэх үүрэг нэмэгдэж байгаатай холбогдуулан чингэлэгтэй холбоотой янз бүрийн үе шат, аж ахуйн нэгжүүдийн аюулгүй байдлыг хангах асуудал хамгийн сүүлийн байранд байдаггүй. Шалгалтыг гараар хийх нь маш хэцүү ажил тул энэ үйл явцыг автоматжуулах эхний алхмуудыг хийх нь сайхан байх болно.

Энэ нийтлэлд би Docker-ийн аюулгүй байдлын хэд хэдэн хэрэгслүүдийг хэрэгжүүлэхэд зориулсан бэлэн скриптүүд болон энэ процессыг туршихын тулд жижиг демо стенд хэрхэн тохируулах зааварчилгааг хуваалцах болно. Та материалуудыг ашиглан Dockerfile зураг, зааврын аюулгүй байдлыг шалгах үйл явцыг хэрхэн зохион байгуулах талаар туршилт хийж болно. Хөгжүүлэх, хэрэгжүүлэх дэд бүтэц нь хүн бүрт өөр өөр байх нь ойлгомжтой тул доор би хэд хэдэн боломжит хувилбаруудыг өгөх болно.

Аюулгүй байдлын шалгалтын хэрэгслүүд

Докерын дэд бүтцийн янз бүрийн тал дээр шалгалт хийдэг олон тооны өөр өөр туслах програмууд болон скриптүүд байдаг. Тэдний заримыг өмнөх нийтлэлд аль хэдийн тайлбарласан байгаа (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), мөн энэ нийтлэлд би хөгжүүлэлтийн явцад бүтээгдсэн Docker зургийн аюулгүй байдлын шаардлагуудын дийлэнх хэсгийг хамарсан гурвыг нь анхаарч үзэхийг хүсч байна. Нэмж дурдахад би эдгээр гурван хэрэгслийг аюулгүй байдлын шалгалтыг гүйцэтгэхийн тулд нэг хоолойд хэрхэн нэгтгэж болох жишээг харуулах болно.

Хадолинт
https://github.com/hadolint/hadolint

Dockerfile зааврын зөв, аюулгүй байдлыг эхлээд үнэлэхэд тусалдаг нэлээд энгийн консол хэрэгсэл (жишээлбэл, зөвхөн зөвшөөрөгдсөн зургийн бүртгэлийг ашиглах эсвэл sudo ашиглах).

Docker-ийн аюулгүй байдлыг шалгах хэрэгслүүдийг хэрэгжүүлэх арга, жишээ

Докль
https://github.com/goodwithtech/dockle

Зураг дээр (эсвэл хадгалсан зургийн tarball дээр) ажилладаг консолын хэрэгсэл бөгөөд тухайн зургийн давхарга, тохиргоонд дүн шинжилгээ хийх замаар түүний зөв, аюулгүй байдлыг шалгадаг - ямар хэрэглэгчид бүтээгдсэн, ямар зааварчилгаа ашиглаж байгаа, ямар хэмжээ суурилуулсан зэргийг шалгадаг. , хоосон нууц үг байгаа эсэх гэх мэт. e. Шалгалтуудын тоо тийм ч их биш бөгөөд хэд хэдэн шалгалт, зөвлөмжид үндэслэсэн байдаг. CIS (Интернэтийн аюулгүй байдлын төв) жишиг докерын хувьд.
Docker-ийн аюулгүй байдлыг шалгах хэрэгслүүдийг хэрэгжүүлэх арга, жишээ

Өчүүхэн
https://github.com/aquasecurity/trivy

Энэхүү хэрэгсэл нь үйлдлийн систем бүтээх асуудал (Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu дэмжигддэг) болон хамаарлын асуудлууд (Gemfile.lock, Pipfile.lock, composer.lock, package-lock) гэсэн хоёр төрлийн эмзэг байдлыг илрүүлэхэд чиглэгддэг. .json , ip.lock, Cargo.lock). Trivy нь репозитор дахь зураг болон локал зургийг хоёуланг нь сканнердах боломжтой бөгөөд мөн Docker дүрс бүхий шилжүүлсэн .tar файл дээр үндэслэн сканнердах боломжтой.

Docker-ийн аюулгүй байдлыг шалгах хэрэгслүүдийг хэрэгжүүлэх арга, жишээ

Хэрэгслийг хэрэгжүүлэх сонголтууд

Тодорхойлсон програмуудыг тусгаарлагдсан нөхцөлд туршиж үзэхийн тулд би хялбаршуулсан процессын нэг хэсэг болгон бүх хэрэгслийг суулгах зааврыг өгөх болно.

Гол санаа нь хөгжүүлэлтийн явцад үүссэн Dockerfiles болон Docker зургуудын контентын автомат шалгалтыг хэрхэн хэрэгжүүлж болохыг харуулах явдал юм.

Баталгаажуулалт нь өөрөө дараах алхмуудаас бүрдэнэ.

  1. Dockerfile зааврын зөв, аюулгүй байдлыг linter хэрэглүүрээр шалгаж байна Хадолинт
  2. Эцсийн болон завсрын зургийн зөв, аюулгүй байдлыг шалгах нь хэрэгсэл юм Докль
  3. Үндсэн зураг дээрх нийтлэг мэдэгдэж буй эмзэг байдал (CVE) болон хэд хэдэн хамаарлыг шалгах - хэрэглүүрээр Өчүүхэн

Дараа нь нийтлэлд би эдгээр алхмуудыг хэрэгжүүлэх гурван сонголтыг өгөх болно.
Эхнийх нь GitLab-ийн жишээг ашиглан CI / CD дамжуулах хоолойг тохируулах явдал юм (туршилтын жишээг өсгөх үйл явцын тайлбартай).
Хоёр дахь нь бүрхүүлийн скрипт ашиглаж байна.
Гурав дахь нь Docker дүрсийг сканнердах Docker дүрсийг бүтээх явдал юм.
Та өөрт тохирох хувилбарыг сонгон дэд бүтцэд шилжүүлж, хэрэгцээнд нь тохируулж болно.

Шаардлагатай бүх файлууд болон нэмэлт зааврууд нь мөн хадгалах санд байна: 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 бүлэгт нэмснээр та docker-тэй sudo ашиглахгүйгээр ажиллах боломжтой болно:

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-г нээгээд үндсэн хэрэглэгчийн нууц үгийг өөрчлөхийг санал болгож буй хуудсыг харна уу:
Docker-ийн аюулгүй байдлыг шалгах хэрэгслүүдийг хэрэгжүүлэх арга, жишээ
Шинэ нууц үгээ тохируулаад GitLab руу очно уу.

6. Шинэ төсөл үүсгэж, жишээ нь cicd-test, түүнийг эхлүүлэх файлаар эхлүүлнэ README.md:
Docker-ийн аюулгүй байдлыг шалгах хэрэгслүүдийг хэрэгжүүлэх арга, жишээ
7. Одоо бид GitLab Runner-ийг суулгах хэрэгтэй: хүсэлтийн дагуу шаардлагатай бүх үйлдлийг гүйцэтгэх агент.
Хамгийн сүүлийн хувилбарыг татаж авах (энэ тохиолдолд Linux 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. 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. Одоо бид Runner-ийг GitLab инстанстай харьцах боломжтойгоор бүртгэж байна.
Үүнийг хийхийн тулд Settings-CI/CD хуудсыг (http://OUR_ IP_ADDRESS/root/cicd-test/-/settings/ci_cd) нээж, "Runners" таб дээрээс URL болон Бүртгэлийн токеныг олно уу:
Docker-ийн аюулгүй байдлыг шалгах хэрэгслүүдийг хэрэгжүүлэх арга, жишээ
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-ийг авах бөгөөд үүнд бид хэрэгслүүдээ эхлүүлэх зааварчилгааг нэмэх шаардлагатай болно. Энэхүү үзүүлэн дээр бид програм бүтээх, хадгалах үе шат байхгүй, гэхдээ бодит орчинд тэдгээр нь скан хийх алхмуудын өмнө явж, дүн шинжилгээ хийх зураг болон Dockerfile үүсгэх болно.

дамжуулах хоолойн тохиргоо

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-г суулгах шаардлагатай мин и Go. Үгүй бол энэ нь RedHat-д суурилсан зургийг сканнердах, эмзэг байдлын мэдээллийн санд шинэчлэлт хийх үед алдаа гаргах болно.

2. Манай тохиргооны файлын зааврын дагуу файлуудыг хадгалах газарт нэмсний дараа GitLab автоматаар бүтээх болон скан хийх процессыг эхлүүлэх болно. CI / CD → Дамжуулах хоолой таб дээрээс та зааврын явцыг харж болно.

Үүний үр дүнд бидэнд дөрвөн даалгавар байна. Тэдгээрийн гурав нь сканнер хийхэд шууд оролцдог бөгөөд сүүлчийнх нь (Тайлан) сканнерын үр дүн бүхий тархсан файлуудаас энгийн тайланг цуглуулдаг.
Docker-ийн аюулгүй байдлыг шалгах хэрэгслүүдийг хэрэгжүүлэх арга, жишээ
Анхдагч байдлаар Trivy нь зураг эсвэл хамаарал дээр CRITICAL эмзэг байдал илэрсэн тохиолдолд гүйцэтгэлээ зогсооно. Үүний зэрэгцээ, Хадолинт үргэлж Амжилтын кодыг буцаадаг, учир нь түүний гүйцэтгэлд үргэлж тайлбарууд байдаг бөгөөд энэ нь бүтээхийг зогсооход хүргэдэг.

Тодорхой шаардлагаас хамааран та гарах кодыг тохируулах боломжтой бөгөөд ингэснээр эдгээр хэрэгслүүд нь тодорхой чухал асуудал илэрсэн үед угсралтын процессыг зогсооно. Манай тохиолдолд Trivy нь бидний SHOWSTOPPER хувьсагч дээр заасан ноцтой байдлын эмзэг байдлыг илрүүлсэн тохиолдолд л бүтээц зогсох болно. .gitlab-ci.yml.
Docker-ийн аюулгүй байдлыг шалгах хэрэгслүүдийг хэрэгжүүлэх арга, жишээ

Хэрэгсэл бүрийн үйл ажиллагааны үр дүнг сканнердах ажил бүрийн бүртгэлээс, олдворын хэсэг дэх json файлуудаас эсвэл энгийн HTML тайлангаас (доорх дэлгэрэнгүй мэдээллийг) харж болно.
Docker-ийн аюулгүй байдлыг шалгах хэрэгслүүдийг хэрэгжүүлэх арга, жишээ

3. Хэрэглээний тайлангуудыг хүнд уншихад хялбар хэлбэрээр үзүүлэхийн тулд жижиг Python скриптийг ашиглан гурван json файлыг согогийн хүснэгттэй нэг HTML файл болгон хөрвүүлдэг.
Энэ скриптийг тусдаа тайлангийн даалгавараар эхлүүлдэг бөгөөд түүний эцсийн олдвор нь тайлантай HTML файл юм. Скриптийн эх сурвалж нь мөн агуулахад байгаа бөгөөд таны хэрэгцээ, өнгө гэх мэт тохируулга хийх боломжтой.
Docker-ийн аюулгүй байдлыг шалгах хэрэгслүүдийг хэрэгжүүлэх арга, жишээ

Бүрхүүлийн скрипт

Хоёрдахь сонголт нь CI / CD системд байхгүй Docker зургуудыг шалгах эсвэл бүх зааварчилгааг хост дээр шууд гүйцэтгэх боломжтой байх шаардлагатай тохиолдолд тохиромжтой. Энэ сонголт нь цэвэр виртуал (эсвэл бодит) машин дээр ажиллах боломжтой бэлэн бүрхүүлийн скриптээр бүрхэгдсэн байдаг. Скрипт нь дээрх gitlab-runner-тай ижил зааврыг дагаж мөрддөг.

Скрипт амжилттай ажиллахын тулд систем дээр Docker суулгасан байх ёстой бөгөөд одоогийн хэрэглэгч докерын бүлэгт байх ёстой.

Скриптийг өөрөө эндээс олж болно: docker_sec_check.sh

Файлын эхэнд хувьсагч нь аль дүрсийг сканнердах ёстойг, ямар ноцтой согог нь Trivy хэрэгслийг заасан алдааны кодоор гарахад хүргэхийг зааж өгдөг.

Скриптийг гүйцэтгэх явцад бүх хэрэгслийг сан руу татаж авах болно 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 дүрс

Гурав дахь хувилбар болгон би хамгаалалтын хэрэгслээр дүрс үүсгэхийн тулд хоёр энгийн Docker файлыг эмхэтгэсэн. Нэг Dockerfile нь агуулахаас зургийг сканнердах багц үүсгэхэд туслах болно, хоёр дахь нь (Dockerfile_tar) нь 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-ийг файл руу холбоно. /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 олдвор сканнерын хэрэгслүүдийг авч үзсэн бөгөөд миний бодлоор зургийн аюулгүй байдлын шаардлагыг нэлээд үр дүнтэй хамардаг. Ижил шалгалт хийх, сайхан тайлан гаргах эсвэл зөвхөн консол горимд ажиллах, контейнерын удирдлагын систем гэх мэт бусад төлбөртэй, үнэгүй хэрэгслүүд байдаг. Эдгээр хэрэгслүүдийн тойм, тэдгээрийг хэрхэн нэгтгэх талаар хэсэг хугацааны дараа гарч магадгүй.

Нийтлэлд дурдсан хэрэгслүүдийн эерэг тал нь бүгд нээлттэй эх сурвалж дээр бүтээгдсэн бөгөөд та эдгээр болон бусад ижил төстэй хэрэгслээр туршилт хийж, өөрийн шаардлага, дэд бүтцийн онцлогт яг тохирсон зүйлийг олох боломжтой. Мэдээжийн хэрэг, илэрсэн бүх эмзэг байдлыг тодорхой нөхцөлд ашиглах боломжтой эсэхийг судлах хэрэгтэй, гэхдээ энэ бол ирээдүйн томоохон нийтлэлийн сэдэв юм.

Эдгээр заавар, скрипт болон хэрэгслүүд нь танд тусалж, чингэлэгжүүлэх чиглэлээр илүү найдвартай дэд бүтцийг бий болгох эхлэлийн цэг болно гэж найдаж байна.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх