Compartir comentarios
Las respuestas se generan en base a la documentación.

Perfiles de seguridad Seccomp para Docker

El modo de computación segura (seccomp) es una característica del kernel de Linux. Puedes usarlo para restringir las acciones disponibles dentro del contenedor. La llamada al sistema seccomp() opera sobre el estado de seccomp del proceso llamador. Puedes utilizar esta característica para restringir el acceso de tu aplicación.

Esta característica solo está disponible si Docker se ha compilado con seccomp y el kernel está configurado con CONFIG_SECCOMP habilitado. Para verificar si tu kernel es compatible con seccomp:

$ grep CONFIG_SECCOMP= /boot/config-$(uname -r)
CONFIG_SECCOMP=y

Pasar un perfil para un contenedor

El perfil predeterminado de seccomp proporciona un valor predeterminado sensato para ejecutar contenedores con seccomp y deshabilita alrededor de 44 llamadas al sistema de más de 300. Es moderadamente protector a la vez que proporciona una amplia compatibilidad con las aplicaciones.

En efecto, el perfil es una lista de permitidos que deniega el acceso a las llamadas al sistema por defecto y luego permite llamadas al sistema específicas. El perfil funciona definiendo una defaultAction de SCMP_ACT_ERRNO y anulando esa acción solo para llamadas al sistema específicas. El efecto de SCMP_ACT_ERRNO es provocar un error de Permission Denied (Permiso denegado). A continuación, el perfil define una lista específica de llamadas al sistema que están totalmente permitidas, porque su action se anula para ser SCMP_ACT_ALLOW. Finalmente, existen algunas reglas específicas para llamadas al sistema individuales como personality, entre otras, para permitir variantes de esas llamadas al sistema con argumentos específicos.

seccomp es fundamental para ejecutar contenedores de Docker con el menor privilegio posible. No se recomienda cambiar el perfil predeterminado de seccomp.

Cuando ejecutas un contenedor, este utiliza el perfil predeterminado a menos que lo sobrescribas con la opción --security-opt. Por ejemplo, lo siguiente especifica explícitamente una política:

$ docker run --rm \
             -it \
             --security-opt seccomp=/path/to/seccomp/profile.json \
             hello-world

Llamadas al sistema significativas bloqueadas por el perfil predeterminado

El perfil predeterminado de seccomp de Docker es una lista de permitidos que especifica las llamadas que están autorizadas. La siguiente tabla enumera las llamadas al sistema significativas (aunque no todas) que están bloqueadas efectivamente porque no están en la lista de permitidos. La tabla incluye la razón por la cual cada llamada al sistema está bloqueada en lugar de estar en la lista de permitidos.

