Compartir a través de


Requisitos del controlador ELAM

La instalación del controlador debe usar herramientas existentes para la instalación en línea y sin conexión, registrando un controlador a través del procesamiento inf típico. Para obtener código de controlador ELAM de ejemplo, consulte lo siguiente: https://github.com/Microsoft/Windows-driver-samples/tree/main/security/elam

Instalación del controlador AM

Para garantizar la compatibilidad de instalación del controlador, un controlador ELAM se anuncia como un controlador de arranque similar a todos los demás controladores de arranque. INF establece el tipo de inicio en SERVICE_BOOT_START (0), lo que indica que el cargador de arranque debe cargar el controlador e inicializarse durante la inicialización del kernel. Un controlador ELAM anuncia su grupo como "Inicio anticipado". El comportamiento de inicio temprano para los controladores de este grupo se implementará en Windows, como se describe en la sección siguiente.

A continuación se muestra un ejemplo de la sección de instalación del controlador de un controlador ELAM INF.

[SampleAV.Service]
DisplayName    = %SampleAVServiceName%
Description    = %SampleAVServiceDescription%
ServiceType    = 1       ; SERVICE_KERNEL_DRIVER
StartType      = 0       ; SERVICE_BOOT_START
ErrorControl   = 3       ; SERVICE_ERROR_CRITICAL
LoadOrderGroup = “Early-Launch”

Dado que un controlador AM no posee ningún dispositivo, es necesario instalar el controlador AM como heredado, por lo que el controlador solo se agrega como un servicio al registro. (Si el controlador AM está instalado como controlador PNP normal, se agregará a la sección enumeración del registro y, por lo tanto, tendrá una referencia PDO, lo que provocará un comportamiento no deseado al descargar el controlador).

También debe incluir una sección SignatureAttributes en el archivo INF para el controlador ELAM.

Instalación del controlador de copia de seguridad

Para proporcionar un mecanismo de recuperación en caso de que el controlador ELAM esté dañado accidentalmente, el instalador de ELAM también instala una copia del controlador en una ubicación de copia de seguridad. Esto permitirá que WinRE recupere la copia limpia y recupere la instalación.

El instalador lee la ubicación del archivo de copia de seguridad de la clave backupPath almacenada en .

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\EarlyLaunch

A continuación, el instalador coloca la copia de seguridad en la carpeta especificada en la clave regular.

Inicialización del controlador AM

El cargador de arranque de Windows, Winload, carga todos los controladores de arranque y sus archivos DLL dependientes en la memoria antes de entregar al kernel de Windows. Los controladores de arranque representan los controladores de dispositivo que deben inicializarse antes de que se haya inicializado la pila de discos. Estos controladores incluyen, entre otros, la pila de discos y el administrador de volúmenes, y los controladores del sistema de archivos y los controladores de bus para el dispositivo del sistema operativo.

Interfaz de devolución de llamada del controlador AM

Los controladores ELAM usan devoluciones de llamada para proporcionar al administrador de PnP una descripción de cada controlador de arranque y dll dependiente, y puede clasificar cada imagen de arranque como un binario correcto conocido, binario incorrecto conocido o binario desconocido.

La directiva de sistema operativo predeterminada no es inicializar controladores y archivos DLL incorrectos conocidos. La directiva se puede configurar y se mide mediante Winload como parte de la atestación de arranque.

PnP usa la directiva y la clasificación proporcionada por el controlador am para decidir si se debe inicializar cada imagen de arranque.

Devoluciones de llamada del Registro

Los controladores de inicio temprano pueden usar devoluciones de llamada del registro o del controlador de arranque para supervisar y validar los datos de configuración usados como entrada para cada controlador de arranque. Los datos de configuración se almacenan en el subárbol del Registro del sistema, que winload carga y está disponible en el momento de la inicialización del controlador de arranque.

Nota

Los cambios realizados en el subárbol del Registro ELAM se descartan antes de que se arranque el sistema. Como resultado, un controlador ELAM debe usar el registro de seguimiento de eventos estándar para Windows (ETW) en lugar de escribir en el registro.

