Docker --privileged
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Quando esegui un container come privilegiato, queste sono le protezioni che stai disabilitando:
In un container privilegiato, tutti i dispositivi possono essere accessibili in /dev/
. Pertanto puoi uscire montando il disco dell'host.
I file system del kernel forniscono un meccanismo per un processo per modificare il comportamento del kernel. Tuttavia, quando si tratta di processi container, vogliamo impedire loro di apportare modifiche al kernel. Pertanto, montiamo i file system del kernel come sola lettura all'interno del container, garantendo che i processi del container non possano modificare il kernel.
Il file system /proc è selettivamente scrivibile, ma per motivi di sicurezza, alcune parti sono protette da accesso in scrittura e lettura sovrapponendole con tmpfs, garantendo che i processi del container non possano accedere ad aree sensibili.
tmpfs è un file system che memorizza tutti i file nella memoria virtuale. tmpfs non crea alcun file sul tuo disco rigido. Quindi, se smonti un file system tmpfs, tutti i file in esso contenuti vengono persi per sempre.
I motori dei container avviano i container con un numero limitato di capacità per controllare cosa avviene all'interno del container per impostazione predefinita. I container privilegiati hanno tutte le capacità accessibili. Per saperne di più sulle capacità, leggi:
Puoi manipolare le capacità disponibili per un container senza eseguire in modalità --privileged
utilizzando i flag --cap-add
e --cap-drop
.
Seccomp è utile per limitare le syscalls che un container può chiamare. Un profilo seccomp predefinito è abilitato per impostazione predefinita quando si eseguono container docker, ma in modalità privilegiata è disabilitato. Scopri di più su Seccomp qui:
Inoltre, nota che quando Docker (o altri CRI) vengono utilizzati in un Kubernetes cluster, il seccomp filter è disabilitato per impostazione predefinita.
AppArmor è un miglioramento del kernel per confinare i container a un insieme limitato di risorse con profili per programma. Quando esegui con il flag --privileged
, questa protezione è disabilitata.
Eseguire un container con il flag --privileged
disabilita le etichette SELinux, facendogli ereditare l'etichetta del motore del container, tipicamente unconfined
, concedendo accesso completo simile a quello del motore del container. In modalità senza root, utilizza container_runtime_t
, mentre in modalità root, viene applicato spc_t
.
I namespaces NON sono influenzati dal flag --privileged
. Anche se non hanno i vincoli di sicurezza abilitati, non vedono tutti i processi sul sistema o sulla rete host, per esempio. Gli utenti possono disabilitare singoli namespaces utilizzando i flag dei motori container --pid=host
, --net=host
, --ipc=host
, --uts=host
.
Per impostazione predefinita, i motori dei container non utilizzano i namespace utente, tranne che per i container senza root, che li richiedono per il montaggio del file system e per l'uso di più UID. I namespace utente, fondamentali per i container senza root, non possono essere disabilitati e migliorano significativamente la sicurezza limitando i privilegi.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)