Skip to content

Cache bitmap RDP : le guide forensique complet

Ce qu'est le cache bitmap RDP, où il se trouve, ce que ses tuiles révèlent d'une session distante, comment la dater et analyser bcache*.bmc et Cache*.bin.

Publié le 9 min de lecture

En bref. Le cache bitmap RDP est un ensemble de fichiers que le client Connexion Bureau à distance (mstsc.exe) écrit sur le poste source, dans le profil de l'utilisateur qui s'est connecté : C:\Users\<user>\AppData\Local\Microsoft\Terminal Server Client\Cache\. Il contient des milliers de petits bitmaps, généralement de 64×64 pixels, de ce qu'affichait l'écran distant. Une fois décodées et disposées, ces tuiles peuvent montrer des consoles et les commandes tapées, des noms de dossiers, des outils. Elles ne portent ni horodatage ni position à l'écran : on date la session avec d'autres artefacts et on reconstruit les écrans à la main. RDP Bitmap Cache Parser décode les deux formats de fichiers dans votre navigateur, sans rien envoyer.

Ce guide est le point d'entrée de la série. Chaque section renvoie vers un article plus détaillé.

Qu'est-ce que le cache bitmap RDP ?

Le Bureau à distance transmet l'écran distant au client sous forme de bitmaps. Pour éviter de retélécharger les mêmes éléments (un cadre de fenêtre, une icône, un fond uni), le client garde en cache les bitmaps déjà reçus. Lorsque le cache bitmap persistant est activé, une partie de ce cache est écrite sur disque et survit à la session. Cette copie sur disque, c'est le cache bitmap RDP.

L'option « Persistent bitmap caching » se trouve dans l'onglet Experience de Connexion Bureau à distance ; dans les fichiers .rdp, elle est enregistrée sous la forme bitmapcachepersistenable:i:1. Elle est activée par défaut dans mstsc. Cette série traite du cache écrit par mstsc ; nous n'affirmons rien sur les autres clients RDP.

Pourquoi il compte dans une enquête

La plupart des traces RDP disent qu'une session a eu lieu. Le cache bitmap est l'un des rares artefacts capables de montrer ce que l'utilisateur a vu pendant cette session :

  • des fenêtres de console, avec les commandes et leur sortie telles qu'elles s'affichaient ;
  • des fenêtres de l'Explorateur de fichiers, avec des noms de dossiers et de fichiers ;
  • des outils ouverts sur l'hôte distant, des boîtes de dialogue, des messages d'erreur ;
  • parfois du texte saisi dans un éditeur.

Il se trouve sur la machine depuis laquelle la session a été ouverte. Dans un dossier de mouvement latéral, cela signifie que le cache d'un poste de travail compromis ou d'un serveur de rebond peut documenter l'activité sur une cible qui a ensuite été effacée ou dont les journaux ont été vidés. C'est la raison principale de le collecter sur chaque machine où mstsc a été utilisé.

Où il se trouve

SystèmeChemin
Windows actuelC:\Users\<user>\AppData\Local\Microsoft\Terminal Server Client\Cache\
Windows XPC:\Documents and Settings\<user>\Local Settings\Application Data\Microsoft\Terminal Server Client\Cache\
Après une mise à niveau sur placeVérifier aussi C:\Windows.old\Users\...

Le cache est propre à chaque utilisateur : les fichiers appartiennent à celui qui a lancé le client. La collecte avec PowerShell, KAPE, Velociraptor ou depuis une image montée est détaillée dans emplacement et acquisition du cache bitmap RDP.

Les deux formats de fichiers

FormatNoms de fichiersÉcrit parStockage des tuiles
Cache BMC historiquebcache2.bmc, bcache22.bmc, bcache24.bmc (bmc-tools mentionne aussi bcache23.bmc)Les anciens clients ; encore présent sur des systèmes actuelsEmplacements de taille fixe, 8, 16 ou 32 bpp, certaines tuiles compressées en RLE entrelacé (interleaved RLE)
Cache persistant RDP 8Cache0000.bin, Cache0001.bin, ...Les versions plus récentes du clientEn-tête RDP8bmp, puis tuiles 32 bits non compressées, les unes à la suite des autres

Aucun de ces formats n'est documenté par Microsoft en tant que format de fichier. Ce que l'on en sait vient de la rétro-ingénierie, en premier lieu de bmc-tools de l'ANSSI. La compression des bitmaps dans les fichiers .bmc, elle, correspond au codec RLE entrelacé documenté du protocole RDP. Le détail octet par octet se trouve dans le format de fichier bcache*.bmc et Cache*.bin.

Ce qu'est une tuile, et ce qu'elle n'est pas

Une tuile bitmap est un petit rectangle de l'écran distant, généralement de 64×64 pixels, plus petit en bord d'écran. Chacune est stockée avec une clé de cache de 64 bits, une largeur et une hauteur. Rien de plus.

Une tuile possèdeUne tuile ne possède pas
Des pixelsD'horodatage
Une largeur et une hauteurSa position à l'écran
Une clé de cacheD'identifiant de session ou d'hôte cible
Une place dans l'ordre du cacheDe garantie d'être récente

Deux conséquences conditionnent toute l'analyse :

  1. Les tuiles sont rangées dans l'ordre du cache, pas dans l'ordre de l'écran. Des tuiles voisines dans le fichier sont parfois voisines à l'écran (une zone de fenêtre peut être mise en cache ligne par ligne), mais rien dans le format ne le garantit.
  2. Les éléments identiques ne sont stockés qu'une fois. Un fond de bureau uni ou une zone de console noire vide apparaît sous la forme d'une seule tuile, et non des dizaines d'endroits qu'elle recouvrait.

Dans les fichiers .bmc, un emplacement peut aussi conserver une partie d'une tuile plus ancienne lorsqu'une tuile plus petite est écrite par-dessus. Ce résidu est un reste d'emplacement et peut montrer un contenu écrasé par ailleurs.

Des tuiles aux écrans

L'analyse vous donne un tas de tuiles. Trois vues en font des éléments de preuve :

  • Galerie : chaque tuile à une taille lisible, avec son index. Rapide pour repérer du texte.
  • Collage : toutes les tuiles dans une seule image, N par ligne, comme le _collage.bmp de bmc-tools. Quand une fenêtre a été mise en cache ligne par ligne, choisir la bonne largeur permet d'en aligner des parties. Voir collage de tuiles.
  • Reconstruction manuelle : placer les tuiles à l'œil sur une grille pour reconstituer un écran, comme le fait RdpCacheStitcher du BSI et comme le fait l'onglet Reconstruire de cet outil.

Reconstruire des écrans RDP à partir des tuiles du cache explique pourquoi un collage s'aligne au milieu et se décale sur les bords, et comment terminer le travail à la main.

Dater l'activité

Le cache fournit du contenu, pas du temps. La chronologie se construit à partir des artefacts qui l'entourent :

SourceEmplacementCe qu'elle apporte
Horodatages NTFS des fichiers de cache$MFT ($STANDARD_INFORMATION, $FILE_NAME), $UsnJrnlQuand le client a créé et écrit les fichiers de cache
Journal du client RDPMicrosoft-Windows-TerminalServices-RDPClient/Operational, événement 1024Tentatives de connexion, avec le nom de la cible
Registre Terminal Server ClientHKCU\Software\Microsoft\Terminal Server Client\Servers\<host> et ...\DefaultCibles utilisées, UsernameHint, liste MRU
Default.rdp, jump lists, PrefetchDocuments de l'utilisateur, profil, C:\Windows\PrefetchUtilisation du client et connexions récentes
Journaux de l'hôte cibleSecurity 4624 (type d'ouverture de session 10), 4778/4779 ; RemoteConnectionManager 1149Ouvertures de session et reconnexions de l'autre côté

Le contenu visible dans les tuiles aide aussi : l'horloge de la barre des tâches, une date dans une liste de fichiers, un bilan de transfert avec sa durée. Traitez-les comme ce que l'écran affichait, dans le fuseau horaire et selon l'horloge de l'hôte distant. Les détails sont dans mouvement latéral RDP : les artefacts du poste source.

Outils

OutilCe qu'il fait
bmc-tools (ANSSI, Python)Décodeur de référence : exporte les tuiles en BMP ainsi qu'un collage
RdpCacheStitcher (BSI)Une interface graphique qui aide à assembler les tuiles exportées en écrans
RDP Bitmap Cache ParserDécode les deux formats dans le navigateur, avec galerie, collage, canevas de reconstruction, indices de triage et exports

Notre décodeur est une implémentation indépendante, écrite à partir des spécifications de Microsoft et de travaux publics ; nous citons bmc-tools comme implémentation de référence et avons validé notre sortie par comparaison avec lui. Une comparaison honnête, limites de notre outil comprises, se trouve dans comparatif des parseurs de cache RDP. Pour une prise en main pas à pas, voir comment analyser le cache bitmap RDP dans votre navigateur.

Pièges

  • Collecter sur la mauvaise machine. Le cache est sur le poste source, pas sur la cible.
  • Copier pendant qu'une session est ouverte. Les fichiers peuvent être en cours d'utilisation et la copie peut échouer. Fermez les sessions ou utilisez une copie en mode sauvegarde ou une copie brute.
  • Lire une chronologie dans l'ordre des tuiles. L'ordre du cache n'est pas un ordre chronologique fiable.
  • Surinterpréter les tuiles 8 bits. La palette n'est pas stockée : les couleurs sont approximatives.
  • Prendre les indices pour des constats. « Type console » signifie « à lire en priorité », pas « malveillant ».

Questions fréquentes

Le cache bitmap RDP se trouve-t-il sur le client ou sur le serveur ?

Sur le client. Le client Connexion Bureau à distance (mstsc.exe) l'écrit dans le profil de l'utilisateur qui l'a lancé, sur la machine depuis laquelle il s'est connecté. L'hôte cible ne conserve pas ces fichiers pour cette session.

Le cache bitmap RDP contient-il des horodatages ?

Non. Les tuiles ne portent ni heure, ni position à l'écran, ni identifiant de session. Datez l'activité avec les horodatages NTFS des fichiers de cache, le journal d'événements du client RDP, les clés de registre Terminal Server Client et les journaux de l'hôte cible.

Peut-on voir ce que l'attaquant a tapé ?

Parfois. Si une console ou un éditeur était affiché, les tuiles qui le couvraient peuvent montrer la ligne de commande ou le texte tel qu'il apparaissait à l'écran. On le lit sur les images : le cache ne contient aucun journal de frappes.

Quel outil utiliser pour l'analyser ?

bmc-tools de l'ANSSI est le décodeur de référence. RDP Bitmap Cache Parser décode les mêmes fichiers dans le navigateur avec son propre décodeur, écrit indépendamment, et y ajoute une galerie, un collage et un canevas de reconstruction. Pour les constats importants, comparez la sortie de deux outils.

Articles liés

Articles liés

Quels artefacts du poste source RDP montrent où un utilisateur s'est connecté et quand, et comment s'en servir pour dater et attribuer le cache bitmap.
Pas à pas : charger bcache*.bmc et Cache*.bin dans un parseur gratuit, trier les tuiles, faire un collage, reconstruire un écran et exporter les preuves.
Pourquoi un collage du cache RDP s'aligne par endroits et se décale ailleurs, comment choisir sa largeur et reconstruire un écran tuile par tuile.