Open Security Training, CS:APP y gPEFile

Finalizando las vacaciones, antes de reincorporarme al trabajo diario, dediqué unos días a seguir uno de los cursos de análisis de malware que tenía agendado desde hace tiempo, en este caso, el de Open Security Training.

La gente de OST provee el material, los ejemplos y los videos en línea para que uno vaya, a su tiempo, incorporando conocimientos repartidos en las siguientes clases:

Beginner Classes

Intermediate Classes

Advanced Classes

La primera clase sirve como base para las siguientes y discurre sobre los conceptos iniciales, describe el hardware sobre el que se programa en lenguaje ensamblador, describe con varios ejemplos las instrucciones del lenguaje más comunes, y muestra cómo seguir la ejecución de un programa con en Windows con Visual Studio Debugger (u OllyDbg, que no es tan distinto) y en GNU/Linux con gdb. Como bien hace mención el instructor, con conocer algunas pocas instrucciones ya es posible leer la mayoría de los programas.

La clase finaliza dejando como tarea el análisis y la resolución del clásico ejercicio de “bomba binaria” de la asignatura Arquitectura de Computadores de la Carnegie Mellon University, la cual requiere conocer técnicas básicas de ingeniería inversa para progresar a traves de las diferentes fases de la bomba, dando las respuestas correctas y evitando “explotarla”. Sin duda es un ejercicio que me ha entretenido mucho, me ha hecho pensar bastante, y que realmente debo recomendar como un buen inicio al arte de la ingeniería inversa.

Buscando información sobre el tema dí con el libro de cabecera de tal asignatura: Computer Systems: A Programmer’s Perspective, cuya edición 2011 es altamente recomendable. Está escrito en un lenguaje claro pero detallado, con ejemplos concretos (casi diría “palpables”) para explicar las abstracciones de sistema, y con un amplio conjunto de ejercicios para realizar. El sitio web contiene algunas secciones de ejemplo que sirven como preview, así como también material adicional al texto en papel. En retrospectiva, es el libro que me tendrían que haber recomendado cuando cursé las materias de arquitectura.

La clase “The Life of Binaries” trata efectivamente sobre “la vida de los ejecutables”, desde su creación: parsing del código fuente, abstract syntax trees, estrategias de compilación, lenguajes intermedios, enlazado del binario final; hasta su carga en memoria por el loader del sistema operativo y posterior ejecución en el computador. Se dan descripciones detalladas sobre los formatos binarios Portable Executable (PE) de Windows y Executable and Linkable Format (ELF) de Linux. El recorrido por el formato PE y su estructura, basado en el trabajo realizado por Ero Carrera, es muy completo y esclarecedor. La clase abarca también algunas de las técnicas que de ocultamiento y hooking utilizadas comúnmente en el malware, cómo funcionan realmente los virus de computadora, y qué técnicas es posible utilizar fácilmente para brindar mayor seguridad a los binarios que se generan.

A partir de esta clase se me ocurrió aprovechar el excelente trabajo realizado por Carrera con la biblioteca pefile y desarrollar con python-gtk2 un visor de archivos PE para interfaz gráfica, inspirado en el utilizado en los videos de entrenamiento. Dejo algunas capturas de la primera versión que no da vergüenza mostrar. El código, como siempre, se puede descargar desde el link que sigue y las correcciones y sugerencias serán bienvenidas.

Descargar: gpefile.py (v0.19, 78 KB)

Último cambio: Agregado despliegue de recursos RT_BITMAP, RT_GROUP_CURSOR, RT_GROUP_ICON, RT_STRING, GIF y PNG.

Me queda pendiente continuar con las clases siguientes, en cuanto el tiempo me lo permita. A la gente detrás del proyecto de Open Security Training, mi sincero agradecimiento por la dedicación y por el material brindado generosamente a la comunidad.

Add a comment »2 comments to this article

  1. Ex-ce-len-te post, ya me dan ganas de hacer el curso. El libro que recomendás parece estar buenísimo, voy a ver si tengo algo de tiempo para chusmearlo (lo tengo en digital).

    Para el script, ¿por qué no lo subís a google code así lo vemos y le metemos mano? ¿Tenés idea si hay algo así para Linux que agregue además features para ayudar en la ingeniería inversa?

    Sé que el IDA Pro [1] es de los mejores desensambladores, pero es pago y creo que corre sobre Wine. Estaría interesante tener/desarrollar algo básico como el IDA para Linux…

    [1] http://www.hex-rays.com/products/ida/index.shtml

    Abrazo

    Reply

  2. Qué tal, Marcelo! Cómo va todo?

    Si, la verdad que están muy buenos los videos y el libro es bien recomendable. Sobre el script, tengo pendiente hacerme una cuenta en github y subir ahí todos estos pequeños fragmentos de código con los que juego, así de paso me pongo a tono con git, que lo vengo relegando desde hace bastante.

    Efectivamente, hay que sacarse el sombrero ante la gente de Hex-Rays. IDA es, por sus características, el debugger por excelencia en el mercado y lo he visto usado en todo lo referente a seguridad informática (análisis de malware, exploits, etc) como también en el ámbito académico en un buen número de tesis que han caído en mis manos. Una de las características que más hecho de menos en el entorno libre es la creación de gráficos de flujo de control (o de control de flujo, según el autor) [1]

    Hasta donde he visto, no tenemos nada en el ámbito libre que se le asemeje ni de cerca, aunque lentamente van apareciendo algunas herramientas que facilitan la depuración y el análisis de binarios. Pefile es una de ellas, como así también libdasm [2] y el framework para ingeniería inversa provisto por radare [3].

    1 http://www.hex-rays.com/products/ida/tech/graphing.shtml
    2 http://code.google.com/p/libdasm/
    3 http://radare.org/y/?p=features

    Reply

Leave a Reply to Marcelo Fernández Cancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress