Este artículo explora dos enfoques distintos para el 'sandboxing' de procesos, una técnica crucial para la seguridad informática que aísla un proceso para limitar el daño que puede causar si es comprometido. Tradicionalmente, los sistemas Unix permitían a los procesos heredar la autoridad completa del usuario que los inició, un modelo que se vuelve problemático con la proliferación de código no confiable de Internet. Para abordar esto, FreeBSD introdujo Capsicum y Linux desarrolló seccomp-bpf, cada uno con una filosofía diferente.
Capsicum, implementado en FreeBSD, adopta un enfoque de 'sustracción'. Comienza con un proceso que tiene acceso a todo el sistema y luego elimina progresivamente todo el acceso, dejando solo los recursos y permisos estrictamente necesarios. La función clave es cap_enter(), que sumerge al proceso en un entorno aislado donde no existen el sistema de archivos, sockets ni procesos. Es una decisión irreversible: una vez dentro, el proceso no puede volver atrás ni solicitar más permisos. Esta estrategia es inherentemente más segura porque la restricción es estructural, no basada en una lista de exclusiones.
seccomp-bpf, utilizado en Linux, funciona como un 'filtro'. Permite que el proceso conserve su autoridad completa, pero interpone un programa BPF (Berkeley Packet Filter) entre el proceso y el kernel. Este programa examina cada llamada al sistema (syscall) y decide si permitirla, denegarla o terminar el proceso. Aunque efectivo, este enfoque requiere una lista exhaustiva de syscalls permitidos, lo que lo hace vulnerable a nuevas syscalls que no están explícitamente cubiertas por el filtro. El ejemplo de Chromium, el navegador web de Google, ilustra esta diferencia: Chromium usa Capsicum en FreeBSD y seccomp-bpf en Linux, demostrando la implementación de sandboxing en ambos sistemas.
El artículo destaca un CVE (Common Vulnerability and Exposure) reciente que demostró la debilidad de seccomp-bpf: una vulnerabilidad en el kernel de Linux permitió a atacantes eludir los filtros seccomp. Capsicum, debido a su diseño estructural, era inmune a este ataque. La diferencia fundamental radica en la epistemología: seccomp se pregunta '¿Qué no debe hacer este proceso?', mientras que Capsicum se pregunta '¿Qué necesita este proceso?'. Capsicum, al eliminar todo lo innecesario, ofrece una seguridad más robusta y una superficie de ataque más pequeña.
