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)
Cuando ejecutas un contenedor como privilegiado, estas son las protecciones que estás deshabilitando:
En un contenedor privilegiado, todos los dispositivos pueden ser accedidos en /dev/
. Por lo tanto, puedes escapar montando el disco del host.
Los sistemas de archivos del kernel proporcionan un mecanismo para que un proceso modifique el comportamiento del kernel. Sin embargo, cuando se trata de procesos de contenedor, queremos evitar que realicen cambios en el kernel. Por lo tanto, montamos los sistemas de archivos del kernel como solo lectura dentro del contenedor, asegurando que los procesos del contenedor no puedan modificar el kernel.
El sistema de archivos /proc es selectivamente escribible, pero por razones de seguridad, ciertas partes están protegidas del acceso de escritura y lectura al superponerlas con tmpfs, asegurando que los procesos del contenedor no puedan acceder a áreas sensibles.
tmpfs es un sistema de archivos que almacena todos los archivos en memoria virtual. tmpfs no crea ningún archivo en tu disco duro. Así que si desmontas un sistema de archivos tmpfs, todos los archivos que residen en él se pierden para siempre.
Los motores de contenedores lanzan los contenedores con un número limitado de capacidades para controlar lo que sucede dentro del contenedor por defecto. Los privilegiados tienen todas las capacidades accesibles. Para aprender sobre capacidades, lee:
Linux CapabilitiesPuedes manipular las capacidades disponibles para un contenedor sin ejecutar en modo --privileged
utilizando las banderas --cap-add
y --cap-drop
.
Seccomp es útil para limitar las syscalls que un contenedor puede llamar. Un perfil de seccomp predeterminado está habilitado por defecto al ejecutar contenedores de docker, pero en modo privilegiado está deshabilitado. Aprende más sobre Seccomp aquí:
SeccompTambién, ten en cuenta que cuando Docker (u otros CRIs) se utilizan en un Kubernetes cluster, el filtro seccomp está deshabilitado por defecto.
AppArmor es una mejora del kernel para confinar contenedores a un conjunto limitado de recursos con perfiles por programa. Cuando ejecutas con la bandera --privileged
, esta protección está deshabilitada.
Ejecutar un contenedor con la bandera --privileged
desactiva las etiquetas de SELinux, haciendo que herede la etiqueta del motor de contenedores, típicamente unconfined
, otorgando acceso completo similar al del motor de contenedores. En modo sin root, utiliza container_runtime_t
, mientras que en modo root, se aplica spc_t
.
Los espacios de nombres NO se ven afectados por la bandera --privileged
. A pesar de que no tienen las restricciones de seguridad habilitadas, no ven todos los procesos en el sistema o la red del host, por ejemplo. Los usuarios pueden deshabilitar espacios de nombres individuales utilizando las banderas de motores de contenedor --pid=host
, --net=host
, --ipc=host
, --uts=host
.
Por defecto, los motores de contenedores no utilizan espacios de nombres de usuario, excepto para contenedores sin privilegios, que los requieren para el montaje del sistema de archivos y el uso de múltiples UIDs. Los espacios de nombres de usuario, integrales para contenedores sin privilegios, no se pueden desactivar y mejoran significativamente la seguridad al restringir privilegios.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)