EVENT_05 - Forensique

Date : 15/01/2020 - 17h30

Présentation : disponible ici

À télécharger:


Menu


Analyse forensique


Une analyse forensique est divisée en plusieurs étapes.

La première étape est l’acquisition des données à traiter. Par exemple, si nous devons analyser une clé USB ou un disque dur, nous allons réaliser plusieurs copies de ce dernier dans ce que l’on appelle des dumps, un dump contient les informations à un instant t.

Cette phase de dump ne doit aucunement, altérer les données, pour s’assurer de cela, on réalise tout d’abord un hash (empreinte numérique) des données originales, puis des hashs des copies que nous avons réalisées. Ces derniers doivent être identiques au premier.

À partir de ces données, nous allons passer à la phase d’analyse, nous allons commencer à rechercher des données, des informations ou bien des comportements dans le dump.

Pour terminer, nous faisons un reporting de ce que nous avons trouvé.

Quelques exemples d’outils:

  • dd
  • binwalk
  • exiftool
  • foremost
  • testdisk
  • photorect
  • Volatility

Forensique en CTF


Les épreuves forensiques en CTF se concentrent sur les étapes de parcours et d’analyse des données. Les données à traiter proviennent souvent de partitions de clés USB, ou de disques durs. On trouve également beaucoup de dump de RAM (mémoire vive) à analyser, ces dump proviennent pour la plupart de système Windows et Linux. Nous allons utiliser la framework Volatility pour travailler sur ces derniers.


Volatility


The Volatility Framework is a completely open collection of tools, implemented in Python under the GNU General Public License, for the extraction of digital artifacts from volatile memory (RAM) samples. GitHub

C’est l’outil le plus utilisé pour l’analyse de dump de mémoire RAM. Il supporte les principaux systèmes d’exploitation (Windows, Linux, macOS).

Notion de profil

Avant de commencer à travailler avec de dernier, il est important de comprendre la notion de profil Volatility.

Pour être capable d’analyser un dump de RAM il est nécessaire de fournir à Volatility ce que l’on appelle un profil. Ce dernier permet à Volatility de comprendre l’organisation de la mémoire du dump (structure de données, algorithmes et symboles à utiliser).

Profil Linux

Si vous devez analyser un dump RAM provenant d’un système Linux, il y a de forte chance que vous devrez créer vous-même un profil pour votre dump. Les étapes sont détaillées dans le wiki.

En résumé: un profil est lié à une version précise d’un kernel, si par exemple votre dump provient d’une machine sous Ubuntu 16.04 qui tournait avec noyau version X.y.z, alors pour créer votre profil, vous devrez faire une VM sous Ubuntu 16.04 et y installer le noyau avec la version exacte X.y.z. Vous devez ensuite suivre les procédures du wiki pour créer votre profil.

Profil Windows

Pour les dumps provenant d’une machine Windows, il n’est pas nécessaire de créer un profil pour chaque dump. Volatility contient déjà des profils par défaut. Mais si la création de profil Windows vous chante, vous pouvez consulter le wiki.

Analyse de dumps Linux

Partons du principe que Ubuntu.zip est un profil Volatility que nous avons crée contenant le profil LinuxUbuntux64.

$ mkdir plug
$ mv Ubuntu.zip plug/
$ python vol.py --plugins=plug/ --profile=LinuxUbuntux64 -f ubuntu.raw linux_bash

Pour utiliser ce profil, nous allons le mettre dans un dossier, ici plug/, puis fournir à Volatility l’option --plugins. Cette dernière va indiquer à Volatility d’aller chercher des profils dans plug/.

$ python vol.py --plugins=plug/ --info | grep -i 'Ubuntu'
...
LinuxUbuntux64        - A Profile for Linux Ubuntu x64
...

Voici une manière de s’assurer que notre profil est bien disponible.

On vous conseille fortement d’utiliser cette page de wiki qui donne plus de détails sur les plugins. Ces derniers sont aussi classés par catégories, ce qui permet de ne pas (trop) se perdre.

Analyse de dumps Windows

Lister les profils

Comme expliqué précédemment, l’analyse d’un dump Windows ne nécessite pas forcément la création d’un profil. Il en existe déjà de nombreux directement inclus dans Volatility.

$ vol.py --info | grep -i win
...
VistaSP0x64           - A Profile for Windows Vista SP0 x64
Win10x64_10586        - A Profile for Windows 10 x64 (10.0.10586.306 / 2016-04-23)
Win7SP1x64            - A Profile for Windows 7 SP1 x64
Win7SP1x64_23418      - A Profile for Windows 7 SP1 x64 (6.1.7601.23418 / 2016-04-09)
...

On peut lister les profiles déjà présents dans Volatility avec l’option --info et on filtre pour n’avoir que les profils Windows.

Obtenir le profile d’un dump

imageinfo - Identify information for the image

$ vol.py -f windows.raw imageinfo
    Volatility Foundation Volatility Framework 2.6
    Determining profile based on KDBG search...
    
              Suggested Profile(s) : Win2008R2SP0x64, Win7SP1x64, Win7SP0x64, Win2008R2SP1x64 (Instantiated with Win7SP0x64)
                         AS Layer1 : AMD64PagedMemory (Kernel AS)
                         AS Layer2 : FileAddressSpace (/Path/to/WIN-II7VOJTUNGL-20120324-193051.raw)
                          PAE type : PAE
                               DTB : 0x187000L
                              KDBG : 0xf800016460a0
              Number of Processors : 1
         Image Type (Service Pack) : 1
                    KPCR for CPU 0 : 0xfffff80001647d00L
                 KUSER_SHARED_DATA : 0xfffff78000000000L
               Image date and time : 2012-03-24 19:30:53 UTC+0000
         Image local date and time : 2012-03-25 03:30:53 +0800

On peut voir que Volatility nous conseille par exemple le profile Win2008R2SP0x64.

Analyse du dump

Voici un exemple de commande:

filescan - Pool scanner for file objects

$ vol.py -f windows.raw --profile=Win2008R2SP0x64 filescan

Cette dernière va utiliser le plugin filescan, ce plugin va lister tous les fichiers qui se trouvaient dans la RAM au moment du dump.

netscan - Scan a Vista (or later) image for connections and sockets

$ vol.py -f windows.raw --profile=Win2008R2SP0x64 netscan

Cette autre commande va nous lister tous les sockets actifs au moment du dump de la mémoire RAM.

Vous pouvez utiliser tous les plugins qui sont présentés sur le page GitHub de Volatility.

Les plugins qui sont préfixés par linux_XXXX ou mac_XXXX ne sont pas fait pour être utilisés sur un dump Windows ;)

On vous conseille fortement d’utiliser cette page de wiki qui donne plus de détails sur les plugins. Ces derniers sont aussi classés par catégories, ce qui permet de ne pas (trop) se perdre.