G. Martínez L. 3/32 1. Introducción 2. Paquetes Necesarios 3. Creando Sandbox 4. Modos 5. Control de Acceso 6. Políticas 7. Políticas – Terminología Básica 8. Verificando Módulos 9. Cambiando Configuración Booleana 10.Contexto de un Fichero 11.Contexto de un Proceso 12.Convenciones de Nomenclatura 13.Procesos Accediendo Recursos 14.Herencia de Contextos 15.Cambiando y Restaurando Contextos 16.Resolviendo Problemas de Contextos 17.Transición de Dominios 18.Unconfined Domain 19.Usuarios 20.Analizando Bitácoras 21.Puertos
tiempo. • El concepto de monitorización por referencia describe el control de acceso en los sistemas operativos. • Existen dos formas de control de acceso: discrecional (DAC) y mandatoria (MAC). • El estándar en Linux es DAC. • SELinux, añade la MAC. No seas tonto: Fortifica tu servidor con SELinux Abdel G. Martínez L. 4/32
Abdel G. Martínez L. 5/32 • policycoreutils: Provee utilitarios para administrar SELinux. • policycoreutils-python: Como el anterior. • selinux-policy: Provee políticas de referencia para SELinux. • selinux-policy-targetered: Provee políticas targetered para SELinux. • libselinux-utils: Provee herramientas para administrar SELinux. • setroubleshoot-server: Provee herramientas para descifrar los mensajes de la bitácora de auditoría. • setools: Provee herramientas para monitorización de bitácoras de auditoría, políticas de consulta, administración de contexto de archivos. • setools-console: Como el anterior. • mcstrans: Herramienta para traducir diferentes niveles en un formato entendible.
Abdel G. Martínez L. 6/32 • Instalar los paquetes httpd y vsftpd. • Iniciar ambos servicios con systemctl. • Crear cuatro (4) usuarios: regularuser, switcheduser, guestuser, restricteduser.
Abdel G. Martínez L. 7/32 • Ejecutar el comando chcon type es una medida temporal. • El comando restorecon re-aplica el contexto original y lo hace de forma permanente. • Los ficheros de contextos existentes en el sistema están listados en /etc/selinux/targeted/contexts/files/file_contexts. • Los contextos de los nuevos directorios y ficheros están listados en /etc/selinux/targeted/contexts/files/file_contexts.local. • Para agregar un nuevo contexto se utiliza el siguiente comando: semanage fcontext add type httpd_sys_content_t "/www(/.*)?"
con system configselinux. • sestatus muestra el estado de SELinux. • setenforce cambia entre los modos Enforcing y Permissive, pero no persiste luego de reiniciar el sistema. • Para hacer cambios persistentes es necesario editar el fichero /etc/selinux/config. No seas tonto: Fortifica tu servidor con SELinux Abdel G. Martínez L. 8/32 • Enforcing: Modo por defecto que permite y fuerza las políticas de SELinux en el sistema, denegando acceso y acciones de logging. • Permissive: SELinux está habilitado, pero no fuerza las políticas de seguridad, sólo advierte y guarda acciones. Útil para soporte. • Disabled: SeLinux está apagado.
control de acceso usando una política targetered. • Role-Based Access Control (RBAC): Basado en los usuarios SELinux, pero no usado con políticas targetered. • Multi-Level Security (MLS): Comúnmente no utilizado (setrans.conf) y escondido de la política targetered. No seas tonto: Fortifica tu servidor con SELinux Abdel G. Martínez L. 9/32 • Verificar procesos: ps eZ | grep proceso • Verificar ficheros: ls Z /nombre/fichero
SELinux. • Define types para objetos y domains para procesos. • Utiliza roles para limitar el acceso de los roles a los dominios. No seas tonto: Fortifica tu servidor con SELinux Abdel G. Martínez L. 10/32 • Strict: Todo está denegado y luego una política es escrita y le da al elemento los accesos necesarios. • Targetered: Diseñada para proteger procesos sin afectar la ejecución del usuario final. • Unconfinned: Cualquier otro proceso o aplicación que se ejecute sin política asociada.
de usuarios pre-definidos. • Cada usuario regular está asociado o uno más usuarios de SELinux. No seas tonto: Fortifica tu servidor con SELinux Abdel G. Martínez L. 11/32 Roles • Actúa como una compuerta entre el usuario y el proceso. • Define cuáles usuarios pueden acceder al proceso. • Son como filtros (no grupos). • Por esta característica, SELinux es RBAC.
puede ser afectado por un objeto. No seas tonto: Fortifica tu servidor con SELinux Abdel G. Martínez L. 12/32 Objects • Todo elemento actor: un fichero, un directorio, un puerto, un socket TCP, un cursor, el X Server. • Las acciones que puede realizar un proceso sobre un objeto se denomina permission.
un subject (proceso) puede actuar. • Se envuelve alrededor del subject. • Le dice lo que puede y lo que no puede hacer. No seas tonto: Fortifica tu servidor con SELinux Abdel G. Martínez L. 13/32 Tipos • Contexto para un object que estipula su propósito: un sitio web o que pertenece a un directorio.
luego de la evaluación DAC. • Cuando el SELinux arranca, la política es cargada en memoria de forma modular. • El policy store mantiene el registro de los módulos cargados. No seas tonto: Fortifica tu servidor con SELinux Abdel G. Martínez L. 15/32 • Ver nombre del policy store: sestatus | grep Loaded • Ver módulos cargados: semodule l | less • Ubicación de binarios de módulos: / etc/selinux/targeted/modules/active /modules • Ubicación de módulos activos: /etc/selinux/targeted/policy/
SELinux Abdel G. Martínez L. 16/32 • A pesar de ser binarios, se puede modificar su contenido. • Mostrar el estado actual de todos los módulos: semanage boolean l | less • Mostrar el estado actual de un módulo: getsebool module_name • Cambiar temporalmente el booleano al módulo: setsebool module_name on • Cambiar permanentemente el booleano al módulo: setsebool P module_name on
comandos: ls l /etc/nfsmount.conf ls Z /etc/nfsmount.conf • En el caso del segundo, debes tener una salida similar a esta: rwrr. root root system_u:object_r:etc_t:s0 system_u:object_r:etc_t:s0 /etc/nfsmount.conf No seas tonto: Fortifica tu servidor con SELinux Abdel G. Martínez L. 17/32 • Son cuatro partes que están separadas por dos puntos: – El user context que sería el usuario SELinux asociado al usuario de Linux. – El SELinux role. – El type, que define tipo o atributo tiene el fichero. – La seguridad multinivel (MLS). Son categorías de sensibilidad.
comandos: ps efZ| grep 'httpd\|vsftpd' ps ef | grep 'httpd\|vsftpd' • En el caso del segundo, debes tener una salida similar a esta: system_u:system_r:httpd_t:s0 system_u:system_r:httpd_t:s0 root 8872 1 0 19:45 ? 00:00:00 /usr/sbin/httpd DFOREGROUND No seas tonto: Fortifica tu servidor con SELinux Abdel G. Martínez L. 18/32 • Son cuatro partes que están separadas por dos puntos: – El user context que sería el usuario SELinux asociado al usuario de Linux. – El SELinux role. – El domain, que define el contexto del proceso. – La seguridad multinivel (MLS). Son categorías de sensibilidad.
SELinux Abdel G. Martínez L. 19/32 • Los usuarios de SELinux tienen un sufijo: “u”. • Los roles tienen un sufijo: “r”. • Los tipos y dominios tienen un sufijo “t”.
SELinux Abdel G. Martínez L. 20/32 • Para ejecutar, un proceso necesita acceder ficheros y realizar acciones sobre ellos (abrir, leer, modificar o ejecutar). • Cada proceso debe acceder a solo cierto tipo de recursos (ficheros, directorios, puertos). • Las reglas de acceso se definen en una política. Siguen la siguiente estructura: allow <domain> <type>:<class> { <permissions> }; • Para verificar el tipo de acceso del proceso en una política: sesearch allow source <source> target <target> class <class> • Para verificar el tipo de acceso del proceso en una política: chcon type <type> <file>
SELinux Abdel G. Martínez L. 21/32 • Hagamos una prueba con el servicio de httpd: touch /var/www/html/index.html ls Z /var/www/html/* sesearch allow source httpd_t target httpd_sys_content_t class file vi /var/www/html/index.html chmod R 755 /var/www systemctl restart httpd.service chcon type var_t /var/www/html/index.html ls Z /var/www/html/ restorecon v /var/www/html/index.html ls Z /var/www/html/
SELinux Abdel G. Martínez L. 22/32 • El context inheritance consiste en que, por defecto, los procesos y ficheros son creados con los contextos de sus padres. • La única manera de sobreescribir esto es a través de una política. • Ejemplo: Si tenemos un proceso a, y éste crea un proceso b, entonces tendrá el mismo dominio que el proceso a. • Ejemplo: Si tengo un directorio, y creo un fichero dentro, entonces tendrá el mismo tipo de contexto que el directorio. • Cuando se ejecuta un comando cp, el directorio o fichero copiado asume el tipo de contexto de la ubicación destino. • Cuando se ejecuta un comando mv, el directorio o fichero movido asume el tipo de contexto original.
con SELinux Abdel G. Martínez L. 23/32 • Ejecutar el comando chcon type es una medida temporal. • El comando restorecon re-aplica el contexto original y lo hace de forma permanente. • Los ficheros de contextos existentes en el sistema están listados en /etc/selinux/targeted/contexts/files/file_contexts. • Los contextos de los nuevos directorios y ficheros están listados en /etc/selinux/targeted/contexts/files/file_contexts.local. • Para agregar un nuevo contexto se utiliza el siguiente comando: semanage fcontext add type httpd_sys_content_t "/www(/.*)?" • Para renombrar el fichero o directorio que se guardó, ejecutar el siguiente comando: restorecon Rv /www
Abdel G. Martínez L. 26/32 • SELinux tiene procesos que tienen todos tipos de accesos en el sistema. • Es especificado en una política. • Ejemplo: drwxrxrx. potty potty unconfined_u:object_r:user_home_t:s0 Documents
G. Martínez L. 27/32 • Los usuarios de SELinux son entidades diferentes a los usuarios de Linux, incluyendo la cuenta root. • Para ver la asociación entre cuentas, ejecutar: semanage login l • Para ver los usuarios de SELinux del sistema, ejecutar: semanage user l • Para ver el contexto del usuario, ejecutar: id Z
G. Martínez L. 28/32 • guest_u: El usuario no tiene acceso al sistema X-Window o red y no puede ejecutar el comando su o sudo. • xguest_u: El usuario tiene acceso a las herramientas de X- Window y redes. • user_u: El usuario tiene más acceso que el guest pero no puede ejecutar su o sudo. • staff_u: Los mismos que user_u, pero puede ejecutar sudo. • system_u: El usuario está intencionado en ejecutar servicios del sistema y no está asociado a una cuenta de usuario regular.
G. Martínez L. 29/32 • Como regularuser, ejecutar: su – switcheduser • Como root, ejecutar: semanage login a s user_u regularuser • Como regularuser, ejecutar: su – switcheduser
G. Martínez L. 30/32 • Por defecto, las políticas de SELinux permiten que los servicios atiendan los puertos reconocidos. • Para cambiar el puerto de un servicio, ejecutar: semanage port a t http_port_t p tcp 81 • Para ver la lista de los puertos permitidos para los procesos: semanage port l
se escribirá siempre y cuando el servicio de auditd está en ejecución. • El comando ausearch m <message> c <program> busca dentro de las bitácoras si auditd está en ejecución. No seas tonto: Fortifica tu servidor con SELinux Abdel G. Martínez L. 31/32 Analizando las Bitácoras