Una vulnerabilidad es un defecto en un programa que permiten violar algún atributo de la seguridad de la información.
Se clasifican en:
- CWE: Common Weakness Enumeration.
- CVSS: Common Vulnerability Scoring System.
- CVE: Common Vulnerabilities and Exposures.
Combatir vulnerabilidades
Hay distintas formas de combatir bugs de seguridad
Se pueden tratar de encontrar nuevas vulnerabilidades/bugs.
- Revisión de código.
- Pruebas de condiciones de contorno.
- Pruebas automatizadas.
- Análisis estático (sin ejecutar código).
- Análisis dinámico (durante la ejecución del programa).
- Pentesting: simula ataques para encontrar vulnerabilidades.
Se pueden tratar de mitigar vulnerabilidades para no se puedan explotar más, o que sea más difícil hacerlo.
- W XOR X: Una página no puede ser escribible (W) o ejecutable (X) a la vez. Esto hace a los ataques de inyección de código más difíciles, pero no imposibles (ver ROP).
- Stack Canaries: valor secreto al comienzo del stack, para verificar al retornar que no sea alterado.
- CFI (Control Flow Integrity): el control de flujo del programa no puede cambiar una vez compilado.
- ASLR (Address Space Layout Randomization): aleatoriza la ubicación donde los ejecutables se cargan en memoria.
- Cambios de configuración para inhabilitar la funcionalidad que falla.