Hardening SELinux

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 67

Hardening: SELinux

Ponente: Ing. Marco A. Arenas P.

FLISoL:2017
Introducción

 Hay que saber resolver el problema entre la mezcla apropiada


entre seguridad y productividad.
 Las cuatros áreas que necesitamos proteger incluyen la física,
local, remota y el personal.
 Nuevamente las políticas de seguridad ayudaran a la aplicación
de ellas, es por eso que deben ser genéricas y fáciles de entender.
 Una política de seguridad desactualizada puede ser peor que no
tener una.
Introducción

 Siempre debemos recordar:


1. El factor humano es el eslabón más débil
2. No es existe un ambiente informático invulnerable
3. La paranoia es buena

Los usuarios nunca debería poner el directorio actual en el path. Algo como
esto:
PATH=./:$PATH

 Esto tiene un riesgo de seguridad importante; si alguien modifica el alias del


comando ls con la siguiente línea: /bin/rm –rf $HOME
Introducción

 Seguridad informática un tema


complejo (varios elementos y factores)
 Pero nos concentraremos ahora en el
kernel de SOR Linux, que tiene sus
LSM (Módulos de seguridad de Linux).
Hardening

 El hardening (endurecimiento) y el Tuning (afinamiento)


 El hardening de sistemas es una estrategia defensiva que protege
a los servidores o equipos de comunicaciones de ataques, a
través de la eliminación de aplicaciones o servicios
innecesarios, cerrando los huecos de seguridad y asegurando los
controles de acceso.
Hardening

 El hardening (endurecimiento) permite mejorar


los niveles de seguridad del propio equipo
 Configuración Personalizada
 Administración de Usuarios (niveles de acceso)
 Servicios y Aplicaciones necesarias (bloquear,
minimización de servicios)
 Backups y Actualizaciones
 Administración remota segura
 Control de tráfico
 Control de logs, banners
 etc
Módulos de Seguridad
LSM - Linux Security Module
 El kernel Linux puede mejorar su seguridad Interceptar las llamadas
a través del uso de módulo de seguridad
Linux (LSM), por ejemplo con la
implementación SELinux.
 Security-Enhanced Linux (SELinux) es un
mecanismo de seguridad de control de acceso
obligatorio (MAC) proporcionado por el núcleo.
 Verificar la compatibilidad con el Kernel.
Controles de acceso obligatorios
Minimizar cambio y sobre carga del
Kernel
Módulos de Seguridad
LSM - Linux Security Module
 LSM flexibiliza la aplicación de diferentes módulos.
Las implementaciones actuales de LSM son:
 SELinux: http://selinuxproject.org/page/Main_Page
 AppArmor: http://wiki.apparmor.net/index.php/Main_Page
 Smack: http://schaufler-ca.com/
 TOMOYO: http://tomoyo.osdn.jp/
 Solo un LSM puede ser usado a la vez.

apt install selinux-basics selinux-policy-default


SELinux (Security-Enhanced Linux)
 Fue desarrollado originalmente por NSA (National Security Administration) y ha
sido parte integral de RHEL por mucho tiempo.
 Operacionalmente, SELinux es un conjunto de reglas que se usan para determinar
qué procesos (sujetos) pueden acceder a cuáles archivos (objetos), puertos y otros
ítems en el sistema.
Se integró en los módulos de seguridad
Linux (LSM) desde de la versión 2.6.0 del
kernel Linux publicado en 2003
SELinux (Security-Enhanced Linux)

 Funciona bajo estos 3 conceptos:


1. Contextos: Son etiquetas a archivos,
procesos y puertos (Ex. Para usuario: rol y
tipo).
2. Reglas: Describe el control de acceso en
términos de contexto, archivos, puertos,
usuarios, etc.
3. Políticas: Son un conjunto de reglas que
describen las decisiones de control de acceso
aplicables a todo el sistema. (deny any)
SELinux
 Un contexto de SELinux es un
nombre usado por una regla para
definir cómo los usuarios, procesos y
puertos interactúan entre ellos. Como
la política por defecto es denegar
cualquier acceso, las reglas se usan
para describir las acciones
permitidas en el sistema.
SELinux puede confinar a los usuarios de Linux.

