1. ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA
UNIDAD PROFESIONAL CULHUACAN
SECCION DE ESTUDIOS DE POSTGRADO E INVESTIGACION
SEGURIDAD EN SISTEMAS OPERATIVOS
MAESTRO MOISES SALINAS ROSALES
DANIEL CRUZ CHAVEZ
MANEJO DE ROLES EN LINUX
IMPLEMENTACION DE LA HERRAMIENTA “GRSECURITY”
AGOSTO 2008
2. GRSECURITY
El proyecto “grsecurity” ofrece varios parches al núcleo de Linux que mejoran la seguridad
global del sistema, entre sus principales características destacan:
• Protección del espacio de direcciones, a través de la herramienta PAX se previene el
abuso de los desbordamientos de buffer, además de proveer aleatoriedad a la
administración de procesos en memoria.
• Protección del sistema de archivos, sobre este aspecto existen restricciones en el
/proc, que hacen que un usuario pueda ver únicamente sus procesos, además
protecciones de ejecución en /tmp.
• Registro de actividad en el “kernel”, configuración de varias opciones de auditoria.
• Protección de ejecutables con la configuración de opciones que intervienen en la
creación de procesos y a que binarios del sistema se puede acceder.
• Protecciones de red con restricciones sobre que tipos de “sockets” podrán utilizar los
usuarios y opciones de configuración relacionadas con la selección aleatoria de la pila
TCP/IP.
• Opciones de registros de eventos que permiten especificar el tiempo entre mensajes
de notificación y el número máximo de estos mensajes.
• Opciones de control de acceso basado en roles RBAC.
INSTALACION
El proceso de instalación se realizó sobre una versión de Linux con las siguientes
características:
• Distribución Ubuntu 8.04 Desktop i386
• Kernel 2.6.24
En general, el proceso consiste en obtener los fuentes del kernel, obtener los parches de
“grsecurity”, aplicar los parches al Kernel, recompilarlo e instalarlo.
3. Para compilar el kernel se necesitan instalar los siguientes paquetes:
• apt-get install build-essential bin86 kernel-package
• apt-get install libqt3-headers libqt3-mt-dev
Cambiamos de directorio
• cd /usr/src
Bajamos los fuentes del kernel y los fuentes de “grsecurity“
• wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2
• wget http://www.grsecurity.net/grsecurity-2.1.11-2.6.24.5-200804211829.patch.gz
Para el kernel 2.6.24 es necesario bajar la versión mas reciente de “grsecurity” que señala
claramente en su nombre de archivo la versión del “kernel” a parchar.
Se descomprimen los archivos
• tar –xjvf linux-2.6.24.tar.bz2
• gunzip grsecurity-2.1.11-2.6.24.5-200804211829.patch.gz
Cambiamos de nombre al directorio donde se descomprimieron los fuentes y hacemos una
liga con un nombre mas corto
• mv linux-2.6.24 linux-2.6.24-grsec
• ln -s linux-2.6.24-grsec linux
Cambiamos al directorio de los fuentes y copiamos a este directorio, el parche
descompactado de “grsecurity”.
• cd linux
• cp /usr/src/grsecurity-2.1.11-2.6.24.5-200804211829.patch .
4. Aplicamos el parche
• cat grsecurity-2.1.11-2.6.24.5-200804211829.patch | patch –Np1
Con lo anterior ya tenemos listos los fuentes para configurar y compilar
Copiamos el archivo de configuración inicial que tenemos actualmente
• cp /boot/config-2.6.24-19-generic .config
Configuramos lo que será el nuevo kernel
• make xconfig
Aparece la siguiente ventana de configuración
5. De la pantalla anterior, seleccionamos las opciones de “grsecurity” requeridas y salvamos el
archivo con el botón de guardar.
Ubicados en el directorio /usr/src/linux construimos el paquete .deb
• make-kpkg clean
• make-kpkg -initrd --revision=ck2 kernel_image
Si no hubo errores se genero el paquete /usr/src/linux-image-2.6.24-grsec_ck2_i386.deb
Para instalarlo
• dpkg -i linux-image-2.6.24-grsec_ck2_i386.deb
Por ultimo descargamos de un mirror de Ubuntu el paquete “gradm2_2.1.11-1_i386.deb” y lo
instalamos con “dpkg”.
Reiniciamos el sistema operativo
6. CONTROL DE ACCESO BASADO EN ROLES (RBAC)
Existen dos tipos de mecanismos de control de acceso usados para prevenir el acceso no
autorizado a archivos o información en general: DAC (control de acceso discrecional) y MAC
(control de acceso obligatorio). Linux usa por defecto el mecanismo DAC, en el cual el
creador del archivo puede definir quien tiene acceso a este.
En DAC un usuario tiene un completo control sobre los objetos que le pertenecen y los
programas que ejecuta. Así mismo, el programa ejecutado por un usuario tendrá los mismos
permisos de ese usuario que lo esta ejecutando.
Lo anterior implica que la seguridad del sistema depende de las aplicaciones que se están
ejecutando y por lo tanto, cuando se produce una vulnerabilidad de seguridad en una
aplicación, ésta afecta a todos los objetos a los que el usuario tiene acceso. Así, si la
aplicación es ejecutada por “root”, el atacante puede obtener los máximos privilegios en el
sistema, comprometiendo la seguridad global.
Un sistema MAC fuerza a que todos sigan las reglas establecidas por el administrador. En
este modelo existe una política de seguridad definida por el administrador y que los usuarios
no pueden modificar. Esta política va más allá de establecer propietarios de archivos, define
contextos, en donde se indica cuando un objeto puede acceder a otro objeto.
La implementación MAC de “grsecurity” es llamada RBAC. Esta herramienta asocia roles a
cada usuario, cada rol define que operaciones pueden ser llevadas a cabo sobre ciertos
objetos. Dada una colección bien escrita de roles y operaciones, los usuarios estarán
restringidos a hacer solamente aquellas tareas que el administrador le dice que pueden
hacer.
7. TRABAJANDO CON RBAC
“gradm2” es el programa que permite administrar y mantener políticas para el sistema. Con
el se puede activar o desactivar el sistema RBAC, cambiar su rol y configurar una
contraseña para el modo de administrador.
Para introducir una contraseña para el administrador:
gradm2 -P admin (ingresar contraseña del rol administrador)
hecho lo anterior podemos activar el sistema RBAC con:
gradm2 -E
La política predeterminada esta definida en “/etc/grsec2/policy” y es bastante restrictiva ya
que siendo usuario “root” no podemos ver el directorio “/etc/grsec2/”, la siguiente instrucción:
cd /etc/grsec2/
dará por resultado que no se encuentra el archivo o directorio.
O bien, una instrucción como “ifconfig” no será capaz de modificar las características de las
interfaces con el modo RBAC habilitado.
usuario “root” no puede modificar la interfaz eth0
8. Para desactivar el sistema RBAC
gradm2 -D (ingresar la contraseña definida para el administrador)
Para conocer en que estado se encuentra RBAC
gradm2 -S
LISTAS DE CONTROL DE ACCESO
El sistema de control de acceso MAC de “grsecurity” esta implementado con listas de control
de acceso ACL's, el administrador define restriciones sobre sujetos (recursos, procesos,
archivos, etc.). Para cualquier evento, el “kernel” verifica las ACL's de MAC y las definidas en
el estandar de Linux que manejan objetos.
ACL estandar de Linux (sentencia “getfacl”)
Objeto archivo “home/daniel”, objeto usuario y grupo “daniel”
9. Estructura de una ACL de “grsecurity”:
<path of subject process> <optional subject modes> {
<file object> <optional object modes>
[+|-]<capability>
<resource name> <soft limit> <hard limit>
connect {
<ip>/<netmask>:<low port>–<high port> <type> <proto>
}
bind {
<ip>/<netmask>:<low port>–<high port> <type> <proto>
}
}
ARCHIVO DE POLITICAS PREDETERMINADO “/etc/grsec2/policy”
10. Como se menciono anteriormente, la politica definida en el archivo predeterminado es
bastante restrictiva. Si RBAC esta activo ningun usuario podrá acceder al programa “dmesg”
y auditar el sistema.
“dmesg” operacion no permitida
ACTUALIZANDO LAS POLITICAS
La manera mas sencilla de actualizar las politicas para la ejecución de un determinado
programa es a través del modo de aprendizaje de “grsecurity” en lugar de hacerlo
manualmente.
Para el modo de aprendizaje, será necesario desactivar RBAC temporalmente desde la
consola utilizando:
● gradm2 -a admin
● gradm2 -D
Como ya podemos ver el directorio y los archivos de “grsecurity”, añadimos al final del
archivo “/etc/grsec2/policy” una entrada como la siguiente
subject /bin/dmesg l (L minuscula)
/
/etc/grsec2 h
-CAP_ALL
11. Lo anterior oculta el directorio raiz a el proceso “dmesg” y elimina cualquier privilegio que
pueda necesitar. La “l” junto al nombre del programa significa que se usará el modo de
aprendizaje
Activamos RBAC en modo de aprendizaje
● gradm2 -L /etc/grsec/learn_config -E
Ejecutamos el comando “dmesg”
● dmesg
Si la orden tiene exito, “grsecurity” crea las entradas correpondientes en el registro de
aprendizaje. Entonces utilizaremos “gradm2” para generar las ACL's para el programa
“dmesg”, a partir de los datos obtenidos.
Desactivamos RBAC y el modo de aprendizaje
● gradm2 -a admin
● gradm2 -L /etc/grsec2/learn_config -O /etc/grsec2/learning.dmesg
se creo el archivo “learning.dmesg” con las politicas para “dmesg”
12. Sustituimos en “/etc/grsec2/policy” la directiva de aprendizaje que inlcuimos para “dmesg”
por el contenido de “learning.dmesg” y volvemos a inicar RBAC.
Ahora para “root”, es posible ejecutar el comando “dmesg” con RBAC activo.
Por ultimo definimos dentro de nuestras politicas que también el usuario “daniel” tenga
derecho a auditar el sistema con “dmesg”.
Agregando al usuario “daniel”
Esta secuencia se puede seguir para cada programa que necesite permisos especiales para
operar.
Mientras “grsecurity” este en modo de aprendizaje debemos asegurarnos de probar todas las
operaciones que se vayan a necesitar para que se detecte que llamadas utilizan los
procesos o que archivos del sistema se requieren.
13. CONCLUSION
“Grsegurity” brinda la posibilidad de crear un sistema que proporciona a cada proceso
unicamente los permisos que necesita para hacer su trabajo: ni más, ni menos. “Grsegurity”
brinda un control muy preciso sobre todo lo que se puede hacer en un sistema.