Qué es un depurador de kernel de Windows

Un depurador de kernel de Windows es una herramienta que permite examinar y modificar el estado interno del kernel, el componente central que administra el hardware, los procesos, la memoria y la seguridad de un sistema informático. Microsoft Windows Debugger (WinDbg) es una eficaz herramienta de depuración basada en Windows que puede usar para realizar la depuración en modo de usuario y en modo kernel.

WinDbg proporciona depuración de nivel de origen para el kernel de Windows, los controladores en modo kernel y los servicios del sistema, así como para las aplicaciones y controladores en modo de usuario. Puede recorrer paso a paso el código fuente, establecer puntos de interrupción, ver variables, incluidos objetos de C++, seguimientos de pila y memoria.

Qué es el kernel de Windows

El kernel de Windows es el núcleo central del sistema operativo, encargado de gestionar las operaciones de bajo nivel que son fundamentales para el funcionamiento del sistema, como la gestión de memoria, procesos, y la entrada/salida de datos. Es un componente crítico que opera en el modo protegido más elevado de la computadora, conocido como modo kernel, lo que le permite tener un control completo sobre el sistema.

Funciones principales del kernel

  • Gestión de procesos: administra la creación, ejecución y terminación de procesos, asignándoles recursos y tiempo de CPU.
  • Gestión de memoria: controla la asignación de memoria para procesos y el núcleo del sistema, utilizando técnicas como paginación y segmentación para optimizar el uso de la memoria.
  • Gestión de entrada y salida: proporciona un marco para que los controladores de dispositivos comuniquen con el hardware, gestionando las solicitudes de E/S de manera eficiente.
  • Planificación de CPU: decide qué procesos y threads deben ejecutarse, administrando el tiempo de CPU entre ellos para asegurar una respuesta rápida y eficiente del sistema.

La diferencia entre el modo kernel y el modo usuario

El sistema operativo de Microsoft utiliza un sistema de “anillos” (“rings”) para bifurcar el código que le llega en dos tipos distintos de código. El primero es el modo kernel (anillo 0), que se reserva al propio sistema operativo y en el que el código “habla” con el hardware y los dispositivos, gestiona la memoria o planifica los hilos de ejecución.

Este modo de ejecución privilegiado permite acceso a toda la memoria, sin restricciones. El segundo es el modo usuario (anillo 3), utilizado para procesos y aplicaciones con privilegios normales y limitados de usuario del sistema.

En este modo las aplicaciones solo ven las páginas de memoria que el kernel te deja ver. En realidad hay dos anillos más: el anillo 1 para controladores de dispositivos y el anillo dos para código privilegiado, pero no se utilizan en la práctica.

Si un hilo de ejecución de una aplicación de usuario necesita acceso al modo privilegiado en cierto momento, crea una “excepción” para que el kernel, cuando lo considere, la evalúe y en caso de validarla dé ese acceso momentáneo y limitado a cierto recurso privilegiado, como la memoria.

Comparación entre modo kernel y modo usuario

Por qué los errores del kernel son más graves

Cuando una aplicación cualquiera de Windows falla, aparece una ventana de este tipo que nos permite cerrar esa aplicación sin que afecte al resto de procesos del sistema operativo. Los cuelgues son leves en modo usuario, pero fatales en modo kernel.

Si el código de una aplicación en modo usuario falla, lo que se cuelga es esa aplicación, sin más: es entonces cuando aparece la tradicional ventana en la que se nos da la opción de esperar a que responda o cerrar el programa directamente. Si lo que falla es el código de un proceso privilegiado en modo kernel, lo que se cuelga es todo el sistema: es entonces cuando puede aparecer la célebre “pantalla azul de la muerte” o BSOD.

La depuración del kernel puede ayudarle a identificar y solucionar problemas críticos del sistema operativo, como bloqueos, problemas de rendimiento, vulnerabilidades de seguridad y errores del controlador de dispositivo.

Qué puede analizar un depurador de kernel

La ventana Comando del depurador permite al usuario emitir una amplia variedad de comandos. La ventana de comandos del depurador es la ventana de información de depuración principal en WinDbg.

La ventana de comandos del depurador se divide en dos paneles. Los comandos se escriben en el panel más pequeño, el panel de entrada de comandos, en la parte inferior de la ventana y se ve la salida del comando en el panel más grande de la parte superior de la ventana.

En el panel de entrada de comandos, use las teclas de flecha arriba y flecha abajo para desplazarse por el historial de comandos. Cuando aparezca un comando, puede editarlo o presionar ENTRAR para ejecutar el comando.

  • El código fuente y la ejecución paso a paso.
  • Los puntos de interrupción.
  • Las variables y los objetos de C++.
  • Las pilas de llamadas.
  • Los procesos y subprocesos.
  • Los registros del procesador.
  • La memoria.
  • Los módulos y controladores cargados.
  • El árbol de dispositivos Plug and Play.
  • El nivel IRQL y el código desensamblado.

WinDbg como depurador de kernel de Windows

WinDbg puede recorrer paso a paso el código fuente, establecer puntos de interrupción, ver variables, incluidos objetos de C++, seguimientos de pila y memoria. La ventana Comando del depurador permite al usuario emitir una amplia variedad de comandos.

Los controladores en modo kernel y el sistema operativo Windows envían mensajes con frecuencia al depurador de kernel mediante DbgPrint y funciones relacionadas. Estos mensajes no se muestran automáticamente durante la depuración del kernel local. Puede mostrarlos mediante la extensión !dbgprint.

Comandos iniciales

Puede usar Ctrl+Break, o Scroll Lock, en WinDbg para interrumpir la ejecución del código que se está ejecutando en el sistema de destino. El sistema de destino puede tardar un poco en responder.

Algunos comandos de depuración muestran texto a través del lenguaje de marcado del depurador, el cual puedes seleccionar para obtener información adicional rápidamente. Escriba el siguiente comando para habilitar DML en la ventana Comando del depurador.

0: kd> .prefer_dml 1

DML versions of commands on by default

Puede acceder a la ayuda del comando de referencia mediante el comando .hh. Escriba el siguiente comando para ver la ayuda de referencia de comandos para .prefer_dml.

0: kd> .hh .prefer_dml

El archivo de ayuda del depurador mostrará ayuda para el comando .prefer_dml.

Consultar la versión del sistema

Para mostrar información detallada de la versión en el sistema de destino, escriba el comando vertarget, Mostrar versión del equipo de destino, en la ventana WinDbg.

0: kd> vertarget

Este comando puede mostrar la versión del kernel de Windows, la arquitectura, el número de procesadores, el tipo de producto, la dirección base del kernel, la hora de la sesión de depuración y el tiempo de actividad del sistema.

Enumerar los módulos cargados

Puede comprobar que está trabajando con el proceso correcto en modo kernel mostrando los módulos cargados escribiendo el comando lm, Enumerar módulos cargados, en la ventana WinDbg.

La salida muestra las direcciones inicial y final de los módulos, sus nombres y la información disponible sobre símbolos. Dado que todavía tenemos que establecer la ruta de símbolos y cargar los símbolos, la información disponible en el depurador es limitada.

Depuración de controladores en modo kernel

Este laboratorio ofrece ejercicios prácticos que demuestran cómo depurar el controlador de dispositivo de modo kernel de audio Sysvad. Este laboratorio le guiará por el proceso de depuración de un controlador en modo kernel.

Normalmente, trabajaría con su propio código de controlador al usar WinDbg. Para familiarizarse con la depuración de controladores de audio, se usa el controlador de ejemplo de audio virtual Sysvad.

Dado que el controlador de audio Sysvad no interactúa con el hardware de audio real, se puede usar en la mayoría de los dispositivos. Este ejemplo se usa para ilustrar cómo se puede realizar un solo paso a través del código nativo en modo kernel.

Esta técnica puede ser muy valiosa para depurar problemas complejos de código en modo kernel.

