Exécution
ShimCache (AppCompatCache)
Fiche ShimCache (AppCompatCache) : emplacement dans SYSTEM, nombre d'entrées par version, ordre, sens de l'horodatage et limites comme preuve d'exécution.
- Emplacement
- SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache
- Prouve
- Un chemin a été vu par le moteur de compatibilité ; sous 7/8, exécution probable
- Horodatages
- Date $SI de modification du fichier par entrée en FILETIME, UTC (pas une heure d'exécution) ; LastWrite de la clé SYSTEM = dernière écriture
- Rétention
- Écrit seulement à l'arrêt ou au redémarrage ; plafond de 1 024 entrées (96 sous XP, 512 sous 2003), anciennes évincées ; entrées récentes en RAM
- Accès
- Administrateur ; ruche SYSTEM verrouillée à chaud : NTFS brut (KAPE), VSS ou reg save ; une copie à chaud ne contient que le dernier cache écrit
- Preuve de
- Exécution
- Type
- Registre
- Windows
- XPVista / 78 / 8.11011
- Cible KAPE
- RegistryHivesSystem
- Velociraptor
- Windows.Triage.Targets:RegistryHivesSystem
Outils
Comparer tous les outilsPrésentation
Le cache de compatibilité des applications, appelé couramment ShimCache, est tenu par le moteur de compatibilité de Windows pour décider rapidement si un exécutable a besoin d'un correctif (shim). Chaque entrée enregistre un chemin de fichier et la date de dernière modification de ce fichier. Le cache vit en mémoire noyau et est sérialisé dans la ruche SYSTEM, ce qui en fait une trace durable des exécutables rencontrés par le système, y compris de fichiers qui n'existent plus.
Emplacement
| Version de Windows | Clé (ruche SYSTEM) | Entrées max. |
|---|---|---|
| XP | ControlSet00x\Control\Session Manager\AppCompatibility\AppCompatCache | 96 |
| Server 2003 | ControlSet00x\Control\Session Manager\AppCompatCache\AppCompatCache | 512 |
| Vista / 7 / 8 / 8.1 | ControlSet00x\Control\Session Manager\AppCompatCache\AppCompatCache | 1 024 |
| 10 / 11 | ControlSet00x\Control\Session Manager\AppCompatCache\AppCompatCache | 1 024 |
Sur un système en fonctionnement, le chemin commence par HKLM\SYSTEM\CurrentControlSet ; dans une ruche hors ligne, lisez la clé Select pour savoir quel ControlSet00x était actif (voir jeu de contrôle). Chaque jeu de contrôle peut contenir sa propre copie.
Ce que l'artefact prouve
- La présence : un fichier existait à ce chemin, avec cette date de modification, lorsque le moteur de compatibilité l'a évalué.
- L'exécution, selon la version : sous Windows 7 et 8, une entrée porte un indicateur positionné lors de la création effective du processus, que les parseurs affichent comme « Executed ». Sous Windows 10 et 11, les parseurs courants n'exposent pas cet indicateur, et des entrées sont aussi ajoutées quand l'Explorateur se contente d'afficher ou d'inspecter des exécutables. Lisez une entrée comme « vu », pas « lancé », sauf si un autre artefact confirme l'exécution.
- L'ordre : les entrées sont stockées de la plus récente à la plus ancienne ; la position donne une séquence approximative, même sans date d'exécution.
- Il n'enregistre ni l'utilisateur, ni le nombre d'exécutions, ni l'heure d'exécution.
Champs clés
| Champ | Signification |
|---|---|
| Position dans le cache | 0 = entrée insérée ou mise à jour le plus récemment |
| Chemin | Chemin complet de l'exécutable (ou script / DLL selon les versions) |
| Dernière modification | Date de modification $STANDARD_INFORMATION du fichier au moment de la mise en cache |
| Indicateur d'exécution | Windows 7/8 uniquement : création de processus observée |
| Taille du fichier | Windows XP uniquement |
| Données | Octets supplémentaires propres à la version (sous Windows 10+, informations sur les applications empaquetées) |
Horodatages
| Horodatage | Positionné quand | Format | Pièges |
|---|---|---|---|
| Dernière modification | Copiée depuis la date de modification $SI du fichier à la création ou mise à jour de l'entrée | FILETIME, UTC | Ce n'est pas une date d'exécution : c'est la date de modification du fichier lui-même, que le timestomping peut altérer |
| LastWrite de la ruche / de la clé | Écriture du cache dans le registre | FILETIME, UTC | En général le dernier arrêt ou redémarrage propre, pas l'instant d'ajout d'une entrée |
Rétention et effacement
- Le cache est écrit dans le registre à l'arrêt ou au redémarrage. Sur un système non redémarré depuis l'incident, les entrées les plus récentes n'existent qu'en mémoire : acquérez la RAM (ou hiberfil.sys) pour les obtenir.
- À la limite, les entrées les plus anciennes sont évincées.
- Modifier un fichier (nouvelle date de modification) met à jour son entrée et la replace en tête.
- Un cache vidé ou tronqué avec un LastWrite récent est suspect ; comparez les jeux de contrôle et les clichés instantanés de la ruche SYSTEM.
Collecte
- Cible KAPE :
RegistryHivesSystem(SYSTEM avec ses journaux de transactions) - Velociraptor (
Windows.Triage.Targets) :RegistryHivesSystem - Commandes natives (administrateur) :
reg save HKLM\SYSTEM E:\case\SYSTEM.hiv
reg save exporte la ruche active, qui ne contient toujours que le dernier cache écrit.
Outils d'analyse
- AppCompatCacheParser (Eric Zimmerman) :
AppCompatCacheParser.exe -f SYSTEM --csv E:\out. Tous les jeux de contrôle sont extraits par défaut (-cen sélectionne un) ; sans-f, l'outil lit le registre actif ;--nlignore les journaux de transactions. - ShimCacheParser (Mandiant, open source) : analyse les ruches, les exports
.reget les sorties mémoire. - RegRipper : plugin
appcompatcache. - Velociraptor :
Windows.Registry.AppCompatCachesur les postes en direct. - Volatility : les plugins
shimcachelisent le cache en mémoire pas encore écrit sur disque.
Conseils d'investigation
- Cherchez les outils et charges dans des emplacements accessibles en écriture et les noms de fichiers d'attaque connus ; ShimCache les conserve souvent bien après la disparition des fichiers et de leur Prefetch.
- Servez-vous de la position d'un exécutable légitime dont l'heure de lancement est connue pour encadrer le moment d'ajout d'une entrée suspecte voisine.
- Une date de modification antérieure à la création du fichier sur disque, ou une valeur ronde inhabituelle, peut signaler du timestomping.
- Sous Windows 10/11, confirmez toujours l'exécution avec Amcache, BAM/DAM, le Prefetch ou les événements de création de processus.
- Analysez chaque
ControlSet00xet les ruches SYSTEM des clichés instantanés : les anciennes copies peuvent contenir des entrées évincées du cache actuel.
Artefacts liés
- Amcache.hveFiche Amcache.hve : clés d'inventaire des fichiers et programmes, SHA-1, métadonnées PE, horodatages, et pourquoi une entrée ne prouve pas l'exécution.
- Fichiers Prefetch (.pf)Fiche Prefetch Windows : emplacement des .pf par version, nombre d'exécutions, huit dernières dates, fichiers référencés, rétention et analyse.
- BAM / DAM (Background Activity Moderator)Fiche BAM et DAM : clés de la ruche SYSTEM selon la version de Windows 10, SID par utilisateur, dernière exécution en FILETIME, rétention de sept jours.
- Ruches du registreFiche ruches du registre : SYSTEM, SOFTWARE, SAM, SECURITY, NTUSER.DAT, UsrClass.dat, journaux de transactions, RegBack, LastWrite et collecte.
- hiberfil.sys (fichier d'hibernation)Fiche hiberfil.sys : ce que sauvent l'hibernation et le démarrage rapide, compression selon la version, conversion en image mémoire brute.
Termes du glossaire
- Preuve d'exécutionLes artefacts qui montrent qu'un programme s'est réellement exécuté sous Windows, et pas seulement qu'il était présent sur le disque.
- ControlSet et CurrentControlSetLes jeux de configuration numérotés de la ruche SYSTEM ; CurrentControlSet est un lien d'exécution absent d'une ruche analysée hors ligne.
- TimestompingUne technique anti-forensique qui modifie les horodatages d'un fichier pour masquer sa date de création, de modification ou d'accès.
- FILETIMELe format d'horodatage Windows sur 64 bits qui compte les intervalles de 100 nanosecondes depuis le 1er janvier 1601 UTC.