Metasploit : en 2017 ça donne quoi ?

0

Nous avons décidé d’accorder quelques articles à un outil qui le vaut bien : Metasploit.

En effet, cet outil est sûrement le « must have » pour tout auditeur en sécurité et il ne cesse de se renouveler. Beaucoup de documentations existent sur le Web concernant cet outil mais peu sont à jour et rentrent vraiment dans le cœur du framework.

Ainsi, voici le plan envisagé en termes d’articles pour cette saga :

  1. Présentation, architecture et roadmap de Metasploit en 2017
  2. Dockerisation et personnalisation de Metasploit
  3. Création et modification d’un module avec Metasploit

Qui es-tu?

« Metasploit Pen Testing Tool », est un projet open-source (sous Licence BSD modifiée) pour la sécurité des systèmes informatiques. Il a pour objectif de fournir des informations sur les vulnérabilités de systèmes informatiques, d’aider à la pénétration et au développement de signatures pour les IDS.

Le plus connu des sous-projets est le Metasploit Framework, un outil pour le développement et l’exécution d’exploits (logiciels permettant d’exploiter à son profit une vulnérabilité) contre une machine distante.

Créé à l’origine en langage de programmation Perl, Metasploit Framework a été complètement réécrit en langage Ruby. Le plus notable est la publication de certains des exploits les plus techniquement sophistiqués auprès du public. C’est un outil très puissant pour les chercheurs en sécurité travaillant sur les potentielles vulnérabilités de systèmes informatiques.

Metasploit peut être utilisé par les administrateurs pour tester la vulnérabilité des systèmes informatiques afin de les protéger, ou par les pirates et les script kiddies (« gamin à script ») à des fins de piratage. Comme la plupart des outils de sécurité informatique, Metasploit peut être utilisé à la fois de manière légale et à la fois pour des activités illégales.

Le fait que Metasploit ait émergé en tant que plate-forme de développement dans la sécurité, a conduit, ces derniers temps, la publication de vulnérabilités logicielles souvent accompagnées d’un module d’exploitation pour Metasploit pour ces dernières, afin de mettre en évidence l’exploitabilité, le risque et les mesures de prévention contre ces bogues particuliers. Metasploit 3.0 (en langage Ruby) a également commencé à inclure des outils de fuzzing, pour découvrir des vulnérabilités de logiciels en premier lieu, plutôt que de simplement être fait pour l’exploitation de celles-ci.

De plus, une des forces de Metasploit est sa capacité à interagir avec d’autres outils comme nmap, sqlmap, John The Ripper, le tout centralisé dans la console du framework.

Et sous le capot alors ?

Architecture de Metasploit

Architecture de Metasploit

Le Framework embarque des bibliothèques qui aident à l’écriture rapide d’exploit, afin de ne pas avoir à se soucier d’écrire du code pour des tâches basiques telles qu’une requête HTTP ou l’encodage d’un payload.

Il y a trois librairies importantes dans le Framework :

  1. Rex – la librairie principale proposant la gestion des sockets, protocoles, transformations du texte, SSL, XOR, Base64, etc…
  2. Msf::Core – fournit une API basique
  3. Msf::Base – fournit une API dite « amie »

Ainsi, pour écrire un module basique, seule la connaissance de l’API de Base est nécessaire.

Comme nous pouvons le voir sur le schéma, MSF est composé de modules, c’est ce qui en fait sa grande force. Les modules peuvent être rechargés sans redémarrage de toute l’application, ce qui est très pratique pour le développement.

Les principaux sont les exploits, définit en tant que modules nécessitant un payload. Si ce n’est pas le cas, alors c’est un module Auxiliaire. Les payloads sont les codes exécutables à distance, c’est la charge active qui s’exécutera si tout se passe bien. Il s’agit d’un shell, d’un reverse TCP ou HTTP, etc…

Les encoders permettent d’effectuer des actions de dissimulation sur un payload (notamment car les antivirus connaissent parfaitement les signatures des payloads Metasploit).

Les nops permettent de garder une payload à une taille fixe : en effet, si nous prenons l’exemple de l’exploitation d’un Buffer Overflow, le payload doit souvent avoir une taille bien spécifique en octets (ni plus ni moins). Ainsi, si le payload initial se retrouve plus petit, on va le « bourrer »  (notion de « padding ») avec des nops pour atteindre la taille souhaitée.

Les post sont les modules de post exploitation, c’est-à-dire qu’ils servent à effectuer une action sur une cible compromise (espionnage, collecte d’informations, etc…).

En cas d’incompréhension sur ces notions, il suffit d’imaginer un missile. Notre missile est composé d’un système de propulsion et de guidage vers sa destination : il s’agit de l’exploit.
Il peut embarquer une charge utile : une charge explosive, une arme chimique, etc… : il s’agit du payload.
Si notre missile n’est pas « capable » d’embarquer une charge utile, c’est un module auxiliaire.
Notre missile peut être détectée par sa signature thermique, on peut tenter de la masquer avec un encodeur.

Ainsi, Metasploit devient un lanceur de missiles sur mesures, avec un catalogue de choix important, permettant de frapper tout adversaire, si celui-ci est sensible à un missile en particulier.

Au niveau du système de fichiers, nous retrouvons les éléments principaux :