Actividades del laboratorio Sysvad

  1. Conexión a una sesión WinDbg en modo kernel.
  2. Comandos y técnicas de depuración en modo kernel.
  3. Descarga y compilación del controlador de audio Sysvad.
  4. Instalación del controlador de audio Sysvad en el sistema de destino.
  5. Uso de WinDbg para mostrar información sobre el controlador.
  6. Visualización de información del árbol de dispositivos Plug and Play.
  7. Trabajo con puntos de interrupción y código fuente.
  8. Análisis de variables.
  9. Visualización de pilas de llamadas.
  10. Visualización de procesos y subprocesos.
  11. Análisis de IRQL, registros y desensamblado.
  12. Trabajo con memoria.
  13. Finalización de la sesión de WinDbg.
  14. Recursos de depuración de Windows.

Qué se necesita para realizar una sesión de depuración

Necesitará el siguiente hardware para poder completar el laboratorio:

  • Un equipo portátil o de escritorio, host, que ejecuta Windows 10.
  • Un equipo portátil o de escritorio, destino, que ejecuta Windows 10.
  • Un concentrador de red o enrutador y cables de red para conectar los dos equipos.
  • Acceso a Internet para descargar archivos de símbolos.

Necesitará el siguiente software para poder completar el laboratorio:

  • Microsoft Visual Studio 2017.
  • Kit de desarrollo de software, SDK, de Windows para Windows 10.
  • Kit de controladores de Windows, WDK, para Windows 10.
  • Controlador de audio Sysvad de ejemplo para Windows 10.

Para obtener información sobre cómo descargar e instalar el WDK, consulte Descarga del Kit para controladores de Windows, WDK.

Depuración local del kernel

Las Herramientas de depuración para Windows admiten la depuración local del kernel. Esta es la depuración en modo kernel en un solo equipo. En otras palabras, el depurador se ejecuta en el mismo equipo que se está depurando.

Iniciar una sesión local con WinDbg

Abra WinDbg como administrador. En el menú Archivo, elija Depuración de kernel. En el cuadro de diálogo Depuración de núcleos, abra la pestaña Local. Seleccione Aceptar.

También puede iniciar una sesión con WinDbg abriendo una ventana del Símbolo del sistema como administrador y escribiendo el siguiente comando:

windbg -kl

Iniciar una sesión local con KD

Abra una ventana del Símbolo del sistema como Administrador y escriba el siguiente comando:

kd -kl

Limitaciones de la depuración local

No todos los comandos están disponibles en una sesión de depuración de kernel local. Normalmente, no puede usar ningún comando que haga que el equipo de destino se detenga, incluso momentáneamente, porque no se puede reanudar la operación.

En concreto, no puede usar los siguientes comandos:

  • Comandos de ejecución, como g, Go, p, Paso, t, Seguimiento, wt, Seguimiento y monitorización de datos, tb, Seguimiento a la rama siguiente, gh, Ir con control de excepciones, y gn, Ir con excepción no controlada.
  • Comandos de archivo de apagado y volcado de memoria, como .crash, .dump y .reboot.
  • Comandos de punto de interrupción, como bp, bu, ba, bc, bd, be y bl.
  • Comandos de visualización de registros, como r y variaciones.
  • Comandos de seguimiento de pila, como k y variaciones.

Si realiza la depuración local del kernel con WinDbg, tampoco estarán disponibles todos los comandos y botones de menú equivalentes.

Operaciones disponibles

Todos los comandos de entrada y salida de memoria están disponibles. Puede leer libremente la memoria del usuario y la memoria del kernel. También puede escribir en memoria.

Asegúrese de que no escribe en la parte incorrecta de la memoria del kernel, ya que puede dañar las estructuras de datos y con frecuencia hace que el equipo deje de responder, es decir, puede provocar un bloqueo.

Dificultades de la depuración local

La depuración local del kernel es una operación muy delicada. Tenga cuidado de no dañar o hacer que se bloquee el sistema.

Uno de los aspectos más difíciles de la depuración local del kernel es que el estado de la máquina cambia constantemente. La memoria se pagina dentro y fuera, el proceso activo cambia constantemente y los contextos de dirección virtual no permanecen constantes.

