Analisando Logs de Eventos do Windows no Splunk
Quando Usar
Use esta skill quando:
- Analistas de SOC investigam alertas relacionados a autenticação do Windows, execução de processos ou alterações no AD
- Engenheiros de detecção constroem consultas SPL para detecção de ameaças baseadas em Windows
- Respondedores de incidentes precisam de linhas do tempo forenses de atividades em endpoints Windows ou controladores de domínio
- Caça a ameaças periódica tem como alvo técnicas ATT&CK específicas do Windows
Não use para análise de endpoints Linux/macOS ou investigações exclusivamente de rede.
Pré-requisitos
- Splunk com dados de log de eventos do Windows ingeridos (sourcetype
WinEventLog:Security,WinEventLog:System,XmlWinEventLog:Microsoft-Windows-Sysmon/Operational) - Sysmon implantado nos endpoints com configuração SwiftOnSecurity ou Olaf Hartong
- Aceleração do modelo de dados CIM para os modelos de dados Endpoint e Authentication
- Conhecimento dos IDs de eventos de segurança do Windows e tipos de eventos do Sysmon
Fluxo de Trabalho
Passo 1: Detecção de Ataques de Autenticação
Detecção de Força Bruta (EventCode 4625 — Falha de Logon):
index=wineventlog sourcetype="WinEventLog:Security" EventCode=4625
| stats count, dc(TargetUserName) AS unique_users, values(TargetUserName) AS targeted_users
by src_ip, Logon_Type, Status
| where count > 20
| eval attack_type = case(
Logon_Type=3, "Força Bruta de Rede",
Logon_Type=10, "Força Bruta RDP",
Logon_Type=2, "Força Bruta Interativa",
1=1, "Outro"
)
| eval status_meaning = case(
Status="0xc000006d", "Nome de Usuário ou Senha Inválidos",
Status="0xc000006a", "Senha Incorreta (usuário válido)",
Status="0xc0000234", "Conta Bloqueada",
Status="0xc0000072", "Conta Desabilitada",
1=1, Status
)
| sort - count
| table src_ip, attack_type, status_meaning, count, unique_users, targeted_users
Detecção de Password Spray:
index=wineventlog sourcetype="WinEventLog:Security" EventCode=4625 Logon_Type=3
| bin _time span=10m
| stats dc(TargetUserName) AS unique_users, count AS total_attempts,
values(TargetUserName) AS users_targeted by src_ip, _time
| where unique_users > 10 AND total_attempts < unique_users * 3
| eval spray_confidence = if(unique_users > 25, "ALTA", "MÉDIA")
Logon Bem-sucedido Após Falhas (Indicador de Comprometimento):
index=wineventlog sourcetype="WinEventLog:Security"
(EventCode=4625 OR EventCode=4624) src_ip!="127.0.0.1"
| sort _time
| stats earliest(_time) AS first_seen, latest(_time) AS last_seen,
sum(eval(if(EventCode=4625,1,0))) AS failures,
sum(eval(if(EventCode=4624,1,0))) AS successes
by src_ip, TargetUserName, ComputerName
| where failures > 10 AND successes > 0
| eval time_to_success = round((last_seen - first_seen)/60, 1)
| sort - failures
Passo 2: Detecção de Escalonamento de Privilégio
Nova Conta de Administrador Criada (T1136.001):
index=wineventlog sourcetype="WinEventLog:Security" EventCode=4720
| join TargetUserName type=left [
search index=wineventlog EventCode=4732 TargetUserName="Administrators"
| rename MemberName AS TargetUserName
]
| table _time, SubjectUserName, TargetUserName, ComputerName
| eval alert = "Nova conta criada e adicionada ao grupo Administradores"
Privilégios Especiais Atribuídos (EventCode 4672):
index=wineventlog sourcetype="WinEventLog:Security" EventCode=4672
SubjectUserName!="SYSTEM" SubjectUserName!="LOCAL SERVICE" SubjectUserName!="NETWORK SERVICE"
| stats count, values(PrivilegeList) AS privileges by SubjectUserName, ComputerName
| where count > 0
| search privileges IN ("SeDebugPrivilege", "SeTcbPrivilege", "SeBackupPrivilege",
"SeRestorePrivilege", "SeAssignPrimaryTokenPrivilege")
Detecção de Manipulação de Token (T1134):
index=sysmon EventCode=10 TargetImage="*\\lsass.exe"
GrantedAccess IN ("0x1010", "0x1038", "0x1fffff", "0x40")
| stats count by SourceImage, SourceUser, Computer, GrantedAccess
| where NOT match(SourceImage, "(svchost|csrss|wininit|MsMpEng|CrowdStrike)")
| sort - count
Passo 3: Detecção de Mecanismos de Persistência
Criação de Tarefa Agendada (T1053.005):
index=wineventlog (sourcetype="WinEventLog:Security" EventCode=4698)
OR (sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
Image="*\\schtasks.exe")
| eval task_info = coalesce(TaskContent, CommandLine)
| search task_info="*powershell*" OR task_info="*cmd*" OR task_info="*http*" OR task_info="*\\Temp\\*"
| table _time, Computer, SubjectUserName, TaskName, task_info
Modificação de Chave Run do Registro (T1547.001):
index=sysmon EventCode=13
TargetObject IN (
"*\\CurrentVersion\\Run\\*",
"*\\CurrentVersion\\RunOnce\\*",
"*\\CurrentVersion\\RunServices\\*",
"*\\Explorer\\Shell Folders\\*"
)
| stats count by Computer, Image, TargetObject, Details
| where NOT match(Image, "(explorer\\.exe|msiexec\\.exe|setup\\.exe)")
| sort - count
Assinatura de Evento WMI (T1546.003):
index=sysmon EventCode=20 OR EventCode=21
| stats count by Computer, Operation, Consumer, EventNamespace
| where count > 0
Passo 4: Detecção de Movimentação Lateral
Exploração de Serviço Remoto (T1021.002 — SMB/Compartilhamentos Administrativos do Windows):
index=wineventlog sourcetype="WinEventLog:Security" EventCode=4624 Logon_Type=3
| stats dc(ComputerName) AS unique_destinations, values(ComputerName) AS targets
by src_ip, TargetUserName
| where unique_destinations > 3
| sort - unique_destinations
| table src_ip, TargetUserName, unique_destinations, targets
Detecção de PsExec (T1021.002):
index=sysmon EventCode=1
(Image="*\\psexec.exe" OR Image="*\\psexesvc.exe"
OR ParentImage="*\\psexesvc.exe"
OR OriginalFileName="psexec.c")
| table _time, Computer, User, ParentImage, Image, CommandLine
Movimentação Lateral via RDP (T1021.001):
index=wineventlog sourcetype="WinEventLog:Security" EventCode=4624 Logon_Type=10
| stats count, dc(ComputerName) AS rdp_targets, values(ComputerName) AS destinations
by src_ip, TargetUserName
| where rdp_targets > 2
| sort - rdp_targets
Passo 5: Construir Linha do Tempo Forense
Crie uma linha do tempo abrangente para um host comprometido:
(index=wineventlog OR index=sysmon) Computer="WORKSTATION-042"
earliest="2024-03-14T00:00:00" latest="2024-03-16T00:00:00"
| eval event_description = case(
EventCode=4624, "Logon: ".TargetUserName." (Tipo ".Logon_Type.")",
EventCode=4625, "Falha de Logon: ".TargetUserName,
EventCode=4688 OR (sourcetype="XmlWinEventLog:*Sysmon*" AND EventCode=1),
"Processo: ".Image." CMD: ".CommandLine,
EventCode=4698, "Tarefa Agendada: ".TaskName,
EventCode=3, "Rede: ".DestinationIp.":".DestinationPort,
EventCode=11, "Arquivo Criado: ".TargetFilename,
EventCode=13, "Registro: ".TargetObject,
1=1, "Evento ".EventCode
)
| sort _time
| table _time, EventCode, event_description, User, src_ip
Passo 6: Criar Tabelas de Consulta para Enriquecimento
Construa referências de consulta para contexto de Event ID do Windows:
| inputlookup windows_eventcode_lookup.csv
| table EventCode, Description, ATT_CK_Technique, Severity
Se a tabela de consulta não existir, crie-a:
EventCode,Description,ATT_CK_Technique,Severity
4624,Logon Bem-sucedido,T1078,Informativo
4625,Falha de Logon,T1110,Baixo
4648,Logon com Credenciais Explícitas,T1078,Médio
4672,Privilégios Especiais Atribuídos,T1134,Médio
4688,Novo Processo Criado,T1059,Informativo
4698,Tarefa Agendada Criada,T1053.005,Médio
4720,Conta de Usuário Criada,T1136.001,Alto
4732,Membro Adicionado ao Grupo de Segurança,T1098,Alto
4768,Solicitação de TGT Kerberos,T1558,Informativo
4769,Ticket de Serviço Kerberos,T1558.003,Baixo
4771,Falha de Pré-autenticação Kerberos,T1110,Baixo
Conceitos-chave
| Termo | Definição |
|---|---|
| EventCode 4624 | Evento de logon bem-sucedido — Logon_Type 2 (interativo), 3 (rede), 10 (RDP), 7 (desbloqueio) |
| EventCode 4625 | Evento de falha de logon — Código de status indica o motivo da falha (senha incorreta, conta bloqueada, desabilitada) |
| Sysmon EventCode 1 | Criação de processo com linha de comando completa, processo pai e informações de hash |
| Sysmon EventCode 3 | Conexão de rede iniciada por um processo — IP de origem/destino, porta e contexto do processo |
| Logon Type 3 | Logon de rede (SMB, WMI, PowerShell Remoting) — indicador-chave de movimentação lateral |
| Logon Type 10 | Logon interativo remoto via RDP/Terminal Services |
Ferramentas e Sistemas
- Splunk Enterprise: Plataforma SIEM com mecanismo de consulta SPL para análise e correlação de logs de eventos do Windows
- Sysmon (System Monitor): Ferramenta Microsoft Sysinternals que fornece registro detalhado de processos, rede e atividades de arquivos
- Splunk CIM: Common Information Model mapeando eventos do Windows para campos normalizados para consultas entre fontes
- Windows Event Forwarding (WEF): Mecanismo interno do Windows para centralizar logs de eventos em um servidor coletor
Cenários Comuns
- Kerberoasting (T1558.003): Detecte EventCode 4769 com tipo de criptografia 0x17 (RC4) para contas de serviço não padrão
- DCSync (T1003.006): Detecte EventCode 4662 com DS-Replication-Get-Changes de fontes que não são controladores de domínio
- Golden Ticket (T1558.001): Detecte EventCode 4769 com propriedades anormais de ticket (vida útil longa, criptografia não padrão)
- Pass-the-Hash (T1550.002): Detecte EventCode 4624 Logon_Type 3 com autenticação NTLM de fontes inesperadas
- DLL Side-Loading (T1574.002): Sysmon EventCode 7 mostrando DLLs não assinadas carregadas por processos legítimos
Formato de Saída
ANÁLISE DE LOG DE EVENTOS DO WINDOWS — HOST: WORKSTATION-042
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Período: 2024-03-14 a 2024-03-15
Eventos: 12.847 total (Security: 9.231 | Sysmon: 3.616)
Resumo de Autenticação:
Logons Bem-sucedidos (4624): 487 (Tipo 3: 312, Tipo 10: 45, Tipo 2: 130)
Falhas de Logon (4625): 847 (de 192.168.1.105 — FORÇA BRUTA)
Credenciais Explícitas (4648): 12
Descobertas Suspeitas:
[ALTO] 847 falhas de logon seguidas de sucesso às 14:35 de 192.168.1.105
[ALTO] Novo usuário "backdoor_admin" criado (4720) às 14:38
[ALTO] Usuário adicionado ao grupo Administradores (4732) às 14:38
[MÉDIO] schtasks.exe criando tarefa de persistência às 14:42
[MÉDIO] Execução de comando PowerShell codificado às 14:45
Mapeamento ATT&CK:
T1110.001 — Adivinhação de Senha (847 falhas de logon)
T1136.001 — Criação de Conta Local (backdoor_admin)
T1053.005 — Tarefa Agendada (persistência)
T1059.001 — PowerShell (execução codificada)