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:
| Fonte | O que adiciona à linha |
|---|---|
| ShimCache | Caminho + mtime do ficheiro |
| AmCache | SHA-1, tamanho do ficheiro, publisher, timestamp de instalação, timestamp de primeira execução |
| Prefetch | Tempos de início de processo (até aos últimos 8), módulos carregados |
| BAM/DAM | Timestamp de "última execução" por utilizador em Win10/11 |
| Security / Sysmon | Eventos 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
- Recolher os artefactos. Hive SYSTEM com logs de transação,
Amcache.hvecom os seus.LOG1e.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. - 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. - 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:\vsC:\). - 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.
- 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
- Plaso / log2timeline, motor de timeline open source que consome ShimCache, AmCache, Prefetch e dezenas de outros artefactos do Windows.
- Ferramentas de Eric Zimmerman, parsers de referência mais Timeline Explorer.
- Velociraptor
Windows.Registry.AppCompatCache, recolha à escala.