Gentoo Logo

Usando Xorg en Gentoo Hardened

Contenido:

1.  Conceptos previos

¿Qué diferencia la ejecución de Xorg en un entorno Gentoo Hardened?

PaX, un parche del núcleo Linux, es una parte central del proyecto Gentoo Hardened. PaX proporciona diversas funcionalidades como ASLR y memoria NX. Se puede encontrar más información en http://www.gentoo.org/proj/en/hardened/docs/pax-howto.xml (en inglés). En el resto de este documento, se asumirá que el lector tiene una comprensión general de cómo funciona PaX así como el conocimiento de los Ejecutables Independientes de la Posición (PIE).

La característica específica de PaX que es de interés en este artículo es MPROTECT, la cual protege contra el código ejecutable en el espacio de direcciones de un programa. Una de las principales características de Gentoo Hardened es la habilidad de correr PaX de forma efectiva debido a la base ET_DYN/PIE. La meta eventual de Xorg es tener el propio binario construido como ET_DYN/PIE de forma que se hayan eliminado las relocalizaciones de texto y aleatorizar la base de las direcciones sin afectar al rendimiento EX_EXEC.

En este punto, parece una opción lógica compilar Xorg con código PIC. Gentoo ofrece gcc hardened para este propósito, el cula ofrece compilación transparente PIE/SSP compiling. Es en este punto donde comienzan los problemas con Xorg. Actualmente Xorg utiliza elfloader para gestionar la carga de los módulos que necesita, sin embargo, elfloader no puede resolver varios tipos de símbolos relocalizables que se generan siempre con código PIC. Aún más importante es el hecho de que elfloader has no tiene soporte para símbolos de Tabla de Desplazamiento Globales (Global Offset Table o GOT) o símbolos del tipo Tabla de Enlazado de Procedimientos (Procedure Linkage Table o PLT), los cuales son esenciales para el uso de librerías compartidas.

Entonces, si elfloader no nos sirve, ¿Qué podemos usar?. Afortunadamente hay un cargador dinámico en su sistema maduro, sobradamente probado y completamente operacional. Éste es ld-linux.so proporcionado por glibc. La idea obvia que aparece en este momento es que idealmente debería haber una interfaz programable para el cargador de glibc loader, y que se podría modificar el cargador de X para que lo utilice en lugar de usar su propio cargador. Sorprendentemente esa interfaz existe: dlopen(3) y otros. Esto es justamente lo que utiliza dlloader.

Nota: A partir de Xorg 7.0, dlloader es el cargador de módulos por defecto para X.

2.  Opciones de configuración del núcleo

CONFIG_PAX_KERNEXEC

La opción 'CONFIG_PAX_KERNEXEC' es el equivalente de PAGEEXEC y MPROTECT. Habilitando esta opción, será más difícil inyectar y ejecutar código 'extraño' en la memoria del núcleo. Esta opción puede ofrecerle algunas experiencias extrañas en una configuración hardened de Xorg (por ejemplo que el puntero del ratón se quede parado en el lado izquierdo de la pantalla). Lo recomendado, por tanto, es desactivar esta opción, deseleccionándola en su configuración.

CONFIG_GRKERNSEC_IO

Habilitando esta opción provocará que las todas la llamadas ioperm(2) e iopl(2) devuelvan un mensaje de error. Se pueden utilizar Las llamadas ioperm(2) e iopl(2) para modificar el núcleo en tiempo de ejecución. Como se quiere ejecutar el servidor Xorg encima de un núcleo hardened (en mayor medida GRsecurity), tendrá que deshabilitar esta opción de configuración para que su servidor se pueda arrancar y ejecutar.

3.  Instalación

Opciones actuales de instalación

A partir de la versión 7.0 de Xorg, se usa por defecto dlloader en lugar de elfloader, no hay necesidad de hacer nada especial para compilar y hacer funcionar a Xorg en un perfil hardened.

4.  Configuración

/etc/X11/xorg.conf

Puede configurar su Xorg configuration usando la Guía de configuración del Servidor X en: /doc/es/xorg-config.xml

5.  Problemas conocidos

Experiencias con dlloader

La estrategia para enlazar de Gentoo Hardened es resolver todos los símbolos en el momento de la carga, y esto se fuerza en todas las librerías compartidas cuando éstas son construidas. Normalmente el cargador utiliza resolución "perezosa" cuando se solicita. Por lo tanto, los símbolos se resuelven cuando son utilizados. Lamentablemente algunos módulos de Xorg tienen dependencias mutuas y otros problemas que provocan que no se puedan cargar a menos que se habilite la resolución perezosa de símbolos. Para solventar este problema, actualmente Gentoo compila los módulos Xorg y el propio servidor con el ajuste -nonow de gcc. Esto soluciona los errores "dlopen: undefined symbol" por lo que los métodos previos de detección manual y carga de módulos ya no son necesarios.

Importante: Por favor, informe de todos los problemas que encuentre rellenando una incidencia en bugs.gentoo.org adjuntando los registros y configuraciones completos.

Controladores binarios

Los controladores binarios no están soportados actualmente en el perfil hardened y por tanto se recomienda usar los controladores de código abierto.

Ajustes PaX

Los ajustes PaX flags -P (PAGEEXEC), -S (SEGMEXEC), -M (MPROTECT) así como -R (RANDMMAP) no funcionan con Xorg.



Imprimir

Página actualizada 23 de diciembre, 2006

Sumario: Cómo instalar y usar Xorg en Gentoo Hardened

Adam Mondl
Autor

Kevin Quinn
Contributor

Ned Ludd
Contributor

Christian Heim
Contributor

Zaid A.
Contributor

José María Alonso
Traductor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.