Усулҳо ва мисолҳои татбиқи утилитаҳо барои санҷиши амнияти Docker

Усулҳо ва мисолҳои татбиқи утилитаҳо барои санҷиши амнияти Docker
Эй Ҳабр!

Дар воқеияти муосир, бинобар афзоиши нақши контейнеризатсия дар равандҳои рушд, масъалаи таъмини амнияти марҳилаҳо ва объектҳои мухталифи марбут ба контейнерҳо муҳимтарин масъала нест. Гузаронидани санҷишҳои дастӣ вақти зиёдро талаб мекунад, аз ин рӯ фикри хуб мебуд, ки ҳадди аққал қадамҳои аввалро барои автоматикунонии ин раванд андешед.

Дар ин мақола, ман скриптҳои тайёрро барои татбиқи якчанд утилитаҳои амниятии Docker мубодила хоҳам кард ва дастурҳо оид ба ҷойгиркунии стенди намоишии хурд барои санҷиши ин раванд. Шумо метавонед маводҳоро барои таҷриба дар ташкили раванди санҷиши амнияти тасвирҳо ва дастурҳои Dockerfile истифода баред. Равшан аст, ки инфрасохтори рушд ва татбиқи ҳар як шахс гуногун аст, бинобар ин дар зер ман якчанд вариантҳои имконпазирро пешниҳод мекунам.

Утилитаҳои санҷиши амният

