Timeline Forensics no Windows: Plaso, Log2Timeline e KAPE na Pratica
Como montar super-timelines de um Windows 11 comprometido em VM de teste usando KAPE para coleta seletiva e Plaso para parsear 200+ artefatos.
Tres da manha, um chamado de incidente, e a unica coisa que voce tem e uma VDI Windows 11 com suspeita de execucao de payload as 22h47 do dia anterior. Sem EDR direito, sem SIEM agregando logs, so a maquina viva e quarenta minutos para entregar uma hipotese. Esse e o cenario em que timeline forensics deixa de ser exercicio academico e vira a diferenca entre dizer 'o atacante usou rundll32 carregando uma DLL de %AppData%\Roaming\winlog as 22:47:13' e dar de ombros. O laboratorio que monto neste post replica essa pressao em um Windows 11 isolado dentro do VMware Workstation, com snapshot limpo, snapshot pos-infeccao simulada e um detonador controlado.
A pilha que uso e simples e repetivel: KAPE da Eric Zimmerman para coleta triada (Targets do tipo !SANS_Triage levam menos de tres minutos), Plaso 20240308 rodando dentro de um container Ubuntu 24.04 com 16 GB de RAM dedicados, e Timeline Explorer mais Timesketch para navegacao. O fluxo padrao e: snapshot, detonar amostra (uso variantes inertes geradas no lab descrito em Analise de Malware em Lab Isolado: Setup Seguro com FlareVM e Remnux), coletar com KAPE para um VHDX, montar read-only no host de analise, e atirar log2timeline.py contra o ponto de montagem. Em hardware modesto, um disco de 80 GB com 18 GB ocupados gera plaso storage de ~1,2 GB e leva cerca de 22 minutos.
O ouro nao esta em rodar a ferramenta, esta em saber filtrar. Uma super-timeline crua do Plaso devolve facilmente 8 milhoes de eventos quando voce inclui parsers como winreg, prefetch, mft, usnjrnl, evtx, srum, amcache, shimcache e bam. Eu sempre comeco recortando uma janela de +-30 minutos em torno do indicador conhecido com psort.py -o l2tcsv --slice '2026-01-14T22:47:13' --slice_size 30. Esse recorte reduz para cerca de 14 mil linhas, ai filtro por sources do MFT, EVTX e Registry e jogo no Timeline Explorer com colorizacao por tipo. As tecnicas de hunting que combino aqui vem direto de Hunting de Living-off-the-Land Binaries no Windows com KQL e Threat Hunting com Sigma e Elastic: Do Indicador a Regra de Deteccao.
Um exemplo concreto do ultimo lab: o detonador era um LNK apontando para powershell.exe -enc, padrao parecido com o estudado em Initial Access Simulado: Macros, LNK e ISO em Lab Windows 11 Isolado. A primeira pista nao veio do EVTX, veio do Prefetch (POWERSHELL.EXE-7644F8E2.pf criado as 22:47:09, 4 segundos antes da execucao logada no Security 4688), e do Amcache.hve mostrando o hash SHA1 da DLL satellite que entrou via BITS. O UsnJrnl confirmou criacao do arquivo em C:\Users\elias\AppData\Roaming\winlog\runner.dll as 22:46:58, com timestamp do MFT $SI batendo com $FN, ou seja, sem timestomping nesse caso. Esse cruzamento de tres artefatos independentes e o que valida a hipotese; um sozinho mente facil.
Quem nunca usou KAPE estranha o modelo de Targets e Modules, mas e o que torna a coleta defensavel em um contexto legal. Eu mantenho um .tkape customizado que adiciona PowerShell\Operational, WMI-Activity, TaskScheduler, alem dos targets padrao de triagem, e um module que ja roda RECmd com os batch files do Zimmerman para extrair UserAssist, ShellBags, TypedPaths e o conjunto de RunMRU. Isso me da um diretorio Triage\ pronto para Plaso e outro Modules\ com CSVs ja parseados. Para incidente em endpoint segmentado em rede de pivoting (cenario que cubro em Pivoting com Chisel e Ligolo-ng: Redes Segmentadas em Lab de Pentest), KAPE roda local e exporta para compartilhamento autenticado, evitando trafego pesado.
Tres armadilhas que custam horas se voce nao conhece. Primeira: timezone. Plaso por padrao normaliza para UTC, mas o EVTX guarda em UTC e os artefatos de Registry as vezes guardam em local time mascarado de UTC. Sempre rodo com --timezone UTC e documento o offset da maquina. Segunda: VSS. Volume Shadow Copies escondem versoes anteriores do NTUSER.DAT e podem mostrar persistencia que foi limpa; KAPE coleta com --vss e Plaso processa com --vss-stores all. Terceira: parser do EVTX em Windows com muito ruido (Microsoft-Windows-Kernel-General gera milhoes de linhas) deve ser podado via --parsers '!winevtx_kernel_general' ou voce desperdica analise. Tecnicas defensivas correlatas estao em Persistencia em Windows: 10 Tecnicas Documentadas e suas Contramedidas.
Para entregar o achado, exporto a fatia relevante para Timesketch (docker compose up, ingest do plaso storage direto), crio sketch com tags como execution, persistence, c2_beacon e gero um relatorio com a feature de stories. Isso vira insumo direto para regras Sigma que alimentam a deteccao futura, fechando o ciclo descrito em Purple Team na Pratica: Construindo Ciclo de Feedback Red x Blue. O takeaway pratico: nao tente ler 8 milhoes de eventos, ancore em um IOC temporal, recorte uma janela de 30 minutos, cruze pelo menos tres artefatos independentes, e so depois escreva a narrativa. Timeline forensics nao e sobre coletar tudo, e sobre fazer o tempo testemunhar contra a hipotese errada.