Metodi è esempi di implementazione di utilità per verificà a sicurità di Docker

Metodi è esempi di implementazione di utilità per verificà a sicurità di Docker
Ehi Habr!

In a realità muderna, per via di u rolu crescente di containerizazione in i prucessi di sviluppu, u prublema di assicurà a sicurità di e diverse tappe è entità assuciate cù i cuntenituri ùn hè micca u prublema menu impurtante. A realizazione di cuntrolli manuali richiede tempu, per quessa, saria una bona idea di piglià almenu i primi passi versu l'automatizazione di stu prucessu.

In questu articulu, sparteraghju scripts pronti per implementà parechje utilità di sicurezza Docker è struzzioni nantu à cumu implementà un picculu stand demo per pruvà stu prucessu. Pudete utilizà i materiali per sperimentà cumu urganizà u prucessu di pruvà a sicurità di l'imaghjini è l'istruzzioni di Dockerfile. Hè chjaru chì l'infrastruttura di sviluppu è di implementazione di tutti hè diversu, cusì quì sottu daraghju parechje opzioni pussibuli.

Utilità di cuntrollu di sicurezza

Ci hè un gran numaru di diverse applicazioni d'aiutu è script chì facenu cuntrolli nantu à diversi aspetti di l'infrastruttura Docker. Alcune di elli sò digià descritte in l'articulu precedente (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), è in questu materiale mi piacerebbe fucalizza nantu à trè di elli, chì coprenu a maiò parte di e esigenze di sicurità per l'imaghjini Docker custruiti durante u prucessu di sviluppu. Inoltre, vi mustrarà ancu un esempiu di cumu questi trè utilità ponu esse cunnessi in una pipeline per eseguisce cuntrolli di sicurezza.

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

Una utilità di cunsola abbastanza simplice chì aiuta, cum'è una prima approssimazione, valutà a correttezza è a sicurità di l'istruzzioni di Dockerfile (per esempiu, utilizendu solu registri d'imagine autorizati o utilizendu sudo).

Metodi è esempi di implementazione di utilità per verificà a sicurità di Docker

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

Una utilità di cunsola chì travaglia cù una maghjina (o cù un archiviu tar salvatu di una maghjina), chì verifica a correttezza è a sicurità di una maghjina particulare cum'è tali, analizendu i so strati è a cunfigurazione - quali utilizatori sò creati, quali struzzioni sò utilizati, quale i volumi sò muntati, a presenza di una password viota, etc.. D. Finu à quì u numeru di cuntrolli ùn hè micca assai grande è hè basatu annantu à parechji di i nostri cuntrolli è cunsiglii. Benchmark CIS (Center for Internet Security). per Docker.
Metodi è esempi di implementazione di utilità per verificà a sicurità di Docker

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

Questa utilità hè destinata à truvà dui tipi di vulnerabilità - prublemi cù e custruzzioni di u SO (supportatu da Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu) è prublemi cù dipendenze (Gemfile.lock, Pipfile.lock, composer.lock, package). -lock.json, yarn.lock, cargo.lock). Trivy pò scansà una maghjina in u repositoriu è una maghjina lucale, è pò ancu scansà basatu annantu à u schedariu .tar trasferitu cù l'imaghjini Docker.

Metodi è esempi di implementazione di utilità per verificà a sicurità di Docker

Opzioni per implementà utilità

Per pruvà l'applicazioni descritte in un ambiente isolatu, daraghju struzzioni per installà tutte l'utilità in un prucessu un pocu simplificatu.

L'idea principale hè di dimustrà cumu pudete implementà a verificazione automatica di u cuntenutu di Dockerfiles è l'imaghjini Docker chì sò creati durante u sviluppu.

U cuntrollu stessu hè custituitu da i seguenti passi:

  1. Verificate a correttezza è a sicurità di l'istruzzioni di Dockerfile utilizendu una utilità linter Hadolint
  2. Verificate a correttezza è a sicurità di l'imaghjini finali è intermedi cù una utilità Dockle
  3. Verificate a presenza di vulnerabili publicamente cunnisciute (CVE) in l'imaghjini di basa è una quantità di dependenzii - utilizendu l'utilità Trivy

Più tardi in l'articulu daraghju trè opzioni per implementà sti passi:
U primu hè cunfigurà u pipeline CI / CD utilizendu GitLab cum'è un esempiu (cun ​​​​una descrizzione di u prucessu di crià una istanza di prova).
U sicondu hè aduprà un script shell.
U terzu implica di custruisce una maghjina Docker per scansà l'imaghjini Docker.
Pudete sceglie l'opzione chì vi cunvene megliu, trasferisce à a vostra infrastruttura è adatta à i vostri bisogni.

Tutti i fugliali necessarii è l'istruzzioni supplementarii sò ancu situati in u repository: https://github.com/Swordfish-Security/docker_cicd

Integrazione in GitLab CI/CD

In a prima opzione, guardemu cumu pudete implementà cuntrolli di sicurezza utilizendu u sistema di repository GitLab per esempiu. Quì passeremu i passi è capisce cumu installà un ambiente di prova cù GitLab da zero, creà un prucessu di scansione è lanciate utilità per verificà a prova Dockerfile è una maghjina aleatoria - l'applicazione JuiceShop.

Installazione di GitLab
1. Installa Docker:

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

2. Aghjunghjite l'utilizatore attuale à u gruppu docker per pudè travaglià cù docker senza aduprà sudo:

sudo addgroup <username> docker

3. Truvate u vostru IP:

ip addr

4. Installa è lanciate GitLab in u cuntinuu, rimpiazzendu l'indirizzu IP in u nome d'ospitu cù u vostru propiu:

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

Aspittemu finu à chì GitLab compie tutte e prucedure di stallazione necessarie (pudete monitorà u prucessu attraversu l'output di u schedariu di log: docker logs -f gitlab).

5. Aprite a vostra IP locale in u navigatore è vede una pagina chì vi dumanda di cambià a password per l'utilizatore root:
Metodi è esempi di implementazione di utilità per verificà a sicurità di Docker
Stabilite una nova password è andate à GitLab.

6. Crea un novu prughjettu, per esempiu cicd-test è inizializza cù u schedariu di partenza README.md:
Metodi è esempi di implementazione di utilità per verificà a sicurità di Docker
7. Avà avemu bisognu di stallà GitLab Runner: un agentu chì eseguirà tutte l'operazioni necessarie nantu à dumanda.
Scaricate l'ultima versione (in questu casu, per 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. Fate eseguibile:

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

9. Aghjunghjite un utilizatore OS per Runner è cuminciate u serviziu:

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

Duverebbe vede qualcosa cum'è questu:

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. Avà avemu registratu u Runner per pudè interagisce cù a nostra istanza GitLab.
Per fà questu, apre a pagina Settings-CI/CD (http://OUR_IP_ADDRESS/root/cicd-test/-/settings/ci_cd) è in a tabulazione Runners truvate l'URL è u token di Registrazione:
Metodi è esempi di implementazione di utilità per verificà a sicurità di Docker
11. Registrate Runner sustituendu l'URL è u token di Registrazione:

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"

In u risultatu, avemu un GitLab di travagliu prontu, in quale avemu bisognu di aghjunghje struzzioni per inizià e nostre utilità. In questa demo ùn avemu micca i passi per custruisce l'applicazione è containerizeghja, ma in un ambiente reale questi precederanu i passi di scanning è generanu l'imaghjini è un Dockerfile per l'analisi.

cunfigurazione di pipeline

1. Aghjunghjite i schedari à u repository mydockerfile.df (questu hè un Dockerfile di prova chì avemu da verificà) è u schedariu di cunfigurazione di prucessu GitLab CI / CD .gitlab-cicd.yml, chì liste l'istruzzioni per i scanners (nota u puntu in u nome di u schedariu).

U schedariu di cunfigurazione YAML cuntene struzzioni per eseguisce trè utilità (Hadolint, Dockle è Trivy) chì analizà u Dockerfile sceltu è l'imaghjini specificati in a variabile DOCKERFILE. Tutti i schedarii necessarii ponu esse pigliati da u repository: https://github.com/Swordfish-Security/docker_cicd/

Estratto da mydockerfile.df (questu hè un schedariu astrattu cù un inseme di struzzioni arbitrarie solu per dimustrà u funziunamentu di l'utilità). Ligame direttu à u schedariu: mydockerfile.df

Cuntenutu di 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

A cunfigurazione YAML pare cusì (u schedariu stessu pò esse truvatu via u ligame direttu quì: .gitlab-ci.yml):

Cuntenutu di .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

Se necessariu, pudete ancu scansà l'imaghjini salvati in a forma di un archiviu .tar (in ogni modu, avete bisognu di cambià i paràmetri di input per l'utilità in u schedariu YAML)

NB: Trivy richiede l'installazione rpm и andà. Altrimenti, generarà errori quandu scanse l'imaghjini basati in RedHat è riceve l'aghjurnamenti à a basa di dati di vulnerabilità.

2. Dopu avè aghjustatu i schedari à u repository, secondu l'istruzzioni in u nostru schedariu di cunfigurazione, GitLab hà da inizià automaticamente u prucessu di creazione è scansione. In a tabulazione CI/CD → Pipelines pudete vede u prugressu di l'istruzzioni.

In u risultatu, avemu quattru compiti. Trè d'elli trattanu direttamente cù scanning, è l'ultimu (Report) raccoglie un rapportu simplice da i schedari spargugliati cù risultati di scanning.
Metodi è esempi di implementazione di utilità per verificà a sicurità di Docker
Per automaticamente, Trivy cessà di correre se vulnerabili CRITICI sò rilevati in l'imaghjini o dependenze. À u listessu tempu, Hadolint sempre torna un codice Successu perchè sempre risultati in cumenti, chì face chì a custruzzione ferma.

Sicondu i vostri bisogni specifichi, pudete cunfigurà un codice di uscita in modu chì quandu queste utilità detectanu prublemi di una certa criticità, fermanu ancu u prucessu di custruzzione. In u nostru casu, a custruzione si ferma solu se Trivy detecta una vulnerabilità cù a criticità chì avemu specificatu in a variabile SHOWSTOPPER in u nostru casu. .gitlab-ci.yml.
Metodi è esempi di implementazione di utilità per verificà a sicurità di Docker

U risultatu di ogni utilità pò esse vistu in u logu di ogni scanning task, direttamente in i fugliali json in a sezione di l'artifacti, o in un rapportu HTML simplice (più nantu à quì sottu):
Metodi è esempi di implementazione di utilità per verificà a sicurità di Docker

3. Per prisentà i rapporti di utilità in una forma ligeramente più leggibile per l'omu, un picculu script Python hè utilizatu per cunvertisce trè schedari JSON in un schedariu HTML cù una tavola di difetti.
Stu script hè lanciatu da un compitu di rapportu separatu, è u so artefattu finali hè un schedariu HTML cù un rapportu. A fonte di script hè ancu in u repositoriu è pò esse adattatu per adattà à i vostri bisogni, culori, etc.
Metodi è esempi di implementazione di utilità per verificà a sicurità di Docker

Scrittura di Shell

A seconda opzione hè adattata per i casi quandu avete bisognu di verificà l'imaghjini di Docker fora di u sistema CI / CD o avete bisognu à avè tutte l'istruzzioni in una forma chì pò esse eseguita direttamente nantu à l'ospite. Questa opzione hè coperta da un script di shell prontu chì pò esse eseguitu nantu à una macchina virtuale pulita (o ancu reale). U script eseguisce e stesse struzzioni cum'è u gitlab-runner descrittu sopra.

Per chì u script sia esecutu bè, Docker deve esse installatu in u sistema è l'utilizatore attuale deve esse in u gruppu docker.

U script stessu pò esse truvatu quì: docker_sec_check.sh

À l'iniziu di u schedariu, i variàbili specificanu quale maghjina deve esse scansata è quali difetti di criticità pruvucarà l'utilità Trivy per esce cù u codice d'errore specificatu.

Durante l'esecuzione di script, tutte l'utilità seranu scaricate in u cartulare docker_tools, i risultati di u so travagliu sò in u cartulare docker_tools/json, è u HTML cù u rapportu serà in u schedariu risultati.html.

Esempiu di script output

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

Image Docker cù tutte e utilità

Cum'è una terza alternativa, aghju compilatu dui Dockerfiles simplici per creà una maghjina cù utilità di sicurità. Un Dockerfile aiuterà à custruisce un set per scanning una maghjina da un repository, u sicondu (Dockerfile_tar) aiuterà à custruisce un set per scanning un schedariu tar cù una maghjina.

1. Pigliate u schedariu Docker currispondente è scripts da u repository https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. Lanciamu per l'assemblea:

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

3. Dopu chì l'assemblea hè finita, creamu un cuntinuu da l'imaghjini. À u listessu tempu, passemu a variabile di l'ambiente DOCKERIMAGE cù u nome di l'imaghjini chì ci interessa è muntate u Dockerfile chì vulemu analizà da a nostra macchina à u schedariu. /Dockerfile (nota chì u percorsu assolutu à stu schedariu hè necessariu):

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

Risultati

Avemu guardatu solu un inseme di basi di utilità per a scansione di l'artifacti Docker, chì, in u mo parè, copre assai efficacemente una parte decente di i bisogni di sicurezza di l'imaghjini. Ci hè ancu un gran numaru di arnesi pagati è gratuiti chì ponu fà i stessi cuntrolli, disegnà belli rapporti o travaglià puramente in modu di cunsola, copre i sistemi di gestione di cuntainer, etc. Una panoramica di sti strumenti è cumu si integrà pò esse un pocu dopu. .

A cosa bona di u settore di l'arnesi descritti in questu articulu hè chì sò tutti open source è pudete sperimentà cun elli è altri strumenti simili per truvà ciò chì cunvene à i vostri bisogni è infrastruttura. Di sicuru, tutti i vulnerabili chì si trovanu deve esse studiatu per l'applicabilità in cundizioni specifiche, ma questu hè un tema per un futuru grande articulu.

Spergu chì sta guida, scripts è utilità vi aiuterà è diventà un puntu di partenza per creà una infrastruttura più sicura in l'area di containerizazione.

Source: www.habr.com

Add a comment