Come proteggere Docker per l’ambiente di produzione?

Vediamo come rafforzare e proteggere la Docker per l’ambiente di produzione.


Sebbene docker ha consentito agli sviluppatori di software e agli ingegneri DevOps di creare e distribuire rapidamente applicazioni, inoltre è dotato di un’ampia superficie di attacco che consente agli hacker informatici di sfruttare.

Vedremo come proteggere un Docker su una piattaforma Linux dai seguenti.

  • Difetti di configurazione
  • Esecuzione di codice remoto
  • Overflow del buffer
  • Falsificazione delle immagini e così via.

Faremo uso dei seguenti strumenti, come ad esempio Server notarile di Docker per firmare immagini e Sicurezza della panca Docker per verificare l’host, la configurazione del demone e così via.

Prima di procedere con la sicurezza, basiamoci sulle basi del tocco.

Che cos’è una tecnologia container?

La tecnologia container consente agli sviluppatori o agli ingegneri DevOps di impacchettare un’applicazione in modo che possa funzionare con dipendenze isolate da altri processi.

Esistono numerose tecnologie container nel mercato, come ad esempio Apache Mesos, Razzo, LXC, e docker. Sebbene rientrino nella categoria della tecnologia dei container, funzionano in modo diverso.

Differenza tra VM & VE

Un host di macchina virtuale è completamente diverso da un host di ambiente virtuale. Sulle macchine virtuali, ogni applicazione containerizzata viene fornita con il proprio set di librerie e sistema operativo mentre le applicazioni, per impostazione predefinita, su un host di ambiente virtuale come lxc e docker condividono il kernel Linux.

Cos’è Docker?

Docker è una tecnologia container utilizzata da milioni di utenti per creare un’applicazione Web e distribuirla da un test in un ambiente di produzione.

Motore Docker

Il Docker Engine è composto da tre componenti.

  • Un server: questo componente è un processo o demone di lunga durata responsabile della gestione di immagini e contenitori.
  • API REST: questa interfaccia rende possibile la comunicazione tra il daemon docker e lo strumento client docker.
  • Strumento client Docker: lo strumento client Docker utilizza il componente API REST per informare il daemon docker di utilizzare un’applicazione containerizzata.

Docker Trusted Registry

Docker Trusted Registry è una soluzione di archiviazione di immagini di Docker per le piattaforme aziendali. È diverso dal hub docker.  Mentre l’hub docker è ospitato nel cloud, il registro attendibile docker è una soluzione di archiviazione locale per Edizione Docker Enterprise.

Docker Content Trust

Docker Content Trust offre la possibilità di utilizzare le firme dei dati per le immagini inviate e ricevute da e verso i registri docker remoti come l’hub docker.

Spazi dei nomi Linux

Gli spazi dei nomi Linux sono una funzionalità del kernel Linux che isola un’applicazione o un processo containerizzati in esecuzione su un host di ambiente virtuale da altri processi.

Gruppi di controllo Linux (Cgroups)

Linux Control Groups è una funzionalità del kernel Linux che consente di allocare risorse come tempo della CPU, larghezza di banda della rete, memoria di sistema e così via ai processi attivi su un host.

funzionalità

In Linux, esiste una funzione di sicurezza nel sottosistema kernel che può essere impostata o imposta per limitare il processo privilegiato, ad esempio un processo eseguito da un utente con UID 1. Sebbene i processi privilegiati o gli utenti possano bypassare le autorizzazioni di controllo dell’accesso discrezionale, non possono ignorare regole di capacità.

Ora concentriamoci sulla sicurezza.

Protezione dell’host Docker

In questa sezione, vedremo come proteggere l’host in cui risiede Docker.

Scansione del kernel Linux

Prima di ospitare una finestra mobile su una piattaforma Linux, è necessario ispezionare il kernel. Esistono diversi strumenti open source come Lynis e OpenVAS puoi usare per scansionare il kernel di Linux.

Copia o clona il progetto Lynis da Github usando il comando git clone.

git clone https://github.com/CISOfy/lynis.git

Quindi, utilizzare il comando seguente per navigare nella directory di lynis e controllare il sistema Linux.

cd lynis; ./lynis sistema di controllo

Harden Linux kernel

Dopo aver scansionato il kernel Linux alla ricerca di vulnerabilità basate sul sistema, è possibile aggiungere un ulteriore livello di protezione al kernel tramite grsecurity. Fornisce funzionalità di sicurezza come le seguenti.

  • Prevenzione dello sfruttamento del buffer overflow
  • / tmp gara prevenzione delle vulnerabilità
  • / proc restrizioni che non divulgano informazioni sui proprietari dei processi.
  • Prevenzione dell’esecuzione di codice arbitrario nel kernel e così via.

Inizialmente puoi Scarica patch gratis da grsecurity e applicalo al tuo kernel corrente. Ma non consente più patch gratuite.

Installa Docker in una macchina virtuale

Invece di installare Docker direttamente su un host Linux, è possibile aggiungere un ulteriore livello di protezione installandolo all’interno di una macchina virtuale. In questo modo, anche se esiste un problema di vulnerabilità con il kernel host, ciò non influirà sui contenitori docker.

Protezione dei privilegi di root

Per impostazione predefinita, Docker richiede i privilegi di root per creare e gestire i contenitori. Lo script dannoso può sfruttare questa superficie di attacco per passare a un superutente su un host Linux e infine accedere a file / cartelle sensibili, immagini, certificati, ecc..

Per evitarlo, possiamo usare il seguente comando. Possiamo decidere di abbandonare funzionalità come setgid e setuid per impedire ad altri programmi o processi di cambiare il loro GID in un altro GID che può comportare il privilegio di escalation. Puoi anche controllare Qui per un elenco di definizioni delle capacità di Linux.

Il comando seguente esegue il contenitore web server apache e rilascia le funzionalità setgid e setuid tramite –cap-drop per impedire al contenitore apache di cambiare il suo GID e UID in un altro UID e GID.

GID e UID in questo contesto si riferiscono rispettivamente all’ID gruppo e all’ID utente.

docker run -d –cap-drop SETGID –cap-drop SETUID apache

Utente Docker

Oltre a prevenire altri programmi o processi, è anche possibile creare un utente per gestire le operazioni della finestra mobile come l’esecuzione della finestra mobile anziché gestirla tramite un superutente.

È possibile aggiungere o creare un utente docker tramite quanto segue:

finestra mobile sudo groupadd

Il comando sopra crea un gruppo chiamato finestra mobile

Successivamente, crea un utente utilizzando il comando seguente:

sudo useradd mike

Utilizzare infine il comando seguente per aggiungere un microfono utente alla finestra mobile del gruppo per amministrare le operazioni della finestra mobile.

sudo usermod -aG docker mike

Gestione dei container con cgroups

In un ambiente di produzione, potresti avere più di un container.

Se non hai cgroup installati sul tuo host, puoi utilizzare il seguente comando per installarlo e quindi controllare Qui (per Ubuntu) su come configurarlo.

sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1

Siamo in grado di allocare i container a risorse CPU limitate tramite –cpu-share e –cpuset-cpus

Il seguente esempio di comando mostra che il processo contenitore prodnginx viene eseguito solo sul primo core tramite –cpuset-cpus e viene allocato 20 CPU tramite –cpu-share mentre il processo contenitore proxnginx viene eseguito sui primi due core della CPU e viene allocato anche 20 processore.

docker run -d –name prodnginx –cpuset-cpus = 0 –cpu-share = 20 nginx
docker run -d –name testnginx –cpuset-cpus = 2 –cpu-share = 20 nginx

Quindi digitare il comando docker stats per visualizzare l’utilizzo della CPU da parte dei contenitori prodnginx e testnginx

NOME ID CONTENITORE CPU% MEM UTILIZZO / LIMIT MEM% NET I / O BLOCK I / O
845bea7263fb prodnginx 57,69% 1,258 MiB / 985,2 MiB 0,13% 578 B / 0 B 1,33 MB / 0 B
189ba15e8258 testnginx 55,85% 1,25 MiB / 985,2 MiB 0,13% 578 b / 0 B 1,33 MB / 0 B

È consigliabile definire condivisioni di CPU per un host docker quando su di esso è in esecuzione più di un contenitore.

Gestione dei contenitori con spazi dei nomi

Uno spazio dei nomi può impedire l’esecuzione dei contenitori come utenti privilegiati, il che può aiutare a evitare attacchi di escalation di privilegi.

Possiamo abilitare lo spazio dei nomi nella finestra mobile facendo uso dei file / etc / subuid e / etc / subgid come mostrato di seguito.

  • crea un utente usando il comando adduser

sudo adduser dockremap

  • Configurare un subuid per l’utente dockremap

sudo sh -c ‘echo dockremap: 400000: 65536 > / Etc / subuid’

  • Quindi impostare subgid per l’utente dockremap

sudo sh -c ‘echo dockremap: 400000: 65536 > / Etc / subgid’

  • Apri il file daemon.json e compila il seguente contenuto per associare l’attributo userns-remap all’utente dockremap

vi /etc/docker/daemon.json
{

"userns-rimappare": "dockremap"

}

  • Premere: wq per salvare e chiudere il file daemon.json e infine riavviare la finestra mobile per abilitare gli spazi dei nomi su un host finestra mobile

sudo /etc/init.d/docker restart

Protezione del daemon Docker

È inoltre necessario configurare il demone Docker per garantire la comunicazione sicura tra client docker e demone docker tramite TLS.

Utilizzare il comando seguente per aprire il file daemon.json e copiare e incollare il seguente contenuto (sostituire l’IP con il proprio effettivo) come mostrato di seguito

vi daemon.json
{
"mettere a punto": falso,
"tls": vero,
"tlscert": "/var/docker/server.pem",
"tlskey": "/var/docker/serverkey.pem",
"padroni di casa": ["tcp: //192.168.16.5: 2376"]
}

Protezione dei componenti Docker

Vediamo come utilizzare strumenti come CodeNotary e server notarile per firmare le immagini per evitare la falsificazione delle immagini. Inoltre, è anche necessario scansionare le immagini solo per assicurarsi che le immagini non siano piene di vulnerabilità

Faremo uso del server notarile di Docker per firmare e verificare immagini e utilizzo Motore di ancoraggio per scansionare le immagini alla ricerca di vulnerabilità.

Verifica immagini con Notary Server

Prima di poter utilizzare il server notarile per firmare le immagini, è necessario scaricare e installare docker-compose. Useremo Docker Compose per configurare un server notarile.

  • Eseguire il comando seguente per scaricare l’ultima versione di Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s) – $ (uname -m)" -o / usr / local / bin / docker-compose

  • Applica le autorizzazioni eseguibili alla finestra mobile-componi come mostrato di seguito

sudo chmod 700 / usr / local / bin / docker-compose

  • Puoi verificare se hai installato correttamente docker-compose tramite il seguente comando

docker-compose –version

  • Ora possiamo installare il server notarile tramite docker-compose

git clone https://github.com/theupdateframework/notary.git

  • Il comando sopra clona o copia il server notarile dal repository notarile
  • Avviare il server notarile e il firmatario tramite i comandi seguenti:

build docker-compose
docker-compose up -d

  • Quindi copia la configurazione e testa i certificati nella tua directory notarile locale usando il comando seguente

mkdir -p ~ / .notary && cp cmd / notaio / config.json cmd / notaio / root-ca.crt ~ / .notary

  • Ora esegui il comando seguente per connettere il server notarile al client docker

export DOCKER_CONTENT_TRUST = 1
export DOCKER_CONTENT_TRUST_SERVER = https: // notaryserver: 4443

  • Generare una coppia di chiavi di delega tramite il comando seguente

la chiave di sicurezza docker genera mike –dir ~. / docker / trust

  • Ora creiamo un nuovo target di chiavi nel caso in cui il repository non esista

docker trust signer add –key ~ / .docker / trust / mike.pub mike mikedem0 / whalesay

  • Quindi è possibile firmare l’immagine della finestra mobile usando il comando segno attendibile finestra mobile. È necessario estrarre l’immagine della finestra mobile dall’hub della finestra mobile e ri-etichettarla utilizzando rispettivamente il comando estrazione della finestra mobile e il tag della finestra mobile.

segno di fiducia docker mikedem0 / nginx: ultimo

Puoi anche scansionare le immagini docker per individuare vulnerabilità e difetti di configurazione. Puoi controllare qui per scoprire come utilizzare Anchor Engine per cercare vulnerabilità e Docker Bench Security per verificare la presenza di difetti di configurazione.

Spero che quanto sopra ti dia un’idea della sicurezza Docker per l’ambiente di produzione. Potresti anche voler dare un’occhiata a questo corso su Udemy hacking e protezione di container Docker.

TAGS:

  • docker

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map