Estas devoluciones de llamada son válidas durante la vigencia del controlador ELAM y se anularán el registro cuando se descargue el controlador. Para obtener más información, consulta:

Devoluciones de llamada del controlador de arranque

Use IoRegisterBootDriverCallback e IoUnRegisterBootDriverCallback para registrar y anular el registro de un BOOT_DRIVER_CALLBACK_FUNCTION.

Esta devolución de llamada proporciona actualizaciones de estado de Windows a un controlador ELAM, incluido cuando se han inicializado todos los controladores de arranque y la instalación de devolución de llamada ya no es funcional.

Tipo de devolución de llamada

La enumeración BDCB_CALLBACK_TYPE describe dos tipos de devoluciones de llamada:

  • Devoluciones de llamada que proporcionan actualizaciones de estado a un controlador ELAM (BdCbStatusUpdate)
  • Devoluciones de llamada usadas por el controlador AM para clasificar controladores de arranque y archivos DLL dependientes antes de inicializar sus imágenes (BdCbInitializeImage)

Los dos tipos de devolución de llamada tienen estructuras de contexto únicas que proporcionan información adicional específica de la devolución de llamada.

La estructura de contexto de la devolución de llamada de actualización de estado contiene un único tipo enumerado que describe la llamada de Windows.

La estructura de contexto de la devolución de llamada de la imagen de inicialización es más compleja, que contiene información de hash y certificado para cada imagen cargada. La estructura contiene además un campo que es un parámetro de salida donde el controlador AM almacena el tipo de clasificación para el controlador.

Un error devuelto desde una devolución de llamada de actualización de estado se trata como un error irrecuperable y conduce a una comprobación de errores del sistema. Esto proporciona a un controlador ELAM la capacidad de indicar cuándo se alcanza un estado fuera de la directiva de AM. Por ejemplo, si un controlador en tiempo de ejecución de AM no se cargó e inicializó, el controlador de inicio anticipado puede producir un error en la devolución de llamada de preparación para descargar para evitar que Windows entre en un estado sin cargar un controlador AM.

Una imagen se trata como desconocida cuando se devuelve un error desde la devolución de llamada inicializar imagen. Se inicializan controladores desconocidos o se omiten sus inicializaciones en función de la directiva del sistema operativo.

Firmas de malware

Los datos de firma de malware están determinados por el ISV de AM, pero deben incluir, como mínimo, una lista aprobada de hashes de controladores. Los datos de firma se almacenan en el registro en un nuevo subárbol "Early Launch Drivers" en HKLM cargado por Winload. Cada controlador AM tiene una clave única en la que almacenar su objeto binario binario grande (BLOB) de firma. La ruta de acceso y la clave del Registro tienen el formato :

HKLM\ELAM\<VendorName>\

Dentro de la clave, el proveedor es libre de definir y usar cualquiera de los valores. Hay tres valores de blob binarios definidos que se miden mediante el arranque medido y el proveedor puede usar cada uno de ellos:

  • Medido
  • Directiva de
  • Configuración

El subárbol de ELAM se descarga después de su uso por Early Launch Antimalware para el rendimiento. Si un servicio en modo de usuario desea actualizar los datos de firma, debe montar el archivo de hive desde la ubicación del archivo \Windows\System32\config\ELAM. Por ejemplo, podría generar un UUID, convertirlo en una cadena y usarlo como una clave única en la que montar el subárbol. El formato de almacenamiento y recuperación de estos blobs de datos se deja hasta el ISV, pero los datos de firma deben estar firmados para que el controlador AM pueda comprobar la integridad de los datos.

Comprobación de firmas de malware

El método para comprobar la integridad de los datos de firma de malware queda hasta cada ISV de AM. Las funciones primitivas criptográficas CNG están disponibles para ayudar a comprobar las firmas digitales y los certificados en los datos de firma de malware.

Error de firma de malware

Si el controlador ELAM comprueba la integridad de los datos de firma y se produce un error en esa comprobación, o si no hay datos de firma, la inicialización del controlador ELAM sigue teniendo éxito. En este caso, para cada controlador de arranque, el controlador ELAM debe devolver "desconocido" para cada devolución de llamada de inicialización. Además, el controlador ELAM debe pasar esta información al componente am en tiempo de ejecución una vez que se ha iniciado.

