Construir uma timeline de execução de programas a partir de uma hive SYSTEM

5 min de leitura

TL;DR. Construa uma timeline fundida de ShimCache + AmCache + Prefetch + BAM/DAM + Security/Sysmon. Use a ShimCache para definir o elenco (caminhos), depois enriqueça cada linha com timestamps de fontes que efetivamente registam eventos. Etiquete cada timestamp com a semântica da sua fonte. Nunca colapse "mtime do ficheiro" e "início de processo" numa só coluna.

Uma timeline de execução de programas é o artefacto mais útil que um investigador de IR de Windows produz. Bem feita, conta uma história cronológica através de várias fontes de dados. Mal feita, sobrevaloriza as evidências e é contestada por qualquer pessoa que saiba o que é um mtime. Aqui está o workflow que sigo, com a ShimCache como espinha dorsal.

Porque a ShimCache é uma boa espinha dorsal

A cache raramente é a fonte mais precisa para um único campo, mas tem vantagens únicas como âncora de timeline:

  • Carrega o caminho do ficheiro explicitamente. Alguns artefactos só têm hashes ou caminhos parciais.
  • Captura executáveis que o Windows apenas examinou, pelo que inclui binários que correram brevemente e foram apagados (o que o Prefetch e o BAM podem falhar).
  • Sobrevive a muitas tentativas anti-forense que apagam outros artefactos, com importantes ressalvas.

Use a ShimCache para definir o elenco de personagens na timeline. Depois enriqueça cada linha com artefactos corroborantes para atribuir tempos fiáveis.

As fontes de dados a fundir

Uma timeline completa de execução de programas puxa, pelo menos, destas cinco:

FonteO que adiciona à linha
ShimCacheCaminho + mtime do ficheiro
AmCacheSHA-1, tamanho do ficheiro, publisher, timestamp de instalação, timestamp de primeira execução
PrefetchTempos de início de processo (até aos últimos 8), módulos carregados
BAM/DAMTimestamp de "última execução" por utilizador em Win10/11
Security / SysmonEventos de criação de processo com linha de comandos, pai, utilizador

Para contexto, veja a referência de artefactos de execução de programas. Em casos maiores, integre SRUM para uso de rede e recursos, o USN journal para atividade de ficheiros, e ficheiros LNK mais jump lists para histórico de shell.

Um workflow reproduzível

  1. Recolher os artefactos. Hive SYSTEM com logs de transação, Amcache.hve com os seus .LOG1 e .LOG2, C:\Windows\Prefetch\*.pf, log de eventos Security exportado, log do Sysmon se disponível, NTUSER.DAT por utilizador. O guia de aquisição cobre a hive SYSTEM especificamente.
  2. Analisar cada uma para uma tabela normalizada. Use a suite de Eric Zimmerman (AppCompatCacheParser, AmcacheParser, PECmd) para trabalho offline, ou o Shimcache Parser para a parte da ShimCache no browser.
  3. Fundir por (path, SHA-1 opcional). A chave de junção é o caminho do ficheiro, com o SHA-1 da AmCache como sinal secundário. Atenção a diferenças de case e à normalização de caminhos (\??\C:\ vs C:\).
  4. Etiquetar cada timestamp com a semântica da sua fonte. Não funda "AmCache install_date" com "Prefetch run_time" numa só coluna. Respondem a perguntas diferentes. Mantenha-as adjacentes mas distintas.
  5. Renderizar com uma ferramenta que lide com atribuição de fonte por linha. O Timeline Explorer (TLE) de Eric Zimmerman e o Plaso / log2timeline ambos o fazem bem. CSV numa folha de cálculo serve para casos mais pequenos.

Como parece um bom resultado

Uma linha defensável numa timeline final:

2026-04-12 09:14:33 UTC  C:\Users\alice\AppData\Local\Temp\setup.exe
  ShimCache mtime: 2026-04-12 09:14:30 UTC
  AmCache       : SHA-1 a3b8c9..., signer "Acme Updates", install 2026-04-12 09:14:33
  Prefetch      : last run 2026-04-12 09:15:01 UTC (1 execution)
  Security 4688 : 2026-04-12 09:15:01 UTC, PID 4521, parent PID 1234 (svchost.exe)

Cada timestamp tem fonte e a linha resiste a contestação. O contrário ("a ShimCache mostra que o setup.exe correu às 09:14:33") confunde o mtime do ficheiro com a hora de execução e é o tipo de afirmação que faz relatórios serem rejeitados. Veja prova de execução.

Quando as fontes discordam

Conflitos são dados.

  • ShimCache mtime ≠ primeira execução do Prefetch. Normal. Medem coisas diferentes. Anote ambos. Não escolha um.
  • A AmCache diz que correu, a ShimCache está vazia para esse ficheiro. Razões possíveis: limpeza anti-forense (padrões de deteção), a entrada foi desalojada do cap de 1024 entradas, o binário correu depois do último clean shutdown (ainda só em memória, tire um dump de RAM).
  • Prefetch ausente. SKUs de servidor e hosts otimizados para SSD costumam ter o Prefetch desativado. Recorra à AmCache mais BAM.
  • EVTX Security 4688 tem nome do programa mas não linha de comandos. A auditoria de linha de comandos estava desligada. Útil mas limitado. O EVTX parser cobre os pré-requisitos de política de auditoria.

Parar no sítio certo

Uma timeline não precisa de ser completa para ter valor. Uma janela focada ("o que correu no host X entre as 14:00 e as 18:00 de 2026-04-11?") construída com rigor vence uma ampla mas com atribuição fraca. O workflow de caça a malware ajuda a escolher essa janela.

Leitura adicional

Artigos relacionados