> For the complete documentation index, see [llms.txt](https://2h4ck.gitbook.io/home/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://2h4ck.gitbook.io/home/artigos/windows/explorando-kerberos.md).

# Explorando Kerberos

Trago aqui um breve estudo sobre o Kerberos, serviço responsável pela autenticação em domínios Windows.

## O que é Kerberos?

Kerberos é o serviço de autenticação padrão para domínios Windows. A ideia é que ele seja mais "seguro" que o NTLM, utilizando autorização por **tickets**, bem como uma criptografia mais avançada. Embora o NTLM possua bem mais vetores de ataque, o Kerberos também possui diversas vulnerabilidades.

## Terminologia

{% hint style="info" %}
A terminologia parece ser um pouco confusa, mas é importante sabermos o que cada item é e para que serve, para entendermos o processo de autenticação dos serviços.
{% endhint %}

> ***Ticket Granting Ticket*** (TGT) - Um TGT é um ticket de autenticação utilizado para solicitar tickets de serviço para o TGS, para recursos específicos do domínio.
>
> ***Key Distribution Center*** (KDC) - O Key Distribution Center é um serviço de emissão de TGTs e tickets de serviço, que consiste no Authentication Service e o Ticket Granting Service.
>
> ***Authentication Service*** (AS) - O Authentication Service solicita TGTs para serem usados pelo TGS no domínio, com o intuito de solicitar acesso a outras máquinas e tickets de serviço.
>
> ***Ticket Granting Service*** (TGS) - O Ticket Granting Service recebe o TGT e retorna um ticket para uma máquina no domínio.
>
> ***Service Principal Name*** (SPN) - Um Service Principal Name é um identificador dado a uma instância de serviço para associá-la a uma conta de serviço do domínio. O Windows requer que os serviços possuam uma conta de serviço do domínio.
>
> ***KDC Long Term Secret Key*** (KDC LT Key) - A KDC Key é baseada na conta de serviço KRBTGT e é utilizada para criptografar o TGT e assinar o PAC.
>
> ***Client Long Term Secret Key*** (Client LT Key) - A Client Key é baseada no computador ou conta de serviço e é utilizada para checar o timestamp criptografado e criptografar a Session Key.
>
> ***Service Long Term Secret Key*** (Service LT Key) - A Service Key é baseada na conta de serviço e é utilizada para criptografar a parte do serviço do ticket de serviço e assinar o PAC.
>
> ***Session Key*** - Emitida pelo KDC quando um TGT é emitido. O usuário fornece a Session Key para o KDC junto ao TGT quando solicita um ticket de serviço.
>
> ***Privilege Attribute Certificate*** (PAC) - O PAC mantém todas as informações relevantes do usuário e é enviado junto com o TGT para o KDC, para que seja assinado pelo LT Key e pelo KDC LT Key, com o intuito de validar o usuário.

## Pré-autenticação AS-REQ

O **AS-REQ** é uma etapa da autenticação Kerberos, que se inicia quando um usuário solicita um TGT ao KDC. Para validar o usuário e criar um TGT para ele, o KDC deve seguir esses passos. O primeiro deles é o usuário criptografar a NT Hash do timestamp e enviar para o AS. O KDC, então, tenta descriptografar o timestamp utilizando a NT Hash do usuário. Caso a descriptografia seja bem-sucedida, O KDC emite um TFT junto com a Session Key paa o usuário.

## Conteúdo do TGT

Para entender como os tickets de serviço são criados e validados, precisamos iniciar analisando de onde os tickets vem; o TFT é fornecido pelo usuário para o KDC e, então, o KDC valida o TGT e retorna o ticket de serviço.

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2F3Ozv5uCepLNz6zypG6Od%2Fimage.png?alt=media&amp;token=844a6992-9a2b-4763-a904-53c4bc12b1ad" alt=""><figcaption><p>Ticket Granting Ticket (TGT)</p></figcaption></figure>

## Conteúdo do Ticket de Serviço

Para entender como a autenticação Kerberos funciona, precisamos entender o que esses tickets possuem e como são validados. Um ticket de serviço possui duas partes: a parte fornecida pelo **serviço** e a parte fornecida pelo **usuário**:

* **Parte do serviço**: Detalhes do usuário, Session Key, criptografia do ticket com a NTLM Hash da conta de serviço.
* **Parte do usuário**: Timestamp da validade, Session Key, criptografia com a session key do TGT.

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2FXwlZUiuLcajCClBOHesv%2Fimage.png?alt=media&amp;token=b67f7e07-0bb1-4dbd-bce1-3bf1a1446bb7" alt=""><figcaption><p>Ticket de Serviço (TGS)</p></figcaption></figure>

## Visão geral da Autenticação Kerberos

<figure><img src="https://2761915823-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1HmCASGp08H43yXrIGdx%2Fuploads%2Fb9LhMFq83XU9w8Ng1kTy%2Fimage.png?alt=media&amp;token=082f295c-3f89-4449-a61d-964ace4e7cb8" alt=""><figcaption><p>Etapas da autenticação Kerberos</p></figcaption></figure>

**AS-REQ** - 1. O cliente solicita um ticket de autenticação ou um Ticket Granting Ticket (TGT);

**AS-REP** - 2. O Key Distribution Center (KDC) verifica o cliente e envia um TGT criptografado de volta para o cliente;

**TGS-REQ** - 3. O cliente envia o TGT criptografado para o Ticket Granting Server (TGS) com o Service Principal Name (SPN) do serviço solicitado pelo cliente;

**TGS-REP** - 4. O Key Distribution Center (KDC) verifica o TGT do usuário e se o usuário possui acesso ao serviço, então envia uma Session Key válida do serviço para o cliente;

**AP-REQ** - 5. O cliente solicita o serviço e envia uma Session Key válida para provar que o usuário tinha acesso;

**AP-REP** - 6. O serviço fornece o acesso.

## Ataques comuns ao Kerberos

[**Kerbrute**](https://github.com/ropnop/kerbrute) - Ferramenta para enumerar usuários em um domínio via pré-autenticação Kerberos;

[**Pass the Ticket**](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/pass-the-ticket) (PTT) - Similar ao [**Pass the Hash**](https://en.wikipedia.org/wiki/Pass_the_hash) (PTH), porém ao invés de utilizar hashes para solicitar um ticket, o ticket em si é roubado e utilizado para se passar pelo usuário;

[**Kerberoasting**](https://blogs.manageengine.com/portugues/2021/11/30/o-que-e-o-kerberoasting-e-como-detecta-lo.html) - Ataque que consiste na solicitação de tickets, extração e quebra das hashes e movimentação lateral;

[**AS-REP Roasting**](https://danieldonda.com/ataque-as-rep-roast/) - Ataque que explora a recuperação de hashes de usuários sem passar pela etapa de pré-autenticação Kerberos;

[**Golden Ticket**](https://www.netwrix.com/how_golden_ticket_attack_works.html) - Geração de um TGT da conta KRBTGT, que pode ser utilizado para gerar qualquer TGS.
