¿Confías en Microsoft Defender? Su propio controlador permite a un atacante desinstalar el antivirus con una sola solicitud

¿Confías en Microsoft Defender? Su propio controlador permite a un atacante desinstalar el antivirus con una sola solicitud

De Windows 7 a Windows 11 25H2: el mismo protocolo, la misma clave y el mismo resultado.

image

Microsoft Defender se puede obligar a eliminar sus propios componentes de protección mediante el controlador estándar de Windows. La técnica funciona en sistemas desde Windows 7 hasta Windows 11 25H2 y no requiere explotar una vulnerabilidad de software ni cargar un controlador de terceros. Al atacante le basta obtener privilegios administrativos con la prerrogativa SeLoadDriverPrivilege, tras lo cual el BTR.sys integrado permite ejecutar operaciones con archivos y el registro desde el núcleo de Windows.

BTR.sys, o Boot Time Removal Tool, forma parte de Microsoft Defender y sirve para limpiar el equipo durante el arranque del sistema. El antivirus recurre al controlador cuando no puede eliminar un archivo malicioso o una entrada del registro en una Windows en ejecución. El archivo ocupado por un proceso puede estar bloqueado, por lo que Defender guarda la tarea, reinicia el equipo y completa la eliminación antes de que los programas vuelvan a ocupar los objetos necesarios.

Los investigadores descubrieron que el mecanismo estándar acepta un conjunto de comandos mucho más amplio del que se necesita para la limpieza antivirus habitual. Una tarea correctamente formada permite que BTR.sys elimine archivos y directorios bloqueados, mueva archivos a ubicaciones arbitrarias, incluido System32\drivers, borre claves y valores del registro y escriba nuevos valores de cualquier tipo en el registro. Todas las operaciones se ejecutan en Ring 0, es decir, a nivel del núcleo de Windows.

El bloqueo habitual de controladores peligrosos aporta poca protección aquí. BTR.sys es necesario para el propio Microsoft Defender, por lo que añadir el componente a la lista de controladores vulnerables bloqueados de Microsoft interrumpiría el funcionamiento del antivirus. Por la misma razón resulta problemático prohibir BTR.sys mediante el mecanismo de control de aplicaciones de Windows, antes conocido como Windows Defender Application Control. Microsoft ahora utiliza para él el nombre «Control de aplicaciones para empresas».

Los investigadores llegaron a la técnica al analizar un equipo comprometido. Parte de la telemetría inicialmente parecía indicar acciones de un programa malicioso, pero la comprobación señaló el funcionamiento normal de Microsoft Defender durante la limpieza del sistema. Tras ello, los especialistas empezaron a estudiar el protocolo interno mediante el cual Defender transmite tareas a BTR.sys.

El protocolo resultó ser cerrado y no documentado. La configuración con los comandos se cifra con el algoritmo RC4, y la clave de 256 bytes está codificada de forma fija en la sección .rdata de cada BTR.sys analizado. La comprobación de 18 versiones diferentes de 64 bits mostró la misma clave en todas las ediciones estudiadas desde Windows 7. Conociendo el formato de los datos y la clave, es posible preparar por cuenta propia una transacción que el controlador acepte como tarea válida.

Para la verificación los investigadores crearon BTR_CLI. El programa primero localiza la biblioteca MpEngine.dll entre los archivos de actualización de Microsoft Defender. El código binario de BTR.sys se encuentra dentro de la biblioteca en el recurso BOOTTIMETOOL, por lo que no hace falta traer el controlador desde fuera. BTR_CLI extrae el archivo incorporado directamente desde los componentes de Defender instalados en el equipo.

A continuación el programa forma el conjunto de comandos cifrados y registra BTR.sys como servicio de controlador mediante una escritura directa en la rama HKLM del registro del sistema. BTR_CLI establece los parámetros Type=1, Start=1 y Group="Boot Bus Extender". En esa forma de registro no se usa el administrador de control de servicios de Windows.

La escritura directa en el registro deja menos huellas habituales en los registros de eventos. Windows suele generar el evento Event ID 7045 al instalar un servicio mediante el mecanismo estándar, pero BTR_CLI evita el administrador de servicios y por ello no aparece la entrada con Event ID 7045. El propio controlador, no obstante, recibe los parámetros necesarios para cargarse.

Tras iniciarse, BTR.sys lee la tarea preparada y ejecuta los comandos en nombre del proceso del sistema con PID 4. Para las herramientas de monitorización, las operaciones con archivos por tanto parecen acciones de la propia Windows y no de un proceso de usuario habitual.

BTR_CLI admite también otro escenario: los comandos se pueden conservar hasta el reinicio siguiente. Durante el arranque de Windows existe un breve intervalo en el que el sistema de archivos ya permite escritura, pero los servicios de Microsoft Defender aún no se han iniciado. Los procesos de protección todavía no han abierto sus archivos ni han tenido tiempo de bloquear el acceso.

BTR.sys se inicia lo bastante pronto para aprovechar ese intervalo. El controlador puede eliminar WdFilter.sys, MsMpEng.exe y otros archivos de Defender antes del inicio completo de la protección antivirus. La eliminación la realiza un componente firmado por Microsoft con privilegios de núcleo, no un programa desconocido desde el espacio de usuario.

El método se demostró en una Windows 11 25H2 completamente actualizada. En el equipo estaba activada la función «Protección contra cambios no autorizados», que debería impedir que programas desactiven Microsoft Defender y modifiquen parámetros protegidos. BTR_CLI pudo eliminar componentes del antivirus incluso con la protección activada, porque las operaciones las ejecutó el controlador estándar durante el arranque temprano de Windows.

