Metodat dhe shembujt e implementimit të mjeteve për kontrollin e sigurisë Docker

Metodat dhe shembujt e implementimit të mjeteve për kontrollin e sigurisë Docker
Përshëndetje, Habr!

Në realitetin modern, për shkak të rolit në rritje të kontenierizimit në proceset e zhvillimit, çështja e sigurimit të fazave dhe entiteteve të ndryshme të lidhura me kontenierët është gjithashtu e rëndësishme. Kryerja e kontrollëve manual është një detyrë e lodhshme, prandaj do të ishte mirë të bëheshin të paktën hapat fillestarë drejt automatizimit të këtij procesi.

Në këtë artikull do të ndaja skriptet e gatshme për implementimin e disa instrumenteve për sigurimin e Docker dhe një udhëzues se si të krijoni një mini-demo për të testuar këtë proces. Materialet mund të përdoren për të eksperimentuar se si të organizoni procesin e testimit të sigurisë së imazheve dhe direktivave të Dockerfile. Natyrisht, infrastruktura e zhvillimit dhe implementimit është ndryshe për secilin, prandaj më poshtë do të sjell disa mundësi.

Instrumentet për kontrollin e sigurisë

Ekziston një numër i madh aplikacionesh ndihmëse dhe skriptesh që kryejnë kontroll të aspekteve të ndryshme të infrastrukturës Docker. Disa prej tyre janë përshkruar në artikullin e kaluar (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), dhe në këtë material dëshiroj të fokusohem në tre prej tyre, të cilat mbulojnë shumicën e kërkesave për sigurinë e imazheve Docker që ndërtohen në procesin e zhvillimit. Përveç kësaj, do të tregoj një shembull se si mund të kombinohen këto tre instrumente në një pipeline për të kryer kontrollin e sigurisë.

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

Një utilitar konsol përfundimisht i thjeshtë, i cili ndihmon në një vlerësim fillestar të saktësisë dhe sigurisë së direktivave të Dockerfile-ve (për shembull, përdorimi vetëm i regjistrave të lejuar të imazheve ose përdorimi i sudo).

Metodat dhe shembujt e implementimit të mjeteve për kontrollin e sigurisë Docker

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

Një utilitar konsol, që funksionon me një imazh (ose me një arkiv tar të ruajtur të imazhit), i cili kontrollon saktësinë dhe sigurinë e një imazhi të veçantë, duke analizuar shtresat e tij dhe konfigurimin - cilët përdorues janë krijuar, cilat drejtime përdoren, cilat volume janë lidhur, praninë e fjalëkalimit bosh, etj. Deri tani, numri i kontrollëve nuk është shumë i madh dhe bazohet në disa kontrollë dhe rekomandime të veta. CIS (Qendra për Sigurinë e Internetit) Benchmark për Docker.
Metodat dhe shembujt e implementimit të mjeteve për kontrollin e sigurisë Docker

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

Kyta e aplikacionit Ă«shtĂ« tĂ« identifikojĂ« dobĂ«sitĂ« e dy tipeve – probleme me ndĂ«rtimet e OS (pĂ«rfshihen Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu) dhe probleme me varĂ«si (Gemfile.lock, Pipfile.lock, composer.lock, package-lock.json, yarn.lock, Cargo.lock). Trivy Ă«shtĂ« nĂ« gjendje tĂ« skanojĂ« si njĂ« imazh nĂ« depo, ashtu edhe njĂ« imazh lokal, si dhe tĂ« kryejĂ« skanim bazuar nĂ« njĂ« skedar .tar tĂ« dĂ«rguar me imazhin Docker.

Metodat dhe shembujt e implementimit të mjeteve për kontrollin e sigurisë Docker

Mundësitë e implementimit të utilitarëve

Për të provuar aplikacionet e përshkruara në kushte të izoluara, do të jap udhëzime për instalimin e të gjithë utilitarëve në kuadër të një procesi të thjeshtuar.

Ideja kryesore është të demonstrojmë se si mund të implementojmë një verifikim automatike të përmbajtjes së Dockerfile dhe imazheve Docker që krijohen gjatë zhvillimit.

