Pourquoi Windows Server n'a pas de fichiers prefetch
Si vous triagez une installation Windows Server et que le répertoire Prefetch\ est vide, votre premier réflexe ne doit pas être « l'attaquant l'a effacé ». Le premier réflexe doit être « valeurs par défaut serveur ». Microsoft livre Prefetch désactivé sur les SKU Server parce que l'hypothèse de charge — services longue durée plutôt qu'applis interactives courtes — rend la fonctionnalité contre-productive pour le type de gestion mémoire qui importe sur serveur.
Cette valeur par défaut prend les analystes DFIR à défaut environ une fois par trimestre dans les missions que j'ai vues. Connaître la disposition de registre à l'avance évite le mail gênant au client demandant « votre Prefetch est-il absent volontairement ? ».
La clé de registre
Une clé contrôle tout :
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
Deux valeurs qui comptent :
EnablePrefetcher(DWORD).0désactivé.1prefetch d'app seul.2prefetch de boot seul.3les deux, défaut station.EnableSuperfetch(DWORD). Même sémantique. Contrôle la fonctionnalité plus large SuperFetch / SysMain qui héberge la logique Prefetch sur Windows moderne.
Les valeurs par défaut station sont 3 pour les deux. Server : 0 pour les deux. La division boot/app de EnablePrefetcher est en grande partie historique ; en pratique on voit presque toujours 3 ou 0, pas les valeurs intermédiaires.
Parsez la hive SYSTEM hors-ligne avec le parser de registre si vous n'avez qu'une image et voulez savoir quel état était en cours à l'acquisition. Comparez aux valeurs dans des Volume Shadow Copies plus anciens pour voir si une station a été reconfigurée à 0 en pleine investigation ; le LastWrite de la hive SYSTEM vous donne le moment du changement.
Le service SysMain
Le service qui écrit effectivement les fichiers .pf est SysMain (renommé depuis Superfetch il y a des années). Si SysMain est arrêté ou désactivé, aucun Prefetch n'est généré, quel que soit le registre. Les deux conditions doivent être réunies :
EnablePrefetcher = 3SysMainen cours d'exécution
Sur un système en marche :
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters"
sc query SysMain
Sur un système éteint, l'équivalent consiste à parser la hive SYSTEM et l'EVTX System pour les événements du SCM. Le Service Control Manager journalise chaque démarrage/arrêt de SysMain dans le journal System, utile pour préciser quand la génération s'est réellement interrompue.
Implications forensiques
Un dossier Prefetch\ vide n'est pas, en soi, un constat. Avant de conclure « pas de preuve d'exécution sur cet hôte », vérifiez quatre choses :
- Édition de l'OS. Les SKU Server qui tournent depuis des mois n'ont essentiellement toujours pas de Prefetch. Les SKU station qui tournent depuis une heure en ont déjà des dizaines.
- Valeurs de registre au moment de la collecte.
EnablePrefetcheretEnableSuperfetchtous deux à0, c'est de la configuration, pas du sabotage. L'un à3et l'autre à0, c'est inhabituel et mérite un examen plus approfondi. - État de SysMain. L'EVTX System révèle les arrêts et démarrages de service ; corrélez la chronologie à la période d'intérêt.
- Comportement spécifique SSD. Certains builds Windows 10 et Win11 22H2+ sur systèmes uniquement SSD désactivent opportunément des morceaux de Prefetch. Le registre indique toujours
3. La couverture baisse quand même. Ce n'est pas (uniquement) de l'anti-forensique : c'est du comportement OS.
Si les points 1 à 4 sont OK et que le dossier est toujours vide, demandez-vous si le répertoire a été effacé. Faites du carving en zone non allouée à la recherche de signatures MAM\x04 et récupérez le journal USN pour les événements de suppression de .pf. L'article dédié à la manipulation a la procédure complète.
Réactiver pour la collecte continue
Si vous contrôlez l'hôte et voulez Prefetch activé pour visibilité future :
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
L'activer ne récupère rien. SysMain commence à écrire de nouveaux .pf à partir du moment où il démarre ; vous n'obtenez aucun enregistrement des exécutions antérieures. Pour des preuves d'exécution antérieures à l'activation sur un serveur, repliez-vous sur AmCache, Shimcache, SRUM pour l'usage des ressources, et l'EVTX Security/Sysmon si l'audit de processus était actif.
Désactivé par politique, pas par attaquant
Dans les environnements durcis — baseline CIS, STIG, profil de configuration éditeur — Prefetch est parfois supprimé par GPO. Les valeurs de registre ressemblent à une désactivation manuelle. Pour distinguer : gpresult /h sur un hôte en marche (ou parser les artefacts de stratégie de groupe pertinents depuis l'image). Quand la politique force EnablePrefetcher = 0, c'est intentionnel. Quand la valeur passe de 3 à 0 en plein uptime sans rafraîchissement GPO correspondant, c'est autre chose.
Pour aller plus loin
- Microsoft Docs, Memory Management — PrefetchParameters.
- Eric Zimmerman, Registry Explorer pour l'inspection en direct ou hors-ligne de la hive SYSTEM.