Հե՜յ Հաբր։
Ժամանակակից իրականության մեջ, ելնելով զարգացման գործընթացներում կոնտեյներացման աճող դերից, բեռնարկղերի հետ կապված տարբեր փուլերի և սուբյեկտների անվտանգության ապահովման խնդիրը ոչ պակաս կարևոր խնդիր է։ Ձեռքով ստուգումներ կատարելը ժամանակատար է, ուստի լավ գաղափար կլինի գոնե նախնական քայլեր ձեռնարկել այս գործընթացի ավտոմատացման ուղղությամբ:
Այս հոդվածում ես կկիսվեմ պատրաստի սկրիպտներով մի քանի Docker անվտանգության կոմունալ ծրագրերի իրականացման համար և հրահանգներ, թե ինչպես տեղադրել փոքր ցուցադրական ստենդ՝ այս գործընթացը փորձարկելու համար: Դուք կարող եք օգտագործել նյութերը՝ փորձարկելու համար, թե ինչպես կազմակերպել Dockerfile-ի պատկերների և հրահանգների անվտանգության փորձարկման գործընթացը: Հասկանալի է, որ յուրաքանչյուրի զարգացման և ներդրման ենթակառուցվածքը տարբեր է, ուստի ստորև ես կներկայացնեմ մի քանի հնարավոր տարբերակներ:
Անվտանգության ստուգման կոմունալ ծառայություններ
Կան մեծ թվով տարբեր օգնական հավելվածներ և սցենարներ, որոնք ստուգում են Docker ենթակառուցվածքի տարբեր ասպեկտները: Նրանցից ոմանք արդեն նկարագրված են նախորդ հոդվածում (
Հադոլինթ
Բավականին պարզ վահանակ, որն օգնում է, որպես առաջին մոտարկում, գնահատել Dockerfile-ի հրահանգների ճիշտությունն ու անվտանգությունը (օրինակ՝ օգտագործելով միայն լիազորված պատկերների գրանցամատյանները կամ օգտագործելով sudo):
Դոկլ
Վահանակի օգտակար ծրագիր, որն աշխատում է պատկերի հետ (կամ պատկերի պահպանված tar արխիվի հետ), որը ստուգում է որոշակի պատկերի ճիշտությունն ու անվտանգությունը որպես այդպիսին՝ վերլուծելով դրա շերտերն ու կազմաձևերը. ծավալները տեղադրվում են, դատարկ գաղտնաբառի առկայություն և այլն: դ. Մինչ այժմ ստուգումների քանակը այնքան էլ մեծ չէ և հիմնված է մեր մի քանի ստուգումների և առաջարկությունների վրա:
Մանրուք
Այս օգտակար ծրագիրը նպատակաուղղված է գտնելու երկու տեսակի խոցելիություն՝ խնդիրներ OS build-ների հետ (աջակցում է Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu) և կախվածության հետ կապված խնդիրներ (Gemfile.lock, Pipfile.lock, composer.lock, փաթեթ: -lock.json , yarn.lock, cargo.lock). Trivy-ն կարող է սկանավորել և՛ պատկերը պահոցում, և՛ տեղական պատկերը, ինչպես նաև կարող է սկանավորել փոխանցված .tar ֆայլի հիման վրա Docker պատկերով:
Կոմունալ ծառայությունների իրականացման տարբերակներ
Նկարագրված հավելվածները մեկուսացված միջավայրում փորձելու համար ես հրահանգներ կտամ բոլոր կոմունալ ծառայությունները փոքր-ինչ պարզեցված գործընթացով տեղադրելու համար:
Հիմնական գաղափարը ցույց տալն է, թե ինչպես կարող եք իրականացնել Dockerfiles-ի և Docker պատկերների ավտոմատ բովանդակության ստուգում, որոնք ստեղծվում են մշակման ընթացքում:
Ստուգումն ինքնին բաղկացած է հետևյալ քայլերից.
- Ստուգելով Dockerfile-ի հրահանգների ճշգրտությունն ու անվտանգությունը՝ օգտագործելով linter utility Հադոլինթ
- Վերջնական և միջանկյալ պատկերների ճշգրտության և անվտանգության ստուգում, օգտագործելով օգտակար ծրագիրը Դոկլ
- Հանրային հայտնի խոցելիությունների (CVE) առկայության ստուգում բազային պատկերում և մի շարք կախվածություններ՝ օգտագործելով կոմունալ ծրագիրը Մանրուք
Հետագայում հոդվածում ես կտամ երեք տարբերակ այս քայլերն իրականացնելու համար.
Առաջինը CI/CD խողովակաշարի կարգավորումն է՝ օգտագործելով GitLab-ը որպես օրինակ (փորձարկման օրինակի բարձրացման գործընթացի նկարագրությամբ):
Երկրորդը shell script-ի օգտագործումն է:
Երրորդը ներառում է Docker պատկերի կառուցում Docker պատկերները սկանավորելու համար:
Դուք կարող եք ընտրել այն տարբերակը, որը լավագույնս համապատասխանում է ձեզ, փոխանցել այն ձեր ենթակառուցվածքին և հարմարեցնել այն ձեր կարիքներին:
Բոլոր անհրաժեշտ ֆայլերը և լրացուցիչ հրահանգները նույնպես գտնվում են պահեստում.
Ինտեգրում GitLab CI/CD-ին
Առաջին տարբերակում մենք կնայենք, թե ինչպես կարող եք իրականացնել անվտանգության ստուգումներ՝ օգտագործելով GitLab պահեստային համակարգը որպես օրինակ: Այստեղ մենք կանցնենք քայլերին և կպարզենք, թե ինչպես զրոյից տեղադրել GitLab-ի հետ փորձնական միջավայր, ստեղծել սկանավորման գործընթաց և գործարկել փորձնական Dockerfile-ի և պատահական պատկերի ստուգման կոմունալ ծառայություններ՝ JuiceShop հավելվածը:
GitLab-ի տեղադրում
1. Տեղադրեք Docker:
sudo apt-get update && sudo apt-get install docker.io
2. Ներկայիս օգտվողին ավելացրեք docker խմբին, որպեսզի կարողանաք աշխատել docker-ի հետ առանց sudo-ի օգտագործման:
sudo addgroup <username> docker
3. Գտեք ձեր IP-ն.
ip addr
4. Տեղադրեք և գործարկեք GitLab-ը կոնտեյների մեջ՝ փոխարինելով հոսթի անվան IP հասցեն ձեր սեփականով՝
docker run --detach
--hostname 192.168.1.112
--publish 443:443 --publish 80:80
--name gitlab
--restart always
--volume /srv/gitlab/config:/etc/gitlab
--volume /srv/gitlab/logs:/var/log/gitlab
--volume /srv/gitlab/data:/var/opt/gitlab
gitlab/gitlab-ce:latest
Մենք սպասում ենք, մինչև GitLab-ը ավարտի տեղադրման բոլոր անհրաժեշտ ընթացակարգերը (դուք կարող եք վերահսկել գործընթացը log ֆայլի ելքի միջոցով. docker logs -f gitlab):
5. Բացեք ձեր տեղական IP-ն բրաուզերում և տեսեք մի էջ, որը խնդրում է փոխել արմատային օգտվողի գաղտնաբառը.
Սահմանեք նոր գաղտնաբառ և գնացեք GitLab:
6. Ստեղծեք նոր նախագիծ, օրինակ՝ cicd-test և սկզբնավորեք այն սկզբնական ֆայլով README.md:
7. Այժմ մենք պետք է տեղադրենք GitLab Runner-ը. գործակալ, որը կկատարի բոլոր անհրաժեշտ գործողությունները ըստ պահանջի:
Ներբեռնեք վերջին տարբերակը (այս դեպքում՝ Linux 64-բիթանոցի համար).
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
8. Դարձրեք այն գործարկելի.
sudo chmod +x /usr/local/bin/gitlab-runner
9. Runner-ի համար ավելացրեք OS օգտվող և գործարկեք ծառայությունը.
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
Այն պետք է նման լինի հետևյալին.
local@osboxes:~$ sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
Runtime platform arch=amd64 os=linux pid=8438 revision=0e5417a3 version=12.0.1
local@osboxes:~$ sudo gitlab-runner start
Runtime platform arch=amd64 os=linux pid=8518 revision=0e5417a3 version=12.0.1
10. Այժմ մենք գրանցում ենք Runner-ը, որպեսզի այն կարողանա փոխազդել մեր GitLab օրինակի հետ:
Դա անելու համար բացեք Settings-CI/CD էջը (http://OUR_IP_ADDRESS/root/cicd-test/-/settings/ci_cd) և Runners ներդիրում գտեք URL-ը և գրանցման նշանը.
11. Գրանցեք Runner-ին` փոխարինելով URL-ը և գրանցման նշանը.
sudo gitlab-runner register
--non-interactive
--url "http://<URL>/"
--registration-token "<Registration Token>"
--executor "docker"
--docker-privileged
--docker-image alpine:latest
--description "docker-runner"
--tag-list "docker,privileged"
--run-untagged="true"
--locked="false"
--access-level="not_protected"
Արդյունքում մենք ստանում ենք պատրաստի աշխատող GitLab, որի մեջ մենք պետք է հրահանգներ ավելացնենք մեր կոմունալ ծառայությունները սկսելու համար: Այս ցուցադրությունում մենք չունենք հավելվածը ստեղծելու և այն կոնտեյներավորելու քայլեր, բայց իրական միջավայրում դրանք նախորդում են սկանավորման քայլերին և կստեղծեն պատկերներ և Dockerfile վերլուծության համար:
խողովակաշարի կոնֆիգուրացիա
1. Ֆայլեր ավելացրեք պահեստում mydockerfile.df (սա փորձնական Dockerfile է, որը մենք կստուգենք) և GitLab CI/CD գործընթացի կազմաձևման ֆայլը .gitlab-cicd.yml, որը թվարկում է սկաներների հրահանգները (նշեք ֆայլի անվանման կետը):
YAML կազմաձևման ֆայլը պարունակում է երեք կոմունալ ծրագրեր գործարկելու հրահանգներ (Hadolint, Dockle և Trivy), որոնք կվերլուծեն ընտրված Dockerfile-ը և DOCKERFILE փոփոխականում նշված պատկերը: Բոլոր անհրաժեշտ ֆայլերը կարելի է վերցնել պահեստից.
Հատված mydockerfile.df (սա վերացական ֆայլ է կամայական հրահանգների հավաքածուով միայն կոմունալ ծառայության աշխատանքը ցուցադրելու համար): Ուղիղ հղում ֆայլին.
mydockerfile.df-ի բովանդակությունը
FROM amd64/node:10.16.0-alpine@sha256:f59303fb3248e5d992586c76cc83e1d3700f641cbcd7c0067bc7ad5bb2e5b489 AS tsbuild
COPY package.json .
COPY yarn.lock .
RUN yarn install
COPY lib lib
COPY tsconfig.json tsconfig.json
COPY tsconfig.app.json tsconfig.app.json
RUN yarn build
FROM amd64/ubuntu:18.04@sha256:eb70667a801686f914408558660da753cde27192cd036148e58258819b927395
LABEL maintainer="Rhys Arkins <[email protected]>"
LABEL name="renovate"
...
COPY php.ini /usr/local/etc/php/php.ini
RUN cp -a /tmp/piik/* /var/www/html/
RUN rm -rf /tmp/piwik
RUN chown -R www-data /var/www/html
ADD piwik-cli-setup /piwik-cli-setup
ADD reset.php /var/www/html/
## ENTRYPOINT ##
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
USER root
YAML-ի կոնֆիգուրացիան այսպիսի տեսք ունի (ֆայլն ինքնին կարելի է գտնել այստեղ ուղիղ հղման միջոցով.
.gitlab-ci.yml-ի բովանդակությունը
variables:
DOCKER_HOST: "tcp://docker:2375/"
DOCKERFILE: "mydockerfile.df" # name of the Dockerfile to analyse
DOCKERIMAGE: "bkimminich/juice-shop" # name of the Docker image to analyse
# DOCKERIMAGE: "knqyf263/cve-2018-11235" # test Docker image with several CRITICAL CVE
SHOWSTOPPER_PRIORITY: "CRITICAL" # what level of criticality will fail Trivy job
TRIVYCACHE: "$CI_PROJECT_DIR/.cache" # where to cache Trivy database of vulnerabilities for faster reuse
ARTIFACT_FOLDER: "$CI_PROJECT_DIR"
services:
- docker:dind # to be able to build docker images inside the Runner
stages:
- scan
- report
- publish
HadoLint:
# Basic lint analysis of Dockerfile instructions
stage: scan
image: docker:git
after_script:
- cat $ARTIFACT_FOLDER/hadolint_results.json
script:
- export VERSION=$(wget -q -O - https://api.github.com/repos/hadolint/hadolint/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
- wget https://github.com/hadolint/hadolint/releases/download/v${VERSION}/hadolint-Linux-x86_64 && chmod +x hadolint-Linux-x86_64
# NB: hadolint will always exit with 0 exit code
- ./hadolint-Linux-x86_64 -f json $DOCKERFILE > $ARTIFACT_FOLDER/hadolint_results.json || exit 0
artifacts:
when: always # return artifacts even after job failure
paths:
- $ARTIFACT_FOLDER/hadolint_results.json
Dockle:
# Analysing best practices about docker image (users permissions, instructions followed when image was built, etc.)
stage: scan
image: docker:git
after_script:
- cat $ARTIFACT_FOLDER/dockle_results.json
script:
- export VERSION=$(wget -q -O - https://api.github.com/repos/goodwithtech/dockle/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
- wget https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.tar.gz && tar zxf dockle_${VERSION}_Linux-64bit.tar.gz
- ./dockle --exit-code 1 -f json --output $ARTIFACT_FOLDER/dockle_results.json $DOCKERIMAGE
artifacts:
when: always # return artifacts even after job failure
paths:
- $ARTIFACT_FOLDER/dockle_results.json
Trivy:
# Analysing docker image and package dependencies against several CVE bases
stage: scan
image: docker:git
script:
# getting the latest Trivy
- apk add rpm
- export VERSION=$(wget -q -O - https://api.github.com/repos/knqyf263/trivy/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
- wget https://github.com/knqyf263/trivy/releases/download/v${VERSION}/trivy_${VERSION}_Linux-64bit.tar.gz && tar zxf trivy_${VERSION}_Linux-64bit.tar.gz
# displaying all vulnerabilities w/o failing the build
- ./trivy -d --cache-dir $TRIVYCACHE -f json -o $ARTIFACT_FOLDER/trivy_results.json --exit-code 0 $DOCKERIMAGE
# write vulnerabilities info to stdout in human readable format (reading pure json is not fun, eh?). You can remove this if you don't need this.
- ./trivy -d --cache-dir $TRIVYCACHE --exit-code 0 $DOCKERIMAGE
# failing the build if the SHOWSTOPPER priority is found
- ./trivy -d --cache-dir $TRIVYCACHE --exit-code 1 --severity $SHOWSTOPPER_PRIORITY --quiet $DOCKERIMAGE
artifacts:
when: always # return artifacts even after job failure
paths:
- $ARTIFACT_FOLDER/trivy_results.json
cache:
paths:
- .cache
Report:
# combining tools outputs into one HTML
stage: report
when: always
image: python:3.5
script:
- mkdir json
- cp $ARTIFACT_FOLDER/*.json ./json/
- pip install json2html
- wget https://raw.githubusercontent.com/shad0wrunner/docker_cicd/master/convert_json_results.py
- python ./convert_json_results.py
artifacts:
paths:
- results.html
Անհրաժեշտության դեպքում կարող եք նաև սկանավորել պահպանված պատկերները .tar արխիվի տեսքով (սակայն, ձեզ հարկավոր է փոխել YAML ֆայլի կոմունալ ծառայությունների մուտքագրման պարամետրերը)
NB. Trivy-ն պահանջում է տեղադրել RPM и գիտ. Հակառակ դեպքում, այն սխալներ կառաջացնի RedHat-ի վրա հիմնված պատկերները սկանավորելիս և խոցելիության տվյալների բազայի թարմացումներ ստանալիս:
2. Պահեստում ֆայլեր ավելացնելուց հետո, ըստ մեր կազմաձևման ֆայլի հրահանգների, GitLab-ը ավտոմատ կերպով կսկսի կառուցման և սկանավորման գործընթացը: CI/CD → Խողովակաշարեր ներդիրում կարող եք տեսնել հրահանգների առաջընթացը:
Արդյունքում մենք ունենք չորս խնդիր. Դրանցից երեքը ուղղակիորեն վերաբերում են սկանավորմանը, իսկ վերջինը (Report) հավաքում է պարզ հաշվետվություն սկանավորման արդյունքներով ցրված ֆայլերից:
Լռելյայնորեն, Trivy-ն դադարում է աշխատել, եթե պատկերի կամ կախվածության մեջ հայտնաբերվեն ԿՐԻՏԻԿԱԿԱՆ խոցելիություններ: Միևնույն ժամանակ, Hadolint-ը միշտ վերադարձնում է Success կոդը, քանի որ այն միշտ հանգեցնում է մեկնաբանությունների, ինչը հանգեցնում է build-ի դադարեցմանը:
Կախված ձեր կոնկրետ պահանջներից՝ դուք կարող եք կարգավորել ելքի կոդը, որպեսզի երբ այս կոմունալ ծառայությունները հայտնաբերեն որոշակի կարևորության խնդիրներ, նրանք նաև դադարեցնեն կառուցման գործընթացը: Մեր դեպքում, կառուցումը կդադարի միայն այն դեպքում, եթե Trivy-ն հայտնաբերի խոցելիություն այն կրիտիկականությամբ, որը մենք նշել ենք SHOWSTOPPER փոփոխականում: .gitlab-ci.yml.
Յուրաքանչյուր օգտակար ծրագրի արդյունքը կարելի է դիտել յուրաքանչյուր սկանավորման առաջադրանքի գրանցամատյանում, անմիջապես json ֆայլերում՝ արտեֆակտների բաժնում կամ պարզ HTML զեկույցում (այդ մասին ավելին ստորև).
3. Կոմունալ ծառայությունների հաշվետվությունները մի փոքր ավելի ընթեռնելի ձևով ներկայացնելու համար Python-ի փոքրիկ սկրիպտն օգտագործվում է երեք json ֆայլի վերափոխելու համար մեկ HTML ֆայլ՝ թերությունների աղյուսակով:
Այս սցենարը գործարկվում է առանձին Հաշվետվության առաջադրանքով, և դրա վերջնական արտեֆակտը HTML ֆայլ է զեկույցով: Սցենարի աղբյուրը նույնպես գտնվում է պահեստում և կարող է հարմարեցվել ձեր կարիքներին, գույներին և այլն:
Shell սցենար
Երկրորդ տարբերակը հարմար է այն դեպքերի համար, երբ դուք պետք է ստուգեք Docker պատկերները CI/CD համակարգից դուրս կամ դուք պետք է ունենաք բոլոր հրահանգները այնպիսի ձևով, որը կարող է կատարվել անմիջապես հոսթի վրա: Այս տարբերակը ծածկված է պատրաստի shell script-ով, որը կարող է գործարկվել մաքուր վիրտուալ (կամ նույնիսկ իրական) մեքենայի վրա: Սցենարը կատարում է նույն հրահանգները, ինչ վերը նկարագրված gitlab-runner-ը:
Որպեսզի սկրիպտը հաջող աշխատի, Docker-ը պետք է տեղադրվի համակարգում, իսկ ներկայիս օգտվողը պետք է լինի դոկեր խմբում:
Սցենարն ինքնին կարելի է գտնել այստեղ.
Ֆայլի սկզբում փոփոխականները նշում են, թե որ պատկերը պետք է սկանավորվի, և որ կրիտիկական թերությունները կհանգեցնեն, որ Trivy կոմունալը դուրս կգա նշված սխալի կոդով:
Սցենարի կատարման ընթացքում բոլոր կոմունալ ծառայությունները կներբեռնվեն գրացուցակ docker_tools, նրանց աշխատանքի արդյունքները գրացուցակում են docker_tools/json, և հաշվետվության հետ HTML-ը կլինի ֆայլում արդյունքներ.html.
Սցենարի ելքի օրինակ
~/docker_cicd$ ./docker_sec_check.sh
[+] Setting environment variables
[+] Installing required packages
[+] Preparing necessary directories
[+] Fetching sample Dockerfile
2020-10-20 10:40:00 (45.3 MB/s) - ‘Dockerfile’ saved [8071/8071]
[+] Pulling image to scan
latest: Pulling from bkimminich/juice-shop
[+] Running Hadolint
...
Dockerfile:205 DL3015 Avoid additional packages by specifying `--no-install-recommends`
Dockerfile:248 DL3002 Last USER should not be root
...
[+] Running Dockle
...
WARN - DKL-DI-0006: Avoid latest tag
* Avoid 'latest' tag
INFO - CIS-DI-0005: Enable Content trust for Docker
* export DOCKER_CONTENT_TRUST=1 before docker pull/build
...
[+] Running Trivy
juice-shop/frontend/package-lock.json
=====================================
Total: 3 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 2, CRITICAL: 0)
+---------------------+------------------+----------+---------+-------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | VERSION | TITLE |
+---------------------+------------------+----------+---------+-------------------------+
| object-path | CVE-2020-15256 | HIGH | 0.11.4 | Prototype pollution in |
| | | | | object-path |
+---------------------+------------------+ +---------+-------------------------+
| tree-kill | CVE-2019-15599 | | 1.2.2 | Code Injection |
+---------------------+------------------+----------+---------+-------------------------+
| webpack-subresource | CVE-2020-15262 | LOW | 1.4.1 | Unprotected dynamically |
| | | | | loaded chunks |
+---------------------+------------------+----------+---------+-------------------------+
juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)
...
juice-shop/package-lock.json
============================
Total: 5 (CRITICAL: 5)
...
[+] Removing left-overs
[+] Making the output look pretty
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html
Docker պատկեր բոլոր կոմունալ հարմարություններով
Որպես երրորդ այլընտրանք՝ ես հավաքեցի երկու պարզ Dockerfiles՝ անվտանգության կոմունալ ծառայություններով պատկեր ստեղծելու համար: Մեկ Dockerfile-ը կօգնի ստեղծել հավաքածու՝ պատկերը պահոցից սկանավորելու համար, երկրորդը (Dockerfile_tar) կօգնի ստեղծել tar ֆայլ պատկերով սկանավորելու հավաքածու:
1. Վերցրեք համապատասխան Docker ֆայլը և սկրիպտները պահոցից
2. Մենք գործարկում ենք այն հավաքման համար.
docker build -t dscan:image -f docker_security.df .
3. Հավաքման ավարտից հետո պատկերից կոնտեյներ ենք ստեղծում։ Միևնույն ժամանակ, մենք փոխանցում ենք DOCKERIMAGE միջավայրի փոփոխականը մեզ հետաքրքրող պատկերի անունով և տեղադրում ենք Dockerfile-ը, որը մենք ցանկանում ենք վերլուծել մեր մեքենայից ֆայլում: /Dockerfile (նշեք, որ այս ֆայլի բացարձակ ուղին պահանջվում է).
docker run --rm -v $(pwd)/results:/results -v $(pwd)/docker_security.df:/Dockerfile -e DOCKERIMAGE="bkimminich/juice-shop" dscan:image
[+] Setting environment variables
[+] Running Hadolint
/Dockerfile:3 DL3006 Always tag the version of an image explicitly
[+] Running Dockle
WARN - DKL-DI-0006: Avoid latest tag
* Avoid 'latest' tag
INFO - CIS-DI-0005: Enable Content trust for Docker
* export DOCKER_CONTENT_TRUST=1 before docker pull/build
INFO - CIS-DI-0006: Add HEALTHCHECK instruction to the container image
* not found HEALTHCHECK statement
INFO - DKL-LI-0003: Only put necessary files
* unnecessary file : juice-shop/node_modules/sqlite3/Dockerfile
* unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm64/Dockerfile
* unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm/Dockerfile
[+] Running Trivy
...
juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)
...
[+] Making the output look pretty
[+] Starting the main module ============================================================
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html
Արդյունքները
Մենք դիտարկեցինք Docker արտեֆակտների սկանավորման համար նախատեսված միայն մեկ հիմնական կոմունալ ծառայություններ, որոնք, իմ կարծիքով, շատ արդյունավետ կերպով ծածկում են պատկերի անվտանգության պահանջների պատշաճ մասը: Կան նաև մեծ թվով վճարովի և անվճար գործիքներ, որոնք կարող են կատարել նույն ստուգումները, նկարել գեղեցիկ հաշվետվություններ կամ աշխատել զուտ վահանակի ռեժիմում, ծածկել կոնտեյների կառավարման համակարգերը և այլն: .
Հոդվածում նկարագրված գործիքների հավաքածուի լավ բանն այն է, որ դրանք բոլորը կառուցված են բաց կոդով, և դուք կարող եք փորձարկել դրանց և նմանատիպ այլ գործիքներ՝ գտնելու այն, ինչը համապատասխանում է ձեր պահանջներին և ենթակառուցվածքի առանձնահատկություններին: Իհարկե, հայտնաբերված բոլոր խոցելիությունները պետք է ուսումնասիրվեն կոնկրետ պայմաններում կիրառելի լինելու համար, բայց սա ապագա մեծ հոդվածի թեմա է:
Հուսով եմ, որ այս ուղեցույցը, սցենարները և կոմունալ ծառայությունները կօգնեն ձեզ և կդառնան ելակետ՝ կոնտեյներացման ոլորտում ավելի ապահով ենթակառուցվածք ստեղծելու համար:
Source: www.habr.com