Gentoo Logo

Introducción a Gentoo Hardened

Contenido:

1.  Introducción

Esta guía está orientada a cualquier usuario que esté inseguro de las cosas que ofrece el proyecto Gentoo Hardened, de cómo usarlas conjuntamente y cuáles son sus respectivos roles en el proyecto.

El principio básico de seguridad que enfatizamos es el de capas de seguridad. Las capas son fundamentales en asegurar que no se vea comprometida la máquina de un usuario, y si lo está, minimizar los daños hechos. Mediante la combinación de una serie de tecnologías diferentes, no obstante, relacionadas a seguridad, hacemos que un atacante tenga que saltar pasos adicionales antes de que pueda ocurrir un incidente de compromiso. Por esta razón siempre recomendamos que decida cuáles son sus necesidades específicas y combine esas soluciones para proteger su sistema. Intentaremos explicar las opciones y cómo usarlas conjuntamente en este documento.

Gentoo Hardened no es un producto o solución por si mismo, es meramente un proyecto formado por un grupo de desarrolladores que trabajan con un mismo objetivo: seguridad muy proactiva. Los subproyectos contenidos en Gentoo Hardened no están relacionados salvo por el hecho de que están alojados dentro del mismo proyecto. Puede pensar que esto es parecido a KDE o GNOME en el sentido de que ambos son partes del proyecto de escritorio, y que los dos tienen un objetivo común pero no están relacionados del todo uno con el otro.

Nota: Pedir ayuda para instalar o tener soporte de su máquina 'Gentoo Hardened' no es claro y siempre debería aclarar que tiene un problema de SELinux, PIE/SSP, etc.

2.  Tecnologías Ofrecidas

PaX

En el corazón del proyecto se encuentra PaX. PaX es un parche para el núcleo que le permite protegerse contra desbordamientos de búfer y del montículo (heap) y ataques similares. PaX es su primera línea de defensa.

A causa del software escrito de forma poco correcta, siempre se está en riesgo de compromiso por la posibilidad de que ocurran desbordamientos de búfer y del montículo. Estas dos vulnerabilidades son el resultado de límites no chequeados de la entrada que un usuario realiza en las aplicaciones. Cuando un atacante tiene la capacidad de generar una entrada en una aplicación tal que se inserte en la memoria pero sin ser chequeada, existe la posibilidad de un desbordamiento. Los lenguajes de programación de bajo nivel como C y C++ no protegen automáticamente de desbordamientos y el resultado final es que cuando el búfer se satura da la posibilidad de que el código ejecutable adyacente pueda ser sobreescrito con la entrada que viene del usuario. Esto normalmente provocaría que la aplicación se caiga en el caso que la entrada del usuario no sea entendida por la máquina y generalmente se manifiesta como un fallo de página (page fault) porque los caracteres que saturan el búfer en el área ejecutable se tratan como direcciones que probablemente nunca existirían. Este es el resultado más benigno de una saturación.

Sin embargo, si el atacante conoce un ataque por desbordamiento, tendrá la oportunidad de añadir shellcode a la entrada y en lugar de causar que la aplicación se caiga, ésta en cambio ejecutará las instrucciones dadas. Esto sucede debido a que el shellcode se trata cómo instrucciones almacenadas en memoria para ser ejecutadas por el procesador. En términos básicos, el shellcode consiste en 'códigos de operación' (opcodes) que se traducen a rutinas en ensamblador. Los atacantes conocen estos códigos muy bien y pueden crear un shellcode que les permita hacer lo que deseen, tal como ejecutar un intérprete de comandos como root y asociarlo a un puerto. Cuando sucede esto, el usuario ni siquiera se dará cuenta de ello porque la aplicación no se cae sino que empieza ejecutando el código arbitrario de los atacantes permitiéndoles hacer lo que se les plazca. PaX mitiga este problema colocando de forma aleatoria cada función y búfer de una aplicación en memoria. Esto es lo que se denomina ASLR (siglas en inglés de Address Space Layout Randomization, Aleatorización de Distribución del Espacio de Memoria) y es la base de PaX. Al tener offsets aleatorios para las funciones y búferes, el atacante es incapaz de generar una entrada maliciosa que garantice que el shellcode será ejecutado (y lo hace muy difícil puesto que la aplicación probablemente se caerá y se reiniciará con nuevos offsets aleatorios). ASLR es mucho más útil cuando se usa en conjunto con código PIE (Position Independent Executable, Ejecutable Independiente de la Posición) pero también funciona con el código ejecutable estándar, con un coste añadido.

PaX también ofrece a los segmentos ejecutables la capacidad de ser ejecutables y no modificables, de igual manera a que los segmentos modificables puedan ser modificables y no ejecutables. Esto es denominado pageexec. En procesadores de la arquitectura x86 no hay forma de hacer esto a nivel de hardware ya que los diseñadores de x86 juntaron las banderas de memoria para leer y ejecutar y así ahorrar espacio. Debido a que una página puede ser escrita o leída y ejecutada, no es útil ajustar los búferes como no ejecutables porque no podrían seguir siendo leídos. Así que en x86 PaX emula este comportamiento a nivel de software, el cual introduce un costo añadido pero es muy útil para la seguridad.