Por ejemplo, la asignación de un usuario de Linux SELinux user_u usuario, da como resultado un usuario de
Linux que no es capaz de ejecutar (menos que se configure de otra manera) la identificación de usuario
(setuid), como sudo y su, así como para prevenir que se ejecuten archivos y aplicaciones en su directorio
personal.
SELinux
 Las reglas definidas en la política SELinux es cacheada por el
kernel del sistema en vectores AVC (Access Vector Cache)
que contienen los permisos de cada objeto y sujeto bajo
control.

Proceso de decisión SELinux (Red Hat. Selinux Users and Administrators Guide)
SELinux

Control de acceso clasico Linux (DAC)

Control de Acceso MAC. SELinux. Confinamientos en contextos


Modos SELinux
 SELinux puede correr en unos de los tres modos siguientes:
 Enforcing: Todo el código SELinux está operativo y el acceso esta
denegado de acuerdo a la política. Todas las violaciones a la misma son
auditadas y registradas (deny any).
 Permissive: Habilita el código SELinux pero solo audita y advierte de
las operaciones que serían denegadas en modo enforcing. Se permiten
accesos no autorizados (/var/log/messages; /var/log/audit/audit.log).
 Disabled: Deshabilita el código para aplicaciones y kernel de SELinux y
deja el sistema sin ninguna de estas protecciones (permit any).
 Estos modos eligen en el archivo de configuración
 /etc/selinux/config
 /etc/sysconfig/selinux
Modos SELinux
 La herramienta sestatus despliega el modo y política actual.
Modos SELinux
 Para examinar o configurar el modo actual se puede usar
getenforce y setenforce. Este comando permite cambiar
en vivo entre los modos: “Permissive” y “Enforcing”, pero
no “Disabled”.

system-config-selinux
Modos SELinux
 Comando setstatus
Modos SELinux
 Cambiando de modos:
Modos SELinux
 Hay al menos dos formas diferentes de deshabilitar SELinux:
 Archivos de configuración (modo por defecto):
 Editar /etc/selinux/config y configurar SELINUX=disabled
 Parámetros de kernel:
 Agregue selinux=0 a la lista de parámetros del kernel cuando reinicie.
 Nota: No se recomienda deshabilitar SELinux en sistemas en
los cuales va a ser habilitado nuevamente, mejor usar el modo
Permissive, para evitar que el sistema de archivos sea
reetiquetado completamente, y consumir bastante tiempo.
Modos SELinux
Contextos SELinux
 Los contextos son etiquetas que se aplican a archivos, directorios, puertos y
procesos.
 Estas etiquetas se usan para describir reglas de acceso. Existen 4 contextos
de SELinux:
 User
 Role
 Type
 Level
 Type es el contexto más utilizado comúnmente. La convención de nombres de
etiquetas determina que las etiquetas de contexto type deben terminar con _t,
como el kernet_t
Contextos SELinux
 Las etiquetas SELinux siguen el siguiente formato:
 user:role:type:level(sensibilidad:categoría)
 La etiqueta user identifica el usuario selinux, un concepto diferente el usuario
Linux.
 La etiqueta role, es la parte del modelo basado en roles (RBAC) utilizada
también por SELinux.
 La etiqueta type, define el tipo de restricción. En caso de un proceso se
denomina dominio y en el caso de un fichero se denomina tipo. Las reglas de
la política SELinux determinan como pueden acceder tipos entre sí, dominios
con tipos , o accesos entre dominios
Políticas SELinux
 En el mismo archivo de configuración generalmente se configuran las
políticas SELinux.
 Se permite múltiples políticas, pero solo una puede estar activada a la
vez. Cambiar la política puede requerir reiniciar el sistema y
reetiquetado del sistema de archivos, lo cual es lento. Cada política
tiene archivos que deben ser instalados bajo
/etc/selinux/[SELINUXTYPE].

La acción predeterminada es denegar. Si no existe una regla de política de SELinux


