Rêbaz û nimûneyên bicîhkirina karûbarên ji bo kontrolkirina ewlehiya Docker

Rêbaz û nimûneyên bicîhkirina karûbarên ji bo kontrolkirina ewlehiya Docker
Hey Habr!

Di rastiya nûjen de, ji ber mezinbûna rola konteynirkirinê di pêvajoyên pêşkeftinê de, mijara dabînkirina ewlehiya qonax û pêkhateyên cihêreng ên bi konteyniran re ne mijara herî girîng e. Pêkanîna kontrolên destan dem dixwe, ji ber vê yekê dê ramanek baş be ku bi kêmî ve gavên destpêkê ji bo otomatîkkirina vê pêvajoyê bavêjin.

Di vê gotarê de, ez ê skrîptên amade ji bo bicihanîna gelek karûbarên ewlehiyê yên Docker û rêwerzên li ser ka meriv rawestgehek piçûk a demo-yê ji bo ceribandina vê pêvajoyê çawa saz dike parve bikim. Hûn dikarin materyalan bikar bînin ku biceribînin ka meriv çawa pêvajoya ceribandina ewlehiya wêne û rêwerzên Dockerfile organîze dike. Eşkere ye ku binesaziya pêşkeftin û pêkanînê ya her kesî cûda ye, ji ber vê yekê li jêr ez ê çend vebijarkên gengaz peyda bikim.

Karûbarên kontrolkirina ewlehiyê

Hejmarek mezin serîlêdanên alîkar û nivîsarên cihêreng hene ku li ser gelek aliyên binesaziya Docker kontrol dikin. Hin ji wan berê di gotara berê de hatine diyar kirin (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), û di vê materyalê de ez dixwazim balê bikişînim ser sê ji wan, ku piraniya hewcedariyên ewlehiyê yên wêneyên Docker-ê yên ku di pêvajoya pêşkeftinê de hatine çêkirin vedihewînin. Wekî din, ez ê mînakek jî nîşan bidim ka çawa ev sê karûbar dikarin bi yek boriyê ve werin girêdan da ku kontrolên ewlehiyê pêk bînin.

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

Karûbarek konsolê ya pir hêsan a ku, wekî nêzîkbûna yekem, dibe alîkar ku rast û ewlehiya rêwerzên Dockerfile binirxîne (mînakî, tenê tomarên wêneyê yên destûrdar bikar tîne an sudo bikar tîne).

Rêbaz û nimûneyên bicîhkirina karûbarên ji bo kontrolkirina ewlehiya Docker

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

Karûbarek konsolê ya ku bi wêneyek (an bi arşîva tarê ya tomarkirî ya wêneyek) re dixebite, ku rast û ewlehiya wêneyek taybetî bi vî rengî kontrol dike, qat û veavakirina wê analîz dike - kîjan bikarhêner têne afirandin, kîjan rêwerz têne bikar anîn, kîjan cild hatine lêkirin, hebûna şîfreyek vala, hwd. CIS (Navenda Ewlekariya Înternetê) Benchmark ji bo Docker.
Rêbaz û nimûneyên bicîhkirina karûbarên ji bo kontrolkirina ewlehiya Docker

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

Armanca vê amûreyê peydakirina du celeb qelsiyan e - pirsgirêkên bi avahîyên OS-ê (ji hêla Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu ve têne piştgirî kirin) û pirsgirêkên bi girêdayîbûnê (Gemfile.lock, Pipfile.lock, composer.lock, pakêt. -lock.json , yarn.lock, cargo.lock). Trivy dikare hem wêneyek di depoyê de hem jî wêneyek herêmî bişoxilîne, û hem jî dikare li ser bingeha pelê .tar-ya veguheztî bi wêneya Docker re bişopîne.

Rêbaz û nimûneyên bicîhkirina karûbarên ji bo kontrolkirina ewlehiya Docker

Vebijarkên ji bo pêkanîna utilities

Ji bo ku ez serîlêdanên diyarkirî li hawîrdorek veqetandî biceribînim, ez ê rêwerzan ji bo sazkirina hemî karûbaran di pêvajoyek hinekî hêsan de peyda bikim.

Fikra sereke ev e ku hûn destnîşan bikin ka hûn çawa dikarin verastkirina naveroka otomatîkî ya Dockerfiles û wêneyên Docker ên ku di dema pêşkeftinê de têne afirandin bicîh bikin.

Kontrol bixwe ji gavên jêrîn pêk tê:

  1. Kontrolkirina rastbûn û ewlehiya rêwerzên Dockerfile bi karanîna karûbarek linter Hadolint
  2. Kontrolkirina rast û ewlehiya wêneyên paşîn û navîn bi karanîna karûbarek Dockle
  3. Kontrolkirina hebûna qelsiyên gelemperî (CVE) di wêneya bingehîn de û hejmarek pêwendiyan - karanîna karûbar Trivy

Dûv re di gotarê de ez ê sê vebijarkan ji bo pêkanîna van gavan bidim:
Ya yekem bi mîhengkirina lûleya CI/CD-ê ye ku GitLab wekî mînak bikar tîne (bi ravekirina pêvajoya bilindkirina mînakek ceribandinê).
Ya duyemîn skrîptek şêlê bikar tîne.
Ya sêyemîn avakirina wêneyek Docker heye ku wêneyên Docker bişopîne.
Hûn dikarin vebijarka ku herî baş li gorî we tê hilbijêrin, wê veguhezînin binesaziya xwe û wê li gorî hewcedariyên xwe bicîh bikin.

Hemî pelên pêwîst û rêwerzên pêvek jî di depoyê de ne: https://github.com/Swordfish-Security/docker_cicd

Yekbûna nav GitLab CI/CD

Di vebijarka yekem de, em ê binihêrin ka hûn çawa dikarin kontrolên ewlehiyê bi karanîna pergala depoya GitLab wekî nimûne bicîh bikin. Li vir em ê gavan bişopînin û fêr bibin ka meriv çawa bi GitLab re jîngehek ceribandinê ji sifirê saz dike, pêvajoyek şopandinê biafirîne û ji bo kontrolkirina Dockerfile-ya ceribandinê û wêneyek rasthatî - serîlêdana JuiceShop-ê amûrên dest pê dike.

Sazkirina GitLab
1. Docker saz bikin:

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

2. Bikarhênerê heyî li koma docker zêde bikin da ku hûn bêyî karanîna sudo bi docker re bixebitin:

sudo addgroup <username> docker

3. IP-ya xwe bibînin:

ip addr

4. GitLab di konteynerê de saz bikin û bidin destpêkirin, navnîşana IP-ya di nav navê mêvandar de bi ya xwe veguherînin:

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

Em li bendê ne ku GitLab hemî prosedurên sazkirinê yên pêwîst biqedîne (hûn dikarin pêvajoyê bi riya derketina pelê têketinê bişopînin: docker logs -f gitlab).

5. IP-ya xweya herêmî di gerokê de vekin û rûpelek bibînin ku ji we dipirse ku hûn şîfreya bikarhênerê root biguherînin:
Rêbaz û nimûneyên bicîhkirina karûbarên ji bo kontrolkirina ewlehiya Docker
Şîfreyek nû saz bikin û biçin GitLab.

