Guía: Impacket y Kerbrute para Pentesting de Active Directory

Domina dos herramientas esenciales para la enumeración y explotación en entornos de red Windows.

Impacket y Kerbrute

En el pentesting de entornos de red Windows y Active Directory, la capacidad de enumerar usuarios, autenticarse y ejecutar comandos de forma remota es crucial. Dos herramientas que sobresalen en esta área y a menudo se utilizan de forma complementaria son **Impacket** y **Kerbrute**. Mientras Kerbrute se centra en la enumeración eficiente de usuarios Kerberos y ataques de fuerza bruta, Impacket es una suite más amplia de scripts de Python para interactuar con una gran variedad de protocolos de red de Windows, permitiendo desde Pass-the-Hash hasta la ejecución remota de comandos.

Impacket: La Suite de Protocolos de Red

Impacket es una colección de clases y scripts de Python para construir y manipular paquetes de red. Está diseñado para programar acceso a protocolos de red, y es especialmente potente para interactuar con servicios de Windows y Active Directory como SMB, DCE/RPC, Kerberos, entre otros.

Instalación de Impacket

Puedes instalar Impacket usando `pip`:

pip install impacket

Para la última versión y acceder a todos los ejemplos (que son las herramientas que usaremos), es mejor clonar y instalar desde el repositorio:

git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket
pip install .

Herramientas Clave de Impacket y Ejemplos

`psexec.py` - Ejecución Remota de Comandos

Permite ejecutar comandos en sistemas remotos a través de SMB con credenciales o hashes NTLM.

# Usando usuario y contraseña
psexec.py DOMAIN/username:password@TARGET_IP

# Usando hash NTLM (Pass-the-Hash)
psexec.py -hashes :<LM_Hash>:<NT_Hash> DOMAIN/username@TARGET_IP

`secretsdump.py` - Extracción de Hashes

Extrae hashes de contraseñas (NTLM), claves y credenciales de los servicios de directorio (NTDS.DIT) o del registro SAM.

# Remoto (requiere privilegios de administrador o hash de administrador)
secretsdump.py -hashes :<LM_Hash>:<NT_Hash> DOMAIN/Administrator@TARGET_DC

`getnpusers.py` - Enumeración de Usuarios (No Pre-Autenticación)

Identifica usuarios en Active Directory que tienen la propiedad "Do not require Kerberos preauthentication" habilitada, haciendo sus TGTs susceptibles de ser solicitados sin contraseña.

getnpusers.py DOMAIN.LOCAL/ -no-pass -outputfile users_no_preauth.txt

`getuserSPNs.py` - Enumeración de SPN para Kerberoasting

Enumera Service Principal Names (SPNs) de cuentas de usuario, que pueden ser objetivo de ataques de Kerberoasting para obtener sus hashes de contraseña.

getuserSPNs.py DOMAIN.LOCAL/ -request -outputfile spns.txt

Kerbrute: La Herramienta de Enumeración y Bruteforce Kerberos

Kerbrute es una herramienta rápida y eficiente, escrita en Go, diseñada específicamente para la enumeración de usuarios y ataques de fuerza bruta en el protocolo Kerberos de Active Directory. Se distingue por su capacidad para verificar la existencia de usuarios sin generar eventos de fallo de inicio de sesión iniciales en el controlador de dominio.

Instalación de Kerbrute

Descarga el binario precompilado desde el repositorio de GitHub:

wget https://github.com/ropnop/kerbrute/releases/download/v1.0.3/kerbrute_linux_amd64
chmod +x kerbrute_linux_amd64
mv kerbrute_linux_amd64 /usr/local/bin/kerbrute

Modos de Operación de Kerbrute y Ejemplos

Enumeración de Usuarios (`userenum`)

Permite validar la existencia de usuarios en un dominio sin alertar al DC sobre intentos de autenticación fallidos (inicialmente).

kerbrute userenum --dc DC_IP_ADDRESS -d DOMAIN.LOCAL users.txt
  • `--dc DC_IP_ADDRESS`: La IP o nombre de host del controlador de dominio.
  • `-d DOMAIN.LOCAL`: El nombre del dominio Kerberos.
  • `users.txt`: Archivo con la lista de posibles nombres de usuario.

Fuerza Bruta de Contraseñas (`bruteforce`)

Realiza ataques de fuerza bruta de contraseñas contra usuarios válidos.

kerbrute bruteforce --dc DC_IP_ADDRESS -d DOMAIN.LOCAL users.txt passwords.txt

Password Spraying (`passwordspray`)

Intenta una única contraseña contra una lista de usuarios, ideal para evitar bloqueos de cuenta si la contraseña es común o conocida.

kerbrute passwordspray --dc DC_IP_ADDRESS -d DOMAIN.LOCAL users.txt -p 'KnownPassword123'

Sinergia entre Impacket y Kerbrute

La verdadera potencia de estas herramientas se revela cuando se usan juntas en un flujo de trabajo de pentesting de Active Directory:

  1. **Enumeración Inicial:** Usa Kerbrute para obtener una lista de usuarios válidos de forma eficiente y relativamente sigilosa (`kerbrute userenum`).
  2. **Ataques de Kerberos:** Con los usuarios enumerados, puedes usar `getnpusers.py` (Impacket) para identificar cuentas vulnerables a AS-REP Roasting, o `getuserSPNs.py` (Impacket) para Kerberoasting.
  3. **Fuerza Bruta Dirigida:** Si es necesario, usa Kerbrute para password spraying o fuerza bruta contra usuarios específicos.
  4. **Acceso y Post-Explotación:** Una vez que obtienes credenciales o hashes, Impacket ofrece herramientas como `psexec.py`, `wmiexec.py` o `smbexec.py` para ejecutar comandos remotos, `secretsdump.py` para volcar hashes, y `goldenPac.py` para ataques de Golden/Silver Ticket.

Conclusión

Impacket y Kerbrute son dos herramientas fundamentales y altamente complementarias para cualquier pentester o equipo de Red Team que trabaje con entornos de Active Directory. Kerbrute te proporciona una forma rápida y efectiva de enumerar y validar usuarios, mientras que Impacket te brinda el arsenal necesario para interactuar con los protocolos de red y explotar las vulnerabilidades encontradas. Dominar el uso de ambas herramientas te permitirá realizar auditorías de seguridad más profundas y eficientes en redes Windows.

Recuerda siempre utilizar estas herramientas de forma ética y en entornos autorizados.