Protege tu sistema con GRSecurity

Publicado: julio 11, 2014 en Seguridad, Server, System
Etiquetas:, , ,

grsecEn Mejora la respuesta de tu desktop con linux-ck, os hablé sobre el linux-ck, el kernel con unos parches, que permiten mejorar la respuesta del sistema. Sin embargo, si estamos hablando de servidores, o estamos preocupados por la seguridad del sistema, ese conjunto de parches o el kernel por defecto, no será suficiente.

El kernel por defecto viene compilado para poder utilizar SELinux o AppArmor. Para poder utilizarlos, deberemos recurrir al AUR o a repositorios no oficiales, pues, el primero necesita que ciertas partes del sistema estén parcheadas y, el segundo, unas utilidades específicas.Algo que sí está soportado desde hace poco tiempo, es grsecurity. Un conjunto de parches y utilidades, que nos van a proporcionar una funcionalidad similar a SELinux y AppArmor, además de una protección adicional, mediante PaX, que permite añadir una protección a la memoria, de manera que podamos proteger el equipo de exploits que utilizan desbordamientos de la misma.

Lo primero que vamos a hacer es instalar el kernel parcheado y generar las entradas para el Grub. No se eliminan el resto de kernels, así que no hay por qué preocuparse:

sudo pacman -S linux-grsec
sudo grub-mkinstall -o /boot/grub/grub.cfg

Las opciones de grsecurity se activan mediante sysctl y están disponibles en /etc/sysctl.d/05-grsecurity.conf. Podemos ajustar, según sea nuestra necesidad. Encontraremos opciones que van desde restringir nuevos USBs, hasta restricciones para chroot, bloquear las restricciones en sysctl para impedir modificaciones en valores de grsec, etc.

Para el caso de servidores, es muy interesante el RBAC (Role Based Access Control). Podemos crear diferentes roles para las aplicaciones, de manera que podamos controlar mejor qué pueden hacer, disminuyendo el alcance en caso de una intrusión.

Esto está desactivado por defecto y guarda alguna similitud con SELinux y AppArmor. Para habilitarlo y ver cómo crear los roles, os recomiendo echar un ojo aquí y a la documentación del proyecto. Necesitamos instalar el siguiente paquete:

sudo pacman -Syu gradm

La protección PaX está desactivada por defecto. Esto es porque no todos los binarios soportan bien todas las opciones de protección y hay que añadir excepciones para desactivar alguna. Para poder testear y revisar el estado de los binarios, instalaremos:

 pacman -Syu checksec pax-utils paxtest

Os dejo una captura, a la izquierda, un test realizado con paxtest con PaX desactivado, a la derecha, activado.

screenshot2014-07-11_210254_755473508

Hay varios métodos para controlar las excepciones que necesitemos desactivar en los binarios. El más cómodo es utilizar  paxd, un daemon que también se encuentra en community.

sudo pacman -Syu paxd

Este paquete consta de un servicio estático (está habilitado por defecto) y, en el archivo /etc/paxd.conf, se añaden las excepciones necesarias. Si lo editamos, vemos que es muy fácil deshabilitar las excepciones.

Tanto en las opciones de grsecurity, como en la configuración de paxd, se está trabajando para conseguir un equilibrio entre seguridad, funcionalidad y estabilidad, de manera que, con la paquetería soportada, no necesitemos tocar nada (instalar y a correr 😉 ).

En cualquier caso, si al instalar paxd algún binario deja de funcionar, podemos chequear si ha sido por una restricción, ejecutando:

sudo dmesg | grep nombre_binario

Por ejemplo, elinks necesita la excepción mprotect. Al ejecutarlo sin añadirla, obtendremos una “Violación de segmento”. Si ejecutamos el comando anterior, nos devolverá algo siminar a:

[ 2906.767704] grsec: denied RWX mmap of <anonymous mapping> by
/usr/bin/elinks[elinks:3800]uid/euid:1000/1000 gid/egid:1000/1000,
parent /usr/bin/bash[bash:2213] uid/euid:1000/1000 gid/egid:1000/1000

Una vez localizado el problema, editados /etc/paxd.conf y desactivamos la opción correspondiente:

 m /usr/bin/elinks

En realidad, elinks necesita añadir las excepciones emr, pero ya lo están en el fichero configuración.

Volvemos a lanzar el comando y, si todo va bien, sería interesante avisar al desarrollador en github, enviando los datos, para que pueda comprobarlo y corregirlo.

En el caso de Firefox, en algunos sistemas x86_64, crashea si no está añadida la excepción p. Es un caso curioso porque, si lo ejecutamos en safe-mode, no ocurre. Además, no es en todos los sistemas. Si, al activar PaX, Firefox crashea al poco de iniciarlo, bastará editar el /etc/paxd.conf y añadir la excepción, quedando la línea correspondiente así:

pem /usr/lib/firefox/firefox

En cualquier caso, os animo a que lo utilicéis, sobre todo, por la seguridad adicional que nos aporta.

¡Espero que os sea útil!

Anuncios
comentarios
  1. Francisco dice:

    Excelente dato, nunca está demás una poco de seguridad extra y menos en los servidores..
    saludos desde chile.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s