
Extensión de Depuración para Respuesta a Incidentes y Forense Digital
SwishDbgExt es una extensión de depuración de Microsoft WinDbg que amplía el conjunto de comandos disponibles de Microsoft WinDbg, pero también corrige y mejora comandos existentes. Esta extensión ha sido desarrollada por Matt Suiche (@msuiche) – no dudes en contactar a [email protected] para solicitar más funcionalidades, ofrecer contribuciones y/o reportar errores.
SwishDbgExt tiene como objetivo facilitar la vida de los desarrolladores de kernel, solucionadores de problemas y expertos en seguridad con una serie de comandos de depuración, respuesta a incidentes y análisis forense de memoria. Debido a que SwishDbgExt es una extensión de depuración de WinDbg, puede usarse en sesiones de depuración de kernel local o remota, sesiones en vivo generadas por Microsoft LiveKd, así como en volcados de memoria de Microsoft generados por una Pantalla Azul de la Muerte o utilidades híbridas como Comae DumpIt.
Más información en https://blog.comae.io/comae-2016-contest-swishdbgext-features-3c9a63c62209#.tnt1b9usx
Puedes copiar la extensión de WinDbg en la carpeta correspondiente (x86 o x64) de WinDbg o cargarla manualmente usando el comando !load como se muestra a continuación. Ten en cuenta que no puedes tener espacios ni comillas en la ruta completa hacia el archivo dll de destino a cargar.
!load X:\FullPath\SwishDbgExt.dll
###Ejemplo:
kd> !load E:\projects\labs\SwishDbgExt\bin\x64\SwishDbgExt.dll;
SwishDbgExt v0.7.0 (Nov 2 2016) - Extensión de depuración de Respuesta a Incidentes y Forensia Digital
SwishDbgExt Copyright (C) 2016 Comae Technologies FZE - http://www.comae.io
SwishDbgExt Copyright (C) 2014-2016 Matthieu Suiche (@msuiche)
Este programa viene con ABSOLUTAMENTE NINGUNA GARANTÍA; para más detalles escribe `show w'.
Este es software libre, y eres bienvenido a redistribuirlo
bajo ciertas condiciones; escribe `show c' para más detalles.
Si deseas actualizar tu plantilla de WinDbg con una más amigable con DML, puedes importar directamente el archivo windbg_template.reg incluido en el paquete.
Muestra información sobre los comandos de extensión disponibles.
Este comando te dará la lista de todos los comandos si no especificas ningún argumento; te dará la lista de parámetros para un comando existente si se especifica como argumento.
Muestra funciones de callback
Busca code caves utilizados
Muestra el historial de comandos de la consola
Muestra las credenciales del usuario (basado en mimikatz de gentilwiki)
Muestra la lista de controladores. !ms_drivers mostrará una lista de los controladores cargados actualmente. En este ejemplo, aquí hay algunos de los controladores cargados en el momento del fallo en este volcado de kernel: Con este comando, también podemos ver información detallada de IRP sobre un controlador: En la imagen anterior podemos ver la ubicación de la pila de E/S específica del controlador dentro del IRP de e1cexpress.sys. Aquí podemos ver códigos de función como IRP_MJ_CREATE que abre el objeto de dispositivo de destino, indicando que está presente y disponible para operaciones de E/S.
Volcar espacio de memoria en disco
Muestra los trabajadores en cola de Ex.
!exqueue no funciona correctamente en Windows 8, por lo que fue necesario implementar una versión funcional. Al igual que el comando original, este muestra la cola de hilos de trabajo.
Restablecer la segmentación en WinDbg (Corregir "16.kd>")
Muestra la GDT.
!ms_gdt muestra la Tabla de Descriptores Globales. Nótese que en x64 cada selector es plano (0x0000000000000000 a 0xFFFFFFFFFFFFFFFF). Este comando puede ser muy útil para verificar cualquier posible hooking de la GDT, ya que intentar hacerlo en x64 provocará una comprobación de errores. Esto se debe a que x64 prohíbe el hooking de la GDT.
Muestra la lista de hives del registro.
ms_hivelist muestra una lista de hives del registro.
Podemos mirar directamente dentro de un hive (\Registry\Machine\Software, por ejemplo) para ver sus subclaves, valores, etc.:

Muestra la IDT.
!ms_idt muestra la Tabla de Descriptores de Interrupción. Al igual que la GDT, si la IDT está enganchada en un sistema x64, provocará una comprobación de errores. Esto se debe a que Microsoft implementó (programáticamente) una prevención del hooking de la IDT con un controlador en modo kernel que normalmente interceptaría las llamadas a la IDT y luego agregaría su propio procesamiento. Por eso en la imagen anterior, se ve 'No' hasta donde alcanza la vista.
Analiza un espacio de memoria y devuelve un Índice de Puntuación de Malware (MSI) - (basado en el trabajo de Frank Boldewin)
Escanea el Registro de Arranque Principal (MBR)
Muestra información de red (sockets, conexiones, ...)
Muestra la lista de objetos
Muestra la lista de procesos.
!ms_process es una versión mejorada de !process y !dml_proc.
Una de las cosas interesantes, como puedes notar a continuación, es el uso de DML (Lenguaje de Marcado del Depurador) con los comandos. Todos los comandos subrayados son en realidad enlaces a comandos.
Como ejemplo a continuación, puedes ver la salida de /vads /scan, para escanear VAD (Descriptores de Direcciones Virtuales). Puedes notar que una columna muestra el "Índice de Puntuación de Malware" que puede ser útil para detectar shellcodes o heap-spray.
En la captura de pantalla a continuación, puedes ver una puntuación anormalmente alta en varios VADs – debido al uso de heap spray. Simplemente haciendo clic en la puntuación se ejecutará el algoritmo de escaneo.
El algoritmo de escaneo está basado en la utilidad OfficeMalScanner de Frank Boldewin.
Y te devuelve información sobre dónde está el shellcode:
La opción /scan también se puede usar en funciones exportadas para saber si la EAT (Tabla de Direcciones de Exportación) ha sido parcheada o si el prólogo de la función ha sido modificado.
Pruebas similares están disponibles para la SSDT (!ms_ssdt).
Lee el bloque de control de clave
Lee el nodo de clave.
El comando !reg de WinDbg ha sido una frustración durante mucho tiempo, debido a algunos errores. Por eso SwishDbgExt tiene sus propias funciones de exploración del registro para intentar hacer el acceso a los datos del registro lo más simple posible.
Lee el valor de clave
Escanea y muestra hooks sospechosos de NDIS
Muestra la lista de servicios
Muestra las funciones de la Tabla de Descriptores de Servicio (SDT).
!ms_ssdt muestra la Tabla de Despacho de Servicios del Sistema. Este comando es extremadamente útil en la investigación de sospechas de hooks de rootkits a través de lo que se conoce como Manipulación Directa de Objetos del Kernel (DKOM). Si ves una rutina de bajo nivel aquí que está enganchada (como nt!NtEnumerateKey), esto puede ayudarte en tu análisis con respecto a una posible infección de rootkit.
Muestra información relacionada con el Administrador de Almacenamiento (ReadyBoost).
El presente comando permite listar el caché actual de ReadyBoost (requiere USB 3.0) utilizado por el Sistema Operativo, pero también mostrar los registros de las páginas de memoria gestionadas por el administrador de almacenamiento. Parámetro: /cache
Muestra la lista de KTIMER.