Fichier/Dossier Signification
CONTRIBUTING.md Guide sur « Comment contribuer »
data Fichiers éditables et utilisés par Metasploit (wordlists…)
db Fichiers pour la base de données
docker Utilisation avec Docker
docker-compose.yml Fichier Docker compose
documentation Documentation
external Code source et bibliothèques tierces
lib Bibliothèques internes
modules Modules du framework
msfconsole Console
msfd Daemon
msfupdate Mise à jour du framework
msfvenom Générateur de payload (anciennement msfpayload)
plugins Plugins
tools Outils en ligne de commande
Vagrantfile Fichier Vagrant (pour une utilisation en machine virtuelle)

 

Les payloads

Metasploit est devenu un framework incontournable ; sur les sites comme ExploitsDB qui recensent la liste des vulnérabilités, il est très fréquent de trouver déjà le module Metasploit permettant d’exploiter cette vulnérabilité.

Cela est notamment dû à la facilité d’intégration d’un module (c’est un simple fichier Ruby) et au fait que les API pour développer son propre module sont très simples d’utilisation ; dans la plupart des cas, il suffit de repartir d’un module existant et de modifier quelques lignes selon la vulnérabilité trouvée.

Ainsi, la liste des payloads est immense : il y en a pour tous les goûts, les OS (MacOS, BSD, Windows, Linux, Android…) les langages (Java, PHP, Python…).

Post exploitation

Ces modules prennent une session/un shell et permettent d’effectuer des actions diverses et variées : extraction de données, enregistrement de frappes, capture d’écran, etc…

Ces modules sont classés en fonction de leur but. Par exemple, si le module sert à la collecte de données, il va être classé dans la catégorie « gater ». Si il ajoute/modifie/supprime un utilisateur, il sera dans la catégorie « manage ».

Voici la référence des catégories :

Catégorie Description
gather Collecte/énumération/récupération de données
gather/credentials Vol d’informations d’identification (utilisateurs/mots de passe, etc…)
gather/forensics Collecte d’informations forensics
manage Modification/transformation/manipulation du système
recon Reconnaissance et aide à l’identification d’un système, mais pas de vol de données (ce n’est pas la même chose que « gather »)
wlan Tâches relatives aux réseaux sans fils
escalate Cette catégorie est obsolète. Elle était utilisée pour les modules d’élévation de privilèges mais ils ne sont plus considérés comme des modules de « post exploitation » mais comme des modules d’exploitation
capture Écoute/surveillance pour la récupération de données (par exemple les enregistreurs de frappes)

 

Auxiliary

Les modules auxiliaires de Metasploit ne sont pas si différents des exploits, la différence réside uniquement dans l’absence de session à la fin d’une exécution réussie.

Il existe de nombreuses catégories de modules auxiliaires, de la même façon que pour les « post ».

Catégorie Description
admin Modification/altération/manipulation de la machine cible
analyze Initialement prévu pour les modules de forçage de mots de passe qui demandent un temps d’exécution conséquent
client Initialement prévu pour les modules d’ingénierie sociale
dos Déni de service
fuzzers Outils de test de données aléatoires. Les sous répertoires déterminent le protocole
gather Récupération/collecte/énumération de données sur une cible particulière
scanner Tous les modules utilisant de Msf::Auxiliary::Scanner
server Serveurs pour différents protocoles/services

 

Roadmap

L’équipe de Metasploit a prévu des améliorations significatives, surtout au niveau du cœur du produit.

REST

Un des premiers objectifs est de pouvoir exposer sous le format d’une interface REST toutes les commandes nécessaires au fonctionnement du framework. Cela permettra notamment de pouvoir interagir plus facilement avec les autres outils.

De notre point de vue, cela aura un autre avantage, celui de pouvoir plugger sa propre interface Web pour faciliter le reporting. En effet, pour avoir un reporting complet aujourd’hui, il faut obligatoirement souscrire à Metasploit Express ou Pro : l’arrivée de cette interface REST pourrait faire émerger des projets permettant la gestion graphique du framework.

Metasploit Aggregator

Actuellement, la gestion des sessions est faite directement en lien avec le framework. Cela pose quelques problèmes notamment pour le partage de sessions, leur monitoring et leur performance globale.

Ainsi, Metasploit Aggregator est un projet initié cette année pour jouer le rôle de proxy entre la session et les listeners de Metasploit. L’objectif est d’ailleurs de mettre en place des échanges sous forme d’événements.
Cet agrégateur aura ainsi qu’une seule connexion vers le framework ce qui permettra de faire basculer facilement les sessions d’un utilisateur à un autre et d’améliorer les performances globales du framework car celui-ci n’aura pas besoin de créer des threads pour gérer ces sessions.

Mais encore…

En plus de ces changements structurels importants, l’équipe aimerait avancer sur le support iOS et Android ainsi que moderniser ses payloads (notamment sur la partie Windows) et leur génération (pouvoir facilement générer depuis le framework des payloads en C, .NET, Java…).

Voilà pour ce premier article sur la saga Metasploit, à bientôt pour rentrer dans le vif du sujet et de voir comment installer facilement la bête et le personnaliser.

Partagez cet article.

A propos de l'auteur

Responsable du pôle Sécurité chez Zenika, Erik est un véritable passionné d'informatique. Son leimotiv est de remettre la sécurité au centre des projets. Profil Javaiste, il apprécie également les technologies back ainsi que les problématiques de performance et d'optimisation.

Ajouter un commentaire