Cache bitmap RDP : emplacement et acquisition
Où est stocké le cache bitmap RDP de chaque utilisateur, et comment le collecter avec PowerShell, KAPE RDPCache, Velociraptor ou une image disque sans piège.
En bref. Le cache bitmap RDP se trouve dans C:\Users\<user>\AppData\Local\Microsoft\Terminal Server Client\Cache\ sur la machine depuis laquelle l'utilisateur s'est connecté, avec un dossier par compte. Collectez le dossier entier pour chaque utilisateur, conservez la partie Users\<name>\ du chemin pour que chaque fichier reste rattaché à son compte, et fermez d'abord les sessions Bureau à distance ouvertes, car les fichiers peuvent être en cours d'utilisation. La cible RDPCache de KAPE et Windows.Triage.Targets de Velociraptor s'en chargent pour vous ; une courte boucle PowerShell ou un find sur une image montée font aussi l'affaire.
Pour savoir ce que contient le cache et pourquoi il compte, commencez par le guide forensique du cache bitmap RDP.
Où se trouve le cache
Le cache bitmap RDP est écrit par le client Connexion Bureau à distance, mstsc, dans le dossier AppData local (non itinérant) de l'utilisateur qui l'a lancé.
| Système | Chemin |
|---|---|
| Windows actuel | C:\Users\<user>\AppData\Local\Microsoft\Terminal Server Client\Cache\ |
| Windows XP | C:\Documents and Settings\<user>\Local Settings\Application Data\Microsoft\Terminal Server Client\Cache\ |
| Après une mise à niveau sur place | C:\Windows.old\Users\<user>\AppData\Local\Microsoft\Terminal Server Client\Cache\ |
Ce dossier peut contenir deux familles de fichiers :
| Fichiers | Format |
|---|---|
bcache2.bmc, bcache22.bmc, bcache24.bmc | Cache BMC historique, emplacements fixes, 8/16/32 bpp |
Cache0000.bin, Cache0001.bin, ... | Cache persistant RDP 8, tuiles 32 bits |
Les deux familles peuvent cohabiter dans le même dossier. Collectez tout son contenu, sans filtrer par extension.
Quelle machine, quel utilisateur
Deux erreurs font perdre le plus de temps :
- La mauvaise machine. Le cache enregistre ce que le client a affiché : il se trouve donc sur le poste source. Si un attaquant a rebondi de
WKS-AversSRV-B, les preuves de la session surSRV-Bsont dans le cache deWKS-A. Il vaut la peine de collecter aussi sur la cible, mais pour les sessions lancées depuis la cible. - Le mauvais compte. Le cache appartient au compte qui a exécuté
mstsc, pas au compte utilisé pour ouvrir la session sur l'hôte distant. Un profil localsvc_backupsur le poste source peut contenir les écrans d'une session ouverte avec des identifiants de domaine sur la cible.
C'est pour cela que le chemin compte : RDP Bitmap Cache Parser rattache chaque fichier au compte tiré de Users\<name>\ dans le chemin. Supprimez le chemin et vous perdez ce rattachement.
Option 1 : PowerShell sur un système en fonctionnement
À exécuter en tant qu'administrateur. Fermez d'abord les sessions Bureau à distance ouvertes.
Get-ChildItem C:\Users -Directory | ForEach-Object {
$rel = "Users\$($_.Name)\AppData\Local\Microsoft\Terminal Server Client\Cache"
if (Test-Path "C:\$rel") { robocopy "C:\$rel" "C:\triage\$rel" /E /B /R:0 /W:0 /NP /NDL /NFL | Out-Null }
}
tar -a -c -f C:\triage\rdpcache.zip -C C:\triage Users
Ce que fait ce script : pour chaque dossier de profil, il copie le dossier Cache avec robocopy en mode sauvegarde (/B), sans nouvelle tentative et sans sortie verbeuse, en conservant l'arborescence Users\<name>\... sous C:\triage. Ensuite, tar -a construit un ZIP à partir de cette arborescence. Le ZIP peut être déposé tel quel dans l'outil.
Cette boucle ne parcourt que C:\Users. Elle ne couvre ni Windows.old ni les chemins XP : pour ceux-là, utilisez KAPE ou une image montée.
Option 2 : KAPE
KapeFiles fournit une cible RDPCache (source). Elle collecte le dossier de cache de chaque utilisateur, ainsi que les emplacements Windows.old et Windows XP.
kape.exe --tsource C: --tdest C:\triage\kape --target RDPCache
KAPE conserve l'arborescence d'origine sous la destination : le rattachement aux comptes est donc préservé. Compressez le dossier de destination en ZIP, ou déposez-le directement en tant que dossier.
Option 3 : Velociraptor
Collectez Windows.Triage.Targets (issu du projet Velociraptor Triage) avec la cible RDPCache, soit depuis l'interface graphique sur un client connecté, soit au moyen d'un collecteur hors ligne. Le ZIP de collecte obtenu peut être chargé tel quel : l'outil lit les ZIP, y compris ceux produits par KAPE et Velociraptor, et y retrouve les fichiers de cache.
Option 4 : une image disque montée
Avec le volume Windows monté en lecture seule sur /mnt/win :
cd /mnt/win && find Users -ipath '*/Terminal Server Client/Cache/*' -type f | zip -@ ~/triage/rdpcache.zip
-ipath ne tient pas compte de la casse, ce qui compte sur les images où la casse des noms de dossiers varie. Adaptez le répertoire de départ à Windows.old/Users ou Documents and Settings pour les arborescences plus anciennes.
Pièges courants
| Problème | Cause | Solution |
|---|---|---|
| La copie échoue ou des fichiers sont ignorés | Une session est ouverte et le client verrouille les fichiers | Fermer les sessions, ou utiliser le mode sauvegarde / un collecteur en accès disque brut |
| Fichiers rattachés à aucun compte | Chemins aplatis pendant la collecte | Conserver Users\<name>\... dans l'archive |
| Rien pour le compte attendu | Mauvaise machine ou mauvais profil | Vérifier quel compte a exécuté mstsc et sur quelle machine |
| Historique antérieur à la mise à niveau manqué | Windows.old non collecté | Utiliser la cible KAPE ou fouiller l'image |
| Archive volumineuse | Les fichiers de cache peuvent peser des dizaines de Mo et contenir des milliers de tuiles | Normal ; l'outil les traite localement |
Collectez aussi les métadonnées NTFS ($MFT, $UsnJrnl) et les artefacts qui permettent de dater les sessions, puisque les tuiles elles-mêmes ne portent aucune heure : le journal d'événements du client RDP, le NTUSER.DAT de l'utilisateur pour les clés de registre Terminal Server Client, les jump lists et Prefetch. La liste et la façon de les exploiter se trouvent dans mouvement latéral RDP : les artefacts du poste source.
Périmètre : sur quelles machines collecter
Collectez sur chaque machine où quelqu'un a pu ouvrir une session Bureau à distance pendant la période étudiée, pas seulement sur les serveurs auxquels on a accédé. Les bons candidats sont les postes d'administration, les serveurs de rebond et toute machine dont le journal d'événements du client RDP ou les clés de registre Terminal Server Client mentionnent une cible dans le périmètre. Un cache qui se révèle vide ou ancien coûte peu ; un poste source oublié peut coûter la seule vue de ce qui s'est passé sur la cible.
Intégrité
Calculez l'empreinte de l'archive ou des fichiers tels que collectés, consignez l'outil et la commande utilisés, et travaillez sur des copies. L'outil dans le navigateur se contente de lire les octets que vous lui fournissez, sans les modifier ni les envoyer, mais les bonnes pratiques ne doivent pas dépendre de l'outil.
Étape suivante
Chargez le ZIP ou le dossier dans RDP Bitmap Cache Parser, ou suivez pas à pas comment analyser le cache bitmap RDP dans votre navigateur.
Questions fréquentes
Où est stocké le cache bitmap RDP ?
Dans le profil de chaque utilisateur, sur la machine qui a exécuté le client Bureau à distance : C:\Users\<user>\AppData\Local\Microsoft\Terminal Server Client\Cache\. Sous Windows XP, il se trouve sous Documents and Settings\<user>\Local Settings\Application Data. Après une mise à niveau, vérifiez aussi C:\Windows.old\Users.
Pourquoi ma copie du cache échoue-t-elle ?
Les fichiers peuvent être en cours d'utilisation tant qu'une session Bureau à distance est ouverte. Fermez d'abord les sessions, ou copiez en mode sauvegarde (robocopy /B) ou avec un collecteur en accès disque brut comme KAPE ou Velociraptor.
KAPE dispose-t-il d'une cible pour le cache bitmap RDP ?
Oui. La cible KapeFiles RDPCache collecte le dossier Cache de chaque utilisateur, y compris les chemins Windows.old et Windows XP.