Sin embargo, en estas condiciones, puede analizar eficazmente las cosas que cambian lentamente, como determinados estados del dispositivo.

LiveKD

La herramienta LiveKD simula la depuración del kernel local. Esta herramienta crea un archivo de volcado de memoria con una “instantánea” del núcleo, sin detener realmente el núcleo mientras se realiza esta instantánea.

Por lo tanto, es posible que la instantánea no muestre realmente un solo estado específico del equipo. LiveKD no forma parte del paquete Herramientas de depuración para Windows.

Depuración del kernel mediante dos equipos

Para trabajar con aplicaciones en modo kernel y usar WinDbg, se recomienda usar KDNET a través del transporte Ethernet. Este laboratorio usa dos equipos.

WinDbg se ejecuta en el sistema host y el controlador Sysvad se ejecuta en el sistema de destino. Use un concentrador de red o enrutador y cables de red para conectar los dos equipos.

Los ordenadores de este laboratorio deben ser configurados para usar una conexión de red Ethernet para la depuración del kernel.

Comprobar la conectividad de red

En el sistema anfitrión, abra un símbolo del sistema y escriba ipconfig /all para determinar su dirección IP.

Registre la dirección IP del sistema host y el nombre del sistema anfitrión.

En el sistema de destino, abra una ventana de comandos y use el comando ping para confirmar la conectividad de red en los dos sistemas.

Use la dirección IP real del sistema host que registró en lugar de 169.182.1.1, que se muestra en la salida de ejemplo.

C:\> ping 169.182.1.1

La respuesta correcta confirma que los paquetes fueron enviados y recibidos, sin pérdida de paquetes, y muestra los tiempos aproximados de ida y vuelta.

Configurar KDNET

En el sistema host, busque el directorio KDNET de WDK. De forma predeterminada, se encuentra aquí:

C:\Archivos de programa (x86)\Windows Kits\10\Debuggers\x64

En estos laboratorios se asume que ambos PCs ejecutan una versión de 64 bits de Windows tanto en el equipo de destino como en el de host. Si no es así, el mejor enfoque es ejecutar la misma versión de herramientas en el host que ejecuta el destino.

Por ejemplo, si el destino ejecuta Windows de 32 bits, ejecute una versión de 32 del depurador en el host. Para obtener más información, vea Elegir las herramientas de depuración de 32 o 64 bits.

Busque estos dos archivos y cópielos en un recurso compartido de red o una unidad digital, para que estén disponibles en el equipo de destino:

  • kdnet.exe
  • VerifiedNICList.xml

En el equipo de destino, abra una ventana de comandos como Administrador. Escriba este comando para validar que se admite la NIC en el equipo de destino:

C:\KDNET>kdnet

La salida indica las tarjetas de red compatibles con la depuración de red y muestra el parámetro de bus correspondiente.

Escriba este comando para establecer la dirección IP del sistema host. Use la dirección IP real del sistema host que registró en lugar de 169.182.1.1, que se muestra en la salida de ejemplo.

Elija una dirección de puerto única para cada par de destino o host con el que trabaje, como 50010.

C:\>kdnet 169.182.1.1 50010

El comando habilita la depuración de red en la conexión de red compatible y genera una clave única.

Configuración de arranque y seguridad

Antes de usar BCDEdit para cambiar la información de arranque, es posible que deba suspender temporalmente las características de seguridad de Windows, como BitLocker y Arranque seguro en el equipo de prueba.

Vuelva a habilitar estas características de seguridad cuando se completen las pruebas y administren correctamente el equipo de prueba cuando se deshabilitan las características de seguridad.

El arranque seguro normalmente está deshabilitado en UEFI. Para acceder a la configuración de UEFI, use Sistema, Recuperación, Inicio avanzado.

Al reiniciar, seleccione Solucionar problemas, Opciones avanzadas, Configuración de firmware de UEFI.

Tenga cuidado, ya que establecer incorrectamente las opciones de UEFI o deshabilitar BitLocker, puede hacer que el sistema sea inoperable.

Escriba este comando para confirmar que dbgsettings está configurado correctamente:

