Vulnerabilidades: del Parche al Exploit

Anuncio
Vulnerabilidades:
del Parche al Exploit
Mariano Nuñez Di Croce
mnunez@cybsec.com
VIII Seminario Iberoamericano de
Seguridad en las TIC
La Habana - Cuba
Vulnerabilidades: del Parche al Exploit
Agenda
© 2007
Agenda
• El Proceso de Descubrimiento y Solucion de Vulnerabilidades
• Los Parches Segun el Tipo de Software
• Del Parche a la Vulnerabilidad
• De la Vulnerabilidad al Exploit
• La Verdadera Vulnerabilidad
• Conclusiones
2
Vulnerabilidades: del Parche al Exploit
© 2007
El Proceso de
Descubrimiento y
Solución de
Vulnerabilidades
3
Vulnerabilidades: del Parche al Exploit
El Proceso de Descubrimiento y Solución de Vuln..
© 2007
El Proceso: Descubrimiento
• Las vulnerabilidades pueden ser descubiertas por
• El fabricante, mediante auditorías internas,
• Investigadores externos.
• Ante el descubrimiento, el investigador puede optar por uno de los
siguientes caminos:
• Informar al fabricante.
• Vender la información.
• Utilizar la información para fines personales (!)
4
Vulnerabilidades: del Parche al Exploit
El Proceso de Descubrimiento y Solución de Vuln..
© 2007
El Proceso: Solución
• Cualquiera sea el camino, tarde o temprano, el fabricante obtiene
conocimiento de la existencia de la vulnerabilidad.
• El fabricante desarrolla un parche, el cual (idealmente) mitiga la
vulnerabilidad.
• Los
usuarios
afectados
instalan
el
parche,
protegiendo
sus
sistemas.
5
Vulnerabilidades: del Parche al Exploit
El Proceso de Descubrimiento y Solución de Vuln..
© 2007
Línea de Tiempo
GAP “ER”
6
>>
Vulnerabilidades: del Parche al Exploit
© 2007
Los Parches
según el Tipo de
Software
7
Vulnerabilidades: del Parche al Exploit
Los Parches según el Tipo de Software
© 2007
Software de Código Abierto
• Estructura
• Archivos de texto.
• Generados por aplicaciones automáticas (ej: diff).
• Resultado: Archivo de parche, compuesto por extractos de
código fuente de la versión vulnerable y de la nueva versión.
• Aplicación
• Aplicación del archivo de parche sobre archivos afectados,
mediante herramientas automáticas (ej: patch).
• Re-compilación
8
Vulnerabilidades: del Parche al Exploit
Los Parches según el Tipo de Software
© 2007
Software de Código Cerrado
• Estructura
• Archivos binarios.
• No contienen información del código fuente.
• Representan la nueva versión del software afectado.
• Aplicación
• Reemplazo
físico
de
los
archivos
relacionados
con
los
componentes afectados.
9
Vulnerabilidades: del Parche al Exploit
© 2007
Del Parche a
la Vulnerabilidad
10
Vulnerabilidades: del Parche al Exploit
Del Parche a la Vulnerabilidad
© 2007
Identificando la Vulnerabilidad, Forma Tradicional
• Tradicionalmente,
las
vulnerabilidades
se
identifican
mediante
Auditorías de Seguridad de Software.
• Permite identificar nuevas vulnerabilidades.
• Software de Código Abierto:
• Testing Black-box
• Análisis de Código Fuente (C, C++, Java, .Net, etc)
• Software de Código Cerrado:
• Testing Black-box
• Reversing de Binarios (Assembler...)
11
Vulnerabilidades: del Parche al Exploit
Del Parche a la Vulnerabilidad
© 2007
Identificando la Vulnerabilidad, Utilizando los Parches
• Muchos fabricantes no incluyen información detallada sobre las
vulnerabilidades que soluciona un parche.
• Solución silenciosa de vulnerabilidades.
• No permite identificar nuevas vulnerabilidades.
• Técnica dependiente del tipo de parche a analizar.
12
Vulnerabilidades: del Parche al Exploit
Del Parche a la Vulnerabilidad
© 2007
Extrayendo la Información
Descubrimiento
Aplicación del
vulnerabilidad
Parche
No
vulnerable
vulnerable
Análisis Software Código Abierto
Análisis Software Código Cerrado
13
>>
Vulnerabilidades: del Parche al Exploit
Del Parche a la Vulnerabilidad
© 2007
Identificando la Vulnerabilidad a Partir del Parche
Software de Código Abierto:
• El archivo de parche contiene extractos de código fuente, de la
versión vulnerable y la no vulnerable.
• Técnica: Análisis directo del archivo de parche.
14
Vulnerabilidades: del Parche al Exploit
Del Parche a la Vulnerabilidad
© 2007
Ejemplo de Laboratorio
Código Original
Archivo de Parche (generado con diff)
#include <stdio.h>
--- pre-patch.c 2007-01-30 14:51:42.00 -0300
#include <string.h>
+++ post-patch.c 2007-01-31 10:49:21.00 -0300
@@ -4,7 +4,8 @@
int main(int argc, char **argv) {
int main(int argc, char **argv) {
char msg[10];
char msg[10];
strcpy(msg,
argv[1]);
strcpy(msg,
argv[1]);
-
strcpy(msg, argv[1]);
printf("Bienvenido %s\n",
%s\n", msg);
msg);
printf("Bienvenido
return 0;
0;
return
+
strncpy(msg, argv[1], 9);
+
msg[9] = '\0';
}
}
printf("Bienvenido %s\n", msg);
return 0;
}
Vulnerabilidad de Buffer Overflow si el primer argumento > 9 caracteres
15
Vulnerabilidades: del Parche al Exploit
Del Parche a la Vulnerabilidad
© 2007
Ejemplo Real
• Vulnerabilidad de buffer overflow, detectada en OpenSSL.
Extractos de Archivo de Parches
const char *s;
- char tbuf[32];
+ char tbuf[DECIMAL_SIZE(i)+DECIMAL_SIZE(l)+2];
n2s(p,i); s->s2->tmp.clear=i;
n2s(p,i); s->s2->tmp.enc=i;
n2s(p,i); s->session->key_arg_length=i;
+ if (s->session->key_arg_length > SSL_MAX_KEY_ARG_LENGTH)
+{
+
SSLerr(SSL_F_GET_CLIENT_MASTER_KEY,
+
SSL_R_KEY_ARG_TOO_LONG);
+
return -1;
+}
s->state=SSL2_ST_GET_CLIENT_MASTER_KEY_B;
}
16
Vulnerabilidades: del Parche al Exploit
Del Parche a la Vulnerabilidad
© 2007
Identificando la Vulnerabilidad a Partir del Parche
Software de Código Cerrado:
• Implica un nivel de dificultad sustancialmente mayor.
• Procedimiento:
• Análisis de binarios o archivos que modifica el parche.
• Backup de dichos archivos.
• Extracción de archivos del parche.
• Cálculo de diferencias.
17
Vulnerabilidades: del Parche al Exploit
Del Parche a la Vulnerabilidad
© 2007
Calculando las diferencias
• No hay acceso al código fuente.
• Mayor nivel posible: Assembler.
• Cálculo de diferencias:
• Comparación manual
• Herramientas automáticas
• SABRE Bindiff
• EEYE Binary Diffing Suite (EBDS)
18
Vulnerabilidades: del Parche al Exploit
Del Parche a la Vulnerabilidad
© 2007
Calculando las diferencias: Herramientas Automáticas
• Permiten calcular las diferencias entre dos binarios.
• Identifican subrutinas.
• Permiten calcular Tasa de Concordancia.
• Representaciones gráficas.
19
Vulnerabilidades: del Parche al Exploit
© 2007
De la Vulnerabilidad
al Exploit
20
Vulnerabilidades: del Parche al Exploit
De la Vulnerabilidad al Exploit
© 2007
Alcanzando Codigo Vulnerable: Triggeando el bug
• La vulnerabilidad ya ha sido identificada.
• ¿ Cómo alcanzar el código vulnerable ?
• Etapa más compleja y extensa.
• Ventaja: Certeza de que el código es alcanzable.
• Puntos de entrada:
• Protocolos de Red (HTTP, SMTP, Propietarios, ...)
• Bases de Datos
• Archivos del Sistema Operativo (Configuración, Registry,...)
• Argumentos de Linea de Comandos
21
Vulnerabilidades: del Parche al Exploit
De la Vulnerabilidad al Exploit
© 2007
El Exploit
• Una vez determinado el Punto de Entrada, comienza el desarrollo
del exploit.
• ¿ Objetivo ? Denegación de Servicio, Ejecución de Código Remoto,
Evasión de Restricciones, etc...
• Uso de debuggers
• Shellcoding
• Estabilidad
22
Vulnerabilidades: del Parche al Exploit
© 2007
La Verdadera
Vulnerabilidad
23
Vulnerabilidades: del Parche al Exploit
La Verdadera Vulnerabilidad
© 2007
La Verdadera Vulnerabilidad
• Exploit tradicional vs. Exploit por análisis de parches.
• Recordando la línea de tiempo...
>>
• La Administración de parches en las grandes Organzaciones.
• GAP ER: Semanas, meses o infinito (!)
• Tiempo de desarrollo de un exploit funcional, a partir de la
publicación
de un
2 horas
–3
parche:
días.
LAPSO DE TIEMPO QUE TRANSCURRE DESDE LA
LIBERACION DE UN PARCHE Y SU APLICACION
24
Vulnerabilidades: del Parche al Exploit
Conclusiones
© 2007
Conclusiones
• Ocultar los detalles técnicos de los parches no detiene a los
investigadores avanzados.
• Es posible desarrollar un exploit analizando el cambio de estados
introducido por la aplicación de un parche.
• Aprovecha la vulnerabilidad más común: el factor humano.
• Es imprescindible que las Organizaciones desarrollen políticas de
implementación de parches eficientes.
25
Vulnerabilidades: del Parche al Exploit
© 2007
Preguntas ?
26
Muchas Gracias
www.cybsec.com
Descargar