Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

No Seas Tonto: Fortica tu Servidor con SELinux

No Seas Tonto: Fortica tu Servidor con SELinux

Presentación utilizada en FUDCon Managua. Da un pantallazo de cómo funciona SELinux.

Abdel G. Martínez L.

October 24, 2014
Tweet

More Decks by Abdel G. Martínez L.

Other Decks in Technology

Transcript

  1. Sobre mí... No seas tonto: Fortifica tu servidor con SELinux

    Abdel G. Martínez L. 2/32 • 5 años participando en el Proyecto Fedora. • Roles: Empaquetador y Embajador. • FAS: potty • Twitter: @abdelgmartinezl • Blog: http://abdelmartinez.com • E-mail: [email protected]
  2. Agenda No seas tonto: Fortifica tu servidor con SELinux Abdel

    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
  3. Introducción • Las aplicaciones siempre serán defectuosas a través del

    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
  4. Paquetes Necesarios No seas tonto: Fortifica tu servidor con SELinux

    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.
  5. Creando Sandbox No seas tonto: Fortifica tu servidor con SELinux

    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.
  6. Cambiando Contextos No seas tonto: Fortifica tu servidor con SELinux

    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(/.*)?"
  7. Modos • Se puede administrar desde SELinux Management GUI o

    con system­ config­selinux. • 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.
  8. Control de Acceso • Type Enforcement (TE): Utilizado para el

    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
  9. Políticas • Conjunto de reglas que guían al motor del

    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.
  10. Políticas – Terminología Básica Users • SELinux tiene un conjunto

    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.
  11. Políticas – Terminología Básica Subjects • Es un proceso que

    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.
  12. Políticas – Terminología Básica Dominios • Contexto en el cual

    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.
  13. Verificando Módulos • Las políticas de SELinux entran en juego

    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/
  14. Cambiando Configuración Booleana No seas tonto: Fortifica tu servidor con

    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
  15. Contexto de un Fichero • Comparemos las salidas de estos

    comandos: ls ­l /etc/nfsmount.conf ls ­Z /etc/nfsmount.conf • En el caso del segundo, debes tener una salida similar a esta: ­rw­r­­r­­. 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.
  16. Contexto de un Proceso • Comparemos las salidas de estos

    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.
  17. Convenciones de Nomenclatura No seas tonto: Fortifica tu servidor con

    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”.
  18. Procesos Accediendo Recursos No seas tonto: Fortifica tu servidor con

    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>
  19. Procesos Accediendo Recursos No seas tonto: Fortifica tu servidor con

    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/
  20. Herencia de Contexto No seas tonto: Fortifica tu servidor con

    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.
  21. Cambiando y Restaurando Contextos No seas tonto: Fortifica tu servidor

    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
  22. Resolviendo Problemas de Contextos No seas tonto: Fortifica tu servidor

    con SELinux Abdel G. Martínez L. 24/32 • Para resolver inconvenientes relacionados con los contextos, se ejecuta el comando matchpathcon ­V <file>.
  23. Transición de Dominios No seas tonto: Fortifica tu servidor con

    SELinux Abdel G. Martínez L. 25/32 • Método donde un proceso cambia su contexto a otro dominio.
  24. Unconfined Domains No seas tonto: Fortifica tu servidor con SELinux

    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: drwxr­xr­x. potty potty unconfined_u:object_r:user_home_t:s0 Documents
  25. Usuarios No seas tonto: Fortifica tu servidor con SELinux Abdel

    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
  26. Usuarios No seas tonto: Fortifica tu servidor con SELinux Abdel

    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.
  27. Usuarios No seas tonto: Fortifica tu servidor con SELinux Abdel

    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
  28. Puertos No seas tonto: Fortifica tu servidor con SELinux Abdel

    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
  29. • Verificar estos dos ficheros: /var/log/audit/audit.log /var/log/messages • El audit.log

    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