L'analyse d'images mémoire ou dumps mémoire (memory dump en anglais) est une pratique qui consiste à récupérer, acquérir le contenu de la mémoire volatile d'un système et à en extraire des informations pertinentes.
Le système d'exploitation peut fournir à l'investigateur nombreuses informations lors de l'analyse de la mémoire parmi lesquelles on trouve la liste des processus, des connexions réseaux, des préférences utilisateur, etc. Cette technique se développe rapidement depuis une dizaine d'années et plus particulièrement à la suite du concours Digital Forensic Research Workshop 2005 dont le thème Memory analysis challenge, a fait émerger une nouvelle branche dans le domaine de l'investigation digitale.
Objectifs
Parmi les différents objectifs de l'analyse d'image mémoire, on peut trouver : la possibilité de compléter l'analyse traditionnelle de stockages persistant (disques durs, supports de stockage amovibles, ) ; la difficulté de l'analyse traditionnelle due à la croissance importante des capacités des périphériques stockage ; l'analyse de malwares ou autres données comme les conversations électroniques qui résident en mémoire uniquement ; l'extraction de clés de chiffrement de périphériques de stockage.
Acquisition d'image mémoire
Selon la RFC3227, l'ordre de la volatilité impose à l'investigateur d'effectuer une sauvegarde de l'état actuel du système en cas de compromission de celui-ci dans l'ordre cache, registres, mémoire centrale, système de fichiers temporaires et enfin support de stockage persistant. L'acquisition a pour but de préserver l'état du système à un instant donné pour permettre une analyse post-mortem ou de réponse aux incidents. Il existe plusieurs moyens d'acquérir la mémoire d'un système que cela soit sur un environnement serveur ou de bureau. Il est possible de définir plusieurs critères qui permettent de savoir à quel point une image mémoire est solide ou fiable. La fiabilité d'une image mémoire est : correcte si l'image contient exactement les valeurs qui étaient stockées dans la mémoire au moment de l'acquisition (le degré de correction est un pourcentage de la mémoire qui a été acquis avec succès par rapport la taille totale de mémoire). atomique si l'image n'est affectée par aucune activité concurrente (le degré d'atomicité est le pourcentage cohérent de l'image mémoire). intègre si l'outil d'acquisition ne contamine pas l'image de la mémoire (par exemple, les outils logiciels modifient obligatoirement l'image mémoire car ils doivent être chargés avant d'être exécutés).
Ainsi, il est possible d'établir un classement des méthodes d'acquisition en marquant différentes régions de la mémoire cible avec des tags. Ces tags pourront être étudiés après acquisition et permettront de savoir avec quelle fiabilité l'image a été acquise. Les tags sont de simples horodatages incrémentés de manière constante par le système cible. En comparant les différentes valeurs des tags acquis, on constate le temps écoulé entre le début et la fin de l’acquisition.
Les différentes techniques d'acquisition peuvent être soit matérielles ou logicielles.
Acquisition matérielle Cold boot attack Contrairement à ce que l'on pourrait penser, la DRAM utilisée de nos jours dans la majeure partie des ordinateurs peut retenir son contenu pendant plusieurs secondes sans alimentation et cela même à une température ambiante tout en étant débranchée de leur carte mère. Bien que le contenu de la DRAM devient moins fiable si celle-ci n'est pas alimentée, il n'est pas immédiatement effacé et peut persister suffisamment longtemps pour permettre une acquisition matérielle de l'ensemble de la mémoire d'un ordinateur. Avec des températures faibles, la DRAM conserve son contenu encore plus longtemps. Le pourcentage d'erreur de l'image acquise lorsque la DRAM est refroidis par de l'air comprimés appliqué directement sur les chips est de 1% après 10 minutes sans alimentation (image correct à 99%), alors que le pourcentage d'erreur lorsque l'image est refroidie par de l'azote liquide est de 0.17 % après 60 minutes sans alimentation (image correcte à 99.83 %).
Ainsi, il est possible d'utiliser un mini-système sur un support bootable comme une clé USB dont l'unique but est de faire une image de la mémoire après avoir fait un redémarrage à froid de la cible lorsque l'on souhaite faire l'acquisition. Il est également possible, si l'ordinateur cible ne permet pas de choisir le périphérique de démarrage, de débrancher les chips de mémoires pour en acquérir l'image sur un système où l'investigateur a un accès suffisant. Bien que ce mini-système doit néanmoins être chargé en mémoire pour pouvoir s’exécuter, il est possible de configurer le secteur d'amorçage de manière à charger le système à un emplacement de la mémoire physique dont on sait que les informations sont déjà connues et ont une moindre valeur lors de l'acquisition. Par conséquent, le degré d'intégrité est dans ce cas de 100 %. Le degré d'atomicité ici est de 100 % car plus aucune activité relative au système cible ne s’exécute lors de l'acquisition.
Des mécanismes ont été développés et incorporés dans les architectures de microprocesseur depuis la DDR3 empêchant l'acquisition par une cold boot attaque. Un de ces mécanismes appelé brouillage des données de la mémoire (memory data scrambling) est basé sur un masque généré de manière aléatoire et sur le fait d'effectuer un OU exclusif (XOR) avec la donnée avant être incorporé dans la DRAM3. Ainsi une acquisition telle que définie ci-dessus ne permet de récupérer que des données brouillées et inutilisable en tant que telle. L'étape inverse du brouillage des données de la mémoire consiste donc simplement en la récupération de la donnée de la DRAM3, puis en l'application à nouveau du masque un OU exclusif pour extraire l'information en claire. Des études ont montré que ce type de protection est toutefois inefficace si l'on connaît uniquement une petite partie (128bits) de données en claire. Des architectures récentes de microprocesseur comme la génération de microprocesseur Intel Skylake qui adoptent le brouillage des données de la mémoire sont également vulnérables par ce type d'attaque.
Direct Memory Access La mémoire peut être acquise via la DMA (Direct Memory Access). Cette acquisition utilise un bus système tel que celui des cartes PCI pour copier la mémoire sur un stockage externe. Une des limitations de cette approche est que la carte doit être installée sur une interface PCI avant le démarrage du système. Lors du démarrage du POST, la carte s'initialise et éteint son contrôleur PCI de manière à cacher sa présence. La carte reste inactive en attente d'une acquisition via un interrupteur situé sur la carte. Cette carte est donc difficilement détectable par un potentiel malware cherchant à se dissimuler lorsqu'un tel périphérique est détecté. Avant l'acquisition, le CPU est en pause de manière à empêcher un potentiel malware de modifier le déroulement correct de l'acquisition. Par conséquent, le degré d'atomicité de l'image mémoire est également de 100 % lorsque le CPU est stoppé. Une autre limitation de cette technique d'acquisition est qu'elle ne permet pas d'acquérir l'ensemble de la mémoire. En effet, certaines régions de la mémoire, notamment l'UMA, sont utilisées par le BIOS. Lors d'une tentative d'acquisition de cette zone, la procédure bloque sans qu'aucune interaction puisse la relancer sauf un redémarrage ou le passage de la zone générant le blocage. Dans ce dernier cas, l'intégrité de l'image mémoire ne peut être de 100 % et correspond à l'espace des zones acquises sans blocage par rapport à la capacité totale de la mémoire du système cible.
L'acquisition matérielle ne fait pas de différence quant au système d'exploitation en cours d’exécution sur la machines. Elle peut être préférée à l'acquisition logicielle car elle ne modifie pas le contenu de la mémoire du système cible. Cependant, le principal inconvénient est le coût de l'équipement nécessaire.
Acquisition logicielle L'acquisition logicielle est une technique d'acquisition qui est peu coûteuse, généralement gratuite et disponible aisément. Ces raisons font que les outils d'acquisition logicielle sont préférés à l'acquisition matérielle.
Système Linux Sur les systèmes d'exploitation Linux, il existe deux périphériques nommés /dev/mem et /dev/kmem qui manipulent et permettent d'accéder respectivement à la mémoire physique et à la mémoire virtuelle du kernel. Historiquement, ces deux périphériques pouvait être lus en utilisant le programme dd natif sur Linux. Cependant, sur les versions récentes du système d'exploitation Linux, des protections empêchent par défaut l'utilisation de ces périphériques et il est nécessaire d'avoir compilé son noyau Linux avec une configuration particulière pour accéder à cette fonctionnalité.
FmemFmem est un projet open source qui permet l'acquisition de la mémoire physique sur un système Linux. Ce dernier est basé sur l'installation d'un module au noyau qu'il faut compiler permettant donc d'avoir accès à l'ensemble de la mémoire physique. L'outil créé un périphérique nommé /dev/fmem qui reprend les mêmes bases que /dev/mem sans les protections dernièrement ajoutées. LiME (anciennement DMD)LiME est une variante de Fmem fonctionnelle sur les systèmes d'exploitation Linux mais également sur les variantes du système d'exploitation Android. Cet outil présente certains avantages comparé à Fmem, outre le fait que Fmem ne peut pas être utilisé sur Android. Lime utilise l'installation du module avec certains paramètres pour immédiatement extraire l'ensemble de la mémoire physique vers un fichier ou vers une socket TCP.
Système Windows Une technique commune pour acquérir l'image mémoire d'un système Windows est de s'appuyer sur l’objet \\.\Device\PhysicalMemory qui représente une abstraction de la mémoire physique vue par le système. Pour des raisons de sécurité, cependant, les droits d'accès en tant que simple utilisateur ont été révoqués à la suite de l'introduction de Microsoft Windows Server 2003 Service Pack 1. Pour cette raison, il est nécessaire de disposer d'un module/driver installé sur le système cible ainsi qu'un programme associé en mode administrateur pour permettre l'acquisition. Si les droits permettant l'acquisition de l'image mémoire du système ne sont pas suffisants, il reste possible d'acquérir individuellement les processus de l'utilisateur courant. L'accès à la mémoire d'un processus en cours d'exécution est même fourni nativement par le système d'exploitation Windows. Cependant, les structures internes du système ainsi que la mémoire privée allouée pour d'autres processus sont inaccessibles.
Une étude met en évidence les performances de différents outils logiciels d'acquisition open source (une modification mineure du code est nécessaire pour l'étude) en se basant sur les critères définis par Vömel et Freiling. L'environnement défini par l'expérimentation utilise Bochs, un émulateur similaire à QEMU dans lequel le système invité est capable de communiquer avec l’émulateur via des hypercalls. Ces hypercalls utilisent le registre EAX ainsi que l'interruption INT 3 pour indiquer un événement particulier. Parmi les événements, il est décrit le début de l'acquisition, le début de l'acquisition d'une page, la fin de l'acquisition d'une page ou encore la fin de l'acquisition. L'interruption générée est traitée par l’émulateur sans que le système invité ne soit altéré dans son fonctionnement. Toutefois, il est nécessaire d'apporter des modifications aux outils d'acquisition logicielle permettant ainsi de déclencher ces hypercalls et donc de mesurer les performances.
Trois outils d'acquisition d'acquisition open source ont été testés : wind32dd ManTech Memory DDManTech Memory DD WinPMEMWinPMEM