C:\> bcdedit /dbgsettings busparams 0.25.0 key 2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p debugtype NET hostip 169.182.1.1 port 50010 dhcp Yes

Copie la clave única generada automáticamente en un archivo de texto para evitar tener que escribirla en el equipo host. Copie el archivo de texto con la clave en el sistema host.

Si recibe un mensaje emergente del firewall y desea usar el depurador, active las tres casillas.

Iniciar WinDbg en el host

En el ordenador anfitrión, abra una ventana de comandos como administrador. Cambie al directorio WinDbg.exe.

Usaremos la versión x64 de WinDbg.exe del Kit de controladores de Windows, WDK, que se instaló como parte de la instalación del kit de Windows.

C:\> Cd C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

Inicie WinDbg con depuración de usuarios remotos mediante el siguiente comando. El valor de la clave y el puerto coinciden con lo que estableció anteriormente mediante BCDEdit en el destino.

C:\> WinDbg -k net:port=50010,key=2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p

En el sistema de destino, reinicie el sistema de destino. En un minuto o dos, la salida de depuración debe mostrarse en el sistema anfitrión.

Windows Kernel Debugging: Advanced Techniques with WinDbg

Compilar y depurar el controlador Sysvad

Para descargar y compilar el controlador de audio de ejemplo de Sysvad, descargue y extraiga el ejemplo de audio Sysvad de GitHub.

Puede usar un explorador para ver el ejemplo de Sysvad y el archivo Readme.md. En este laboratorio se muestra cómo descargar los ejemplos de controladores universales en un archivo ZIP.

  1. Descargue el archivo master.zip en su disco duro local.
  2. Seleccione y mantenga presionado, o haga clic con el botón derecho, Windows-driver-samples-master.zip y elija Extraer todo.
  3. Especifique una nueva carpeta o vaya a una existente que almacenará los archivos extraídos.
  4. Una vez extraídos los archivos, vaya a la subcarpeta C:\WDK_Samples\Sysvad.

Abrir la solución en Visual Studio

En Visual Studio, seleccione Archivo, Abrir, Proyecto o solución, y vaya a la carpeta que contiene los archivos extraídos, por ejemplo, C:\WDK_Samples\Sysvad.

Haga doble clic en el archivo de solución Sysvad. En Visual Studio, busque el Explorador de soluciones.

Si aún no está abierto, elija Explorador de soluciones en el menú Ver. En el Explorador de soluciones, puede ver una solución que tenga varios proyectos.

APIs y herramientas relacionadas

Las APIs de bajo nivel proporcionan a los desarrolladores y expertos en ciberseguridad una interfaz para interactuar con el kernel de Windows y realizar operaciones de bajo nivel.

Estas APIs son fundamentales para desarrollar aplicaciones de sistema, herramientas de seguridad y para la realización de pruebas de penetración y análisis forense.

  • Windows Driver Kit, WDK: es un conjunto de herramientas que permite a los desarrolladores crear controladores de dispositivos que interactúan directamente con el hardware y el kernel de Windows.
  • Windows API, WinAPI: proporciona una interfaz de programación de aplicaciones para las interacciones de nivel superior con el sistema operativo, incluyendo la gestión de ventanas, archivos, y procesos.
  • Native API, NTAPI o NTDLL: es un conjunto de funciones no documentadas utilizadas internamente por el sistema operativo para operaciones de bajo nivel, tales como la manipulación de objetos del kernel y la gestión de memoria.
  • DirectX Graphics Infrastructure, DXGI: es fundamental para el desarrollo de juegos y aplicaciones gráficas, y también es relevante para los expertos en seguridad que analizan software que hace uso intensivo de gráficos.

Aunque su uso no está oficialmente soportado para aplicaciones de terceros, los expertos en seguridad a menudo las estudian para entender mejor el funcionamiento interno de Windows.

Por qué es importante depurar controladores y componentes privilegiados

Los controladores en modo kernel tienen acceso a recursos esenciales del sistema y pueden comunicarse directamente con el hardware o con componentes internos de Windows. Por esta razón, un error en un controlador puede afectar a todo el sistema operativo y no solamente a una aplicación.

