Gentoo Logo

Guía de inicio rápido para usar PaX con Gentoo Hardened

Contenido:

1.  ¿Qué es Gentoo Hardened?

Gentoo Hardened es un proyecto interesado en reforzar el sistema Gentoo. Soportamos diferentes soluciones y existe una flexibilidad adecuada para crear su propia configuración. En el corazón de la configuración de un sistema Gentoo común está PaX.

2.  ¿Qué es PaX?

PaX es un parche para el núcleo Linux que ofrece el reforzamiento del mismo de dos formas:

La primera, ASLR (Address Space Layout Randomization o Esquema de Aleatorización del Espacio de Direcciones) ofrece una forma de aleatorizar la distribución de direcciones de todos los datos cargados en memoria. Cuando se construye una aplicación como un PIE (Position Independent Executable o Ejecutable Independiente de la Posición), Pax puede aleatorizar las direcciones de la aplicación base.

La segunda forma de protección ofrecida por PaX es la memoria no ejecutable. Esto impide una forma muy común de ataque en el cual un atacante inserta código ejecutable en memoria. Se puede encontrar más información sobre PaX en esta misma guía, pero la página oficial está en http://pax.grsecurity.net.

3.  Una introducción a PIE y SSP

Como se ha mencionado arriba, PaX se complementa con PIE. Este método de construir ejecutables almacena información necesaria para relocalizar partes del ejecutable en memoria, de ahí el nombre Independiente de la Posición.

SSP (Stack Smashing Protector o Protector contra Ataques a la Pila) es una tecnología que se añade al ejecutable en el momento de su construcción. SSP fue originalmente introducida por IBM bajo el nombre ProPolice. Modifica el compilador de C para insertar código de inicialización en funciones que crean un buffer en memoria.

Nota: En las nuevas versiones de SSP, es posible aplicar SSP a todas las funciones, añadiendo protección a funciones cuyo buffer normalmente estaría por debajo del límite de tamaño para SSP. Esto es habilitado mediante la CFLAG -fstack-protector-all.

Durante la ejecución, cuando se crea un buffer, SSP añade un valor aleatorio secreto al final del buffer: el chivato. Cuando la función retorna, SSP se asegura de que el chivato no ha sido modificado. Si un atacante quisiera intentar un desbordamiento de buffer, sobreescribiría este valor y esto desembocaría en un manejador de ataque a pila. Consecuentemente esto causaría la finalización del proceso atacado.

Más información sobre SSP.

4.  Construyendo un núcleo con PaX habilitado

Varios árboles con el núcleo parcheado con PaX están disponibles en Gentoo.

Para las máquinas basadas en 2.4/2.6, los núcleos recomendados son hardened-sources

Obtenga uno de los árboles fuente recomendados, o aplique los parches apropiados presentes en http://pax.grsecurity.net a su árbol y configúrelo como normalmente lo haría para la máquina destino.

En Security Options -> PaX, aplique las opciones que se muestran abajo.

Listado de Código 4.1: Configuración del núcleo

[*] Enable various PaX features

PaX Control ->

 [ ] Support soft mode
 [*] Use legacy ELF header marking
 [*] Use ELF program header marking
     MAC system integration (none)  --->

Non-executable page ->

 [*] Enforce non-executable pages
 [*]   Paging based non-executable pages
 [*]   Segmentation based non-executable pages
 [*] Emulate trampolines
 [*] Restrict mprotect()
 [ ]   Disallow ELF text relocations

Address Space Layout Randomization ->

 [*] Address Space Layout Randomization
 [*]   Randomize kernel stack base
 [*]   Randomize user stack base
 [*]   Randomize mmap() base
 [*]     Randomize ET_EXEC base

Construya este núcleo como lo haría normalmente e instálelo en /boot.

5.  Construyendo una zona de usuario con PIE/SSP habilitado

Gentoo Hardened ha añadido soporte para la construcción transparente de PIE/SSP usando un fichero de especificación de GCC. Esto significa que cualquier usuario que realice una actualización de instalaciones anteriores de Hardened deberá eliminar cualquier LDFLAGS o CFLAGS usadas para activar PIE/SSP. También, se debe tener en cuenta que el paquete hardened-gcc es ahora obsoleto y debe ser desinstalado (la versión 5.0 es una paquete inútil). Para obtener la versión actual de GCC, añada USE="hardened pic" a /etc/make.conf si no está usando el perfil hardened.

Para mantener un conjunto de herramientas consistente, primero haga emerge binutils gcc virtual/libc. A continuación, reconstruya el sistema completo haciendo emerge -e world. A partir de ese momento todos los paquetes se construirán usando las tecnologías PIE/SSP.

Aviso: Tanto PIE como SSP pueden causar algún tipo de problema con algunos paquetes. Si encuentra alguno que falle al compilar, por favor, informe de una nueva y detallada incidencia incluyendo los datos de la compilación que ha fallado y la salida de emerge info en http://bugs.gentoo.org/.

Probablemente quiera también hacer emerge de pax-utils. A menudo, si un fichero ELF tiene relocalizaciones ejecutables en el segmento de texto, éstas pueden causarnos problemas. scanelf -BRylptq

6.  Cuando las cosas no van como debieran (PaX Control)

Algunas aplicaciones legítimas intentarán generar código en tiempo de ejecución, el cual se ejecuta fuera de memoria. Naturalmente, PaX no lo permitirá y terminará las aplicaciones que intenten hacerlo.

Nota: La más notable de este tipo de aplicaciones es XFree/Xorg, mplayer y herramientas multimedia basadas en xine-lib. La forma más fácil de evitar estos problemas es desactivar las protecciones de PaX.

Afortunadamente existe una utilidad para activar o desactivar las protecciones para un ejecutable: paxctl. Al igual que otros paquetes en Gentoo, instale paxctl mediante el comando emerge paxctl. El uso de esta utilidad se muestra mediante paxctl -h.

Nota: Si tiene una versión antigua de binutils, necesitará usar chpax, el cual edita las marcas de PaX con el formato antiguo. El uso de chpax es muy parecido al de paxctl. Esto también requiere el soporte de marcas construido en su núcleo. Las nuevas versiones de paxctl hacen chpax obsoleto.

Listado de Código 6.1: paxctl -h

usage: paxctl <options> <files>

options:
        -p: disable PAGEEXEC            -P: enable PAGEEXEC
        -e: disable EMUTRMAP            -E: enable EMUTRMAP
        -m: disable MPROTECT            -M: enable MPROTECT
        -r: disable RANDMMAP            -R: enable RANDMMAP
        -x: disable RANDEXEC            -X: enable RANDEXEC
        -s: disable SEGMEXEC            -S: enable SEGMEXEC

        -v: view flags                  -z: restore default flags
        -q: suppress error messages     -Q: report flags in short format flags

La primera opción que se suele usar es -v, la cual muestra los ajustes realizados en un binario en particular.

Listado de Código 6.2: paxctl -v

shell user # paxctl -v /usr/bin/Xorg
PaX control v0.2
Copyright 2004 PaX Team <pageexec@freemail.hu>

- PaX flags: -p-sM--x-eR- [/usr/bin/Xorg]
        PAGEEXEC is disabled
        SEGMEXEC is disabled
        MPROTECT is enabled
        RANDEXEC is disabled
        EMUTRAMP is disabled
        RANDMMAP is enabled

Esto muestra un binario XFree con todas las protecciones deshabilitadas.

Para activar una de estas protecciones en un binario, nos será útil la opción -z ya que restaura el valor por defecto de esa protección.

Para desactivar las protecciones en Xorg, ejecute paxctl -zpeMRxs /usr/bin/Xorg.

Puede probar a activar/desactivar varias protecciones para comprobar cuáles son las mínimas para poder trabajar. A menudo se comprueba que son necesarias las combinaciones -m -sp.



Imprimir

Página actualizada 11 de septiembre, 2007

Sumario: Guía de inicio rápido que cubre PaX y Gentoo Hardened.

Brandon Hale
Autor

Blackace
Editor

solar
Editor

José María Alonso
Traductor

Donate to support our development efforts.

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