🛡️ KERBRUTE 🛡️
¿Qué es Kerbrute?
Kerbrute es una herramienta utilizada para enumerar cuentas de usuario válidas de Active Directory que utilizan preautenticación Kerberos. También, esta herramienta puede ser usada para ataques de contraseñas tales como fuerza bruta de contraseñas, enumeración de nombres de usuario, rociado de contraseñas, etc.
Kerbrute ha sido utilizado durante muchos años por probadores de penetración durante pruebas de penetración internas.
Introducción a la autenticación Kerberos
El servicio Kerberos se ejecuta en su puerto por defecto que es el 88 en un sistema controlador de dominio. Este servicio viene en Windows y el sistema Linux, así donde se utiliza para implementar procesos de autenticación de forma más segura en un entorno de Active Directory.
Descargar Kerbrute
Kerbrute se puede descargar desde su página oficial de lanzamiento del repositorio de github. Fue modificada por última vez en diciembre de 2019. El código fuente de la herramienta también está disponible, y también está disponible para sistemas windows y otra arquitectura Linux. Para simplificar, vamos a descargar kerbrute_linux_amd64 compilado para el kali Linux que va a ser sistema atacante para la demostración. La herramienta se puede descargar desde el siguiente enlace.
📚 Enlace de descarga: https://github.com/ropnop/kerbrute/releases/tag/v1.0.3
Lectura recomendada
Link de Compra en Amazon:
🛒 https://amzn.to/41wPabe
Contenido del libro:
Libro introductorio para aprender, desde cero, la mecánica del pentesting y del hacking ético sin meterte en líos; y para aprender paso a paso a utilizar Kali en pentesting.
Kerbrute help – Lista de características disponibles.
Una vez descargada la herramienta en la máquina kali, podemos listar las opciones y características disponibles ejecutando el siguiente comando:
./kerbrute
Nota: Al descargar el archivo original su nombre es kebrute_linux_amd64, en nuestro caso, hemos modificado el nombre para mejorar su lectura téngalo en cuenta a la hora de ejecutarlo ya que el comando sería: ./kerbrute_linux_amd64
En la imagen de abajo, podemos ver que las herramientas pueden realizar varias tareas como fuerza bruta, bruteuser, spray de contraseñas, userenum y detección de versiones. Además, hay algunas banderas disponibles también que puede ser muy útil durante las pruebas de penetración.
Durante la evaluación interna, muchas veces nos encontramos con características de seguridad y la política de contraseñas por lo que el aumento y la disminución de los hilos nos puede ayudar a hacer ataques de contraseña más sigiloso.
Recomendamos encarecidamente el uso de todas las banderas disponibles que vienen con kerbrute para obtener experiencia práctica y analizar los resultados.
Encontrar usuarios válidos / Enumeración de usuarios
Durante las pruebas de penetración internas, especialmente en el entorno Active Directory, nuestro objetivo inicial es encontrar usuarios válidos.
Una vez que encontramos usuarios potenciales de la página web de la empresa o cualquier otro tipo de configuración errónea, entonces podemos verificar si esos usuarios tienen cuentas válidas o no utilizando kerbrute. Para ello, podemos hacer una lista de usuarios potenciales que hemos obtenido de OSINT o de cualquier otra manera, o podemos utilizar algún diccionario de nombres.
Para la demostración, he utilizado la biblioteca de diccionarios Seclists.
A continuación, proporcionamos la lista de usuarios y seleccionamos la opción userenum.
Luego, proporcionamos la dirección IP del controlador de dominio y el nombre de dominio, que en nuestro caso es cicada.htb.
La herramienta comprobará cada cuenta de usuario y verificará si esos usuarios existen en el dominio y utilizan la preautenticación Kerberos. En la siguiente imagen podemos ver que guest y administrator aparecen como usuarios válidos utilizando la autenticación Kerberos.
Aquí podemos pensar en varios ataques Kerberos como SPN y fuerza bruta Kerberos, etc.
./kerbrute userenum --dc [Ip Víctima] -d [Nombre del Domain Controler] [Diccionario de nombres]
./kerbrute userenum --dc 10.10.11.35 -d cicada.htb /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt
Kerbrute Password Spray
Supongamos que hemos obtenido una contraseña (Contraseña@1) durante la fase de enumeración que puede ser cualquier cosa como una contraseña filtrada de OSNIT, una mala configuración del servicio, un recurso compartido smb, ftp, etc., pero no conocemos al verdadero propietario de la contraseña obtenida.
En la fase de enumeración de nombres de usuario, encontramos dos usuarios válidos ahora podemos probar las contraseñas obtenidas con sus cuentas.
El rociado de contraseñas es como la fuerza bruta de contraseñas, donde probamos cada contraseña contra usuarios individuales, pero en el rociado de contraseñas, usamos una sola contraseña y la probamos contra todas las cuentas válidas. Para ello, creamos una nueva lista de usuarios y la guardamos como users.txt.
A continuación, utilizamos esta vez la opción passwordspray y proporcionamos la dirección IP del controlador de dominio y el nombre de dominio junto con una lista de usuarios válida y obtuvimos la contraseña.
En la siguiente imagen, podemos ver que cuentas de usuarios coinciden con la contraseña obtenida. Ahora podemos intentar iniciar sesión a través de RDP, winrm y el servicio smb. Para reproducir la prueba de concepto, por favor considere seguir el siguiente comando.
./kerbrute passwordspray --dc 10.10.11.35 -d cicada.htb users.txt Contraseña@1
Password Bruteforce
A continuación, probaremos la fuerza bruta de contraseñas utilizando contraseñas potenciales contra un único usuario. En la fuerza bruta de contraseñas, probamos todas las contraseñas potenciales contra un único usuario. Aquí estamos usando una lista común de contraseñas, pero se puede probar con diferentes listas de contraseñas para obtener el resultado esperado. La mutación de contraseñas o listas de palabras personalizadas pueden ser fructíferas cuando nos encontramos con pruebas de penetración internas.
En primer lugar, crearemos una contraseña potencial para realizar un ataque de fuerza bruta contra el dominio.
Creamos una lista de contraseñas y la guardamos como pass.txt Luego utilizamos la opción bruteuser esta vez y proporcionamos la dirección IP del controlador de dominio, el nombre de dominio y la lista de contraseñas potenciales y el nombre de usuario (guest).
La herramienta mostrará el signo + cuando se active con la contraseña válida. Si usted está en un compromiso en el mundo real, entonces tenga cuidado acerca de la política de bloqueo de cuentas, ya que puede afectar el negocio de nuestro cliente.
Es muy común experimentar este problema durante las pruebas de penetración y es posible que tenga que esperar de 30 minutos a una hora para realizar el ataque de nuevo o en algún momento el administrador del sistema tiene que desbloquearlo manualmente.
Por lo general, bloquea la cuenta después de 5 intentos, pero algunas empresas lo fijan en 3 intentos también. En la respueta, podemos ver que la contraseña del usuario guest coincide con una contraseña de la lista de contraseñas que proporcionamos. Ahora, podemos utilizar credenciales válidas para iniciar sesión a través de RDP, psexec y evil-winrm. Para reproducir la prueba de concepto sigue el siguiente comando.
./kerbrute bruteuser --dc 10.10.11.35 -d administrator.htb pass.txt guest
Combinaciones de nombre de usuario y contraseña de Bruteforce
En este ejemplo, crearemos una lista combinada de nombre de usuario y contraseña e intentaremos verificar si coinciden. Para ello, creamos una lista de nombres de usuario y contraseñas y la guardamos como userpass.txt e intentamos verificarla utilizando la tubería (|) junto con la bandera ( – ).
Aquí hemos proporcionado la lista userpass, la dirección IP del controlador de dominio y el nombre de dominio como hicimos en los ataques anteriores. La ejecución del comando verificó dos cuentas de usuario. Para reproducir la prueba de concepto siéntase libre de repetir el proceso con el siguiente comando.
cat userpass.txt | ./kerbrute --dc 10.10.11.35 -d adminsitrator.htb bruteforce -
Guardar los resultados
Guardar la salida siempre es saludable, tanto si estamos resolviendo CTF como en combates del mundo real. Si guardamos la salida, no tendremos que ejecutar el comando una y otra vez para comprobar los resultados. Además, es beneficioso, especialmente en un proyecto del mundo real donde tenemos que proporcionar resultados a nuestros clientes en los informes de pruebas de penetración.
Podemos guardar la salida de nuestros hallazgos utilizando la bandera -o proporcionando el nombre del archivo de salida. En este ejemplo, hemos guardado el resultado como result.txt. Para reproducir la prueba de concepto, siga el siguiente comando donde añadimos la bandera -o en el comando utilizado anteriormente.
./kerbrute userenum --dc 10.10.11.35 -d administrator.htb users.txt -o result.txt
Verbose mode
También podemos utilizar el modo verbose utilizando la bandera -v en nuestro comando. Las funciones verbose nos dan una visión de la herramienta con cada cuenta de usuario. Aquí en el ejemplo de abajo, podemos ver que cuando kerbrute es incapaz de verificar la cuenta Kerberos, está mostrando que el usuario no existe.
En este ejemplo, estamos intentando realizar la enumeración de nombres de usuario utilizando el mismo comando que utilizamos durante la fase de enumeración de nombres de usuario añadiendo la bandera -v para obtener un resultado detallado. Para reproducir la prueba de concepto, pruebe el siguiente comando.
./kerbrute userenum --dc 10.10.11.35 -d administrator.htb users.txt -v
Mitigación
Existen múltiples factores y formas que pueden ayudar a endurecer el sistema.
🔹 Seguir una política de contraseñas fuertes y recomienda evitar el uso de contraseñas comunes.
🔹 Aplicar una política de bloqueo de cuentas para mitigar los ataques de fuerza bruta.
🔹 Utilizar la autenticación de dos factores: Estas debe utilizarse para todas las cuentas de usuario.
🔹 Se recomienda a las organizaciones educar regularmente a los empleados sobre las posibles amenazas y ataques.
🔹 También recomienda realizar evaluaciones de pruebas de penetración dos veces al año.