Dulliau ac enghreifftiau o weithredu cyfleustodau ar gyfer gwirio diogelwch Docker

Dulliau ac enghreifftiau o weithredu cyfleustodau ar gyfer gwirio diogelwch Docker
Hei Habr!

Mewn realiti modern, oherwydd rôl gynyddol cynhwysyddion mewn prosesau datblygu, nid y mater o sicrhau diogelwch gwahanol gamau ac endidau sy'n gysylltiedig â chynwysyddion yw'r mater lleiaf pwysig. Mae cynnal gwiriadau â llaw yn cymryd llawer o amser, felly byddai'n syniad da cymryd o leiaf y camau cychwynnol tuag at awtomeiddio'r broses hon.

Yn yr erthygl hon, byddaf yn rhannu sgriptiau parod ar gyfer gweithredu nifer o gyfleustodau diogelwch Docker a chyfarwyddiadau ar sut i ddefnyddio stondin arddangos bach i brofi'r broses hon. Gallwch ddefnyddio'r deunyddiau i arbrofi gyda sut i drefnu'r broses o brofi diogelwch delweddau a chyfarwyddiadau Dockerfile. Mae'n amlwg bod seilwaith datblygu a gweithredu pawb yn wahanol, felly isod byddaf yn darparu sawl opsiwn posibl.

Cyfleustodau gwirio diogelwch

Mae yna nifer fawr o wahanol gymwysiadau cynorthwywyr a sgriptiau sy'n cynnal gwiriadau ar wahanol agweddau ar seilwaith Docker. Disgrifiwyd rhai ohonynt eisoes yn yr erthygl flaenorol (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), ac yn y deunydd hwn hoffwn ganolbwyntio ar dri ohonynt, sy'n cwmpasu mwyafrif y gofynion diogelwch ar gyfer delweddau Docker a adeiladwyd yn ystod y broses ddatblygu. Yn ogystal, byddaf hefyd yn dangos enghraifft o sut y gellir cysylltu'r tri chyfleustodau hyn i mewn i un biblinell i gyflawni gwiriadau diogelwch.

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

Cyfleustodau consol eithaf syml sy'n helpu, fel brasamcan cyntaf, i werthuso cywirdeb a diogelwch cyfarwyddiadau Dockerfile (er enghraifft, gan ddefnyddio cofrestrfeydd delwedd awdurdodedig yn unig neu ddefnyddio sudo).

Dulliau ac enghreifftiau o weithredu cyfleustodau ar gyfer gwirio diogelwch Docker

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

Cyfleustodau consol sy'n gweithio gyda delwedd (neu gydag archif tar wedi'i gadw o ddelwedd), sy'n gwirio cywirdeb a diogelwch delwedd benodol fel y cyfryw, gan ddadansoddi ei haenau a'i ffurfweddiad - pa ddefnyddwyr sy'n cael eu creu, pa gyfarwyddiadau a ddefnyddir, pa mae cyfeintiau wedi'u gosod, presenoldeb cyfrinair gwag, ac ati. d. Hyd yn hyn nid yw nifer y sieciau'n fawr iawn ac mae'n seiliedig ar nifer o'n gwiriadau a'n hargymhellion ein hunain Meincnod CIS (Canolfan Diogelwch Rhyngrwyd). am Docker.
Dulliau ac enghreifftiau o weithredu cyfleustodau ar gyfer gwirio diogelwch Docker

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

Mae'r cyfleustodau hwn wedi'i anelu at ddod o hyd i ddau fath o wendidau - problemau gydag adeiladu OS (a gefnogir gan Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu) a phroblemau gyda dibyniaethau (Gemfile.lock, Pipfile.lock, composer.lock, pecyn -clo.json , edafedd.lock, cargo.lock). Gall Trivy sganio delwedd yn y gadwrfa a delwedd leol, a gall hefyd sganio yn seiliedig ar y ffeil .tar a drosglwyddwyd gyda delwedd Docker.

Dulliau ac enghreifftiau o weithredu cyfleustodau ar gyfer gwirio diogelwch Docker

Opsiynau ar gyfer gweithredu cyfleustodau

Er mwyn rhoi cynnig ar y cymwysiadau a ddisgrifir mewn amgylchedd anghysbell, byddaf yn darparu cyfarwyddiadau ar gyfer gosod yr holl gyfleustodau mewn proses symlach braidd.

Y prif syniad yw dangos sut y gallwch chi weithredu dilysiad cynnwys awtomatig o ddelweddau Dockerfiles a Docker sy'n cael eu creu yn ystod y datblygiad.

