1 puntos por GN⁺ 2025-12-01 | 1 comentarios | Compartir por WhatsApp
  • Landlock es una API de seguridad de Linux que permite que una aplicación declare explícitamente los recursos a los que puede acceder para realizar su propio sandboxing a nivel del kernel.
  • Es más simple que SELinux o AppArmor y puede crear y aplicar políticas en tiempo de ejecución sin permisos de administrador.
  • Las políticas se definen como una lista de permisos explícita (allowlist) para archivos, directorios y puertos, y mediante restricciones jerárquicas permiten reforzar la seguridad de forma gradual.
  • Existen bindings para Rust, Go, Haskell, entre otros, lo que permite implementar control de acceso granular en distintos entornos como aplicaciones GUI, servidores y procesos de escritorio.
  • En el ecosistema de seguridad de Linux, se perfila como una herramienta de sandboxing sin privilegios, práctica y sencilla, que podría convertirse en un componente clave para fortalecer la seguridad de escritorio en el futuro.

Visión general de Landlock

  • Landlock es una API que permite a las aplicaciones de Linux declarar explícitamente los recursos a los que pueden acceder
    • Es similar al concepto de unveil() y pledge() de OpenBSD y sigue el principio de “permitir solo los recursos necesarios y bloquear el resto”.
  • Proporciona una capa de defensa amigable para desarrolladores más fácil de comprender e integrar que los mecanismos de seguridad de Linux existentes.
  • Su objetivo es promover el uso de Landlock al definir de forma explícita el acceso permitido.

Cómo funciona

  • Está implementado como Linux Security Module (LSM) y está disponible desde Linux 5.13.
  • A diferencia de SELinux o AppArmor, aplica una restricción transitoria por proceso.
    • La política se crea en tiempo de ejecución, se aplica solo al hilo actual y a los procesos hijos, y desaparece cuando el proceso termina.
  • Componentes de la política
    1. Handled accesses: categorías de operaciones a restringir (p. ej., lectura/escritura de sistema de archivos)
    2. Access grants: lista explícita de objetos permitidos
  • Política de ejemplo
    • /home/user de solo lectura
    • /tmp de lectura/escritura
    • permitir bind al puerto 2222
  • Al invocar landlock_restrict_self(), el hilo y los procesos hijos entran en un ámbito de restricción permanente
    • La restricción es irrevocable, y pueden superponerse hasta un máximo de 16 capas (layer)
    • Las capas inferiores pueden reducir aún más el acceso, pero los permisos eliminados en una capa superior no pueden recuperarse
  • Es posible usarlo de forma no privilegiada (unprivileged), incluso para que aplicaciones comunes auto-sandboxeen.
  • Gracias al versionado de ABI, funciona en el mayor rango posible incluso en kernels antiguos.
  • Al ser un Stackable LSM, puede combinarse con SELinux o AppArmor.

Motivos de uso

  • Adecuado para aplicaciones con patrones de acceso a archivos predecibles
    • Ej.: un servidor web limitado para acceder solo a /var/www/html y /tmp.
  • No requiere intervención administrativa ni configuración global del sistema; la política se puede definir directamente en el código.
  • Puede usarse sin escalamiento de privilegios, integrándose fácilmente con la mayoría de programas.
  • Existen bindings para Rust, Go, Haskell y varios proyectos de wrapper con estilo unveil.
  • Aunque aún no hay una biblioteca C oficial, se pueden usar varias implementaciones no oficiales.
  • En el ejemplo de Rust, /usr, /etc, /dev se configuran como solo lectura y /home, /tmp con lectura/escritura.

Situación y necesidad de sandboxing en Linux

  • Con el aumento del uso de Linux también aumenta el malware dirigido al escritorio.
  • La seguridad relativa de Linux proviene de su participación de mercado y barreras técnicas, no de una seguridad estructural inherente.
  • Problemas en distribuciones comunes
    • Posibilidad de ejecutar binarios no confiables
    • Posibilidad de ejecutar scripts directamente desde internet
    • Uso de sudo sin contraseña
    • Aplicaciones comunes pueden acceder a archivos sensibles dentro de $HOME
    • Posibilidad de espiar pulsaciones de teclado en entornos X11
    • Posibilidad de hacer bind en puertos arbitrarios

Limitaciones de las herramientas de seguridad existentes

  • Containerization (Docker, Podman): adecuado para aislamiento de servicios, pero no para apps de escritorio; existen casos de debilitamiento del aislamiento con la opción --privileged.
  • Flatpak / Snap: adecuado para apps GUI, pero con permisos excesivos; poco adecuado para herramientas CLI.
  • Firejail: requiere perfiles por app y una llamada explícita en cada ejecución.

