# 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