Docker-ի անվտանգությունը ստուգելու կոմունալ ծառայությունների իրականացման մեթոդներ և օրինակներ

Docker-ի անվտանգությունը ստուգելու կոմունալ ծառայությունների իրականացման մեթոդներ և օրինակներ
Հե՜յ Հաբր։

Ժամանակակից իրականության մեջ, ելնելով զարգացման գործընթացներում կոնտեյներացման աճող դերից, բեռնարկղերի հետ կապված տարբեր փուլերի և սուբյեկտների անվտանգության ապահովման խնդիրը ոչ պակաս կարևոր խնդիր է։ Ձեռքով ստուգումներ կատարելը ժամանակատար է, ուստի լավ գաղափար կլինի գոնե նախնական քայլեր ձեռնարկել այս գործընթացի ավտոմատացման ուղղությամբ:

Այս հոդվածում ես կկիսվեմ պատրաստի սկրիպտներով մի քանի Docker անվտանգության կոմունալ ծրագրերի իրականացման համար և հրահանգներ, թե ինչպես տեղադրել փոքր ցուցադրական ստենդ՝ այս գործընթացը փորձարկելու համար: Դուք կարող եք օգտագործել նյութերը՝ փորձարկելու համար, թե ինչպես կազմակերպել Dockerfile-ի պատկերների և հրահանգների անվտանգության փորձարկման գործընթացը: Հասկանալի է, որ յուրաքանչյուրի զարգացման և ներդրման ենթակառուցվածքը տարբեր է, ուստի ստորև ես կներկայացնեմ մի քանի հնարավոր տարբերակներ:

Անվտանգության ստուգման կոմունալ ծառայություններ

Կան մեծ թվով տարբեր օգնական հավելվածներ և սցենարներ, որոնք ստուգում են Docker ենթակառուցվածքի տարբեր ասպեկտները: Նրանցից ոմանք արդեն նկարագրված են նախորդ հոդվածում (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), և այս նյութում ես կցանկանայի կենտրոնանալ դրանցից երեքի վրա, որոնք ընդգրկում են զարգացման գործընթացում ստեղծված Docker պատկերների անվտանգության պահանջների մեծ մասը: Բացի այդ, ես ցույց կտամ նաև մի օրինակ, թե ինչպես կարելի է այս երեք կոմունալ ծառայությունները միացնել մեկ խողովակաշարի՝ անվտանգության ստուգումներ կատարելու համար:

Հադոլինթ
https://github.com/hadolint/hadolint

Բավականին պարզ վահանակ, որն օգնում է, որպես առաջին մոտարկում, գնահատել Dockerfile-ի հրահանգների ճիշտությունն ու անվտանգությունը (օրինակ՝ օգտագործելով միայն լիազորված պատկերների գրանցամատյանները կամ օգտագործելով sudo):

Docker-ի անվտանգությունը ստուգելու կոմունալ ծառայությունների իրականացման մեթոդներ և օրինակներ

Դոկլ
https://github.com/goodwithtech/dockle

Վահանակի օգտակար ծրագիր, որն աշխատում է պատկերի հետ (կամ պատկերի պահպանված tar արխիվի հետ), որը ստուգում է որոշակի պատկերի ճիշտությունն ու անվտանգությունը որպես այդպիսին՝ վերլուծելով դրա շերտերն ու կազմաձևերը. ծավալները տեղադրվում են, դատարկ գաղտնաբառի առկայություն և այլն: դ. Մինչ այժմ ստուգումների քանակը այնքան էլ մեծ չէ և հիմնված է մեր մի քանի ստուգումների և առաջարկությունների վրա: ԱՊՀ (Ինտերնետ անվտանգության կենտրոն) Հենանիշ Docker-ի համար։
Docker-ի անվտանգությունը ստուգելու կոմունալ ծառայությունների իրականացման մեթոդներ և օրինակներ

Մանրուք
https://github.com/aquasecurity/trivy

