Insomni’Hack : Solution de l’épreuve « The Secr3tMgr Lock »

Olivier Chatail Writeups

Cet article présente la solution à un challenge de sécurité qui été créé pour l’Insomni’Hack 2017.

L’Insomni’Hack est une conférence de sécurité Suisse à Genève qui organise une compétition de type « Capture The Flag » sur site (aussi nommé CTF hors-ligne). https://insomnihack.ch/

L’édition 2017 de la compétition a eu lieu du Vendredi 24 Mars 18h au Samedi 25 3h. Quatre membres de Devoteam étaient parmi les participants.

Le CTF proposait différents types de challenges, des traditionnels web/exploit/forensics au piratage de jeu en ligne.

 

The Secr3tMgr Lock

L’épreuve, dans la catégorie Forensics, consiste à trouver le mot de passe de déverrouillage d’un utilisateur à partir d’un fichier binaire (capture de la RAM du téléphone).

Il a été précisé que le secret à trouver a la forme suivante : INS{xxxxx}.

 

La solution

Après avoir téléchargé et décompressé l’archive, trois fichiers sont identifiés : un binaire, un fichier System.map et un fichier module.dwarf.

Ces deux fichiers nous confirment que le binaire est un dump de RAM, en effet un profil Volatility utilise ces fichiers pour décrire la structure mémoire du dump à analyser.

L’investigation peut donc commencer en récupérant la dernière version de Volatility, à laquelle le profil sera intégré.

Il est aisé de vérifier que le profil a été intégré et est utilisable par Volatility.

 

Parmi les informations récupérables du binaire le système de fichier peut être récupéré avec le plugin linux_recover_filesystem. Les fichiers liés aux secrets de verrouillage peuvent être cherchés :

  • /data/system/gesture.key : contient un hash (sans salt) du motif de déverrouillage graphique
  • /data/system/password.key : contient des hashs (avec salt) du mot de passe de déverrouillage
  • /data/system/device_policies.xml : contient diverses informations sur le mot de passe de déverrouillage
  • /data/data/com.android.providers.settings/databases/settings.db : Base de données SQLite contenant une clé identifiant le salt utilisé pour générer les hashs de mot de passe

 

L’analyse de ces fichiers donne le résultat suivant :

gesture.key : contient le hash da39a3ee5e6b4b0d3255bfef95601890afd80709, qui est le hash pour une chaine de caractères vide… C’est une fausse piste.

password.key : contient une grande chaine de caractère, qui pourrait être la concaténation de deux hashs.

Après quelques recherche sur ce contenu, il s’avère que la chaine est une concaténation du hash SHA1 avec salt (40 premiers octects) et du hash MD5 avec salt (derniers 32 octects).

device_policies.xml : contient une description détaillée du mot de passe qui dans ce cas informe qu’il fait 10 caractères de long, contient 2 caractères spéciaux, 7 lettres (5 minuscules, 2 majuscules) et 1 chiffre.

settings.db : ne contient pas la clé attendue lockscreen.password_salt.

 

 

La quasi totalité des éléments nécessaires est donc réunie, il ne manque que le salt utilisé. Afin de voir si il a été migré vers une autre base de données (version de l’OS différente, Cyanogen ou autre) une recherche aveugle a été lancée sur les autres bases de données du dump mémoire.

Le salt se trouve dans /data/system/locksettings.db.

Il est stocké en tant qu’int64, que l’on converti en hexadécimal pour le calcul du hash.

Avec tous les éléments en main, un bruteforce ciblé peut être lancé avec John The Ripper. Pour optimiser la vitesse de bruteforce, le hash MD5 sera ciblé.

Étant donné que le hash est un MD5 avec salt, il est nécessaire d’utiliser un mode dynamique de JTR. Ces modes décrivent différentes manières de construire un hash.

Dans ce cas il a été découvert que ce hash a été calculé de la manière suivante :

MD5(password+salt)

D’après la documentation de JTR il faut donc utiliser le mode dynamic_1.

Le fichier en entrée est formaté comme suit :

Afin d’utiliser au maximum les options proposées par JTR et les informations de device_policies.xml, le format attendu est décrit par un masque.

Le mot de passe est récupéré en moins d’une minute, ce qui valide l’épreuve.

Merci à toutes les personnes impliquées dans l’organisation et la promotion de l’Insomni’Hack.

 

Olivier CHATAIL