TL;DR. Prefetch es prueba real de ejecución con conteos y tiempos de ejecución. ShimCache solo prueba que un archivo existió y fue examinado. Si necesitas "¿corrió, y cuándo?", tira primero de Prefetch. Si Prefetch está desactivado o vaciado, el ShimCache se vuelve tu testigo de existencia de respaldo.
A los dos se les compara constantemente porque ambos sacan a la luz "programas en un host Windows". No son el mismo tipo de evidencia. Trátalos como intercambiables y produces conclusiones equivocadas. Aquí está el cara a cara.
De un vistazo
| ShimCache | Prefetch | |
|---|---|---|
| Ubicación | HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache | C:\Windows\Prefetch\*.pf |
| Qué prueba | El archivo existió y fue examinado | El archivo se ejecutó |
| Conteo de ejecuciones | No | Sí |
| Marcas de ejecución | No (solo mtime del archivo) | Sí, últimas 8 horas de ejecución |
| Archivos referenciados | No | Sí, DLLs y archivos de datos cargados |
| Cuándo se escribe | Solo en apagado limpio | Dentro de los ~10 s tras la ejecución |
| Por defecto en SKU de estación de trabajo | Sí | Sí |
| Por defecto en SKU de servidor | Sí | A menudo desactivado |
| Capacidad | Hasta ~1.024 entradas | 1.024 archivos .pf en Win8+ |
Dónde gana Prefetch
Prefetch es el artefacto de ejecución más fuerte, punto. Cada archivo .pf te da la última hora de ejecución (hasta ocho en Windows 8+), un conteo total de ejecuciones y la lista de archivos que cargó el proceso. Suficiente para afirmar "este binario se ejecutó en estos momentos", lo que el ShimCache nunca puede hacer porque su único timestamp es la hora de última modificación del archivo, no una hora de ejecución.
La lista de módulos cargados también es oro para el triage: un .pf que muestra un proceso Word que cargó WINWORD.EXE más MSO.DLL más una DLL sospechosa de \AppData\ es una lectura rápida de carga maliciosa de add-in. El PECmd de Eric Zimmerman es el parser estándar. El parser de Prefetch cubre el formato si quieres rodar el tuyo.
Dónde gana el ShimCache
Prefetch tiene una debilidad crítica: está frecuentemente desactivado en servidores, en imágenes ajustadas para SSD y por los atacantes (EnablePrefetcher = 0). También se borra activamente por tooling de limpieza. El ShimCache, en cambio, siempre está activo y es lo bastante sensible como para registrar un binario que se soltó y se borró antes incluso de ejecutarse.
Cuando Prefetch está vacío, el ShimCache a menudo aún responde "¿este archivo tocó alguna vez este host?". La inferencia completa está en ¿prueba el ShimCache que un programa se ejecutó?.
El cache también captura archivos que Prefetch nunca ve:
- Binarios que se cayeron antes de completar la inicialización del proceso.
- Archivos que Windows examinó por compatibilidad pero el usuario no llegó a lanzar.
- Ejecutables que corrieron desde recursos compartidos de red antes de que Prefetch decidiera escribir un
.pf.
Cómo usarlos juntos
- Ambos presentes, rutas coinciden. Evidencia fuerte de ejecución. Usa los tiempos de ejecución de Prefetch como línea de tiempo de eventos. Usa la mtime del ShimCache solo para anclar la identidad del archivo.
- Solo Prefetch. La ejecución está probada. El ShimCache puede simplemente no haberse volcado todavía (solo escribe al apagar, mira dónde se almacena el ShimCache).
- Solo ShimCache. El archivo existió y fue examinado. No afirmes ejecución sin corroboración. Saca AmCache, BAM, y EVTX. La matriz completa está en la referencia de artefactos.
- Ninguno, pero sospechas ejecución. Busca anti-forense. Borrado de Prefetch más ShimCache sin volcado es en sí mismo un hallazgo, tratado en anti-forense del ShimCache.
Para leer el lado ShimCache sin instalar nada, suelta un hive SYSTEM en el Shimcache Parser. Totalmente en navegador.
Lectura adicional
- Notas del formato Windows Prefetch (PF) de libyal. referencia para el diseño binario
.pf. - Caching Out the Val de Mandiant. define el rol forense del ShimCache.