La solución de ciberseguridad de CrowdStrike, el llamado “Falcon sensor”, se ejecuta en modo kernel porque, teóricamente, necesita acceso a los recursos del sistema para proteger todo tipo de ciberataques.

Para tener acceso al kernel, CrowdStrike desarrolló un controlador de dispositivo aunque no hay hardware como tal, pero eso le da acceso a los recursos necesarios para funcionar como debe y proteger esos servidores.

Para garantizar que este tipo de controladores funcionan como deben aun teniendo acceso privilegiado, Microsoft dispone de la certificación WHQL, Windows Hardware Quality Labs, que garantiza que dichos componentes han sido validados tanto por el desarrollador como por Microsoft, que los prueba en distintas plataformas y configuraciones y que los “firma” digitalmente para conferirles esa certificación.

Un sencillo fallo en esos programas, definiciones, podría provocar un cuelgue del sistema por completo. Que es justo lo que ocurrió en este caso.

Desactivar el sistema de depuración en Windows antiguos

Un depurador se basa en su sistema operativo Windows. Está diseñado para encontrar problemas con los programas de software.

Una secuencia de arranque es el conjunto de operaciones de la computadora lleva a cabo cuando está encendida, que se carga un sistema operativo.

Windows XP, Windows 98 y Windows 2000 carga la información de arranque de un archivo llamado BOOT.INI. Si su BOOT.INI contiene un interruptor que dice “/DEBUG”, su equipo de carga en el modo de depuración, incluso si no tiene una conexión externa a la creación de un depurador.

Algunas aplicaciones no se puede utilizar con el depurador encendido. Por lo tanto es necesario en esta situación para desactivar el depurador.

Localizar BOOT.INI

BOOT.INI es un archivo de sistema de Windows XP y por defecto está oculto. Asegúrese de que su sistema está configurado para mostrar todos los archivos y carpetas, para que pueda ver BOOT.INI.

Para ver BOOT.INI, abra su pantalla Mi PC. Haga clic en el menú Herramientas y elija Opciones de carpeta.

Haga clic en la ficha Ver y mire a través de los elementos del cuadro Configuración avanzada. Debería ver un listado llamado Archivos y carpetas ocultos; asegúrese de que está configurado en Mostrar archivos y carpetas ocultas.

Debería ver una casilla llamada Ocultar extensiones para los tipos de archivo conocidos. También debería ver una casilla de verificación llamada Ocultar archivos protegidos del sistema operativo, recomendada.

Si está marcada, desmárcala. Esto mostrará un cuadro de diálogo que le solicitará confirmar que esto es lo que quiere hacer. Haga clic en Sí.

Haga clic en el botón Aplicar para establecer los cambios y, a continuación, haga clic en Aceptar para cerrar la ventana Opciones de carpeta.

Haga doble clic en el icono de su unidad C:\ y debería ver Boot.ini allí.

Eliminar el parámetro DEBUG

BOOT.INI se puede abrir en cualquier editor de texto, como WordPad o Bloc de notas, y simplemente eliminar la parte que dice “/DEBUG”.

También puede tener otros elementos como “/debugport=” y “/baudrate=” que pueden suprimirse.

Un típico BOOT.INI debe verse algo como esto, aunque si el fabricante del equipo tiene instalado Windows XP para usted, el BOOT.INI podría tener información adicional que debe haber agregado intencionalmente:

[boot loader]
timeout = 30
default = multi (0) disk (0) rdisk (0) partition (1) \WINDOWS

[operating systems]
multi (0) disk (0) rdisk (0) partition (1) \WINDOWS = “Microsoft Windows XP Professional” / fastdetect

La última línea, que termina con “/fastdetect”, por lo general contiene el interruptor “/DEBUG”.

Si se quita todo lo que hay en esa línea que viene después de “/fastdetect”, guarde el archivo y, a continuación, reinicie el ordenador.

Esto debe tener su sistema operativo fuera de la modalidad de depuración y la aplicación deseada debe ejecutar correctamente.

tags: #que #es #un #depurador #de #kernel

Publicaciones populares: