GreHack 2017 – Solution Forensic 400

CERT-DVT Writeups

1 Introduction

GreHack est un événement français sur le thème de la sécurité informatique. C’était la 4ième édition le 17 novembre 2017.

https://grehack.fr/

Après la journée du vendredi consacrée à des conférences, un CTF était organisé la nuit, de 21h30 à 6h00 du matin. Près de 53 équipes ont pu plancher sur environ 35 challenges de sécurité dans différents sujets : Steganography, Reverse, Web, Hardware, Crypto, Network, Exploit, Forensic et babyfoot (ye!).
Cet article présente une solution pour le challenge forensic le plus difficile, que nous avons créé pour l’occasion. Tout retour constructif sur cette épreuve est le bienvenu.

2 Description du challenge

Title : Inception
Authors : iggy & olivier (idea)
Category : Forensic
Points : 400
File : chall.zip (220M, 1G decompressed)
Validation : 1
Description:
Securimag team had extract the laptop memory of a villain student.
We only known a couple of things :
_ He probably use an up to date Kali-Light distro
_ He use a malicious file to compromise their victims
Could you find and analyze this file from the dump ?

3 Linux volatility profile

Ok, qu’avons-nous ici ? La command ‘file’ ne nous aide pas beaucoup :

Nous savons, avec la description, que vilain utilisait une Kali-Ligh Linux. Nous utilisons un simple ‘strings’ pour récupérer de quelle version exact il sagit :
L’analyse de mémoire Linux est un peu plus compliqué au premier abord, car la plupart des profiles volatility de base ne fonctionnent pas. Il faut donc, dans un premier temps, créer le bon profile. Pas besoin d’expliquer en détail, Olivier à déjà écrit un article sur le sujet :

https://www.cert-devoteam.fr/qualifications-ndh-solution-de-lepreuve-bender-bending-rodriguez/

Pour résumer :
_ installation d’une Kali-light 4.12 dans un VM
_ mise à jour en 4.13
_ création du profile volatility comme suivant :

 apt install dwarfdump
 apt install linux-image-4.13.0-kali1-amd64
 apt install linux-header-adm64
 apt install volatility-tools
 apt install make zip
 cd /usr/src/volatility/tools/linux
 make
 zip /tmp/kali4.13.zip module.dwarf /boot/System.map-4.13.0-kali1-amd64

Le fichier kali4.13.zip est notre profile volatility pour ce challenge. Pour l’utiliser, il suffit de le copier dans le répertoire volatility/plugins/overlays/linux/.

Ok maintenant nous pouvons jouer.

4 Le fichier malveillant

En utilisant le module linux_bash, plusieurs informations importantes sont mises en avant :

Vilain va dans le répertoire « Victims », puis affiche le contenu de todo_payload.txt.
Puis il se déplace dans « Dumps », et télécharge, en mode récursif, quelque chose depuis http://amstrad-fans.com.
Il retourne dans son ‘Home directory’, édite son .bashrc et le recharge.
Enfin, il exécute plusieurs commandes volatility.
Ok, donc beaucoup de choses ici. Nous allons commencer avec le fichier todo_payload.txt.
Comme vilain l’a affiché dans un terminal avec la command ‘cat’, peut-être qu’un simple strings pourrait récupérer le contenu :

En allant sur l’url pastebin, nous recevons un message comme quoi le code source n’est plus ici.
Cependant, nous avons probablement trouvé le nom du fichier malveillant : Nude_Admstrad_CPC_6128_Emulator.exe
En revanche, la récupération du fichier, avec le module ‘linux_find_file’ ne donne rien, car le binaire n’est pas dans le dump.

5 http://amstrad-fans.com

Maintenant, nous allons regarder le site web http://amstrad-fans.com.
Il existe. C’était un site hébergé en local, seulement accessible par les joueurs du CTF.
Mais il ne révèle rien de particulier. La page d’accueil se résume à une image d’une disquette.
Pour en savoir plus, nous allons utiliser… encore strings :

De l’offset 1490b268 à 1490b768, cela ressemble à des entrées d’EventLog Windows, où un utilisateur administrator aurait téléchargé le fichier malveillant.
Malheureusement le fichier n’est plus présent :
http://amstrad-fans.com/Nude_Amstrad_CPC_6128_Emulator.exe retourne une erreur 404…
Ceci est probablement l’ouput de la commande wget lancé par l’utilisateur. Nous y retrouvons les chemins complets vers des fichiers .dmp.

http://amstrad-fans.com/d41d8cd98f00b204e9800998ecf8427e/1510100407.dmp
http://amstrad-fans.com/5429f4e508af61b71565164b66196825/1509300346.dmp
http://amstrad-fans.com/7bda79af8fdbef3eed0cc6de1b92d64e/1510359726.dmp

Pour savoir sur quel fichier vilain était en train de travailler, l’historique des commandes nous aide.
L’utilisateur modifie son .bashrc, puis utilise volatility sans l’option ‘-f’ qui permet de préciser le chemin du fichier à analyser. Cela voudrait dire qu’il a probablement fixé la variable d’environnement VOLATILITY_LOCATION :

Ok, donc le bon fichier est : http://amstrad-fans.com/7bda79af8fdbef3eed0cc6de1b92d64e/1510359726.dmp
Sauf si vous aimez les Teletubbies ou la Hardtek, les deux autres fichiers ne sont pas intéressants.

 

6 Analyse du dump Windows

Donc maintenant nous avons un deuxième dump mémoire, cette fois-ci depuis la machine windows d’une ‘Victims’.
L’analyse est très classique, surtout que nous avons le profil à utiliser dans le résultat du psenv.


Bingo, le dump a été effectué pendant l’exécution du fichier malveillant. Nous pouvons donc le récupérer pour analyse. Avec les commandes suivantes :


7 Etude du fichier malveillant

C’est un PE :
Une étude rapide montre que le contenu est xoré avec une clé codé en dur :

La clé est : 0x797872a552B3B0BB
Pour continuer, il suffit donc de xorer le contenu du fichier extrait, avec cette clé en commençant à « rax+0x27 », soit +0x1827 depuis le début du fichier lui-même : Nous pouvons maintenant étudier le contenu du binaire. C’est un meterpreter.
Le todo_payload.txt demandait à modifier une url pour y mettre celui d’un CC.
Un classique strings grep sur « flag », « http » ou « gh17{ » (le format de flag), faisait remonter une url :

8 Récupération du flag

Nous pouvons utiliser volatility une dernière fois pour récupérer le fichier c:\windows\mob.bin :


Finalement… le flag :

 

Yvan Genuer