Date : 15/01/2020 - 17h30
Présentation : disponible ici
À télécharger:
- dump Windows (2 Go)
- dump Linux (2Go)
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
oumac_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.