Comprobaciones de seguridad del comprobador de controladores
La opción Comprobaciones de seguridad del Comprobador de controladores supervisa el controlador para detectar errores comunes que pueden dar lugar a vulnerabilidades de seguridad. Esta opción está disponible a partir de Windows Vista.
En concreto, la opción Comprobaciones de seguridad busca el siguiente comportamiento incorrecto del controlador:
Llamar a rutinas de Kernel ZwXxx con direcciones en modo de usuario como parámetros. Cuando el controlador llama a cualquier rutina ZwXxx , Driver Verifier comprueba que ninguno de los parámetros son direcciones en modo de usuario. Al llamar a cualquier rutina ZwXxx , el KPROCESSOR_MODE actual se convierte en KernelMode y los parámetros pasados a esa rutina se tratan como si fueran direcciones en modo kernel. Por lo tanto, el controlador debe sondear los búferes en modo de usuario recibidos de las aplicaciones y colocarlos en memoria en modo kernel (por ejemplo, en un bloque de grupo o en una estructura de datos asignada en la pila del kernel) antes de llamar a la rutina ZwXxx del kernel. El controlador debe usar el búfer capturado en lugar del búfer en modo de usuario como parámetro de la rutina ZwXxx .
Llamar a rutinas de Kernel ZwXxx con UNICODE_STRINGs con formato incorrecto como parámetros. Cuando el controlador llama a cualquier rutina ZwXxx , Driver Verifier comprueba los parámetros que se UNICODE_STRING valores. Entre los errores comunes detectados por el Comprobador de controladores en estas cadenas se incluyen los siguientes:
- El campo de búfer apunta a la memoria en modo de usuario.
- Los parámetros Length o MaximumLength son incorrectos. Por ejemplo, MaximumLength<Length. O uno o ambos de estos valores es un número impar. Ambos valores siempre deben ser incluso porque representan el número de bytes usados para representar una cadena Unicode.
Llamar a rutinas de Kernel ZwXxx con una estructura de OBJECT_ATTRIBUTES incorrecta como parámetro. Cuando el controlador llama a cualquier rutina ZwXxx , Driver Verifier comprueba los parámetros que se OBJECT_ATTRIBUTE estructuras. Los miembros de cada parámetro de estructura de OBJECT_ATTRIBUTE están sujetos a las mismas comprobaciones de direcciones en modo de usuario y UNICODE_STRING valores descritos anteriormente.
Parámetros irp-RequestorMode> e solicitud de E/S incoherentes. Cada vez que irp-> RequestorMode se establece en KernelMode, el comprobador de controladores comprueba que no hay parámetros de solicitud de E/S, Irp-AssociatedIrp.SystemBuffer> o Irp-UserBuffer>, son direcciones en modo de usuario.
A partir de Windows 7, al habilitar cualquier opción Comprobador de controladores, el Comprobador de controladores comprueba el comportamiento del controlador siguiente:
El contador de referencia de objetos cambia de 0 a 1. Cuando el administrador de objetos kernel de Windows crea un objeto, como un objeto File o un objeto Thread, el contador de referencia del nuevo objeto se establece en 1. Las llamadas a funciones del sistema como ObReferenceObjectByPointer o ObReferenceObjectByHandle incrementan el contador de referencia. Cada llamada a ObDereferenceObject para el mismo objeto disminuye el contador de referencia.
Una vez que el contador de referencia alcanza el valor 0, el objeto se libera. El administrador de objetos puede liberarlo inmediatamente o puede liberarlo más adelante. El comprobador de controladores comprueba si hay llamadas posteriores a ObReferenceObjectByPointer y ObReferenceObject para el mismo objeto. Estas llamadas cambian el contador de referencia de 0 a 1, lo que significa que el controlador ha incrementado el contador de referencia de un objeto ya liberado. Esto siempre es incorrecto porque puede dañar otras asignaciones de memoria.
Activación de esta opción
Puede activar la opción Comprobaciones de seguridad para uno o varios controladores mediante el Administrador del comprobador de controladores o la línea de comandos Verifier.exe. Para obtener más información, consulte Seleccionar opciones del comprobador de controladores.
Uso de la línea de comandos
En la línea de comandos, la opción Comprobaciones de seguridad se representa mediante bit 8 (0x100) . Para activar comprobaciones de seguridad, use un valor de marca de 0x100 o agregue 0x100 al valor de marca. Por ejemplo:
verifier /flags 0x100 /driver MyDriver.sys
La opción estará activa después de reiniciar el equipo.
A partir de Windows Vista, también puede activar y desactivar comprobaciones de seguridad sin reiniciar el equipo agregando el parámetro /volatile al comando. Por ejemplo:
verifier /volatile /flags 0x100 /adddriver MyDriver.sys
Esta configuración es efectiva inmediatamente, pero se pierde al apagar o reiniciar el equipo. Para más información, consulte Uso de la configuración volátil.
La opción Comprobaciones de seguridad también se incluye en la configuración estándar. Por ejemplo:
verifier /standard /driver MyDriver.sys
Uso del Administrador del comprobador de controladores
- Inicie el Administrador del comprobador de controladores. Escriba Comprobador en una ventana del símbolo del sistema.
- Seleccione Crear configuración personalizada (para desarrolladores de código) y, a continuación, haga clic en Siguiente.
- Seleccione Seleccionar configuración individual en una lista completa.
- Seleccione Comprobaciones de seguridad.
La característica Comprobaciones de seguridad también se incluye en la configuración estándar. Para usar esta característica en el Administrador del comprobador de controladores, haga clic en Crear configuración estándar.