Prefetch¶
Qu'est-ce que Prefetch¶
Les fichiers Prefetch de Windows enregistrent des informations servant à optimiser le démarrage des applications. Un fichier .pf
propre à un programme stocke généralement le nom et l'empreinte de l'exécutable, le nombre d'exécutions, les heures d'exécution récentes, les informations
de volume, les répertoires et les fichiers référencés pendant le démarrage.
Sur les versions de Windows prises en charge, un enregistrement Prefetch d'application valide constitue généralement une preuve solide que l'exécutable a été exécuté. C'est l'un des artefacts d'exécution les plus utiles en dehors des journaux d'événements.
Meilleure conclusion : l'exécutable nommé a été lancé à la ou aux heures d'exécution récentes enregistrées, sous réserve du comportement du système d'exploitation et de la validité du parseur.
Emplacement et collecte¶
Juntei prend en charge les versions de format 17 à 31 (de Windows XP à Windows 11), y compris les fichiers compressés de Windows 8 et versions ultérieures. Collectez l'ensemble du répertoire afin de pouvoir comparer les empreintes des noms d'exécutables et les enregistrements voisins.
Précautions d'analyse¶
- Windows ne stocke qu'une seule heure d'exécution historique sur les anciennes versions, et jusqu'à huit sur les versions récentes.
RunCountpeut dépasser le nombre d'horodatages disponibles. - Prefetch peut être désactivé, nettoyé, exclu ou indisponible sur certains systèmes/rôles. Son absence ne prouve pas qu'un programme n'a pas été exécuté.
- Les listes de fichiers chargés décrivent les dépendances et les accès au démarrage ; elles ne prouvent pas que chaque fichier listé était malveillant, ouvert délibérément ou entièrement lu.
- La longueur du nom de l'exécutable dans l'en-tête Prefetch est limitée ; Juntei résout un chemin à partir des fichiers chargés lorsque cela est possible sans ambiguïté.
- Les horodatages du système de fichiers d'un fichier source
.pfsont distincts des heures d'exécution incorporées. Findingssont des observations de chasse. Les programmes d'installation et l'administration légitime utilisent souvent des chemins de préparation (staging).
Analyser avec Juntei¶
Usage: juntei parse-file prefetch <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find *.pf files
-f, --file <FILE> Parse one Prefetch file
Records:
-T, --timeline Write one row per retained execution time, sorted by time
Output:
-o, --output <FILE> Save every record
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-file prefetch -d Prefetch/ -o prefetch.csv
juntei parse-file prefetch -d Prefetch/ -T -o prefetch-timeline.csv
juntei parse-file prefetch -d Prefetch/ -t jsonl \
| jq 'select(.ExecutableName? | test("powershell|rundll32"; "i"))'
Champs CSV standard¶
| Champ | Interprétation |
|---|---|
SourceFile |
Fichier .pf d'entrée ; conservez-le pour distinguer les hôtes et les noms d'exécutables en double. |
ExecutableName |
Nom de l'exécutable dans l'en-tête. Insensible à la casse pour la plupart des recherches ; conservez la graphie d'origine. |
ExecutablePath |
Chemin chargé résolu par Juntei lorsque c'est possible. Confirmez-le avec Files et d'autres artefacts. |
PathValidated |
Le chemin sélectionné reproduit le hachage de chemin SCCA. Cela valide son attribution, pas le contenu ni la fiabilité du fichier. |
PathAmbiguous |
Plusieurs chemins chargés restent possibles ; ExecutablePath conserve le nom de l’en-tête. Vérifiez Files et les autres artefacts. |
PrefetchHash |
Empreinte utilisée par Windows dans le nom du fichier .pf ; il ne s'agit pas d'une empreinte cryptographique du contenu du fichier. |
FormatVersion |
Version de la structure Prefetch ; détermine les champs disponibles et le nombre d'horodatages. |
RunCount |
Compteur cumulatif enregistré par Windows. Utile pour la fréquence, pas pour un historique exact. |
LastRun |
Heure d'exécution conservée la plus récente. |
PreviousRun1 … PreviousRun7 |
Heures d'exécution conservées antérieures, de la plus récente à la plus ancienne. Vides lorsque le format/l'historique ne les contient pas. |
VolumeCount |
Nombre de volumes sources enregistrés. |
VolumeDevicePaths |
Chemins de périphérique NT des volumes utilisés pendant le démarrage. À corréler avec les numéros de série. |
VolumeSerialNumbers |
Identifiants de volume ; utiles pour relier des preuves de lecteurs amovibles ou reformatés. |
VolumeCreated |
Heures de création des volumes enregistrées, et non heures de création de l'exécutable. |
DirectoryCount |
Nombre de chaînes de répertoires enregistrées. |
FileCount |
Nombre de références de fichiers chargés enregistrées. |
Findings |
Observations de Juntei, telles que des binaires système déplacés ou des chemins d'exécution suspects. À examiner manuellement. |
Files |
Fichiers chargés/référencés avec les références NTFS disponibles. Excellent pivot pour les DLL/chemins, mais pas une preuve de l'intention liée au fichier. |
Dir |
Chaînes de répertoires associées au démarrage. Utiles lorsque les chemins des fichiers chargés individuels sont incomplets. |
Champs CSV de chronologie (-T)¶
| Champ | Interprétation |
|---|---|
RunTime |
Une heure d'exécution Prefetch conservée. |
ExecutableName, ExecutablePath |
Contexte d'identité/de chemin du programme. |
PathValidated |
Le chemin sélectionné reproduit le hachage de chemin SCCA. Cela valide son attribution, pas le contenu ni la fiabilité du fichier. |
PathAmbiguous |
Plusieurs chemins chargés restent possibles ; ExecutablePath conserve le nom de l’en-tête. Vérifiez Files et les autres artefacts. |
PrefetchHash |
Distingue les variantes/chemins partageant un même nom d'exécutable. |
RunCount |
Compteur du fichier Prefetch ; il est répété sur chaque ligne de la chronologie. |
SourceFile |
Fichier .pf source, pour validation. |
Les sorties JSON/JSONL conservent les volumes, répertoires, fichiers chargés et références de fichiers NTFS sous forme de tableaux structurés plutôt que de cellules CSV jointes par des virgules.
Stratégie d'investigation¶
- Utilisez
-Tpour ajouter les exécutions conservées à une chronologie. - Regroupez par nom d'exécutable et empreinte Prefetch ; un même nom peut avoir des chemins/empreintes différents.
- Examinez
ExecutablePath, les chemins de préparation, les constatations de binaires système déplacés et les DLL chargées. - Faites correspondre les références MFT des cibles et les chemins de fichiers aux enregistrements
$MFT/USN. - Corrélez les heures d'exécution avec les journaux d'événements, SRUM, la télémétrie réseau, les services, les tâches et les artefacts utilisateur.