15 jun 2015

Ejemplo y análisis de Binary Diffing

La diferencia binaria, o más concretamente, diferencia de código (program diffing) es una técnica clásica de ingeniería inversa en la que se comparan dos archivos a nivel binario o a nivel de instrucciones, en busca de diferencias. O lo que es lo mismo, qué ha cambiado un archivo respecto al otro.

Para ello se emplean diferentes heurísticas de búsqueda que generarán unos resultados significativos dentro del contexto que queremos analizar, como pueden ser diferencias entre nombres de una misma función, diferencias entre series de instrucciones, prólogos de funciones, etc.

Existen diversas herramientas y plugins diseñados para esta tarea, como DarumGrim, Zynamics Bindiff, o el reciente Diaphora, un plugin Open Source para IDA Pro, desarrollado por el investigador Joxean Koret y que utilizaremos en la demo de este artículo.

Este tipo de técnicas son muy útiles para algunas tareas, como descubrir qué nuevas funcionalidades o mejoras se han realizado sobre un software, o para comprobar si el nuevo parche es compatible con la arquitectura que tengamos montada (y así evitar que el parche “rompa” algo), aunque el caso que nos atañe es la identificación de vulnerabilidades ya corregidas, comparando la antigua versión vulnerable con la nueva ya parcheada.

Esto tiene aplicaciones legítimas, como puede ser la generación de firmas para un IDS o un antivirus, pero también es un método muy utilizado para descubrir vulnerabilidades que no han sido reveladas públicamente y sacar ventaja de ello.

Para ilustrar cómo se hace esto, hemos creado un sencillo programa que consta de dos componentes, prog.exe y utils.dll.

Dicho programa toma como argumento la ruta a un archivo de texto, y muestra por pantalla los 8 primeros caracteres. Esto no nos dice mucho, y parece poco transparente. ¿A qué se refieren con inestabilidad?
Dado que el parche solo trae un nuevo utils.dll, está claro que la corrección se ha hecho sobre ese archivo, así que vamos a compararlo con el archivo original y comprobar qué se ha cambiado en el código.

Contenido completo en fuente original INCIBE

Suscríbete a nuestro Boletín

0 Comments:

Publicar un comentario

Gracias por dejar un comentario en Segu-Info.

Gracias por comentar!