hacktricks/windows-hardening/active-directory-methodology/kerberos-authentication.md
2023-06-06 18:56:34 +00:00

12 KiB
Raw Blame History

Autenticação Kerberos

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Esta informação foi extraída do post: https://www.tarlogic.com/en/blog/how-kerberos-works/

Kerberos (I): Como funciona o Kerberos? - Teoria

20 - MAR - 2019 - ELOY PÉREZ

O objetivo desta série de posts é esclarecer como o Kerberos funciona, mais do que apenas apresentar os ataques. Isso ocorre porque, em muitas ocasiões, não está claro por que algumas técnicas funcionam ou não. Ter esse conhecimento permite saber quando usar qualquer um desses ataques em um pentest.

Portanto, após uma longa jornada de mergulho na documentação e vários posts sobre o assunto, tentamos escrever neste post todos os detalhes importantes que um auditor deve conhecer para entender como aproveitar o protocolo Kerberos.

Neste primeiro post, apenas a funcionalidade básica será discutida. Em posts posteriores, veremos como realizar os ataques e como funcionam os aspectos mais complexos, como a delegação.

Se você tiver alguma dúvida sobre o tópico que não está bem explicado, não tenha medo de deixar um comentário ou fazer uma pergunta sobre ele. Agora, sobre o tópico.

O que é Kerberos?

Em primeiro lugar, o Kerberos é um protocolo de autenticação, não de autorização. Em outras palavras, permite identificar cada usuário, que fornece uma senha secreta, no entanto, não valida a quais recursos ou serviços esse usuário pode acessar.

O Kerberos é usado no Active Directory. Nesta plataforma, o Kerberos fornece informações sobre os privilégios de cada usuário, mas é responsabilidade de cada serviço determinar se o usuário tem acesso aos seus recursos.

Itens do Kerberos

Nesta seção, vários componentes do ambiente Kerberos serão estudados.

Camada de transporte

O Kerberos usa UDP ou TCP como protocolo de transporte, que envia dados em texto claro. Devido a isso, o Kerberos é responsável por fornecer criptografia.

As portas usadas pelo Kerberos são UDP/88 e TCP/88, que devem ser ouvidas no KDC (explicado na próxima seção).

Agentes

Vários agentes trabalham juntos para fornecer autenticação no Kerberos. Estes são os seguintes:

  • Cliente ou usuário que deseja acessar o serviço.
  • AP (Application Server) que oferece o serviço exigido pelo usuário.
  • KDC (Key Distribution Center), o principal serviço do Kerberos, responsável por emitir os ingressos, instalado no DC (Domain Controller). É suportado pelo AS (Authentication Service), que emite os TGTs.

Chaves de criptografia

Existem várias estruturas manipuladas pelo Kerberos, como ingressos. Muitas dessas estruturas são criptografadas ou assinadas para evitar que sejam adulteradas por terceiros. Essas chaves são as seguintes:

  • Chave KDC ou krbtgt que é derivada do hash NTLM da conta krbtgt.
  • Chave do usuário que é derivada do hash NTLM do usuário.
  • Chave do serviço que é derivada do hash NTLM do proprietário do serviço, que pode ser uma conta de usuário ou computador.
  • Chave de sessão que é negociada entre o usuário e o KDC.
  • Chave de sessão de serviço a ser usada entre o usuário e o serviço.

Ingressos

As principais estruturas manipuladas pelo Kerberos são os ingressos. Esses ingressos são entregues aos usuários para serem usados por eles para executar várias ações no reino Kerberos. Existem 2 tipos:

  • O TGS (Ticket Granting Service) é o ingresso que o usuário pode usar para autenticar-se em um serviço. É criptografado com a chave do serviço.
  • O TGT (Ticket Granting Ticket) é o ingresso apresentado ao KDC para solicitar TGSs. É criptografado com a chave do KDC.

PAC

O PAC (Privilege Attribute Certificate) é uma estrutura incluída em quase todos os ingressos. Esta estrutura contém os privilégios do usuário e é assinada com a chave do KDC.

É possível que os serviços verifiquem o PAC comunicando-se com o KDC, embora isso não aconteça com frequência. No entanto, a verificação do PAC consiste apenas em verificar sua assinatura, sem inspecionar se os privilégios dentro do PAC estão corretos.

Além disso, um cliente pode evitar a inclusão do PAC dentro do ingresso especificando-o no campo KERB-PA-PAC-REQUEST da solicitação de ingresso.

Mensagens