Այս օգտակար ծրագիրը նպատակաուղղված է գտնելու երկու տեսակի խոցելիություն՝ խնդիրներ OS build-ների հետ (աջակցում է Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu) և կախվածության հետ կապված խնդիրներ (Gemfile.lock, Pipfile.lock, composer.lock, փաթեթ: -lock.json , yarn.lock, cargo.lock). Trivy-ն կարող է սկանավորել և՛ պատկերը պահոցում, և՛ տեղական պատկերը, ինչպես նաև կարող է սկանավորել փոխանցված .tar ֆայլի հիման վրա Docker պատկերով:

Docker-ի անվտանգությունը ստուգելու կոմունալ ծառայությունների իրականացման մեթոդներ և օրինակներ

Կոմունալ ծառայությունների իրականացման տարբերակներ

Նկարագրված հավելվածները մեկուսացված միջավայրում փորձելու համար ես հրահանգներ կտամ բոլոր կոմունալ ծառայությունները փոքր-ինչ պարզեցված գործընթացով տեղադրելու համար:

Հիմնական գաղափարը ցույց տալն է, թե ինչպես կարող եք իրականացնել Dockerfiles-ի և Docker պատկերների ավտոմատ բովանդակության ստուգում, որոնք ստեղծվում են մշակման ընթացքում:

Ստուգումն ինքնին բաղկացած է հետևյալ քայլերից.

  1. Ստուգելով Dockerfile-ի հրահանգների ճշգրտությունն ու անվտանգությունը՝ օգտագործելով linter utility Հադոլինթ
  2. Վերջնական և միջանկյալ պատկերների ճշգրտության և անվտանգության ստուգում, օգտագործելով օգտակար ծրագիրը Դոկլ
  3. Հանրային հայտնի խոցելիությունների (CVE) առկայության ստուգում բազային պատկերում և մի շարք կախվածություններ՝ օգտագործելով կոմունալ ծրագիրը Մանրուք

Հետագայում հոդվածում ես կտամ երեք տարբերակ այս քայլերն իրականացնելու համար.
Առաջինը CI/CD խողովակաշարի կարգավորումն է՝ օգտագործելով GitLab-ը որպես օրինակ (փորձարկման օրինակի բարձրացման գործընթացի նկարագրությամբ):
Երկրորդը shell script-ի օգտագործումն է:
Երրորդը ներառում է Docker պատկերի կառուցում Docker պատկերները սկանավորելու համար:
Դուք կարող եք ընտրել այն տարբերակը, որը լավագույնս համապատասխանում է ձեզ, փոխանցել այն ձեր ենթակառուցվածքին և հարմարեցնել այն ձեր կարիքներին:

Բոլոր անհրաժեշտ ֆայլերը և լրացուցիչ հրահանգները նույնպես գտնվում են պահեստում. https://github.com/Swordfish-Security/docker_cicd

Ինտեգրում 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-ն բրաուզերում և տեսեք մի էջ, որը խնդրում է փոխել արմատային օգտվողի գաղտնաբառը.
Docker-ի անվտանգությունը ստուգելու կոմունալ ծառայությունների իրականացման մեթոդներ և օրինակներ
Սահմանեք նոր գաղտնաբառ և գնացեք GitLab:

6. Ստեղծեք նոր նախագիծ, օրինակ՝ cicd-test և սկզբնավորեք այն սկզբնական ֆայլով README.md:
Docker-ի անվտանգությունը ստուգելու կոմունալ ծառայությունների իրականացման մեթոդներ և օրինակներ
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-ը և գրանցման նշանը.
Docker-ի անվտանգությունը ստուգելու կոմունալ ծառայությունների իրականացման մեթոդներ և օրինակներ
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 փոփոխականում նշված պատկերը: Բոլոր անհրաժեշտ ֆայլերը կարելի է վերցնել պահեստից. https://github.com/Swordfish-Security/docker_cicd/

Հատված mydockerfile.df (սա վերացական ֆայլ է կամայական հրահանգների հավաքածուով միայն կոմունալ ծառայության աշխատանքը ցուցադրելու համար): Ուղիղ հղում ֆայլին. 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):

