Metodi u eżempji ta' implimentazzjoni ta' utilitajiet għall-iċċekkjar tas-sigurtà ta' Docker

Metodi u eżempji ta' implimentazzjoni ta' utilitajiet għall-iċċekkjar tas-sigurtà ta' Docker
Ħej Habr!

Fir-realtà moderna, minħabba r-rwol dejjem jikber tal-kontejners fil-proċessi ta 'żvilupp, il-kwistjoni li tiġi żgurata s-sigurtà ta' diversi stadji u entitajiet assoċjati mal-kontejners mhijiex l-inqas kwistjoni importanti. It-twettiq ta' kontrolli manwali jieħu ħafna ħin, għalhekk tkun idea tajba li jittieħdu tal-inqas il-passi inizjali lejn l-awtomatizzazzjoni ta' dan il-proċess.

F'dan l-artikolu, se naqsam skripts lesti għall-implimentazzjoni ta 'diversi utilitajiet ta' sigurtà Docker u istruzzjonijiet dwar kif tuża stand demo żgħir biex tittestja dan il-proċess. Tista 'tuża l-materjali biex tesperimenta kif torganizza l-proċess ta' ttestjar tas-sigurtà tal-immaġini u l-istruzzjonijiet ta 'Dockerfile. Huwa ċar li l-infrastruttura ta 'żvilupp u implimentazzjoni ta' kulħadd hija differenti, għalhekk hawn taħt ser nipprovdi diversi għażliet possibbli.

Utilitajiet tal-kontroll tas-sigurtà

Hemm numru kbir ta 'applikazzjonijiet u skripts helper differenti li jwettqu kontrolli fuq diversi aspetti tal-infrastruttura Docker. Xi wħud minnhom diġà ġew deskritti fl-artiklu preċedenti (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), u f'dan il-materjal nixtieq niffoka fuq tlieta minnhom, li jkopru l-biċċa l-kbira tar-rekwiżiti tas-sigurtà għall-immaġini Docker mibnija matul il-proċess ta 'żvilupp. Barra minn hekk, se nuri wkoll eżempju ta 'kif dawn it-tliet utilitajiet jistgħu jiġu konnessi f'pipeline wieħed biex iwettqu kontrolli tas-sigurtà.

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

Utilità tal-console pjuttost sempliċi li tgħin, bħala l-ewwel approssimazzjoni, tevalwa l-korrettezza u s-sikurezza tal-istruzzjonijiet ta 'Dockerfile (pereżempju, bl-użu ta' reġistri tal-immaġni awtorizzati biss jew bl-użu ta 'sudo).

Metodi u eżempji ta' implimentazzjoni ta' utilitajiet għall-iċċekkjar tas-sigurtà ta' Docker

Dockle
https://github.com/goodwithtech/dockle

Utilità tal-console li taħdem b'immaġini (jew b'arkivju tal-qatran salvat ta' immaġni), li tiċċekkja l-korrettezza u s-sigurtà ta 'immaġni partikolari bħala tali, tanalizza s-saffi u l-konfigurazzjoni tagħha - liema utenti huma maħluqa, liema struzzjonijiet jintużaw, liema volumi huma mmuntati, il-preżenza ta 'password vojta, eċċ d. S'issa n-numru ta' kontrolli mhuwiex kbir ħafna u huwa bbażat fuq diversi kontrolli u rakkomandazzjonijiet tagħna stess Benchmark tas-CIS (Ċentru għas-Sigurtà tal-Internet). għal Docker.
Metodi u eżempji ta' implimentazzjoni ta' utilitajiet għall-iċċekkjar tas-sigurtà ta' Docker

Trivy
https://github.com/aquasecurity/trivy

Din l-utilità hija mmirata biex issib żewġ tipi ta 'vulnerabbiltajiet - problemi bil-bini tal-OS (sostnjati minn Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu) u problemi bid-dipendenzi (Gemfile.lock, Pipfile.lock, composer.lock, package -lock.json , yarn.lock, cargo.lock). Trivy jista 'jiskennja kemm immaġini fir-repożitorju kif ukoll immaġini lokali, u jista' wkoll jiskenja abbażi tal-fajl .tar trasferit bl-immaġni Docker.

Metodi u eżempji ta' implimentazzjoni ta' utilitajiet għall-iċċekkjar tas-sigurtà ta' Docker

Għażliet għall-implimentazzjoni ta 'utilitajiet

Sabiex nipprova l-applikazzjonijiet deskritti f'ambjent iżolat, ser nipprovdi struzzjonijiet għall-installazzjoni tal-utilitajiet kollha fi proċess kemmxejn simplifikat.

L-idea ewlenija hija li turi kif tista 'timplimenta verifika awtomatika tal-kontenut ta' Dockerfiles u stampi Docker li jinħolqu waqt l-iżvilupp.

Il-kontroll innifsu jikkonsisti fil-passi li ġejjin:

  1. Iċċekkja l-korrettezza u s-sigurtà tal-istruzzjonijiet Dockerfile bl-użu ta 'utilità linter Hadolint
  2. Iċċekkjar tal-korrettezza u s-sigurtà tal-immaġini finali u intermedji bl-użu ta 'utilità Dockle
  3. Iċċekkjar għall-preżenza ta 'vulnerabbiltajiet magħrufa pubblikament (CVE) fl-immaġni bażi u numru ta' dipendenzi - bl-użu tal-utilità Trivy

Aktar tard fl-artikolu se nagħti tliet għażliet għall-implimentazzjoni ta 'dawn il-passi:
L-ewwel huwa billi tikkonfigura l-pipeline CI/CD billi tuża GitLab bħala eżempju (b'deskrizzjoni tal-proċess ta 'tqajjem istanza tat-test).
It-tieni qed tuża script shell.
It-tielet waħda tinvolvi l-bini ta 'immaġni Docker biex tiskennja immaġini Docker.
Tista' tagħżel l-għażla li taqbellek l-aħjar, tittrasferiha fl-infrastruttura tiegħek u tadattaha għall-bżonnijiet tiegħek.

Il-fajls kollha meħtieġa u l-istruzzjonijiet addizzjonali jinsabu wkoll fir-repożitorju: https://github.com/Swordfish-Security/docker_cicd

Integrazzjoni f'GitLab CI/CD

Fl-ewwel għażla, se nħarsu lejn kif tista 'timplimenta kontrolli tas-sigurtà billi tuża s-sistema ta' repożitorju GitLab bħala eżempju. Hawnhekk se ngħaddu mill-passi u nifhmu kif ninstallaw ambjent tat-test b'GitLab mill-bidu, noħolqu proċess ta 'skanjar u nniedu utilitajiet għall-iċċekkjar tat-test Dockerfile u immaġni każwali - l-applikazzjoni JuiceShop.

Installazzjoni ta' GitLab
1. Installa Docker:

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

2. Żid l-utent attwali mal-grupp docker sabiex tkun tista 'taħdem ma' docker mingħajr ma tuża sudo:

sudo addgroup <username> docker

3. Sib l-IP tiegħek:

ip addr

4. Installa u tniedi GitLab fil-kontenitur, billi tissostitwixxi l-indirizz IP fl-isem tal-host ma tiegħek:

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

Nistennew sakemm GitLab itemm il-proċeduri ta' installazzjoni kollha meħtieġa (tista' tissorvelja l-proċess permezz tal-output tal-fajl log: docker logs -f gitlab).

5. Iftaħ l-IP lokali tiegħek fil-browser u ara paġna li titlobek tibdel il-password għall-utent root:
Metodi u eżempji ta' implimentazzjoni ta' utilitajiet għall-iċċekkjar tas-sigurtà ta' Docker
Issettja password ġdida u mur GitLab.

6. Oħloq proġett ġdid, pereżempju cicd-test u inizjalizzah bil-fajl tal-bidu README.md:
Metodi u eżempji ta' implimentazzjoni ta' utilitajiet għall-iċċekkjar tas-sigurtà ta' Docker
7. Issa għandna bżonn ninstallaw GitLab Runner: aġent li jmexxi l-operazzjonijiet kollha meħtieġa fuq talba.
Niżżel l-aħħar verżjoni (f'dan il-każ, għal 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. Agħmilha eżekutibbli:

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

9. Żid utent tal-OS għal Runner u ibda s-servizz:

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

Għandu jidher xi ħaġa bħal din:

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. Issa nirreġistraw ir-Runner sabiex ikun jista' jinteraġixxi mal-istanza GitLab tagħna.
Biex tagħmel dan, iftaħ il-paġna Settings-CI/CD (http://OUR_IP_ADDRESS/root/cicd-test/-/settings/ci_cd) u fit-tab Runners sib il-URL u t-token tar-Reġistrazzjoni:
Metodi u eżempji ta' implimentazzjoni ta' utilitajiet għall-iċċekkjar tas-sigurtà ta' Docker
11. Irreġistra Runner billi tissostitwixxi l-URL u t-token tar-Reġistrazzjoni:

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"

Bħala riżultat, ikollna GitLab li jaħdem lest, li fih irridu nżidu struzzjonijiet biex nibdew l-utilitajiet tagħna. F'din id-demo m'għandniex il-passi biex nibnu l-applikazzjoni u nikkontelizzawha, iżda f'ambjent reali dawn jippreċedu l-passi tal-iskannjar u jiġġeneraw immaġini u Dockerfile għall-analiżi.

konfigurazzjoni tal-pipeline

1. Żid fajls mar-repożitorju mydockerfile.df (dan huwa test Dockerfile li se niċċekkjaw) u l-fajl tal-konfigurazzjoni tal-proċess GitLab CI/CD .gitlab-cicd.yml, li telenka l-istruzzjonijiet għall-iskaners (innota t-tikka fl-isem tal-fajl).

Il-fajl tal-konfigurazzjoni YAML fih struzzjonijiet biex imexxu tliet utilitajiet (Hadolint, Dockle, u Trivy) li se janalizzaw id-Dockerfile magħżul u l-immaġni speċifikata fil-varjabbli DOCKERFILE. Il-fajls kollha meħtieġa jistgħu jittieħdu mir-repożitorju: https://github.com/Swordfish-Security/docker_cicd/

Silta minn mydockerfile.df (dan huwa fajl astratt b'sett ta 'struzzjonijiet arbitrarji biss biex juri l-operat tal-utilità). Link dirett għall-fajl: mydockerfile.df

Kontenut ta' 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

Il-konfigurazzjoni YAML tidher bħal din (il-fajl innifsu jista' jinstab permezz tal-link dirett hawn: .gitlab-ci.yml):

Kontenut ta' .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

Jekk meħtieġ, tista 'wkoll tiskennja immaġini ffrankati fil-forma ta' arkivju .tar (madankollu, ser ikollok bżonn tibdel il-parametri tad-dħul għall-utilitajiet fil-fajl YAML)

NB: Trivy jeħtieġ installat rpm и Mur. Inkella, se tiġġenera żbalji meta tiskennja immaġini bbażati fuq RedHat u tirċievi aġġornamenti għad-database tal-vulnerabbiltà.

2. Wara li żżid fajls mar-repożitorju, skont l-istruzzjonijiet fil-fajl tal-konfigurazzjoni tagħna, GitLab awtomatikament jibda l-proċess tal-bini u tal-iskannjar. Fuq it-tab CI/CD → Pipelines tista' tara l-progress tal-istruzzjonijiet.

Bħala riżultat, għandna erba 'kompiti. Tlieta minnhom jittrattaw direttament l-iskannjar, u l-aħħar wieħed (Rapport) jiġbor rapport sempliċi minn fajls imxerrda bir-riżultati tal-iskannjar.
Metodi u eżempji ta' implimentazzjoni ta' utilitajiet għall-iċċekkjar tas-sigurtà ta' Docker
B'mod awtomatiku, Trivy jieqaf jaħdem jekk jinstabu vulnerabbiltajiet KRITIĊI fl-immaġni jew fid-dipendenzi. Fl-istess ħin, Hadolint dejjem jirritorna kodiċi ta 'Suċċess għaliex dejjem jirriżulta f'kummenti, li jikkawża li l-bini jieqaf.

Skont ir-rekwiżiti speċifiċi tiegħek, tista 'tikkonfigura kodiċi tal-ħruġ sabiex meta dawn l-utilitajiet jiskopru problemi ta' ċerta kritika, iwaqqfu wkoll il-proċess tal-bini. Fil-każ tagħna, il-bini jieqaf biss jekk Trivy jiskopri vulnerabbiltà bil-kritika li speċifikajna fil-varjabbli SHOWSTOPPER f' .gitlab-ci.yml.
Metodi u eżempji ta' implimentazzjoni ta' utilitajiet għall-iċċekkjar tas-sigurtà ta' Docker

Ir-riżultat ta 'kull utilità jista' jitqies fil-ġurnal ta 'kull kompitu tal-iskannjar, direttament fil-fajls json fit-taqsima tal-artifacts, jew f'rapport HTML sempliċi (aktar dwar dak hawn taħt):
Metodi u eżempji ta' implimentazzjoni ta' utilitajiet għall-iċċekkjar tas-sigurtà ta' Docker

3. Biex tippreżenta rapporti ta 'utilità f'forma kemmxejn aktar li tinqara mill-bniedem, script Python żgħir huwa użat biex jikkonverti tliet fajls JSON f'fajl HTML wieħed b'tabella ta' difetti.
Din l-iskrittura hija mnedija minn kompitu ta' Rapport separat, u l-artifatt finali tiegħu huwa fajl HTML b'rapport. Is-sors tal-iskript jinsab ukoll fir-repożitorju u jista 'jiġi adattat biex jaqdi l-bżonnijiet, il-kuluri, eċċ tiegħek.
Metodi u eżempji ta' implimentazzjoni ta' utilitajiet għall-iċċekkjar tas-sigurtà ta' Docker

Skript tal-qoxra

It-tieni għażla hija adattata għal każijiet meta għandek bżonn tiċċekkja l-immaġini Docker barra mis-sistema CI/CD jew ikollok bżonn li jkollok l-istruzzjonijiet kollha f'forma li tista 'tiġi eżegwita direttament fuq il-host. Din l-għażla hija koperta minn script shell lest li jista 'jitħaddem fuq magna virtwali nadifa (jew saħansitra reali). L-iskrittura tesegwixxi l-istess istruzzjonijiet bħall-gitlab-runner deskritt hawn fuq.

Biex l-iskript jaħdem b'suċċess, Docker għandu jiġi installat fis-sistema u l-utent attwali għandu jkun fil-grupp docker.

L-iskript innifsu jista' jinstab hawn: docker_sec_check.sh

Fil-bidu tal-fajl, il-varjabbli jispeċifikaw liema immaġini jeħtieġ li tiġi skennjata u liema difetti ta 'kritika se jikkawżaw l-utilità Trivy biex toħroġ bil-kodiċi ta' żball speċifikat.

Waqt l-eżekuzzjoni tal-iskript, l-utilitajiet kollha se jitniżżlu fid-direttorju docker_tools, ir-riżultati tax-xogħol tagħhom jinsabu fid-direttorju docker_tools/json, u l-HTML mar-rapport ikun fil-fajl riżultati.html.

Eżempju ta' output ta' skript

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

Immaġini Docker bl-utilitajiet kollha

Bħala t-tielet alternattiva, ikkumpilajt żewġ Dockerfiles sempliċi biex toħloq immaġni b'utilitajiet tas-sigurtà. Dockerfile wieħed se jgħin biex jinbena sett għall-iskannjar ta 'immaġni minn repożitorju, it-tieni (Dockerfile_tar) se jgħin biex jinbena sett għall-iskannjar ta' fajl qatran b'immaġni.

1. Ħu l-fajl Docker u l-iskripts korrispondenti mir-repożitorju https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. Aħna nnieduha għall-assemblaġġ:

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

3. Wara li titlesta l-assemblaġġ, noħolqu kontenitur mill-immaġni. Fl-istess ħin, ngħaddu l-varjabbli tal-ambjent DOCKERIMAGE bl-isem tal-immaġni li aħna interessati fiha u immuntaw id-Dockerfile li rridu nanalizzaw mill-magna tagħna għall-fajl /Dockerfile (innota li l-mogħdija assoluta għal dan il-fajl hija meħtieġa):

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

Sejbiet

Ħarsa lejn sett bażiku wieħed biss ta 'utilitajiet għall-iskannjar ta' artifacts Docker, li, fl-opinjoni tiegħi, ikopri b'mod effettiv ħafna parti deċenti tar-rekwiżiti tas-sigurtà tal-immaġni. Hemm ukoll għadd kbir ta’ għodod imħallsa u b’xejn li jistgħu jwettqu l-istess kontrolli, jiġbdu rapporti sbieħ jew jaħdmu purament fil-modalità console, ikopru sistemi ta’ ġestjoni tal-kontenituri, eċċ. Ħarsa ġenerali lejn dawn l-għodod u kif tintegrahom tista’ tidher ftit aktar tard .

Il-ħaġa tajba dwar is-sett ta 'għodod deskritti f'dan l-artikolu hija li huma kollha sors miftuħ u tista' tesperimenta magħhom u għodod simili oħra biex issib dak li jaqbel mal-bżonnijiet u l-infrastruttura tiegħek. Naturalment, il-vulnerabbiltajiet kollha li jinstabu għandhom jiġu studjati għall-applikabbiltà f'kundizzjonijiet speċifiċi, iżda dan huwa suġġett għal artikolu kbir futur.

Nittama li din il-gwida, skripts u utilitajiet jgħinuk u jsiru punt tat-tluq għall-ħolqien ta 'infrastruttura aktar sigura fil-qasam tal-kontejnerizzazzjoni.

Sors: www.habr.com

Żid kumment