miércoles, septiembre 16, 2020

Hacking Windows: Introducción a los ataques de “Abuse Active Directory ACLs & ACEs”

Las empresas han tenido y tienen un directorio activo para la organización de los recursos, la gestión de políticas de seguridad, para controlar las acciones, para un montón de finalidades. Es uno de los elementos clave cuando se hace un Ethical Hacking interno. Hay que saber manejarse con él, ya que las posibilidades que éste ofrece son casi infinitas.

Figura 1: Hacking Windows: Introducción a los ataques de
“Abuse Active Directory ACLs & ACEs”

En el pasado, hemos hablado de cómo llevar a cabo enumeración de usuarios con herramientas de Kali Linux a través de llamadas RPC. El pentesting a Directorio Activo abarca un gran número de técnicas, tanto de enumeración como de ataque que son interesantes estudiarlas. Es casi un “must” en los proyectos de Ethical Hacking.

Figura 2: Pentesting con Kali Silver Edition

Antes de hablar del tema del artículo de hoy, el cual es el cómo detectar que tenemos ACLs y ACEs en el Active Directory mal configuradas y que se puede aprovechar en un Hacking Windows de ello para tomar la identidad o privilegios de otro usuario, incluyendo alguna escalada de privilegio a "admin". del dominio, quería ver algunos comandos de interés que se pueden utilizar en las pruebas de hoy.

Figura 3: Hacking Windows: "Ataques a sistemas y redes Microsoft"

Pero antes de nada vamos a ver algunas órdenes útiles, ya que si se compromete un proceso de un usuario de dominio en un pentesting, se pueden ejecutar algunos de los siguientes comandos para recopilar cierta información. Lo primero es saber que el proceso que se ha comprometido pertenece a un usuario que está en dominio y no es un usuario local. Tenemos una serie de variables de entorno que estarán configuradas con información como, por ejemplo:

• USERDOMAIN. Indica el usuario de dominio que somos. Esto es equivalente al “getuid” de un Meterpreter. 
 
• LOGONSERVER. Esta variable de entorno nos dará información sobre el controlador de dominio que se ha utilizado para la autenticación. 
 
• El comando net user [usuario] /domain nos dará información sobre un usuario del dominio concreto. Lógicamente, esa máquina debe estar “atada” al dominio. 
 
• El comando net users /domain proporciona información sobre los usuarios del dominio. 
 
• El comando net groups /domain nos devuelve los grupos que hay en el dominio. 
 
• El comando net group [grupo] /domain devuelve información concreta de un grupo.

Para el artículo de hoy vamos a trabajar con Powersploit y, en particular, con PowerView. De este tipo de conjunto de scripts se habla bastante en el libro de Pentesting con Powershell 2ª Edición.

Abuse: Derechos de Generic All en grupos. A por la escalada

Existen muchas formas de detectar una mala configuración de permisos en el directorio activo. En algunas ocasiones se delegan permisos de forma no segura, quedando una mala configuración de permisos en el directorio activo. Esto es lo que vamos a aprovechar para poder escalar privilegios, metiéndonos en el grupo de administradores de dominio o tomando la identidad de otro usuario con o sin privilegios.

Figura 4: PowerSploit

Dar permisos de control total a un grupo de usuarios o a un usuario en concreto sobre algún objeto de Active Directory puede tener consecuencias graves. Con el comando Get-ObjectAcl de PowerView podemos encontrar este tipo de permisos interesantes.  Si nos fijamos en la siguiente instrucción:

‘Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Admins. del dominio,CN=Users,DC=hc,DC=local" -and $_.SecurityIdentifier -eq “[SID]”}’ 

nos vamos a fijar en el CN de Admins. Del Dominio y vamos a ver si el SID del usuario que hemos comprometido tiene algún tipo de permiso. El SID acabado en 1103 de la Figura 4 pertenece al usuario del proceso que hemos comprometido, es decir, tengo algún tipo de derecho sobre el CN de Administradores del Dominio. La sorpresa viene cuando vemos que ActiveDirectoryRights es ‘GenericAll’
 
