¿Cómo identificar y neutralizar la vulnerabilidad CVE-2020-1472 (ZeroLogon / Netlogon)?

ZeroLogon, nueva vulnerabilidad del protocolo Netlogon

El martes 11 de agosto de 2020, Microsoft publicó la alerta de seguridad sobre la vulnerabilidad CVE-2020-1472 «Elevación de privilegios en Netlogon», también conocida como «ZeroLogon» (consulte el boletín).

Esta vulnerabilidad afecta al protocolo remoto Netlogon (también llamado MS-NRPC para Microsoft Netlogon Remote Protocol) utilizado por las máquinas conectadas a un dominio de Windows.

¿Qué es el protocolo Netlogon?

El protocolo Netlogon se utiliza al crear canales de comunicación seguros para operaciones relacionadas con la autenticación de un activo en un dominio de Windows. Esto incluye, por ejemplo, la conexión a máquinas remotas conectadas al dominio, así como la actualización de la contraseña de una cuenta de usuario del dominio.

El protocolo Netlogon utiliza el puerto TCP 135, así como puertos RPC (Remote Procedure Call) dinámicos, es decir, puertos abiertos temporalmente en el rango TCP 49152-65536, o mediante intercambios en un canal SMB (puerto TCP 445).

¿Cómo funciona un intercambio Netlogon?

Un intercambio NetLogon se desarrolla de la siguiente manera:

  1. El cliente genera una palabra aleatoria de 8 bytes, denominada ChallengeClient, y envía esta palabra al servidor Netlogon, por ejemplo, un controlador de dominio.
  2. El servidor genera una palabra aleatoria de 8 bytes, denominada ChallengeServeur, y envía esta palabra al cliente.
  3. El cliente y el servidor calculan una clave de sesión, denominada CléSession, a partir de dos variables (un secreto compartido llamado EmpreintePassClient, huella de la contraseña del usuario en el dominio, y una palabra de 16 bytes llamada ChallengeClientServeur, formada por la concatenación de ChallengeClient y ChallengeServeur) y dos funciones (una función de cálculo de huella MD4 y una función de derivación de clave denominada KDF, que toma como argumento una clave y un desafío, y luego calcula el HMAC_SHA256(clave, desafío), conservando los 16 primeros bytes). La fórmula es: CléSession = KDF(EmpreintePassClient, ChallengeClientServeur).
  4. A continuación, el cliente cifra ChallengeClient con CléSession, mediante AES-128-CFB8 (cifrado AES con una clave de 128 bits, en modo «retroalimentación» / Cipher Feedback con 8 bits por iteración) y obtiene su identificador IdentifiantClient.
  5. El cliente envía su identificador IdentifiantClient al servidor.
  6. El servidor, que ya dispone de CléSession y de ChallengeClient, verifica que es capaz de descifrar IdentifiantClient.
  7. El servidor cifra a su vez su desafío ChallengeServeur con CléSession, también mediante AES-128-CFB8, y obtiene así su identificador IdentifiantServeur.
  8. El servidor envía su identificador IdentifiantServeur al cliente.
  9. El cliente, que también dispone de CléSession y de ChallengeServeur, verifica que es capaz de descifrar IdentifiantServeur.
  10. La comunicación segura queda entonces establecida.

¿En qué consiste la vulnerabilidad Zerologon CVE-2020-1472?

La vulnerabilidad Zerologon CVE-2020-1472 está relacionada con el uso de la técnica de cifrado AES-128-CFB8.

AES-128-CFB8 añade 16 bytes al principio del mensaje que se va a cifrar, mediante lo que se denomina un «vector de inicialización» generado aleatoriamente, también conocido como «IV» (por sus siglas en inglés, Initialization Vector). Una vez obtenido este vector, AES-128-CFB8 consiste en cifrar el conjunto «IV + mensaje» con una clave, iterando byte a byte sobre todo el mensaje mediante operaciones de cifrado AES y XOR sucesivas.

El investigador responsable del descubrimiento de la vulnerabilidad CVE-2020-1472, Tom Tervoort, identificó un problema en la implementación de AES-128-CFB8 dentro de Netlogon: el vector de inicialización se fija sistemáticamente en 16 bytes nulos (0x00). Por lo tanto, el vector de inicialización no es aleatorio en este caso, lo cual infringe las buenas prácticas de criptografía.