.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) հավաքում է պարզ հաշվետվություն սկանավորման արդյունքներով ցրված ֆայլերից:
Docker-ի անվտանգությունը ստուգելու կոմունալ ծառայությունների իրականացման մեթոդներ և օրինակներ
Լռելյայնորեն, Trivy-ն դադարում է աշխատել, եթե պատկերի կամ կախվածության մեջ հայտնաբերվեն ԿՐԻՏԻԿԱԿԱՆ խոցելիություններ: Միևնույն ժամանակ, Hadolint-ը միշտ վերադարձնում է Success կոդը, քանի որ այն միշտ հանգեցնում է մեկնաբանությունների, ինչը հանգեցնում է build-ի դադարեցմանը:

Կախված ձեր կոնկրետ պահանջներից՝ դուք կարող եք կարգավորել ելքի կոդը, որպեսզի երբ այս կոմունալ ծառայությունները հայտնաբերեն որոշակի կարևորության խնդիրներ, նրանք նաև դադարեցնեն կառուցման գործընթացը: Մեր դեպքում, կառուցումը կդադարի միայն այն դեպքում, եթե Trivy-ն հայտնաբերի խոցելիություն այն կրիտիկականությամբ, որը մենք նշել ենք SHOWSTOPPER փոփոխականում: .gitlab-ci.yml.
Docker-ի անվտանգությունը ստուգելու կոմունալ ծառայությունների իրականացման մեթոդներ և օրինակներ

Յուրաքանչյուր օգտակար ծրագրի արդյունքը կարելի է դիտել յուրաքանչյուր սկանավորման առաջադրանքի գրանցամատյանում, անմիջապես json ֆայլերում՝ արտեֆակտների բաժնում կամ պարզ HTML զեկույցում (այդ մասին ավելին ստորև).
Docker-ի անվտանգությունը ստուգելու կոմունալ ծառայությունների իրականացման մեթոդներ և օրինակներ

3. Կոմունալ ծառայությունների հաշվետվությունները մի փոքր ավելի ընթեռնելի ձևով ներկայացնելու համար Python-ի փոքրիկ սկրիպտն օգտագործվում է երեք json ֆայլի վերափոխելու համար մեկ HTML ֆայլ՝ թերությունների աղյուսակով:
Այս սցենարը գործարկվում է առանձին Հաշվետվության առաջադրանքով, և դրա վերջնական արտեֆակտը HTML ֆայլ է զեկույցով: Սցենարի աղբյուրը նույնպես գտնվում է պահեստում և կարող է հարմարեցվել ձեր կարիքներին, գույներին և այլն:
Docker-ի անվտանգությունը ստուգելու կոմունալ ծառայությունների իրականացման մեթոդներ և օրինակներ

Shell սցենար

Երկրորդ տարբերակը հարմար է այն դեպքերի համար, երբ դուք պետք է ստուգեք Docker պատկերները CI/CD համակարգից դուրս կամ դուք պետք է ունենաք բոլոր հրահանգները այնպիսի ձևով, որը կարող է կատարվել անմիջապես հոսթի վրա: Այս տարբերակը ծածկված է պատրաստի shell script-ով, որը կարող է գործարկվել մաքուր վիրտուալ (կամ նույնիսկ իրական) մեքենայի վրա: Սցենարը կատարում է նույն հրահանգները, ինչ վերը նկարագրված gitlab-runner-ը:

Որպեսզի սկրիպտը հաջող աշխատի, Docker-ը պետք է տեղադրվի համակարգում, իսկ ներկայիս օգտվողը պետք է լինի դոկեր խմբում:

Սցենարն ինքնին կարելի է գտնել այստեղ. docker_sec_check.sh

Ֆայլի սկզբում փոփոխականները նշում են, թե որ պատկերը պետք է սկանավորվի, և որ կրիտիկական թերությունները կհանգեցնեն, որ 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 ֆայլը և սկրիպտները պահոցից https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
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

Добавить комментарий