18/08/2019
La depuración, o debugging, es un arte esencial para cualquier desarrollador, analista de seguridad o entusiasta de la informática que busque comprender a fondo el funcionamiento interno de un programa. Mientras que la depuración en modo usuario nos permite inspeccionar aplicaciones cotidianas, la depuración de kernel nos abre las puertas al corazón del sistema operativo Windows. Esta técnica es crucial para analizar malware avanzado como los rootkits, desarrollar drivers o simplemente resolver problemas complejos del sistema. En este artículo, nos sumergiremos en el mundo de la depuración de kernel en Windows 10, utilizando la herramienta por excelencia para esta tarea: WinDbg.

¿Qué es la Depuración y por qué es Importante?
La depuración es el proceso de encontrar y resolver errores (bugs) en el código fuente de un software. Sin embargo, su utilidad va mucho más allá. En el campo de la ingeniería inversa y el análisis de malware, la depuración nos permite ejecutar un programa de forma controlada, línea por línea, para observar su comportamiento, entender su lógica y descubrir sus secretos. Podemos distinguir dos niveles principales de depuración en Windows:
- Depuración en Modo Usuario (User Mode): Se enfoca en aplicaciones individuales que se ejecutan en su propio espacio de memoria virtual. Herramientas como OllyDbg o el propio WinDbg son excelentes para esta tarea. El impacto de un error en este modo generalmente se limita a la aplicación que falla.
- Depuración en Modo Kernel (Kernel Mode): Se realiza sobre el núcleo del sistema operativo y sus componentes, como los drivers. Este es un terreno mucho más delicado, ya que un error en el kernel puede causar un fallo total del sistema (la famosa Pantalla Azul de la Muerte o BSOD). Es aquí donde la verdadera potencia de herramientas como WinDbg brilla con luz propia.
WinDbg: La Herramienta Definitiva para el Kernel
WinDbg es el depurador oficial de Microsoft y forma parte de las Herramientas de Depuración para Windows. Aunque su interfaz clásica podía resultar intimidante, la nueva versión WinDbg Preview, disponible en la Microsoft Store, ofrece una experiencia más moderna y accesible sin sacrificar ni un ápice de su poder. Su capacidad para depurar tanto en modo usuario como en modo kernel lo convierte en la navaja suiza indispensable para cualquier análisis profundo en el ecosistema Windows.
Configurando el Entorno para la Depuración de Kernel
Para depurar el kernel de Windows, no podemos hacerlo en la misma máquina que estamos utilizando. Esto se debe a que cuando detenemos el kernel para inspeccionarlo, todo el sistema operativo se congela. Por lo tanto, necesitamos una configuración de dos máquinas:
- Máquina Anfitrión (Host): Es tu máquina principal, donde ejecutarás WinDbg.
- Máquina Objetivo (Debuggee): Es la máquina cuyo kernel quieres depurar. Generalmente, es una máquina virtual (VM) para mayor comodidad y seguridad.
A continuación, detallamos los pasos para configurar este entorno.
Paso 1: Configurar la Máquina Objetivo (Debuggee)
En la máquina que será depurada (tu máquina virtual), necesitas habilitar el modo de depuración. Para ello, abre un Símbolo del sistema (CMD) o PowerShell como Administrador y ejecuta los siguientes comandos:
Primero, activamos la depuración en el gestor de arranque:
bcdedit /debug onLuego, configuramos los ajustes de depuración. Lo más común y eficiente hoy en día es hacerlo a través de la red. Reemplaza `192.168.1.71` con la dirección IP de tu máquina Anfitrión (Host).
bcdedit /dbgsettings net hostip:192.168.1.71 port:55123Este comando te devolverá una clave (key) que necesitarás más adelante. ¡Anótala! Es algo como `2j3k4l2j3k4l.1m2n3o4p5q6r.a1b2c3d4e5f6.g7h8i9j0k1l2`.
Finalmente, es recomendable habilitar la firma de pruebas (test signing), lo cual te permitirá cargar drivers no firmados, algo muy útil durante el desarrollo y análisis.
bcdedit /set testsigning onUna vez ejecutados estos comandos, reinicia la máquina objetivo para que los cambios surtan efecto.
Paso 2: Conectar desde la Máquina Anfitrión (Host)
Ahora, en tu máquina principal, abre WinDbg Preview.
- Ve al menú File > Attach to Kernel.
- Selecciona la pestaña Net.
- Introduce el número de puerto que configuraste (en nuestro ejemplo, `55123`).
- Pega la clave que anotaste del paso anterior.
- Introduce la dirección IP de la máquina objetivo.
- Haz clic en OK.
WinDbg mostrará un mensaje indicando "Waiting to reconnect...". Ahora, reinicia la máquina objetivo. Durante el proceso de arranque de la máquina virtual, verás cómo WinDbg establece la conexión y muestra información sobre el kernel que se está cargando.
Tu Primera Sesión de Depuración de Kernel
Una vez conectado, verás en la parte inferior de WinDbg el mensaje "Debuggee is running". Esto significa que el sistema operativo objetivo está funcionando normalmente, pero tú tienes el control. Para pausar la ejecución del kernel y tomar el mando, presiona el botón Break (o la combinación de teclas Ctrl + Break).
Inmediatamente, la máquina objetivo se congelará por completo y en la consola de WinDbg aparecerá el prompt `kd>`. ¡Felicidades! Has irrumpido en el kernel de Windows y estás listo para empezar a investigar.
Comandos Esenciales para Empezar
La interacción con WinDbg se basa en comandos. Aquí tienes algunos de los más básicos y útiles para comenzar:
lm: Lista los módulos (drivers, ntoskrnl.exe, etc.) cargados en el kernel. Es uno de los primeros comandos que querrás ejecutar para ver qué se está ejecutando.!process 0 0: Muestra una lista de todos los procesos que se están ejecutando en el sistema.bp [dirección o símbolo]: Establece un breakpoint (punto de interrupción) en una dirección de memoria específica o en una función. Por ejemplo, `bp nt!NtCreateFile` detendrá la ejecución cada vez que se llame a la función para crear un fichero.g: (Go) Reanuda la ejecución del sistema objetivo hasta que se encuentre un breakpoint o decidas pausarlo de nuevo.k: Muestra la pila de llamadas (call stack) del hilo actual, permitiéndote ver qué secuencia de funciones llevó al estado actual.p: (Step Over) Ejecuta una única instrucción de ensamblador. Si la instrucción es una llamada a una función (CALL), la ejecuta por completo y se detiene en la siguiente.t: (Step Into) Ejecuta una única instrucción de ensamblador. Si es una llamada a una función, entra dentro de esa función para depurarla paso a paso.
Tabla Comparativa de Comandos de Depuración
Aunque nos centramos en WinDbg, muchos conceptos son universales. Aquí una pequeña tabla comparativa con otro depurador popular de modo usuario, OllyDbg.
| Acción | WinDbg (Comando) | OllyDbg (Atajo) |
|---|---|---|
| Establecer Breakpoint | bp [dirección] | F2 |
| Continuar Ejecución | g | F9 |
| Paso a Paso (Step Over) | p | F8 |
| Paso a Paso (Step Into) | t | F7 |
Una Breve Mirada a Radare2
Aunque WinDbg es el rey en Windows, vale la pena mencionar a Radare2, un framework de ingeniería inversa de código abierto y línea de comandos increíblemente potente. Radare2 es multiplataforma y puede analizar, emular, depurar y modificar cualquier binario. Aunque su curva de aprendizaje es pronunciada, ofrece un control sin precedentes. Con comandos como `aaa` para analizar un binario y `Vv` para entrar en su modo visual de grafos, permite desentrañar la lógica de un programa de una manera muy gráfica e interactiva, siendo una excelente alternativa para el análisis estático antes de saltar a la depuración dinámica.
Preguntas Frecuentes (FAQ)
¿Por qué necesito dos máquinas para la depuración de kernel?
Cuando pausas la ejecución del kernel en la máquina objetivo, todo el sistema operativo se detiene por completo, incluyendo la entrada de usuario, las actualizaciones de pantalla y las operaciones de red. Por lo tanto, necesitas una segunda máquina (el anfitrión) que no se vea afectada para poder controlar el depurador y enviar comandos.
¿Es seguro habilitar el "testsigning"?
Habilitar `testsigning` reduce la seguridad del sistema, ya que permite la carga de drivers que no han sido firmados digitalmente por Microsoft. Para un entorno de laboratorio o una máquina virtual dedicada a la investigación, es una práctica común y necesaria. Sin embargo, nunca deberías habilitarlo en tu máquina de uso diario o en un entorno de producción.
¿Puedo usar una máquina virtual como máquina objetivo (debuggee)?
Sí, y de hecho es el método más recomendado. Usar una máquina virtual (con VirtualBox, VMware, etc.) como objetivo es seguro, flexible y te permite tomar instantáneas (snapshots) para revertir fácilmente el estado del sistema si algo sale mal durante tus experimentos.
Conclusión
La depuración de kernel es una habilidad avanzada pero increíblemente poderosa que te permite explorar las profundidades del sistema operativo Windows. Aunque el proceso de configuración inicial puede parecer complejo, seguir los pasos descritos te permitirá establecer un laboratorio de depuración robusto con WinDbg. Desde aquí, podrás analizar drivers, cazar rootkits y obtener una comprensión del funcionamiento interno de Windows que pocos logran alcanzar. El viaje apenas comienza, pero con estas herramientas y conocimientos, estás equipado para desvelar los secretos mejor guardados del kernel.
Si quieres conocer otros artículos parecidos a Depuración de Kernel en Windows 10: Una Guía puedes visitar la categoría Juegos.
