Challenge Volatility
Responsable : Jp Gelas
Objectif : Analyser un dump mémoire d'un système Ubuntu suspect.
Préambule
Pour réaliser ce TP nous aurons besoin de l'outil Volatility 2. Notez qu'il existe une version 3 de Volatility beaucoup plus rapide mais qui n'offre pas à ce jour le même nombre de plugins/fonctionnalités que Volatility 2.
Tutoriel d'installation de Volatility
Nous avons fait pour vous un dump mémoire de la machine suspecte avec l'outil avml de Microsoft. Le fichier est au format Lime supporté par Volatility.
Nous avons également créé pour vous le fichier profile qui permettra à Volatility de correctement parser les données du dump mémoire. A Linux Profile is essentially a zip file with information on the kernel's data structures and debug symbols, used by Volatility to locate critical information and how to parse it once found.
- Télécharger le dump de la RAM dump.mem (md5sum 156cac5da2fde637158a44cb583f2e3b)
- Télécharger le fichier profile de la machine suspecte (md5sum 2782f1b74f44c4b6f1131e3fe1d52709)
Pour vous assurer que le profile est bien pris en compte tapez la commande suivante.
$ vol.py --plugins=. --info | grep -i ubuntu
Volatility Foundation Volatility Framework 2.6.1
LinuxUbuntu_4_15_0-197-generic_profilex64 - A Profile for Linux Ubuntu_4.15.0-88-generic_profile x64
Le format des commandes est généralement le suivant :
$ ./vol.py --plugins=. -f dump.mem --profile=LinuxUbuntu_4_15_0-197-generic_profilex64 linux_COMMANDE
Remarque : Vous pouvez ignorer les messages "Failed to import volatility.plugins..."
Questions
- Déterminez quel était la version précise du système sous Linux en
fonctionnement (
linux_banner) - Déterminez quel était le nombre de processeurs alloué à ce système
(
linux_cpuinfo) - Déterminez quel était l'adresse IPv4 du système en fonctionnement
(
linux_ifconfig) - Déterminez la liste des ports en écoute (
linux_netstat) - Déterminez la liste des addresses IP connectée à la victime (
linux_netstat) L'adresse 134.214.142.198 est celle de la machine utilisée pour se connecter à la victime et faire le dump mémoire (linux_arp). - Parmi toutes les commande se cache un flag au format
UCBL{...}il y a également une commande suspecte nommée meterpreter (linux_bash) - Constatez que cette commande meterpreter apparait bien dans la liste des
processus (
linux_pslist, linux_pstree, linux_psaux) - Sur quel device la racine du systeme de fichiers est montée ?
(
linux_mount) - La commande
linux_dmesgrévèle le chargement d'un module. Quel est son nom ? - Est-ce que ce module apparait ? (
linux_lsmod) linux_hidden_modulesle fait-il apparaitre ? (ignorez resetafter et qni)- A quoi sert la commande
linux_check_modules? linux_moddump -D ./out -b 0xffff...(adresse du module) ne fonctionne pas mais devrait permettre de récupérer le code machine du rootkit pour le désassembler et analyser son fonctionnement avec Ghidra par exemple.- Le processus meterpreter spawn un shell. Dumpez la mémoire de ce shell et
retrouvez les quelques commandes qui ont été saisies (
mv,sudo, ...) (linux_procdump -p PID -D ./out) - Quel est le PID du processus
flagbox? - Si dans un binaire des données sont stockées suite a un malloc, alors les
données sont sur le tas (heap). Déterminez l'adresse du tas (heap) de ce
processus (
linux_proc_maps -p PID) - Dumpez cette zone mémoire avec
linux_dump_map -p PID -s 0x000startaddress -D ./out - Extraire les chaines de caractères lisibles (
string). Quel est le flag ?