Retour à tous les articles

Ce qui a changé dans Windows Prefetch v30 et v31

Les quatre premiers octets du payload SCCA décompressé sont le numéro de version. C'est le champ unique le plus utile dans un fichier Prefetch. Trouvez-le et vous savez quelle disposition d'en-tête appliquer, combien d'emplacements de dernière exécution lire, et quelle famille Windows a écrit le fichier :

VersionWindowsCompressionLast-run slots
17XP, Vista, 7None1
23Windows 8Xpress Huff.1
26Windows 8.1Xpress Huff.8
30Windows 10Xpress Huff.8
31Windows 11Xpress Huff.8

Trompez-vous, et le parser vous renvoie du charabia sans erreur, ce qui est le mode d'échec le plus fréquent.

Le saut v26 : huit temps d'exécution

Le changement le plus conséquent de l'histoire du format est arrivé avec Windows 8.1 (v26). L'en-tête a gagné la place pour huit valeurs FILETIME de dernière exécution au lieu d'une. Avant 8.1, un .pf vous disait que le binaire avait tourné le plus récemment à l'instant T. À partir de 8.1 vous obtenez une fenêtre glissante des huit exécutions les plus récentes, chacune en FILETIME Windows (u64, tics de 100 nanosecondes depuis le 01/01/1601 UTC).

Pour la DFIR, c'est la différence entre « le programme a tourné à un moment avant hier » et « le programme a tourné huit fois ces trois derniers jours à ces moments précis ». Couplez les huit horodatages à Sysmon EID 1 ou Security 4688 et vous avez une chronologie d'exécution défendable à la seconde.

Attention au plafond : huit, pas « au moins huit ». Si un binaire tourne cent fois, vous obtenez les huit dernières. Les 92 autres sont pliées dans le compteur d'exécutions et autrement perdues. La lecture « dernière exécution il y a neuf heures » à une collecte plus « dernière exécution il y a trois minutes » à une collecte ultérieure sur le même hôte vous dit que des exécutions ont continué ; l'historique à huit emplacements ne vous permet pas de reconstruire la séquence complète.

v30 : Windows 10

v30 réarrange des offsets dans la section d'information de fichier et resserre les enregistrements d'information de volume, mais les champs visibles à l'extérieur sont les mêmes qu'en v26 : nom d'exécutable, hash, compteur d'exécutions, huit temps de dernière exécution, info de volume (chemin, numéro de série, heure de création) et la liste de métriques de fichiers de chaque DLL et ressource que le binaire a touchée durant ses dix premières secondes d'exécution surveillée.

La plupart des parsers n'ont pas besoin de chemins de code radicalement différents à l'intérieur du payload une fois le numéro de version lu. Les champs ont la même largeur et le même sens ; seules leurs positions bougent. PECmd traite v30 proprement ; idem pour libscca et pyscca.

À savoir sur Win10 1709+ : Windows a commencé à expirer les entrées .pf plus agressivement durant la maintenance. Si les huit emplacements de dernière exécution d'un binaire n'affichent que trois FILETIME peuplés, cela ne signifie pas que le binaire a tourné trois fois. Cela signifie au moins trois. Le compteur d'exécutions est le décompte qui fait foi.

v31 : Windows 11

v31 est incrémentale par rapport à v30. Quelques ajustements de remplissage, bits supplémentaires dans le champ des drapeaux Prefetch. En pratique, un parser qui lit v30 correctement lira v31 avec au plus un petit ajustement d'offset dans l'en-tête. Si votre chaîne d'outils prétend supporter Windows 10 mais erre sur v31, la cause est presque toujours un test de version trop strict (version == 30) plutôt qu'une réelle incompatibilité de disposition.

Sur Win11 22H2 et ultérieur, Prefetch sur SSD est désactivé de manière opportuniste par des parties de l'OS. D'un point de vue forensique c'est un problème de couverture, pas un problème de disposition v31 : les fichiers que vous obtenez sont du v31 valide, il y en a juste moins que ce que le registre suggérerait.

Ce que cela signifie pour le triage

Quand le parser affiche Ver. 31, vous pouvez vous appuyer sur l'historique de dernière exécution à huit profondeurs, le compteur et la liste de métriques. Quand il affiche Ver. 17, vous obtenez un seul horodatage de dernière exécution et le binaire a été lancé sur un hôte XP, Vista ou Win7. Trouver un v17 sur une image Windows 10 ou 11 est un signal fort que le .pf a été importé d'ailleurs : il n'existe pas de scénario réaliste où un hôte Windows moderne écrit v17 nativement.

Des versions mélangées dans un même dossier Prefetch sont normales sur un hôte qui a été mis à niveau entre versions majeures ; une image Windows 10 avec des entrées v23 résiduelles d'une vieille installation Windows 8 n'est pas inouïe. Une image Windows 11 avec v17, si. Le champ de version est l'un des premiers signaux de triage à scanner sur tout le dossier.

Pour aller plus loin

  • Joachim Metz, documentation du format libscca — contient les tables de champs par version.
  • Eric Zimmerman, PECmd — gère correctement chacune des versions ci-dessus dès la sortie de la boîte.