.. | ||
acl-persistence-abuse | ||
ad-certificates | ||
abusing-ad-mssql.md | ||
ad-certificates.md | ||
ad-dns-records.md | ||
ad-information-in-printers.md | ||
asreproast.md | ||
bloodhound.md | ||
constrained-delegation.md | ||
custom-ssp.md | ||
dcshadow.md | ||
dcsync.md | ||
diamond-ticket.md | ||
dsrm-credentials.md | ||
external-forest-domain-one-way-outbound.md | ||
external-forest-domain-oneway-inbound.md | ||
golden-ticket.md | ||
kerberoast.md | ||
kerberos-authentication.md | ||
kerberos-double-hop-problem.md | ||
laps.md | ||
over-pass-the-hash-pass-the-key.md | ||
pass-the-ticket.md | ||
password-spraying.md | ||
printers-spooler-service-abuse.md | ||
printnightmare.md | ||
privileged-groups-and-token-privileges.md | ||
rdp-sessions-abuse.md | ||
README.md | ||
resource-based-constrained-delegation.md | ||
security-descriptors.md | ||
sid-history-injection.md | ||
silver-ticket.md | ||
skeleton-key.md | ||
unconstrained-delegation.md |
Metodologia do Active Directory
{% hint style="success" %}
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Suporte ao HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Visão geral básica
Active Directory serve como uma tecnologia fundamental, permitindo que administradores de rede criem e gerenciem de forma eficiente domínios, usuários e objetos dentro de uma rede. É projetado para escalar, facilitando a organização de um grande número de usuários em grupos e subgrupos gerenciáveis, enquanto controla os direitos de acesso em vários níveis.
A estrutura do Active Directory é composta por três camadas principais: domínios, árvores e florestas. Um domínio abrange uma coleção de objetos, como usuários ou dispositivos, que compartilham um banco de dados comum. Árvores são grupos desses domínios ligados por uma estrutura compartilhada, e uma floresta representa a coleção de várias árvores, interconectadas por relações de confiança, formando a camada mais alta da estrutura organizacional. Direitos específicos de acesso e comunicação podem ser designados em cada um desses níveis.
Os conceitos-chave dentro do Active Directory incluem:
- Diretório – Abriga todas as informações relacionadas aos objetos do Active Directory.
- Objeto – Denota entidades dentro do diretório, incluindo usuários, grupos ou pastas compartilhadas.
- Domínio – Serve como um contêiner para objetos de diretório, com a capacidade de múltiplos domínios coexistirem dentro de uma floresta, cada um mantendo sua própria coleção de objetos.
- Árvore – Um agrupamento de domínios que compartilham um domínio raiz comum.
- Floresta – O auge da estrutura organizacional no Active Directory, composta por várias árvores com relações de confiança entre elas.
Serviços de Domínio do Active Directory (AD DS) abrangem uma gama de serviços críticos para a gestão e comunicação centralizadas dentro de uma rede. Esses serviços incluem:
- Serviços de Domínio – Centraliza o armazenamento de dados e gerencia interações entre usuários e domínios, incluindo funcionalidades de autenticação e busca.
- Serviços de Certificado – Supervisiona a criação, distribuição e gestão de certificados digitais seguros.
- Serviços de Diretório Leve – Suporta aplicações habilitadas para diretório através do protocolo LDAP.
- Serviços de Federação de Diretório – Fornece capacidades de single-sign-on para autenticar usuários em várias aplicações web em uma única sessão.
- Gestão de Direitos – Ajuda a proteger material com direitos autorais regulando sua distribuição e uso não autorizados.
- Serviço DNS – Crucial para a resolução de nomes de domínio.
Para uma explicação mais detalhada, confira: TechTerms - Definição de Active Directory
Autenticação Kerberos
Para aprender como atacar um AD, você precisa entender muito bem o processo de autenticação Kerberos.
Leia esta página se você ainda não souber como funciona.
Folha de Dicas
Você pode acessar https://wadcoms.github.io/ para ter uma visão rápida dos comandos que você pode executar para enumerar/explorar um AD.
Reconhecimento do Active Directory (Sem credenciais/sessões)
Se você apenas tiver acesso a um ambiente AD, mas não tiver credenciais/sessões, você poderia:
- Pentestar a rede:
- Escanear a rede, encontrar máquinas e portas abertas e tentar explorar vulnerabilidades ou extrair credenciais delas (por exemplo, impressoras podem ser alvos muito interessantes).
- Enumerar DNS pode fornecer informações sobre servidores chave no domínio, como web, impressoras, compartilhamentos, vpn, mídia, etc.
gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt
- Dê uma olhada na Metodologia Geral de Pentesting para encontrar mais informações sobre como fazer isso.
- Verifique o acesso nulo e de convidado em serviços smb (isso não funcionará em versões modernas do Windows):
enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>
smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>
smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //
- Um guia mais detalhado sobre como enumerar um servidor SMB pode ser encontrado aqui:
{% content-ref url="../../network-services-pentesting/pentesting-smb/" %} pentesting-smb {% endcontent-ref %}
- Enumerar Ldap
nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>
- Um guia mais detalhado sobre como enumerar LDAP pode ser encontrado aqui (preste atenção especial ao acesso anônimo):
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %} pentesting-ldap.md {% endcontent-ref %}
- Envenenar a rede
- Coletar credenciais impersonando serviços com Responder
- Acessar o host abusando do ataque de retransmissão
- Coletar credenciais expondo serviços UPnP falsos com evil-SSDP
- OSINT:
- Extrair nomes de usuários/nome de documentos internos, redes sociais, serviços (principalmente web) dentro dos ambientes de domínio e também de fontes publicamente disponíveis.
- Se você encontrar os nomes completos dos trabalhadores da empresa, pode tentar diferentes convenções de nomes de usuário AD (leia isso). As convenções mais comuns são: NomeSobrenome, Nome.Sobrenome, NamSur (3 letras de cada), Nam.Sur, NSobrenome, N.Sobrenome, SobrenomeNome, Sobrenome.Nome, SobrenomeN, Sobrenome.N, 3 letras aleatórias e 3 números aleatórios (abc123).
- Ferramentas:
- w0Tx/generate-ad-username
- urbanadventurer/username-anarchy
Enumeração de usuários
- Enumeração SMB/LDAP anônima: Confira as páginas de pentesting SMB e pentesting LDAP.
- Enumeração Kerbrute: Quando um nome de usuário inválido é solicitado, o servidor responderá usando o código de erro Kerberos KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN, permitindo-nos determinar que o nome de usuário era inválido. Nomes de usuários válidos resultarão em uma resposta TGT em um AS-REP ou no erro KRB5KDC_ERR_PREAUTH_REQUIRED, indicando que o usuário deve realizar a pré-autenticação.
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
nmap -p 88 --script=krb5-enum-users --script-args="krb5-enum-users.realm='DOMAIN'" <IP>
Nmap -p 88 --script=krb5-enum-users --script-args krb5-enum-users.realm='<domain>',userdb=/root/Desktop/usernames.txt <IP>
msf> use auxiliary/gather/kerberos_enumusers
crackmapexec smb dominio.es -u '' -p '' --users | awk '{print $4}' | uniq
- Servidor OWA (Outlook Web Access)
Se você encontrar um desses servidores na rede, você também pode realizar enumeração de usuários contra ele. Por exemplo, você poderia usar a ferramenta MailSniper:
ipmo C:\Tools\MailSniper\MailSniper.ps1
# Get info about the domain
Invoke-DomainHarvestOWA -ExchHostname [ip]
# Enumerate valid users from a list of potential usernames
Invoke-UsernameHarvestOWA -ExchHostname [ip] -Domain [domain] -UserList .\possible-usernames.txt -OutFile valid.txt
# Password spraying
Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summer2021
# Get addresses list from the compromised mail
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt
{% hint style="warning" %} Você pode encontrar listas de nomes de usuários em este repositório do github **** e neste (nomes de usuários estatisticamente prováveis).
No entanto, você deve ter o nome das pessoas que trabalham na empresa da etapa de reconhecimento que você deve ter realizado antes disso. Com o nome e sobrenome, você pode usar o script namemash.py para gerar nomes de usuários válidos potenciais. {% endhint %}
Conhecendo um ou vários nomes de usuários
Ok, então você sabe que já tem um nome de usuário válido, mas sem senhas... Então tente:
- ASREPRoast: Se um usuário não tiver o atributo DONT_REQ_PREAUTH, você pode solicitar uma mensagem AS_REP para esse usuário que conterá alguns dados criptografados por uma derivação da senha do usuário.
- Password Spraying: Vamos tentar as senhas mais comuns com cada um dos usuários descobertos, talvez algum usuário esteja usando uma senha fraca (lembre-se da política de senhas!).
- Note que você também pode spray servidores OWA para tentar obter acesso aos servidores de e-mail dos usuários.
{% content-ref url="password-spraying.md" %} password-spraying.md {% endcontent-ref %}
Envenenamento LLMNR/NBT-NS
Você pode ser capaz de obter alguns hashes de desafio para quebrar envenenando alguns protocolos da rede:
{% content-ref url="../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %} spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {% endcontent-ref %}
NTML Relay
Se você conseguiu enumerar o Active Directory, terá mais e-mails e uma melhor compreensão da rede. Você pode ser capaz de forçar ataques de relay NTML relay attacks **** para obter acesso ao ambiente AD.
Roubar Credenciais NTLM
Se você pode acessar outros PCs ou compartilhamentos com o usuário nulo ou convidado, você pode colocar arquivos (como um arquivo SCF) que, se acessados de alguma forma, dispararão uma autenticação NTML contra você, permitindo que você roube o desafio NTLM para quebrá-lo:
{% content-ref url="../ntlm/places-to-steal-ntlm-creds.md" %} places-to-steal-ntlm-creds.md {% endcontent-ref %}
Enumerando Active Directory COM credenciais/sessão
Para esta fase, você precisa ter comprometido as credenciais ou uma sessão de uma conta de domínio válida. Se você tiver algumas credenciais válidas ou um shell como um usuário de domínio, você deve lembrar que as opções dadas anteriormente ainda são opções para comprometer outros usuários.
Antes de começar a enumeração autenticada, você deve saber qual é o problema do duplo salto do Kerberos.
{% content-ref url="kerberos-double-hop-problem.md" %} kerberos-double-hop-problem.md {% endcontent-ref %}
Enumeração
Ter comprometido uma conta é um grande passo para começar a comprometer todo o domínio, porque você poderá iniciar a Enumeração do Active Directory:
Em relação ao ASREPRoast, você agora pode encontrar todos os usuários vulneráveis possíveis, e em relação ao Password Spraying, você pode obter uma lista de todos os nomes de usuários e tentar a senha da conta comprometida, senhas vazias e novas senhas promissoras.
- Você pode usar o CMD para realizar um reconhecimento básico
- Você também pode usar powershell para reconhecimento que será mais discreto
- Você também pode usar powerview para extrair informações mais detalhadas
- Outra ferramenta incrível para reconhecimento em um Active Directory é BloodHound. Não é muito discreto (dependendo dos métodos de coleta que você usa), mas se você não se importar com isso, deve definitivamente experimentar. Descubra onde os usuários podem RDP, encontre caminhos para outros grupos, etc.
- Outras ferramentas automatizadas de enumeração AD são: AD Explorer, ADRecon, Group3r, PingCastle.
- Registros DNS do AD pois podem conter informações interessantes.
- Uma ferramenta com GUI que você pode usar para enumerar o diretório é AdExplorer.exe do SysInternal Suite.
- Você também pode pesquisar no banco de dados LDAP com ldapsearch para procurar credenciais nos campos userPassword & unixUserPassword, ou até mesmo por Description. cf. Senha no comentário do usuário AD em PayloadsAllTheThings para outros métodos.
- Se você estiver usando Linux, você também pode enumerar o domínio usando pywerview.
- Você também pode tentar ferramentas automatizadas como:
- tomcarver16/ADSearch
- 61106960/adPEAS
- Extraindo todos os usuários do domínio
É muito fácil obter todos os nomes de usuários do domínio do Windows (net user /domain
, Get-DomainUser
ou wmic useraccount get name,sid
). No Linux, você pode usar: GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username
ou enum4linux -a -u "user" -p "password" <DC IP>
Mesmo que esta seção de Enumeração pareça pequena, esta é a parte mais importante de todas. Acesse os links (principalmente o do cmd, powershell, powerview e BloodHound), aprenda como enumerar um domínio e pratique até se sentir confortável. Durante uma avaliação, este será o momento chave para encontrar seu caminho para DA ou decidir que nada pode ser feito.
Kerberoast
Kerberoasting envolve obter tickets TGS usados por serviços vinculados a contas de usuário e quebrar sua criptografia—que é baseada em senhas de usuário—offline.
Mais sobre isso em:
{% content-ref url="kerberoast.md" %} kerberoast.md {% endcontent-ref %}
Conexão remota (RDP, SSH, FTP, Win-RM, etc)
Uma vez que você tenha obtido algumas credenciais, pode verificar se tem acesso a alguma máquina. Para isso, você pode usar CrackMapExec para tentar conectar em vários servidores com diferentes protocolos, de acordo com suas varreduras de portas.
Escalação de Privilégios Local
Se você comprometeu credenciais ou uma sessão como um usuário regular de domínio e tem acesso com esse usuário a qualquer máquina no domínio, você deve tentar encontrar uma maneira de escalar privilégios localmente e procurar por credenciais. Isso porque apenas com privilégios de administrador local você poderá extrair hashes de outros usuários na memória (LSASS) e localmente (SAM).
Há uma página completa neste livro sobre escalação de privilégios local no Windows e uma checklist. Além disso, não se esqueça de usar WinPEAS.
Tickets de Sessão Atuais
É muito improvável que você encontre tickets no usuário atual dando permissão para acessar recursos inesperados, mas você pode verificar:
## List all tickets (if not admin, only current user tickets)
.\Rubeus.exe triage
## Dump the interesting one by luid
.\Rubeus.exe dump /service:krbtgt /luid:<luid> /nowrap
[IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String("<BASE64_TICKET>"))
NTML Relay
Se você conseguiu enumerar o Active Directory, terá mais e-mails e uma melhor compreensão da rede. Você pode ser capaz de forçar ataques de NTML relay attacks.
Procure Credenciais em Compartilhamentos de Computador
Agora que você tem algumas credenciais básicas, deve verificar se consegue encontrar arquivos interessantes sendo compartilhados dentro do AD. Você poderia fazer isso manualmente, mas é uma tarefa repetitiva muito chata (e mais ainda se você encontrar centenas de documentos que precisa verificar).
Siga este link para aprender sobre ferramentas que você poderia usar.
Roubar Credenciais NTLM
Se você puder acessar outros PCs ou compartilhamentos, poderá colocar arquivos (como um arquivo SCF) que, se acessados de alguma forma, dispararão uma autenticação NTML contra você, permitindo que você roube o desafio NTLM para quebrá-lo:
{% content-ref url="../ntlm/places-to-steal-ntlm-creds.md" %} places-to-steal-ntlm-creds.md {% endcontent-ref %}
CVE-2021-1675/CVE-2021-34527 PrintNightmare
Essa vulnerabilidade permitiu que qualquer usuário autenticado comprometesse o controlador de domínio.
{% content-ref url="printnightmare.md" %} printnightmare.md {% endcontent-ref %}
Escalação de privilégios no Active Directory COM credenciais/sessão privilegiadas
Para as técnicas a seguir, um usuário de domínio regular não é suficiente, você precisa de alguns privilégios/credenciais especiais para realizar esses ataques.
Extração de Hash
Esperançosamente, você conseguiu comprometer alguma conta de administrador local usando AsRepRoast, Password Spraying, Kerberoast, Responder incluindo relaying, EvilSSDP, escalando privilégios localmente.
Então, é hora de despejar todos os hashes na memória e localmente.
Leia esta página sobre diferentes maneiras de obter os hashes.
Pass the Hash
Uma vez que você tenha o hash de um usuário, você pode usá-lo para impersoná-lo.
Você precisa usar alguma ferramenta que realize a autenticação NTLM usando esse hash, ou você pode criar um novo sessionlogon e injetar esse hash dentro do LSASS, para que quando qualquer autenticação NTLM for realizada, esse hash será usado. A última opção é o que o mimikatz faz.
Leia esta página para mais informações.
Over Pass the Hash/Pass the Key
Esse ataque visa usar o hash NTLM do usuário para solicitar tickets Kerberos, como uma alternativa ao comum Pass The Hash sobre o protocolo NTLM. Portanto, isso pode ser especialmente útil em redes onde o protocolo NTLM está desativado e apenas Kerberos é permitido como protocolo de autenticação.
{% content-ref url="over-pass-the-hash-pass-the-key.md" %} over-pass-the-hash-pass-the-key.md {% endcontent-ref %}
Pass the Ticket
No método de ataque Pass The Ticket (PTT), os atacantes roubam o ticket de autenticação de um usuário em vez de suas senhas ou valores de hash. Esse ticket roubado é então usado para impersonar o usuário, obtendo acesso não autorizado a recursos e serviços dentro de uma rede.
{% content-ref url="pass-the-ticket.md" %} pass-the-ticket.md {% endcontent-ref %}
Reutilização de Credenciais
Se você tiver o hash ou a senha de um administrador local, deve tentar fazer login localmente em outros PCs com ele.
# Local Auth Spray (once you found some local admin pass or hash)
## --local-auth flag indicate to only try 1 time per machine
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +
{% hint style="warning" %} Observe que isso é bastante barulhento e o LAPS mitigaria isso. {% endhint %}
Abuso de MSSQL e Links Confiáveis
Se um usuário tiver privilégios para acessar instâncias MSSQL, ele poderá usá-las para executar comandos no host MSSQL (se estiver rodando como SA), roubar o hash NetNTLM ou até mesmo realizar um ataque de relay.
Além disso, se uma instância MSSQL for confiável (link de banco de dados) por uma instância MSSQL diferente. Se o usuário tiver privilégios sobre o banco de dados confiável, ele poderá usar a relação de confiança para executar consultas também na outra instância. Essas confianças podem ser encadeadas e, em algum momento, o usuário pode ser capaz de encontrar um banco de dados mal configurado onde pode executar comandos.
Os links entre bancos de dados funcionam até mesmo através de confianças de floresta.
{% content-ref url="abusing-ad-mssql.md" %} abusing-ad-mssql.md {% endcontent-ref %}
Delegação Não Restrita
Se você encontrar qualquer objeto de Computador com o atributo ADS_UF_TRUSTED_FOR_DELEGATION e você tiver privilégios de domínio no computador, você poderá despejar TGTs da memória de todos os usuários que fazem login no computador.
Portanto, se um Administrador de Domínio fizer login no computador, você poderá despejar seu TGT e se passar por ele usando Pass the Ticket.
Graças à delegação restrita, você poderia até mesmo comprometer automaticamente um Servidor de Impressão (esperançosamente será um DC).
{% content-ref url="unconstrained-delegation.md" %} unconstrained-delegation.md {% endcontent-ref %}
Delegação Restrita
Se um usuário ou computador for permitido para "Delegação Restrita", ele poderá se passar por qualquer usuário para acessar alguns serviços em um computador.
Então, se você comprometer o hash desse usuário/computador, você poderá se passar por qualquer usuário (até mesmo administradores de domínio) para acessar alguns serviços.
{% content-ref url="constrained-delegation.md" %} constrained-delegation.md {% endcontent-ref %}
Delegação Baseada em Recursos
Ter privilégio de GRAVAÇÃO em um objeto do Active Directory de um computador remoto permite a obtenção de execução de código com privilégios elevados:
{% content-ref url="resource-based-constrained-delegation.md" %} resource-based-constrained-delegation.md {% endcontent-ref %}
Abuso de ACLs
O usuário comprometido pode ter alguns privilégios interessantes sobre alguns objetos de domínio que podem permitir que você mova lateralmente/escalone privilégios.
{% content-ref url="acl-persistence-abuse/" %} acl-persistence-abuse {% endcontent-ref %}
Abuso do serviço de Spooler de Impressão
Descobrir um serviço de Spooler ouvindo dentro do domínio pode ser abusado para adquirir novas credenciais e escalar privilégios.
{% content-ref url="printers-spooler-service-abuse.md" %} printers-spooler-service-abuse.md {% endcontent-ref %}
Abuso de sessões de terceiros
Se outros usuários acessarem a máquina comprometida, é possível coletar credenciais da memória e até mesmo injetar beacons em seus processos para se passar por eles.
Normalmente, os usuários acessarão o sistema via RDP, então aqui está como realizar alguns ataques sobre sessões RDP de terceiros:
{% content-ref url="rdp-sessions-abuse.md" %} rdp-sessions-abuse.md {% endcontent-ref %}
LAPS
LAPS fornece um sistema para gerenciar a senha do Administrador local em computadores associados ao domínio, garantindo que seja randomizada, única e frequentemente alterada. Essas senhas são armazenadas no Active Directory e o acesso é controlado através de ACLs apenas para usuários autorizados. Com permissões suficientes para acessar essas senhas, a transição para outros computadores se torna possível.
{% content-ref url="laps.md" %} laps.md {% endcontent-ref %}
Roubo de Certificados
Coletar certificados da máquina comprometida pode ser uma maneira de escalar privilégios dentro do ambiente:
{% content-ref url="ad-certificates/certificate-theft.md" %} certificate-theft.md {% endcontent-ref %}
Abuso de Modelos de Certificados
Se modelos vulneráveis estiverem configurados, é possível abusar deles para escalar privilégios:
{% content-ref url="ad-certificates/domain-escalation.md" %} domain-escalation.md {% endcontent-ref %}
Pós-exploração com conta de alto privilégio
Despejando Credenciais de Domínio
Uma vez que você obtenha privilégios de Administrador de Domínio ou até mesmo melhores Administradores de Empresa, você pode despejar o banco de dados do domínio: ntds.dit.
Mais informações sobre o ataque DCSync podem ser encontradas aqui.
Mais informações sobre como roubar o NTDS.dit podem ser encontradas aqui
Privesc como Persistência
Algumas das técnicas discutidas anteriormente podem ser usadas para persistência.
Por exemplo, você poderia:
- Tornar usuários vulneráveis a Kerberoast
Set-DomainObject -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}r
- Tornar usuários vulneráveis a ASREPRoast
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
- Conceder privilégios de DCSync a um usuário
Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync
Silver Ticket
O ataque Silver Ticket cria um ticket legítimo do Ticket Granting Service (TGS) para um serviço específico usando o hash NTLM (por exemplo, o hash da conta do PC). Este método é empregado para acessar os privilégios do serviço.
{% content-ref url="silver-ticket.md" %} silver-ticket.md {% endcontent-ref %}
Golden Ticket
Um ataque Golden Ticket envolve um atacante obtendo acesso ao hash NTLM da conta krbtgt em um ambiente Active Directory (AD). Esta conta é especial porque é usada para assinar todos os Tickets Granting Tickets (TGTs), que são essenciais para autenticação dentro da rede AD.
Uma vez que o atacante obtém esse hash, ele pode criar TGTs para qualquer conta que escolher (ataque Silver ticket).
{% content-ref url="golden-ticket.md" %} golden-ticket.md {% endcontent-ref %}
Diamond Ticket
Estes são como golden tickets forjados de uma maneira que bypassa mecanismos comuns de detecção de golden tickets.
{% content-ref url="diamond-ticket.md" %} diamond-ticket.md {% endcontent-ref %}
Persistência de Conta de Certificados
Ter certificados de uma conta ou ser capaz de solicitá-los é uma maneira muito boa de poder persistir na conta dos usuários (mesmo que ele mude a senha):
{% content-ref url="ad-certificates/account-persistence.md" %} account-persistence.md {% endcontent-ref %}
Persistência de Domínio de Certificados
Usar certificados também é possível para persistir com altos privilégios dentro do domínio:
{% content-ref url="ad-certificates/domain-persistence.md" %} domain-persistence.md {% endcontent-ref %}
Grupo AdminSDHolder
O objeto AdminSDHolder no Active Directory garante a segurança de grupos privilegiados (como Administradores de Domínio e Administradores de Empresa) aplicando uma Lista de Controle de Acesso (ACL) padrão em todos esses grupos para evitar alterações não autorizadas. No entanto, esse recurso pode ser explorado; se um atacante modificar a ACL do AdminSDHolder para dar acesso total a um usuário comum, esse usuário ganha controle extenso sobre todos os grupos privilegiados. Essa medida de segurança, destinada a proteger, pode, portanto, ter um efeito contrário, permitindo acesso não autorizado, a menos que monitorado de perto.
Mais informações sobre o Grupo AdminDSHolder aqui.
Credenciais DSRM
Dentro de cada Controlador de Domínio (DC), existe uma conta de administrador local. Ao obter direitos de administrador em tal máquina, o hash do Administrador local pode ser extraído usando mimikatz. Após isso, uma modificação no registro é necessária para habilitar o uso dessa senha, permitindo acesso remoto à conta do Administrador local.
{% content-ref url="dsrm-credentials.md" %} dsrm-credentials.md {% endcontent-ref %}
Persistência de ACL
Você poderia dar algumas permissões especiais a um usuário sobre alguns objetos de domínio específicos que permitirão que o usuário escalone privilégios no futuro.
{% content-ref url="acl-persistence-abuse/" %} acl-persistence-abuse {% endcontent-ref %}
Descritores de Segurança
Os descritores de segurança são usados para armazenar as permissões que um objeto tem sobre um objeto. Se você puder apenas fazer uma pequena mudança no descritor de segurança de um objeto, você pode obter privilégios muito interessantes sobre esse objeto sem precisar ser membro de um grupo privilegiado.
{% content-ref url="security-descriptors.md" %} security-descriptors.md {% endcontent-ref %}
Skeleton Key
Altere o LSASS na memória para estabelecer uma senha universal, concedendo acesso a todas as contas de domínio.
{% content-ref url="skeleton-key.md" %} skeleton-key.md {% endcontent-ref %}
SSP Personalizado
Saiba o que é um SSP (Provedor de Suporte de Segurança) aqui.
Você pode criar seu próprio SSP para capturar em texto claro as credenciais usadas para acessar a máquina.\
{% content-ref url="custom-ssp.md" %} custom-ssp.md {% endcontent-ref %}
DCShadow
Registra um novo Controlador de Domínio no AD e o usa para empurrar atributos (SIDHistory, SPNs...) em objetos especificados sem deixar nenhum log sobre as modificações. Você precisa de privilégios de DA e estar dentro do domínio raiz.
Observe que se você usar dados errados, logs bem feios aparecerão.
{% content-ref url="dcshadow.md" %} dcshadow.md {% endcontent-ref %}
Persistência LAPS
Anteriormente discutimos como escalar privilégios se você tiver permissões suficientes para ler senhas LAPS. No entanto, essas senhas também podem ser usadas para manter a persistência.
Verifique:
{% content-ref url="laps.md" %} laps.md {% endcontent-ref %}
Escalonamento de Privilégios de Floresta - Confianças de Domínio
A Microsoft vê a Floresta como o limite de segurança. Isso implica que comprometer um único domínio pode potencialmente levar a floresta inteira a ser comprometida.
Informações Básicas
Uma confiança de domínio é um mecanismo de segurança que permite que um usuário de um domínio acesse recursos em outro domínio. Ele essencialmente cria uma ligação entre os sistemas de autenticação dos dois domínios, permitindo que as verificações de autenticação fluam sem problemas. Quando os domínios configuram uma confiança, eles trocam e mantêm chaves específicas dentro de seus Controladores de Domínio (DCs), que são cruciais para a integridade da confiança.
Em um cenário típico, se um usuário pretende acessar um serviço em um domínio confiável, ele deve primeiro solicitar um ticket especial conhecido como um TGT inter-realm do DC de seu próprio domínio. Este TGT é criptografado com uma chave compartilhada que ambos os domínios concordaram. O usuário então apresenta este TGT ao DC do domínio confiável para obter um ticket de serviço (TGS). Após a validação bem-sucedida do TGT inter-realm pelo DC do domínio confiável, ele emite um TGS, concedendo ao usuário acesso ao serviço.
Passos:
- Um computador cliente no Domínio 1 inicia o processo usando seu hash NTLM para solicitar um Ticket Granting Ticket (TGT) de seu Controlador de Domínio (DC1).
- O DC1 emite um novo TGT se o cliente for autenticado com sucesso.
- O cliente então solicita um TGT inter-realm do DC1, que é necessário para acessar recursos no Domínio 2.
- O TGT inter-realm é criptografado com uma chave de confiança compartilhada entre DC1 e DC2 como parte da confiança de domínio bidirecional.
- O cliente leva o TGT inter-realm para o Controlador de Domínio do Domínio 2 (DC2).
- O DC2 verifica o TGT inter-realm usando sua chave de confiança compartilhada e, se válido, emite um Ticket Granting Service (TGS) para o servidor no Domínio 2 que o cliente deseja acessar.
- Finalmente, o cliente apresenta este TGS ao servidor, que é criptografado com o hash da conta do servidor, para obter acesso ao serviço no Domínio 2.
Diferentes confianças
É importante notar que uma confiança pode ser unidirecional ou bidirecional. Nas opções bidirecionais, ambos os domínios confiarão um no outro, mas na relação de confiança unidirecional, um dos domínios será o confiável e o outro o confiador. No último caso, você só poderá acessar recursos dentro do domínio confiador a partir do confiável.
Se o Domínio A confiar no Domínio B, A é o domínio confiador e B é o confiável. Além disso, no Domínio A, isso seria uma confiança de saída; e no Domínio B, isso seria uma confiança de entrada.
Diferentes relações de confiança
- Confianças Pai-Filho: Esta é uma configuração comum dentro da mesma floresta, onde um domínio filho automaticamente tem uma confiança transitiva bidirecional com seu domínio pai. Essencialmente, isso significa que as solicitações de autenticação podem fluir sem problemas entre o pai e o filho.
- Confianças de Link Cruzado: Referidas como "confianças de atalho", estas são estabelecidas entre domínios filhos para acelerar processos de referência. Em florestas complexas, as referências de autenticação normalmente precisam viajar até a raiz da floresta e depois descer até o domínio alvo. Ao criar links cruzados, a jornada é encurtada, o que é especialmente benéfico em ambientes geograficamente dispersos.
- Confianças Externas: Estas são configuradas entre diferentes domínios não relacionados e são não transitivas por natureza. De acordo com a documentação da Microsoft, as confianças externas são úteis para acessar recursos em um domínio fora da floresta atual que não está conectado por uma confiança de floresta. A segurança é reforçada através da filtragem de SID com confianças externas.
- Confianças de Raiz de Árvore: Essas confianças são automaticamente estabelecidas entre o domínio raiz da floresta e uma nova raiz de árvore adicionada. Embora não sejam comumente encontradas, as confianças de raiz de árvore são importantes para adicionar novas árvores de domínio a uma floresta, permitindo que mantenham um nome de domínio exclusivo e garantindo a transitividade bidirecional. Mais informações podem ser encontradas no guia da Microsoft.
- Confianças de Floresta: Este tipo de confiança é uma confiança transitiva bidirecional entre dois domínios raiz de floresta, também aplicando filtragem de SID para melhorar as medidas de segurança.
- Confianças MIT: Essas confianças são estabelecidas com domínios Kerberos não-Windows, compatíveis com RFC4120. As confianças MIT são um pouco mais especializadas e atendem a ambientes que exigem integração com sistemas baseados em Kerberos fora do ecossistema Windows.
Outras diferenças nas relações de confiança
- Uma relação de confiança também pode ser transitiva (A confia em B, B confia em C, então A confia em C) ou não transitiva.
- Uma relação de confiança pode ser configurada como confiança bidirecional (ambos confiam um no outro) ou como confiança unidirecional (apenas um deles confia no outro).
Caminho de Ataque
- Enumere as relações de confiança
- Verifique se algum principal de segurança (usuário/grupo/computador) tem acesso a recursos do outro domínio, talvez por entradas ACE ou por estar em grupos do outro domínio. Procure por relações entre domínios (a confiança foi criada para isso, provavelmente).
- Kerberoast neste caso poderia ser outra opção.
- Comprometa as contas que podem pivotar entre domínios.
Os atacantes poderiam acessar recursos em outro domínio através de três mecanismos principais:
- Membro de Grupo Local: Os principais podem ser adicionados a grupos locais em máquinas, como o grupo “Administradores” em um servidor, concedendo-lhes controle significativo sobre essa máquina.
- Membro de Grupo de Domínio Estrangeiro: Os principais também podem ser membros de grupos dentro do domínio estrangeiro. No entanto, a eficácia deste método depende da natureza da confiança e do escopo do grupo.
- Listas de Controle de Acesso (ACLs): Os principais podem ser especificados em uma ACL, particularmente como entidades em ACEs dentro de um DACL, proporcionando-lhes acesso a recursos específicos. Para aqueles que desejam se aprofundar na mecânica de ACLs, DACLs e ACEs, o whitepaper intitulado “An ACE Up The Sleeve” é um recurso inestimável.
Escalonamento de privilégios de floresta de filho para pai
Get-DomainTrust
SourceName : sub.domain.local --> current domain
TargetName : domain.local --> foreign domain
TrustType : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : WITHIN_FOREST --> WITHIN_FOREST: Both in the same forest
TrustDirection : Bidirectional --> Trust direction (2ways in this case)
WhenCreated : 2/19/2021 1:28:00 PM
WhenChanged : 2/19/2021 1:28:00 PM
{% hint style="warning" %}
Existem 2 chaves confiáveis, uma para Filho --> Pai e outra para Pai --> Filho.
Você pode usar a que está sendo utilizada pelo domínio atual com:
Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local
Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\mcorp$"'
{% endhint %}
Injeção de SID-History
Escalar como administrador da empresa para o domínio filho/pai abusando da confiança com injeção de SID-History:
{% content-ref url="sid-history-injection.md" %} sid-history-injection.md {% endcontent-ref %}
Explorar Configuração NC gravável
Entender como o Contexto de Nomeação de Configuração (NC) pode ser explorado é crucial. O NC de Configuração serve como um repositório central para dados de configuração em um ambiente de Active Directory (AD). Esses dados são replicados para todos os Controladores de Domínio (DC) dentro da floresta, com DCs graváveis mantendo uma cópia gravável do NC de Configuração. Para explorar isso, é necessário ter privilégios de SYSTEM em um DC, preferencialmente um DC filho.
Vincular GPO ao site do DC raiz
O contêiner de Sites do NC de Configuração inclui informações sobre todos os sites de computadores associados ao domínio dentro da floresta AD. Ao operar com privilégios de SYSTEM em qualquer DC, os atacantes podem vincular GPOs aos sites do DC raiz. Essa ação potencialmente compromete o domínio raiz manipulando políticas aplicadas a esses sites.
Para informações detalhadas, pode-se explorar pesquisas sobre Bypassing SID Filtering.
Comprometer qualquer gMSA na floresta
Um vetor de ataque envolve direcionar gMSAs privilegiados dentro do domínio. A chave raiz KDS, essencial para calcular as senhas dos gMSAs, é armazenada dentro do NC de Configuração. Com privilégios de SYSTEM em qualquer DC, é possível acessar a chave raiz KDS e calcular as senhas para qualquer gMSA na floresta.
Uma análise detalhada pode ser encontrada na discussão sobre Golden gMSA Trust Attacks.
Ataque de mudança de esquema
Esse método requer paciência, aguardando a criação de novos objetos AD privilegiados. Com privilégios de SYSTEM, um atacante pode modificar o Esquema AD para conceder a qualquer usuário controle total sobre todas as classes. Isso pode levar a acesso não autorizado e controle sobre objetos AD recém-criados.
Leitura adicional está disponível sobre Schema Change Trust Attacks.
De DA a EA com ADCS ESC5
A vulnerabilidade ADCS ESC5 visa o controle sobre objetos de Infraestrutura de Chave Pública (PKI) para criar um modelo de certificado que permite autenticação como qualquer usuário dentro da floresta. Como os objetos PKI residem no NC de Configuração, comprometer um DC filho gravável permite a execução de ataques ESC5.
Mais detalhes sobre isso podem ser lidos em From DA to EA with ESC5. Em cenários sem ADCS, o atacante tem a capacidade de configurar os componentes necessários, conforme discutido em Escalating from Child Domain Admins to Enterprise Admins.
Domínio de Floresta Externa - Unidirecional (Entrada) ou bidirecional
Get-DomainTrust
SourceName : a.domain.local --> Current domain
TargetName : domain.external --> Destination domain
TrustType : WINDOWS-ACTIVE_DIRECTORY
TrustAttributes :
TrustDirection : Inbound --> Inboud trust
WhenCreated : 2/19/2021 10:50:56 PM
WhenChanged : 2/19/2021 10:50:56 PM
Neste cenário, seu domínio é confiável por um externo, concedendo a você permissões indeterminadas sobre ele. Você precisará descobrir quais princípios do seu domínio têm qual acesso sobre o domínio externo e então tentar explorá-lo:
{% content-ref url="external-forest-domain-oneway-inbound.md" %} external-forest-domain-oneway-inbound.md {% endcontent-ref %}
Domínio de Floresta Externa - Unidirecional (Saída)
Get-DomainTrust -Domain current.local
SourceName : current.local --> Current domain
TargetName : external.local --> Destination domain
TrustType : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : FOREST_TRANSITIVE
TrustDirection : Outbound --> Outbound trust
WhenCreated : 2/19/2021 10:15:24 PM
WhenChanged : 2/19/2021 10:15:24 PM
Neste cenário, seu domínio está confiando alguns privilégios a um principal de domínios diferentes.
No entanto, quando um domínio é confiável pelo domínio confiável, o domínio confiável cria um usuário com um nome previsível que usa como senha a senha confiável. O que significa que é possível acessar um usuário do domínio confiável para entrar no confiável para enumerá-lo e tentar escalar mais privilégios:
{% content-ref url="external-forest-domain-one-way-outbound.md" %} external-forest-domain-one-way-outbound.md {% endcontent-ref %}
Outra maneira de comprometer o domínio confiável é encontrar um link SQL confiável criado na direção oposta da confiança do domínio (o que não é muito comum).
Outra maneira de comprometer o domínio confiável é esperar em uma máquina onde um usuário do domínio confiável pode acessar para fazer login via RDP. Então, o atacante poderia injetar código no processo da sessão RDP e acessar o domínio de origem da vítima a partir daí.
Além disso, se a vítima montou seu disco rígido, a partir do processo da sessão RDP, o atacante poderia armazenar backdoors na pasta de inicialização do disco rígido. Essa técnica é chamada de RDPInception.
{% content-ref url="rdp-sessions-abuse.md" %} rdp-sessions-abuse.md {% endcontent-ref %}
Mitigação de abuso de confiança de domínio
Filtragem de SID:
- O risco de ataques que aproveitam o atributo de histórico de SID em confianças de floresta é mitigado pela Filtragem de SID, que é ativada por padrão em todas as confianças inter-floresta. Isso é fundamentado na suposição de que as confianças intra-floresta são seguras, considerando a floresta, em vez do domínio, como o limite de segurança, de acordo com a posição da Microsoft.
- No entanto, há um problema: a filtragem de SID pode interromper aplicativos e o acesso do usuário, levando à sua desativação ocasional.
Autenticação Seletiva:
- Para confianças inter-floresta, empregar Autenticação Seletiva garante que os usuários das duas florestas não sejam autenticados automaticamente. Em vez disso, permissões explícitas são necessárias para que os usuários acessem domínios e servidores dentro do domínio ou floresta confiável.
- É importante notar que essas medidas não protegem contra a exploração do Contexto de Nomeação de Configuração (NC) gravável ou ataques à conta de confiança.
Mais informações sobre confianças de domínio em ired.team.
AD -> Azure & Azure -> AD
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity" %}
Algumas Defesas Gerais
Saiba mais sobre como proteger credenciais aqui.\
Medidas Defensivas para Proteção de Credenciais
- Restrições de Administradores de Domínio: Recomenda-se que os Administradores de Domínio só possam fazer login em Controladores de Domínio, evitando seu uso em outros hosts.
- Privilégios de Conta de Serviço: Os serviços não devem ser executados com privilégios de Administrador de Domínio (DA) para manter a segurança.
- Limitação Temporal de Privilégios: Para tarefas que exigem privilégios de DA, sua duração deve ser limitada. Isso pode ser alcançado por:
Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)
Implementando Técnicas de Decepção
- Implementar decepção envolve a configuração de armadilhas, como usuários ou computadores de isca, com recursos como senhas que não expiram ou são marcadas como Confiáveis para Delegação. Uma abordagem detalhada inclui a criação de usuários com direitos específicos ou adicioná-los a grupos de alto privilégio.
- Um exemplo prático envolve o uso de ferramentas como:
Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose
- Mais sobre a implementação de técnicas de decepção pode ser encontrado em Deploy-Deception no GitHub.
Identificando Decepção
- Para Objetos de Usuário: Indicadores suspeitos incluem ObjectSID atípico, logons infrequentes, datas de criação e contagens baixas de senhas incorretas.
- Indicadores Gerais: Comparar atributos de objetos de isca potenciais com os de objetos genuínos pode revelar inconsistências. Ferramentas como HoneypotBuster podem ajudar a identificar tais decepções.
Evitando Sistemas de Detecção
- Bypass de Detecção do Microsoft ATA:
- Enumeração de Usuários: Evitar a enumeração de sessões em Controladores de Domínio para prevenir a detecção do ATA.
- Impersonação de Ticket: Utilizar chaves aes para a criação de tickets ajuda a evitar a detecção ao não rebaixar para NTLM.
- Ataques DCSync: Executar a partir de um Controlador de Domínio não é recomendado para evitar a detecção do ATA, pois a execução direta a partir de um Controlador de Domínio acionará alertas.
Referências
- http://www.harmj0y.net/blog/redteaming/a-guide-to-attacking-domain-trusts/
- https://www.labofapenetrationtester.com/2018/10/deploy-deception.html
- https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain
{% hint style="success" %}
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.