Analyse d'images mémoire
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[1] dont le thÚme Memory analysis challenge, a fait émerger une nouvelle branche dans le domaine de l'investigation digitale[2].
Objectifs
Parmi les différents objectifs de l'analyse d'image mémoire[3], on peut trouver :
- la possibilité de compléter l'analyse traditionnelle de stockages persistant (disques durs, supports de stockage amovibles, , etc.) ;
- 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[4], 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[5]. 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)[6].
- 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)[6].
- 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)[6].
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[6].
Les diffĂ©rentes techniques d'acquisition peuvent ĂȘtre soit matĂ©rielles ou logicielles.
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 %)[7].
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[8].
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[9]. 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[10]. Des architectures rĂ©centes de microprocesseur comme la 6e 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[11].
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[12]. 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[13]. 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[12].
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[14].
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[14].
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Ă©[15].
Fmem[16] 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)[17] 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[18].
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[19]. 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[20]. Si les droits permettant l'acquisition de l'image mĂ©moire du systĂšme ne sont pas suffisant, 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'autre processus sont inaccessibles.
Une Ă©tude met en Ă©vidence les performances de diffĂ©rents outils logiciels d'acquisition open source (une modification mineur du code est nĂ©cessaire pour l'Ă©tude) en se basant sur les critĂšres dĂ©finis par Vömel et Freiling[21]. 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 utilise le registre EAX ainsi que l'interruption INT 3 pour indiquer d'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é :
Les trois outils rĂ©vĂšlent des degrĂ©s de fiabilitĂ© (correctness) de plus de 99 % dans tous les cas (capacitĂ© de la mĂ©moire du systĂšme cible de 512 Mo, 1 024 Mo ou 2 048 Mo). Le degrĂ© d'atomicitĂ© lui est compris entre 60.45 % et 62.71 % pour une capacitĂ© de mĂ©moire de 512 Mo et de 25 % pour une capacitĂ© de mĂ©moire de 2 048 Mo. Le manque d'atomicitĂ© avec l'augmentation de la capacitĂ© de la mĂ©moire est dĂ» au temps mis par l'acquisition de la mĂ©moire et Ă lâexĂ©cution d'activitĂ©s concurrentes qui modifie le contenu de la mĂ©moire pendant l'acquisition et donc augmentent les chances d'avoir des incohĂ©rences entre les donnĂ©es des pages acquises. Le degrĂ© d'intĂ©gritĂ© est inversement meilleur avec l'augmentation de la capacitĂ© de la mĂ©moire. Il est compris entre 72.627 % et 71.413 % pour une capacitĂ© de la mĂ©moire de 512 Mo et entre 82.095 % et 81.553 % pour une capacitĂ© de 2 048 Mo. Pour les trois outils d'acquisition open source wind33dd, ManTech Memory dd et WinPMEM, on constate que le degrĂ© d'intĂ©gritĂ©, de fiabilitĂ© et d'atomicitĂ© est Ă©quivalent.
Cependant, d'autres outils propriétaires permettent d'acquérir la mémoire d'un systÚme. Vömel et Freiling[5] exposent plusieurs de ces outils et tentent de classer les outils non pas entre-eux individuellement mais plutÎt entre catégories (hardware acquisition, kernel-level acquisition, virtualisation/emulation). Certains des outils propriétaires ont été testés parmi lesquels figurent :
- FTK Imager
- DumpIt[24]
Il est possible d'effectuer sur toutes les versions de Windows un dump de la mĂ©moire physique incluant les dumps dits kernel dump ou complete dump grĂące Ă une fonctionnalitĂ© fournie par Windows. En effet, un BugCheck (plus connu sous le nom de Blue Screen Of Death) peut ĂȘtre gĂ©nĂ©rĂ© manuellement par l'utilisateur soit par une configuration Ă effectuer dans le registre du systĂšme permettant de dĂ©clencher le BugCheck avec une combinaison de touches du clavier[19], soit en lançant un programme appelĂ© NotMyFault.exe dĂ©veloppĂ© par Mark Russinovich. Le BugCheck gĂ©nĂšre automatiquement un dump mĂ©moire. Le dump mĂ©moire gĂ©nĂ©rĂ© n'est pas une image RAW mais une image modifiĂ©e de celle-ci avec certaines structures ajoutĂ©es de maniĂšre Ă ĂȘtre directement utilisable par le debugger Windows WinDBG.
Acquisition via machine virtuelle
QEMU est un logiciel libre de machine virtuelle, pouvant émuler un processeur et, plus généralement, une architecture différente si besoin. Il est possible de récupérer via l'option -monitor stdio la mémoire utilisée par le systÚme cible. Il est possible de faire l'acquisition de la mémoire en utilisant la commande pmemsave <starting_physical_address> <size> <output_file >[25].
VirutalBox est un logiciel de virtualisation de systĂšmes d'exploitation. De la mĂȘme maniĂšre qu'avec QEMU, il est possible de rĂ©cupĂ©rer l'image de la mĂ©moire avec une commande vboxmanage debugvm <vmname> dumpguestcore --filename <output_file>[26]. L'image gĂ©nĂ©rĂ©e par VirtualBox n'est pas un copie exacte octet par octet de la mĂ©moire mais un format core dump binaire destinĂ© notamment Ă des fins de debuggage. Il existe cependant des outils qui permettent de convertir le fichier gĂ©nĂ©rĂ© au format RAW (c'est-Ă -dire un fichier dont chaque octet reprĂ©sente physiquement le contenu acquis). Lâoutil Volatility permet de faire une telle conversion ou de traiter/analyser directement le fichier au format core dump. Durant la phase d'acquisition, le systĂšme cible est en pause. Par consĂ©quent, lâatomicitĂ©, l'intĂ©gritĂ© ainsi que la fiabilitĂ© de l'acquisition (correct image) sont de 100 %. Dans tous les cas de virtualisation/Ă©mulation, c'est l'hyperviseur qui permet d'extraire le contenu de la mĂ©moire et cela sans que le systĂšme invitĂ© ne soit interrompu dans son exĂ©cution.
Analyse de l'image mémoire
Une fois l'image de la mémoire d'un systÚme effectuée, la phase d'analyse peut commencer. Plusieurs méthodes d'analyse de la mémoire ont été créées.
Analyse non structurée
L'analyse de l'image mĂ©moire a commencĂ© au dĂ©but du XXIe siĂšcle lorsque les investigateurs forensic ont rĂ©alisĂ© qu'ils pouvait obtenir la mĂ©moire directement d'un systĂšme en cours dâexĂ©cution via les interfaces d'acquisition citĂ©s plus haut. Ă l'Ă©poque, on pouvait dĂ©jĂ trouver rootkits difficile voire impossible Ă dĂ©tecter sur un systĂšme en cours dâexĂ©cution ainsi que des techniques anti-forensic pouvant tromper les outils dynamique d'analyse (live analysis). Cependant, durant cette pĂ©riode, on ne pouvait trouver de framework ou d'outils plus matures que l'utilisation d'outils tels que la recherche de chaĂźne de caractĂšre (via les commandes strings et grep) ou encore les Ă©diteurs hexadĂ©cimaux pour trouver des donnĂ©es intĂ©ressantes. Ces techniques sont de nos jours qualifiĂ©es d'analyse non structurĂ©e[27].
Analyse structurée
Au début de l'année 2005, le Digital Forensic Research WorkShop a divulgué son challenge annuel. Ce challenge demandait aux investigateurs participant d'effectuer une analyse de l'image mémoire d'un systÚme Windows fourni. Le challenge a mené à la réalisation de plusieurs outils développés dans les années suivantes dont KntTools, Comae (anciennement MoonSols), FATKit ou le plus connu, Volatility (anciennement VolaTools)[27].
ĂnumĂ©ration des processus via mĂ©ta-donnĂ©es
Deux outils qui analysent les images mémoires systÚmes Windows ont été proposés lors du DFRWS de 2005. Le premier, appelé MemParser, permet une énumération des processus actifs ainsi que le dump de la mémoire spécifique à un processus particulier. Le deuxiÚme, appelé Kntlist, produit une liste conséquente des processus, threads, handles et d'autres objets générés depuis plusieurs listes et tables du noyau. Ces travaux s'appuient tous sur le parcours de méta-données type listes et tables pour extraire les informations des images mémoires. Ces métadonnées sont généralement trouvées via un point d'entrée dans l'image mémoire qui correspond en général à une variable globale du noyau[28] - [29].
Limitations pour les processus terminées
Lorsqu'un processus est terminé ou détruit, le systÚme retire le processus en question de la liste des processus en cours d'exécution et désalloue la mémoire attribuée processus. Par conséquent, une énumération de processus via les méta-données (listes, tables) ne permettra pas de retourner les processus récemment terminés ou détruits[28].
Limitation pour les processus malicieux
Certaines manipulations dans l'espace d'adressage du noyau par des malware ou rootkits peuvent masquer leur prĂ©sence en dissimulant un processus en cours dâexĂ©cution. En effet, ces malwares disposant d'un accĂšs suffisant pour manipuler de telles listes pour s'extraire de la liste des processus actifs. Ce type de techniques visant Ă dissimuler l'exĂ©cution d'un processus malveillant est plus connue sous le nom de Direct Kernel Object Manipulation[28].
ĂnumĂ©ration des processus via recherche de patterns/signature
Dans le cas oĂč la mĂ©moire attribuĂ©e Ă un processus est dĂ©sallouĂ©e, le systĂšme ne rĂ©Ă©crit pas sur les plages d'adresses et ces plages d'adresses peuvent demeurer ainsi avec leurs contenus plusieurs jours[19]. Dans le cas d'une attaque de type DKOM, la mĂ©moire allouĂ©e au processus malveillant est toujours prĂ©sente. Il est proposĂ© dans une autre Ă©tude de ne pas parcourir uniquement les listes fournies par le systĂšme mais d'effectuer Ă la place une recherche linĂ©aire de l'image mĂ©moire pour trouver des structures de donnĂ©es reprĂ©sentant un processus ou des structures de donnĂ©es reprĂ©sentant un thread.
Dans le cas de Windows, qui est un systĂšme basĂ© sur l'objet, tous les objets sont dĂ©finis par une structure de donnĂ©es nommĂ©e Object_Header. Parmi les membres de cette structure figure un pointeur vers une structure Object_Type nommĂ©e Type. Pour dĂ©terminer quelles sont la valeur que doit prendre ce Type, l'auteur propose d'effectuer pour chaque version diffĂ©rente du systĂšme une rĂ©cupĂ©ration des valeurs associĂ©es Ă deux Object_Type nommĂ© PsProcessType et PsThreadType. Ces deux Object_Type sont les valeurs associĂ©es respectivement Ă un objet de type processus et Ă un objet de type thread. L'auteur dĂ©finit une liste de rĂšgle ou signature qui spĂ©cifie comment ces structures (et d'autres comme Dispatcher_Header, Eprocess, Ethread ou encore Pool_Header) sont organisĂ©es entre elles, Ă quels endroits elles peuvent ĂȘtre trouvĂ©es grĂące Ă un total de 20 rĂšgles. L'analyse de l'image mĂ©moire proposĂ© lors du challenge de 2005 a permis de confirmer que ce type d'analyse via des rĂšgles est fiable en rĂ©cupĂ©rant la mĂȘme liste des processus que le vainqueur du challenge. Le programme utilisĂ© pour effectuer cette analyse est PTFinder (pour Process and Thread Finder). Il a Ă©galement Ă©tĂ© rĂ©cupĂ©rĂ© plusieurs processus non dĂ©tectĂ©s par le programme du vainqueur du challenge car correspondant Ă des programmes anciens prĂ©cĂ©dant un redĂ©marrage de la machine sur laquelle a Ă©tĂ© acquis l'image mĂ©moire. Les structures de donnĂ©es de ces processus ont persistĂ© aprĂšs le redĂ©marrage dans la mĂ©moire acquise[30].
Pool Scanning
Sur les systĂšmes d'exploitation Windows, le gestionnaire de mĂ©moire (Memory Manager) est chargĂ© d'attribuer la mĂ©moire pour les applications utilisateurs mais aussi pour les structures de donnĂ©es internes au systĂšme. Du fait de leur importance pour le bon fonctionnement du systĂšme, ces structures de donnĂ©es sont allouĂ©es dans des sections mĂ©moires similaires Ă des tas (heap) appelĂ©es pools d'allocation non paginable. Il existe deux types de pool d'allocation, le pool paginable et non paginable. Le pool non paginable est un ensemble de pages qui restent dans la mĂ©moire et ne peuvent ĂȘtre paginĂ©es sur un support de stockage persistant. Le gestionnaire de mĂ©moire prĂ©fixe chacune des allocations avec une structure de donnĂ©es Pool_Header. Dans cette structure de donnĂ©es est dĂ©fini le type pool utilisĂ© (paginable ou non paginable) ainsi qu'un pool tag. Le pool tag est utilisĂ© pour spĂ©cifier quelle est le type de structure de donnĂ©es sous-jacent Ă l'allocation. Le pool tag est reprĂ©sentĂ© sur 4 octets correspondant Ă des caractĂšres ASCII bien spĂ©cifiques en fonction de la structure de donnĂ©es allouĂ©e. Parmi les pool tags du systĂšme, on peut trouver celui des processus, des thread mais aussi celui des connexions actives[31].
Le pool Scanning est une technique et parcourt linĂ©airement le fichier image de la mĂ©moire pour trouver des pool des structures de donnĂ©es recherchĂ©es. De la mĂȘme maniĂšre que pour la rechercher via signature, il est nĂ©cessaire de spĂ©cifier plusieurs rĂšgles pour Ă©carter au maximum les faux positifs[31].
Extraction des connexions actives
Le pool tag utilisé pour la technique du pool scanning peut également servir par exemple à extraire la liste des connexions réseaux actives sur un systÚme Windows (Windows 7 64bits dans notre cas). L'extraction repose sur la recherche d'une chaßne de caractÚres 'TcpETcpE, puis à l'ajout d'un offset depuis l'adresse retournée pour récupérer une adresse virtuelle. La translation de cette adresse virtuelle vers une adresse physique permet de récupérer la base de la structure de données représentant une structure nommée Tcp_Endpoint ou TCB. Un des membres de cette structure est une liste doublement chainée qui parcours l'ensemble des structures TCB associées aux connexions actives[32].
Framework d'analyse d'image mémoire
Une des difficultĂ©s rencontrĂ©es lors d'analyse d'image mĂ©moire est la complexitĂ© des donnĂ©es acquises. Sur un systĂšme multitĂąche classique, un espace d'adressage physique contient frĂ©quemment du code machine, des donnĂ©es initialisĂ©es ou non, et des structures de donnĂ©es spĂ©cifiques Ă une architecture logicielle pour une multitude de programmes diffĂ©rents. De plus plusieurs processeurs supportent la virtualisation de la mĂ©moire, oĂč chaque programme ou systĂšme d'exploitation peut avoir une vision diffĂ©rente de l'espace dâadressage. Par exemple, la famille de microprocesseurs x386 propose deux types de virtualisation de la mĂ©moire, la pagination et la segmentation. Des parties de l'espace d'adressage virtuel peuvent se trouver dans la mĂ©moire physique, sur disque, ou peuvent ne pas exister du tout. De plus, suivant l'implĂ©mentation de chacun, les programmes peuvent s'organiser de maniĂšre quasi-alĂ©atoire. Les diffĂ©rences de langages de programmation, de compilateurs, d'API (Application Programming Interface), des bibliothĂšques systĂšmes rendent chaque systĂšme sensiblement diffĂ©rent. La moindre modification de l'organisation de l'image mĂ©moire Ă la suite d'une modification lors d'une de ces Ă©tapes peut empĂȘcher un systĂšme d'analyse mĂ©moire de fonctionner. L'outil d'analyse doit donc ĂȘtre redĂ©fini peut-ĂȘtre mĂȘme entiĂšrement pour permettre le fonctionnement sur la nouvelle version du systĂšme[33].
Framework FATKit
Par consĂ©quent, le besoin d'un framework stable Ă partir duquel il n'est plus nĂ©cessaire de redĂ©finir toute cette chaĂźne de dĂ©pendance pour le rendre compatible avec une nouvelle version d'un systĂšme se fait ressentir. Dans cette optique, FATKit est dĂ©veloppĂ© avec l'idĂ©e d'apporter une abstraction des systĂšmes ciblĂ©s. Ainsi sont dĂ©finis diverses fonctionnalitĂ©s pour chaque niveau d'abstraction parmi lesquelles on peut trouver la mĂ©moire physique, la mĂ©moire virtuelle ou les structures de donnĂ©es propre Ă une application. FATKit est framework modulaire qui dĂ©finit des abstractions initiales qu'il est possible d'Ă©tendre via d'autre modules d'abstractions dĂ©finissant d'autres types de systĂšmes. Lâarchitecture du framework se compose de[34] :
- la classe AddressSpace utilisée comme base pour l'implémentation de modules d'espace d'adressage supporté par un processeur ;
- d'objets et de profils dĂ©finissant les types de donnĂ©es qui peuvent ĂȘtre trouvĂ©es Ă un certain espace dâadressage ainsi que leur reprĂ©sentation pour une certaine version d'un systĂšme (en fonction d'un programme, d'un langage, ou d'une architecture) ;
- de modules de vue des donnĂ©es qui ne dĂ©finissent pas comment les donnĂ©es sont organisĂ©es mais plutĂŽt oĂč sont-elles situĂ©es ;
- de modules d'analyse des données permettant d'automatiser certaines tùches en se basant sur les données récupérées depuis le modÚle de vue ;
- et de modules de visualisation dont l'unique but de présenter le résultat depuis le module d'analyse[34].
Génération automatique de profils
Il est possible de gĂ©nĂ©rer le modules des objets et profiles automatiquement Ă condition de disposer du code source C d'un programme Ă l'aide d'une fusion (merger) de code source C et d'un gĂ©nĂ©rateur de profils. Le profil gĂ©nĂ©rĂ© peut ĂȘtre inclus dans le framework et peut ĂȘtre utilisĂ© dĂšs lors[35].
Notes et références
- Digital Forensic Research Workshop 2005
- Schatz et Cohen 2017, p. 1
- Case et Richard III 2017, p. 23
- RFC3227
- Vömel et Freiling 2012, p. 125
- Gruhn et Freiling 2016, p. S1
- Halderman et al. 2016, p. 93
- Halderman et al. 2016, p. 93-94
- Bauer, Gruhn et Freiling 2016, p. S67
- Bauer, Gruhn et Freiling 2016, p. S74
- Yitbarek et al. 2017, p. 323
- Carrier et Grand 2004, p. 59
- Carrier et Grand 2004, p. 55
- Mcdown et al. 2016, p. 111
- Carrier et Grand 2004, p. 52-53
- Fmem
- LiME
- Sylve et al. 2012, p. 176
- Schuster 2006, p. 10
- Vömel et StĂŒttgen 2013, p. 33
- Vömel et Freiling 2012, p. 130-133
- ManTech Memory DD
- WinPMEM
- DumpIt
- https://qemu.weilnetz.de/doc/qemu-doc.html#Commands
- https://www.virtualbox.org/manual/ch08.html#vboxmanage-debugvm
- Case et Richard III 2017, p. 28
- Schuster 2006, p. 11
- Ruichao, Lianhai et Shuhui 2009, p. 667
- Schuster 2006, p. 14
- Sylve, Marziale et Richard 2016, p. s27
- Jaina et al. 2016, p. 2
- Petroni et al. 2006, p. 198-199
- Petroni et al. 2006, p. 200-202
- Petroni et al. 2006, p. 202-203
Bibliographie
- (en) Bradley Schatz et Michael Cohen, « Advances in volatile memory forensics », Digital Investigation, vol. 20,â , p. 1 (ISSN 1742-2876, DOI 10.1016/j.diin.2017.02.008)
- (en) Andrew Case et Golden G. Richard III, « Memory forensics: The path forward », Digital Investigation, vol. 20,â , p. 23-33 (ISSN 1742-2876, DOI 10.1016/j.diin.2016.12.004)
- (en) Stefan Vömel et Felix C. Freiling, « Correctness, atomicity, and integrity: Defining criteria for forensically-sound memory acquisition », Digital Investigation, vol. 9, no 2,â , p. 125-137 (ISSN 1742-2876, DOI 10.1016/j.diin.2012.04.005)
- (en) Michael Gruhn et Felix C. Freiling, « Evaluating atomicity, and integrity of correct memory acquisition methods », Digital Investigation, vol. 19, no 2,â , S1-S10 (ISSN 1742-2876, DOI 10.1016/j.diin.2016.01.003)DFRWS 2016 Europe â Proceedings of the Third Annual DFRWS Europe
- (en) J. Alex Halderman, Seth D. Schoen, Nadia Heninger, William Clarkson, William Paul, Edward W. Felten, Joseph A. Calandrino, Ariel J. Feldman et Jacob Appelbaum, « Lest we remember: cold-boot attacks on encryption keys », Communications of the ACM, vol. 52, no 5,â , p. 91-98 (DOI 10.1145/1506409.1506429)
- (en) Johannes Bauer, Michael Gruhn et Felix C. Freiling, « Lest we forget: Cold-boot attacks on scrambled DDR3 memory », Digital Investigation, vol. 16,â , S65-S74 (DOI 10.1016/j.diin.2016.01.009)
- (en) Sylve Joe T., Marziale Vico et Richard Golden G., « Pool tag quick scanning for windows memory analysis », Digital Investigation, vol. 16,â , S25-S32 (DOI 10.1016/j.diin.2016.01.005)
- (en) Zhang Ruichao, Wang Lianhai et Zhang Shuhui, « Windows Memory Analysis Based on KPCR », Fifth International Conference on Information Assurance and Security, vol. 2,â , p. 667-680 (DOI 10.1109/IAS.2009.103)
- (en) Nick Petroni, Aaron Walters, Timothy Fraser et William A. Arbaugh, « FATKit: A framework for the extraction and analysis of digital forensic data from volatile system memory », Digital Investigation, vol. 3,â , p. 197-210 (e-ISSN 1742-2876, DOI 10.1016/j.diin.2006.10.001)
- (en) Salessawi Ferede Yitbarek, Misiker Tadesse Aga, Reetuparna Das et Todd Austin, « Cold Boot Attacks are Still Hot: Security Analysis of Memory Scramblers in Modern Processors », IEEE Conference Publications,â , p. 313-324 (ISBN 978-1-5090-4985-1, e-ISSN 2378-203X, DOI 10.1109/HPCA.2017.10)
- (en) Brian D. Carrier et Joe Grand, « A hardware-based memory acquisition procedure for digital investigations », Digital Investigation, vol. 1, no 1,â , p. 50-60 (DOI 10.1016/j.diin.2003.12.001)
- (en) Robert J. Mcdown, Cihan Varol, Leonardo Carvajal et Lei Chen, « InâDepth Analysis of Computer Memory Acquisition Software for Forensic Purposes », Journal of Forensics Science, vol. 61,â , p. 110-116 (ISSN 0022-1198, e-ISSN 1556-4029, DOI 10.1111/1556-4029.12979)
- (en) Joe Sylve, Andrew Case, Lodovico Marziale et Golden G. Richard, « Acquisition and analysis of volatile memory from android devices », Digital investigation, vol. 8,â , p. 175-184 (ISSN 1742-2876, DOI 10.1016/j.diin.2011.10.003)
- (en) Stefan Vömel et Johannes StĂŒttgen, « An evaluation platform for forensic memory acquisition software », Digital investigation, vol. 10,â , S30-S40 (ISSN 1742-2876, DOI 10.1016/j.diin.2013.06.004)
- (en) Stefan Vömel et Felix C. Freiling, « Correctness, atomicity, and integrity: Defining criteria for forensically-sound memory acquisition », Digital investigation, vol. 9, no 2,â , S125-137 (ISSN 1742-2876, DOI 10.1016/j.diin.2012.04.005)
- (en) J Jaina, G S Suma, S Dija et K L Thomas, « Extracting network connections from Windows 7 64-bit physical memory », IEEE International Conference on Computational Intelligence and Computing Research, Madurai, India,â , p. 1-4 (ISBN 978-1-4799-7848-9 et 978-1-4799-7847-2, DOI 10.1109/ICCIC.2015.7435745).
- (en) Andreas Schuster, « Searching for processes and threads in Microsoft Windows memory dumps », Elsevier Digital Investigation, Deutsche Telekom AG, Friedrich-Ebert-Allee 140, D-53113 Bonn, Germany, vol. 3,â , p. 10-16 (ISSN 1742-2876, DOI 10.1016/j.diin.2006.06.010).