# Hunting - Enumeração e Discovery Pós-Comprometimento
> [!high] Indicador Precoce de Comprometimento
> Comandos de discovery ([[t1082-system-information-discovery|T1082]], [[t1016-002-wi-fi-discovery|T1016]], [[t1057-process-discovery|T1057]]) executados em rápida sucessão são um dos indicadores mais confiáveis de atividade pós-comprometimento. Detectar essa fase permite interceptar o adversário antes de movimentação lateral e exfiltração.
## Visão Geral
A fase de [[t1082-system-information-discovery|discovery]] é uma das etapas mais previsíveis de um ataque. Após obter acesso inicial, virtualmente todos os adversários - desde script kiddies até APTs sofisticados - precisam entender o ambiente comprometido. Isso se manifesta como uma sequência rápida de comandos nativos do sistema operacional: `whoami`, `systeminfo`, `ipconfig`, `net view`, `tasklist`, `netstat`.
O que torna essa fase detectável é o **padrão temporal**: um usuário legítimo raramente executa 5-10 comandos de discovery em 60 segundos. Um adversário automatizado (via [[cobalt-strike]], [[sliver]] ou script customizado) frequentemente executa todos esses comandos em sequência rápida, gerando uma assinatura temporal clara.
Este playbook foca na detecção de padrões de enumeração rápida que indicam operação adversária, distinguindo-os do uso administrativo legítimo através de análise de frequência, contexto do processo pai e correlação com outros indicadores.
> [!latam] Impacto Regional
> Em incidentes investigados no Brasil, a sequência de discovery é tipicamente a primeira atividade pós-exploração observada. Banking trojans como **Grandoreiro** executam discovery para identificar software bancário instalado (`dir "C:\Program Files\*banco*"`). APTs como **Blind Eagle** fazem enumeração detalhada para selecionar alvos de alto valor em organizações governamentais.
---
## Hipóteses de Hunting
| # | Hipótese | Indicador | Confiança |
|---|----------|-----------|-----------|
| H1 | Adversários executam múltiplos comandos de discovery em menos de 2 minutos | 5+ comandos de reconhecimento em janela de 120 segundos | Alta |
| H2 | Processos de discovery lançados por PowerShell/cmd indicam automação maliciosa | `whoami`, `systeminfo` como filhos de scripts | Média-Alta |
| H3 | Enumeração de Active Directory indica preparação para lateral movement | `net group "Domain Admins"`, `nltest /dclist:` | Alta |
| H4 | Discovery executado fora do perfil habitual do usuário é anômalo | Usuário não-admin executando comandos de rede | Média |
| H5 | Ferramentas de enumeração de terceiros indicam ameaça avançada | ADFind.exe, SharpHound, BloodHound collectors | Muito Alta |
---
## Fluxo de Hunting
```mermaid
graph TB
H["Hipótese:<br/>Enumeração Adversária"] --> C1["Coletar Logs de<br/>Criação de Processo"]
C1 --> W["Janela Temporal:<br/>5+ cmds em 120s"]
W --> F1["Filtrar Sequências<br/>de Discovery"]
F1 --> F2["Correlacionar com<br/>Processo Pai"]
F2 --> V{"Padrão<br/>Adversário?"}
V -->|Sim| T["Investigar Host<br/>e Escalar"]
V -->|Não| B["Baseline de<br/>Admin Legítimo"]
```
**Legenda:** [[t1082-system-information-discovery|T1082]] - [[t1016-system-network-configuration-discovery|T1016]] - [[t1057-process-discovery|T1057]] - [[t1018-remote-system-discovery|T1018]]
---
## Fase 1 - Detecção
> [!warning] Aviso sobre as queries abaixo
> As queries são exemplos e pontos de partida. Administradores de sistemas e scripts de monitoramento legitimamente executam comandos de discovery. O fator diferenciador é a frequência e o contexto - construir baseline por role antes de criar alertas.
### H1 - Sequência Rápida de Comandos de Discovery
#### Microsoft Sentinel (KQL)
```kql
// Detectar sequência rápida de comandos de discovery (5+ em 120s)
let discoveryCommands = dynamic([
"whoami", "systeminfo", "ipconfig", "net view", "net user",
"net group", "net localgroup", "tasklist", "netstat", "arp",
"nslookup", "route print", "hostname", "query user",
"wmic", "nltest", "dsquery", "gpresult"
]);
DeviceProcessEvents
| where Timestamp > ago(24h)
| where FileName in~ ("whoami.exe", "systeminfo.exe", "ipconfig.exe",
"net.exe", "net1.exe", "tasklist.exe", "netstat.exe", "arp.exe",
"nslookup.exe", "route.exe", "hostname.exe", "query.exe",
"wmic.exe", "nltest.exe", "dsquery.exe", "gpresult.exe")
| summarize CommandCount = count(),
CommandList = make_set(FileName),
MinTime = min(Timestamp),
MaxTime = max(Timestamp)
by DeviceName, AccountName, bin(Timestamp, 2m)
| where CommandCount >= 5
| extend TimeSpanSeconds = datetime_diff('second', MaxTime, MinTime)
| where TimeSpanSeconds <= 120
| order by CommandCount desc
```
Tabela(s): `DeviceProcessEvents` (Microsoft Defender for Endpoint)
#### Splunk SPL
```spl
index=sysmon EventCode=1
(Image="*\\whoami.exe" OR Image="*\\systeminfo.exe" OR Image="*\\ipconfig.exe"
OR Image="*\\net.exe" OR Image="*\\net1.exe" OR Image="*\\tasklist.exe"
OR Image="*\\netstat.exe" OR Image="*\\arp.exe" OR Image="*\\nltest.exe"
OR Image="*\\hostname.exe" OR Image="*\\nslookup.exe" OR Image="*\\wmic.exe")
| bin _time span=2m
| stats count as cmd_count, values(Image) as commands,
min(_time) as first_cmd, max(_time) as last_cmd
by Computer, User, _time
| where cmd_count >= 5
| eval time_span = last_cmd - first_cmd
| where time_span <= 120
| sort - cmd_count
```
Fonte de dados: Sysmon Event ID 1, [[ds0009-process|DS0009 - Process]]
### H3 - Enumeração de Active Directory
#### Microsoft Sentinel (KQL)
```kql
// Enumeração de AD: Domain Admins, Domain Controllers, trusts
DeviceProcessEvents
| where ProcessCommandLine has_any (
"Domain Admins", "Enterprise Admins", "Schema Admins",
"/dclist:", "dsquery", "Get-ADUser", "Get-ADGroup",
"Get-ADComputer", "Get-ADDomain", "Get-ADForest",
"net group /domain", "net user /domain")
| where InitiatingProcessFileName !in~ ("mmc.exe", "ServerManager.exe")
| project Timestamp, DeviceName, AccountName, ProcessCommandLine,
InitiatingProcessFileName
| order by Timestamp desc
```
#### Splunk SPL
```spl
index=sysmon EventCode=1
(CommandLine="*Domain Admins*" OR CommandLine="*Enterprise Admins*"
OR CommandLine="*/dclist:*" OR CommandLine="*dsquery*"
OR CommandLine="*Get-ADUser*" OR CommandLine="*Get-ADGroup*"
OR CommandLine="*net group /domain*" OR CommandLine="*net user /domain*")
NOT (ParentImage="*\\mmc.exe" OR ParentImage="*\\ServerManager.exe")
| table _time, Computer, User, CommandLine, ParentImage
| sort - _time
```
### H5 - Ferramentas de Enumeração de Terceiros
#### Microsoft Sentinel (KQL)
```kql
// Ferramentas de enumeração AD de terceiros (BloodHound, ADFind, etc.)
DeviceProcessEvents
| where FileName in~ ("adfind.exe", "sharphound.exe", "rubeus.exe",
"seatbelt.exe", "sharpup.exe", "lazagne.exe", "adrecon.ps1")
or ProcessCommandLine has_any ("Invoke-BloodHound", "Invoke-ShareFinder",
"Invoke-Portscan", "Get-NetDomain", "Get-NetComputer", "Find-LocalAdminAccess")
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
InitiatingProcessFileName
| order by Timestamp desc
```
---
## Fase 2 - Triagem e Investigação
### Perguntas-chave a responder
- [ ] O usuário tem role administrativo que justifique a enumeração?
- [ ] A sequência de comandos é consistente com scripts de monitoramento conhecidos?
- [ ] Houve acesso inicial recente (phishing, exploit) para esse host/usuário?
- [ ] Há evidência de [[t1059-001-powershell|execução de scripts]] no mesmo timeframe?
- [ ] Outros hosts na mesma subnet mostram padrão similar?
### Timeline completa do host
```kql
// Timeline de 24h em torno do alerta
let targetDevice = "HOSTNAME_AQUI";
let alertTime = datetime(2026-03-28T12:00:00Z);
DeviceProcessEvents
| where DeviceName == targetDevice
| where Timestamp between ((alertTime - 12h) .. (alertTime + 12h))
| project Timestamp, FileName, ProcessCommandLine, AccountName,
InitiatingProcessFileName
| order by Timestamp asc
```
---
## Fase 3 - Contenção
> [!danger] Ação com Impacto Potencial
> Discovery em si não é destrutivo, mas indica que o adversário está mapeando o ambiente. A prioridade é conter antes que ele avance para [[t1021-remote-services|lateral movement]] ou [[t1048-exfiltration-over-alternative-protocol|exfiltração]].
### Contenção imediata (primeiros 30 min)
- [ ] Isolar host via EDR (network containment)
- [ ] Revogar credenciais do usuário comprometido
- [ ] Verificar se credenciais privilegiadas foram acessadas
- [ ] Monitorar hosts adjacentes na mesma subnet
### Contenção de longo prazo
- [ ] Aplicar [[m1018-user-account-management|M1018 - User Account Management]] para limitar discovery
- [ ] Implementar segmentação de rede para limitar visibilidade
- [ ] Habilitar Credential Guard para proteger credenciais em memória
---
## Fase 4 - Erradicação
- [ ] Identificar e remover o mecanismo de acesso inicial
- [ ] Verificar se o adversário já estabeleceu persistência ([[t1053-005-scheduled-task|tarefas]], [[t1547-001-registry-run-keys|registry]])
- [ ] Resetar todas as credenciais que foram enumeradas
- [ ] Verificar se houve criação de contas ([[t1136-create-account|T1136]])
---
## Fase 5 - Recuperação
- [ ] Restaurar sistema se persistência foi confirmada
- [ ] Monitorar por 72h com foco em comandos de discovery recorrentes
- [ ] Atualizar baseline de comandos administrativos legítimos por role
- [ ] Documentar IOCs e compartilhar indicadores
---
## Automação SOAR
### Microsoft Sentinel Automation Rules
1. Analytic Rule: 5+ comandos de discovery em 2 minutos
2. Enrichment: verificar se usuário é admin, consultar horário de trabalho
3. Auto-criar incidente P2 se fora do horário ou usuário não-admin
4. Auto-isolar se combinado com alerta de acesso inicial nas últimas 24h
### Splunk SOAR
Playbook: `Discovery Burst Detection`
1. Trigger: correlação de 5+ eventos Sysmon 1 com discovery commands
2. Verificar baseline do usuário nos últimos 30 dias
3. Se anomalia confirmada: isolar e criar ticket
4. Se baseline normal: suprimir alerta e documentar
---
## Lições Aprendidas
> [!note] Preencher após execução real
> - O que funcionou conforme esperado?
> - O que falhou ou precisou de adaptação?
> - Quais regras de detecção geraram falsos positivos?
> - O que deve ser ajustado neste playbook?
---
## Notas Relacionadas
- [[t1082-system-information-discovery|T1082 - System Information Discovery]] - Técnica principal
- [[t1016-system-network-configuration-discovery|T1016 - Network Configuration Discovery]]
- [[t1057-process-discovery|T1057 - Process Discovery]]
- [[t1018-remote-system-discovery|T1018 - Remote System Discovery]]
- [[t1049-system-network-connections-discovery|T1049 - Network Connections Discovery]]
- [[cobalt-strike]] - Automação de discovery via Beacon
- [[sliver]] - C2 open-source com módulos de discovery
- [[ds0009-process|DS0009 - Process]] - Data source principal
- [[ds0017-command|DS0017 - Command]] - Logs de comando
- [[hunting-lateral-movement]] - Playbook da fase seguinte
- [[hunting-credential-dumping]] - Frequentemente ocorre após discovery
- [[m1018-user-account-management|M1018 - User Account Management]] - Mitigação