Sicurezza per i container Docker

Nota di traduzione.: Il tema della sicurezza di Docker è senza dubbio uno dei più rilevanti nel mondo IT contemporaneo. Pertanto, senza ulteriori spiegazioni, presentiamo la traduzione della nostra selezione di raccomandazioni pertinenti. Se ti sei già occupato di questo tema, molte di esse ti saranno familiari. Abbiamo anche aggiunto un elenco di utilità utili e alcune risorse per ulteriori approfondimenti.

Sicurezza per i container Docker

Ti propongo una guida per garantire la sicurezza di Docker. Sono graditi feedback, poiché si tratta più 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 durante l'utilizzo di Docker;
  2. Istruzioni relative al file di configurazione per la creazione e gestione dei container;
  3. Strumenti per la sicurezza che possono integrarsi con le funzionalità specifiche di Docker Enterprise.


La guida è basata su diverse risorse, molte delle quali sono elencate di seguito. Non può essere considerata esaustiva, ma copre tutte le basi. Ulteriori informazioni possono essere trovate nella descrizione dei test CIS (il link è riportato alla fine di questa guida), nonché nella documentazione di Docker.

Benchmark di Sicurezza Docker

Docker Bench for Security verifica automaticamente il tuo Docker rispetto alle migliori pratiche più comuni. Lo script funge da buon test euristico di sicurezza, tuttavia non dovrebbe essere considerato come uno strumento di analisi completa.

OS host

È ovvio che un container Docker non può essere sicuro se il sistema host stesso non lo è. Pertanto, è necessario seguire le migliori pratiche per garantire la sicurezza dei sistemi operativi. Inoltre, sarebbe prudente effettuare un'analisi delle vulnerabilità oltre alle raccomandazioni seguenti.

Regole di Audit

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

Modalità FIPS

L'attivazione della modalità FIPS costringe gli strumenti crittografici a utilizzare algoritmi inclusi nel FIPS (americani Federal Information Processing Standards — nota del traduttore.), rispettando così le norme e i requisiti federali e settoriali. Se il sistema operativo del host supporta la modalità FIPS, può essere abilitato 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

È inoltre necessario abilitare FIPS in 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, consultare la documentazione Docker e Red Hat.

Docker Secrets

I dati riservati devono essere memorizzati come segreti. È possibile avviare il servizio corrispondente 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 ulteriori dettagli, vedere documentazione.

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 container per evitare perdite 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"
      }
    }

    — abilita il logging remoto, inoltrandoli all'indirizzo specificato. Funziona solo se il demone syslog è in esecuzione. Le opzioni accettate sono TCP e UDP. È inoltre possibile collegarsi per ogni singolo container. Per farlo, si imposta un flag speciale durante l'avvio di Docker (--log-opt syslog-address=ADDRESS).

  • "userns-remap": "Your_User" — previene l'escalation di privilegi isolando lo spazio dei nomi per un utente specifico.

Sicurezza del livello di trasporto

La possibilità di connettersi al demone Docker (se è necessario l'accesso remoto) dovrebbe essere concessa solo agli utenti con accesso alle credenziali del client TLS.

Plugin di autorizzazione

Determina quali utenti possono eseguire quali comandi e crea il corrispondente plugin di autorizzazione per Docker. Quindi avvia il demone Docker e aggiungi il plugin:

dockerd --authorization-plugin=PLUGIN_ID

Per saperne di più sulla creazione di plugin di autorizzazione, consulta documentazione.

Opzioni del demone

Il demone Docker funziona con un insieme di opzioni predefinite.

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

Configurazione dei container e dei file di build

Creazione dell'utente

Assicurati che per il container sia stato creato un utente e che venga eseguito con questo utente (NON eseguire il container come root).

Accesso remoto

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

Isola lo spazio dei nomi utente

È 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 elevare i privilegi o addirittura uscire dal container. È possibile isolare lo spazio dei nomi utente modificando il file di configurazione (come descritto sopra nella sezione 'File di configurazione di Docker'). Questo problema è qui menzionato in aggiunta per la sua importanza.

Healthcheck

L'Healthcheck è uno strumento potente che consente di verificare l'integrità del container. Può essere configurato nel Dockerfile con l'istruzione HEALTHCHECK. Gli healthcheck consentono di assicurarsi che il container funzioni correttamente. Nell'esempio seguente, il controllo di integrità termina con 0 se il server è attivo e 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 ed esegui Docker in modalità demone con SELinux abilitato:

docker daemon --selinux-enable

In questo caso, i container 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 tutte le interfacce di rete. Poiché nella maggior parte dei casi il traffico è previsto solo su una di esse, un approccio del genere aumenta ingiustificatamente il rischio di attacchi. Pertanto, al momento dell'avvio del contenitore, è possibile legare le sue porte a interfacce specifiche sull'host:

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

Versioni memorizzate nella cache delle immagini

Durante il download delle immagini, assicurati che la cache locale corrisponda ai contenuti del repository. In caso contrario, potresti ricevere una versione obsoleta dell'immagine o un'immagine contenente vulnerabilità.

Ponte di rete

Modello di rete predefinito, docker0, vulnerabile agli attacchi ARP-spoofing e MAC-flooding. Per risolvere questo problema, crea un ponte di rete in base alle tue specifiche, come descritto qui.

Avviso sul socket di Docker

Non esporre mai il socket di Docker all'interno del contenitore. Altrimenti, il contenitore avrà la possibilità di eseguire comandi di Docker e, di conseguenza, interagire con il sistema operativo host e controllarlo. Non farlo.

Configurazione di Docker Enterprise

Docker Trust

Docker Trust consente di generare chiavi tramite le quali è possibile verificare l'integrità crittografica delle immagini. Le chiavi di Docker Trust possono essere utilizzate per firmare immagini Docker con chiavi private, verificate da chiavi pubbliche su Notary Server. Maggiori informazioni sono disponibili in qui. L'attivazione di Docker Trust in Enterprise Engine è descritta in dettaglio in questa sezione della documentazione.

Scanner di vulnerabilità

In Docker Enterprise è presente uno scanner di vulnerabilità integrato, che consente di scaricare un database CVE per la scansione offline delle vulnerabilità nelle immagini. La scansione regolare delle immagini aiuta a renderle più sicure: gli utenti ricevono immediatamente avvisi sulle vulnerabilità trovate. Ulteriori informazioni su come fare questo sono disponibili in qui.

Nota di traduzione.: Esistono anche scanner di vulnerabilità open source per le immagini Docker, i cui esempi sono riportati alla fine del materiale.

Integrazione LDAP e UCP

Il Universal Control Plane può essere integrato con LDAP. Ciò porterà a un sistema di autenticazione semplificato, evitando duplicazioni non necessarie. Maggiori informazioni sono disponibili nell'articolo Integrate with an LDAP directory.

Altri materiali

Ulteriori informazioni sulle migliori pratiche per la sicurezza di Docker possono essere trovate su docs.docker.com. Raccomandiamo anche di scaricare test del Center for Internet Security per Docker.

Bonus del traduttore

Come logico completamento di questo articolo, pubblichiamo un elenco di 10 popolari utility Open Source per garantire la sicurezza in Docker. È stato preso da un altro articolo (autore Bill Doerrfeld di Doerrfeld.io).

NB: Maggiori dettagli su molti dei progetti menzionati qui possono essere letti anche nell'articolo «33+ strumenti per la sicurezza di Kubernetes».

  1. Docker Bench for Security — già menzionato all'inizio dell'articolo, uno script che controlla i container Docker per la conformità alle pratiche di sicurezza comuni.

    Sicurezza per i container Docker

  2. Clair — probabilmente l'utility più popolare per l'analisi statica delle vulnerabilità nei container. Utilizza numerose basi 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 estendere le funzionalità (tramite l'aggiunta di «driver»). Viene utilizzato nel popolare registro pubblico delle immagini dei container (il corrispondente di Docker Hub) — Quay.io.
  3. Cilium — soluzione per la sicurezza della rete a livello del kernel, basata sulla tecnologia di filtraggio dei pacchetti BPF.
  4. Anchore — utility per analizzare il contenuto delle immagini alla ricerca di vulnerabilità di sicurezza, basata sulla 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 container.
  5. OpenSCAP Workbench — un'intera ecosistema per la creazione e il mantenimento delle politiche di sicurezza su varie piattaforme. Per il controllo dei container offre l'utility oscap-docker.
  6. Dagda — utility per la scansione dei container Docker alla ricerca di vulnerabilità, trojan, virus e malware. Le basi CVE includono controlli delle dipendenze da OWASP, la base Red Hat Oval, il repository degli exploit Exploit Database.
  7. Notary — framework per la firma delle immagini Docker, originariamente creato in Docker Inc (e poi trasferito allo sviluppo in CNCF). Il suo utilizzo consente di delegare ruoli e distribuire responsabilità sui container, nonché verificare l'integrità crittografica delle immagini.
  8. Grafaes — API per i metadati, progettata 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 delle sue 500.000 immagini.
  9. Sysdig Falco — un'utilità per Kubernetes che monitora il comportamento del sistema: l'attività nei contenitori, sugli host, nella rete. Consente di configurare controlli continui nell'infrastruttura, rilevamento di anomalie e invio di avvisi per qualsiasi chiamata di sistema Linux.
  10. Banyanops Collector — un altro strumento per l'analisi statica delle immagini dei contenitori Docker. Permette di "guardare" dentro i file dell'immagine, raccogliendo i dati necessari, applicando le politiche appropriate, ecc.

Un'altra ottima raccolta di raccomandazioni pratiche 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 altri. Ad esempio, gli autori suggeriscono di organizzare il monitoraggio dell'attività nei contenitori e indicano su cosa prestare attenzione quando si utilizza Docker Swarm.

Per chi desidera approfondire ulteriormente questo tema, l'anno scorso è uscito il libro "Docker Security: Quick Reference»", parti del quale sono liberamente disponibili. qui.

Infine, per un'esperienza pratica su alcuni aspetti della sicurezza di Docker: profili Seccomp e utilizzo delle capabilities nel kernel Linux nei contenitori — si possono seguire i corrispondenti laboratori su Play with Docker* — vedere la sezione "Sicurezza".

Sicurezza per i container Docker

* Riguardo a questa risorsa, noi parlato due anni fa, e a novembre 2018 è successa una storia molto interessante (dal punto di vista della sicurezza). In sintesi, gli esperti di CyberArk Software Ltd. sono riusciti a violarla: ottenere la possibilità di eseguire comandi al di fuori dei contenitori, cioè sul sistema host. Una splendida illustrazione del problema di sicurezza in Docker, non credi? Puoi leggere tutti i dettagli di quanto accaduto qui.

P.S. dal traduttore

Leggi 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