¿Cómo funciona un compilador?

En la serie de posts de Hardening de binarios hemos visto que muchas defensas vienen implantadas en los propios compiladores, pero ¿cómo se implementan? Tomando el caso de GCC, The GNU Compiler Collection, vamos a explicar la infraestructura general de

Hardening de binarios (VII) – Format Strings

Aunque las vulnerabilidades causadas por el uso indebido de format strings nos pueden parecer un tema del siglo pasado, una pequeña búsqueda en la base de datos de CVEs nos muestra que estos errores siguen pasando. El peligro de los

Hardening de binarios (V) – UBSan

El comportamiento indefinido en C/C++ es causado cuando no existen restricciones en el comportamiento del programa; es decir, cuando el estándar no especifica qué debe hacer la implementación, esta es libre de hacer lo que le parezca. En los tiempos

Hardening de binarios (IV) – VTV

En el post anterior de esta serie hablamos de cómo Google había incluido ASan en GCC para detectar errores de corrupción de memoria. Virtual-Table Verification (VTV) es otra opción de GCC (>4.9) desarrollada por Google para tratar de prevenir ataques

Hardening de binarios (III) – ASan

En entregas anteriores hemos hablado de opciones de GCC que hacen nuestros ejecutables más seguros, en esta entrega en cambio, presentamos opciones de compilación que generan informes, avisando de errores en el código. AddressSanitizer (ASan) es una opción para Clang

Hardening de binarios (II) – PIE

Siguiendo con las opciones clásicas de compilación de GCC para tratar de tener binarios más robustos, en esta entrega vamos a hablar de las opciones -fpie y -fPIE, que permiten compilar ejecutables como “Position Independent Executables” y permiten que sus