Segmentation Fault en DMitry

  • Posted on: 20 March 2014
  • By: ReYDeS

Mientras dictaba un Curso de Hacking Ético descubrí un “Segmentation Fault”, o Falla de Segmentación en DMitry. He tenido la oportunidad de escribir en el Blog sobre esta herramienta para capturar tanta información como sea posible sobre un objetivo. Las programas utilizados en Hacking Ético, Pruebas de Penetración, Forense de Computadoras, como cualquier otro tipo de programas también contienen errores y fallas. Sirva el presente texto para exponer algunos conceptos sobre el tema.

DMItry

Para conocer más sobre DMitry sugiero leer la siguiente publicación de mi Blog.

http://www.reydes.com/d/?q=DMitry

Segmentation Fault

Un Segmentation fault o Falla de Segmentación ocurre cuando un programa intenta acceder a una localización de memoria que no está permitida de acceder, o intenta acceder a una localización de memoria de una manera no permitida (como por ejemplo, intentar escribir a una localización de solo lectura, o sobrescribir una parte del sistema operativo).

Un Segmentation Fault se refiere al espacio de dirección de un programa. Con protección de memoria, solo el espacio de dirección del programa es leído, y de esto, solo la pila y la porción de lectura-escritura del segmento de datos de un programa se puede escribir, mientras que los datos de solo-lectura y el segmento de código no se puede escribir. El intentar leer fuera del espacio de dirección del programa, o escribir a un segmento de solo-lectura del espacio de dirección, generará un fallo de segmentación, de ahí el nombre.

La “Falla de Segmentación” fue descubierta en la versión 1.3a-1kali2 de DMitry incluida en Kali Linux. Mencionar adicionalmente que Kali Linux está con la última actualización. Nótese el texto “Segmentation Fault” en la última línea.

# dmitry -w objetivo . com

GDB

GDB, o GNU Project Debugger, permite visualizar que es lo que está sucediendo “dentro” de otro programa mientras se ejecuta, o lo que otro programa estaba haciendo al momento de “caerse”.

GDB puede realizar cuatro tipos principales de cosas (además de otras en apoyo de estas) para ayudar a atrapar fallas en el acto.

- Iniciar los programas, especificando algo que pueda afectar este comportamiento.
- Hacer que el programa se detenga bajo una condición específica.
- Examinar lo que ocurrió, cuando un programa se detuvo.
- Cambiar cosas en el programa, para experimentar con los efectos correctivos de un falla.

Para tratar de depurar un “Segmentation Fault” se puede utilizar GDB. Para realizar este procedimiento en un escenario ideal se debería en primera instancia compilar DMitry con los Símbolos de Depuración. (Debugging Symbols).

¿Qué son los Símbolos de Depuración?

La mayoría de programas y librerías están; por defecto; compilados con los Símbolos de Depuración incluidas (con la opción "-g" de gcc). Esto significa que cuando se depura un programa o librería que fue compilada con la información de depuración incluida, un depurador puede proporcionar no solo direcciones de memoria, sino también los nombres de las rutinas y variables. Sin embargo la inclusión de estos Símbolos de Depuración acrecientan un programa o librería de manera significativa.

Mencionar que sin los Símbolos de Depuración GDB no será capaz de hacer mucho.

Archivos “core”

Los archivos “core” son una imagen de un proceso que es creado por el sistema operativo cuando el proceso termina de manera inesperada. Los archivos “core” se crean cuando un programa se comporta de manera inadecuada debido a una falla, o violación de CPU o mecanismos de protección de memoria. El Sistema Operativo mata el programa y crea el archivo “core”.

Este archivo es útil para determinar que es lo estuvo mal con el proceso. En Kali Linux se utilizará el comando “ulimit” para activar la creación de archivos “core” de tamaño ilimitado. Luego se vuelve a ejecutar DMitry.

# ulimit -c unlimited
# dmitry -w objetivo . com

Finalizada la ejecución de DMitry de manera anormal, se muestra el mensaje “Segmentation fault (core dumped)”. Lo cual indica que se ha generado el respectivo Archivo “core” dentro del directorio actual, tal como se puede observar al realizar un listado del directorio.

Una de las maneras iniciar la depuración con GDB es indicarle el nombre del programa que genera el error, junto con el Archivo “core”.

# gdb dmitry core

Una segunda manera de iniciar la depuración con GDB es definir la opción “--args”, la cual permite pasar argumentos después del nombre del programa al programa cuando este se ejecute.

# gdb –args dmitry -w objetivo . com

El comando “r” en GDB permite ejecutar el programa, cuando el programa se "cae", se genera el mensaje “Program received signal SIGSEGV, Segmentation fault.”

GDB es un programa que tiene una gran cantidad de opciones, y al mismo tiempo una extensa y completa documentación.

Uno de los primeros comandos de GDB para inspeccionar la “caída” de DMitry sería el comando “backtrace”, el cual muestra un resumen de como el programa llegó a donde está. Muestra una línea por trama, para varias tramas, inicia con la trama que se está ejecutado (trama 0), seguida por el llamador (marco 1) y la pila.

Este un buen motivo para realizar una investigación y análisis más profundo, de tal manera que se pueda evaluar la factibilidad de una explotación satisfactoria. Aunque Kali Linux por defecto utilice al usuario “root” para ejecutar todos sus programas, pueden existir escenarios donde DMitry sea utilizado por usuarios sin privilegios. Esto puede generar como consecuencia que la explotación de esta falla conduzca a una elevación de privilegios, u otro comportamiento anómalo.

Fuentes:

http://mor-pah.net/software/dmitry-deepmagic-information-gathering-tool/
http://www.sourceware.org/gdb/
http://askubuntu.com/questions/295765/upstart-and-core-files
http://ubuntuforums.org/showthread.php?t=1494590
http://en.wikipedia.org/wiki/Segmentation_fault
http://stackoverflow.com/questions/8305866/how-to-analyze-a-programs-cor...
http://www.linuxfromscratch.org/lfs/view/6.1/chapter06/aboutdebug.html
http://sourceware.org/gdb/current/onlinedocs/gdb/

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor Independiente en Ciberseguridad
Correo Electrónico: ReYDeS@gmail.com
Twitter: https://twitter.com/Alonso_ReYDeS
LinkedIn: https://pe.linkedin.com/in/alonsocaballeroquezada/
Facebook: https://www.facebook.com/alonsoreydes
Youtube: https://www.youtube.com/c/AlonsoCaballero


Webinar Informática Forense