Limites et anti-forensique de Windows Timeline
Là où s'arrêtent les preuves Windows Timeline : expiration, paramètres, historique effacé, lignes supprimées, WAL manquant, limites des parseurs, falsification.
En bref. Les preuves Timeline s'épuisent de six façons prévisibles : expiration (30 jours ; 12 heures pour le presse-papiers), paramètres (collecte désactivée par l'utilisateur ou une stratégie), effacement (effacer l'historique, entrées retirées), suppression du fichier, WAL manquant, et limites du parseur (pas de carving des pages libres ni des trames WAL périmées). Chacune laisse des traces quelque part : lignes de suppression dans ActivityOperation, date de création de la base dans la table Metadata, journal USN, clichés instantanés, paramètres du registre. L'absence de lignes Timeline ne prouve jamais, à elle seule, qu'il ne s'est rien passé.
Savoir où un artefact s'arrête, c'est ce qui distingue un constat d'une supposition. Voici la liste pour Windows Timeline, avec la contre-vérification de chaque point.
Limites naturelles
Expiration
Chaque ligne a un ExpirationTime. kacos2000 l'a mesuré à exactement 2 592 000 secondes (30 jours) après LastModifiedTime pour les activités normales, et à 43 200 secondes (12 heures) pour le contenu du presse-papiers (kacos2000). Une activité régulièrement mise à jour repousse son expiration ; une ouverture de fichier ponctuelle d'il y a six semaines a disparu de la table active.
Contre-vérification : clichés instantanés et sauvegardes du profil ; SRUM, qui a sa propre rétention, indépendante ; Jump Lists et fichiers LNK, qui n'ont pas de champ d'expiration temporelle.
Couverture
Timeline enregistre l'activité visible par l'utilisateur (applications, fichiers, pages), pas chaque processus (Microsoft Support). Un outil lancé depuis un service, une tâche planifiée ou un shell distant sans fenêtre de bureau n'a aucune raison d'y apparaître. Les types d'activité eux-mêmes sont des observations de chercheurs, pas une spécification publique : plusieurs numéros restent inexpliqués (kacos2000/WindowsTimeline).
Contre-vérification : Prefetch, AmCache, événements de création de processus dans EVTX.
Windows 11
La vue Timeline a été retirée de Windows 11 (Microsoft Support) et ce que la base reçoit encore varie. Voir Windows 11 Timeline : ActivitiesCache.db est-il encore utile ?
L'heure
Les horodatages sont des secondes Unix en UTC, fixées par l'horloge locale. Une horloge système fausse produit des heures fausses ; la base ne contient aucune source de temps indépendante. Le userTimezone du payload enregistre le fuseau au moment de la création de l'activité (Microsoft Graph), ce qui aide quand un portable a voyagé.
Anti-forensique délibérée
| Action | Effet sur ActivitiesCache.db | Traces laissées |
|---|---|---|
| Désactiver « Stocker mon historique d'activités sur cet appareil » | Les nouvelles activités ne sont plus enregistrées | État du paramètre dans la ruche utilisateur ; un trou dans les lignes alors que les autres artefacts continuent |
Stratégie de groupe / MDM (EnableActivityFeed, PublishUserActivities) | Publication des activités utilisateur désactivée (CSP Privacy) | Valeurs de stratégie dans la ruche SOFTWARE |
| « Effacer l'historique des activités » | Lignes supprimées pour le compte (Microsoft Support) | Pages libérées dans la base, trames WAL, un début de chronologie soudain |
| Retirer une entrée (Timeline de Windows 10) | Entrée copiée dans ActivityOperation avec un statut supprimé (kacos2000) | Une opération de suppression en attente avec son propre CreatedTime |
| Supprimer le fichier de base | Windows le recrée | Entrées du journal USN ; le DatabaseInstanceIdUpdateTime de la table Metadata, que kacos2000 identifie comme la date de création de la base (kacos2000) |
| Modifier la base avec un client SQLite | Lignes modifiées ou supprimées | Dépend des réglages : le contenu supprimé peut rester dans l'espace libre sauf si secure_delete est actif (PRAGMA SQLite) ou si le fichier a été reconstruit avec VACUUM (VACUUM SQLite) |
L'opération de suppression est un cadeau
Le nettoyage le plus courant, retirer une entrée gênante, est aussi le plus visible. La table ActivityOperation conserve l'opération avec le type d'opération 3, l'Id de l'activité et l'heure à laquelle la suppression a été mise en file. Dans le Windows Timeline Parser, ces lignes sont marquées Suppression et datées par leur heure de création, pas par l'heure de début de l'activité visée : elles se placent dans la chronologie au moment du nettoyage.
kacos2000 décrit une subtilité : pour les comptes Microsoft, les entrées au statut supprimé ne restent dans ActivityOperation que jusqu'à leur synchronisation, après quoi elles repassent dans Activity jusqu'à expiration (kacos2000). La synchronisation cloud de l'historique ayant pris fin pour les comptes Microsoft en 2021 et pour les comptes Entra ID à partir de janvier 2024 (Microsoft Support), ce comportement sur les systèmes actuels mérite d'être testé plutôt que supposé. Vérifiez aussi ActivityStatus dans Activity.
Signes d'une base réinitialisée
- La ligne la plus ancienne est bien plus récente que le profil, alors que SRUM et Prefetch montrent une activité plus ancienne pour le même utilisateur.
- La date de création dans la table
Metadataest récente. - Le journal USN montre
ActivitiesCache.dbsupprimé puis recréé (parseur USN). - Un cliché instantané de volume contient une base plus volumineuse et plus ancienne.
Échecs de collecte (ceux qu'on s'inflige)
| Échec | Conséquence | Correction |
|---|---|---|
| WAL non collecté | Activité la plus récente absente, lignes mises à jour affichant d'anciennes valeurs | Collecter ActivitiesCache.db* (acquisition) |
| Base et WAL de moments différents | Trames incohérentes ; un parseur prudent ignore le WAL | Collecter les deux en une passe ou depuis un cliché instantané |
| Originaux ouverts avec un client SQLite | WAL reporté puis supprimé à la fermeture (sqlite.org) | Hacher, puis travailler sur des copies |
| Un seul dossier de compte collecté | Activité d'un autre type de compte manquée | Collecter tout le dossier ConnectedDevicesPlatform |
Limites des parseurs (y compris celui-ci)
Être explicite sur l'outil fait partie de la rigueur sur la preuve. Aujourd'hui, le Windows Timeline Parser :
- Analyse les lignes actives d'
Activity,ActivityOperationetActivity_PackageId, avec les transactions WAL validées appliquées. - Ne carve pas les enregistrements supprimés dans les freeblocks, les pages de la freelist ou les trames WAL d'une génération de sel antérieure. Il indique pourquoi la lecture du WAL s'est arrêtée (par exemple « appartient à une génération WAL plus ancienne ») mais n'extrait pas ces trames.
- N'analyse pas les tables
Metadata,ActivityAssetCacheniAppSettings. - Présente la colonne
Group(Copy / Paste) dans l'export JSON, pas dans le tableau. - Charge chaque base dans la mémoire du navigateur.
- A été testé sur de vrais fichiers SQLite construits selon le schéma documenté ; recoupez les constats critiques avec un second parseur (comparatif des parseurs).
Pour la récupération des enregistrements supprimés, des outils de recherche SQLite comme bring2lite analysent les freelists et le WAL (Meng et Baier, 2019), et kacos2000 publie des outils de carving du presse-papiers (kacos2000/WindowsTimeline).
FAQ
Un utilisateur peut-il supprimer son historique Windows Timeline ?
Oui. Windows propose un bouton pour effacer l'historique des activités, les utilisateurs pouvaient retirer des entrées individuelles de Timeline sous Windows 10, et le paramètre de stockage de l'historique peut être désactivé. Retirer une entrée laisse une opération de suppression en attente dans ActivityOperation, qui constitue elle-même une preuve.
Combien de temps Windows Timeline conserve-t-il l'activité ?
Chaque ligne porte un ExpirationTime. Les chercheurs l'ont mesuré à 30 jours après la dernière modification pour les activités normales et à 12 heures pour le contenu du presse-papiers.