[ << ]
[ < ]
[ Inicio ]
[ > ]
[ >> ]
1. Mejorando la seguridad en Linux
Contenido:
1.a. Introducción
Una bienvenida amigable
Bienvenido al manual de SELinux para Gentoo. Con este recurso
queremos presentarle rápidamente la implementación de SELinux y
las directrices implicadas. Parte de esta presentación consiste
en ayudarle a comprender porqué se creó SELinux y qué conceptos se
esconden detrás de los parches de SELinux. Cubriremos los conceptos
más importantes de SELinux, las directrices de referencia que utiliza
Gentoo Hardened y desarrollaremos el trabajo con algunas herramientas
de SELinux.
El propósito de este libro no es explicar en detalle el funcionamiento
del propio SELinux. Existen muchas referencias disponibles en Internet
y en muchos libros que le ayudarán con SELinux. En lugar de esto, nos
centraremos en la integración de SELinux en Gentoo Hardened. Desde
luego, le ofreceremos una rápida introducción a SELinux para que
pueda comprender cómo trabaja, lo que es, y le ayudaremos a identificar
las acciones que necesita realizar para asegurar su sistema usando
las herramientas de SELinux.
1.b. Asegurando Linux
Seguridad en general
La seguridad se ve a menudo como un concepto vago. ¿Qué es la seguridad
en general? ¿Cómo se mide? ¿Qué beneficio se obtiene y cómo asegurarse
de no poner demasiado esfuerzo en asegurar su sistema?
Bien, los fanáticos de la seguridad le contarán que no existe otra
cosa salvo el exceso de seguridad. Si se implementa de forma correcta,
la seguridad no restrige la funcionalidad o el rendimiento. No le da
demasiado trabajo para realizar sus tareas. Pero implementar la
seguridad de forma apropiada es una tarea diferente y que conlleva
mucho tiempo. Esta es la razón por la que en muchas ocasiones se
escucha que la seguridad es tan buena como su administrador.
Entonces, ¿Cómo puedo velar por la seguridad?. Una buena práctica
consiste en definir sus metas en lo que a seguridad se refiere. Haga
una lista de que lo que quiere conseguir y porqué lo quiere hacer.
Haciendo un seguimiento de las amenazas que quiere minimizar, podrá
construir un modelo de seguridad que es el adecuado para su entorno.
Estas amenazas pueden ser muy pretenciosas, como por ejemplo
"Asegurarse de que nadie pueda violar nuestras medidas de seguridad".
En el caso de un sistema Linux funcionando con SELinux, esto podría
significar que desea que nadie o nada, salvo los procesos de confianza,
puedan escribir en ficheros críticos del sistema, como por ejemplo,
la(s) imagen(es) del núcleo, configuración del gestor de arranque,
las contraseñas y el propio binario de SELinux con las directrices.
Control de acceso
Un control de acceso decente de un sistema (o grupo de sistemas),
asegura que únicamente se permite acceso a las personas o procesos
autorizados a los recursos con los que quieren trabajar.
Antes de que pueda implementar un control de acceso al sistema,
necesitará obtener la autorización adecuada. Si sus esquemas de
autenticación fallan, su sistema de control de acceso al sistema
podría no diferenciar a los usuarios legítimos de los maliciosos.
La autenticación de los usuarios en los sistemas Linux se realiza
a través de PAM (Módulos de Autenticación Enchufables), un
potente mecanismo para integrar esquemas múltiples de autenticación
de bajo nivel en una interfaz de alto nivel.
Sin embargo, la autorización para el uso de los recursos, se realiza
a veces a través de un esquema simple de permisos. La mayoría de los
recursos no están ocultos por defecto, aunque existen parches y
actualizaciones (tales como las ofrecidas por las fuentes del núcleo
Gentoo Hardened con parches grSecurity que incluyen soporte para este
tipo de medidas). Puede ocultar la existencia de archivos en todo
el sistema de ficheros asegurándose de que el directorio en el que
residen no es legible ni "ejecutable" por cuentas no autorizadas.
Este esquema de permisos por defecto tiene algunos inconvenientes
importantes. No le permite definir autorizaciones flexibles (únicamente
permite autorizaciones a tres niveles: propietario, grupo propietario
y cualquier otra cuenta) y además está limitada a los permisos
lectura/escritura/ejecución (aunque algunos atributos adicionales
están disponibles hoy en día).
Otro problema es que el esquema de permisos es discrecional, lo
que significa que los usuarios y procesos pueden cambiar las directrices
de seguridad.
Este esquema de permisos es suficiente Para la mayoría de usuarios y ha
demostrado ofrecer un método adecuado para gestionar las autorizaciones
de acceso. Si embargo, los inconvenientes que presenta han resultado
ser un agujero importante en lo que Linux ofrece.
1.c. Control de acceso obligatorio
Entre en SELinux
Si el control de acceso discrecional, abreviado DAC, mencionado
arriba no es suficiente (y si es riguroso con la seguridad, no lo
encontrará suficiente), entonces necesitará un sistema Control de Acceso
Obligatorio o MAC.
Cuando se usa un sistema MAC, se necesita permitir explícitamente las
actividades que un proceso quiere realizar en un recurso. Esto ofrece
mayor granularidad con los permisos y los recursos. A menudo
ofrecen no sólo soporte para ficheros, sino también para zócalos
(sockets), puertos, segmentos de memoria, colas, procesos, servicios
del núcleo, llamadas al sistema, dispositivos, sistemas de ficheros y
mucho más. La granularidad de las actividades soportadas es también
muy grande. Para los ficheros, esto incluye: añadir, crear, ejecutar,
escribir, enlazar, llamadas ioctl, obtener atributos (getattr), dar
valor a atributos (setattr), lectura, renombrado, bloqueo,... mientras
que para los zócalos (sockets) estos pueden ser: añadir, asociar (bind),
conectar, crear, escribir, enviar a, aceptar,... También, cuando se
utiliza un sistema MAC, ningún usuario ni proceso puede manipular las
directrices de seguridad por sí mismo: lo que el administrador ha
concedido no puede ser revocado.
Aquí es donde SELinux entra en juego. SELinux es una característica del
núcleo Linux que implementa, entre otras cosas, un sistema MAC para
controlar y gobernar el acceso a varios recursos. Usa un esquema de
permisos de denegación por defecto, de forma que se necesita conceder
explícitamente el acceso que ha solicitado un proceso.
SELinux permite igualmente un modelo de permisos más fino encima
del sistema tradicional DAC (el cual se usa también mientras SELinux
está en funcionamiento; en otras palabras: si el sistema tradicional
no permite ciertas actividades, éstas no serán permitidas incluso si
las directrices de SELinux permiten la acción).
¿Qué es SELinux?
Para dar soporte a este modelo fino de permisos, es lógico pensar que
se deben realizar cambios al núcleo Linux. Sí, gracias a la interfaz
del núcleo Linux LSM (Módulos de Seguridad de Linux), el
soporte para SELinux se añadió de forma muy sencilla desde el comienzo
de las series 2.6 del núcleo. SELinux se ha integrado en el árbol
principal del núcleo. Sin embargo, el soporte de SELinux y su utilización
son dos cosas muy diferentes.
Para identificar adecuadamente los recursos, SELinux necesita asignar
etiquetas a estos recursos. Cuando los recursos están en memoria, se
realiza principalmente en el núcleo Linux, sin embargo, para recursos
persistentes como ficheros, estas etiquetas deben localizarse en algún
lugar. En SELinux, se ha elegido usar atributos extendidos del fichero
(que son almacenados en el propio sistema de ficheros). La ventaja de
este enfoque es que la etiqueta permanece junto al fichero incluso si
éste cambia de nombre. Por el contrario, una desventaja de este enfoque
es que el sistema de ficheros debe soportar estos
atributos extendidos, los cuales no todos los sistemas de
ficheros poseen (o tienen activados).
SELinux también utiliza roles para gestionar el acceso a los recursos.
A un usuario que no tiene el rol de acceso a la administración del
sistema no se le debe permitir ejecutar cualquier actividad de
administración del sistema incluso si es capaz de escalar sus privilegios
(por ejemplo usando una aplicación con la capacidad set-uid). Para el
soporte de roles, SELinux requiere cambios en los servicios de
autenticación (PAM) y necesita almacenar en algún lugar las definiciones
de los roles y las autorizaciones.
Aparte del soporte en el núcleo y las etiquetas asignadas a los recursos
en el sistema de autorización, SELinux requiere también herramientas
específicas para consultar y manipular las etiquetas, gestión de
privilegios (por ejemplo la herramienta sudo), servicios del
sistema (como SysVInit) etc. Esto se traduce en un conjunto de parches que
se aplican a estas herramientas (y más) los cuales no son siempre parte
del código fuente principal de la aplicación.
Gentoo Hardened y SELinux
Gentoo Hardened ofrece SELinux integrado en la distribución. Cuando se
selecciona soporte para SELinux, Gentoo Hardened aplicará los parches
necesarios a las aplicaciones y le ayudará a (re)etiquetar sus ficheros y
otros recursos para que puedan ser gestionados por SELinux. Gentoo Hardened
también integra soporte SELinux en Portage, permitiendo que los nuevos
ficheros que se instalen sean etiquetados automáticamente y que se utilice
un entorno inofensivo (sandbox) para la construcción segura de los
paquetes.
Aparte del soporte tecnológico puro, esperamos que encuentre los documentos
de soporte, guías, experiencia y soporte en línea necesarios para usar
SELinux en Gentoo. No dude en entrar y decir ¡hola! en el canal de chat
#gentoo-hardened de la red IRC en Freenode o en nuestra lista de
correo.
Si piensa que SELinux es apropiado para sus pretensiones y quiere
probarlo usando Gentoo Hardened, por favor, continúe leyendo. En el
próximo capítulo le informaremos de como se ha "diseñado" la seguridad
en SELinux y cómo está estructurada conceptualmente. En capítulos
posteriores le ayudaremos con el lenguaje de autorización y las
directrices "base" con las que la mayoría de las distribuciones
comienzan y finalmente le ayudaremos a instalar, ejecutar y gestionar
un sistema SELinux con Gentoo Hardened.
[ << ]
[ < ]
[ Inicio ]
[ > ]
[ >> ]
El contenido de este documento, a no ser que se especifique
expresamente, está registrado bajo los términos de la licencia
CC-BY-SA-2.5. Se aplican las
Pautas de
Utilización del logotipo y nombre de Gentoo.
|