No es posible obtener control del equipo únicamente a través de BTR.sys. Para cargar el controlador se requiere una cuenta administrativa con SeLoadDriverPrivilege. BTR_CLI habilita automáticamente la prerrogativa si el derecho ya está asignado a la cuenta actual, pero la herramienta no concede ese derecho a un usuario normal ni eleva privilegios por sí misma.

El requisito de acceso administrativo marcó la postura de Microsoft tras la comunicación de la información al Microsoft Security Response Center. La compañía no clasificó el mecanismo descrito como una vulnerabilidad que requiera una corrección inmediata, ya que el atacante debe haber obtenido previamente privilegios administrativos y la posibilidad de cargar controladores. En el repositorio de BTR_CLI el autor indica que no se planea un parche, aunque Microsoft no ha confirmado públicamente esa decisión.

El método difiere de las conocidas ataques BYOVD, o Bring Your Own Vulnerable Driver, en un principio fundamental. En BYOVD el atacante carga un controlador de un tercero legítimamente firmado con una vulnerabilidad conocida y explota el fallo para acceder al núcleo o desactivar el software de protección. Un controlador descubierto con esa vulnerabilidad se puede añadir a una lista de bloqueo y prohibir su ejecución posterior.

BTR.sys ya forma parte de Microsoft Defender, tiene una firma válida de Microsoft y es necesario para el funcionamiento habitual del antivirus. Los investigadores tampoco emplean un desbordamiento de memoria, una verificación de permisos incorrecta u otra vulnerabilidad clásica. El controlador recibe instrucciones correctamente formadas a través de su propio protocolo y ejecuta operaciones para las que originalmente obtuvo altos privilegios.

Un principio similar ya se ha aplicado contra software de protección, aunque con otros componentes de Windows. La herramienta AvNeutralizer, vinculada al grupo FIN7, utilizó el controlador del sistema ProcLaunchMon.sys junto con el controlador de Process Explorer para interferir en el funcionamiento de las soluciones de protección de puntos finales. BTR.sys amplía la misma idea: al atacante no le hace falta introducir en el sistema un componente de terceros con vulnerabilidades conocidas si un controlador de confianza de Windows ya dispone de las capacidades necesarias.

El propio BTR.sys ya apareció antes en investigaciones de seguridad por otra razón. En febrero de 2021 se corrigió en el controlador la CVE-2021-24092. La vulnerabilidad permitía a un usuario local sin privilegios administrativos sobrescribir archivos arbitrarios mediante un enlace físico colocado en la ruta al registro del controlador. Microsoft publicó la corrección el 9 de febrero de 2021.

BTR.sys permaneció durante mucho tiempo como un objeto poco visible para el análisis debido a características de su funcionamiento. Defender no está obligado a conservar siempre el controlador en disco con un nombre único. El software de protección extrae el componente según sea necesario, puede asignarle un nombre aleatorio, inicia la limpieza y luego elimina el controlador temporal.

Por ahora los investigadores no han encontrado indicios de uso de la nueva técnica en ataques reales. La revisión de muestras recolectadas y de la telemetría no mostró casos en los que actores malintencionados controlaran BTR.sys de la manera descrita. Por ello, la atención principal se centra ahora en indicadores de comportamiento mediante los cuales los sistemas de protección puedan detectar intentos de usar BTR_CLI o herramientas similares.

El primer rastro notable lo deja el flujo de datos alternativo :changelist, donde se escribe la configuración cifrada. Sysmon Event ID 15 FileCreateStreamHash puede registrar un nombre que termine en .sys:changelist. Esa secuencia indica la creación de un flujo de datos adicional junto al archivo del controlador.

El siguiente indicador aparece en el registro. Los eventos Sysmon Event ID 12 y 13 permiten detectar la creación de una clave de servicio donde el parámetro Args contiene :changelist y Group tiene el valor Boot Bus Extender. La combinación resulta especialmente sospechosa si no hay un Windows Event ID 7045 cercano, ya que BTR_CLI registra el controlador directamente vía HKLM y no recurre al administrador de servicios.

BTR.sys también utiliza la ruta fija \SystemRoot\Temp\BootClean.log. El controlador crea un registro independientemente del programa que inició la ejecución. Sysmon Event ID 11 y 23 pueden mostrar la creación y eliminación rápida de BootClean.log por el proceso System con PID 4.

Para el arranque directo en una Windows en ejecución, los investigadores proponen monitorizar otra secuencia. Sysmon Event ID 6 registra la carga del controlador, tras la cual el Event ID 23 puede casi de inmediato anotar la eliminación del archivo por el proceso System con PID 4. Juntos, los eventos dejan un rastro característico de la ejecución de una tarea preparada a nivel del núcleo.

Como medida principal de defensa, los investigadores consideran limitar SeLoadDriverPrivilege. Ese derecho permite cargar controladores del núcleo y no debería asignarse a cuentas administrativas sin necesidad. Sin acceso administrativo y sin la prerrogativa requerida, no es posible usar BTR.sys de la forma descrita.

El código fuente de BTR_CLI se publicó en GitHub bajo licencia MIT. En la sección de lanzamientos están disponibles versiones listas para sistemas de 64 y 32 bits. Al momento de la publicación, Microsoft no había anunciado planes para cambiar la arquitectura de BTR.sys ni para emitir una corrección separada para la técnica descrita.