
Cosa Nostra, une boîte à outils FOSS de clustérisation de malwares basée sur les graphes.
Cosa Nostra est un toolkit de clustering open source axé sur l'analyse de malwares. Il peut créer des arbres phylogénétiques d'échantillons de malwares binaires structurellement similaires. Il a été initialement présenté lors du SyScan360 Shanghai (2016).
Je le maintiens depuis 2016 pour mon unique utilisateur, qui se trouve être un ami... Eh bien.
Pour utiliser Cosa Nostra, vous aurez besoin d'une version de Python 3.X ainsi que de l'un des outils suivants pour effectuer l'analyse de code :
Une fois que vous avez installé l'un des outils mentionnés précédemment, vous devrez utiliser l'outil batch approprié pour analyser les échantillons de malwares, comme dans l'exemple ci-dessous :
$ cd $COSA_NOSTRA_DIR
$ /path/to/ida64 -B -A -S/full/path/to/ida_batch.py example.exe
Ou
$ cd $COSA_NOSTRA_DIR
$ python r2_batch.py example.exe
La manière la plus simple d'analyser un ensemble de malwares est d'exécuter une commande comme dans l'exemple suivant :
$ find /your/malware/dataset/path -type f -exec python r2_batch.py {} ';'
Cela peut être fait en parallèle en utilisant l'outil « GNU Parallel », comme dans l'exemple suivant :
$ find /your/malware/dataset/path -type f | parallel -j 8 ida64 -B -A -S/path/to/ida_batch.py {}
Dans l'exemple ci-dessus, cela lancera un total de 8 processus pyew_batch en parallèle.
Après l'analyse des échantillons de malwares, si l'analyse a réussi, les données du graphe d'appels pour chaque échantillon seront stockées, par défaut, dans une base de données SQLite nommée « db.sqlite ». Vous pouvez configurer le nom de la base de données, le chemin, le système de base de données, etc... en modifiant le fichier $COSA_NOSTRA_DIR/, comme indiqué ci-dessous :
$ cat config.cfg
########################################################################
# Configuration for SQLite3
########################################################################
[database]
dbn=sqlite
# Database name
db=db.sqlite
Si vous préférez utiliser, par exemple, un système de base de données MySQL, vous pouvez le configurer dans config.cfg en mettant les sections de configuration suivantes avec les valeurs appropriées pour votre installation :
########################################################################
# Example configuration for MySQL
########################################################################
[database]
dbn=mysql
# Database hostname or IP address
host=localhost
# Database name
db=db_name
# Database username
user=username
# Database password
pw=password
C'est l'étape qui prendra le plus de temps. Une fois que vous avez analysé tous les échantillons de malwares de vos ensembles de données et que les signatures de graphes d'appels, les nombres premiers correspondants, etc... sont calculés et stockés dans la base de données, l'étape suivante consiste à trouver des clusters. L'outil pour cela s'appelle « cn_clusterer.py ». Il utilisera le même fichier de configuration de base de données ($COSA_NOSTRA_DIR/config.cfg) pour extraire les signatures de graphes d'appels des échantillons analysés. Son exécution est aussi simple que de faire ce qui suit :
$ cd $COSA_NOSTRA_DIR
$ ./cn_clusterer.py
(...)
Calculating difference matrix for 2357, iteration 5540280 out of 7507600 (4858784 matches, 600144 cache misses)
Calculating difference matrix for 2354, iteration 5543020 out of 7507600 (4861293 matches, 600373 cache misses)
Calculating difference matrix for 471, iteration 5545760 out of 7507600 (4863903 matches, 600373 cache misses)
(...)
Making tree for group with 59 sample(s), iteration 0 out of 256
Making tree for group with 393 sample(s), iteration 1 out of 256
Making tree for group with 1347 sample(s), iteration 2 out of 256
(...)
[Wed Nov 2 13:37:12 2016 2830:140561185462080] Creating unnamed cluster...
[Wed Nov 2 13:37:12 2016 2830:140561185462080] Creating cluster with name u'Win.Trojan.Skylock-4'...
[Wed Nov 2 13:37:12 2016 2830:140561185462080] Creating cluster with name u'Win.Downloader.133181-1'...
[Wed Nov 2 13:37:12 2016 2830:140561185462080] Creating cluster with name u'Win.Trojan.Agent-1213378'...
[Wed Nov 2 13:37:13 2016 2830:140561185462080] Done processing phylogenetic trees!
[Wed Nov 2 13:37:13 2016 2830:140561185462080] Done
Lorsque le processus se termine, des clusters regroupant les échantillons de malwares analysés seront créés dans la base de données spécifiée.
La dernière étape consiste à lancer l'application Web basée sur web.py et à se connecter :
$ cd $COSA_NOSTRA_DIR
$ python cosa_nostra.py [optional port to listen to]
http://0.0.0.0:YOURPORT/
Ensuite, ouvrez un navigateur et accédez à l'adresse affichée par cosa_nostra.py. Un formulaire de connexion s'affichera demandant un nom d'utilisateur et un mot de passe. Par défaut, c'est « admin/cosanostra ». Vous pouvez le modifier dans le fichier $COSA_NOSTRA_DIR/config.py :
$ cat config.py
#!/usr/bin/env python
#-----------------------------------------------------------------------
# Configuration for Cosa Nostra
#-----------------------------------------------------------------------
DEBUG=False
CN_USER="admin"
# SHA1 hash of the password "cosanostra", change to the SHA1 hash of
# whatever password you prefer.
CN_PASS="048920dedfe36c112d74dc8108abb4db5185a918"
(...)
Une fois connecté, vous pouvez sélectionner dans le panneau de gauche l'une des options suivantes :
Dans la vue « Clusters », on peut sélectionner différents clusters et visualiser un graphe hiérarchique de la famille de malwares découverte.
Liste des clusters telle qu'affichée dans Cosa Nostra :

Un petit cluster de Trojan.Backspace-1 (nom donné par ClamAV) :

Un petit cluster de MiniDukes :

Un cluster de Kazy/Bifroses :

Une petite partie d'un très grand cluster de FannyWorms :
