ShimCache vs Prefetch: qual prova que um programa correu?

4 min de leitura

TL;DR. O Prefetch é prova real de execução com contagens e tempos de execução. A ShimCache apenas prova que um ficheiro existiu e foi examinado. Se precisa de "correu, e quando?", recorra primeiro ao Prefetch. Se o Prefetch estiver desativado ou apagado, a ShimCache torna-se a sua testemunha de existência de recurso.

São constantemente comparados porque ambos fazem emergir "programas num host Windows". Não são o mesmo tipo de prova. Trate-os como intercambiáveis e produz conclusões erradas. Eis o cabeça a cabeça.

Numa rápida vista de olhos

ShimCachePrefetch
LocalizaçãoHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCacheC:\Windows\Prefetch\*.pf
O que provaFicheiro existiu e foi examinadoFicheiro foi executado
Contagem de execuçõesNãoSim
Timestamps de execuçãoNão (apenas mtime do ficheiro)Sim, últimos 8 tempos de execução
Ficheiros referenciadosNãoSim, DLLs e ficheiros de dados carregados
Quando é escritoApenas em clean shutdownEm cerca de 10 s da execução
Por defeito em SKUs de estação de trabalhoSimSim
Por defeito em SKUs de servidorSimFrequentemente desativado
CapacidadeAté cerca de 1024 entradas1024 ficheiros .pf em Win8+

Onde o Prefetch ganha

O Prefetch é o artefacto de execução mais forte, ponto. Cada ficheiro .pf dá-lhe o último tempo de execução (até oito em Windows 8+), uma contagem total de execuções, e a lista de ficheiros que o processo carregou. Suficiente para afirmar "este binário foi executado nestes momentos", o que a ShimCache nunca pode fazer porque o seu único timestamp é o tempo de última modificação do ficheiro, não um tempo de execução.

A lista de módulos carregados também é ouro para triagem: um .pf a mostrar um processo Word que carregou WINWORD.EXE mais MSO.DLL mais uma DLL suspeita em \AppData\ é uma leitura rápida para carga maliciosa de add-in. O PECmd de Eric Zimmerman é o parser padrão. O Prefetch parser cobre o formato se quiser fazer o seu.

Onde a ShimCache ganha

O Prefetch tem uma fraqueza crítica: é frequentemente desativado em servidores, em imagens otimizadas para SSD, e por atacantes (EnablePrefetcher = 0). É também ativamente apagado por ferramentas de limpeza. A ShimCache, em contraste, está sempre ligada e é suficientemente sensível para registar um binário que foi largado e apagado antes de chegar a correr.

Quando o Prefetch está vazio, a ShimCache muitas vezes ainda responde a "esta ficheiro alguma vez tocou neste host?". A inferência completa está em a ShimCache prova que um programa foi executado.

A cache também captura ficheiros que o Prefetch nunca vê:

  • Binários que crasharam antes de completar a inicialização do processo.
  • Ficheiros que o Windows examinou por compatibilidade mas o utilizador não chegou a lançar.
  • Executáveis que correram a partir de partilhas de rede antes de o Prefetch decidir escrever um .pf.

Como usá-los em conjunto

  • Ambos presentes, caminhos coincidem. Prova forte de execução. Use os tempos de execução do Prefetch como timeline de eventos. Use o mtime da ShimCache apenas para ancorar a identidade do ficheiro.
  • Só Prefetch. Execução está provada. A ShimCache pode simplesmente ainda não ter sido descarregada (só escreve no shutdown, veja onde está a ShimCache armazenada).
  • Só ShimCache. O ficheiro existiu e foi examinado. Não afirme execução sem corroboração. Extraia AmCache, BAM e EVTX. A matriz completa está em a referência de artefactos.
  • Nenhum, mas suspeita de execução. Procure anti-forense. Eliminação do Prefetch mais ausência de flush da ShimCache é, por si só, um achado, coberto em anti-forense de ShimCache.

Para ler o lado da ShimCache sem instalar nada, largue uma hive SYSTEM no Shimcache Parser. Totalmente no browser.

Leitura adicional

Artigos relacionados