Descarga del controlador AM

Cuando la devolución de llamada StatusType es BdCbStatusPrepareForUnload, se trata de una indicación para el controlador AM de que se han inicializado todos los controladores de arranque y que el controlador AM debe prepararse para descargarse. Antes de descargar, el controlador AM de inicio temprano debe anular el registro de sus devoluciones de llamada. La desregistración no puede producirse durante una devolución de llamada; en su lugar, tiene que ocurrir en la función DriverUnload, que un controlador puede especificar durante DriverEntry.

Para mantener la continuidad en la protección contra malware y garantizar la entrega adecuada, el motor am en tiempo de ejecución debe iniciarse antes de que se descargue el controlador AM de inicio temprano. Esto significa que el motor am en tiempo de ejecución debe ser un controlador de arranque comprobado por el controlador AM de inicio temprano.

Rendimiento

El controlador debe cumplir los requisitos de rendimiento definidos en la tabla siguiente:

Escenario(s)

Hora de inicio

Hora de finalización

Upper Bound

Evalúe el controlador crítico para el arranque cargado antes de permitir que se inicialice. Esto también incluye devoluciones de llamada de actualización de estado.

Kernel llama de nuevo al controlador antimalware para evaluar el controlador crítico de arranque cargado.

El controlador Antimalware devuelve el resultado de evaluación.

0,5 ms

Evaluación de todos los controladores críticos de arranque cargados

Kernel llama de nuevo al controlador antimalware para evaluar el primer controlador crítico de arranque cargado.

El controlador Antimalware devuelve el resultado de evaluación del último controlador crítico para el arranque.

50 ms

Superficie (controlador y datos de configuración en memoria)

N/D

N/D

128 kb

Inicialización de controladores

Una vez que el controlador ELAM evalúa los controladores de arranque, el kernel usa la clasificación devuelta por ELAM para decidir si inicializar el controlador. Esta decisión viene determinada por la directiva y se almacena aquí en el Registro en:

HKLM\System\CurrentControlSet\Control\EarlyLaunch\DriverLoadPolicy

Esto se puede configurar a través de directiva de grupo en un cliente unido a un dominio. Es posible que una solución antimalware quiera exponer esta funcionalidad al usuario final en escenarios no administrados. Los valores siguientes se definen para DriverLoadPolicy:

PNP_INITIALIZE_DRIVERS_DEFAULT 0x0  (initializes known Good drivers only)
PNP_INITIALIZE_UNKNOWN_DRIVERS 0x1  
PNP_INITIALIZE_BAD_CRITICAL_DRIVERS 0x3 (this is the default setting)
PNP_INITIALIZE_BAD_DRIVERS 0x7

Errores de arranque

Si se omite un controlador de arranque debido a la directiva de inicialización, el kernel sigue intentando inicializar el siguiente controlador de arranque en la lista. Esto continúa hasta que se inicializan todos los controladores o se produjo un error en el arranque porque un controlador de arranque que se omitió era fundamental para el arranque. Si el bloqueo se produce después de iniciar la pila de discos, hay un volcado de memoria y contiene información sobre el motivo o el bloqueo, para incluir información sobre los controladores que faltan. Esto se puede usar en WinRE para determinar la causa del error e intentar corregirlo.

ELAM y arranque medido

Si el controlador ELAM detecta una infracción de directiva (un rootkit, por ejemplo), debe llamar inmediatamente a Tbsi_Revoke_Attestation para invalidar los PCR que indicaron que el sistema estaba en buen estado. La función devuelve un error si hay un problema con el arranque medido, por ejemplo, sin TPM en el sistema.

Tbsi_Revoke_Attestation se puede llamar desde el modo kernel. Extiende LA PCR[12] por un valor no especificado e incrementa el contador de eventos en el TPM. Ambas acciones son necesarias, por lo que la confianza se interrumpe en todas las comillas que se crean desde aquí hacia adelante. Como resultado, los registros de arranque medido no reflejarán el estado actual del TPM durante el resto del tiempo que el TPM está encendido y los sistemas remotos no podrán formar confianza en el estado de seguridad del sistema.