INTRODUCIÓN FORENCE

 


INTRODUCCIÓN AL DEPURADOR DE WINDOWS



Hola lectores,

Vamos a ponernos en situación en un caso forense que tuve bastante complicado de resolver por la situación crítica de ese servidor.
Disponemos de un controlador de dominio (comprometido) el cual no se puede apagar. Este servidor se encuentra inestable y dependiendo de las acciones del administrador de dominio da una pantalla azul matando el proceso Winlogon y reiniciando la máquina la cual deja sin servicio a cerca de 1.000 usuarios.
Para ilustrar este caso quiero comentar con todos mi experiencia utilizando el depurador de Windows.
¿QUE ES WINDBG?
Es una aplicación distribuida en la web de Microsoft. Se puede utilizar para depurar en modo de usuario las aplicaciones, los controladores y el sistema operativo en modo kernel .

WinDbg se puede utilizar para la depuración de volcados de memoria y también tiene la capacidad de cargar de forma automática lo que se llama 'mapa de símbolos' traduciendo fechas, horas, CRCs  haciendo coincidir diversos criterios. Otra de las ventajas es que pueden relacionarse con el código fuente del binario.

INSTALANDO WINDBG

WINDOWS 8

Windbg se distribuye en un paquete de software llamado "Windows Driver Kit (WDK)." disponible desde http://msdn.microsoft.com/en-us/windows/hardware/hh852365.aspx

La instalación te preguntará si deseas instalar de forma local o descargar el kit de desarrollo para otro equipo. Lo suyo es instalarlo en local.



Desactiva todas las opciones excepto las que están marcadas en la imagen anterior.


WINDOWS 7
Para Windows 7,  Microsoft ofrece WinDBG como parte del paquete de "Herramientas de depuración para Windows" que se incluye en el SDK de Windows y Net Framework .
Una vez ejecutado el programa de instalación aparece la siguiente pantalla:
Al igual que en Windows 8, solo seleccionaremos las opciones marcadas en la pantalla anterior.
Una vez instalado procederemos a instalar los símbolos.
SÍMBOLOS
WinDBG realmente no necesita mucha configuración. Los símbolos son básicamente, los archivos especiales que se generan con el programa binario en tiempo de compilación y que proporciona información de depuración, tales como nombres de funciones y variables. Esto nos puede ayudar a desmitificar muchas de las funcionalidades de una aplicación al depurar. Muchos de los componentes de Microsoft son recopilados con símbolos que se distribuyen a través de un servidor de símbolos de Microsoft. 
Para configurar WinDBG y  para utilizar el servidor de símbolos vamos a crearnos una carpeta de nombre "símbolos" y a continuación nos descargamos el ejecutable desde http://msdn.microsoft.com/en-us/windows/hardware/gg463028
Una vez descargado y ejecutado (tomad vuestro tiempo, ya que tarda) nos encontraremos que la carpeta "símbolos" contiene miles de ficheros con extensión "pdb". Una vez instalado procederemos a configurar WINDBG
LO QUE NECESITAMOS SABER
LA INTERFAZ WINDBG
Al ejecutar WinDBG por primera vez te darás cuenta de su simplicidad. En un principio no va hacer nada, salvo que la conectemos a un proceso, para ello seleccionamos desde el menú la opción "Attach to a Process" y la conectamos a cualquier proceso apareciendo la ventana "comandos".
Una vez realizado este paso nos vamos al menú "File --> Search Symbol Path" y añadimos la siguiente ruta:

SRV*C:\carpetadeSimbolos*http://msdl.microsoft.com/download/symbols
Llegados a este punto ya tenemos configurado nuestro depurador de Windows y dispuestos a utilizarlo.
DEPURACIÓN DE UN PROCESO
Tenemos dos formas de depurar un proceso; en local y remoto.
En local es tan simple como realizar el paso anterior de "Attach to a Process" o "Open Executable" y esto nos mostrará la ventana de comando. Como consideración, hay que tener en cuenta lo siguiente:
Puede ir lento el sistema.
Puede fallar la aplicación (Habría que marcar la opción "no intrusive").
Es recomendable para aplicaciones que no requieren conectividad y trabajan en local.
Puede dar errores si se trata del malware a analizar.
En remoto sería lo siguiente:
Lo primero es tener una sesión de WINDBG con alguna depuración en local y a continuación en la ventana de comando hay que poner:
.server tcp:port=5006
Habilitando el acceso remoto
Una vez puesto tendremos que permitir el acceso remoto a este puerto.
Ahora ya podemos conectarnos remotamente.
Otra forma de conectarnos puede ser desde la consola de esta forma: 
MÓDULOS

Los módulos son partes del programa (en depuración) que se cargan con la ejecución del programa original. Muchas veces es mejor utilizar o depurar un módulo para saber como funciona el programa.
En el siguiente ejemplo podemos ver cómo carga los módulos del programa iCloud de Apple.
Y podemos conseguir la dirección de la carga de un módulo específico mediante el comando "lmf m":
0:005> lmf m kernel32
77550000 77624000 kernel32 C: \ Windows \ system32 \ kernel32.dll

Dirección de inicio y dirección final del nombre del módulo
PUNTOS DE INTERRUPCIÓN
Un 'breakpoint' es un marcador que se le pone a una instrucción de código o programa para decirle que en el momento de la ejecución ha de pararse en ese punto.
Una vez que se alcanza el punto de interrupción, el programa se detiene y podemos empezar a investigar y depurar el programa. Los puntos de interrupción se pueden configurar en el software y en la  CPU (hardware), vamos a echar un vistazo a los dos:
INTERRUPCIÓN POR SOFTWARE
Cuando se alcanza el punto de interrupción, el depurador se carga en la dirección actual de la memoria, recuperando la instrucción almacenada y la presenta al usuario. Los breakpoints por software se establecen dentro de WinDBG utilizando los comandos  pb , bm , o bu . pb (para Break Point) .
INTERRUPCION POR HARDWARE
En la mayoría de CPUs hay registros de depuración especiales que se pueden utilizar para almacenar las direcciones de los puntos de interrupción (por ejemplo, leer, escribir, ejecutar). 
Cuando la CPU llega a una dirección de memoria definida en el registro de depuración y se cumplen las condiciones de acceso, el programa pondrá la ejecución en pausa para ello se puede utilizar los comandos "ba".
COMANDOS

Hay una multitud de comandos para utilizar en el depurador. En el siguiente link tenemos una lista muy documentada de cada uno de ellos:
En nuestro caso vamos a comprobar alguno del estilo 'VOLATILITY' en el que podemos leer diversas claves del registro.
ACCEDIENDO AL REGISTRO DE WINDOWS
En mi caso y ejemplo, voy a realizar un análisis de un fichero que contiene un volcado de memoria, para ello lo selecciono y el 'debugger' prepara el entorno para su utilización con KD.
A continuación y como ejemplo puedo pedirle que me muestre la lista de ficheros HIVE que están en memoria. para ello utilizamos el comando "reg hivelist"
Lista de ficheros SYSTEM, DEFAULT, SAM, CONFIG
Si queremos ver las claves del registro de un fichero en concreto ponemos  "reg openkeys"

Claves del registro
Y para ver el valor o datos que contiene una clave o subclave ponemos "reg querykey"
Valores de una clave


Una vez que ya nos hemos familiarizado con el entorno, es momento de analizar el sistema, pero esto ya lo haremos en otro post.