Mecanismos existentes desde la perspectiva del desarrollador

  • seccomp: potente, pero la configuración es compleja y el enfoque de lista negra es vulnerable.
  • SELinux: potente, pero complejo y requiere políticas administrativas; muchos sistemas vienen deshabilitados por defecto.
  • AppArmor: más simple que SELinux, pero aún requiere perfiles de administrador y está deshabilitado en algunas distribuciones.

Resumen de las ventajas de Landlock

  • Sin privilegios, centrado en la aplicación, fácil de integrar y bloqueo por defecto (deny-by-default).
  • Soporte amplio desde Linux 5.13, con mantenimiento de compatibilidad hacia atrás y hacia adelante.
  • No es perfecto, pero cubre un hueco como una herramienta de sandboxing simple e independiente, sin privilegios.

Aplicabilidad de Landlock

  • En procesos demonio de alto privilegio de ejecución prolongada, Landlock puede limitar el alcance de acceso.
  • Lector de PDF, visor de imágenes, navegador web, procesador de texto, entre otros, pueden restringirse para que solo accedan a archivos abiertos.
  • Servidores FTP/HTTP pueden configurarse para acceder solo a los archivos necesarios.
    • Ej.: aunque nginx se ejecute como root, si un atacante obtiene una shell no podrá acceder a archivos fuera de la política.
  • Si se introduce una propuesta de Supervisor, sería posible implementar en el escritorio Linux un sistema de permisos similar a Android.
    • Combinado con un sistema de permisos de GUI y de almacenamiento de permisos, se podría lograr una experiencia de usuario más segura.

Funcionalidades en desarrollo de Landlock

  • Supervise Mode: decisión interactiva en espacio de usuario para permitir o denegar acceso, similar al prompt de permisos de Android.
  • Socket Restrictions: control fino sobre tipos de socket y puertos que puede usar un proceso.
  • LANDLOCK_RESTRICT_SELF_TSYNC: propaga la restricción a todos los hilos dentro de un proceso.
  • LANDLOCK_ADD_RULE_QUIET: suprime mensajes de registro de auditoría para ciertos objetos.
  • LANDLOCK_ADD_RULE_NO_INHERIT: evita que los permisos del directorio padre se hereden hacia abajo, afinando el control del sistema de archivos.

Resumen

  • Landlock es un mecanismo de sandboxing de bloqueo por defecto simple y sin privilegios.
  • Es fácil de entender e integrar, y tiene un gran potencial para mejorar la seguridad de escritorio y aplicaciones en Linux.
  • Los desarrolladores pueden reforzar el nivel de seguridad al aplicar Landlock directamente en sus aplicaciones.