O Kerberos usa diferentes tipos de mensagens. Os mais interessantes são os seguintes:

  • KRB_AS_REQ: Usado para solicitar o TGT ao KDC.
  • KRB_AS_REP: Usado para entregar o TGT pelo KDC.
  • KRB_TGS_REQ: Usado para solicitar o TGS ao KDC, usando o TGT.
  • KRB_TGS_REP: Usado para entregar o TGS pelo KDC.
  • KRB_AP_REQ: Usado para autenticar um usuário em um serviço, usando o TGS.
  • KRB_AP_REP: (Opcional) Usado pelo serviço para se identificar contra o usuário.
  • KRB_ERROR: Mensagem para comunicar condições de erro.

Além disso, mesmo que não faça parte do Kerberos, mas do NRPC, o AP opcionalmente poderia usar a mensagem KERB_VERIFY_PAC_REQUEST para enviar ao KDC a assinatura do PAC e verificar se está correta.

Abaixo é mostrado um resumo da sequência de mensagens para realizar a autenticação

Resumo das mensagens do Kerberos

Processo de autenticação

Nesta seção, a sequência de mensagens para realizar a autenticação será estudada, começando de um usuário sem ingressos, até ser autenticado no serviço desejado.

KRB_AS_REQ

Em primeiro lugar, o usuário deve obter um TGT do KDC. Para conseguir isso, um KRB_AS_REQ deve ser enviado:

Esquema de mensagem KRB_AS_REQ

KRB_AS_REQ tem, entre outros, os seguintes campos:

  • Um timestamp criptografado com a chave do cliente, para autenticar o usuário e evitar ataques de replay
  • Nome de usuário do usuário autenticado
  • O SPN do serviço associado à conta krbtgt
  • Um Nonce gerado pelo usuário

Nota: o timestamp criptografado é necessário apenas se o usuário exigir pré-autenticação, o que é comum, exceto se a flag DONT_REQ_PREAUTH __ estiver definida na conta do usuário.

KRB_AS_REP

Após receber a solicitação, o KDC verifica a identidade do usuário descriptografando o timestamp. Se a mensagem estiver correta, ele deve responder com um KRB_AS_REP:

Esquema de mensagem KRB_AS_REP

KRB_AS_REP inclui as seguintes informações:

  • Nome de usuário
  • TGT, que inclui:
    • Nome de usuário
    • Chave de sessão
    • Data de expiração do TGT
    • PAC com privilégios do usuário, assinado pelo KDC
  • Alguns dados criptografados com a chave do usuário, que incluem:
    • Chave de sessão
    • Data de expiração do TGT
    • Nonce do usuário, para evitar ataques de replay

Uma vez concluído, o usuário já possui o TGT, que pode ser usado para solicitar TGSs e, posteriormente, acessar os serviços.

KRB_TGS_REQ

Para solicitar um TGS, uma mensagem KRB_TGS_REQ deve ser enviada ao KDC:

Esquema de mensagem KRB_TGS_REQ

KRB_TGS_REQ inclui:

  • Dados criptografados com a chave de sessão:
    • Nome de usuário
    • Timestamp
  • TGT
  • SPN do serviço solicitado
  • Nonce gerado pelo usuário

KRB_TGS_REP

Após receber a mensagem KRB_TGS_REQ, o KDC retorna um TGS dentro de KRB_TGS_REP:

Esquema de mensagem KRB_TGS_REP

KRB_TGS_REP inclui:

  • Nome de usuário
  • TGS, que contém:
    • Chave de sessão do serviço
    • Nome de usuário
    • Data de expiração do TGS
    • PAC com privilégios do usuário, assinado pelo KDC
  • Dados criptografados com a chave de sessão:
    • Chave de sessão do serviço
    • Data de expiração do TGS
    • Nonce do usuário, para evitar ataques de replay

KRB_AP_REQ

Para finalizar, se tudo correu bem, o usuário já possui um TGS válido para interagir com o serviço. Para usá-lo, o usuário deve enviar uma mensagem KRB_AP_REQ para o AP:

Esquema de mensagem KRB_AP_REQ

KRB_AP_REQ inclui:

  • TGS
  • Dados criptografados com a chave de sessão do serviço:
    • Nome de usuário
    • Timestamp, para evitar ataques de replay

Depois disso, se os privilégios do usuário estiverem corretos, ele poderá acessar o serviço. Se for o caso, o AP verificará o PAC em relação ao KDC. E também, se a autenticação mútua for necessária, ele responderá ao usuário com uma mensagem KRB_AP_REP.

Referências