La elección de este valor de 16 bytes nulos (0x00) como vector de inicialización provoca que, si el mensaje a cifrar está compuesto únicamente por bytes nulos (0x00), el mensaje cifrado resultante mediante AES-128-CFB8 también puede terminar compuesto íntegramente por bytes nulos (0x00). Esto depende únicamente del valor de la clave de cifrado utilizada y, si esta es aleatoria, ocurre estadísticamente 1 de cada 256 veces.

Sin embargo, en el caso del protocolo NetLogon, el cliente tiene el control sobre el mensaje que se va a cifrar: se trata de ChallengeClient. Este mensaje puede fijarse arbitrariamente en 8 bytes nulos (0x00). Del mismo modo, CléSession, que se utiliza para cifrar ChallengeClient con AES-128-CFB8, se supone que es aleatoria por diseño. Nos encontramos así en las condiciones exactas indicadas anteriormente, y el cifrado de ChallengeClient mediante CléSession y AES-128-CFB8 produce entonces estadísticamente un mensaje de 8 bytes nulos 1 de cada 256 veces.

La vulnerabilidad CVE-2020-1472 consiste simplemente en «intentar» enviar un mensaje IdentifiantClient compuesto por 8 bytes nulos hasta que el servidor lo acepte. Con una probabilidad de éxito de 1 entre 256, y mediante un script, esta acción se lleva a cabo en solo unos segundos.

En resumen, la CVE-2020-1472 se basa en un fallo de implementación criptográfica debido a un vector de inicialización fijado en 16 bytes nulos, de ahí su apodo «ZeroLogon».

¿Qué activos están afectados por la vulnerabilidad CVE-2020-1472?

Los sistemas afectados por ZeroLogon / CVE-2020-1472 son los activos Windows Server 2008 / 2012 / 2012 R2 / 2016 / 2019 / Server 1903, 1909, 2004 que no han instalado la actualización de seguridad del 11 de agosto de 2020, prestando especial atención a los sistemas que actúan como controladores de dominio.

La lista detallada de estos elementos está disponible en el sitio web de la Agencia Nacional de Seguridad de los Sistemas de Información.

¿Cuál es el impacto de la vulnerabilidad ZeroLogon / CVE-2020-1472?

La vulnerabilidad ZeroLogon permite a un usuario malintencionado tomar el control total y remoto de un controlador de dominio, o modificar la contraseña de un usuario del dominio.

Por lo tanto, los controladores de dominio deben tratarse con prioridad en el despliegue de las últimas actualizaciones de seguridad para neutralizar esta vulnerabilidad.

¿Qué facilidad de ataque presenta ZeroLogon / CVE-2020-1472?

Existen varios exploits disponibles de forma gratuita y pública en Internet, incluido este en GitHub.

Kevin Beaumont, analista del «Microsoft Threat Intelligence Global Engagement & Response», indicó haber detectado intentos de explotación de esta vulnerabilidad desde el 26 de septiembre de 2020, confirmando así la probabilidad de sufrir un ataque mediante ZeroLogon.

¿Cómo neutralizar ZeroLogon / CVE-2020-1472?

Microsoft ha puesto a disposición las siguientes actualizaciones de seguridad:

  • KB4571729 / KB4571719 para Windows Server 2008 R2
  • KB4571736 / KB4571702 para Windows Server 2012
  • KB4571703 / KB4571723 para Windows Server 2012 R2
  • KB4571694 para Windows Server 2016
  • KB4565349 para Windows Server 2019
  • KB4565351 para Windows Server versión 1903 y versión 1909
  • KB4566782 para Windows Server versión 2004

Microsoft recomienda aplicar estas actualizaciones priorizando los controladores de dominio, e insta además a configurar las conexiones de canales seguros de Netlogon siguiendo el procedimiento definido aquí.

Cyberwatch recomienda asimismo consultar el boletín de la Agencia Nacional de Seguridad de los Sistemas de Información CERTFR-2020-ALE-020 y realizar una búsqueda de la vulnerabilidad en su sistema de información a la mayor brevedad, priorizando al menos los controladores de dominio.

Para profundizar

Para obtener más información técnica sobre la vulnerabilidad, también puede consultar la publicación de Tom Tervoort en el sitio web de Secura, o el episodio del podcast NoLimitSecu dedicado al tema.

Gracias por enviar el formulario.