Vulnerabilidades y Explotación
Las vulnerabilidades son fallos en el software que violan sus suposiciones de seguridad; la explotación es el arte de convertir dicho fallo en un comportamiento controlado por el atacante, desde la fuga de datos hasta la ejecución completa de código.
Definition
Una vulnerabilidad es una debilidad en un sistema que un atacante puede utilizar para violar su política de seguridad; un exploit es una técnica o programa que aprovecha una vulnerabilidad específica para lograr efectos no autorizados.
Scope
Este tema cubre las principales clases de vulnerabilidades —errores de corrupción de memoria (desbordamientos de búfer, uso después de liberación), inyección, errores de enteros y fallos lógicos— y las técnicas para explotarlas, incluyendo el secuestro del flujo de control y la programación orientada a retorno. También abarca las mitigaciones que aumentan el costo de la explotación (ASLR, DEP/NX, canarios de pila, integridad del flujo de control). Excluye las prácticas de desarrollo seguro y las vulnerabilidades específicas de la web, que se tratan en temas relacionados.
Core questions
- ¿Qué categorías de fallos de software crean vulnerabilidades explotables?
- ¿Cómo se convierte un error de corrupción de memoria en control sobre un programa?
- ¿Qué es la programación orientada a retorno y por qué derrota las defensas simples?
- ¿Cómo las mitigaciones como ASLR, DEP y los canarios de pila elevan la barrera de explotación?
- ¿Por qué persiste la 'carrera armamentista' entre la explotación y la mitigación?
Key concepts
- desbordamiento de búfer
- uso después de liberación
- desbordamiento de enteros
- inyección
- secuestro del flujo de control
- programación orientada a retorno
- shellcode
- ASLR, DEP/NX, canarios de pila
- integridad del flujo de control
Key theories
- Secuestro del flujo de control
- Muchos exploits corrompen un puntero de código (como una dirección de retorno o un puntero de función) para redirigir la ejecución a código elegido por el atacante, siendo el ejemplo canónico el desbordamiento de búfer de pila que sobrescribe una dirección de retorno guardada.
- Mitigaciones y la carrera armamentista de explotación
- Las defensas como la memoria no ejecutable, la aleatorización del espacio de direcciones, los canarios de pila y la integridad del flujo de control bloquean cada una una clase de técnicas, lo que provoca nuevos ataques (programación orientada a retorno, fugas de información) en una escalada continua.
Mechanisms
Un desbordamiento de pila clásico escribe más allá de los límites de un búfer, sobrescribiendo la dirección de retorno guardada para que, cuando la función retorne, la ejecución salte al shellcode proporcionado por el atacante. Las mitigaciones rompieron esto: la memoria no ejecutable (DEP/NX) impidió la ejecución de código inyectado, lo que impulsó la programación orientada a retorno que encadena fragmentos de código existentes; la aleatorización del espacio de direcciones ocultó las direcciones objetivo, lo que impulsó las primitivas de fuga de información para derrotarla. La integridad del flujo de control y los lenguajes seguros para la memoria tienen como objetivo cerrar estas clases por completo.
Clinical relevance
Las vulnerabilidades explotables son la materia prima de los ataques reales: los errores de seguridad de la memoria representan la mayoría de las vulnerabilidades críticas en los principales navegadores y sistemas operativos, los exploits de día cero se compran, venden y utilizan en espionaje y delincuencia, y la disciplina impulsa la ingeniería defensiva, la divulgación responsable, las recompensas por errores y el impulso hacia lenguajes seguros para la memoria como Rust.
Evidence & guidelines
Las clases de vulnerabilidades se catalogan en el CWE de MITRE y se rastrean individualmente como CVE con puntuaciones de gravedad CVSS. Estudios de los principales proveedores (Microsoft, Google) informan que alrededor del 70% de las vulnerabilidades graves provienen de la inseguridad de la memoria, lo que motiva la orientación hacia lenguajes seguros para la memoria y el despliegue de mitigaciones (ASLR, CFI) por defecto en plataformas modernas.
History
La explotación entró en el ojo público con el desbordamiento de búfer del gusano Morris de 1988 y fue sistematizada por 'Smashing the Stack for Fun and Profit' de Aleph One en 1996. Cada defensa provocó una respuesta: DEP llevó a return-into-libc y a la programación orientada a retorno de Shacham (2007); ASLR llevó a los bypasses basados en fugas. La encuesta de 2013 'Eternal War in Memory' enmarcó la carrera armamentista en curso, que continúa impulsando tanto nuevas mitigaciones como la adopción de lenguajes seguros para la memoria.
Key figures
- Elias Levy (Aleph One)
- Hovav Shacham
- Dawn Song
- Ross Anderson
- Halvar Flake
Related topics
Seminal works
- aleph1996
- szekeres2013
- anderson2020
Frequently asked questions
- ¿Qué es una vulnerabilidad de día cero?
- Una vulnerabilidad de día cero es una vulnerabilidad desconocida para los defensores del software (y sin parchear) en el momento en que se explota, dándoles cero días para prepararse. Tales fallos son especialmente valiosos para los atacantes porque aún no existe una solución o firma.
- ¿Por qué se promueven los lenguajes seguros para la memoria como solución?
- Los lenguajes seguros para la memoria (como Rust) previenen clases enteras de errores —desbordamientos de búfer, uso después de liberación— en tiempo de compilación o ejecución, eliminando la fuente más común de vulnerabilidades graves en lugar de simplemente hacer que cada una sea más difícil de explotar.