Mga pamaagi ug mga pananglitan sa pagpatuman sa mga utilities alang sa pagsusi sa seguridad sa Docker

Mga pamaagi ug mga pananglitan sa pagpatuman sa mga utilities alang sa pagsusi sa seguridad sa Docker
Hoy Habr!

Sa modernong kamatuoran, tungod sa nagkadako nga papel sa containerization sa mga proseso sa pag-uswag, ang isyu sa pagsiguro sa seguridad sa nagkalain-laing mga yugto ug mga entidad nga may kalabutan sa mga sudlanan dili ang pinakagamay nga importante nga isyu. Ang pagpahigayon ug manwal nga mga pagsusi kay makagugol ug panahon, mao nga maayong ideya nga himoon ang labing menos ang unang mga lakang padulong sa pag-automate niini nga proseso.

Sa kini nga artikulo, akong ipaambit ang andam nga mga script alang sa pagpatuman sa daghang mga gamit sa seguridad sa Docker ug mga panudlo kung giunsa ang pag-deploy sa usa ka gamay nga baroganan sa demo aron sulayan kini nga proseso. Mahimo nimong gamiton ang mga materyales aron mag-eksperimento kung giunsa pag-organisar ang proseso sa pagsulay sa seguridad sa mga imahe ug panudlo sa Dockerfile. Klaro nga lahi ang imprastraktura sa pag-uswag ug pagpatuman sa tanan, busa sa ubos maghatag ako daghang posible nga kapilian.

Mga gamit sa pagsusi sa seguridad

Adunay daghang daghang lainlaing mga aplikasyon sa katabang ug mga script nga nagpahigayon mga pagsusi sa lainlaing mga aspeto sa imprastraktura sa Docker. Ang uban niini gihulagway na sa miaging artikulo (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), ug sa kini nga materyal gusto nakong ipunting ang tulo niini, nga naglangkob sa kadaghanan sa mga kinahanglanon sa seguridad alang sa mga imahe sa Docker nga gitukod sa proseso sa pag-uswag. Dugang pa, magpakita usab ako usa ka pananglitan kung giunsa kini nga tulo nga mga utilities mahimong konektado sa usa ka pipeline aron mahimo ang mga pagsusi sa seguridad.

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

Usa ka yano nga console utility nga makatabang, ingon usa ka una nga pagbanabana, pagtimbang-timbang sa pagkahusto ug pagkaluwas sa mga panudlo sa Dockerfile (pananglitan, gamit lamang ang awtorisado nga mga rehistro sa imahe o gamit ang sudo).

Mga pamaagi ug mga pananglitan sa pagpatuman sa mga utilities alang sa pagsusi sa seguridad sa Docker

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

Usa ka console utility nga nagtrabaho sa usa ka imahe (o adunay usa ka gitipig nga tar archive sa usa ka imahe), nga nagsusi sa pagkahusto ug seguridad sa usa ka partikular nga imahe nga ingon niana, pag-analisar sa mga lut-od ug pag-configure niini - diin ang mga tiggamit gihimo, kung unsang mga panudlo ang gigamit, nga ang mga volume gi-mount, ang presensya sa usa ka walay sulod nga password, ug uban pa d. Sa pagkakaron ang gidaghanon sa mga tseke dili kaayo dako ug gibase sa pipila sa atong kaugalingong mga tseke ug rekomendasyon CIS (Center for Internet Security) Benchmark alang sa Docker.
Mga pamaagi ug mga pananglitan sa pagpatuman sa mga utilities alang sa pagsusi sa seguridad sa Docker

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

Kini nga utility gitumong sa pagpangita sa duha ka matang sa mga kahuyangan - mga problema sa OS builds (gisuportahan sa Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu) ug mga problema sa dependencies (Gemfile.lock, Pipfile.lock, composer.lock, package -lock.json , yarn.lock, cargo.lock). Mahimong ma-scan sa Trivy ang usa ka imahe sa repository ug usa ka lokal nga imahe, ug mahimo usab nga ma-scan base sa gibalhin nga .tar file nga adunay imahe sa Docker.

Mga pamaagi ug mga pananglitan sa pagpatuman sa mga utilities alang sa pagsusi sa seguridad sa Docker

Mga kapilian alang sa pagpatuman sa mga utilities

Aron masulayan ang gihulagway nga mga aplikasyon sa usa ka nahilit nga palibot, maghatag ako mga panudlo alang sa pag-install sa tanan nga mga gamit sa usa ka medyo gipasimple nga proseso.

Ang panguna nga ideya mao ang pagpakita kung giunsa nimo ipatuman ang awtomatikong pag-verify sa sulud sa mga Dockerfile ug mga imahe sa Docker nga gihimo sa panahon sa pag-uswag.

Ang tseke mismo naglangkob sa mosunod nga mga lakang:

  1. Pagsusi sa pagkahusto ug kaluwasan sa mga instruksyon sa Dockerfile gamit ang linter utility Hadolint
  2. Pagsusi sa pagkahusto ug kaluwasan sa katapusan ug intermediate nga mga hulagway gamit ang usa ka utility Dockle
  3. Pagsusi alang sa presensya sa nahibal-an sa publiko nga mga kahuyangan (CVE) sa base nga imahe ug daghang mga dependency - gamit ang utility Trivy

Sa ulahi sa artikulo maghatag ako og tulo ka kapilian alang sa pagpatuman niini nga mga lakang:
Ang una mao ang pag-configure sa pipeline sa CI / CD gamit ang GitLab ingon usa ka pananglitan (nga adunay usa ka paghulagway sa proseso sa pagpataas sa usa ka pananglitan sa pagsulay).
Ang ikaduha mao ang paggamit sa usa ka shell script.
Ang ikatulo naglakip sa pagtukod og usa ka Docker nga imahe aron ma-scan ang mga imahe sa Docker.
Mahimo nimong pilion ang kapilian nga labing angay kanimo, ibalhin kini sa imong imprastraktura ug ipahiangay kini sa imong mga panginahanglan.

Ang tanan nga gikinahanglan nga mga file ug dugang nga mga panudlo anaa usab sa repository: https://github.com/Swordfish-Security/docker_cicd

Paghiusa sa GitLab CI/CD

Sa una nga kapilian, atong tan-awon kung giunsa nimo ipatuman ang mga pagsusi sa seguridad gamit ang GitLab repository system ingon usa ka pananglitan. Dinhi atong tun-an ang mga lakang ug mahibal-an kung giunsa ang pag-install sa usa ka palibot sa pagsulay sa GitLab gikan sa wala, paghimo usa ka proseso sa pag-scan ug paglansad sa mga gamit alang sa pagsusi sa pagsulay nga Dockerfile ug usa ka random nga imahe - ang aplikasyon sa JuiceShop.

Pag-instalar sa GitLab
1. I-install ang Docker:

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

2. Idugang ang kasamtangang user sa docker group aron makatrabaho ka sa docker nga walay sudo:

sudo addgroup <username> docker

3. Pangitaa ang imong IP:

ip addr

4. I-install ug ilunsad ang GitLab sa sudlanan, ilisan ang IP address sa hostname sa imong kaugalingon:

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

Naghulat kami hangtod makompleto sa GitLab ang tanan nga kinahanglan nga mga pamaagi sa pag-install (mahimo nimong bantayan ang proseso pinaagi sa output sa log file: docker logs -f gitlab).

5. Ablihi ang imong lokal nga IP sa browser ug tan-awa ang usa ka panid nga naghangyo kanimo sa pag-ilis sa password para sa root user:
Mga pamaagi ug mga pananglitan sa pagpatuman sa mga utilities alang sa pagsusi sa seguridad sa Docker
Paghimo og bag-ong password ug adto sa GitLab.

6. Paghimo ug bag-ong proyekto, pananglitan cicd-test ug i-initialize kini gamit ang start file README.md:
Mga pamaagi ug mga pananglitan sa pagpatuman sa mga utilities alang sa pagsusi sa seguridad sa Docker
7. Karon kinahanglan namong i-install ang GitLab Runner: usa ka ahente nga modagan sa tanang gikinahanglan nga mga operasyon kon hangyoon.
I-download ang pinakabag-o nga bersyon (sa kini nga kaso, alang sa 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. Himoa kini nga executable:

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

9. Pagdugang og OS user para sa Runner ug sugdi ang serbisyo:

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

Kini kinahanglan nga tan-awon sama niini:

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. Karon among girehistro ang Runner aron kini maka-interact sa among GitLab nga pananglitan.
Aron mahimo kini, ablihi ang Settings-CI/CD page (http://OUR_IP_ADDRESS/root/cicd-test/-/settings/ci_cd) ug sa Runners tab pangitaa ang URL ug Registration token:
Mga pamaagi ug mga pananglitan sa pagpatuman sa mga utilities alang sa pagsusi sa seguridad sa Docker
11. Register Runner pinaagi sa pag-ilis sa URL ug Registration token:

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"

Ingon usa ka sangputanan, nakakuha kami usa ka andam nga nagtrabaho nga GitLab, diin kinahanglan namon nga idugang ang mga panudlo aron masugdan ang among mga gamit. Sa kini nga demo wala kami mga lakang sa paghimo sa aplikasyon ug pag-containize niini, apan sa usa ka tinuod nga palibot kini mag-una sa mga lakang sa pag-scan ug makamugna og mga imahe ug usa ka Dockerfile alang sa pagtuki.

configuration sa pipeline

1. Idugang ang mga file sa repositoryo mydockerfile.df (Kini usa ka pagsulay nga Dockerfile nga among susihon) ug ang GitLab CI/CD nga file sa pagsumpo sa proseso .gitlab-cicd.yml, nga naglista sa mga panudlo alang sa mga scanner (timan-i ang tulbok sa ngalan sa file).

Ang YAML configuration file adunay mga instruksyon sa pagpadagan sa tulo ka mga utilities (Hadolint, Dockle, ug Trivy) nga mag-analisar sa pinili nga Dockerfile ug ang hulagway nga gitakda sa DOCKERFILE variable. Ang tanan nga gikinahanglan nga mga file mahimong makuha gikan sa repository: https://github.com/Swordfish-Security/docker_cicd/

Kinutlo gikan sa mydockerfile.df (Kini usa ka abstract nga file nga adunay usa ka hugpong sa mga arbitraryong instruksyon lamang aron ipakita ang operasyon sa utility). Direkta nga link sa file: mydockerfile.df

Mga sulod sa 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

Ang configuration nga YAML sama niini (ang file mismo makita pinaagi sa direktang link dinhi: .gitlab-ci.yml):

Mga sulod sa .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

Kung gikinahanglan, mahimo usab nimo nga i-scan ang mga na-save nga mga imahe sa porma sa usa ka .tar archive (bisan pa, kinahanglan nimo nga usbon ang input parameters alang sa mga utilities sa YAML file)

NB: Kinahanglan nga ma-install ang Trivy rpm ΠΈ git. Kung dili, makamugna kini og mga sayup kung mag-scan sa mga imahe nga nakabase sa RedHat ug makadawat mga update sa database sa pagkahuyang.

2. Human sa pagdugang sa mga file sa repository, sumala sa mga instruksyon sa among configuration file, ang GitLab awtomatik nga magsugod sa proseso sa pagtukod ug pag-scan. Sa tab nga CI/CD β†’ Pipelines imong makita ang pag-uswag sa mga instruksyon.

Ingon usa ka sangputanan, kami adunay upat nga mga buluhaton. Tulo kanila direkta nga nag-atubang sa pag-scan, ug ang katapusan (Report) nagkolekta usa ka yano nga taho gikan sa nagkatag nga mga file nga adunay mga resulta sa pag-scan.
Mga pamaagi ug mga pananglitan sa pagpatuman sa mga utilities alang sa pagsusi sa seguridad sa Docker
Sa kasagaran, ang Trivy mohunong sa pagdagan kung ang CRITICAL vulnerabilities makita sa imahe o dependencies. Sa samang higayon, ang Hadolint kanunay nga nagbalik sa usa ka Success code tungod kay kini kanunay nga moresulta sa mga komentaryo, nga maoy hinungdan sa pagtukod sa paghunong.

Depende sa imong piho nga mga kinahanglanon, mahimo nimong i-configure ang usa ka exit code aron kung kini nga mga utility makamatikod sa mga problema sa usa ka piho nga kritikal, sila usab mohunong sa proseso sa pagtukod. Sa among kaso, ang pagtukod mohunong lamang kung makit-an ni Trivy ang usa ka kahuyang nga adunay kritikal nga pagkasensitibo nga among gipiho sa variable nga SHOWSTOPPER sa .gitlab-ci.yml.
Mga pamaagi ug mga pananglitan sa pagpatuman sa mga utilities alang sa pagsusi sa seguridad sa Docker

Ang resulta sa matag utility mahimong matan-aw sa log sa matag scanning task, direkta sa json files sa artifacts section, o sa usa ka simple nga HTML report (dugang pa niana sa ubos):
Mga pamaagi ug mga pananglitan sa pagpatuman sa mga utilities alang sa pagsusi sa seguridad sa Docker

3. Aron ipresentar ang mga taho sa utility sa usa ka gamay nga mas mabasa sa tawo nga porma, usa ka gamay nga script sa Python ang gigamit sa pag-convert sa tulo ka JSON file ngadto sa usa ka HTML file nga adunay usa ka lamesa sa mga depekto.
Kini nga script gilunsad sa usa ka lahi nga buluhaton sa Report, ug ang katapusan nga artifact usa ka HTML file nga adunay usa ka taho. Ang tinubdan sa script anaa usab sa repository ug mahimong ipahiangay sa imong mga panginahanglan, kolor, ug uban pa.
Mga pamaagi ug mga pananglitan sa pagpatuman sa mga utilities alang sa pagsusi sa seguridad sa Docker

Shell script

Ang ikaduha nga kapilian angay alang sa mga kaso kung kinahanglan nimo nga susihon ang mga imahe sa Docker sa gawas sa sistema sa CI / CD o kinahanglan nimo nga adunay tanan nga mga panudlo sa usa ka porma nga mahimong ipatuman direkta sa host. Kini nga opsyon gitabonan sa usa ka andam nga hinimo nga shell script nga mahimong ipadagan sa usa ka limpyo nga virtual (o bisan tinuod) nga makina. Ang script nagpatuman sa parehas nga mga panudlo sama sa gitlab-runner nga gihulagway sa ibabaw.

Aron malampuson nga modagan ang script, kinahanglan nga i-install ang Docker sa sistema ug ang kasamtangan nga tiggamit kinahanglan naa sa grupo sa docker.

Ang script mismo makita dinhi: docker_sec_check.sh

Sa sinugdanan sa file, ang mga variable nagtino kung unsang imahe ang kinahanglan nga ma-scan ug kung unsang mga depekto sa kritikal nga hinungdan nga mogawas ang Trivy utility nga adunay gipiho nga code sa sayup.

Atol sa pagpatuman sa script, ang tanan nga mga utilities ma-download sa direktoryo docker_tools, ang mga resulta sa ilang trabaho anaa sa direktoryo docker_tools/json, ug ang HTML nga adunay report anaa sa file resulta.html.

Pananglitan nga output sa script

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

Imahe sa Docker nga adunay tanan nga mga gamit

Isip usa ka ikatulo nga alternatibo, nag-compile ako og duha ka yano nga Dockerfiles aron makahimo og usa ka imahe nga adunay mga gamit sa seguridad. Ang usa ka Dockerfile makatabang sa paghimo og usa ka set alang sa pag-scan sa usa ka imahe gikan sa usa ka repository, ang ikaduha (Dockerfile_tar) makatabang sa paghimo og usa ka set alang sa pag-scan sa usa ka tar file nga adunay usa ka imahe.

1. Kuhaa ang katugbang nga Docker file ug mga script gikan sa repository https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. Among gilusad kini alang sa asembliya:

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

3. Human makompleto ang asembliya, maghimo kami og sudlanan gikan sa hulagway. Sa parehas nga oras, gipasa namon ang DOCKERIMAGE environment variable nga adunay ngalan sa imahe nga gusto namon ug i-mount ang Dockerfile nga gusto namon analisahon gikan sa among makina hangtod sa file. /Dockerfile (Timan-i nga ang hingpit nga agianan sa kini nga file gikinahanglan):

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

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

Gitan-aw namon ang usa ra ka sukaranan nga hugpong sa mga gamit alang sa pag-scan sa mga artifact sa Docker, nga, sa akong opinyon, epektibo kaayo nga naglangkob sa usa ka desente nga bahin sa mga kinahanglanon sa seguridad sa imahe. Adunay usab daghang mga bayad ug libre nga mga himan nga makahimo sa parehas nga mga tseke, pagdrowing og matahum nga mga taho o pagtrabaho nga puro sa console mode, pagtabon sa mga sistema sa pagdumala sa sulud, ug uban pa. .

Ang maayo nga butang bahin sa hugpong sa mga himan nga gihulagway sa kini nga artikulo mao nga silang tanan bukas nga gigikanan ug mahimo nimo silang eksperimento ug uban pang parehas nga mga himan aron makit-an kung unsa ang angay sa imong mga panginahanglanon ug imprastraktura. Siyempre, ang tanan nga mga kahuyangan nga nakit-an kinahanglan nga tun-an alang sa paggamit sa piho nga mga kondisyon, apan kini usa ka hilisgutan alang sa umaabot nga dako nga artikulo.

Nanghinaut ko nga kini nga giya, mga script ug mga utilities makatabang kanimo ug mahimong usa ka punto sa pagsugod sa paghimo sa usa ka mas luwas nga imprastraktura sa lugar sa containerization.

Source: www.habr.com

Idugang sa usa ka comment