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
| ShimCache | Prefetch | |
|---|---|---|
| Localização | HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache | C:\Windows\Prefetch\*.pf |
| O que prova | Ficheiro existiu e foi examinado | Ficheiro foi executado |
| Contagem de execuções | Não | Sim |
| Timestamps de execução | Não (apenas mtime do ficheiro) | Sim, últimos 8 tempos de execução |
| Ficheiros referenciados | Não | Sim, DLLs e ficheiros de dados carregados |
| Quando é escrito | Apenas em clean shutdown | Em cerca de 10 s da execução |
| Por defeito em SKUs de estação de trabalho | Sim | Sim |
| Por defeito em SKUs de servidor | Sim | Frequentemente desativado |
| Capacidade | Até cerca de 1024 entradas | 1024 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
- Notas de formato Windows Prefetch (PF) do libyal, referência para a disposição binária dos
.pf. - Caching Out the Val da Mandiant, define o papel forense da ShimCache.