Prefetch et Superfetch for Forensics – Forensgeek

Forensics

Bonjour à tous, aujourd’hui je continue la série de tutos Forensics et je vais vous parler des mécanismes de Prefetch et Superfetch.

C’est quoi le Prefetch et Superfetch ?

Prefetch (Prélecture en Français) sous Windows est une technique de préchargement des programme ou de mise en cache. En gros l’idée, c’est de manière à réduire les temps de chargement des gros exe (et donc l’expérience utilisateur) ou du boot de l’OS. L’idée c’est que Windows charge à l’avance en mémoire les binaires et données, pour les avoir direct sous la main quand il faudra les exécuter. La difficulté reste de prédire intelligemment les programmes qui vont être exécutés.

Un peu de contexte ! Dans les processus de gestion mémoire de Windows, il y a un module Windows Cache Manager qui surveille les données et programme que les processus charge depuis le disque en mémoire. Spécifiquement le Cache Manager va enregistrer les choses intéressantes à conserver lors du boot et au démarrage des processus ensuite. Les programmes et données à cacher sont ensuite placée dans le prefetch par le planificateur de tâches (Task scheduler) à la demande du Cache Manager. Au prochain boot ou à la prochaine exécution d’un programme, le Cache manager fournira directement les données « prefectchée » pour accélérer le démarrage.

L’évolution à partir de Vista du Prefetch est le SuperFetch qui va permettre d’identifier certaines applications et de les précharger y compris si elles n’ont jamais été exécutées.

C’est où et y’a quoi dans un fichier prefetch .pf ?

Les fichiers de Prefetch sont stockés dans le répertoire %SYSTEMROOT%\Prefetch. Soit dans 99,9% des cas le dossier C:\Windows\Prefetch. Si vous aller voir, vous trouverez des fichiers de la forme suivantes :

  • « Programme-Hash.pf » : ou programme est le nom du programme, et le hash issu du chemin ou se trouve le programme dans le système de fichier. En conséquence, 2 exécutables du même nom à des emplacement différents auront 2 fichier dans le prefetch.
  • Ag*.db et Ag*.db.trx : pour le SuperFetch, moi je n’en ai pas sur ma machine là.
  • Un fichier layout.ini : qui contient des données officielement utilisée pour la défragmentation (mais apparemment c’est pas 100% clair cet affaire)
  • un fichier PfPre_*..mkd, quelques quelques .7db et : pareil, pas clair sur ce qu’ils font eux. Si quelqu’un trouve de la doc.

Dans le fichier .pf vous aller retrouver un jolie tas d’information Notamment :

  • Les dates de création et de modification du fichier qui donnent l’information de première et dernière exécution d’un programme.
  • la taille du binaire, son nom et son chemin
  • Un compteur de lancement et les éventuelles 8 dernières dates ou le programme a été exécuté.
  • Une liste de fichier qui sont accédés par le binaire dans les 10 premières secondes après son lancement.

Notez bien ici que vous n’avez pas le contenu du binaire hein, simplement des métadonnées sur celui-ci pour permettre au cache manager de gérer son bordel.

Comment j’y accède ?

Sur un système en fonctionnement, le plus simple est d’utiliser le programme WinPreFetchView qui va vous faire le travail de collecte et d’affichage du prefetch.

Prefetch et Superfetch

Dans le cas d’un analyse à froid en ligne de commande sur image disque vous pouvez utiliser le Windows Prefetch Parser de tzworks ou PECmd de Eric Zimmerman qui existe en version Linux et Mac. Je vous laisse jouer avec, c’est assez simple à comprendre et à faire fonctionner. La collecte unitaire sur une image disque ne pose aucune difficultés ici, je laisse le point en exercice et pour un prochain article de cette séries ou on fera la construction d’une timeline complète à partir d’une image.

Pour la partie SuperFetch et les fichier .db vous pouvez jeter un oeil à superfetch-dumper (qui date un peu)

On peut le désactiver le prefetch ?

Oui ! Je suis pas bien certains de savoir pourquoi quelqu’un voudrait faire ça (ah si, les méchant pirates). Mais si vous aller régler dans le registre :

> Get-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\'

    Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management

Name                           Property
----                           --------
PrefetchParameters             BootId           : 78
                               BaseTime         : 653846651
                               EnablePrefetcher : 3

et jouer avec EnablePrefetcher (1, désactiver, 2 juste au boot, 3 tout le temps) vous pouvez influer sur le fonctionnement. Pour info, il y a maximum d’applications en cache dans le prefetch. Pour info aussi, sur les Windows Server, il n’y a pas de Prefetch activer par défaut.

Alors, à quoi ca sert le Prefetch et le Superfetch?

A ce stade vous avez du comprendre que le prefetch en forensics va vous permettre d’avoir une liste, non-exhaustive, de programmes exécutés sur une machine, y compris pour des programmes qui ne serait plus présent (genre un dropper de malware qui se serait supprimé après avoir balancer sa payload). Il peut vous permettre de repérer des programmes qui tenterai d’usurper des binaires légitimes.

Par exemple sous Windows, il n’y a qu’un seul calc.exe. Si vous voyez plusieurs fois calc.exe avec un hash différent dans votre prefetch, c’est probablement que vous avez le binaire officiel et un second calc.exe par exemple C:\User\Toto\AppData\Malware\calc.exe.

Autre avantage, avec la listes des fichier utilisés au lancement du programme, vous bénéficier d’un début d’information sur les données utiliser en entrée ou en sortie et des bibliothèques dont dépendent votre programme. Au hasard, des fichier de conf, des dump en sortie, d’autres module chargés par votre malware qui peuvent être intéressant à analyser ou à aller chercher.

Conclusion

Voilà pour le prefetch et le superfetch, pour ceux qui veulent aller plus loin toujours quelques liens vers le forensicWiki avec les subtilités que je n’absorbe pas ici pour que ça reste « digeste ».

https://forensicswiki.xyz/wiki/index.php?title=Prefetch

https://forensicswiki.xyz/wiki/index.php?title=SuperFetch

C’est tout pour moi aujourd’hui pour ce deuxième article de la série ForensGeek sur le Prefetch et Superfetch. Comme d’hab j’espère vous avoir appris 2-3 trucs et moi j’en profite pour rafraichir mes formations en forensics qui datent un peu beaucoup là.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.