SSTIC 2012 - NetZob

par George Bossert, Frédéric Guihéry et Guillaume Hiet.

Netzob est un outil d’analyse et de reverse de protocoles de communications.

Une fois le protocole modélisé, il est possible d’effectuer de la génération de traffic réaliste, ou du fuzzing à partir du modèle. Il est aussi possible d’effectuer de la rétroconception pour analyser le flux à la recherche de fuites d’informations, etc…

Le reverse d’un protocole de communication est un vrai cauchemar, et la communauté est démunie dans le domaine. C’est pour ça que NetZob à été créé.

Deux techniques peuvent être employées pour le reverse d’un protocole de communication. Soit on infère le comportement à partir des messages, soit on analyse le code du binaire utilisant le protocole.

Le problème dans le reverse d’un protocole réseau, c’est l’encapsulation en chaine des différentes couches réseaux (http over ipv4 over ethernet, etc…). Il faut aussi gérer les dépendances intra-messages, inter-messages afin de pouvoir maintenir la cohérence de l’échange (ex: n° de séquence TCP). Tout ceci doit être exprimé dans la grammaire du protocole. Relation entre symboles d’entrée et de sortie,  probabilité d’émission pour chaque symbole, plusieurs symboles de sortie pour un seul symbole d’entrée.

« Machine de Mealy Stochastique à Transitions Déterministes »  c’est le nom de ce qu’utilisent les auteurs pour la modélisation de leur protocole. Bien sûr, c’est pas le tout d’avoir une grammaire permettant d’exprimer n’importe quel protocole, il faut maintenant inférer le modèle à partir des données disponibles.

Il faut donc abstraire les différents champs découverts sous forme de symboles, et identifier les dépendances. On obtient donc un vocabulaire représentant les formats des différents messages. 

Les messages sont regroupés par une technique de clustering issue de la bioinformatique. Puis par itération d’implémentation de l’automate dans une sandbox, et en réalisant une série de tests, l’automate est rafiné. Puis une dernière phase ajoute les élèment non-déterministes (cf les actes…).

Globalement, l’outil part d’un import de données (capture réseau, fichier pcap, flux ipc, xml, flux structurés tel que des échanges d’api, rest etc…). Puis les données sont passées au moteur d’inférence. Suite à l’inférence, il est possible de simuler un client, un serveur ou de faire du fuzzing. Le modèle est exportable au format XML, texte et bientôt Scapy (NDLR: qui est maintenant documenté 🙂 ).

Les auteurs nous font une démo de l’outil en vidéo (c’est plus sûr). Netzob retrouve bien le protocole ip 🙂 dans la première démo.  La seconde vidéo passe en vitesse x2. Il s’agit de l’analyse d’un vieux botnet (SDBOT). La vidéo montre comment l’analyste reverse le protocole du botnet par itération successives. Ainsi, cette analyse manuelle couplée au moteur d’inférence permet à l’analyse de construire un modèle plus précis. Netzob permet de simuler un serveur et d’y configurer un vrai client (avec des options de restart pour gérer les itérations de l’apprentissage). Netzob itère dans les diférents messages, et vient relancer le client et le serveur après amélioration du modèle.

L’analyse peut prendre quelques heures, mais ça fonctionne et c’est déjà énorme 😀

L’équipe de NetZob est ouverte aux features requests !!!!