Sicurezza per i container Docker

Nota del traduttore.: Il tema della sicurezza di Docker è senza dubbio uno dei più attuali nel mondo IT moderno. Senza ulteriori spiegazioni, presentiamo la traduzione di una nuova raccolta di consigli pertinenti. Se vi siete già interessati a questo argomento, molte di queste informazioni vi saranno familiari. Abbiamo anche arricchito la raccolta con un elenco di utili strumenti e alcune risorse per ulteriori approfondimenti.

Sicurezza per i container Docker

Vi propongo una guida per garantire la sicurezza di Docker. Sono graditi feedback, poiché si tratta maggiormente di una raccolta di estratti da diverse risorse e non tutte sono state sottoposte a un controllo approfondito. Le raccomandazioni sono suddivise in tre categorie:

  1. Misure necessarie all'interno del sistema operativo host quando si lavora con Docker;
  2. Istruzioni relative al file di configurazione della build e alla creazione di container;
  3. Strumenti per la sicurezza che possono integrarsi con le funzionalità specifiche di Docker Enterprise.


La base per questa guida è costituita da diverse risorse, molte delle quali sono elencate di seguito. Non si può considerare esaustiva, ma copre tutte le basi. Maggiori informazioni possono essere trovate nella descrizione dei test CIS (il link è fornito alla fine di questa guida), così come nella documentazione di Docker.

Docker Security Benchmark

Docker Bench for Security verifica automaticamente il tuo Docker per garantire la conformità con le migliori pratiche più comuni. Lo script funge da test euristico di sicurezza, ma non dovrebbe essere considerato come uno strumento di analisi completa.

OS dell'host

È chiaro che un contenitore Docker non può essere sicuro se il sistema host stesso non è sicuro. Pertanto, è necessario seguire le migliori pratiche per la sicurezza dei sistemi operativi. Inoltre, sarebbe saggio effettuare un'analisi delle vulnerabilità oltre ai seguenti consigli.

Regole di auditing

Crea e utilizza regole di auditing per i file relativi a Docker usando auditctl. Ad esempio, puoi aggiungere -w /usr/bin/dockerd -k docker a /etc/audit.rules e riavviare il servizio di auditing.

Modalità FIPS

L'attivazione della modalità FIPS costringe gli strumenti crittografici a passare ad algoritmi inseriti nelle FIPS (americani Federal Information Processing Standards — nota di traduzione), conformandosi così agli standard e ai requisiti federali e di settore. Se il sistema operativo dell'host supporta la modalità FIPS, può essere attivata eseguendo i seguenti comandi:

sed -i 's\/GRUB_CMDLINE_LINUX="\/GRUB_CMDLINE_LINUX="fips=1 \/g' \/etc\/default\/grub\ngrub2-mkconfig -o \/boot\/grub2\/grub.cfg && reboot

Deve anche essere attivato FIPS nel Docker Engine:

mkdir -p \/etc\/systemd\/system\/docker.service.d 2>&1; echo -e "[Service]n Environment="DOCKER_FIPS=1"" > \/etc\/systemd\/system\/docker.service.d\/fips-module.conf; systemctl daemon-reload; systemctl restart docker

Per ulteriori informazioni, vedere la documentazione Docker e Red Hat.

Docker Secrets

I dati riservati devono essere memorizzati come segreti. È possibile avviare il servizio appropriato utilizzando il comando docker service create:

docker service create --label com.docker.ucp.access.label=\/prod --name nginx --publish 443 --secret source=orcabank_prod_mobile.ca.pem.v1,target=ca.pem nginx

Per dettagli, vedere il documentazione.

Il file di configurazione di Docker

Le seguenti impostazioni possono essere aggiunte al file di configurazione /etc/docker/daemon.json:

  • "icc":false — disabilita la comunicazione tra i contenitori per evitare la fuga di informazioni non necessarie.
  • log-level: "info" — cattura tutti i log tranne quelli di debug.
  • {
      "log-driver": "syslog",
      "log-opts": {
        "syslog-address": "udp://1.2.3.4:1111"
      }
    }

    — collega la registrazione remota dei log e li invia all'indirizzo specificato. Funziona solo se è in esecuzione il demone syslog. Le opzioni supportate sono TCP e UDP. È anche possibile l'attivazione per ogni singolo container. A tale scopo, si imposta un flag speciale al momento dell'avvio di Docker (--log-opt syslog-address=ADDRESS).

  • "userns-remap": "Il_Tuo_Utente" — evita l'elevazione dei privilegi isolando lo spazio dei nomi per un utente specifico.

Sicurezza del livello di trasporto

L'accesso al demone Docker (se è necessario l'accesso remoto) deve essere limitato agli utenti con accesso alle credenziali TLS del client.

Plugin di autorizzazione

Stabilire quali utenti possono eseguire quali comandi e creare un plugin di autorizzazione corrispondente per Docker. Successivamente, avviare il demone Docker e aggiungere il plugin:

dockerd --authorization-plugin=PLUGIN_ID

Per ulteriori informazioni sulla creazione di plugin di autorizzazione, vedere documentazione.

Opzioni del demone

Il demone Docker funziona con un insieme di parametri predefiniti.

  • --live-restore — questo parametro aiuta a ridurre il tempo di inattività dei container durante lo spegnimento o il riavvio del sistema. Rende più facile applicare patch o aggiornamenti con tempi di inattività minimi;
  • --userland-proxy=false — quando sono disponibili o vengono utilizzati hairpin NAT, il proxy nello spazio utente diventa un servizio ridondante, che aumenta solo il numero di possibili vettori di attacco;
  • --no-new-privileges — impedisce ai container di ottenere privilegi aggiuntivi tramite suid o sguid;
  • --seccomp-profile /path/to/profile — se hai un profilo seccomp personalizzato, puoi applicarlo usando questo flag. Puoi saperne di più su Seccomp e Docker qui.

Configurazione dei container e dei file di build

Creazione di un utente

Assicurati che per il container sia stato creato un utente e fallo girare sotto questo utente (NON eseguire il container come root).

Accesso remoto

Disabilita l'accesso remoto al demone. Se è necessario, proteggilo con certificati.

Isola lo spazio dei nomi degli utenti

È particolarmente importante assicurarsi che lo spazio dei nomi utente in Docker sia isolato, poiché per impostazione predefinita è condiviso con lo spazio dei nomi dell'host. In alcuni casi, questo può essere sfruttato per ottenere privilegi elevati o addirittura per uscire dal contenitore. È possibile isolare lo spazio dei nomi utente modificando il file di configurazione (come descritto sopra nella sezione "File di configurazione di Docker"). Ulteriore menzione di questo problema qui è dovuta alla sua importanza.

Healthcheck

L'Healthcheck è uno strumento potente che consente di controllare l'integrità del contenitore. Può essere configurato nel Dockerfile utilizzando l'istruzione HEALTHCHECK. Gli healthcheck consentono di accertarsi che il contenitore funzioni correttamente. Nell'esempio seguente, il controllo dello stato termina con 0 se il server è attivo e con 1 se è "andato giù":

HEALTHCHECK CMD curl --fail http://localhost || exit 1

SELinux

Se SELinux è supportato dal sistema operativo host, crea o importa una politica SELinux e avvia Docker in modalità demone con SELinux abilitato:

docker daemon --selinux-enable

In questo caso, i contenitori Docker possono essere avviati con opzioni di sicurezza, ad esempio:

docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bash

Interfacce di rete

Per impostazione predefinita, Docker ascolta su tutte le interfacce di rete. Poiché nella maggior parte dei casi il traffico è atteso solo su una di esse, questo approccio aumenta ingiustificatamente il rischio di attacco. Pertanto, al momento di avviare un contenitore, è possibile collegare le sue porte a interfacce specifiche sull'host:

docker run --detach --publish 10.2.3.4:49153:80 nginx

Versioni cache di immagini

Quando si scaricano immagini, assicurarsi che la cache locale corrisponda al contenuto del repository. Altrimenti, è possibile ricevere una versione obsoleta dell'immagine o un'immagine contenente vulnerabilità.

Ponte di rete

Modello di rete predefinito, docker0, vulnerabile agli attacchi di ARP-spoofing e MAC-flooding. Per risolvere questo problema, creare un ponte di rete secondo le proprie specifiche, come descritto qui.

Avviso sul socket di Docker

Non mappare mai il socket di Docker all'interno del contenitore. Altrimenti, il contenitore avrà la possibilità di eseguire comandi Docker e, quindi, connettersi al sistema operativo dell'host e controllarlo. Non farlo.

Configurazione di Docker Enterprise

Docker Trust

Docker Trust consente di generare chiavi che possono essere utilizzate per verificare l'integrità crittografica delle immagini. Le chiavi Docker Trust possono essere usate per firmare le immagini Docker con chiavi private, verificate tramite chiavi pubbliche su Notary Server. Maggiori informazioni — qui. L'attivazione di Docker Trust in Enterprise Engine è descritta nel dettaglio nella questo documento.

Scan delle vulnerabilità

Docker Enterprise include uno scanner di vulnerabilità integrato, che permette di caricare un database CVE per la scansione offline delle vulnerabilità nelle immagini. La scansione regolare delle immagini contribuisce a renderle più sicure: l'utente riceve immediatamente avvisi sulle vulnerabilità trovate. Per ulteriori dettagli su come procedere, consulta qui.

Nota del traduttore.: Ci sono anche scanner di vulnerabilità Open Source per le immagini Docker, di cui puoi trovare esempi alla fine del materiale.

Integrazione di LDAP e UCP

Il Piano di Controllo Universale può essere integrato con LDAP. Questo porterà a un sistema di autenticazione semplificato, evitando la duplicazione non necessaria. Maggiori dettagli sono disponibili nell'articolo Integra con un directory LDAP.

Altri materiali

Per ulteriori informazioni sulle migliori pratiche per la sicurezza di Docker, visita docs.docker.com. Ti consigliamo anche di scaricare i test del Center for Internet Security per Docker.

Bonus dal traduttore

Come integrazione logica a questo articolo, pubblichiamo un elenco di 10 utilità Open Source popolari per garantire la sicurezza in Docker. È stato preso da un altro articolo (scritto da Bill Doerrfeld di Doerrfeld.io).

NB: Scopri di più su molti dei progetti menzionati qui anche nell'articolo «33+ strumenti per la sicurezza di Kubernetes».

  1. Docker Bench for Security — lo script già accennato all'inizio dell'articolo che verifica i container Docker per conformarsi alle pratiche di sicurezza comuni.

    Sicurezza per i container Docker

  2. Clair — probabilmente l'utilità più popolare per l'analisi statica delle vulnerabilità nei container. Utilizza numerose banche dati di vulnerabilità CVE (inclusi i tracker delle principali distribuzioni Linux come Red Hat, Debian, Ubuntu). Offre un'API per gli sviluppatori e una semplice possibilità di estensione delle funzionalità (attraverso l'aggiunta di 'driver'). Viene utilizzata nel popolare registro pubblico di immagini dei container — Quay.io.
  3. Cilium — una soluzione per garantire la sicurezza della rete a livello di kernel, basata sulla tecnologia di filtraggio dei pacchetti BPF.
  4. Anchore — un'utilità per analizzare il contenuto delle immagini alla ricerca di vulnerabilità di sicurezza secondo il database CVE. Inoltre, consente di applicare politiche personalizzate (basate su vari dati, tra cui liste bianche/nere, contenuti dei file, ecc.) per valutare la sicurezza dei contenitori.
  5. OpenSCAP Workbench — un'intera ecosistema per creare e mantenere politiche di sicurezza su diverse piattaforme. Per controllare i contenitori offre l'utilità oscap-docker.
  6. Dagda — un'utilità per eseguire la scansione dei contenitori Docker alla ricerca di vulnerabilità, trojan, virus e malware. I controlli presenti nei database CVE includono verifiche per dipendenze da OWASP, il database Red Hat Oval e il repository di exploit Exploit Database.
  7. Notary — un framework per la firma delle immagini Docker, originariamente creato in Docker Inc (e poi trasferito al CNCF per lo sviluppo). Il suo utilizzo consente di delegare ruoli e distribuire responsabilità sui contenitori, nonché di verificare l'integrità crittografica delle immagini.
  8. Grafaes — API per i metadati, progettato per gestire le politiche di sicurezza interne. Ad esempio, consente di migliorare il funzionamento degli scanner di sicurezza dei container. Shopify utilizza questa API per gestire i metadati dei suoi 500.000 immagini.
  9. Sysdig Falco — un'utilità per Kubernetes che monitora il comportamento del sistema: attività nei container, sugli host, nella rete. Consente di configurare controlli continui nell'infrastruttura, rilevare anomalie e inviare avvisi su qualsiasi chiamata di sistema Linux.
  10. Banyanops Collector — un altro strumento per l'analisi statica delle immagini dei container Docker. Consente di "guardare" nei file dell'immagine, raccogliendo i dati necessari, applicando le politiche richieste, e così via.

Un'altra buona raccolta di suggerimenti pratici su come rendere Docker più sicuro si può trovare in questo articolo Aqua Security. Molti dei suoi consigli si sovrappongono a quelli già menzionati sopra, ma ce ne sono anche altri. Ad esempio, gli autori suggeriscono di organizzare il monitoraggio dell'attività nei container e indicano su cosa prestare attenzione quando si utilizza Docker Swarm.

Per coloro che desiderano approfondire ulteriormente questo argomento, lo scorso anno è uscito libro «Docker Security: Quick Reference», i cui frammenti sono liberamente accessibili qui.

Infine, per un'introduzione pratica ad alcuni aspetti della sicurezza di Docker: profili Seccomp e utilizzo delle capabilities del kernel Linux nei container — è possibile seguire i relativi laboratori su Play with Docker* — vedi la sezione «Sicurezza».

Sicurezza per i container Docker

* A proposito di questa risorsa, parlavano due anni fa, e nel novembre 2018 è accaduta una storia molto interessante (sotto il punto di vista della sicurezza). Per farla breve, i tecnici di CyberArk Software Ltd. sono riusciti a violarla: hanno ottenuto la possibilità di eseguire comandi al di fuori dei container, cioè sul sistema host. Una bella illustrazione del problema di sicurezza in Docker, non è vero? Trovi tutte le informazioni sui dettagli di quanto accaduto qui.

P.S. dal traduttore

Leggete anche nel nostro blog:

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster