Seccomp: el encargado de filtrar las llamadas al sistema
Cada programa que corre en Linux interactúa con el kernel a través de llamadas al sistema. Leer archivos, abrir sockets, crear procesos: todo pasa por ahí. Seccomp es el mecanismo que permite decidir, con precisión quirúrgica, qué syscalls puede usar un proceso y cuáles no.
En este artículo vamos a entender qué es seccomp, por qué existe, cómo funciona dentro del kernel y por qué es una pieza clave en Docker, Snap, Flatpak y la seguridad moderna de Linux.
¿Qué es una syscall y por qué importa?
Linux separa claramente dos mundos: user space y kernel space. Un proceso común no puede acceder directamente al hardware ni a estructuras internas del kernel.
Para pedirle algo al kernel, usa una llamada al sistema (syscall): una puerta controlada que permite realizar operaciones críticas.
Ejemplos clásicos de syscalls:
open(),read(),write()fork(),execve()socket(),bind()mount(),ptrace()
Idea clave: si un proceso no puede invocar una syscall, no puede realizar esa acción, aunque el binario exista.
El problema de seguridad
Históricamente, cualquier proceso podía invocar cualquier syscall disponible, siempre que tuviera permisos suficientes.
Esto generaba un problema serio:
- Más superficie de ataque.
- Exploits que abusaban de syscalls poco usadas.
- Aplicaciones que no necesitaban privilegios elevados, pero igual podían intentar operaciones peligrosas.
La pregunta fue inevitable: ¿y si un proceso solo pudiera usar las syscalls que realmente necesita?
¿Qué es seccomp?
Seccomp (Secure Computing Mode) es un mecanismo del kernel de Linux que permite restringir el conjunto de syscalls que un proceso puede ejecutar.
Una vez activado, el proceso queda atrapado dentro de una “jaula”: si intenta ejecutar una syscall no permitida, el kernel interviene.
Las posibles acciones incluyen:
- Terminar el proceso inmediatamente.
- Enviar una señal (
SIGSYS). - Registrar el evento.
- Permitir la syscall.
De seccomp simple a seccomp-bpf
Las primeras versiones de seccomp eran muy básicas: solo permitían un conjunto mínimo de syscalls.
La evolución llegó con seccomp-bpf, que combina seccomp con BPF (Berkeley Packet Filter).
Esto permite definir filtros complejos:
- Permitir o bloquear syscalls específicas.
- Analizar argumentos de la syscall.
- Tomar decisiones condicionales.
Importante: una vez que un proceso entra en modo seccomp, no puede salir de él.
Seccomp en la práctica (conceptual)
Desde el punto de vista del kernel, el flujo es simple:
- El proceso intenta ejecutar una syscall.
- El filtro seccomp se evalúa.
- El kernel decide si la syscall está permitida.
- Se ejecuta o se bloquea.
Podés verificar si un proceso usa seccomp con:
$ grep Seccomp /proc/<PID>/statusUn valor distinto de 0 indica que el proceso tiene seccomp activo.
Por qué seccomp es clave en contenedores
Docker, Snap y Flatpak utilizan seccomp para reducir drásticamente la superficie de ataque.
Un contenedor típico:
- No necesita montar sistemas de archivos.
- No necesita manipular el kernel.
- No necesita acceso a syscalls peligrosas.
Al bloquear esas llamadas, incluso si una aplicación es vulnerada, el daño potencial es mucho menor.
Seccomp vs AppArmor vs SELinux
Aunque suelen mencionarse juntos, cada uno cumple un rol distinto:
- Seccomp: filtra syscalls.
- AppArmor: controla recursos por ruta.
- SELinux: modelo de control de acceso por etiquetas.
No se excluyen: se complementan. Un sistema moderno suele usar los tres.
Enlaces útiles
Conclusión
Seccomp es uno de esos mecanismos silenciosos que sostienen la seguridad moderna de Linux. No se ve, no se configura a mano en la mayoría de los casos, pero está ahí, filtrando llamadas críticas al kernel.
Entender cómo funciona permite comprender por qué los contenedores no son magia, por qué Linux puede aislar procesos sin virtualizar hardware y por qué la seguridad empieza, muchas veces, en las capas más bajas del sistema.

