05 - Hunting por Coleta de Credenciais (LSASS, SAM)
video: https://youtu.be/... no frontmatter da nota.Hunting por Coleta de Credenciais (LSASS, SAM)
Nota 05 do Capítulo 08, "Técnicas de Hunting por TTPs", fechando o ciclo com a tática de
Acesso a Credenciais (TA0006), em que o hunting vale diretamente o futuro do ambiente, pois
credencial roubada converte comprometimento local em domínio inteiro. Dialoga com as notas
01 a 04, com o TH.13 de hunting de memória e com o TH.14 de análise de autenticação.
1. Contexto e Posicionamento na Biblioteca
A Coleta de Credenciais é a tática que transforma acesso em domínio, e é também a tática em que o adversário mais depende de ações física ou logicamente invasivas no host: abrir a memória de um processo de sistema, copiar arquivos protegidos ou solicitar tickets e réplicas ao controlador de domínio. Essa dependência de ações invasivas é a vantagem estrutural do caçador, porque quase toda técnica de coleta deixa traço de processo, de acesso a memória ou de autenticação, ao contrário de técnicas puramente de rede. O custo de um hunt bem sucedido aqui é altíssimo em valor: identificar coleta de credenciais interrompe a escalada antes que o movimento lateral se generalize.
A nota organiza a caça em três camadas. A primeira mapeia as técnicas de dumping e de ataque a protocolos, com os eventos que cada uma produz. A segunda detalha os sinais de acesso ao LSASS, o alvo mais recorrente da tática, com as máscaras de acesso e o CallTrace que separam ferramentas de suporte de dumpers. A terceira apresenta as consultas por família, culminando em Kerberoasting e DCSync, onde a caça migra do endpoint para o controlador de domínio e exige correlação com a nota 04, pois coleta e enumeração quase sempre se alternam na mesma janela.
2. Técnicas de Coleta de Credenciais e Telemetria Associada
A tabela consolida as técnicas da tática sob a família T1003 do ATT&CK e seus derivados de abuso de Kerberos na T1558, com os eventos que revelam cada uma.
| Técnica | ID ATT&CK | Ação típica | Eventos-chave |
|---|---|---|---|
| LSASS Memory | T1003.001 | procdump, comsvcs MiniDump, acesso direto à memória | Sysmon 10; 4688 do dumper |
| Security Account Manager | T1003.002 | reg save HKLM\SAM e HKLM\SYSTEM | Sysmon 1; 4657; acesso a arquivos pelo EDR |
| NTDS.dit | T1003.003 | ntdsutil ifm, esentutl, cópia via shadow copy | Sysmon 1 e 11; 4662 correlato |
| LSA Secrets e cached credentials | T1003.004, T1003.005 | reg save SECURITY, Extração via ferramentas | Sysmon 1; acesso a hive pelo EDR |
| Kerberoasting | T1558.003 | Rubeus e GetNPUsers solicitando SPNs | 4769 com TicketEncryptionType 0x17 |
| AS-REP Roasting | T1558.004 | AS-REQ sem preauth contra contas vulneráveis | 4768 com PreAuthType 0 |
| DCSync | T1003.006 | replicação forçada por MS-DRSR | 4662 com GUIDs de replicação |
A dependência de telemetria é severa nesta tática. Sysmon 10 com exclusão calibrada é o requisito mínimo para LSASS; telemetria de arquivo do EDR cobre cópia de hives; e a auditoria de DS Access no controlador de domínio sustenta 4662 e 4769. O inventário do DAT.1 deve registrar essa cobertura por domínio, e a ausência de Sysmon 10 nos servidores de identidade é a lacuna mais crítica que um programa de hunting pode carregar, pois é exatamente lá que o DCSync e o dumping mais agressivo acontecem.
3. Sinais de Acesso ao LSASS
O LSASS mantém em memória as credenciais de logons ativos, e todo dumping começa por um handle de processo com direitos de leitura de memória, registrado pelo Sysmon 10 com a origem, o alvo, a máscara GrantedAccess e o CallTrace. As máscaras com histórico de abuso são 0x1010 e 0x1410, usadas por dumpers que solicitam VM_READ e QUERY_INFORMATION, 0x147a, usada por Mimikatz clássico, e 0x1FFFFF, PROCESS_ALL_ACCESS, típica de ferramentas menos sofisticadas. A origem é o discriminador mais forte: processos de suporte legítimos, como clientes de EDR, WDAC e depuradores corporativos, aparecem sempre nos mesmos hosts e caminhos, e um binário novo, executado de caminho de usuário, ou um processo de Office acessando LSASS é sinal de coleta praticamente inequívoco.
O CallTrace complementa com a origem da chamada: pilhas que não resolvem para módulo no disco, com UNKNOWN, ou que passam por DLLs de interpretadores, como VBE7.DLL, indicam acesso programático por código injetado, e a combinação com a máscara 0x1410 encerra o julgamento. Vale registrar a exceção operacional: após falhas de serviço ou upgrades, o WerFault e o svchost podem acessar LSASS com máscaras amplas por razões legítimas, e é por isso que a baseline do TH.2 deve mapear essas ocorrências recorrentes antes de calibrar os limiares de priorização. A tabela consolida as máscaras de referência para a leitura rápida do evento.
| Máscara GrantedAccess | Direitos implicados | Interpretação típica |
|---|---|---|
| 0x1010 | VM_READ e QUERY_INFORMATION | Padrão de dumpers discretos que apenas leem memória |
| 0x1410 | VM_READ, QUERY_INFORMATION e VM_OPERATION | Padrão de Mimikatz e derivados, prioridade alta |
| 0x147a | Combinação com VM_WRITE | Leitura e escrita, típica de manipulação direta de memória |
| 0x1FFFFF | PROCESS_ALL_ACCESS | Ferramentas pouco sofisticadas ou abuso de utilitário de suporte |
| 0x1F0FFF e variantes | Conjunto quase completo sem WRITE | Ferramentas de coleta que evitam escrita para reduzir traço |
4. Consultas Práticas em KQL
4.1 Acesso à memória do LSASS
A consulta abaixo isola acessos com máscaras de abuso e exclui as origens de sistema mais recorrentes, com ajuste fino a partir da baseline.
Event
| where Source == "Microsoft-Windows-Sysmon" and EventID == 10
| extend X = parse_xml(EventData).DataItem.EventData.Data
| extend SourceImage = tostring(X[5]["@text"]), TargetImage = tostring(X[8]["@text"]),
GrantedAccess = tostring(X[9]["@text"]), CallTrace = tostring(X[10]["@text"])
| where TargetImage endswith "\\lsass.exe"
| where GrantedAccess in ("0x1010", "0x1410", "0x147a", "0x1FFFFF", "0x1F1FFF")
| where not(SourceImage has "\\Windows\\System32\\" and SourceImage has_any ("svchost.exe", "csrss.exe"))
| project TimeGenerated, Computer, SourceImage, GrantedAccess, CallTrace
4.2 Dumpers conhecidos e renomeados
O padrão comsvcs é a via mais usada de dumping sem baixar ferramenta, porque rundll32 e comsvcs.dll são nativos. O padrão procdump cobre a ferramenta legítima abusada, inclusive renomeada.
DeviceProcessEvents
| where Timestamp > ago(30d)
| where FileName =~ "rundll32.exe" and ProcessCommandLine has "comsvcs.dll"
and ProcessCommandLine has "MiniDump"
| project Timestamp, DeviceName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine
Event
| where Source == "Microsoft-Windows-Sysmon" and EventID == 1
| extend X = parse_xml(EventData).DataItem.EventData.Data
| extend Image = tostring(X[4]["@text"]), OriginalFileName = tostring(X[9]["@text"]),
CommandLine = tostring(X[10]["@text"])
| where OriginalFileName =~ "procdump" or CommandLine has "procdump"
| where CommandLine has_any ("lsass", "-ma", "-mm", "-a")
| project TimeGenerated, Computer, Image, OriginalFileName, CommandLine
4.3 Cópia de hives e volume shadow copy
A cópia de SAM, SYSTEM e SECURITY, o abuso de shadow copy e o dump do NTDS aparecem como comandos nativos executados com privilégio, e a consulta os cobre em uma passada única.
DeviceProcessEvents
| where Timestamp > ago(30d)
| where (FileName =~ "reg.exe" and ProcessCommandLine has_any ("save HKLM\\SAM", "save HKLM\\SYSTEM", "save HKLM\\SECURITY"))
or (FileName =~ "vssadmin.exe" and ProcessCommandLine has_any ("create shadow", "list shadows"))
or (FileName =~ "ntdsutil.exe" and ProcessCommandLine has "ifm")
or (FileName =~ "esentutl.exe" and ProcessCommandLine has "ntds")
or (FileName =~ "wmic.exe" and ProcessCommandLine has "shadowcopy")
| project Timestamp, DeviceName, FileName, ProcessCommandLine, AccountName, InitiatingProcessFileName
4.4 Kerberoasting e DCSync
No controlador de domínio, o Kerberoasting aparece como rajada de 4769 com criptografia RC4 e contas de serviço distintas em janela curta, e o DCSync como 4662 com GUIDs de replicação solicitados por conta que não é controlador de domínio.
SecurityEvent
| where EventID == 4769 and TimeGenerated > ago(7d)
| where TicketEncryptionType in ("0x17", "0x18") and ServiceName !endswith "$" and Status == "0x0"
| summarize SPNsDistintos = dcount(ServiceName), Pedidos = count() by TargetUserName, bin(TimeGenerated, 5m)
| where SPNsDistintos >= 10
| order by SPNsDistintos desc
SecurityEvent
| where EventID == 4662 and ObjectServer == "DS" and TimeGenerated > ago(7d)
| where Properties has "1131f6aa-9c07-11d1-f79f-00c04fc2dcd2"
or Properties has "1131f6ad-9c07-11d1-f79f-00c04fc2dcd2"
| where SubjectUserName !endswith "$" and SubjectUserName !in ("SYSTEM", "KRBTGT")
| project TimeGenerated, Computer, SubjectUserName, ObjectDN, OperationType
A leitura conjunta das duas consultas é decisiva: Kerberoasting precede DCSync na maioria das trilhas de escalada, e a janela entre as duas é a margem de ação da resposta. Contas de replicação legítimas, como agentes de sincronização de identidade, devem entrar na baseline do TH.2, porque tocam os mesmos GUIDs com frequência regular. O AS-REP Roasting complementa a família de Kerberos e aparece no 4768 como autenticação sem pré-autenticação usando criptografia RC4, contra contas que deveriam ter pré-autenticação obrigatória, o que torna a consulta também um controle de higiene de domínio.
SecurityEvent
| where EventID == 4768 and TimeGenerated > ago(7d)
| where PreAuthType == 0 and TicketEncryptionType in ("0x17", "0x18")
| summarize Pedidos = count(), Hosts = dcount(Computer) by TargetUserName, bin(TimeGenerated, 1h)
| where Pedidos >= 3
| order by Pedidos desc
5. Exemplo de Caça Completa
Cenário: alerta fraco de EDR em uma estação de contabilidade menciona acesso anômalo a processo, sem veredito. A hipótese do TH.6 é coleta de credenciais em preparação de movimento lateral. A consulta de LSASS retorna Sysmon 10 com origem rundll32 de caminho de usuário, máscara 0x1410 e CallTrace com UNKNOWN, e a consulta de dumpers confirma a linha de comando com comsvcs.dll e MiniDump apontando para um arquivo em ProgramData.
A linha do tempo reconstrói a trilha completa: macro em documento do Excel de phishing executou o rundll32, o dump foi exfiltrado por SMB para um compartilhamento, e, 40 minutos depois, a conta do usuário comprometido gerou 62 pedidos 4769 com RC4 contra SPNs distintos no controlador de domínio, seguidos de um 4662 com GUID de replicação de outra conta de serviço comprometida, caracterizando tentativa de DCSync. A resposta segue o IR.x com revogação imediata de credenciais, reset em cascata dos SPNs tocados, contenção da estação e do compartilhamento, e o caso alimenta o capítulo 18 com duas detecções permanentes, acesso a LSASS por rundll32 e rajada de RC4 por conta, e devolve ao capítulo 05 a ferramenta e a infraestrutura de phishing da campanha.
6. Erros Comuns e Pontos de Atenção
- Tratar toda máscara alta no Sysmon 10 como dumping: clientes de suporte, depuradores e o próprio WerFault acessam LSASS legitimamente, e a priorização exige baseline de origens antes de limiares.
- Buscar apenas procdump e mimikatz por nome: a via dominante em ataques recentes é comsvcs.dll via rundll32, sem binário novo em disco, e dumpers renomeados só são detectados pelo OriginalFileName do Sysmon 1.
- Esquecer que a cópia de hives não toca o LSASS: consultas focadas em acesso à memória deixam passar reg save de SAM e SECURITY executado com privilégio de backup, técnica inteira sem um único evento de memória.
- Aplicar limiar global no 4769: contas de sincronização e ferramentas de gestão de identidade pedem tickets em rajada legítima, e o limiar precisa ser calibrado por conta com a baseline do TH.2.
- Filtrar o DCSync apenas por conta terminada em cifrão: a maioria dos DCSync usa conta de usuário comprometida com direito de replicação, e o filtro correto é positivo, listando as contas autorizadas a replicar.
7. Integração com o Restante da Biblioteca
A caça de credenciais depende do TH.13 para aprofundar a análise de memória quando o Sysmon 10 precisa de confirmação, consome o TH.14 para julgar as autenticações que sucedem a coleta e se conecta à nota 04, pois enumeração e coleta se alternam na mesma janela de operação. Os padrões confirmados se convertem em detecções do capítulo 18 e do DET.x, o comprometimento de credenciais abre o IR.x com prioridade de revogação em massa, e a inteligência do capítulo 05 recebe a ferramenta, a campanha de phishing e a infraestrutura associadas. O controle HNT.5 recebe a hipótese derivada do relatório do grupo atacante, fechando o ciclo intelligence-driven.
Uma orientação operacional encerra a nota: as consultas de LSASS e de dumpers aceitam execução contínua com ruído baixo depois da primeira calibração de baseline, e devem virar detecção permanente assim que estabilizadas, enquanto Kerberoasting e DCSync rendem mais em modo de caça dirigida, disparada por vazamento de contas de serviço, por mudança de permissões de replicação ou por qualquer alerta da nota 04, pois a janela entre coleta e escalação é curta e a resposta precisa estar acionada por gente, não apenas por regra.