Em resposta a incidente, a pergunta que decide tudo raramente é “o que o malware faz”. É “em que ordem as coisas aconteceram”. Sem ordem não há causa, e sem causa você corrige o sintoma e deixa a porta aberta.
A linha do tempo forense responde isso reunindo, em um único eixo cronológico, artefatos que normalmente vivem separados: sistema de arquivos, registro do Windows, histórico de navegador, logs de aplicação, execução de programas.
O que o Plaso faz
Plaso é o motor por trás do log2timeline. Ele varre uma imagem ou um diretório, reconhece dezenas de formatos de artefato e extrai cada evento com carimbo de tempo para uma base intermediária. Depois, psort filtra e exporta esse material no formato que você quiser.
A divisão em duas etapas é proposital: a extração é cara e você faz uma vez, a filtragem é barata e você repete quantas vezes precisar sem tocar na evidência.
Antes de tudo: preserve a evidência
Trabalhe sempre sobre cópia, nunca sobre o original, e registre o hash antes e depois.
sha256sum imagem.dd | tee imagem.dd.sha256
cp imagem.dd trabalho.dd
sha256sum trabalho.ddEsse par de hashes é o que sustenta a cadeia de custódia. Sem ele, a análise pode estar tecnicamente correta e ainda assim ser inútil em um processo. O mesmo cuidado que apliquei em Análise Forense de Memória RAM com Volatility vale aqui.
Etapa 1: extração
log2timeline.py --status_view window \
--storage_file caso.plaso \
trabalho.ddEm imagem de disco completo isso leva horas. Duas formas de encurtar quando o tempo aperta:
# apenas artefatos tipicos de Windows
log2timeline.py --parsers "winevtx,winreg,filestat,prefetch,usnjrnl" \
--storage_file caso.plaso trabalho.dd
# apenas uma particao especifica
log2timeline.py --partitions 2 --storage_file caso.plaso trabalho.ddRestringir analisadores é uma decisão de risco: você ganha tempo e pode perder o artefato que explicaria o caso. Em investigação sem hipótese formada, prefira a extração completa e vá tomar um café.
Etapa 2: recorte por janela de tempo
Uma linha do tempo bruta de uma estação comum passa de dez milhões de eventos. Ler isso não é análise, é sofrimento. O recorte temporal é o primeiro filtro:
psort.py -o dynamic \
-w caso.csv \
caso.plaso \
"date > '2026-01-15 00:00:00' AND date < '2026-01-18 23:59:59'"Se você não sabe a janela, descubra pelo artefato mais confiável que tiver: horário do alerta, data de criação de um arquivo suspeito, primeiro acesso anômalo no log do servidor.
Etapa 3: os filtros que revelam padrão
Alguns recortes rendem muito na maioria dos casos de comprometimento em Windows.
| Objetivo | Filtro |
|---|---|
| O que foi executado | parser is 'prefetch' OR parser is 'winreg/userassist' |
| Persistência criada | parser is 'winreg/run' |
| Autenticação e sessão | parser is 'winevtx' AND source_short is 'EVT' |
| Arquivos criados no período | parser is 'filestat' AND timestamp_desc contains 'Creation' |
| Downloads pelo navegador | parser contains 'chrome' OR parser contains 'firefox' |
Combine com o recorte de data. A pergunta que costuma quebrar o caso é: o que foi executado pela primeira vez dentro da janela suspeita? Programa que nunca havia rodado naquela máquina e roda justamente ali é um candidato forte.
Interpretando: cuidado com os carimbos
Três armadilhas derrubam análise de linha do tempo com frequência.
Fuso horário. Defina explicitamente com -z. Comparar evento em UTC com log de aplicação em horário local produz uma sequência de causa e efeito invertida, e você acusa o inocente.
Adulteração de carimbo. Atacantes alteram datas de arquivo para se esconder. O sistema de arquivos NTFS guarda dois conjuntos de carimbos, e a divergência entre eles é justamente o indício de manipulação. Por isso o usnjrnl vale ouro: ele registra a mudança, não só o estado final.
Granularidade. Artefatos diferentes têm precisão diferente. Dois eventos no mesmo segundo não provam ordem entre si. Quando a ordem importa, procure um artefato com resolução maior antes de afirmar.
Do CSV ao relatório
Exporte o recorte final e trabalhe nele com a ferramenta que você domina. O importante é que o relatório apresente a sequência, não a lista.
psort.py -o dynamic \
-w relatorio.csv \
--fields datetime,timestamp_desc,source,parser,display_name,message \
caso.plaso "date > '2026-01-15' AND date < '2026-01-19'"Um bom relatório de linha do tempo cabe em uma página e responde quatro perguntas: como entrou, o que executou, o que persistiu, o que levou. Todo o resto é anexo.
Vale para ambiente virtualizado também
Em máquinas virtuais o procedimento é o mesmo, com a vantagem de a captura ser mais simples e menos invasiva, como descrevi em Análise Forense em Ambientes Virtuais. Só não caia na tentação de analisar o disco com a máquina ligada: você contamina os próprios carimbos que veio investigar.