Llamada al sistemaDescripción
acctLlamada al sistema de contabilidad que podría permitir a los contenedores deshabilitar sus propios límites de recursos o contabilidad de procesos. También limitada por CAP_SYS_PACCT.
add_keyEvita que los contenedores utilicen el llavero del kernel, que no tiene espacio de nombres.
bpfDeniega la carga de programas BPF potencialmente persistentes en el kernel, ya limitada por CAP_SYS_ADMIN.
clock_adjtimeLa hora y la fecha no tienen espacio de nombres. También limitada por CAP_SYS_TIME.
clock_settimeLa hora y la fecha no tienen espacio de nombres. También limitada por CAP_SYS_TIME.
cloneDeniega la clonación de nuevos espacios de nombres. También limitada por CAP_SYS_ADMIN para las banderas CLONE_*, a excepción de CLONE_NEWUSER.
create_moduleDeniega la manipulación y funciones en módulos del kernel. Obsoleta. También limitada por CAP_SYS_MODULE.
delete_moduleDeniega la manipulación y funciones en módulos del kernel. También limitada por CAP_SYS_MODULE.
finit_moduleDeniega la manipulación y funciones en módulos del kernel. También limitada por CAP_SYS_MODULE.
get_kernel_symsDeniega la obtención de símbolos exportados del kernel y de módulos. Obsoleta.
get_mempolicyLlamada al sistema que modifica la memoria del kernel y la configuración de NUMA. Ya limitada por CAP_SYS_NICE.
init_moduleDeniega la manipulación y funciones en módulos del kernel. También limitada por CAP_SYS_MODULE.
iopermEvita que los contenedores modifiquen los niveles de privilegios de E/S del kernel. Ya limitada por CAP_SYS_RAWIO.
ioplEvita que los contenedores modifiquen los niveles de privilegios de E/S del kernel. Ya limitada por CAP_SYS_RAWIO.
io_uring_enterBloqueada debido a vulnerabilidades de seguridad que pueden ser explotadas para escapar de los contenedores. Ver moby/moby#46762.
io_uring_registerBloqueada debido a vulnerabilidades de seguridad que pueden ser explotadas para escapar de los contenedores. Ver moby/moby#46762.
io_uring_setupBloqueada debido a vulnerabilidades de seguridad que pueden ser explotadas para escapar de los contenedores. Ver moby/moby#46762.
kcmpRestringe las capacidades de inspección de procesos, ya bloqueada al eliminar CAP_SYS_PTRACE.
kexec_file_loadLlamada al sistema hermana de kexec_load que hace lo mismo, con argumentos ligeramente diferentes. También limitada por CAP_SYS_BOOT.
kexec_loadDeniega la carga de un nuevo kernel para su posterior ejecución. También limitada por CAP_SYS_BOOT.
keyctlEvita que los contenedores utilicen el llavero del kernel, que no tiene espacio de nombres.
lookup_dcookieLlamada al sistema de rastreo y perfilado, que podría filtrar mucha información en el anfitrión. También limitada por CAP_SYS_ADMIN.
mbindLlamada al sistema que modifica la memoria del kernel y la configuración de NUMA. Ya limitada por CAP_SYS_NICE.
mountDeniega el montaje, ya limitada por CAP_SYS_ADMIN.
move_pagesLlamada al sistema que modifica la memoria del kernel y la configuración de NUMA.
nfsservctlDeniega la interacción con el demonio NFS del kernel. Obsoleta desde Linux 3.1.
open_by_handle_atCausa de un antiguo escape de contenedor. También limitada por CAP_DAC_READ_SEARCH.
perf_event_openLlamada al sistema de rastreo y perfilado, que podría filtrar mucha información en el anfitrión.
personalityEvita que el contenedor habilite la emulación de BSD. No es intrínsecamente peligrosa, pero está poco probada y tiene potencial para muchas vulnerabilidades del kernel.
pivot_rootDeniega pivot_root, debería ser una operación privilegiada.
process_vm_readvRestringe las capacidades de inspección de procesos, ya bloqueada al eliminar CAP_SYS_PTRACE.
process_vm_writevRestringe las capacidades de inspección de procesos, ya bloqueada al eliminar CAP_SYS_PTRACE.
ptraceLlamada al sistema de rastreo y perfilado. Bloqueada en versiones del kernel de Linux anteriores a la 4.8 para evitar la omisión de seccomp. El rastreo y perfilado de procesos arbitrarios ya está bloqueado al eliminar CAP_SYS_PTRACE, ya que podría filtrar mucha información en el anfitrión.
query_moduleDeniega la manipulación y funciones en módulos del kernel. Obsoleta.
quotactlLlamada al sistema de cuotas que podría permitir a los contenedores deshabilitar sus propios límites de recursos o contabilidad de procesos. También limitada por CAP_SYS_ADMIN.
rebootNo permite que los contenedores reinicien el anfitrión. También limitada por CAP_SYS_BOOT.
request_keyEvita que los contenedores utilicen el llavero del kernel, que no tiene espacio de nombres.
set_mempolicyLlamada al sistema que modifica la memoria del kernel y la configuración de NUMA. Ya limitada por CAP_SYS_NICE.
setnsDeniega la asociación de un hilo con un espacio de nombres. También limitada por CAP_SYS_ADMIN.
settimeofdayLa hora y la fecha no tienen espacio de nombres. También limitada por CAP_SYS_TIME.
stimeLa hora y la fecha no tienen espacio de nombres. También limitada por CAP_SYS_TIME.
socketBloqueada para AF_ALG para evitar la escalada de privilegios dentro del contenedor a través de la API criptográfica del kernel (CVE-2026-31431). También bloqueada para AF_VSOCK. Ver moby/moby#52494.
socketcallDenegada para evitar la omisión de filtros de familia de direcciones de socket en arquitecturas con el multiplexor socketcall heredado (i386, s390, MIPS o32). Ver moby/moby#52494.
swaponDeniega iniciar o detener el intercambio (swapping) a un archivo o dispositivo. También limitada por CAP_SYS_ADMIN.
swapoffDeniega iniciar o detener el intercambio (swapping) a un archivo o dispositivo. También limitada por CAP_SYS_ADMIN.
sysfsLlamada al sistema obsoleta.
_sysctlObsoleta, reemplazada por /proc/sys.
umountDebería ser una operación privilegiada. También limitada por CAP_SYS_ADMIN.
umount2Debería ser una operación privilegiada. También limitada por CAP_SYS_ADMIN.
unshareDeniega la clonación de nuevos espacios de nombres para procesos. También limitada por CAP_SYS_ADMIN, con la excepción de unshare --user.
uselibLlamada al sistema antigua relacionada con bibliotecas compartidas, en desuso desde hace mucho tiempo.
userfaultfdManejo de fallos de página en el espacio de usuario, necesario en gran medida para la migración de procesos.
ustatLlamada al sistema obsoleta.
vm86Máquina virtual de modo real x86 dentro del kernel. También limitada por CAP_SYS_ADMIN.
vm86oldMáquina virtual de modo real x86 dentro del kernel. También limitada por CAP_SYS_ADMIN.

Ejecutar sin el perfil predeterminado de seccomp

Puedes pasar unconfined para ejecutar un contenedor sin el perfil predeterminado de seccomp.

$ docker run --rm -it --security-opt seccomp=unconfined debian:latest \
    unshare --map-root-user --user sh -c whoami