Figura 5: Pentesting con PowerShell
Si revisamos la información del usuario ‘pablo’, que es el del SID acabado en 1103, vemos que no pertenece al grupo de Administradores del Dominio, pero tiene la posibilidad de pertenecer, ya que tiene permisos para ello, por una mala configuración. Este es un caso llevado al extremo, quizá no encontremos un usuario concreto, pero sí un grupo al que pertenece el usuario y podamos hacer lo mismo. O en otras ocasiones, no tendrá derechos ‘GenericAll’, pero quizá otro tipo de derechos menos ‘potentes’, pero que pueden dar el mismo resultado. Todo es ir mirando la configuración de las ACLs y los ACEs

Figura 6: Usuario 'pablo' no es Admin, pero podría serlo

Ahora, ejecutamos la instrucción net group “Admins. del dominio” pablo /add /domain y el usuario pertenecerá a los Administradores del Dominio, ya que por la mala configuración detectada se puede hacer. Como se puede ver en la imagen, se ha conseguido una escalada de privilegio de manera sencilla en el dominio.

Figura 7: Hemos hecho al usuario pablo administrador del dominio

Generic All sobre un usuario

En el caso de encontrarte un derecho ‘GenericAll’ sobre un usuario concreto podremos tomar la identidad de dicho usuario de manera sencilla. Puede haber o no escalada, dependiendo de los privilegios que tenga el usuario en el dominio, y de lo bien o mal que haya sido fortificado el servidor Windows Server a la hora de configurar su seguridad.

Figura 8: Windows Server 2016: Administración, Seguridad y Operaciones

La instrucción para consultar este hecho es la siguiente:

‘Get-ObjectAcl -SamAccountName [nombre_usuario] -ResolveGUIDs | ? {$_.ActiveDirectoryRights -eq "GenericAll"}’

De esta forma consultamos los permisos. En este caso lo hacemos sobre el usuario ‘fran’ y observamos que el usuario con SID acabado en 1103, es decir, el usuario ‘pablo’ tiene un control total sobre el objeto ‘fran’. De nuevo una mala configuración que permite, entre otras cosas, cambiar la credencial.

Figura 9: Pablo tiene control total sobre Fran

Para comprobar un posible cambio de credencial, ejecutamos el siguiente comando ‘net user fran [contraseña_nueva] /domain. Lo normal sería no poder hacer esto, pero en este caso, y debido a una mala configuración, obtenemos un premio.

Figura 10: Cambio de contraseña para el usuario Fran

Ahora podemos ejecutar un terminal o un proceso con la identidad del usuario ‘fran’, tal y como puede verse en la siguiente imagen.

Figura 11: Suplantando a Fran para ejecutar un terminal

Write Property & Self-Membership

Estos ‘rights’ son también interesantes. Cuando los encontramos combinados tenemos muchas posibilidades de poder hacer escalada. En este caso hemos vuelto a poner la lupa sobre el CN de Admins. del dominio.

Figura 12: CN=Admins. del dominio

Este tipo de derecho permite al usuario poder escribir y modificar o agregar usuario al grupo, en este caso. Cuando este tipo de situación se detecta podemos pasar al grupo de Administradores del Dominio, como hemos hecho anteriormente. 

Figura 13:  Pasando al grupo de "Administradores del Dominio"

El estar revisando la configuración de las ACLs puede ser un trabajo de tiempo, aunque es fundamental para mantener la seguridad de los sistemas operativos Windows. Para ello tenemos herramientas que nos ayudan a detectar este tipo de situaciones. Además, haciendo uso del lenguaje y filtros de Powershell podemos optimizar este tiempo.

Figura 14: Máxima Seguridad en Windows Gold Edition

Existen más situaciones en las ACLs y ACEs del Directorio Activo que debemos tener en cuenta:

• ForceChangePassword 
 
• WriteOwner sobre un grupo concreto 
 
• GenericWrite sobre un usuario 
 
• WriteDACL + WriteOwner

Como se puede ver es un tema que requiere de conocimiento de cómo funcionan los permisos en un nivel avanzado en el directorio activo y de tener ciertos conceptos identificados. Es un tema bastante interesante y que se puede poner en práctica y es necesario para evaluarlo en un pentesting.

Saludos,

 Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root",  “Pentesting con Powershell”, "Pentesting con Kali Silver Edition" y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica.  Para consultas puedes usar el Buzón Público para contactar con Pablo González - Conseguir 100 Tempos Gratis en MyPublicInbox

Figura 15: Contactar con Pablo González

No hay comentarios:

Publicar un comentario