Red de conocimiento informático - Problemas con los teléfonos móviles - Análisis y replicación de vulnerabilidades de eliminación de privilegios de dominio de Windows

Análisis y replicación de vulnerabilidades de eliminación de privilegios de dominio de Windows

Cuando los Servicios de Certificados (CS) de Active Directory para sistemas Windows se ejecutan en un dominio, debido a que el atributo dNSHostName en la cuenta de la máquina no es único, un usuario normal en el dominio puede cambiarlo a control de dominio con alta atributos de privilegios de la cuenta de la máquina y luego obtiene la cuenta de la máquina de control de dominio de los Servicios de certificados de Active Directory, elevando así a un usuario normal en el dominio a privilegios de administrador de dominio. La vulnerabilidad fue descubierta, analizada públicamente y prueba de concepto por primera vez por el investigador de seguridad Oliver Lyak, y Microsoft la parchó en la actualización de seguridad de mayo de 2022.

El alcance del impacto es amplio, incluidos Win8.1, Win10, Win11, Win Server 2012 R2, Win Server 2016, Win Server 2019, Win Server 2022, etc. Para obtener números de versión detallados, consulte Anuncio oficial de Microsoft (enlace de referencia).

Sistema operativo:

Win10, Win Server 2016, Kali-linux-2022.1

Herramientas de análisis:

ADExplorer, Certipy, bloodAD, impacket, PKINITtools.

p> Hay muchos artículos en línea sobre el análisis y la reimpresión de esta vulnerabilidad, pero la mayoría de los "pozos" que encontró el autor al analizar y reimprimir esta vulnerabilidad no se mencionaron. Por eso hoy compartiré algunos de los problemas que encontré y cómo resolverlos.

Primero, configure la dirección IP de Win Server 2016 en una dirección IP fija y luego configure su dirección de servidor DNS. Al realizar la prueba, el nombre de la computadora del servidor de control de dominio es dc, la IP es 192.168.220.160 y la puerta de enlace es 192.168.220.1

El siguiente paso es instalar el entorno de control de dominio. La instalación del entorno de control de dominio en Win Server 2016 es relativamente simple. Durante la instalación, inicie sesión como administrador superadministrador, luego seleccione Agregar roles y funciones en la interfaz del Panel de control de Service Manager, siga las opciones predeterminadas en el asistente emergente. y haga clic en "Siguiente" "Eso es todo. Tenga en cuenta que en las precauciones del servidor, marque "Servicios de dominio de Active Directory" en la interfaz de la función del servidor, como se muestra en la siguiente figura:

Después de instalar el servicio de dominio, seleccione "Este servidor se promociona como controlador de dominio", como se muestra en la siguiente figura: Luego seleccione "Agregar nuevo bosque" para especificar el nombre de dominio raíz. La configuración de prueba del autor es: fenghuotai.local, como se muestra en la siguiente figura:

Otras opciones se configuran de acuerdo con la configuración predeterminada. Eso es todo. Además, el servidor DNS se instalará automáticamente durante el proceso de instalación. Después de que la instalación sea exitosa, deberá reiniciar la computadora.

El último paso es instalar el servicio de certificado de dominio. Aún en la interfaz del panel del administrador de servicios, seleccione Agregar roles y funciones, siga las opciones predeterminadas en el asistente emergente y simplemente "Siguiente". Tenga en cuenta que en la interfaz de la función del servidor, debe marcar "Servicios de certificados de Active Directory" y luego. seleccione En el paso del servicio de rol, debe seleccionar adicionalmente "Registro web de autoridad de certificación", como se muestra en la siguiente figura:

Después de que el servicio de certificado de dominio se haya instalado correctamente, debe configurar el servicio de certificado de dominio. , como se muestra en la siguiente figura:

Al configurar los servicios de certificados de dominio, debe seleccionar "Registro web de autoridad certificadora", como se muestra en la siguiente figura:

Al configurar el certificado de dominio servicios, debe seleccionar "Servicios de certificados de Active Directory".

servicio, debe seleccionar "Autoridad certificadora" y "Registro web de autoridad certificadora" como se muestra en la siguiente imagen:

Finalmente, seleccione "Certificado empresarial" (no puede seleccionar esta opción si no es un dominio miembro). (Si no es miembro del dominio, no puede seleccionar esta opción, pero el administrador de la cuenta predeterminada sí puede hacerlo), como se muestra a continuación:

Se pueden configurar otras opciones de forma predeterminada.

Después de instalar con éxito el Servicio de control de dominio y el Servicio de certificado de dominio, seleccione "Centro administrativo de Active Directory" en el menú Herramientas del panel del Administrador de servicios, luego cree una nueva cuenta de usuario en el grupo Usuarios e ingrese la contraseña. y seleccione "La contraseña nunca caduca" para simular una nueva cuenta de usuario. Prueba de cuenta (busque el método para unirse al dominio usted mismo, no existe una configuración especial para este paso). El entorno de prueba ya está configurado.

