
Herramienta para descubrir rutas de ataque de Delegación Restringida Basada en Recursos en entornos de Active Directory
Herramienta para descubrir rutas de ataque de delegación restringida basada en recursos en entornos de Active Directory
Basada casi por completo en las maravillosas publicaciones de blog "Wagging the Dog: Abusing Resource-Based Constrained Delegation to Attack Active Directory" de Elad Shamir y "A Case Study in Wagging the Dog: Computer Takeover" de harmj0y. Lee estas dos publicaciones si realmente quieres entender lo que está pasando aquí. Honestamente, yo mismo solo lo entiendo a medias (y eso siendo generoso).
No sé C# bien, así que descubrí cómo comunicarme con un dominio en C# leyendo el código fuente de SharpSploit y SharpView.
Get-RBCD-Thread consultará todos los usuarios, grupos (excluyendo grupos privilegiados como "Domain Admins" y "BUILTIN\Administrators") y objetos de equipo en tu dominio actual y compilará una lista de sus SID. Luego, Get-RBCD-Threaded consultará AD en busca de todas las DACL en los objetos de equipo del dominio. Cada ACE en las DACL se verificará para ver si uno de los SID de usuario/grupo/equipo tiene privilegios "GenericAll", "GenericWrite", "WriteOwner" o "WriteDacl" en el objeto de equipo, o si los SID tienen permisos "WriteProp" en el atributo ms-DS-Allowed-To-Act-On-Behalf-Of-Other-Identity (GUID:3f78c3e5-f79a-46bd-a0b8-9d18116ddc79). Si es así, entonces, amigo mío, ¡estás en camino a un ataque de delegación restringida basada en recursos!
Compila en Visual Studio. Esto usa Parallel.ForEach para acelerar la búsqueda en el objeto DACL, por lo que se requiere .NET v4 como mínimo.
-u|-username=, Nombre de usuario para autenticarse
-p|-password=, Contraseña del usuario
-d|-domain=, Nombre de dominio completo al que autenticarse
-s|-searchforest, Descubrir dominios y bosques a través de relaciones de confianza. Enumerar todos los dominios y bosques
-pwdlastset=, Filtrar equipos según pwdLastSet para eliminar objetos de equipo obsoletos. Si lo configuras en 90, filtrará los objetos de equipo cuya fecha pwdLastSet sea superior a 90 días
-i|-insecure, Forzar conexión LDAP insegura si LDAPS causa problemas de conexión.
-o|-outputfile=, Salida a un archivo CSV. Proporciona la ruta completa y el nombre del archivo.
-h|-?|-help, Mostrar las opciones de ayuda
Ahora puedes especificar el nombre de usuario, la contraseña y el dominio para autenticarte. Si las opciones u/p/d están en blanco, Get-RBCD-Threaded intentará autenticarse en el dominio con el contexto de usuario actual.
-o generará un archivo CSV. Proporciona la ruta completa y el nombre del archivo para guardar la salida.
La búsqueda predeterminada especifica que se use el puerto 636 para forzar LDAPS. Esto puede causar problemas. Si obtienes un error que dice que el servidor no está disponible o algo similar, prueba el indicador "-i" para eliminar el puerto 636 de la cadena de conexión.
Se ha agregado "pwdLastSet" como opción de filtrado. En entornos más grandes puedes obtener muchos objetos de equipo obsoletos que ya no existen como objeto "destino" en la ACL y realmente no se pueden usar para el ataque RBCD (al menos que yo sepa). Configura pwdLastSet en un número de días. Ejemplo: "-pwdlastset=90" filtrará cualquier objeto de equipo de tus resultados cuya fecha pwdLastSet sea mayor o igual a 90 días atrás desde la fecha y hora actual.
Probado en un entorno con más de 20k usuarios, grupos y equipos (más de 60k objetos en total). Get-RBCD-Thread tardó ~60 segundos en completarse. En comparación, mis comandos improvisados de PowerView en este gist para realizar una búsqueda similar se ejecutaron durante varias horas y nunca se completaron.
Esta herramienta no realizará el ataque de delegación por ti. Necesitarás leer los blogs de Elad Shamir y harmj0y para descubrir cómo hacerlo. Esto solo te ayudará a encontrar posibles objetivos para el ataque RBCD.
Ejemplo de uso desde mi laboratorio de AD:

Esta herramienta no hace más que consultar Active Directory mediante consultas LDAP, lo que puede no ser fácil de detectar. Netflow podría usarse posiblemente para detectar grandes cantidades de consultas LDAP/tráfico hacia un sistema.
Otra forma posible de detectar esto es mediante cuentas honeypot. La idea sería crear un objeto de equipo al que algún usuario/grupo tenga privilegios de escritura. El ataque RBCD se basa en modificar un objeto de equipo y luego delegar tickets de Kerberos hacia él. Los posibles puntos de detección para el objeto de equipo honeypot podrían ser:
Creé esta herramienta para ayudarme en pruebas de penetración. Sin embargo, defensores/equipos azules/administradores de sistemas pueden usarla fácilmente para ayudar a encontrar debilidades en sus entornos y (con suerte) tomar medidas para remediarlas.