Шумораи зиёди барномаҳои ёрирасон ва скриптҳои гуногун мавҷуданд, ки ҷанбаҳои гуногуни инфрасохтори Docker-ро тафтиш мекунанд. Баъзе аз онҳо аллакай дар мақолаи қаблӣ тавсиф карда шудаанд (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

Барномаи консоле, ки бо тасвир (ё бо архиви захирашудаи tar) кор мекунад, ки дурустӣ ва амнияти тасвири мушаххасро месанҷад, қабатҳо ва конфигуратсияи онро таҳлил мекунад - кадом корбарон сохта шудаанд, кадом дастурҳо истифода мешаванд, ки ҳаҷмҳо насб карда шудаанд, мавҷудияти пароли холӣ ва ғайра. г. То ҳол шумораи чекҳо чандон зиёд нест ва ба якчанд санҷишҳо ва тавсияҳои худи мо асос ёфтааст. Нишондиҳандаи ИДМ (Маркази амнияти Интернет). барои Docker.
Усулҳо ва мисолҳои татбиқи утилитаҳо барои санҷиши амнияти Docker

Trivy
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 метавонад ҳам тасвирро дар анбор ва ҳам тасвири маҳаллиро скан кунад ва инчунин метавонад дар асоси файли интиқолшудаи .tar бо тасвири Docker скан кунад.

Усулҳо ва мисолҳои татбиқи утилитаҳо барои санҷиши амнияти Docker

Имкониятҳои татбиқи коммуналӣ

Барои санҷидани барномаҳои тавсифшуда дар муҳити ҷудошуда, ман дастурҳоро оид ба насб кардани ҳамаи утилитҳо дар раванди то андозае соддашуда пешниҳод мекунам.

Идеяи асосӣ ин нишон додани он аст, ки чӣ гуна шумо метавонед тафтиши худкори мундариҷаи Dockerfiles ва тасвирҳои Docker, ки ҳангоми таҳия сохта шудаанд, амалӣ кунед.

Худи санҷиш аз марҳилаҳои зерин иборат аст:

  1. Санҷиши дурустӣ ва бехатарии дастурҳои Dockerfile бо истифода аз утилитаи linter Хадолинт
  2. Санҷиши дурустӣ ва бехатарии тасвирҳои ниҳоӣ ва мобайнӣ бо истифода аз утилита Докл
  3. Санҷиши мавҷудияти осебпазириҳои оммавӣ (CVE) дар тасвири асосӣ ва як қатор вобастагӣ - бо истифода аз утилита Trivy

Баъдтар дар мақола ман се вариантро барои татбиқи ин қадамҳо медиҳам:
Якум ин тавассути конфигуратсияи лӯлаи CI/CD бо истифода аз GitLab ҳамчун намуна (бо тавсифи раванди баланд бардоштани намунаи санҷишӣ).
Дуюм ин истифодаи скрипти shell мебошад.
Сеюм сохтани тасвири 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 бидуни истифодаи 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. Корбари OS барои Runner илова кунед ва хидматро оғоз кунед:

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 ва аломати бақайдгириро пайдо кунед:
Усулҳо ва мисолҳои татбиқи утилитаҳо барои санҷиши амнияти 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 дорои дастурҳо оид ба иҷро кардани се утилита (Hadolint, Dockle ва Trivy), ки файли интихобшудаи Dockerfile ва тасвири дар тағирёбандаи DOCKERFILE муайяншударо таҳлил мекунанд. Ҳама файлҳои заруриро аз анбор гирифтан мумкин аст: 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 → Қубурҳо шумо метавонед пешрафти дастурҳоро бубинед.

Дар натича дар назди мо чор вазифа истодааст. Сетои онҳо мустақиман бо сканкунӣ сарукор доранд ва охирин (Ҳисобот) гузориши оддиро аз файлҳои пароканда бо натиҷаҳои сканер ҷамъоварӣ мекунад.
Усулҳо ва мисолҳои татбиқи утилитаҳо барои санҷиши амнияти Docker
Бо нобаёнӣ, Trivy кор карданро қатъ мекунад, агар осебпазирии CRITICAL дар тасвир ё вобастагӣ ошкор карда шавад. Ҳамзамон, Hadolint ҳамеша рамзи Муваффақиятро бармегардонад, зеро он ҳамеша ба шарҳҳо оварда мерасонад, ки боиси қатъ шудани сохтмон мегардад.

Вобаста ба талаботи мушаххаси худ, шумо метавонед рамзи баромадро танзим кунед, то вақте ки ин утилитҳо мушкилоти дорои аҳамияти муайянро ошкор мекунанд, онҳо инчунин раванди сохтани онро қатъ мекунанд. Дар ҳолати мо, сохтмон танҳо дар сурате қатъ мешавад, ки Trivy осебпазириро бо интиқодӣ, ки мо дар тағирёбандаи SHOWSTOPPER дар .gitlab-ci.yml.
Усулҳо ва мисолҳои татбиқи утилитаҳо барои санҷиши амнияти Docker

Натиҷаи ҳар як утилитаро дар сабти ҳар як вазифаи сканкунӣ, бевосита дар файлҳои json дар бахши артефактҳо ё дар гузориши оддии HTML дидан мумкин аст (бештар дар бораи он дар зер):
Усулҳо ва мисолҳои татбиқи утилитаҳо барои санҷиши амнияти Docker

3. Барои пешниҳоди ҳисоботҳои коммуналӣ дар шакли каме бештар барои одамон хондан, скрипти хурди Python барои табдил додани се файли JSON ба як файли HTML бо ҷадвали камбудиҳо истифода мешавад.
Ин скрипт аз ҷониби вазифаи алоҳидаи Ҳисобот оғоз мешавад ва артефакти ниҳоии он файли HTML бо гузориш мебошад. Сарчашмаи скрипт инчунин дар анбор ҷойгир аст ва метавонад ба ниёзҳо, рангҳо ва ғайра мутобиқ карда шавад.
Усулҳо ва мисолҳои татбиқи утилитаҳо барои санҷиши амнияти Docker

Скрипти Shell

Варианти дуюм барои ҳолатҳое мувофиқ аст, ки ба шумо лозим аст, ки тасвирҳои Docker-ро берун аз системаи CI/CD тафтиш кунед ё шумо бояд ҳама дастурҳоро дар шакле дошта бошед, ки мустақиман дар ҳост иҷро карда шаванд. Ин хосият бо скрипти тайёри ниҳонӣ фаро гирифта шудааст, ки мумкин аст дар мошини поки виртуалӣ (ё ҳатто воқеӣ) иҷро карда шавад. Скрипт ҳамон дастурҳоеро иҷро мекунад, ки 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 бо ҳама хидматҳо

Ҳамчун алтернативаи сеюм, ман ду Dockerfile оддиро тартиб додам, то тасвир бо утилитаҳои амниятӣ эҷод кунам. Як 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 дида баромадем, ки ба андешаи ман, як қисми муносиби талаботи амнияти тасвирро хеле самаранок фаро мегирад. Инчунин шумораи зиёди абзорҳои пулакӣ ва ройгон мавҷуданд, ки метавонанд ҳамон санҷишҳоро анҷом диҳанд, ҳисоботи зебо кашанд ё танҳо дар реҷаи консолӣ кор кунанд, системаҳои идоракунии контейнерҳоро фаро гиранд ва ғайра. Шарҳи ин асбобҳо ва тарзи ҳамгироии онҳо метавонад каме дертар пайдо шавад. .

Чизи хуби маҷмӯи абзорҳои дар ин мақола тавсифшуда дар он аст, ки онҳо ҳама манбаи кушода мебошанд ва шумо метавонед бо онҳо ва дигар абзорҳои шабеҳ озмоиш кунед, то он чизеро, ки ба ниёзҳо ва инфрасохтори шумо мувофиқ аст, пайдо кунед. Албатта, ҳама осебпазириҳои пайдошуда бояд барои татбиқшаванда дар шароити мушаххас омӯхта шаванд, аммо ин мавзӯъ барои мақолаи калон дар оянда аст.

Умедворам, ки ин дастур, скриптҳо ва утилитаҳо ба шумо кӯмак мекунанд ва нуқтаи ибтидоӣ барои эҷоди инфрасохтори бехатартар дар соҳаи контейнеризатсия мешаванд.

Манбаъ: will.com

Илова Эзоҳ