Después de iniciar sesión en la computadora Win10 usando la cuenta de usuario de dominio testcve, use la herramienta ADExplorer para analizar la causa de la vulnerabilidad.

La herramienta ADExplorer debe iniciar sesión primero al analizar utilizando la cuenta de usuario de dominio normal testcve para iniciar sesión en fenghuotai. Dominio local, como se muestra en la siguiente figura:

Después de iniciar sesión correctamente, expanda "DC=fenghuotai, DC=local" en el lado izquierdo del control del árbol, luego expanda "CN=Computers" y "CN =Usuarios", Puede ver que el nombre de dominio recién agregado es CN=TESTMACHINE, la cuenta de la máquina de la computadora CN=TESTMACHINE win10 y la cuenta de usuario del dominio común CN=testcve. Estas dos cuentas contienen muchos valores de atributos, como se muestra en la siguiente figura. :

Para conocer el significado específico de cada atributo, consulte el documento de ayuda oficial de Microsoft. Este análisis solo se centra en las vulnerabilidades relacionadas con los atributos. De forma predeterminada, las cuentas de usuario del dominio pueden solicitar certificados de usuario y las cuentas de máquina de la computadora del dominio pueden solicitar certificados de máquina, los cuales permiten la autenticación del cliente.

Amplíe el grupo de computadoras y seleccione la computadora CN=TESTMACHINE que acaba de unirse al dominio. Uno de los atributos dNSHostName dice testmachine.fenghuotai.local, que es el nombre de la computadora Win10 que acaba de unirse al dominio. . Al solicitar un certificado de cuenta de máquina del Servicio de certificados de dominio, este atributo se utiliza para identificar la cuenta de máquina de la computadora especificada. Es decir, el contenido de dNSHostName está vinculado al certificado de máquina que obtendrán las cuentas de máquina con contenido de dNSHostName diferente. diferentes certificados. Además, el contenido del atributo sAMAccountName es TESTMACHINE$, que se utiliza como el nombre de cuenta de la máquina de la computadora, como se muestra a continuación:

Entonces, ¿se puede cambiar el contenido de dNSHostName al del control de dominio? ¿servidor? Si es así, ¿no sería posible falsificar la cuenta de máquina del servidor de control de dominio? Si intenta cambiar el contenido a dc.fenghuotai.local, recibirá un mensaje de error de cambio fallido, como se muestra a continuación:

¿Por qué ocurre este error? Debido a que el atributo dNSHostName está asociado con otro atributo servicePrincipalName, el controlador de dominio actualiza automáticamente el valor del atributo servicePrincipalName después de cambiar el atributo dNSHostName. Esto provocará un conflicto con el atributo servicePrincipalName de la cuenta de la máquina del servidor de control de dominio original.

El contenido del atributo servicePrincipalName del atributo de cuenta de máquina TESTMACHINE$ se muestra a continuación:

Sin embargo, si elimina los dos contenidos del atributo servicePrincipalName del atributo de cuenta de máquina TESTMACHINE$, el atributo servicePrincipalName de El atributo de cuenta de máquina TESTMACHINE$ entrará en conflicto y el cambio se realizará correctamente.

Después de eliminar estos dos elementos, el contenido del atributo servicePrincipalName se muestra a continuación:

Sin embargo, si elimina los dos elementos en el atributo servicePrincipalName, RestrictedKrbHost/testmachine.fenghuotai. local y HOST /testmachine.fenghuotai.local, cambiar el contenido del atributo dNSHostName a dc.fenghuotai.local no causará un conflicto y el cambio se realizará correctamente.

Después de eliminar estos dos contenidos del atributo servicePrincipalName, se muestra como se muestra en la siguiente figura:

El contenido del atributo dNSHostName se cambió con éxito al servidor de control de dominio dc.fenghuotai .local. local, como se muestra en la siguiente figura:

En este punto, la cuenta de máquina ordinaria TESTMACHINE ha solicitado el certificado de la cuenta de máquina de control de dominio de los Servicios de certificados de Active Directory, lo que provoca que los derechos de usuario ordinario del dominio actualizarse a derechos de administrador de dominio.

Según los resultados del análisis de esta vulnerabilidad, para explotar con éxito esta vulnerabilidad, se deben cumplir las siguientes condiciones:

1. Versión del sistema del servidor de control de dominio

Win8.1, Win10, Win11, Win Server 2012 R2, Win Server 2016, Win Server 2019, Win Server 2022, etc. Para obtener números de versión detallados, puede consultar el anuncio oficial de Microsoft (enlace de referencia).

2. Permisos de cuentas de usuario ordinarias en el dominio

Es necesario obtener los permisos de al menos una cuenta de usuario ordinaria en el dominio, y la cuenta debe tener los permisos correspondientes. para atributos como dNSHostName. De forma predeterminada, las cuentas de usuarios habituales tienen este permiso.

3. Servicio de Certificado Empresarial

El Servicio de Certificado Empresarial se implementa en un dominio y permite que las cuentas de computadora administradas soliciten certificados de autenticación de computadora.

El proceso de creación del entorno no se describirá en detalle. Solo consulte el proceso de análisis. Seleccione Kali-linux-2022.1 como máquina de ataque. Necesita instalar herramientas adicionales Certipy, bloodAD, unpacket. y PKINITtools

Primero, debe obtener información básica sobre el servidor de control de dominio y el servidor de certificados de dominio. Ejecute el comando de PowerShell Get-ChildItem Cert:\LocalMachine\Root/ en el host controlado para obtener la dirección del servidor de certificado de dominio fenghuotai-DC-CA, la dirección del servidor de control de dominio fenghuotai.local y el nombre de la computadora de control de dominio es dc, como como se muestra en la siguiente figura:

Configure la dirección del servidor DNS de la máquina atacante en la dirección del servidor DNS de control de dominio, o configure la IP de control de dominio en el archivo de hosts local para que sea consistente con el nombre de dominio del servidor de certificados. De lo contrario, se producirán errores como la imposibilidad de resolver el nombre de dominio.

Configure el contenido del archivo kali hosts, como se muestra en la siguiente figura:

Una vez que el entorno de reproducción esté listo, primero solicite un certificado utilizando una cuenta de usuario normal en el dominio principal, verifique el inicio de sesión y Pruebe si el entorno de reproducción es anormal. Solicite el comando de certificado certipy req 'fenghuotai.local/testcve:1qaz3edc.@dc.fenghuotai.local' -ca fenghuotai-DC-CA -template User

Es posible que encuentre un tiempo de espera de NETBIOS, ejecútelo nuevamente Solicite un comando de certificado y ejecute el comando de solicitud de certificado nuevamente.

Después de solicitar el certificado de cuenta de usuario, ejecute el comando certipy auth -pfx testcve.pfx para verificar el certificado y obtener su valor hash NT, como se muestra en la siguiente figura:

Obtener con éxito el valor hash de NT Indica que no hay ningún problema con el entorno de prueba. Si encuentra errores (especialmente después de restaurar la máquina virtual de control de dominio), significa que algunos servicios de control de dominio no se iniciaron correctamente. Debe reiniciar el servidor de control de dominio y luego reiniciar el servicio del Centro de distribución de claves Kerberos (kdc) después de iniciar la entrada del servicio en el panel o manualmente. No sé si este error se encontrará en la práctica, pero si es así, los exploits posteriores no funcionarán.

Utilice el comando python bloodyAD.py -d fenghuotai.local -u testcve -p '1qaz3edc.' --host 192.168.220.160 addComputer pwnmachine 'CVEPassword1234 ' para crear una nueva cuenta de máquina llamada pwnmachine. La contraseña es CVEPassword1234, como se muestra a continuación:

Luego use el comando python bloodyAD.py -d fenghuotai.local -u testcve -p '1qaz3edc.py -d fenghuotai.local -u testcve -p '1qaz3edc. ' --host 192.168.220.160 setAttribute 'CN=pwnmachine, CN=Computers, DC=fenghuotai, DC=local' dNSHostName '["dc.fenghuotai.local"]', establezca su atributo dNSHostName en el atributo del servidor del controlador de dominio, como sigue Como se muestra en la figura:

Después de que la configuración sea exitosa, use el comando certipy req 'fenghuotai.local/pwnmachine certificado. De hecho, lo que está solicitando es el certificado del controlador de dominio dc$. , como se muestra en la siguiente figura:

Después de obtener el certificado de la cuenta de la máquina del controlador de dominio, use el comando certipy auth -pfx ./dc.pfx -dc-ip 192.168.220.160 para realizar la verificación de inicio de sesión y obtenga su valor hash NT, como se muestra en la siguiente figura:

Luego use el script secretsdump.py en el directorio de ejemplos de la herramienta impacket, el comando es python3 secretsdump.py 'fenghuotai.local/dc$ @dc.fenghuotai.local' -hashes: d396bce5a7bf19ed7bfa58b8f923357a, para obtener los hashes de todas las cuentas del dominio, como se muestra en la siguiente figura:

Por supuesto, también puedes utilizar la herramienta PKINITtools para obtener el control de dominio shell de máxima autoridad.