Vetë verifikimi përbëhet nga hapat e mëposhtëm:

  1. Verifikimi i saktĂ«sisĂ« dhe sigurisĂ« sĂ« instruktimeve nĂ« Dockerfile – me ndihmĂ«n e utilitarit linter Hadolint
  2. Verifikimi i saktĂ«sisĂ« dhe sigurisĂ« sĂ« imazheve pĂ«rfundimtare dhe ndĂ«rmjetĂ«se – me ndihmĂ«n e utilitarit Dockle
  3. Verifikimi i pranishmĂ«risĂ« sĂ« dobĂ«sive tĂ« njohura (CVE) nĂ« imazhin bazĂ« dhe njĂ« sĂ«rĂ« varĂ«sish – me ndihmĂ«n e utilitarit Trivy

Më tutje në artikull do të jap tre mundësi për implementimin e këtyre hapave:
E para – pĂ«rmes konfigurimit tĂ« pipeline tĂ« CI/CD duke marrĂ« si shembull GitLab (me pĂ«rshkrimin e procesit tĂ« ngritjes sĂ« njĂ« instance testuese).
E dyta – duke pĂ«rdorur njĂ« skript shell.
E treta – duke ndĂ«rtuar njĂ« imazh Docker pĂ«r skanimin e imazheve Docker.
Mund të zgjidhni opsionin që ju përshtatet më shumë, ta transferoni në infrastrukturën tuaj dhe ta adaptoni sipas nevojave tuaja.

Të gjithë skedarët e nevojshëm dhe udhëzimet shtesë gjithashtu gjenden në depo: https://github.com/Swordfish-Security/docker_cicd

Integrimi në GitLab CI/CD

NĂ« opsionin e parĂ« do tĂ« shqyrtojmĂ« se si mund tĂ« implementojmĂ« verifikimet e sigurisĂ« duke marrĂ« si shembull sistemin e depozitave GitLab. KĂ«tu do tĂ« kalojmĂ« hapat dhe do tĂ« shpjegojmĂ« se si tĂ« instalojmĂ« nga e para njĂ« ambient testues me GitLab, tĂ« pĂ«rpilojmĂ« procesin e skanimit dhe tĂ« realizojmĂ« ekzekutimin e utilitarĂ«ve pĂ«r verifikimin e Dockerfile-it testues dhe njĂ« imazhi tĂ« rastĂ«sishĂ«m – aplikacioni JuiceShop.

Instalimi i GitLab
1. Instaloni Docker:

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

2. Shtoni përdoruesin aktual në grupin docker, në mënyrë që të mund të punoni me Docker pa përdorur sudo:

sudo addgroup  docker

3. Gjeni IP-në tuaj:

ip addr

4. Instaloni dhe nisni GitLab në kontejner, duke zëvendësuar adresën IP në hostname me tuajën:

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

Priteni gjatë që GitLab të kryejë të gjitha procedurat e nevojshme për instalimin (mund të ndiqni procesin përmes output-it të skedarit të log-ut: docker logs -f gitlab).

5. Hapni në shfletuesin tuaj IP-në lokale dhe shikoni faqen me propozimin për të ndërruar fjalëkalimin për përdoruesin root:
Metodat dhe shembujt e implementimit të mjeteve për kontrollin e sigurisë Docker
Vendosni një fjalëkalim të ri dhe hyni në GitLab.