para permitir el acceso, como por ejemplo para un proceso de apertura de un
archivo, se deniega el acceso.
Políticas SELinux
 Las políticas más comunes son:
 targeted: La políticas por defecto en la cual SELinux es más restringida a procesos
específicos (httpd, bind, syslog, etc.). Los procesos de usuario e init no están dentro de
los objetivos. SELinux impone restricciones de memoria para todos los procesos, lo
cual reduce la vulnerabilidad ante ataques de desbordamiento de búfer (buffer overflow).
 minimum: Una modificación de la política targeted en donde solo los procesos
seleccionados están protegidos.
 MLS: La política de seguridad de múltiples niveles es mucho más restrictiva; todos los
procesos se ponen en dominios de seguridad específicos con políticas particulares.
Políticas SELinux
Diagnostico SELinux
 Muchos comandos estándar de la línea de comandos,
como ls y ps, fueron extendidos para soportar
SELinux y las secciones correspondientes fueron
agregadas a las páginas man (También se Z
extendieron cp, mv y mkdir ). El parámetro usado es
Z. Se mostrara información relevante si esta habilitado
SELinux.
user:role:type:level
Diagnostico SELinux
Diagnostico SELinux
Diagnostico SELinux
 Contextos asociados a los ficheros y directorios:
Diagnostico SELinux
 Información del login:

 Podemos conocer
nuestro contexto actual:
Diagnostico SELinux
 Herencia y preservación del contexto:
Diagnostico SELinux

 El ejemplo clásico en el cual se crea un problema en SELinux al


mover archivos es cuando son movidos al directorio
DocumentRoot del servidor httpd.
 En sistemas que tienen habilitado SELinux el servidor web solo
puede acceder a archivos con las etiquetas de contexto
adecuadas. Si se crea un archivo en /tmp y luego se mueve al
directorio DocumentRoot, estará inaccesible para el servidor
httpd hasta que el contexto SELinux del archivo se modifique.
Diagnostico SELinux
restorecon
 Esta herramienta estable los contextos de un archivo, basado en
la configuración de su directorio padre.

Restablece la etiqueta por


defecto recursivamente para
todos los archivos en el
directorio home.
Diagnostico SELinux
semanage fcontext
 Otro problema es cómo configurar el contexto por defecto para un
nuevo directorio. La herramienta semanage fcontext (proveída
por el paquete policycoreutils-python) despliega y cambia el
contexto por defecto de archivos y directorios.
 Tenga en cuenta que semanage fcontext cambia la configuración
por defecto solamente y no se aplica a objetos existentes. Esto
requiere ejecutar restorecon luego.
Diagnostico SELinux
semanage fcontext
Diagnostico SELinux
semanage

Los permisos del


usuario selinux
aplican según el
contexto en el que el
usuario esté
confinado con su
etiquetado.
Booleanos de SELinux
semanage
 El comportamiento de la política de SELinux puede ser
configurada en tiempo de ejecución sin necesidad de reescribir la
política. Esto se consigue configurando los Booleanos de
SELinux, los cuales son parámetros de políticas que pueden ser
habilitados o deshabiltiados.
 Para listar todos los booleanos de la política actual:
 sudo semanage boolean -l
Booleanos de SELinux
semanage
Booleanos de SELinux
getsebool y setsebool
 Una alternativa para desplegar la información booleana que
produce una salida más simple, es getsebool –a, la cual imprime
solo el nombre booleano y su estado actual.
 setsebool se usa para cambiar el estado booleano. El
comportamiento por defecto es aplicar los cambios
inmediatamente y no son persistentes luego del reinicio. Sin
embargo, el parámetro –P puede ser proveído para hacer que los
cambios sean persistentes.
Booleanos de SELinux
getsebool y setsebool
Ejemplo del cambio no persistente usando setsebol:

Ejemplo del cambio persistente con setsebool –P:


Booleanos de SELinux
getsebool y setsebool
En el siguiente ejemplo podemos ver como cambiar el
booleano allow_ftpd_anon_write al valor "on" lo que
concede permiso de escritura ftp al usuario anónimo.
Conclusiones

 No depende de un solo factor. (Pensar en profundidad)


 Es responsabilidad de todos.
 Se requieren definir formalmente políticas de seguridad.
 Capacitación constante.
 Pensar como hacker y defenderse como ninja.
 Todo lo que es por defecto genera un nivel de riesgo.
 Conocer la parte normativa, la estandarización y legal.