1 comentarios

 
GN⁺ 2025-12-01
Comentarios en Hacker News
  • Yo bloqueé telemetría no deseada usando Landlock
    Escribí un programa simple en C para permitir la recepción solo en un puerto específico y bloquear todas las demás conexiones de red
    Tomé como referencia el sandboxer.c de ejemplo, y controlé solo la red sin tocar las restricciones de acceso a archivos
    En dmesg aparecen las conexiones bloqueadas, probablemente gracias a la función de auditoría
    Esta herramienta funciona en modo de usuario sin privilegios y también funciona bien dentro de contenedores sin configurar un firewall
    Aun así, no creo que sea adecuada para bloquear por completo programas maliciosos
    • Me pregunto si podrías compartir el código fuente
  • Landlock no es perfecto
    Si ves el issue #28 y este hilo de correos relacionado, hay un problema: las reglas del sandbox no pueden hacer referencia a directorios que no existen
    Por ejemplo, si agregas una regla cuando ~/.ssh todavía no existe, aunque el directorio se cree después, el acceso no quedará bloqueado
    Es decir, eso puede crear una brecha de seguridad
  • Estoy probando hacer sandboxing de juegos de itch.io con bwrap
    Ejecutarlos con el mínimo de privilegios es bastante complicado
    “Microlandia” no funciona, pero otros juegos hechos con Unity sí corren bien
    Espero que aparezcan más herramientas basadas en Landlock para que este tipo de trabajo sea más fácil
  • Me da curiosidad el estado del soporte de Landlock en los runtimes de contenedores
    Parece que los CRI quieren definir su propia interfaz, pero inevitablemente siempre irán detrás del soporte del kernel
    No creo que la mayoría de la gente de infraestructura vaya a mantener políticas de sandbox por aplicación
    Me parece más realista que las propias aplicaciones usen Landlock
    • Mencionando el issue de runc y el issue de runtime-spec,
      explica que si el runtime simplemente deja pasar la syscall, aparece el problema de tener que confiar en que la app se bloquee a sí misma
    • Creo que Landlock no fue pensado originalmente para runtimes de contenedores, sino como una función con otro propósito
  • Como desarrollador de dispositivos médicos, me da mucho gusto ver este enfoque
    Internamente usamos una API parecida para la gestión de procesos críticos
    Este tipo de investigación será de gran ayuda también en industrias reguladas
  • Eso de que “no hay una biblioteca oficial de C” suena raro
    Si es una función del kernel, lo normal sería que primero existiera una API en C, así que me pregunto por qué no la hay
    • La interfaz base del kernel es la syscall (uapi)
      libc no es más que una capa encima, y todavía hay muchas syscalls que existen sin wrapper en libc
    • Aquí se refieren a una biblioteca estándar de C como glibc o musl
      También podrías crear los headers tú mismo y llamarla con la macro _syscallN
    • Que no haya una API en C no es un gran problema
      Puedes usar un wrapper simple como landbox,
      y Rust o Go también pueden exponer C FFI
      Con el ejemplo sandboxer.c del kernel basta como referencia
    • La documentación de man7 resume la mayor parte del tema
    • Los desarrolladores del kernel no crean directamente software de espacio de usuario, por eso no existe una API en C
  • Hay que tener en cuenta que Landlock solo restringe sockets TCP y no bloquea UDP ni sockets raw
    • Eso parece una brecha de seguridad bastante grande. Me pregunto por qué será
    • Los sockets raw requieren privilegios, y también se puede bloquear por UID con iptables
      No es lo mismo que Landlock, pero se puede usar de forma complementaria
    • Aun así, se siente como un hueco bastante grande
    • Es una limitación rara, pero da gusto saberlo
  • Es interesante que Landlock haya añadido nuevas syscalls en lugar de usar configuración en /sys
    Probablemente sea por el principio de no privilegio
    También me pregunto si se puede bloquear la syscall de Landlock con seccomp
    Si una política vieja de seccomp no incluye el número de Landlock, ¿no podría terminar lanzando SIGSYS?
    • Otros LSM también se están moviendo gradualmente hacia interfaces basadas en syscalls
      Las API basadas en sistema de archivos tienen muchos footguns, y para el control de acceso basado en dirfd una syscall encaja mejor
      Un filtro seccomp bien escrito devuelve -ENOSYS para que simplemente parezca “no compatible”
    • Sí se puede restringir la syscall de Landlock con seccomp, pero su utilidad práctica es baja
      Landlock solo restringe aún más los permisos existentes; no otorga permisos nuevos
  • Recién estoy empezando a interesarme por la seguridad en Linux
    Me estoy preparando para dejar Mac y pasarme por completo a Linux, y me pregunto qué tanto puede ayudar Landlock contra el malware
    Por ejemplo, quisiera crear un entorno que rechace automáticamente el acceso a ~/.ssh
    También quisiera saber si con esto se puede hacer un lanzador de aplicaciones
    • El modelo de amenazas de Landlock no es el malware en sí, sino las vulnerabilidades de ejecución de código en apps legítimas
      Sirve para que la propia app restrinja los permisos que no necesita y así un atacante no pueda tomar el control del sistema
    • Para algo como bloquear acceso a ~/.ssh, necesitas un modelo MAC como AppArmor o SELinux
      Landlock es útil cuando la app se restringe a sí misma o a sus procesos hijos
      Por ejemplo, que npm limite scripts post-install solo al directorio de build
      Es una API para que la usen directamente los desarrolladores de apps, similar a pledge de OpenBSD
      Pero como el ecosistema Linux está muy fragmentado, su adopción será lenta
      Mientras tanto, lo más realista es usarlo en forma de wrapper o launcher
    • El gestor de paquetes tendría que definir políticas para scripts de build, o el usuario tendría que usar wrappers manualmente
      Al final, solo es efectivo cuando el programa conoce sus propios permisos
    • Es casi el mismo concepto que el sandboxing de macOS e iOS
      La app define una whitelist de los recursos que necesita al inicio y bloquea el resto
      No es para defenderse de programas maliciosos, sino para la protección de su propio proceso
  • Eso de que “no hay una biblioteca oficial de C” suena chistoso
    La librería estándar ya tiene syscalls, ¿de verdad hace falta una biblioteca aparte?
    La documentación de man7 también existe
    Me pregunto si lo que realmente quieren decir es que hace falta una capa de abstracción
    • Como libc se encarga de manejar los números de syscall y los efectos secundarios,
      sí sorprende que glibc todavía no ofrezca la interfaz de Landlock
      Probablemente sea por temas de compatibilidad con sistemas que no son Linux