6. Krijoni një projekt të ri, për shembull cicd-test dhe e inicializoni atë me një skedë fillestare README.md:
Metodat dhe shembujt e implementimit të mjeteve për kontrollin e sigurisë Docker
7. Tani na nevojitet të instalojmë GitLab Runner: agjentin që do të nisë të gjitha operacionet e nevojshme kur kërkohet.
Shkarkoni versionin mĂ« tĂ« fundit (nĂ« kĂ«tĂ« rast — pĂ«r 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. Bëni të ekzekutueshëm:

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

9. Shtoni një përdorues të OS për Runner-in dhe nisni shërbimin:

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

Duhet të duket afërsisht kështu:

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. Tani regjistroni Runner-in në mënyrë që ai të mund të interagojë me instancën tonë GitLab.
Për këtë hapim faqen Settings-CI/CD (http://OUR_ IP_ADDRESS/root/cicd-test/-/settings/ci_cd) dhe në tabin Runners gjejmë URL-në dhe Token-in e regjistrimit:
Metodat dhe shembujt e implementimit të mjeteve për kontrollin e sigurisë Docker
11. Regjistroni Runner-in, duke futur URL-në dhe Token-in e regjistrimit:

sudo gitlab-runner register 
--non-interactive 
--url "http:///" 
--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"

Si rezultat, ne kemi një GitLab të gatshëm për punë, në të cilin duhet të shtojmë udhëzime për fillimin e mjeteve tona. Në këtë rast demonstrues, ne nuk kemi hapa të ndërtimit të aplikacionit dhe kontenierizimit të tij, por në një mjedis real ata do t'i paraprijnë hapave të skanimit dhe do të formojnë imazhe dhe Dockerfile për analizë.

Konfigurimi i pipeline

1. Shtoni në repositorin skedarët mydockerfile.df (ky është një Dockerfile testues, të cilin do ta verifikojmë) dhe skedarin e konfigurimit të procesit GitLab CI/CD .gitlab-cicd.yml, i cili përmend udhëzimet për skanuesit (vini re pikën në emrin e skedarit).

Skedha YAML e konfigurimit përmban udhëzime për ekzekutimin e tre utilitarëve (Hadolint, Dockle dhe Trivy), të cilat do të analizojnë Dockerfile-in e zgjedhur dhe imazhin e caktuar në variable DOCKERFILE. Të gjitha skedarët e nevojshëm mund të merren nga depoja: https://github.com/Swordfish-Security/docker_cicd/

Përmbledhje e mydockerfile.df (ky është një skedhë abstrakte me një grup udhëzimesh për vetëm demonstruar funksionimin e utilitarit). Lidhja direkte për skedhën: mydockerfile.df

Përmbajtja e 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 <rhys@arkins.net>"
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

Skedha YAML e konfigurimit duket kështu (skedha mund të merret nga lidhja direkte këtu: .gitlab-ci.yml):

Përmbajtja e .gitlab-ci.yml

variablat:
    DOCKER_HOST: "tcp://docker:2375/"
    DOCKERFILE: "mydockerfile.df" # emri i skedarit Dockerfile për analizë   
    DOCKERIMAGE: "bkimminich/juice-shop" # emri i imazhit Docker për analizë
    # DOCKERIMAGE: "knqyf263/cve-2018-11235" # imazh docker testues me disa CVE KRIKE
    SHOWSTOPPER_PRIORITY: "CRITICAL" # çfarë niveli kriticiteti do të dështojë punën e Trivyt
    TRIVYCACHE: "$CI_PROJECT_DIR/.cache" # ku të ruhet databaza e dobësive të Trivyt për përdorim më të shpejtë
    ARTIFACT_FOLDER: "$CI_PROJECT_DIR"
 
shërbimet:
    - docker:dind # për t'u mundësuar ndërtimi i imazheve docker brenda Runner
 
stadit:
    - skano
    - raport
    - publikim
 
HadoLint:
    # Analizë e thjeshtë e instrukcioneve të Dockerfile
    stage: skano
    image: docker:git
 
    pas_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 do të dalë gjithmonë me kodin dalës 0
    - ./hadolint-Linux-x86_64 -f json $DOCKERFILE > $ARTIFACT_FOLDER/hadolint_results.json || exit 0
 
    artefaktet:
        kur: gjithmonë # kthe artefaktet edhe pas dështimit të punës       
        rrugët:
        - $ARTIFACT_FOLDER/hadolint_results.json
 
Dockle:
    # Analizimi i praktikave më të mira në lidhje me imazhin docker (privilegjet e përdoruesve, instrukcionet e ndjekura gjatë ndërtimit të imazhit, etj.)
    stage: skano   
    image: docker:git
 
    pas_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   
     
    artefaktet:
        kur: gjithmonë # kthe artefaktet edhe pas dështimit të punës       
        rrugët:
        - $ARTIFACT_FOLDER/dockle_results.json
 
Trivy:
    # Analizimi i imazhit docker dhe varësive të paketës kundër disa bazave CVE
    stage: skano   
    image: docker:git
 
    script:
    # duke marrë Trivyn më të fundit
    - 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
     
    # duke shfaqur të gjitha dobësitë pa dështuar ndërtimin
    - ./trivy -d --cache-dir $TRIVYCACHE -f json -o $ARTIFACT_FOLDER/trivy_results.json --exit-code 0 $DOCKERIMAGE    
    
    # shkruani informacionin mbi dobësitë në stdout në format të lexueshëm (leximi i JSON-it të pastër nuk është argëtues, a jo?). Mund ta hiqni këtë nëse nuk keni nevojë për të.
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 0 $DOCKERIMAGE    
 
    # duke dështuar ndërtimin nëse prioriteti SHOWSTOPPER gjendet
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 1 --severity $SHOWSTOPPER_PRIORITY --quiet $DOCKERIMAGE
         
    artefaktet:
        kur: gjithmonë # kthe artefaktet edhe pas dështimit të punës
        rrugët:
        - $ARTIFACT_FOLDER/trivy_results.json
 
    cache:
        rrugët:
        - .cache
 
Raporti:
    # duke kombinuar daljet e mjeteve në një HTML
    stage: raport
    kur: gjithmonë
    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
     
    artefaktet:
        rrugët:
        - results.html

Nëse është e nevojshme, gjithashtu mund të skanoni dhe imazhet e ruajtura si arkiv .tar (megjithatë do të jetë e nevojshme të ndryshoni parametrat hyrës për utilitetet në skedarin YAML)

NB: Trivy kërkon që të instalohet për ta filluar funksionimin e tij rpm dhe git. Në të kundërt, ai do të japë gabime gjatë skanimit të imazheve bazuar në RedHat dhe gjatë marrjes së azhurnimeve të bazës së të dhënave të dobësive.

2. Pas shtimit tĂ« skedarĂ«ve nĂ« depo, sipas udhĂ«zimeve nĂ« skedarin tonĂ« tĂ« konfigurimit, GitLab automatikisht do tĂ« fillojĂ« procesin e ndĂ«rtimit dhe skanimit. NĂ« skedĂ«n CI/CD → Pipelines mund tĂ« shihni avancimin e udhĂ«zimeve.

Si rezultat, kemi katër detyra. Tre prej tyre merren direkt me skanimin dhe e fundit (Raporti) mbledh një raport të thjeshtë nga skedarët e veçuara me rezultatet e skanimit.
Metodat dhe shembujt e implementimit të mjeteve për kontrollin e sigurisë Docker
Sipas të dhënave të paracaktuara, Trivy ndalon funksionimin e tij nëse zbulohen dobësi CRITICAL në imazh ose varësi. Ndërkohë, Hadolint gjithmonë kthen një kod suksesi, pasi gjithmonë ka vërejtje që rezultojnë në ndalimin e ndërtimit.

Në varësi të kërkesave specifike, mund të konfigurohet kodi i daljes, që këto utilitete të ndalojnë gjithashtu procesin e ndërtimit kur zbulojnë probleme me kriticitet të caktuar. Në rastin tonë, ndërtimi do të ndalojë vetëm nëse Trivy zbulojnë një dobësi me kriticitetin që kemi specifikuar në variablën SHOWSTOPPER në .gitlab-ci.yml.
Metodat dhe shembujt e implementimit të mjeteve për kontrollin e sigurisë Docker

Rezultati i punës së secilës utilitet mund të shihet në logun e çdo detyre skanuese, direkt në skedarët json në seksionin artifacts ose në një raport të thjeshtë HTML (për të cilin do të flasim më poshtë):
Metodat dhe shembujt e implementimit të mjeteve për kontrollin e sigurisë Docker

3. Për paraqitjen e raporteve të utiliteteve në një format pak më të lexueshëm për njeriun, përdoret një skscript i vogël në Python për të konvertuar tre skedarë json në një skedar HTML me tabelën e defekteve.
Ky skscript ekzekutohet si një detyrë e veçantë Raporti, dhe artefakti i tij përfundimtar është një skedar HTML me raportin. Burimi i skscriptit është gjithashtu në depo dhe mund të adaptohet sipas nevojave tuaja, ngjyrave etj.
Metodat dhe shembujt e implementimit të mjeteve për kontrollin e sigurisë Docker

Shell-skript

Kjo opsion është e përshtatshme për raste kur është e nevojshme të kontrolloni imazhet Docker jashtë sistemit CI/CD ose kur keni nevojë të keni të gjitha udhëzimet në një format që mund të ekzekutohet drejtpërdrejt në host. Ky opsion mbulohet nga një shell script gati, i cili mund të ekzekutohet në një makinë virtuale (apo madje edhe reale) të pastër. Skripti kryen të njëjtat udhëzime si gitlab-runner i përshkruar më sipër.

Për të funksionuar me suksesi, skripti duhet të ketë Docker të instaluar në sistem, dhe përdoruesi aktual duhet të jetë në grupin docker.

Mund ta merrni skriptin këtu: docker_sec_check.sh

Në fillim të skedarit, variablat përcaktojnë cilin imazh duhet të skanohet dhe defektet e cilësisë së caktuar do të shkaktojnë daljen e utilitarit Trivy me kodin e specifikuar të gabimit.

Gjatë ekzekutimit të skriptit, të gjitha utilitarët do të shkarkohen në direktorinë docker_tools, rezultatet e punës së tyre do të jenë në direktorinë docker_tools/json, ndërsa HTML me raportin do të jetë në skedarin results.html.

Shembulli i daljes së skriptit

~\/docker_cicd$ .\/docker_sec_check.sh

[+] Duke vendosur variablat e ambientit
[+] Duke instaluar paketat e nevojshme
[+] Duke përgatitur direktoritë e nevojshme
[+] Duke shkarkuar Dockerfile-në shembull
2020-10-20 10:40:00 (45.3 MB\/s) - ‘Dockerfile’ shpĂ«tuar [8071\/8071]
[+] Duke tërhequr imazhin për skanimin
latest: Tërheqja nga bkimminich\/juice-shop
[+] Duke ekzekutuar Hadolint
...
Dockerfile:205 DL3015 Shmangni paketa të tjera duke specifikuar `--no-install-recommends`
Dockerfile:248 DL3002 Përdoruesi fundit nuk duhet të jetë root
...
[+] Duke ekzekutuar Dockle
...
WARN    - DKL-DI-0006: Shmangni etiketën latest
        * Shmangni etiketën 'latest'
INFO    - CIS-DI-0005: Aktivizoni besimin në përmbajtje për Docker
        * eksportoni DOCKER_CONTENT_TRUST=1 para docker pull\/build
...
[+] Duke ekzekutuar Trivy
juice-shop\/frontend\/package-lock.json
=====================================
Totali: 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  | Ndotëshe prototipi në  |
|                     |                  |          |         | object-path             |
+---------------------+------------------+          +---------+-------------------------+
| tree-kill           | CVE-2019-15599   |          | 1.2.2   | Injektim Kode         |
+---------------------+------------------+----------+---------+-------------------------+
| webpack-subresource | CVE-2020-15262   | LOW      | 1.4.1   | Nënrotull të paproteguar |
|                     |                  |          |         | ngarkesa               |
+---------------------+------------------+----------+---------+-------------------------+

juice-shop\/package-lock.json
============================
Totali: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)

...

juice-shop\/package-lock.json
============================
Totali: 5 (CRITICAL: 5)

...
[+] Duke hequr mbeturinat
[+] Duke e bërë daljen të duket e bukur
[+] Duke konvertuar rezultatet në JSON
[+] Duke shkruar rezultate HTML
[+] Dalje e pastër ============================================================
[+] Çdo gjĂ« Ă«shtĂ« bĂ«rĂ«. Gjeni raportin pĂ«rfundimtar HTML nĂ« results.html

Imazhi Docker me të gjitha utilitetet

Si një alternativë të tretë, unë përgatita dy Dockerfile të thjeshta për të krijuar imazhin me utilitetet e sigurisë. Një Dockerfile do të ndihmojë në ndërtimin e një grupi për skanimin e imazheve nga repositori, ndërsa tjetri (Dockerfile_tar) do të ndihmojë në ndërtimin e një grupi për skanimin e një skedari tar me imazhin.

1. Merrni skedarin përkatës Docker dhe skriptet nga repositori https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. E nisi për ndërtim:

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

3. Pas përfundimit të ndërtimit, krijoni një kontejner nga imazhi. Gjatë kësaj, kaloni variablën e ambientit DOCKERIMAGE me emrin e imazhit që na intereson dhe montoni Dockerfile, që duam të analizojmë, nga makina jonë te skedari /Dockerfile (kujdes, kërkohet rruga absolute deri në këtë skedar):

docker run --rm -v $(pwd)/results:/results -v $(pwd)/docker_security.df:/Dockerfile -e DOCKERIMAGE="bkimminich/juice-shop" dscan:image


[+] Vendosja e variablave të ambientit
[+] Ekzekutimi i Hadolint
/Dockerfile:3 DL3006 Gjithmonë etiketo versionin e një imazhi në mënyrë eksplicite
[+] Ekzekutimi i Dockle
WARN    - DKL-DI-0006: Shmangni etiketën e fundit
        * Shmangni etiketën 'latest'
INFO    - CIS-DI-0005: Aktivizoni besueshmërinë e përmbajtjes për Docker
        * eksportoni DOCKER_CONTENT_TRUST=1 para docker pull/build
INFO    - CIS-DI-0006: Shtoni instrukcionin HEALTHCHECK në imazhin e kontejnerit
        * nuk është gjetur deklarata HEALTHCHECK
INFO    - DKL-LI-0003: Vendosni vetëm skedarët e nevojshëm
        * skedari i panevojshëm: juice-shop/node_modules/sqlite3/Dockerfile
        * skedari i panevojshëm: juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm64/Dockerfile
        * skedari i panevojshëm: juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm/Dockerfile
[+] Ekzekutimi i Trivy
...
juice-shop/package-lock.json
============================
Totali: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)
...
[+] Duke e bërë rezultatin të duket mirë
[+] Duke filluar modulin kryesor ============================================================
[+] Duke konvertuar rezultatet në JSON
[+] Duke shkruar rezultatet në HTML
[+] Dalja e pastër ============================================================
[+] Çdo gjĂ« Ă«shtĂ« bĂ«rĂ«. Gjeni raportin pĂ«rfundimtar nĂ« results.html

