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