Andrey Escarião

Pesquisas, contos e ciência.

Linha do tempo forense com Plaso e log2timeline

·

·

5 min de leitura

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.dd

Esse 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.dd

Em 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.dd

Restringir 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.

ObjetivoFiltro
O que foi executadoparser is 'prefetch' OR parser is 'winreg/userassist'
Persistência criadaparser is 'winreg/run'
Autenticação e sessãoparser is 'winevtx' AND source_short is 'EVT'
Arquivos criados no períodoparser is 'filestat' AND timestamp_desc contains 'Creation'
Downloads pelo navegadorparser 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.