BlueKeep es una vulnerabilidad informática en la implementación del protocolo de escritorio remoto de Microsoft que permite la ejecución remota de código . BlueKeep afecta a todas las versiones no actualizadas de Windows en la línea de Windows NT , desde Windows 2000 hasta Windows Server 2008 R2 y Windows 7 . En septiembre de 2019, el exploit BlueKeep se puso a disposición del público como parte del proyecto Metasploit [1] .
Según la NSA y Microsoft , BlueKeep tiene el potencial de ser explotado por gusanos informáticos , y Microsoft afirma, según una estimación de 1 millón de dispositivos vulnerables, que dicho ataque podría ser de una escala comparable a los ataques de EternalBlue como NotPetya y WannaCry. [2] [3] [2] [3] [4] .
La vulnerabilidad fue destacada por CVE -ID CVE-2019-0708 [5] .
La vulnerabilidad BlueKeep se descubrió en la implementación del protocolo RDP en algunas versiones del sistema operativo Windows en mayo de 2019. RDP es un protocolo propietario que proporciona acceso remoto a computadoras que ejecutan Windows. BlueKeep no tiene nada que ver con el mecanismo del protocolo en sí y solo afecta su implementación. En particular, la vulnerabilidad afecta a la parte del código encargada de gestionar los llamados canales virtuales . RDP utiliza diferentes circuitos virtuales para transportar diferentes tipos de datos. Por ejemplo, el canal "rdpsnd" transporta audio, mientras que el canal "cliprdr" se usa para transmitir el contenido del portapapeles . Se pueden usar circuitos virtuales adicionales para proporcionar extensiones al protocolo RDP en el nivel de aplicación del usuario. En Windows 2000 , solo estaban disponibles 32 canales virtuales estáticos, y por lo tanto, para sortear esta limitación, se propuso el mecanismo de canales virtuales dinámicos, que permite transmitir varios canales dinámicos en uno estático. Los canales estáticos se crean cuando se crea una sesión RDP y existen hasta que se cierra, mientras que los canales dinámicos se pueden crear y eliminar a petición del cliente. Además, a diferencia de los canales estáticos, que se numeran con un número entero del 0 al 31, los canales dinámicos se identifican por su nombre de cadena . Windows vincula nombres de canales dinámicos a números de canales estáticos en las funciones _IcaBindVirtualChannels y _IcaRebindVirtualChannels contenidas en el controlador termdd.sys [6] .
De forma predeterminada, RDP reserva el número 31 para un circuito virtual interno no dirigido por el usuario denominado "MS_T120". Sin embargo, el controlador no verifica la existencia de un canal virtual personalizado con el mismo nombre. Por lo tanto, un atacante puede crear otro canal dinámico llamado "MS_T120" y vincularlo a un canal estático con un número diferente. En este caso, se asociará al nuevo número un puntero a una instancia ya existente del canal dinámico "MS_T120". Cuando el canal creado por el atacante se cierra, la memoria se libera , después de lo cual el puntero colgante del canal “MS_T120” asociado con el número 31 permanece en el sistema, lo que puede generar errores de acceso a la memoria [6] . La situación se ve agravada por el hecho de que la creación de canales virtuales dinámicos puede ocurrir antes de la etapa de autenticación del usuario, lo que permite que los gusanos informáticos utilicen BlueKeep . Este problema se resuelve parcialmente mediante el uso de Network Level Authentication (NLA) , que apareció en Windows Vista , una opción del protocolo RDP que requiere la autenticación del usuario antes de establecer una conexión [7] .
Microsoft lanzó una actualización de seguridad (incluso para varias versiones de Windows cuyo período de soporte ha llegado a su fin, en particular para Windows XP ) el 14 de mayo de 2019 [4] . La versión corregida del controlador termdd.sys no permite asignar números distintos de 31 a un canal denominado "MS_T120".
El nombre "BlueKeep" para esta vulnerabilidad fue dado por el experto en seguridad informática Kevin Beaumont en su publicación de Twitter .
BlueKeep fue mencionado por primera vez por el Centro Nacional de Ciberseguridad del Reino Unido [8] , el informe de Microsoft se publicó el 14 de mayo de 2019 junto con una actualización de seguridad que corrige esta vulnerabilidad. Posteriormente, el 4 de junio de 2019, la NSA emitió su aviso de seguridad [3] .
El mismo día que se publicó el aviso de la NSA, un equipo de investigadores de la cámara de compensación CERT informó otra vulnerabilidad relacionada con el protocolo RDP en Windows 10 May 2019 Update y Windows Server 2019 . En particular, los investigadores notaron el hecho de que las credenciales de autenticación de nivel de red se almacenan en caché en el sistema del cliente, y el usuario puede volver a acceder a su conexión RDP automáticamente si se interrumpe. Microsoft ha descartado esta vulnerabilidad como un comportamiento intencional, argumentando que se puede deshabilitar mediante el mecanismo de directiva de grupo [9] .
A partir de junio de 2019, se han enviado varios PoC en funcionamiento para aprovechar esta vulnerabilidad. En concreto, McAfee [6] y Sophos [10] [11] presentaron sus versiones . El 22 de julio de 2019, un orador de una empresa china de seguridad de la información presentó más información sobre BlueKeep en la conferencia [12] . El 25 de julio de 2019, los expertos afirmaron que una versión comercial del exploit podría haber estado disponible en ese momento [13] .
El 13 de agosto de 2019, se informó DejaBlue , un nuevo grupo de vulnerabilidades relacionadas con BlueKeep. Además de las versiones anteriores de Windows, DejaBlue también se ha visto afectado por versiones más nuevas del sistema operativo hasta Windows 10 [14] .
El 6 de septiembre de 2019, apareció en el dominio público un exploit para la vulnerabilidad BlueKeep como parte de Metasploit [1] . Sin embargo, la versión inicial del exploit resultó ser extremadamente poco confiable debido a la frecuente ocurrencia de un error BSoD . Una versión revisada estuvo disponible más tarde [15] .
El 2 de noviembre de 2019, se informó el primer ataque masivo de piratas informáticos BlueKeep relacionado con la criptomoneda Monero [ 16] [17] . El 8 de noviembre de 2019, Microsoft confirmó el ataque e instó a los usuarios a actualizar sus versiones de Windows lo antes posible [18] .
La forma más sencilla de explotar la vulnerabilidad de BlueKeep es implementar un ataque DoS basado en ella. Cuando un cliente se conecta, se crea automáticamente en el servidor un canal "MS_T120" asociado con el número estático 31. Usando la PDU inicial de MCS Connect con la solicitud RDP de solicitud de creación de conferencia de GCC , el cliente puede crear canales dinámicos adicionales de su elección, mientras que el servidor devuelve los números de canales estáticos asociados en el mensaje de respuesta RDP. Dado que esta solicitud se produce antes del paso de autenticación del usuario , el atacante no necesita tener una cuenta en el sistema para llevar a cabo con éxito el ataque. Si el cliente especifica "MS_T120" en la lista de canales, el servidor, llamando de nuevo a la función _IcaBindVirtualChannels , vinculará una instancia existente de la estructura del canal a un número distinto de 31. Cuando finalice la sesión, el servidor primero liberará el memoria asignada al cerrar el canal creado por el atacante, después de lo cual intentará liberar la misma memoria cuando intente cerrar el canal número 31. Por lo tanto, hay una doble liberación de memoria dentro del controlador termdd.sys . Debido a que el error ocurre en el espacio del núcleo , bloquea el sistema operativo en un BSoD [19] [20] .
Mucho más peligroso es el uso de BlueKeep para la ejecución remota de código (RCE) . Las estructuras de datos con información sobre canales dinámicos se almacenan en el grupo no paginado . La memoria para los mensajes almacenados en la cola del canal también se asigna en el grupo no paginado. La memoria asignada para un mensaje específico se libera solo cuando se lee del canal, es decir, si el canal no se lee, entonces la memoria se liberará solo en el momento en que se cierra la conexión [21] .
Para realizar RCE, un atacante necesita reasignar y sobrescribir la memoria en la dirección donde se encontraba la estructura del canal "MS_T120" antes de que se liberara la memoria. Para llevar a cabo la ejecución del código malicioso basta con cambiar el valor del puntero a la tabla de métodos virtuales en esta estructura al valor deseado. Esta tarea se ve facilitada en gran medida por la ausencia de un mecanismo de prevención de ejecución de datos (DEP) en el grupo no paginado en las versiones de Windows anteriores a Windows 7 . Esto significa que el código malicioso se puede colocar en la misma dirección que la tabla de métodos virtuales falsos. Tanto el cambio de puntero como la colocación directa de código malicioso se pueden realizar mediante el mencionado mecanismo de envío de mensajes en un canal del que no se leerán [21] .