TL;DR. L'horodatage du ShimCache est l'heure de dernière modification $STANDARD_INFORMATION de l'exécutable copiée depuis le système de fichiers. Pas l'heure à laquelle il a été exécuté. Pas l'heure à laquelle il a été caché. Traite-le comme une propriété du fichier, jamais comme un événement sur une chronologie.
L'erreur la plus fréquente dans l'analyse ShimCache est de lire la colonne d'horodatage comme "quand ça a tourné". Ce n'est pas le cas. J'ai vu des analystes mettre cette interprétation devant des clients et des régulateurs, et j'ai vu le rapport se faire démolir en revue par quiconque a une connaissance fonctionnelle de NTFS. Ne sois pas cet analyste.
Ce qu'est vraiment l'horodatage
Chaque entrée stocke l'heure de dernière modification $STANDARD_INFORMATION du fichier (SI mtime), telle qu'elle était sur le volume NTFS au moment où Windows a enregistré l'entrée. Copie directe d'un attribut du système de fichiers. Ne dit rien sur la création de processus, le chargement de module ou l'arrêt.
Trois conséquences immédiates :
- Un binaire compilé l'an dernier et exécuté aujourd'hui affiche la date de l'an dernier.
- Un fichier copié avec un outil qui préserve les horodatages garde sa mtime originale, pas l'heure de copie.
- Deux hôtes faisant tourner le même binaire signé montrent le même horodatage, parce que c'est une propriété du fichier, pas d'une machine particulière.
Pourquoi ce n'est pas l'heure d'exécution
Windows ajoute une entrée au cache quand il examine un fichier pour des raisons de compatibilité applicative. Souvent, mais pas toujours, coïncidant avec l'exécution. Même quand ça coïncide, le cache stocke la mtime du fichier, pas le moment de l'examen. Donc l'horodatage répond à "quand ce fichier a-t-il été modifié pour la dernière fois ?" et jamais à "quand a-t-il tourné ?" La distinction exécution vs existence est traitée en profondeur dans le ShimCache prouve-t-il l'exécution ?.
Si tu as besoin d'une vraie heure d'exécution, il te faut les heures d'exécution Prefetch, la première exécution AmCache, Security 4688, ou Sysmon Event ID 1. Le cache ne peut pas te le donner.
Quand l'horodatage reste précieux
Il est faible comme heure d'événement mais fort comme ancre d'identité :
- Détection de manipulation. Si un binaire système comme
svchost.exemontre une mtime qui ne correspond pas au niveau de patch de l'hôte, ce fichier a été remplacé. Croise avec l'attribut$FILE_NAMEde la MFT, plus difficile à stomper. - Corrélation de builds. Le malware compilé dans une campagne partage souvent un cluster de mtime entre victimes. Utile pour regrouper des incidents au même acteur.
- Ordonnancement, avec précaution. Au sein d'un même hôte, les entrées sont stockées dans un ordre grossier d'insertion. L'ordre est plus fiable que les horodatages absolus pour séquencer l'activité. Mais ordre n'est pas temps, et la séquence d'insertion est remise à zéro au boot.
Comment les attaquants en abusent
Comme ce n'est qu'un attribut du système de fichiers, c'est trivialement falsifiable. Le timestomping (mettre une mtime à 2009-07-14, la date classique de kernel32.dll) fait qu'un dropper se fond dans les fichiers système Windows. Le cache enregistre fidèlement la valeur stompée, donc un horodatage propre de 2009 sur un chemin dans C:\Users\Public\ est en soi un drapeau rouge. Les motifs anti-forensiques sont catalogués dans les attaquants peuvent-ils vider le ShimCache ?.
L'attribut $FILE_NAME de la MFT garde généralement la véritable heure de création même après que $STANDARD_INFORMATION ait été stomp. Le parser MFT déroule la comparaison. Le journal USN capte aussi l'événement de création original dans la plupart des cas.
L'utiliser correctement dans une chronologie
Mets la mtime ShimCache dans une colonne séparée des heures d'événement. Ne la fusionne jamais dans la chronologie principale comme s'il s'agissait d'une action. Corrobore le séquencement avec des artefacts qui portent vraiment des heures d'événement : heures d'exécution Prefetch, install / première exécution AmCache, Security 4688, Sysmon Event ID 1. La référence croisée complète est dans Prefetch, AmCache, ShimCache : référence rapide.
Pour inspecter toi-même les valeurs brutes, dépose un hive SYSTEM dans le Shimcache Parser. Il montre la mtime exacte stockée par entrée, dans ton navigateur, sans rien téléverser.
Lectures complémentaires
- Caching Out the Val de Mandiant. le write-up original qui a défini l'usage forensique de l'artefact.
- AppCompatCacheParser d'Eric Zimmerman. parser de référence dont la sortie utilise la même sémantique de mtime.