Irene Díez
Investigadora de DT
Expertise: Operating systems, program analysis

Optimizaciones fatales

Los compiladores transforman el código que escribimos para hacerlo más eficiente, sin embargo, hay veces en las que estas optimizaciones hechas por el compilador pueden causar problemas de seguridad. Un claro ejemplo de esto es la eliminación de código muerto

¿Cómo funciona un linker? (III) – Tipos de símbolos

Tras aprender qué información contiene la tabla de símbolos en la entrega anterior, ahora podemos hablar más detenidamente de los atributos que puede tener un símbolo y qué papel tienen en la resolución de símbolos desde el punto de vista

¿Cómo funciona un linker? (II) – La tabla de símbolos

En entregas anteriores hablábamos de que los linkers son los encargados de combinar diferentes ficheros de código objeto trasladable en un ejecutable. Para ello tenían dos tareas fundamentales, la resolución de símbolos y el traslado; en esta entrega vamos a

¿Cómo funciona un linker? (I)

En el proceso de convertir el código de un lenguaje de alto nivel a un ejecutable que entienda nuestro sistema, los linkers tienen un rol que muchas veces pasa desapercibido, pero que es importante de conocer. Cuando queremos convertir un archivo

Crea un binario ilegible con estas técnicas

Ya bien sea por fines maliciosos, como el caso de los autores de malware, por fines corporativos, o por otras razones, las técnicas de ofuscación son utilizadas para proteger un programa haciendo que una vez compilado, el análisis estático del

¿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 (VI) – RELRO

En esta entrega vamos a hablar de dos opciones que podemos pasarle al linker para hacer más seguras ciertas secciones de nuestro ejecutable: -Wl,-z,relro,-z,now. Cuando un programa llama a una función no definida en el programa, que está en una

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

PackerInspector

Nuestra sandbox para packers

Categorías