Fomba sy ohatra amin'ny fampiharana ny fampiasa amin'ny fanamarinana ny fiarovana Docker

Fomba sy ohatra amin'ny fampiharana ny fampiasa amin'ny fanamarinana ny fiarovana Docker
Hey Habr!

Amin'ny zava-misy maoderina, noho ny fitomboan'ny andraikitry ny containerization amin'ny fizotran'ny fampandrosoana, ny olana momba ny fiarovana ny dingana sy ny sampana samihafa mifandraika amin'ny container dia tsy olana lehibe indrindra. Mandany fotoana ny fanaovana fanaraha-maso amin'ny tanana, noho izany dia tsara ny manao farafaharatsiny ny dingana voalohany amin'ny fanaovana automatique ity dingana ity.

Ato amin'ity lahatsoratra ity dia hizara script efa vonona aho amin'ny fampiharana ny fitaovana fiarovana Docker maromaro sy ny torolàlana momba ny fomba fametrahana toerana demo kely hizaha toetra ity dingana ity. Azonao atao ny mampiasa ny fitaovana hanandrana ny fomba fandaminana ny fizotran'ny fitiliana ny fiarovana ny sary sy ny torolàlana Dockerfile. Mazava fa samy hafa ny fotodrafitrasa fampandrosoana sy fampiharana ny tsirairay, ka eto ambany aho dia hanome safidy maro azo atao.

Fitaovana fanaraha-maso fiarovana

Betsaka ny rindranasa sy script mpanampy maro samihafa izay manao fisavana amin'ny lafiny samihafa amin'ny fotodrafitrasa Docker. Ny sasany amin'izy ireo dia efa nofaritana tao amin'ny lahatsoratra teo aloha (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), ary amin'ity fitaovana ity dia tiako ny hifantoka amin'ny telo amin'izy ireo, izay mandrakotra ny ankamaroan'ny fepetra fiarovana ho an'ny sary Docker namboarina nandritra ny dingana fampandrosoana. Ho fanampin'izay, hasehoko ihany koa ny ohatra iray amin'ny fomba hampifandraisana ireo kojakoja telo ireo amin'ny fantsona iray hanaovana fisavana fiarovana.

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

Fitaovana fampiononana tsotra izay manampy, amin'ny fanombanana voalohany, manombana ny fahamarinan'ny torolàlana Dockerfile (ohatra, mampiasa rejisitra sary nahazo alalana fotsiny na mampiasa sudo).

Fomba sy ohatra amin'ny fampiharana ny fampiasa amin'ny fanamarinana ny fiarovana Docker

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

Fitaovana fampiononana izay miasa miaraka amin'ny sary iray (na miaraka amin'ny arisivan'ny tara voatahiry amin'ny sary iray), izay manara-maso ny fahamarinan'ny sary iray manokana toy izany, manadihady ny sosona sy ny fanamafisana azy - izay noforonina ny mpampiasa, ny torolàlana ampiasaina, izay apetraka ny boky, ny fisian'ny tenimiafina poakaty, sns d. Hatreto dia tsy dia be loatra ny isan'ny fisavana ary mifototra amin'ny fisavana sy ny soso-kevitray manokana. CIS (Center for Internet Security) Benchmark ho an'ny Docker.
Fomba sy ohatra amin'ny fampiharana ny fampiasa amin'ny fanamarinana ny fiarovana Docker

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

Ity fitaovana ity dia mikendry ny hahita karazana vulnerabilities roa - olana amin'ny fananganana OS (tohanan'ny Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu) ary olana amin'ny fiankinan-doha (Gemfile.lock, Pipfile.lock, composer.lock, fonosana -lock.json , yarn.lock, cargo.lock). Ny Trivy dia afaka mijery sary iray ao amin'ny tahiry sy sary eo an-toerana, ary afaka mijery ihany koa mifototra amin'ny rakitra .tar nafindra miaraka amin'ny sary Docker.

Fomba sy ohatra amin'ny fampiharana ny fampiasa amin'ny fanamarinana ny fiarovana Docker

Safidy amin'ny fampiharana utility

Mba hanandrana ireo fampiharana voalaza ao amin'ny tontolo mitoka-monina, dia hanome torolalana amin'ny fametrahana ny kojakoja rehetra amin'ny dingana somary tsotsotra aho.

Ny hevitra fototra dia ny fampisehoana ny fomba ahafahanao mampihatra ny fanamarinana votoaty mandeha ho azy amin'ny sary Dockerfiles sy Docker izay noforonina nandritra ny fampandrosoana.

Ny fanamarinana dia ahitana ireto dingana manaraka ireto:

  1. Fanamarinana ny fahamendrehana sy ny fiarovana ny torolàlana Dockerfile amin'ny fampiasana fitaovana linter Hadolint
  2. Fanamarinana ny fahamendrehana sy ny fiarovana ny sary farany sy manelanelana amin'ny fampiasana fitaovana iray Dockle
  3. Fanamarinana ny fisian'ny vulnerabilities fanta-daza (CVE) amin'ny sary fototra sy ny fiankinan-doha maromaro - mampiasa ny utility Trivy

Any aoriana ao amin'ny lahatsoratra dia hanome safidy telo aho amin'ny fampiharana ireto dingana ireto:
Ny voalohany dia amin'ny alàlan'ny fanamafisana ny fantsona CI/CD amin'ny fampiasana GitLab ho ohatra (miaraka amin'ny famaritana ny fizotran'ny fananganana ohatra fitsapana).
Ny faharoa dia mampiasa script shell.
Ny fahatelo dia misy ny fananganana sary Docker mba hijerena sary Docker.
Azonao atao ny misafidy ny safidy mety aminao, mamindra izany amin'ny fotodrafitrasao ary mampifanaraka azy amin'ny filanao.

Ny rakitra ilaina rehetra sy ny torolàlana fanampiny dia hita ao amin'ny tahiry: https://github.com/Swordfish-Security/docker_cicd

Fampidirana amin'ny GitLab CI/CD

Amin'ny safidy voalohany, hojerentsika ny fomba ahafahanao mampihatra ny fisavana fiarovana amin'ny fampiasana ny rafitra fitahirizana GitLab ho ohatra. Eto isika dia handeha amin'ny dingana ary hamantatra ny fomba fametrahana tontolo fitsapana miaraka amin'ny GitLab hatrany am-boalohany, mamorona fizotry ny scan ary manomboka fitaovana hanamarinana ny Dockerfile fitsapana sy sary kisendrasendra - ny fampiharana JuiceShop.

Fametrahana GitLab
1. Mametraka Docker:

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

2. Ampio ny mpampiasa ankehitriny amin'ny vondrona docker mba hahafahanao miara-miasa amin'ny docker tsy mampiasa sudo:

sudo addgroup <username> docker

3. Tadiavo ny IP-nao:

ip addr

4. Apetraho sy atombohy ny GitLab ao anaty fitoeran-javatra, soloy ny adiresy IP amin'ny anaran'ny mpampiantrano amin'ny anao manokana:

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

Miandry izahay mandra-pahavitan'ny GitLab ny fomba fametrahana ilaina rehetra (azonao atao ny manara-maso ny dingana amin'ny alàlan'ny famoahana rakitra log: docker logs -f gitlab).

5. Sokafy ny IP eo an-toerana ao amin'ny navigateur ary jereo ny pejy iray mangataka anao hanova ny tenimiafina ho an'ny mpampiasa root:
Fomba sy ohatra amin'ny fampiharana ny fampiasa amin'ny fanamarinana ny fiarovana Docker
Mametraha tenimiafina vaovao ary mankanesa any GitLab.