6. Projeyek nû biafirînin, mînakî cicd-test û wê bi pelê destpêkê ve bidin destpêkirin README.md:
Rêbaz û nimûneyên bicîhkirina karûbarên ji bo kontrolkirina ewlehiya Docker
7. Naha pêdivî ye ku em GitLab Runner saz bikin: karmendek ku dê li gorî daxwazê ​​hemî karûbarên pêwîst bimeşîne.
Guhertoya herî dawî dakêşin (di vê rewşê de, ji bo 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. Wê pêkan bikin:

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

9. Ji bo Runner bikarhênerek OS-ê zêde bikin û karûbarê dest pê bikin:

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

Divê tiştek mîna vê xuya bike:

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. Naha em Runner tomar dikin da ku ew bi mînaka meya GitLab re têkilî daynin.
Ji bo kirina vê yekê, rûpela Settings-CI/CD (http://OUR_IP_ADDRESS/root/cicd-test/-/settings/ci_cd) vekin û li ser tabloya Runners URL û tokena Qeydkirinê bibînin:
Rêbaz û nimûneyên bicîhkirina karûbarên ji bo kontrolkirina ewlehiya Docker
11. Bi guherandina URL û tokena Qeydkirinê, Runner tomar bikin:

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"

Wekî encamek, em GitLabek amade-kar distînin, ku tê de pêdivî ye ku em rêwerzan lê zêde bikin da ku karûbarên xwe bidin destpêkirin. Di vê demoyê de gavên me tune ku em serîlêdanê ava bikin û wê konteynir bikin, lê di hawîrdorek rastîn de ew ê pêşî li gavên şopandinê bigirin û ji bo analîzê wêne û Dockerfile çêbikin.

veavakirina boriyê

1. Pelên li depoyê zêde bikin mydockerfile.df (ev Dockerfilek testê ye ku em ê kontrol bikin) û pelê veavakirina pêvajoyê ya GitLab CI/CD .gitlab-cicd.yml, ku talîmatên ji bo skaneran navnîş dike (di nav navê pelê de bala xwe bidin xala).

Pelê veavakirina YAML rêwerzên ji bo xebitandina sê karûbaran vedihewîne (Hadolint, Dockle, û Trivy) ku dê Dockerfile bijartî û wêneya ku di guhêrbar DOCKERFILE de hatî destnîşan kirin analîz bikin. Hemî pelên pêwîst dikarin ji depoyê werin girtin: https://github.com/Swordfish-Security/docker_cicd/

Veqetandek ji mydockerfile.df (ev pelek razber e ku bi komek rêwerzên keyfî tenê ji bo nîşandana xebata kargêriyê ye). Girêdana rasterast a pelê: mydockerfile.df

Naveroka 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

Veavakirina YAML bi vî rengî xuya dike (pelê bixwe dikare bi girêdana rasterast li vir were dîtin: .gitlab-ci.yml):

Naveroka .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

Ger hewce be, hûn dikarin wêneyên tomarkirî di forma arşîvek .tar de jî bişopînin (lêbelê, hûn ê hewce bikin ku pîvanên têketinê ji bo karûbarên di pelê YAML de biguhezînin)

NB: Trivy pêdivî ye ku were saz kirin rpm и git. Wekî din, ew ê gava ku wêneyên li ser RedHat-ê dişoxilîne û nûvekirinên databasa lawaziyê werdigire xeletiyan çêdike.

2. Piştî lê zêdekirina pelan li depoyê, li gorî rêwerzên di pelê veavakirina me de, GitLab dê bixweber dest bi çêkirina û şopandinê bike. Li ser tabloya CI/CD → Pipelines hûn dikarin pêşkeftina talîmatan bibînin.

Di encamê de çar erkên me hene. Sê ji wan rasterast bi şopandinê re mijûl dibin, û ya paşîn (Raport) ji pelên belavbûyî bi encamên şopandinê re raporek hêsan berhev dike.
Rêbaz û nimûneyên bicîhkirina karûbarên ji bo kontrolkirina ewlehiya Docker
Ji hêla xwerû ve, Trivy xebitîn rawestîne heke di wêneyê an pêwendiyan de qelsiyên KIRÎGÎN werin dîtin. Di heman demê de, Hadolint her gav kodek Serkeftinê vedigerîne ji ber ku ew her gav di şîroveyan de encam dide, ku dibe sedem ku avahî raweste.

Bi hewcedariyên weyên taybetî ve girêdayî, hûn dikarin kodek derketinê mîheng bikin da ku gava ku van amûran pirsgirêkên hin krîtîk tespît bikin, ew jî pêvajoya çêkirinê rawestînin. Di doza me de, avahî dê tenê raweste ger Trivy bi krîtîkbûna ku me di guhêrbara SHOWSTOPPER de diyar kiriye qelsiyek bibîne. .gitlab-ci.yml.
Rêbaz û nimûneyên bicîhkirina karûbarên ji bo kontrolkirina ewlehiya Docker

Encama her karûbar dikare di têketina her peywira şopandinê de, rasterast di pelên json de di beşa huneran de, an di raporek HTML-ê ya hêsan de were dîtin (li ser wê li jêr bêtir):
Rêbaz û nimûneyên bicîhkirina karûbarên ji bo kontrolkirina ewlehiya Docker

3. Ji bo pêşkêşkirina raporên bikêrhatî bi rengek piçûktir ji mirovan re were xwendin, skrîptek Python a piçûk tê bikar anîn da ku sê pelên JSON bi tabloyek kêmasiyan veguhezîne pelek HTML-ê.
Ev skrîpt ji hêla peywirek Raporek cihêreng ve hatî destpêkirin, û hunera wê ya dawîn pelek HTML-ê bi raporek e. Çavkaniya skrîptê jî di depoyê de ye û dikare li gorî hewcedariyên we, reng, hwd were adapte kirin.
Rêbaz û nimûneyên bicîhkirina karûbarên ji bo kontrolkirina ewlehiya Docker

Shell script

Vebijarka duyemîn ji bo rewşên ku hûn hewce ne ku hûn wêneyên Docker-ê li derveyî pergala CI/CD-ê kontrol bikin maqûl e an jî hûn hewce ne ku hemî rêwerzan bi rengek ku rasterast li ser mêvandar bêne darve kirin hebin. Vê vebijarkê ji hêla skrîptek şêlê ya amade ve hatî nixumandin ku dikare li ser makîneyek virtual (an hetta rast) paqij were xebitandin. Skrîpt heman talîmatên wekî gitlab-runner ku li jor hatî behs kirin pêk tîne.

Ji bo ku skrîpt bi serfirazî bixebite, divê Docker li ser pergalê were saz kirin û bikarhênerê heyî divê di koma docker de be.

Nivîsar bixwe dikare li vir were dîtin: docker_sec_check.sh

Di destpêka pelê de, guhêrbar diyar dikin ka kîjan wêneyê pêdivî ye ku were şopandin û kîjan kêmasiyên krîtîk dê bibe sedem ku amûra Trivy bi koda xeletiya diyarkirî derkeve.

Di dema pêkanîna skrîptê de, dê hemî karûbar li pelrêçê bêne daxistin docker_tools, encamên xebata wan di navnîşan de ne docker_tools/json, û HTML bi raporê dê di pelê de be results.html.

Mînak derana skrîptê

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

Wêneyê Docker bi hemî karûbaran re

Wekî alternatîfek sêyemîn, min du Dockerfiles hêsan berhev kir ku wêneyek bi karûbarên ewlehiyê re biafirîne. Yek Dockerfile dê alîkariya avakirina komek ji bo şopandina wêneyek ji depoyekê bike, ya duyemîn (Dockerfile_tar) dê alîkariya avakirina komek ji bo şopandina pelek tar bi wêneyek bike.

1. Pelê Docker û nivîsarên têkildar ji depoyê bistînin https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. Em wê ji bo civînê dest pê dikin:

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

3. Piştî ku civîn qediya, em ji wêneyê konteynirek ava dikin. Di heman demê de, em guhêrbara jîngehê DOCKERIMAGE bi navê wêneya ku em jê re eleqedar dibin re derbas dikin û Dockerfile ya ku em dixwazin ji makîneya xwe analîz bikin li pelê siwar bikin. /Dockerfile (hişyar bikin ku riya bêkêmasî ya vê pelê hewce ye):

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

Encam

Me ji bo şopandina hunerên Docker-ê li yek komek bingehîn a karûbaran nihêrî, ku, bi dîtina min, pir bi bandor beşek maqûl ya hewcedariyên ewlehiya wêneyê vedigire. Di heman demê de hejmareke mezin ji amûrên drav û belaş hene ku dikarin heman kontrolê bikin, raporên xweş bikêşin an tenê di moda konsolê de bixebitin, pergalên rêveberiya konteyneran veşêrin, hwd. Dibe ku hûrguliyek li ser van amûran û çawaniya yekkirina wan hinekî paşê xuya bibe. .

Tiştê baş di derbarê komek amûrên ku di vê gotarê de hatî destnîşan kirin ev e ku ew hemî çavkaniyek vekirî ne û hûn dikarin bi wan û amûrên din ên mîna wan biceribînin da ku bibînin ka çi li gorî hewcedarî û binesaziya we ye. Bê guman, hemî qelsiyên ku têne dîtin divê ji bo serîlêdanê di şert û mercên taybetî de bêne lêkolîn kirin, lê ev mijarek ji bo gotarek mezin a pêşerojê ye.

Ez hêvî dikim ku ev rêber, nivîsar û karûbar dê ji we re bibe alîkar û bibe xalek destpêkek ji bo afirandina binesaziyek ewletir di warê konteynirkirinê de.

Source: www.habr.com

Add a comment