Mae'r gwiriad ei hun yn cynnwys y camau canlynol:

  1. Gwirio cywirdeb a diogelwch cyfarwyddiadau Dockerfile gan ddefnyddio cyfleustodau lint Hadolint
  2. Gwirio cywirdeb a diogelwch y delweddau terfynol a chanolradd gan ddefnyddio cyfleustodau Docwl
  3. Gwirio am bresenoldeb gwendidau hysbys yn gyhoeddus (CVE) yn y ddelwedd sylfaenol a nifer o ddibyniaethau - gan ddefnyddio'r cyfleustodau Dibwys

Yn ddiweddarach yn yr erthygl byddaf yn rhoi tri opsiwn ar gyfer gweithredu'r camau hyn:
Y cyntaf yw trwy ffurfweddu'r biblinell CI/CD gan ddefnyddio GitLab fel enghraifft (gyda disgrifiad o'r broses o godi enghraifft prawf).
Yr ail yw defnyddio sgript cragen.
Mae'r trydydd un yn ymwneud ag adeiladu delwedd Docker i sganio delweddau Docker.
Gallwch ddewis yr opsiwn sydd fwyaf addas i chi, ei drosglwyddo i'ch seilwaith a'i addasu i'ch anghenion.

Mae'r holl ffeiliau angenrheidiol a chyfarwyddiadau ychwanegol hefyd wedi'u lleoli yn y gadwrfa: https://github.com/Swordfish-Security/docker_cicd

Integreiddio i GitLab CI/CD

Yn yr opsiwn cyntaf, byddwn yn edrych ar sut y gallwch chi weithredu gwiriadau diogelwch gan ddefnyddio system ystorfa GitLab fel enghraifft. Yma byddwn yn mynd trwy'r camau ac yn darganfod sut i osod amgylchedd prawf gyda GitLab o'r dechrau, creu proses sganio a lansio cyfleustodau ar gyfer gwirio'r prawf Dockerfile a delwedd ar hap - y cymhwysiad JuiceShop.

Gosod GitLab
1. Gosod Docker:

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

2. Ychwanegwch y defnyddiwr presennol i'r grŵp docwyr fel y gallwch weithio gyda docwr heb ddefnyddio sudo:

sudo addgroup <username> docker

3. Dod o hyd i'ch IP:

ip addr

4. Gosod a lansio GitLab yn y cynhwysydd, gan ddisodli'r cyfeiriad IP yn yr enw gwesteiwr gyda'ch un chi:

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

Rydym yn aros nes bod GitLab yn cwblhau'r holl weithdrefnau gosod angenrheidiol (gallwch fonitro'r broses trwy allbwn y ffeil log: logiau docwyr -f gitlab).

5. Agorwch eich IP lleol yn y porwr a gweld tudalen yn gofyn ichi newid y cyfrinair ar gyfer y defnyddiwr gwraidd:
Dulliau ac enghreifftiau o weithredu cyfleustodau ar gyfer gwirio diogelwch Docker
Gosodwch gyfrinair newydd ac ewch i GitLab.