PIE/SSP

Por motivos de claridad, mientras que PIE y SSP generalmente son agrupados en la misma discusión porque ambos son parte de la cadena de herramientas de Hardened, ciertamente son tecnologías diferentes con propósitos distintos. PIE por si mismo no provee seguridad adicional pero cuando se combina con PaX en el núcleo sí provee una herramienta poderosa contra los desbordamientos. SSP está implementado íntegramente en el espacio del usuario (userland) y protege contra ataques de quebrar la pila (stack smashing attacks) sin la ayuda del núcleo. Al estar implementados separadamente y hacen cosas distintas, ciertamente son dos capas diferentes de protección, por ejemplo, uno ataque denominado ret2libc puede esquivar a PaX pero sería bloqueado por SSP.

Hemos avanzado a grandes pasos para proveer una forma fácil de construir la totalidad de las herramientas del espacio del usuario con código PIE para aprovecharse de ASLR con muy poco sobrecosto. Adicionalmente a PIE, nuestra cadena de herramientas Hardened también ofrece SSP (Stack Smashing Protection, Protección contra el Quiebre de la Pila) mediante la ubicación de un área externa de los búferes y colocando una marca especial aleatoria y criptográfica. Esto permite a SSP chequear si es que la marca fue sobreescrita luego de cualquier escritura al búfer y le permite terminar abruptamente la aplicación en caso de haber sido sobreescrita dicha marca. La cadena de herramientas de Hardened ofrece a los usuarios un espacio PIE/SSP de la forma más fácil posible. Las fases (stages) marcadas con 'pie-ssp' son fases estándares construidas con PIE y SSP, no incluyen controles de acceso SELinux/RSBAC/grsecurity.

Control de Acceso Obligatorio

Aunque PaX es la primera capa de protección, quizás incluso la segunda o tercera si tiene cortafuegos y/o detectores de intrusión en la red, también se recomienda que use control de acceso para dar seguridad adicional a su sistema. Es muy importante que note que el control de acceso como su última capa de protección. El control de acceso es muy útil para evitar el paso a los atacantes que ya ingresaron a su sistema, o a usuarios locales. Actualmente Gentoo Hardened soporta tres soluciones de control de acceso: SELinux, grsecurity y RSBAC. SELinux requiere de cambios en el espacio del usuario lo que significa que construimos fases (stages) especiales para SELinux y que no deben ser confundidas con las fases pie-ssp. Sin embargo, ya que es recomendado el uso de fases pie-ssp con SELinux, también se ofrecen fases selinux-pie-ssp.

Si desea usar grsecurity no tiene de qué preocuparse acerca de las fases ya que no requiere de cambios en el espacio del usuario. Simplemente use las fases pie-ssp y una vez que esté listo para construir el núcleo, use uno que tenga activado grsecurity tal como las fuentes de hardened-sources. Una vez que su sistema esté corriendo puede usar el modo de aprendizaje de grsecurity para construir las ACLs (Lista de Control de Acceso) para su sistema.

Similar a grsecurity, RSBAC no requiere de cambio alguno en el espacio del usuario pero puede ser instalado luego de configurar una instalación normal de Gentoo. RSBAC es soportado por el núcleo rsbac-sources. Una vez que su sistema está corriendo puede elegir los distintos modelos de control de acceso ofrecidos por RSBAC pues todos son módulos. La documentación de Gentoo RSBAC lista los varios modelos ofrecidos y ofrece más información acerca de cada uno de ellos.

Hasta ahora hemos hablado acerca de las dos capas que ofrecemos, tenemos intenciones de ofrecer más y lo haremos en el futuro. Ejemplo de capas adicionales son detección/prevención de intrusión, que estarán ubicadas primero, incluso antes de PaX. Discos y memoria de intercambio cifrados ofrecen protección contra las violaciones de seguridad "física". Auditar le permitiría ver y reaccionar a los riesgos antes de que se conviertan en un compromiso. El tráfico de red cifrado y autenticación fuerte también son capas que son muy bien soportadas en las instalaciones de Linux y probablemente no nos concentraremos en aquello.

3.  Recursos

Proyecto Página Web del Proyecto Página del Proyecto en Gentoo
PaX http://pax.grsecurity.net http://www.gentoo.org/proj/es/hardened/pax-quickstart.xml
PIE No Disponible No Disponible
SSP http://www.trl.ibm.com/projects/security/ssp/ No Disponible
SELinux http://www.nsa.gov/selinux http://www.gentoo.org/proj/es/hardened/selinux/
grsecurity http://www.grsecurity.net http://www.gentoo.org/proj/es/hardened/grsecurity.xml


Imprimir

Página actualizada 7 de febrero, 2007

Sumario: Un compendio acerca de Gentoo Hardened

Joshua Brindle
Autor

Adam Mondl
Colaborador

Ned Ludd
Editor

Andrés Pereira
Traductor

José María Alonso
Traductor

Donate to support our development efforts.

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