Recomendaciones
Certificaciones recomendadas: Linux Professional Institute
(LPI.org) LPIC-1 101 , CompTIA Linux+TM Powered by LPI LX0-
103
Linux Security LFS416, ESR, CCNA Security
Recursos de SELinux

 Se puede aplicar ítems avanzados, se recomienda consultar los


siguientes enlaces:
 RHL 7 SELinux Guía para administradores y usuarios
 https://access.redhat.com/documentation/en-
US/Red_Hat_Enterprise_Linux/7/html/SELinux_Users_and_Administrators_Guide/
 RHL 6 Security-Enhanced Linux
 https://access.redhat.com/documentation/en-
US/Red_Hat_Enterprise_Linux/6/html/Security-Enhanced_Linux/
Ing. Marco Antonio. Arenas Porcel
Email:[email protected]
:[email protected]

Muchas Gracias por su atención

45
Anexos: Tips

46
Tips
 Seguridad física
 Configurar el BIOS para desactivar el arranque desde CD / DVD, dispositivos
externos, etc. A continuación, habilite la contraseña del BIOS y también en su
gestor de arranque (GRUB).
 [root@uasb ~]# grub-md5-crypt
 [root@uasb ~]# grub-mkpasswd-pbkdf2

 Particiones del Disco


 Es importante tener diferentes particiones para obtener una mayor seguridad
de los datos en caso de que si ocurre cualquier desastre (/, /boot, /usr, /var,
/home, /tmp, /opt)
Tips

 Minimizar los paquetes para minimizar la vulnerabilidad.


 $ apt-cache pkgnames
 $ apt-cache show netcat
 chkconfig --list
 Compruebe los puertos de red que están en escucha.
 # netstat -tulpn
Tips
 Comprobar la caducidad de las contraseñas.
 /etc/shadow; comando chage
 Es crítico prestar atención a las actualizaciones de su
distribución Linux. Los ataques de día cero son mucho
más raros; en este caso un atacante usa un agujero de
seguridad que no ha sido descubierto o para el cual no
sea liberado un parche.
Tips

 Lockdown Cronjobs
 /etc/cron.allow
 /etc/cron.deny
 Se puede deshabilitar todo:
 Usar Secure Shell(SSH)
 En lo posible no iniciar una sesión como root
 También es recomendable cambiar el puerto por
defecto =22
Tips
 Supervisar las actividades del usuario.
 Hay dos herramientas útiles llamados 'psacct' y 'acct '
Tips

 Supervisar las actividades del usuario.


Tips
 Revisión regular de los registros:
 Tener una copia en un servidor dedicado
 /var/log/message – System logs or current activity logs are
available.
 /var/log/auth.log – Authentication logs.
 /var/log/kern.log – Kernel logs.
 /var/log/cron.log – Crond logs (cron job).
 /var/log/maillog – Mail server logs.
 /var/log/boot.log – System boot log.
 /var/log/secure –Log de autenticación.
 /var/log/utmp or /var/log/wtmp : Registros de logueo
Los comandos lastb y last se pueden utilizar para ver los contenidos de archivos binarios seguros
Tips

 Mantener como de sólo lectura el /boot


Tips

 Ignorar peticiosnes ICMP o Broadcast


 /etc/sysctl.conf
Tips

 Cambiar el hostname
Admin cuentas de
usuarios
 El archivo /etc/login.defs
también contiene los
valores que se aplicarán
por defecto a los nuevos
usuarios que se crean con
el comando useradd
Admin cuentas de
usuarios
 Planificar la creación de las
cuentas de usuarios. Tome en
cuenta lo que es por defecto.
 La opción -D del comando
useradd le permitirá visualizar o
cambiar algunos de los valores
por defecto.
useradd –f
useradd –e
useradd -s
useradd -k
Admin cuentas de
usuarios
 Planificar la creación de las cuentas de
