Firejail | Protege Sistemas Linux Aislando Sesiones de Usuario, Aplicaciones y Servidores
Firejail es una herramienta de seguridad ligera y diseñada para proteger un sistema Linux creando un entorno restringido en el que ejecutar aplicaciones, impidiendo que aplicaciones potencialmente no fiables o usuarios inexpertos/malintencionados pongan en peligro el sistema.
Se trata de un programa sandbox SUID que reduce el riesgo de violaciones de seguridad mediante el uso de espacios de nombres Linux, seccomp-bpf y capacidades Linux. Permite que un proceso y todos sus subprocesos tengan su propia visión restringida o privada de los recursos compartidos del kernel, como la pila de red, la tabla de procesos y la tabla de montaje.
Firejail puede funcionar en un entorno SELinux o AppArmor, y está integrado con los grupos de control de Linux.
Puede ejecutar en modo sandbox cualquier tipo de proceso: servidores, aplicaciones gráficas e incluso sesiones de usuarios. El software incluye por defecto perfiles de sandbox para programas comunes, como Mozilla Firefox, Chromium, VLC, Transmission. Aunque también te permite crear tus propiops perfiles personalizados para las aplicaciones que necesites.
El entorno aislado es ligero y de baja sobrecarga. No hay que editar archivos de configuración complicados, no hay conexiones de socket abiertas ni daemons ejecutándose en segundo plano. Todas las funciones de seguridad se implementan directamente en el kernel de Linux.
ARCHIVOS DE REGLAS DE FIREJAIL
- /etc/firejail/default.profile: Al ejecutarse, Firejail busca primero un perfil en ~/.config/firejail/ y, si no lo encuentra, buscará un perfil predeterminado en /etc/firejail.
- /etc/firejail/disable-common.inc: Contiene una lista extensa de aplicaciones y binarios propios del sistema operativo, marcados como blacklist. Herramientas como su o sudo para escalada de privilegios se encuentran en este archivo por defecto y provocarán un Permission denied si el usuario trata de ejecutarlos.
- /etc/firejail/disable-programs.inc: Contiene una lista de aplicaciones y directorios a los que se deniega el acceso y/o ejecución.
Si un programa no se encuentra en la lista y quieres prohibir que el usuario lo ejecute, puedes añadir tú mismo una regla blacklist /usr/bin/mi_app en el archivo disable–programs.inc - /etc/firejail/landlock–common.inc: Se encarga de restringir el acceso al sistema de archivos y recursos del sistema de manera más granular.
AISLAR SESIONES DE TERMINAL

El sistema de archivos predeterminado de Firejail se basa en el sistema de archivos del host con los directorios principales del sistema montados como solo lectura (/etc, /var, /usr, /bin, /sbin, /lib, /lib32, /libx32 y /lib64). Únicamente /home y /tmp son escribibles.
En este momento la ejecución de binarios como su y sudo para escalada de privilegios está deshabilitada debido a que el perfil por defecto contiene una regla blacklist para ellos en el archivo /etc/firejail/disable–common.inc.


INTEGRAR FIREJAIL CON EL ENTORNO DE ESCRITORIO PARA AISLAR APLICACIONES GRÁFICAS
La instalación de Firejail, por defecto ya incluye una gran variedad de perfiles en /etc/firejail para las aplicaciones más usadas en sistemas Linux como atril, code–oss, libreoffice, etc.

Lo que sucede al ejecutar sudo firecfg es que Firejail se integrará con el entorno de escritorio del usuario, creando enlaces simbólicos en /usr/local/bin que apuntarán a /usr/bin/firejail para todas aquellas aplicaciones que tienen un .profile en /etc/firejail/
No será necesario ejecutar sudo firecfg en cada inicio de sesión, una sola vez será suficiente para integrar Firejail con el entorno de escritorio de forma persistente.



Ahora al ejecutar un programa (como por ejemplo firefox o code-oss), desde una shell o un acceso directo del escritorio se iniciará aislado bajo Firejail.

Tras ejecutar los accesos directos de Firefox y Code, el comando firejail —list muestra que efectivamente ambas aplicaciones se encuentran aisladas en la sesión del usuario redteam que es quien las ejecuta.

Nota Importante: Asegúrate de que tus accesos directos o launchers, ejecuten el comando sin rutas absolutas (tal y como se muestra en /usr/local/bin)

Ya que si el launcher ejecuta como comando la ruta absoluta a /usr/bin/firefox se ejecutará el navegador (o la aplicación que sea), con los permisos de usuario habituales porque la ruta absoluta /usr/bin/firefox no tiene enlace simbólico a /usr/bin/firejail.

Como puedes observar, el acceso a ciertas rutas y archivos del sistema como puede ser /etc/passwd es denegado desde un navegador o aplicación que se ejecuta aislada con Firejail.

CREAR PERFIL PERSONALIZADO PARA INTEGRAR EL AISLAMIENTO DE BASH CON EL ENTORNO DE ESCRITORIO
Esto te será útil si como administrador de sistemas necesitas limitar los privilegios de tus usuarios en sus terminales.
Puedes crear un bash.profile en /etc/firejail como este (modificando, eliminando y/o añadiendo otras reglas que se adapten mejor a tu estrategia de Ciberseguridad defensiva):


Ahora añade la línea bash en el archivo /etc/firejail/firecfg.config

