O que é Delegação Kerberos? Uma visão geral da Delegação Kerberos
Nov 30, 2021
Finalidade da Delegação Kerberos
A delegação Kerberos existe há muito tempo (desde o Windows Server 2000, para ser exato). Mas, muitas vezes, os engenheiros que trabalham com Active Directory não estão familiarizados com todas as várias implementações da delegação Kerberos, seus usos e maneiras como podem ser abusadas. Alguns até confundem a delegação Kerberos com permissões delegadas.
Conteúdo relacionado selecionado:
O uso prático da delegação Kerberos é permitir que uma aplicação acesse recursos hospedados em um servidor diferente. Um exemplo é quando uma aplicação, como um servidor web, precisa acessar recursos para o site hospedado em outro lugar, como um banco de dados SQL. Em vez de dar à conta de serviço que executa o servidor web acesso direto ao banco de dados, você pode permitir que essa conta de serviço seja delegada para o serviço do servidor SQL. Uma vez que um usuário faça login no site, a conta de serviço solicitará acesso ao serviço do servidor SQL em nome desse usuário. Isso permite que o usuário acesse o conteúdo no banco de dados ao qual ele foi provisionado, sem ter que provisionar qualquer acesso à própria conta de serviço do servidor web.
Tipos de Delegação Kerberos
Ao longo dos anos, surgiram algumas variações da delegação Kerberos. A implementação original do Windows Server 2000 é a delegação irrestrita. Desde então, versões mais rigorosas de delegação foram desenvolvidas para melhorar a segurança: delegação restrita e delegação restrita baseada em recursos. Vou explorar mais profundamente cada tipo de delegação abaixo.
Para configurar a delegação em uma conta de computador ou usuário, use a aba Delegação em Active Directory Users and Computers, conforme mostrado abaixo. Observe que as contas de usuário devem ter um servicePrincipalName (SPN) definido.
Figura 1. Guia de Delegação no Active Directory Users and Computers
A primeira opção (em amarelo) permite configurar uma conta para que NÃO seja permitido confiar nela para delegação; isso é mais comumente utilizado para contas sensíveis ou administrativas que nunca devem ser usadas para delegação. A segunda opção (em verde) permite configurar uma conta para delegação irrestrita. A terceira opção (em vermelho) permite configurar uma conta para delegação restrita.
Delegação Irrestrita
Esta é a implementação original da delegação e também a menos segura. O que a delegação irrestrita realmente faz? Por baixo dos panos, quando a delegação irrestrita está configurada, o atributo userAccountControl do objeto é atualizado para incluir a flag “TRUSTED_FOR_DELEGATION”. Quando um objeto se autentica em um host com delegação irrestrita configurada, o ticket-granting ticket (TGT) para aquela conta é armazenado na memória para que o host com delegação irrestrita configurada possa se passar por esse usuário mais tarde, se necessário.
Imagine um cenário onde uma conta privilegiada se autentica em um host com delegação irrestrita configurada. Essa conta pode acessar qualquer serviço configurado dentro do domínio como esse usuário privilegiado. Para levar isso um passo adiante, e se houvesse maneiras de forçar contas privilegiadas a se autenticarem no seu host automaticamente? Usando o “bug da impressora”, você pode fazer com que um controlador de domínio se autentique no seu host, deixando o TGT para essa conta na memória.
Uma vez que mecanismos como o “bug da impressora” existem, a delegação irrestrita é muito insegura e não deve ser usada se for possível evitar. É importante notar que, por padrão, os controladores de domínio são configurados com delegação irrestrita. No entanto, uma vez que seus controladores de domínio devem ser muito mais seguros do que um servidor de aplicação aleatório hospedando um serviço, isso não deve ser um problema.
Delegação Restrita
Introduzido no Windows Server 2003, a delegação restrita permite configurar a quais serviços uma conta pode ser delegada. Isso, em teoria, limita a exposição potencial se ocorrer um comprometimento.
Figura 2. TestUserA pode ser delegado ao serviço HTTP/test.
Uma restrição a ser observada para a delegação restrita é que ela não funciona entre florestas.
Quando a delegação restrita é configurada em uma conta, duas coisas acontecem nos bastidores:
- O atributo userAccountControl para o objeto é atualizado com a flag “TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION”.
- O atributo msDS-AllowedToDelegateTo é preenchido com o SPN configurado na aba de delegação.
Abusar da delegação restrita é diferente de abusar da delegação irrestrita. Uma maneira comum de ser abusada é se os atacantes conseguirem comprometer a senha em texto claro ou o hash NTLM de uma conta de usuário configurada para delegação restrita. Usando uma ferramenta como Kekeo, eles são capazes de solicitar um TGT para a conta da qual possuem a senha, executar a solicitação de TGS para qualquer usuário (desde que o usuário não esteja marcado como ‘Sensível’), e então injetar o ticket e acessar o serviço solicitado como se fossem esse usuário.
Delegação Restrita Baseada em Recurso
Introduzido no Windows Server 2012, a delegação restrita baseada em recursos altera a forma como você pode configurar a delegação restrita, e ela funcionará através de uma confiança. Em vez de especificar qual objeto pode delegar a qual serviço, o recurso que hospeda o serviço especifica quais objetos podem delegar a ele. Do ponto de vista administrativo, isso permite que o proprietário do recurso controle quem pode acessá-lo. Por exemplo, em vez de especificar com delegação restrita que a conta de serviço do WebServer pode delegar ao Serviço SQL para acessar o banco de dados, você pode especificar na conta de serviço do servidor SQL que a conta de serviço do WebServer tem permissões para delegar acesso a ele.
A delegação restrita baseada em recurso é configurada ao preencher o atributo msDS-AllowedToActOnBehalfOfOtherIdentity no recurso alvo com o SID do objeto que tem permissão para delegar a ele. Para configurar a delegação restrita baseada em recurso, você precisa usar o PowerShell; não existe um componente de GUI dentro do Active Directory Users and Computers e a página do Attribute Editor não permite a modificação manual deste atributo.
Você pode ler mais sobre Resource-Based Constrained Delegation e maneiras de abusar disso aqui.
Identificando a Delegação Kerberos Existente
Agora que você compreende alguns dos conceitos básicos dos diferentes tipos de delegação e algumas maneiras como eles podem ser abusados, quero compartilhar com você um método que você pode usar para entender quais tipos de delegação já estão configurados no seu ambiente. Vamos olhar especificamente para destacar cenários inseguros, como a delegação irrestrita sendo configurada em objetos que não sejam controladores de domínio.
Aqui está um script, originalmente publicado na galeria Microsoft Technet, que identificará contas com delegação irrestrita, delegação restrita e delegação baseada em recursos configurados, destacando informações e potenciais avisos sobre as configurações listadas:
<#.Synopsis Search the domain for accounts with Kerberos Delegation..DESCRIPTION Kerberos Delegation is a security sensitive configuration. Especially full (unconstrained) delegation has significant impact: any service that is configured with full delegation can take any account that authenticates to it, and impersonate that account for any other network service that it likes. So, if a Domain Admin were to use that service, the service in turn could read the hash of KRBRTG and immediately effectuate a golden ticket. Etc :) This script searches AD for regular forms of delegation: full, constrained, and resource based. It dumps the account names with relevant information (flags) and adds a comment field for special cases. The output is a PSObject that you can use for further analysis. Note regarding resource based delegation: the script dumps the target services, not the actual service doing the delegation. I did not bother to parse that out. Main takeaway: chase all services with unconstrained delegation. If these are _not_ DC accounts, reconfigure them with constrained delegation, OR claim them als DCs from a security perspective. Meaning, that the AD team manages the service and the servers it runs on..EXAMPLE .Search-KerbDelegatedAccounts.ps1 | out-gridview.EXAMPLE .Search-KerbDelegatedAccounts.ps1 -DN "ou=myOU,dc=sol,dc=local".NOTES Version: 0.1 : first version. 0.2 : expanded LDAP filter and comment field. Author: Willem Kasdorp, Microsoft. Creation Date: 1/10/2016 Last modified: 4/11/2017#>[CmdletBinding()]Param( # start the search at this DN. Default is to search all of the domain. [string]$DN = (Get-ADDomain).DistinguishedName)$SERVER_TRUST_ACCOUNT = 0x2000$TRUSTED_FOR_DELEGATION = 0x80000$TRUSTED_TO_AUTH_FOR_DELEGATION= 0x1000000$PARTIAL_SECRETS_ACCOUNT = 0x4000000 $bitmask = $TRUSTED_FOR_DELEGATION -bor $TRUSTED_TO_AUTH_FOR_DELEGATION -bor $PARTIAL_SECRETS_ACCOUNT# LDAP filter to find all accounts having some form of delegation.# 1.2.840.113556.1.4.804 is an OR query.$filter = @"(& (servicePrincipalname=*) (| (msDS-AllowedToActOnBehalfOfOtherIdentity=*) (msDS-AllowedToDelegateTo=*) (UserAccountControl:1.2.840.113556.1.4.804:=$bitmask) ) (| (objectcategory=computer) (objectcategory=person) (objectcategory=msDS-GroupManagedServiceAccount) (objectcategory=msDS-ManagedServiceAccount) ))"@ -replace "[sn]", ''$propertylist = @( "servicePrincipalname", "useraccountcontrol", "samaccountname", "msDS-AllowedToDelegateTo", "msDS-AllowedToActOnBehalfOfOtherIdentity")Get-ADObject -LDAPFilter $filter -SearchBase $DN -SearchScope Subtree -Properties $propertylist -PipelineVariable account | ForEach-Object { $isDC = ($account.useraccountcontrol -band $SERVER_TRUST_ACCOUNT) -ne 0 $fullDelegation = ($account.useraccountcontrol -band $TRUSTED_FOR_DELEGATION) -ne 0 $constrainedDelegation = ($account.'msDS-AllowedToDelegateTo').count -gt 0 $isRODC = ($account.useraccountcontrol -band $PARTIAL_SECRETS_ACCOUNT) -ne 0 $resourceDelegation = $account.'msDS-AllowedToActOnBehalfOfOtherIdentity' -ne $null $comment = "" if ((-not $isDC) -and $fullDelegation) { $comment += "WARNING: full delegation to non-DC is not recommended!; " } if ($isRODC) { $comment += "WARNING: investigation needed if this is not a real RODC; " } if ($resourceDelegation) { # to count it using PS, we need the object type to select the correct function... broken, but there we are. $comment += "INFO: Account allows delegation FROM other server(s); " } if ($constrainedDelegation) { $comment += "INFO: constrained delegation service count: $(($account.'msDS-AllowedToDelegateTo').count); " } [PSCustomobject] @{ samaccountname = $account.samaccountname objectClass = $account.objectclass uac = ('{0:x}' -f $account.useraccountcontrol) isDC = $isDC isRODC = $isRODC fullDelegation = $fullDelegation constrainedDelegation = $constrainedDelegation resourceDelegation = $resourceDelegation comment = $comment }}
Figura 3. Script de exemplo para identificar delegação problemática
Como a Netwrix pode ajudar
A solução de segurança do Netwrix Active Directory ajuda você a proteger seu Active Directory de ponta a ponta. Você pode:
- Identifique e mitigue vulnerabilidades no seu Active Directory: permissões excessivas, administradores “ocultos”, contas obsoletas, weak passwords, e mais.
- Controle configurações e permissões de AD, aplique políticas fortes de password policies, e previna o roubo de credenciais.
- Detecte até mesmo ameaças avançadas para impedir os agentes mal-intencionados antes que eles concluam sua missão.
- Contenha imediatamente uma violação de segurança com ações de resposta automatizadas, minimizando os danos ao seu negócio.
- Reverta ou recupere de alterações maliciosas ou impróprias com tempo de inatividade mínimo.
Compartilhar em
Saiba Mais
Sobre o autor
Kevin Joyce
Diretor de Product Management
Diretor de Product Management na Netwrix. Kevin tem uma paixão por segurança cibernética, especificamente em compreender as táticas e técnicas que os atacantes usam para explorar os ambientes das organizações. Com oito anos de experiência em product management, focando em Active Directory e segurança do Windows, ele levou essa paixão para ajudar a construir soluções para organizações protegerem suas identidades, infraestrutura e dados.
Saiba mais sobre este assunto
Criar usuários do AD em massa e enviar suas credenciais por e-mail usando PowerShell
Como criar, alterar e testar senhas usando PowerShell
Como adicionar e remover grupos AD e objetos nos grupos com PowerShell
Confianças no Active Directory
Ataques de ransomware ao Active Directory