Rezultatet

Ne shqyrtuam vetëm një grup bazik të utiliteteve për skanimin e artefakteve Docker, të cilin, sipas mendimit tim, e mbulon mjaft efektivisht një pjesë të konsiderueshme të kërkesave për sigurinë e imazheve. Ekziston akoma një numër i madh mjetesh paguese dhe falas që mund të kryejnë të njëjtat kontrollime, të vizatojnë raporte të bukura ose të punojnë thjesht në modin konsol, duke mbuluar sistemet e menaxhimit të kontejnerëve etj. Një përmbledhje e këtyre mjeteve dhe mënyrat e integrimit të tyre, ndoshta do të shfaqet pak më vonë.

Një anë pozitive e grupit të mjeteve të përshkruar në artikull është se të gjitha ato janë të ndërtuara mbi kodin e hapur dhe ju mund të eksperimentoni me to dhe mjete të tjera të ngjashme për të gjetur se çfarë saktësisht i përshtatet kërkesave tuaja dhe veçorive të infrastrukturës. Sigurisht, të gjitha dobësitë që do të zbulohen duhet të studiohen për aplikueshmërinë e tyre në kushte të caktuara, por kjo është një temë për një artikull të madh në të ardhmen.

Shpresoj që ky udhëzues, skriptet dhe utilitat t'ju ndihmojnë dhe të bëhen një pikë fillestare për krijimin e një infrastrukture më të sigurt në fushën e konteinerizimit.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster