¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión del PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!
Cuando ejecutas un contenedor como privilegiado, deshabilitas las siguientes protecciones:
Montar /dev
En un contenedor privilegiado, todos los dispositivos pueden ser accedidos en /dev/. Por lo tanto, puedes escapar montando el disco del host.
# docker run --rm -it alpine shls/devconsolefdmqueueptmxrandomstderrstdouturandomcorefullnullptsshmstdinttyzero
# docker run --rm --privileged -it alpine shls/devcachefilesmapperportshmtty24tty44tty7consolemempsauxstderrtty25tty45tty8coremqueueptmxstdintty26tty46tty9cpunbd0ptsstdouttty27tty47ttyS0[...]
Sistemas de archivos de kernel de solo lectura
Los sistemas de archivos de kernel proporcionan un mecanismo para que un proceso modifique el comportamiento del kernel. Sin embargo, cuando se trata de procesos de contenedores, queremos evitar que realicen cambios en el kernel. Por lo tanto, montamos los sistemas de archivos de kernel como solo lectura dentro del contenedor, asegurando que los procesos del contenedor no puedan modificar el kernel.
# docker run --rm --privileged -it alpine shmount|grep'(ro'
Enmascaramiento de sistemas de archivos del kernel
El sistema de archivos /proc es selectivamente escribible pero, por motivos 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 la memoria virtual. tmpfs no crea archivos en tu disco duro. Por lo tanto, si desmontas un sistema de archivos tmpfs, todos los archivos que residen en él se pierden para siempre.
# docker run --rm -it alpine shmount|grep/proc.*tmpfstmpfson/proc/acpitypetmpfs (ro,relatime)tmpfson/proc/kcoretypetmpfs (rw,nosuid,size=65536k,mode=755)tmpfson/proc/keystypetmpfs (rw,nosuid,size=65536k,mode=755)
# docker run --rm --privileged -it alpine shmount|grep/proc.*tmpfs
Capacidades de Linux
Los motores de contenedores lanzan los contenedores con un número limitado de capacidades para controlar lo que sucede dentro del contenedor de forma predeterminada. Los contenedores privilegiados tienen todas las capacidades accesibles. Para aprender sobre las capacidades, lee:
# docker run --rm -it alpine shapkadd-Ulibcap; capsh--print[...]Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=eip
Bounding set =cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
[...]
# docker run --rm --privileged -it alpine shapkadd-Ulibcap; capsh--print[...]Current:=eipcap_perfmon,cap_bpf,cap_checkpoint_restore-eipBounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read
[...]
Puedes manipular las capacidades disponibles para un contenedor sin ejecutarlo en modo --privileged usando las banderas --cap-add y --cap-drop.
Seccomp
Seccomp es útil para limitar las llamadas al sistema (syscalls) que un contenedor puede realizar. Un perfil de Seccomp predeterminado está habilitado de forma predeterminada al ejecutar contenedores de Docker, pero en modo privilegiado está deshabilitado. Obtén más información sobre Seccomp aquí:
# docker run --rm -it alpine shgrepSeccomp/proc/1/statusSeccomp:2Seccomp_filters:1
# docker run --rm --privileged -it alpine shgrepSeccomp/proc/1/statusSeccomp:0Seccomp_filters:0
# You can manually disable seccomp in docker with--security-optseccomp=unconfined
También, ten en cuenta que cuando Docker (u otros CRIs) se utilizan en un clúster de Kubernetes, el filtro seccomp está deshabilitado de forma predeterminada
AppArmor
AppArmor es una mejora del kernel para confinar los contenedores a un conjunto limitado de recursos con perfiles por programa. Cuando se ejecuta con la bandera --privileged, esta protección se deshabilita.
# You can manually disable seccomp in docker with--security-optapparmor=unconfined
SELinux
Ejecutar un contenedor con la bandera --privileged deshabilita las etiquetas SELinux, lo que hace que herede la etiqueta del motor de contenedores, típicamente unconfined, otorgando acceso completo similar al del motor de contenedores. En modo sin raíz, se utiliza container_runtime_t, mientras que en modo raíz, se aplica spc_t.
# You can manually disable selinux in docker with--security-optlabel:disable
Lo que no afecta
Espacios de nombres
Los espacios de nombres NO se ven afectados por la bandera --privileged. Aunque no tengan habilitadas las restricciones de seguridad, 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 contenedores --pid=host, --net=host, --ipc=host, --uts=host.
# docker run --rm --privileged -it alpine shps-efPIDUSERTIMECOMMAND1root0:00sh18root0:00ps-ef
De forma predeterminada, los motores de contenedores no utilizan espacios de nombres de usuario, excepto para contenedores sin raíz, que los requieren para el montaje del sistema de archivos y el uso de múltiples UID. Los espacios de nombres de usuario, esenciales para los contenedores sin raíz, no se pueden desactivar y mejoran significativamente la seguridad al restringir los privilegios.
¿Trabajas en una empresa de ciberseguridad? ¿Quieres ver tu empresa anunciada en HackTricks? ¿O quieres tener acceso a la última versión del PEASS o descargar HackTricks en PDF? ¡Consulta los PLANES DE SUSCRIPCIÓN!