A pré-autenticação Kerberos é um recurso de segurança que oferece proteção contra ataques de “adivinhação de senha”. A solicitação AS identifica o cliente para o KDC em texto simples. Se a pré-autenticação Kerberos estiver habilitada, um “timestamp” será criptografado usando o hash de senha do usuário como uma chave de criptografia. Esse recurso está descrito na RFC 6113
Em meu ambiente eu tenho usuário chamado “Bill Gates” no qual eu habilitei a opção “Do not require Kerberos preauthentication“:
AS-REP Roast
Mesmo sendo um recurso de “proteção” ele pode ser explorado.
O ataque AS-REP é um ataque Kerberos que permite recuperar hashes de senha de usuários sem a etapa de pré-autenticação. A etapa de pré-autenticação é a etapa inicial da autenticação Kerberos, em que um usuário envia uma solicitação criptografada ao KDC para se autenticar em um serviço.
O passo a passo para essa POC do ataque pode ser encontrada no site https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/as-rep-roasting-using-rubeus-and-hashcat
Podemos facilmente usar o “Rubeus”,e executar o ataque AS-REP em nosso ambiente. E ele é bem fácil e simples.
https://github.com/GhostPack/Rubeus e os binários podem ser encontrados no https://github.com/r3motecontrol/Ghostpack-CompiledBinaries
Ataque ou verificação ?
O que eu queria fazer é enumerar as contas que podem ser vetor desse ataque sem usar um software como o Rubeus, pois ele vai ser detectado como malicioso e eu não estou interessado (nesse momento) em trazer o “AS_REP Hash”.
Então resolvi criar um shell script no Kali Linux para enumerar as contas do Active Directory com o atributo “kerberos preauthentication” habilitado usando o ldapsearch. A dificuldade foi que eu não sou um desenvolvedor habilidoso e meus algoritmos talvez não estejam tão eficientes, mas funcionou e aprendi que esse é o ponto inicial mais importante
https://github.com/danieldonda/ShellScript
Uma das dificuldades de criar esse código é que os valores do UAC são incrementais então eu segui pelos atributos mais comuns usados o que significa que precisa refinar e completar o código para não deixar nenhuma variável de fora.
Muito bom o Artigo
Obrigado mestre !