AppSec: Mejora la seguridad de tu software con GCC Stack Protector Strong

El otro día ayudando a un cliente a desarrollar software seguro se me ocurrió que este tema podría ser de interés para mis lectores. Lógicamente esta temática es bastante amplia, pero en este artículo me centraré: es un patch para el compilador GCC que mejora la protección de stack protector (stack canary) mitigando las vulnerabilidades del tipo buffer overflow.

Stack Protector Strong es un patch desarrollado en Google y aplicado al Proyecto Chromium (Navegador Chromium y Chromium OS) que mejora sustancialmente esta defensa. Por defecto en GGC tenemos los parámetros –fstack-protector y –fstack-protector-all: el primero analiza cada función en el código y si detecta una posible vulnerabilidad aplica la defensa al compilar el programa (el programador no tiene que hacer nada, bueno sí, desarrollar de forma segura ;)), mientras que el segundo parámetro aplica esta defensa a TODAS las funciones del programa sin validar si son vulnerables.

Ambas opciones tienen sus respectivos problemas: la primera opción (-fstack-protector) está limitada por el código que considera vulnerable, mientras que la segunda (-fstack-protector-all) es demasiado agresiva y afecta al rendimiento de la aplicación.

Debido a estos problemas en Google optaron por desarrollar un tercer parámetro, -fstack-protector-strong, que abarca más casos de código vulnerable sin sacrificar rendimiento. En la figura 1 podemos ver una comparativa entre –fstack-protector y –fstack-protector-strong.

stack_protector_VS
Fig. 1 – -fstack-protector vs. –fstack-protector-strong

Claramente es una mejora sustancial que abarca más clases de posibles vulnerabilidades en código, pero basta de teoría y pasemos a un ejercicio práctico donde vamos a instalar el patch a la última versión de GCC 4.8.0 publicada recientemente en un Linux Debian 6.0.

El primer paso es bajarnos la versión GCC que nos interese parchear. El parche se escribió para la versión 4.6, aunque he probado con las versiones 4.7 y 4.8 y funciona correctamente. Para ello ejecutamos el comando wget con la URL de GCC y luego lo descomprimimos (ver figura 2).

gcc_cap1
Fig. 2 – Bajando GCC

Para compilar GCC debemos tener una serie de librerías instaladas por lo que utilizaremos el comando apt-get para su instalación (ver figura 3):

  • Build-essential
  • libgmp3-dev
  • libmpfr-dev
  • libmpc-dev
  • zip
  • autogen

gcc_cap2
Fig. 3 – Instalando paquetes necesarios para compilar GCC

Ahora bajamos el parche –fstack-protector-strong de aquí. El parche está compuesto por 5 ficheros diff.

gcc_cap4
Fig. 4 – Parches bajados

A continuación procedemos a parchear GCC y debemos seguir el orden que aparece en la figura 5. Prestad especial atención al orden de los directorios dentro de GCC.

gcc_cap5
Fig. 5 – Aplicando parches a GGC

Una vez que tengamos GCC parcheado podemos compilarlo, para su instalación en el sistema necesitamos tener privilegios de administrador (ver figura 6). Mientras el comando se ejecuta podemos leer otros artículos de este blog ya que el proceso tarda bastante :)

gcc_cap7
Fig. 6 – Compilando e instalando GCC

Ahora ya estamos listos para compilar programas con la última versión de GCC y con una mejor defensa ante vulnerabilidades buffer overflow.

En la figura 7 compilamos un programa vulnerable con el parámetro –fstack-protector-strong.

gcc_cap9
Fig. 7 – Probando –fstack-protector-strong

Al desensamblar (reversing) myapp podemos ver que se ha aplicado esta defensa en varias funciones y que con –fstack-protector no se hubiera aplicado (aunque este ejercicio lo dejo para otro artículo).

Actualmente este parche no está por defecto en GCC pero esperemos que lo esté en futuras versiones, así como nuevas y mejores defensas.

Es cierto que existen vectores de ataque para saltarse esta protección, aunque toda defensa es poca y hoy en día todos los compiladores modernos (GCC, Visual Studio y LLVM) incorporan diversas defensas que los programadores deberían utilizar siempre.

Sin duda el uso de estas defensas en los compiladores no quita la necesidad de desarrollar software de forma segura utilizando un marco de desarrollo seguro como son el MS SDL o el OpenSAMM.

¿Qué parámetros de seguridad utilizas al compilar software?

— Simon Roses Femerling

Publicado en Hacking Etico, Modelo de Amenazas, Privacidad, SDL, Seguridad, Tecnologia | Etiquetado , , , , , , , | Deja un comentario

Reseña Libro: The IDA Pro Book, 2º edición

Si te gusta la ingeniería inversa y quieres aprender todos los secretos de IDA Pro, este es tu libro. Esta obra escrita por Chris Eagle, un experto en la materia, nos revela toda la potencia de la mejor herramienta para ingeniería inversa. The IDA Pro, 2º edición (ISBN-13: 978-1593272890) a lo largo de sus 26 capítulos describe cómo utilizar IDA Pro y todas sus opciones, así como el decompilador, debugger y el emulador, y por supuesto el desarrollo de herramientas con los lenguajes IDC y Python (IDAPython).

IDA Pro es una compleja herramienta para analizar todo tipo de binarios pero este libro facilita a los no expertos su aprendizaje, y los que ya lo sean también sacarán provecho de leerlo.

Las secciones avanzadas de cómo extender IDA Pro mediante el uso de IDC o Python no tienen precio, el autor incluye bastantes scripts muy bien explicados. Personalmente soy un apasionado de Python, por lo que todos los capítulos relacionados con IDAPython para mí son los más interesantes.

En la web del libro podemos encontrar más información y una serie de plugins para IDA Pro, de especial interés el x86 Emulator plugin.

El código que la obra analiza es para x86 bajo Windows, pero IDA Pro soporta muchas más plataformas como ARM o binarios para Linux (ELF) y MacOS (Mach-O) entre otros.

Sin duda una lectura obligatoria para los tiempos que corren en ciber seguridad, donde es vital poseer las habilidades necesarias para buscar vulnerabilidades en software o analizar malware.

Puntuación (1 rosa, muy malo / 5 rosas, muy bueno): 5 Rosas (Lectura Obligatoria)

— Simon Roses Femerling

Publicado en Hacking, Hacking Etico, Libro, Seguridad, Tecnologia | Etiquetado , , , , , | Deja un comentario

De vuelta en Black Hat Europa y mi charla sobre software antirrobo

El pasado jueves 14 y viernes 15 de marzo se celebró el congreso Black Hat Europa en la estupenda ciudad de Ámsterdam, un evento obligatorio para expertos en ciberseguridad.

Por segundo año consecutivo participé con una ponencia sobre I+D en la que se exponía el estado de seguridad de los programas antirrobo para ordenadores y Smartphones.

Como siempre el evento tuvo charlas interesantes y otras menos, pero recomiendo al lector que las consulte y decida por sí mismo. Los temas fueron bastante variados como forense, pentesting, vulnerabilidades y desarrollo seguro.

En lo que respecta a mi charla, ya podéis encontrar la presentación en la web de VULNEX (aquí).

Desde aquí saludar a la gente de MundoHacker y demás españoles que andaban por el congreso!

Un saludo y nos vemos en el próximo congreso :)

— Simon Roses Femerling

Publicado en Conferencia, Hacking Etico, Privacidad, Seguridad, Tecnologia | Etiquetado , , , , , , , , , | Deja un comentario