Qu'est-ce que le cache bitmap RDP ?
Pour éviter de retélécharger les mêmes morceaux d'écran, le client Bureau à distance (mstsc.exe) conserve un cache persistant de petits bitmaps — généralement des tuiles de 64×64 pixels — envoyés par la machine distante. Les fichiers restent dans le profil de l'utilisateur qui a exécuté le client.
Une fois réassemblées, les tuiles montrent des fragments de ce que cet utilisateur a vu sur l'écran distant : consoles et commandes saisies, fenêtres de dossiers, outils, documents. Pour un enquêteur, c'est une preuve visuelle rare de mouvement latéral, collectée sur la machine source.
Où il est stocké
- C:\Users\<user>\AppData\Local\Microsoft\Terminal Server Client\Cache\ sur la machine depuis laquelle la connexion a été établie.
- Cache0000.bin, Cache0001.bin… : format récent, un en-tête « RDP8bmp » suivi de tuiles 32 bits non compressées.
- bcache2.bmc, bcache22.bmc, bcache24.bmc : ancien format, emplacements fixes de 64×64 à 8, 16 ou 32 bits par pixel, tuiles souvent compressées avec le codec RLE entrelacé de RDP.
Pourquoi c'est important dans une investigation
- Montre ce qu'un attaquant ou un administrateur a réellement regardé sur l'hôte distant — même si cet hôte a été effacé ou jamais imagé.
- Les tuiles de console peuvent révéler des commandes, des chemins et des noms d'outils ; les tuiles de l'explorateur révèlent des noms de dossiers et de fichiers.
- Sa seule présence prouve que le compte a utilisé le client Bureau à distance sur cette machine ; corrélez avec le journal d'événements du client et le registre pour identifier la cible et dater les sessions.
- Les emplacements ancien format peuvent conserver des fragments de tuiles plus anciennes (restes d'emplacement).
Limites
- Les tuiles n'ont ni horodatage ni position à l'écran : l'ordre est celui du cache, et les tuiles identiques ne sont stockées qu'une fois.
- Seul ce que le serveur a envoyé sous forme de bitmaps est mis en cache ; certaines sessions laissent peu de tuiles exploitables, et le cache est limité en taille et recyclé.
- Les tuiles 8 bits de l'ancien format n'ont pas leur palette, les couleurs sont donc approximatives. Il n'y a pas d'OCR : les tuiles doivent être lues par un humain.
- Les indices heuristiques (type console, type texte) peuvent manquer des tuiles ou en signaler d'anodines.
Comment récupérer les fichiers
- Collectez le dossier Cache complet de chaque profil avec KAPE (cible RDPCache), Velociraptor (Windows.Triage.Targets, RDPCache) ou depuis une image disque.
- Relevez les horodatages des fichiers : ils sont le principal indice sur la date des sessions.
- Conservez l'arborescence Users\<name>\ pour que chaque cache soit attribué à son compte.
FAQ
Mes fichiers de cache sont-ils envoyés quelque part ?
Non. Le décodeur est écrit en Rust, compilé en WebAssembly et s'exécute dans un Web Worker de votre navigateur. Il n'existe aucun point d'envoi ; tuiles, collages et exports sont générés localement.
En quoi est-ce différent de bmc-tools ?
L'outil a son propre décodeur, écrit de façon indépendante à partir des spécifications de Microsoft et validé par comparaison avec bmc-tools, puis ajoute ce qui est difficile en ligne de commande : une galerie filtrable, des réglages de collage modifiables instantanément, un canevas de reconstruction par glisser-déposer, des indices de triage et des exports (PNG, BMP avec les noms bmc-tools, CSV, JSON). bmc-tools reste la référence pour recouper les constats importants.
Peut-il m'indiquer quand une tuile a été affichée ?
Non — le cache ne stocke aucune date par tuile, et cet outil n'en invente pas. Datez les sessions avec les horodatages des fichiers de cache, le journal d'événements RDPClient/Operational (événement 1024) et les clés de registre Terminal Server Client.
Quelle machine contient le cache ?
Le client : la machine où Connexion Bureau à distance a été exécutée, dans le profil de l'utilisateur qui l'a lancée. Il montre l'écran distant : un pivot d'un attaquant de l'hôte A vers l'hôte B laisse donc des fragments de l'écran de B sur A.
Pourquoi les lignes de mon collage ne s'alignent-elles pas ?
Les tuiles sont stockées dans l'ordre de leur mise en cache, les tuiles identiques une seule fois, et les tuiles de bord sont plus petites. Essayez d'autres largeurs, puis terminez à la main dans la vue Reconstruire.
À propos du décodeur
Le décodeur est une implémentation Rust indépendante, écrite à partir des spécifications ouvertes de Microsoft ([MS-RDPBCGR] pour le RLE entrelacé, [MS-RDPEGDI] pour le codec planaire RDP 6.0) et de travaux publics comme le bulletin CERT-FR CERTFR-2016-ACT-017. bmc-tools de l'ANSSI (github.com/ANSSI-FR/bmc-tools), l'outil de référence pour cet artefact, a servi à valider le résultat tuile par tuile ; aucune partie de son code n'est reprise. Différences documentées : les tuiles de moins de 64 px de large gardent leur largeur réelle, les tuiles décompressées en 8 et 32 bpp gardent leur profondeur de couleur réelle, les tuiles planaires RDP 6.0 sont décodées et les fichiers endommagés sont décodés autant que possible. Comparez avec bmc-tools pour les cas importants.