usuarios.
 El comando passwd (-l bloqueo y –u
desbloqueo)
 O el bloqueo se realiza mediante la
sustitución de contraseña cifrada con una
cadena (!).
 Otros comandos:
 usermod –L “username” (-U para desbloquear)
 chage –E 2015-09-11 “username”
Caducidad de la
contraseña
Nota: Para las cuentas altamente
 En el archivo '/etc/shadow sensibles, se recomienda cambiar las
contraseñas con mayor frecuencia, por
ejemplo, cada 30 días. Por otro lado, para
las cuentas que no son críticas sin ningún
acceso a información sensible, hay menos
necesidad de cambios frecuentes. Para las
cuentas con un riesgo mínimo, que tiene
una duración de 90 días se considera más
razonable.

last change, es el número de


días desde el 1 de enero del
1970 (tiempo UNIX o epoch)
del cambio de la contraseña

name:password:last change:min:max:warn:inactive:expire:reserved
Por ejemplo, un mín: máx de 5:60 significa que el usuario debe cambiar su contraseña cada 60 días y, después de cambiarlo, el usuario debe esperar 5 días antes de que
puedan cambiar su contraseña de nuevo (Nunca = 99999 días es de aproximadamente 274 años).
Admin cuentas de
usuarios
 Para comprobar la caducidad de las
contraseñas de los usuarios, es necesario
utilizar el comando “chage".

Parámetros:
1. -E fecha de expiración
2. -d LAST_DAY
3. -I INACTIVE
4. -M Establece el número máximo de días
5. -m Establece el número mínimo de días
6. -W Ajusta el número de días de advertencia
Admin cuentas de
usuarios
 Cuidado con las contraseñas débiles y blandas.
Su contraseña podría ser hackeado con un
ataque basado en diccionario o fuerza bruta.
 El módulo 'pam_cracklib' está disponible en PAM
(Pluggable Authentication Modules) pila de
módulos que obligará al usuario para establecer
contraseñas seguras. Edite el siguiente archivo.

Y añadir la línea de crédito utilizando parámetros como (lcredit, ucredit, lcredit y/o
ocredit, respectivamente, lower-case, upper-case, digit y otros)
substitute user do
 Minimizar los riesgos.
/etc/sudoers
 Usar el comando sudo.
Esta es la entrada por defecto …

... podría entenderse como, "el usuario root puede actuar


en todas las máquinas ya que todos los usuarios ejecutan
todos los comandos." Para permitir a un usuario como
“sysadmin" ejecutar todos los comandos como todos los
usuarios utilizando el comando sudo, una entrada como la
siguiente podría añadirse:
Módulo de Seguridad
AppArmor
 Es una alternativa LSM a SELinux.
 Es incorporado en el kernel de Linux desde 2006.
 Ha sido usado por SUSE, Ubuntu y otras distribuciones.
 Implementa el modelo MAC, complementando el DAC de
UNIX.
 Esta basado en perfiles de seguridad asociado a un
programa, incluye un modo de aprendizaje.
 Es neutral al sistema de archivos (no requiere etiquetas).
 Consideran más fácil de usar que SELinux (pero no todos).
 Lo mantiene Novell.
Módulo de Seguridad
AppArmor
 Ver el estado actual de AppArmor,
use el comando apparmor_status.
 Los perfiles se encuentran en el
directorio: /etc/apparmor.d

Tiene dos modos: enforce y complain Los perfiles /sbin/dhclient, /usr/sbin/, y /usr/sbin/tcpdump estan
en modo enforce (esto es por defecto en Ubuntu).
Módulo de Seguridad
AppArmor
 Cambiar de modo

 Para deshabilitarlo se requiere crear un


enlace simbólico:
Módulo de Seguridad
AppArmor
 Documentación oficial:
 http://wiki.apparmor.net/index.php/Main_Page
 https://help.ubuntu.com/community/AppArmor
 https://debian-handbook.info/browse/es-ES/stable/sect.apparmor.html
 https://wiki.debian.org/AppArmor/
 https://es.opensuse.org/AppArmor
 https://wiki.archlinux.org/index.php/AppArmor

También podría gustarte