6. Mamorona tetikasa vaovao, ohatra cicd-test ary atombohy amin'ny rakitra fanombohana README.md:
Fomba sy ohatra amin'ny fampiharana ny fampiasa amin'ny fanamarinana ny fiarovana Docker
7. Ankehitriny dia mila mametraka GitLab Runner isika: mpandraharaha iray izay hanatanteraka ny asa rehetra ilaina amin'ny fangatahana.
Ampidino ny kinova farany (amin'ity tranga ity, ho an'ny 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. Ataovy azo tanterahina:

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

9. Manampia mpampiasa OS ho an'ny Runner ary manomboka ny serivisy:

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

Tokony ho toy izao izany:

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. Ankehitriny dia manoratra ny mpihazakazaka izahay mba hahafahany mifandray amin'ny ohatra GitLab.
Mba hanaovana izany, sokafy ny pejy Settings-CI/CD (http://OUR_IP_ADDRESS/root/cicd-test/-/settings/ci_cd) ary eo amin'ny tabilao mpihazakazaka mahita ny URL sy ny mari-pamantarana fisoratana anarana:
Fomba sy ohatra amin'ny fampiharana ny fampiasa amin'ny fanamarinana ny fiarovana Docker
11. Misoratra anarana mpihazakazaka amin'ny fanoloana ny URL sy ny mari-pamantarana fisoratana anarana:

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"

Vokatr'izany dia mahazo GitLab miasa efa vonona izahay, izay ilaintsika ampiana toromarika hanombohana ny fampiasantsika. Amin'ity demo ity dia tsy manana dingana hananganana ny rindranasa sy hamehezana azy izahay, fa amin'ny tontolo tena izy ireo dia hialoha ny dingana scanning ary hiteraka sary sy Dockerfile ho an'ny fanadihadiana.

fanamboarana fantsona

1. Ampio ny rakitra ao amin'ny tahiry mydockerfile.df (Ity dia Dockerfile fitsapana izay hojerentsika) sy ny rakitra fikirakirana GitLab CI/CD .gitlab-cicd.yml, izay mitanisa toromarika ho an'ny scanner (mariho ny teboka amin'ny anaran'ny rakitra).

Ny rakitra fanamafisana YAML dia misy torolalana hampandehanana fitaovana telo (Hadolint, Dockle, ary Trivy) izay hamakafaka ny Dockerfile voafantina sy ny sary voatondro ao amin'ny fari-piadidiana DOCKERFILE. Ny rakitra ilaina rehetra dia azo alaina ao amin'ny tahiry: https://github.com/Swordfish-Security/docker_cicd/

Sombin'ny mydockerfile.df (rakitra tsy misy dikany ity miaraka amin'ny toromarika tsy misy dikany mba hampisehoana ny fiasan'ny fitaovana). Rohy mivantana mankany amin'ny rakitra: mydockerfile.df

Ny votoatin'ny 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

Toy izao ny config YAML (azo jerena amin'ny alalan'ny rohy mivantana eto ny rakitra: .gitlab-ci.yml):

Ny votoatin'ny .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

Raha ilaina dia azonao atao ihany koa ny mijery sary voatahiry amin'ny endrika arsiva .tar (na izany aza, mila manova ny mari-pamantarana fampidirana ho an'ny fitaovana ao amin'ny rakitra YAML ianao)

NB: Mila apetraka ny Trivy isa-minitra и Mandehana. Raha tsy izany dia hiteraka hadisoana izany rehefa mijery sary miorina amin'ny RedHat ary mahazo fanavaozana amin'ny angon-drakitra vulnerable.

2. Aorian'ny fampidirana rakitra ao amin'ny tahiry, araka ny torolalana ao amin'ny fichier configuration, dia hanomboka ho azy ny dingana fananganana sy scan ny GitLab. Ao amin'ny tabilao CI/CD → Pipelines dia hitanao ny fivoaran'ny toromarika.

Vokany, manana asa efatra izahay. Ny telo amin'izy ireo dia mifandray mivantana amin'ny scan, ary ny farany (Report) dia manangona tatitra tsotra avy amin'ny rakitra miparitaka miaraka amin'ny valin'ny scan.
Fomba sy ohatra amin'ny fampiharana ny fampiasa amin'ny fanamarinana ny fiarovana Docker
Amin'ny alàlan'ny default dia mijanona tsy mihazakazaka ny Trivy raha hita ao amin'ny sary na ny fiankinan-doha ny vulnerabilities CRITICAL. Mandritra izany fotoana izany, i Hadolint dia mamerina fehezan-dalàna Success foana satria miteraka fanehoan-kevitra hatrany, izay mahatonga ny fananganana hijanona.

Miankina amin'ny fepetra takinao manokana, azonao atao ny manamboatra kaody fivoahana ka rehefa mahita olana amin'ny fanakianana sasany ireo fitaovana ireo dia hampitsahatra ny fizotry ny fananganana. Amin'ity tranga ity dia hijanona ihany ny fananganana raha toa ka hitan'i Trivy ny fahalemena miaraka amin'ny fanakianana izay nofaritanay tao amin'ny fari-piadidiana SHOWSTOPPER .gitlab-ci.yml.
Fomba sy ohatra amin'ny fampiharana ny fampiasa amin'ny fanamarinana ny fiarovana Docker

Ny vokatry ny fitaovana tsirairay dia azo jerena ao amin'ny diarin'ny asa scanning tsirairay, mivantana ao amin'ny rakitra json ao amin'ny fizarana artifacts, na amin'ny tatitra HTML tsotra (bebe kokoa momba izany eto ambany):
Fomba sy ohatra amin'ny fampiharana ny fampiasa amin'ny fanamarinana ny fiarovana Docker

3. Mba hampisehoana ny tatitry ny fitaovana amin'ny endrika mora vakiana kokoa noho ny olombelona, ​​dia misy script Python kely ampiasaina hamadihana rakitra JSON telo ho rakitra HTML iray misy latabatra misy kilema.
Ity script ity dia natomboka tamin'ny asa Report mitokana, ary ny artifact farany dia rakitra HTML misy tatitra. Ao amin'ny tahiry ihany koa ny loharanon'ny script ary azo ampifanarahana amin'ny filanao, loko, sns.
Fomba sy ohatra amin'ny fampiharana ny fampiasa amin'ny fanamarinana ny fiarovana Docker

Shell script

Ny safidy faharoa dia mety amin'ny tranga izay mila manamarina ny sary Docker ivelan'ny rafitra CI/CD na mila manana ny torolàlana rehetra amin'ny endrika azo tanterahina mivantana amin'ny mpampiantrano. Ity safidy ity dia voarakotry ny script akorandriaka efa vita izay azo atao amin'ny milina virtoaly madio (na tena izy mihitsy aza). Ny script dia manatanteraka toromarika mitovy amin'ny gitlab-runner voalaza etsy ambony.

Mba hahombiazana ny script dia tsy maintsy apetraka amin'ny rafitra ny Docker ary ny mpampiasa ankehitriny dia tsy maintsy ao amin'ny vondrona docker.

Ny script mihitsy dia azo jerena eto: docker_sec_check.sh

Eo am-piandohan'ny rakitra, ny variables dia mamaritra hoe iza no sary tokony hojerena ary inona no lesoka amin'ny fanakianana mety hahatonga ny fampiasa Trivy hivoaka miaraka amin'ny fehezan-dalàna diso.

Mandritra ny fanatanterahana ny script dia alaina ao amin'ny lahatahiry ny fitaovana rehetra docker_tools, ny vokatry ny asany dia ao amin'ny lahatahiry docker_tools/json, ary ny HTML miaraka amin'ny tatitra dia ho ao amin'ny rakitra results.html.

Output script ohatra

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

Sary Docker miaraka amin'ny fitaovana rehetra

Ho safidy fahatelo, nanangona Dockerfiles roa tsotra aho mba hamoronana sary misy fitaovana fiarovana. Ny Dockerfile iray dia hanampy amin'ny fananganana andian-tsarimihetsika hijerena sary avy amin'ny tahiry iray, ny faharoa (Dockerfile_tar) dia hanampy amin'ny fananganana andian-tsarimihetsika ho an'ny fichier tar misy sary.

1. Raiso ny rakitra Docker sy ny script mifanaraka amin'izany ao amin'ny tahiry https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. Atombotsika amin'ny fivoriambe izany:

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

3. Rehefa vita ny fivoriambe, dia mamorona fitoeran-javatra avy amin'ny sary isika. Mandritra izany fotoana izany, mandalo ny fari-piainan'ny tontolo DOCKERIMAGE miaraka amin'ny anaran'ny sary mahaliana antsika isika ary mametraka ny Dockerfile izay tiantsika hamakafaka avy amin'ny milina mankany amin'ny rakitra. /Dockerfile (mariho fa ilaina ny lalana tanteraka mankany amin'ity rakitra ity):

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

vokatra

Tsy nijery afa-tsy fitaovana fototra iray ihany izahay amin'ny fijerena ny artifacts Docker, izay, araka ny hevitro, dia mirakitra tsara ny ampahany mendrika amin'ny fepetra fiarovana amin'ny sary. Misy ihany koa fitaovana maro karama sy maimaim-poana izay afaka manao fisavana mitovy, manao tatitra tsara tarehy na miasa amin'ny fomba fampiononana, manarona ny rafitra fitantanana container, sns. .

Ny zavatra tsara momba ireo fitaovana voalaza ato amin'ity lahatsoratra ity dia loharano misokatra avokoa izy ireo ary afaka manandrana azy ireo ianao sy ireo fitaovana hafa mitovy amin'izany hahitana izay mifanaraka amin'ny filanao sy ny fotodrafitrasa. Mazava ho azy fa ny vulnerabilities rehetra hita dia tokony hodinihina amin'ny fampiharana amin'ny fepetra manokana, fa lohahevitra ho an'ny lahatsoratra lehibe ho avy.

Manantena aho fa hanampy anao ity torolalana, script ary fitaovana ity ary ho lasa fanombohana amin'ny famoronana fotodrafitrasa azo antoka kokoa amin'ny sehatry ny container.

Source: www.habr.com

Add a comment