6. Creu prosiect newydd, er enghraifft cicd-test a'i gychwyn gyda'r ffeil cychwyn DARLLENWCH.md:
Dulliau ac enghreifftiau o weithredu cyfleustodau ar gyfer gwirio diogelwch Docker
7. Nawr mae angen i ni osod GitLab Runner: asiant a fydd yn rhedeg yr holl weithrediadau angenrheidiol ar gais.
Dadlwythwch y fersiwn ddiweddaraf (yn yr achos hwn, ar gyfer 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. Ei gwneud yn weithredadwy:

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

9. Ychwanegu defnyddiwr OS ar gyfer Runner a dechrau'r gwasanaeth:

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

Dylai edrych yn rhywbeth fel hyn:

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. Nawr rydym yn cofrestru'r Rhedwr fel y gall ryngweithio â'n hachos GitLab.
I wneud hyn, agorwch y dudalen Settings-CI/CD (http://OUR_IP_ADDRESS/root/cicd-test/-/settings/ci_cd) ac ar y tab Runners dewch o hyd i'r URL a'r tocyn Cofrestru:
Dulliau ac enghreifftiau o weithredu cyfleustodau ar gyfer gwirio diogelwch Docker
11. Rhedegwr y Gofrestr trwy amnewid yr URL a'r tocyn Cofrestru:

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"

O ganlyniad, rydyn ni'n cael GitLab parod sy'n gweithio, y mae angen i ni ychwanegu cyfarwyddiadau iddo i gychwyn ein cyfleustodau. Yn y demo hwn nid oes gennym y camau i adeiladu'r cymhwysiad a'i gynnwys, ond mewn amgylchedd go iawn byddai'r rhain yn rhagflaenu'r camau sganio ac yn cynhyrchu delweddau a Dockerfile i'w dadansoddi.

cyfluniad piblinell

1. Ychwanegu ffeiliau i'r ystorfa mydockerfile.df (dyma Dockerfile prawf y byddwn yn ei wirio) a ffeil ffurfweddu proses GitLab CI/CD .gitlab-cicd.yml, sy'n rhestru cyfarwyddiadau ar gyfer sganwyr (sylwch ar y dot yn enw'r ffeil).

Mae ffeil cyfluniad YAML yn cynnwys cyfarwyddiadau i redeg tri chyfleustodau (Hadolint, Dockle, a Trivy) a fydd yn dadansoddi'r Dockerfile a ddewiswyd a'r ddelwedd a nodir yn y newidyn DOCKERFILE. Gellir cymryd yr holl ffeiliau angenrheidiol o'r gadwrfa: https://github.com/Swordfish-Security/docker_cicd/

Dyfyniad o mydockerfile.df (ffeil haniaethol yw hon gyda set o gyfarwyddiadau mympwyol yn unig i ddangos gweithrediad y cyfleustodau). Dolen uniongyrchol i'r ffeil: mydockerfile.df

Cynnwys 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

Mae'r ffurfweddiad YAML yn edrych fel hyn (gellir dod o hyd i'r ffeil ei hun trwy'r ddolen uniongyrchol yma: .gitlab-ci.yml):

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

Os oes angen, gallwch hefyd sganio delweddau sydd wedi'u cadw ar ffurf archif .tar (fodd bynnag, bydd angen i chi newid y paramedrau mewnbwn ar gyfer y cyfleustodau yn y ffeil YAML)

DS: Mae angen gosod Trivy rpm и git. Fel arall, bydd yn cynhyrchu gwallau wrth sganio delweddau sy'n seiliedig ar RedHat a derbyn diweddariadau i'r gronfa ddata bregusrwydd.

2. Ar ôl ychwanegu ffeiliau i'r ystorfa, yn ôl y cyfarwyddiadau yn ein ffeil ffurfweddu, bydd GitLab yn cychwyn y broses adeiladu a sganio yn awtomatig. Ar y tab Piblinellau CI/CD → gallwch weld hynt y cyfarwyddiadau.

O ganlyniad, mae gennym bedair tasg. Mae tri ohonynt yn delio'n uniongyrchol â sganio, ac mae'r un olaf (Adroddiad) yn casglu adroddiad syml o ffeiliau gwasgaredig gyda chanlyniadau sganio.
Dulliau ac enghreifftiau o weithredu cyfleustodau ar gyfer gwirio diogelwch Docker
Yn ddiofyn, mae Trivy yn stopio rhedeg os canfyddir gwendidau CRITIGOL yn y ddelwedd neu'r dibyniaethau. Ar yr un pryd, mae Hadolint bob amser yn dychwelyd cod Llwyddiant oherwydd ei fod bob amser yn arwain at sylwadau, sy'n achosi i'r adeiladu ddod i ben.

Yn dibynnu ar eich gofynion penodol, gallwch ffurfweddu cod ymadael fel bod pan fydd y cyfleustodau hyn yn canfod problemau o gritigol penodol, byddant hefyd yn atal y broses adeiladu. Yn ein hachos ni, bydd yr adeiladwaith yn dod i ben dim ond os bydd Trivy yn canfod bregusrwydd gyda'r critigoldeb a nodwyd gennym yn y newidyn SHOWSTOPPER yn .gitlab-ci.yml.
Dulliau ac enghreifftiau o weithredu cyfleustodau ar gyfer gwirio diogelwch Docker

Gellir gweld canlyniad pob cyfleustodau yn log pob tasg sganio, yn uniongyrchol yn y ffeiliau json yn yr adran arteffactau, neu mewn adroddiad HTML syml (mwy ar hynny isod):
Dulliau ac enghreifftiau o weithredu cyfleustodau ar gyfer gwirio diogelwch Docker

3. I gyflwyno adroddiadau cyfleustodau mewn ffurf ychydig yn fwy darllenadwy gan bobl, defnyddir sgript Python bach i drosi tair ffeil json yn un ffeil HTML gyda thabl o ddiffygion.
Mae'r sgript hon yn cael ei lansio gan dasg Adroddiad ar wahân, ac mae ei arteffact terfynol yn ffeil HTML gydag adroddiad. Mae ffynhonnell y sgript hefyd yn y storfa a gellir ei haddasu i weddu i'ch anghenion, lliwiau, ac ati.
Dulliau ac enghreifftiau o weithredu cyfleustodau ar gyfer gwirio diogelwch Docker

Sgript cregyn

Mae'r ail opsiwn yn addas ar gyfer achosion pan fydd angen i chi wirio delweddau Docker y tu allan i'r system CI / CD neu mae angen i chi gael yr holl gyfarwyddiadau ar ffurf y gellir eu gweithredu'n uniongyrchol ar y gwesteiwr. Mae'r opsiwn hwn wedi'i gwmpasu gan sgript cregyn parod y gellir ei rhedeg ar beiriant rhithwir glân (neu hyd yn oed go iawn). Mae'r sgript yn gweithredu'r un cyfarwyddiadau â'r rhedwr gitlab a ddisgrifir uchod.

Er mwyn i'r sgript redeg yn llwyddiannus, rhaid gosod Docker ar y system a rhaid i'r defnyddiwr presennol fod yn y grŵp docwyr.

Gellir dod o hyd i'r sgript ei hun yma: docker_sec_check.sh

Ar ddechrau'r ffeil, mae newidynnau'n nodi pa ddelwedd sydd angen ei sganio a pha ddiffygion critigol fydd yn achosi i'r cyfleustodau Trivy adael gyda'r cod gwall penodedig.

Yn ystod gweithredu sgript, bydd yr holl gyfleustodau'n cael eu llwytho i lawr i'r cyfeiriadur docker_tools, mae canlyniadau eu gwaith yn y cyfeiriadur docker_tools/json, a bydd yr HTML gyda'r adroddiad yn y ffeil canlyniadau.html.

Allbwn sgript enghreifftiol

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

Delwedd docwr gyda'r holl gyfleustodau

Fel trydydd dewis arall, lluniais ddau Dockerfiles syml i greu delwedd gyda chyfleustodau diogelwch. Bydd un Dockerfile yn helpu i adeiladu set ar gyfer sganio delwedd o ystorfa, bydd yr ail (Dockerfile_tar) yn helpu i adeiladu set ar gyfer sganio ffeil tar gyda delwedd.

1. Cymerwch y ffeil Docker cyfatebol a sgriptiau o'r ystorfa https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. Rydym yn ei lansio ar gyfer cynulliad:

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

3. Ar ôl i'r cynulliad gael ei gwblhau, rydym yn creu cynhwysydd o'r ddelwedd. Ar yr un pryd, rydym yn pasio'r newidyn amgylchedd DOCKERIMAGE gydag enw'r ddelwedd y mae gennym ddiddordeb ynddi ac yn gosod y Dockerfile yr ydym am ei ddadansoddi o'n peiriant i'r ffeil /Dockerfile (sylwch fod angen y llwybr absoliwt i'r ffeil hon):

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

Canfyddiadau

Edrychasom ar un set sylfaenol o gyfleustodau yn unig ar gyfer sganio arteffactau Docker, sydd, yn fy marn i, yn ymdrin yn effeithiol iawn â rhan weddus o'r gofynion diogelwch delwedd. Mae yna hefyd nifer fawr o offer taledig a rhad ac am ddim a all berfformio'r un gwiriadau, tynnu adroddiadau hardd neu weithio yn y modd consol yn unig, gorchuddio systemau rheoli cynwysyddion, ac ati. Efallai y bydd trosolwg o'r offer hyn a sut i'w hintegreiddio yn ymddangos ychydig yn ddiweddarach .

Y peth da am y set o offer a ddisgrifir yn yr erthygl hon yw eu bod i gyd yn ffynhonnell agored a gallwch arbrofi gyda nhw ac offer tebyg eraill i ddod o hyd i'r hyn sy'n addas i'ch anghenion a'ch seilwaith. Wrth gwrs, dylid astudio'r holl wendidau a ddarganfyddir ar gyfer cymhwysedd mewn amodau penodol, ond mae hwn yn bwnc ar gyfer erthygl fawr yn y dyfodol.

Rwy'n gobeithio y bydd y canllaw hwn, y sgriptiau a'r cyfleustodau yn eich helpu chi ac yn dod yn fan cychwyn ar gyfer creu seilwaith mwy diogel ym maes amlwythiad.

Ffynhonnell: hab.com

Ychwanegu sylw