y ejecuta sudo firecfg para que Firejail pueda crear el nuevo enlace simbólico en /usr/local/bin

Ahora podrás crear al usuario un acceso directo o launcher en su escritorio para que al ejecutarlo, sus terminales estén bajo el aislamiento de Firejail.



Nota importante: Para mayor seguridad recomendamos editar o eliminar los atajos de teclado o combinaciones de teclas como Ctrl+Alt+T que abren una terminal, ya que esta no se ejecutará bajo el aislamiento de Firejail por defecto.
Analiza bien los atajos de teclado existentes en tu sistema para garantizar que el usuario solo pueda ejecutar aplicaciones aisladas (o las que te interese que se ejecuten aisladas).
En cada distro y entorno de escritorio (Gnome, KDE, Xfce …) esto podría variar.

AISLANDO UN SERVIDOR WEB NGINX
Este tipo de aislamientos en Firejail son algo más complejos y cada distribución podría requerir de directorios y permisos y usuarios distintos. No obstante el debug de Firejail te irá guiando hasta perfeccionar la configuración necesaria.
Para este ejemplo hemos aislado un servidor web NGINX sobre un sistema Arch Linux.
Hemos creado el perfil myNginx.profile en /etc/firejail con el siguiente contenido funcional (Adáptalo a tus necesidades si es necesario).
# myNginx.profile | Sandbox para Servidor Web NGINX
# Importar Reglas Comunes de Servidores
include /etc/firejail/server.profile
include /etc/firejail/disable-common.inc
include /etc/firejail/disable-programs.inc
# Aislamiento del Sistema de Archivos
private
private-dev
private-tmp
private
private-dev
private-tmp
whitelist /etc/nginx
whitelist /etc/ssl
whitelist /etc/hosts
whitelist /etc/resolv.conf
whitelist /etc/passwd
whitelist /etc/group
# Directorios Temporales para Nginx en Firejail
mkdir /tmp/nginx
mkdir /tmp/nginx/client-body
mkdir /tmp/nginx/proxy
mkdir /tmp/nginx/fastcgi
mkdir /tmp/nginx/uwsgi
mkdir /tmp/nginx/scgi
# Permitir Acceso al Contenido Web
whitelist /usr/share/nginx/html
whitelist /etc/nginx
whitelist /var/log/nginx
whitelist /var/lib/nginx
whitelist /etc/group
whitelist /usr/local/bin
read-only /etc/nginx
# Seguridad del entorno
noexec /tmp
seccomp
nonewprivs
# Red
netfilter
protocol unix,inet #,inet6 (Puedes usar IPv6 si lo necesitas)
# Variables de Entorno Mínimas
env PATH=/usr/sbin:/usr/bin
env LANG=C
# Usuarios y permisos
nogroups
# Desactivar Privilegios root Dentro del Sandbox si es Posible
noroot
# Proceso
restrict-namespaces
Este es un archivo de configuración de NGINX básico pero funcional para este ejemplo.
Si necesitas ejecutar el servidor web con privilegios elevados como sudo o root deberás descomentar la línea user http;
# Archivo /etc/nginx/nginx.conf Optimizado para Ejecución dentro de Firejail
# Evitando Dependencias del Sistema y Utilizando /tmp/nginx como Directorio de Escritura
# Nginx en Arch Linux usa el usuario http
# Modificar si utilizas otra versión o distribución de Linux.
# user http; <--- Descomentar Solo si Necesitas Ejecutar el Servidor Web con Privilegios Elevados como sudo o root.
worker_processes auto;
pid /tmp/nginx/nginx.pid;
events {
worker_connections 1024;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
aio off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
server_tokens off;
# Directorios Temporales Redirigidos a la Sandbox
client_body_temp_path /tmp/nginx/client-body;
proxy_temp_path /tmp/nginx/proxy;
fastcgi_temp_path /tmp/nginx/fastcgi;
uwsgi_temp_path /tmp/nginx/uwsgi;
scgi_temp_path /tmp/nginx/scgi;
# Logs dentro del Sandbox (persisten mientras dure la sesión)
access_log /tmp/nginx/access.log;
error_log /tmp/nginx/error.log warn;
# Configuración básica del servidor web
server {
listen 8080 default_server;
#listen [::]:8080 default_server;
server_name localhost;
# /usr/share/nginx/html es la ruta para el contenido HTML que utiliza NGINX en Arch Linux
# Cambiar por /var/www si es Necesario.
root /usr/share/nginx/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# Deshabilitar Ejecución de Scripts (por seguridad si es necesario)
location ~ \.php$ {
return 403;
}
}
}
Ahora podemos ejecutar el servidor web aislado y sin necesidad de un demonio para el servicio.
Los mensajes de error como can´t chdir to nginx se deben a que el servicio lo estamos ejecutando sin privilegios con la finalidad de aumentar la seguridad de la sandbox.
Aún así el servidor web es funcional y el contenido html accesible.



DESINSTALACIÓN LIMPIA DE FIREJAIL
firecfg crea enlaces simbólicos en /usr/local/bin, por lo que para eliminar completamente firejail, ejecuta sudo firecfg –clean antes de desinstalarlo.
Nota: Los enlaces simbólicos rotos se ignoran al buscar un ejecutable en $PATH, por lo que desinstalar sin hacer lo anterior no debería causar problemas, pero es recomendable.

Comments are closed