Retour à tous les articles

Comprendre les fichiers Prefetch Windows

Les fichiers .pf de Windows Prefetch vivent dans C:\Windows\Prefetch\ et enregistrent des métadonnées pour chaque exécutable que le système d'exploitation a lancé sur un poste de travail. C'est l'artefact d'exécution le plus fiable que la plupart des analystes manipulent dans une semaine ordinaire. Un binaire n'a pas besoin d'être installé, persistant, signé ni même encore présent sur le disque pour que son .pf subsiste.

Chaque .pf porte le nom <EXECUTABLE>-<HASH>.pf. Les huit caractères hexadécimaux sont un hash du chemin de lancement complet, encodé en UTF-16, préfixé par \DEVICE\HARDDISKVOLUME{n}\. Le contenu binaire du fichier exécutable lui-même n'entre jamais dans le hash. Deux copies d'un binaire identique placées dans C:\Program Files\Tool\tool.exe et dans C:\Users\victim\AppData\Local\Temp\tool.exe produisent deux fichiers .pf différents. C'est précisément cette propriété qui permet à Prefetch de distinguer un binaire éditeur légitime du même binaire déposé dans un répertoire utilisateur.

Ce que contient réellement un .pf parsé

Pour chaque .pf déposé dans le parser, vous obtenez :

  • Le nom de l'exécutable tel qu'enregistré dans le payload SCCA.
  • Le numéro de version SCCA. v17 sur XP/Vista/7, v23 sur Win8, v26 sur Win8.1, v30 sur Win10, v31 sur Win11. La version vous indique quel format d'en-tête s'applique et combien d'emplacements last-run existent.
  • Le compteur d'exécutions. Monotone. SysMain ne fait que l'incrémenter ; une valeur qui diminue entre deux collectes est impossible dans un comportement Windows normal.
  • Les temps d'exécution. Jusqu'à huit valeurs FILETIME en v26+, une seule sur les versions antérieures. Chacune est un u64 de tics de 100 nanosecondes depuis le 01/01/1601 UTC, en UTC, marquant le moment où Windows a commencé à surveiller le processus.
  • Les informations de volume. Chemin du périphérique, numéro de série NTFS et horodatage de création pour chaque volume référencé par le binaire. Le numéro de série est le même que celui que les fichiers LNK et la MFT enregistrent.
  • La liste de métriques de fichiers. Chaque chemin que Windows a tracé durant les dix premières secondes d'exécution surveillée : DLL, fichiers de configuration, fichiers de données, tout ce qui a produit un défaut de page sur un fichier que Windows connaissait. Typiquement quelques centaines d'entrées pour une application réelle.

Cela suffit à répondre si ce binaire a été exécuté, quand, d'où, et ce qu'il a touché, ce qui représente environ 70 % des questions d'exécution sur une mission normale.

Pourquoi WebAssembly côté client

Les fichiers .pf sont des preuves. Les téléverser vers un service web tiers pour les parser rompt la chaîne de garde et expose des chemins de fichiers, des numéros de série de volumes et des noms de répertoires de profil utilisateur qui peuvent être sensibles en eux-mêmes. Le parser de ce site compile un décodeur SCCA en pur Rust (frnsc-prefetch) vers WebAssembly et l'exécute dans un Web Worker à l'intérieur du navigateur. Les octets ne quittent jamais la machine. Pas d'endpoint d'upload, pas de télémétrie sur le contenu du fichier.

Les outils desktop équivalents sont PECmd (Eric Zimmerman, .NET) et libscca (libyal, C avec bindings Python via pyscca). Utilisez celui qui convient à votre pipeline. Pour une triage rapide sur un hôte sur lequel vous préféreriez ne rien installer, le parser navigateur est plus rapide que la mise en place d'une VM dédiée.

Le problème de compression sur Win8+

À partir de Windows 8, SysMain compresse les fichiers .pf avant de les écrire sur le disque. Chaque fichier commence par MAM\x04, suivi d'un champ u32 indiquant la taille décompressée, puis d'un payload compressé en Xpress Huffman. Les outils antérieurs à Windows 8 qui n'ont pas été mis à jour liront les octets MAM comme le début d'un en-tête SCCA et produiront silencieusement des résultats erronés. Si un parser prétend prendre en charge Windows 10 mais ne parvient pas à lire vos fichiers, la première chose à vérifier est s'il dispose d'un décodeur Xpress Huffman dans son pipeline.

Le parser de ce site détecte automatiquement les fichiers compressés MAM et les anciens fichiers non compressés. Le framing MAM n'a pas changé depuis Windows 8 ; seul le payload SCCA à l'intérieur a évolué.

Comment lire ce que vous obtenez

Pour la triage, triez par heure de création NTFS décroissante et regardez d'abord les entrées récentes. Triez par compteur d'exécutions croissant et examinez les binaires à exécution unique ; ils sont généralement plus intéressants que ceux qui ont tourné cent fois. Pour chaque candidat, dépliez la liste de métriques de fichiers et cherchez des chemins de chargement de DLL dans des répertoires accessibles en écriture utilisateur, des références à des documents qui correspondent à une allégation de phishing, ou des fichiers de configuration dans \AppData\Roaming\ qui correspondent à des motifs de malware connus.

Ensuite corroborez. Prefetch seul prouve qu'un processus a démarré. Il ne prouve pas qui l'a démarré, avec quels arguments, ni que le binaire actuellement sur le disque est celui qui a tourné. Croisez avec AmCache pour le SHA-1, Shimcache pour la corroboration du chemin, le journal USN pour savoir quand le binaire est apparu sur le disque, et l'EVTX Security ou Sysmon pour la ligne de commande et le contexte utilisateur. L'article dédié à Prefetch comme preuve déroule le workflow complet.

Essayez-le

Déposez un .pf ou un répertoire C:\Windows\Prefetch\ complet dans le parser. Vous obtenez un tableau triable et interrogeable de chaque exécution avec un panneau de détail pour les volumes et la liste de métriques de fichiers. Cliquez sur Download JSON pour exporter une sortie structurée à destination de jq, d'un notebook ou de votre chronologie d'affaire.

Pour aller plus loin