Volver a todos los artículos

Por qué Windows Server no tiene archivos prefetch

Si triageas una instalación de Windows Server y el directorio Prefetch\ está vacío, tu primer instinto no debería ser "el atacante lo borró". El primer instinto debería ser "valores por defecto de Server". Microsoft entrega Prefetch apagado en SKUs de Server porque la suposición de carga de trabajo — servicios de larga duración en lugar de aplicaciones interactivas de corta vida — hace la función contraproducente para el tipo de gestión de memoria que importa en Server.

Ese valor por defecto pilla a los analistas DFIR aproximadamente una vez por trimestre en los casos que he visto. Conocer el layout de registro de antemano evita el correo embarazoso al cliente preguntando "¿tu Prefetch falta a propósito?".

El interruptor del registro

Una clave controla todo:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters

Dos valores que importan:

  • EnablePrefetcher (DWORD). 0 deshabilitado. 1 solo prefetch de lanzamiento de app. 2 solo prefetch de boot. 3 ambos, el valor por defecto en estaciones.
  • EnableSuperfetch (DWORD). Misma semántica. Controla la función más amplia SuperFetch / SysMain que hospeda la lógica de Prefetch en Windows moderno.

Los valores por defecto en estación son 3 para ambos. En Server son 0 para ambos. La división boot/app de EnablePrefetcher es mayoritariamente histórica; en la práctica casi siempre ves 3 o 0, no los valores intermedios.

Parsea la hive SYSTEM offline con el parser de registro si solo tienes una imagen y quieres saber cuál era el estado en vivo al momento de la adquisición. Compara contra los valores en Volume Shadow Copies antiguos para ver si una estación se reconfiguró a 0 durante la investigación; el LastWrite de la hive SYSTEM te da el momento del cambio.

El servicio SysMain

El servicio que realmente escribe los archivos .pf es SysMain (renombrado desde Superfetch hace años). Si SysMain está detenido o deshabilitado, no se genera Prefetch, dijese lo que dijese el registro. Han de cumplirse las dos condiciones:

  • EnablePrefetcher = 3
  • SysMain corriendo

En un sistema vivo:

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters"
sc query SysMain

En un sistema muerto, el equivalente es parsear la hive SYSTEM y el EVTX del sistema buscando eventos del SCM. Service Control Manager registra cada inicio/parada de SysMain en el log del sistema; útil para acotar cuándo se detuvo realmente la generación.

Implicaciones forenses

Una carpeta Prefetch\ vacía no es, por sí sola, un hallazgo. Antes de concluir "no hay evidencia de ejecución en este host", comprueba cuatro cosas:

  1. Edición del SO. Las SKUs de Server que llevan meses arriba siguen sin tener esencialmente nada de Prefetch. Las SKUs de estación que llevan una hora ya tienen docenas.
  2. Valores de registro al momento de la recolección. Tanto EnablePrefetcher como EnableSuperfetch a 0 es configuración, no manipulación. Uno a 3 y otro a 0 es inusual y merece una segunda mirada.
  3. Estado de SysMain. El EVTX del sistema revela paradas e inicios del servicio; correlaciona la línea de tiempo contra el periodo de interés.
  4. Comportamiento específico en SSD. Algunas builds de Windows 10 y Win11 22H2+ en sistemas solo SSD deshabilitan oportunísticamente partes de Prefetch. El registro sigue diciendo 3. La cobertura cae igualmente. Esto no es (solo) antiforense, es comportamiento del SO.

Si los puntos 1 a 4 dan limpios y la carpeta sigue vacía, entonces pregúntate si el directorio fue limpiado. Carva no asignado en busca de firmas MAM\x04 y tira del USN journal para eventos de borrado de .pf. El artículo dedicado a la manipulación tiene el procedimiento completo.

Reactivar para recolección continua

Si controlas el host y quieres Prefetch encendido para visibilidad futura:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters" /v EnablePrefetcher /t REG_DWORD /d 3 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters" /v EnableSuperfetch /t REG_DWORD /d 3 /f
sc config SysMain start= auto
net start SysMain

Activarlo no rellena nada. SysMain empieza a escribir nuevos archivos .pf desde el momento en que arranca; no obtienes registro de las ejecuciones que ocurrieron antes. Para evidencia de ejecución previa en un Server, recurre a AmCache, Shimcache, SRUM para uso de recursos por proceso, y el EVTX de Security/Sysmon si la auditoría de procesos estaba activa.

Deshabilitado por política, no por atacante

En entornos endurecidos — CIS baseline, STIG, perfil de configuración de proveedor — a veces se suprime Prefetch por GPO. Los valores de registro tienen el mismo aspecto que en una deshabilitación manual. El modo de distinguirlo es gpresult /h en un host vivo (o parsear los artefactos de Group Policy relevantes desde la imagen). Cuando la política fuerza EnablePrefetcher = 0, eso es intención. Cuando el valor cambia de 3 a 0 a media jornada sin una refresca de GPO correspondiente, es otra cosa.

Lecturas adicionales