
Cosa Nostra, un toolkit FOSS basato su grafi per la clusterizzazione di malware.
Cosa Nostra è un toolkit software open source per il clustering con un focus sull'analisi malware. Può creare alberi filogenetici di campioni binari malware strutturalmente simili. È stato rilasciato inizialmente durante SyScan360 Shanghai (2016).
Fondamentalmente lo mantengo dal 2016 per il mio unico e solo utente, che tra l'altro è un amico... Beh.
Per utilizzare Cosa Nostra avrai bisogno di una versione di Python 3.X e di uno dei seguenti strumenti per eseguire l'analisi del codice:
Una volta installato uno degli strumenti menzionati, dovrai utilizzare lo strumento batch appropriato per analizzare i campioni malware, come nell'esempio seguente:
$ cd $COSA_NOSTRA_DIR
$ /path/to/ida64 -B -A -S/full/path/to/ida_batch.py example.exe
Oppure
$ cd $COSA_NOSTRA_DIR
$ python r2_batch.py example.exe
Il modo più semplice per analizzare un dataset di malware è eseguire un comando come il seguente esempio:
$ find /your/malware/dataset/path -type f -exec python r2_batch.py {} ';'
Può essere fatto in parallelo utilizzando lo strumento "GNU Parallel", come nell'esempio seguente:
$ find /your/malware/dataset/path -type f | parallel -j 8 ida64 -B -A -S/path/to/ida_batch.py {}
Nell'esempio sopra, verranno lanciati in totale 8 processi pyew_batch in parallelo.
Dopo che i campioni malware sono stati analizzati, se l'analisi è riuscita, i dati del grafo di chiamata per ogni campione verranno memorizzati, per impostazione predefinita, in un database SQLite chiamato "db.sqlite". Puoi configurare il nome del database, il percorso, il sistema di database, ecc... modificando il file $COSA_NOSTRA_DIR/, come mostrato di seguito:
$ cat config.cfg
########################################################################
# Configuration for SQLite3
########################################################################
[database]
dbn=sqlite
# Database name
db=db.sqlite
Se preferisci utilizzare, ad esempio, un sistema di database MySQL, puoi configurarlo in config.cfg inserendo le seguenti sezioni di configurazione con i valori appropriati per la tua configurazione:
########################################################################
# 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
Questo è il passaggio che richiederà più tempo. Una volta che hai analizzato tutti i campioni malware dei tuoi dataset e le firme dei grafi di chiamata, i corrispondenti numeri primi, ecc... sono stati calcolati e memorizzati nel database, il passo successivo è trovare i cluster. Lo strumento per farlo si chiama "cn_clusterer.py". Utilizzerà lo stesso file di configurazione del database ($COSA_NOSTRA_DIR/config.cfg) per estrarre le firme dei grafi di chiamata dei campioni analizzati. Eseguirlo è semplice come fare quanto segue:
$ 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
Quando il processo termina, i cluster che raggruppano i campioni malware analizzati verranno creati nel database specificato.
L'ultimo passo è avviare l'applicazione Web basata su web.py e accedere:
$ cd $COSA_NOSTRA_DIR
$ python cosa_nostra.py [optional port to listen to]
http://0.0.0.0:YOURPORT/
Quindi, apri un browser e naviga all'indirizzo stampato da cosa_nostra.py. Verrà visualizzato un modulo di login che richiede nome utente e password. Per impostazione predefinita, è "admin/cosanostra". Puoi cambiarlo nel file $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"
(...)
Una volta effettuato l'accesso, puoi selezionare dal pannello sinistro una delle seguenti opzioni:
Nella vista "Clusters", è possibile selezionare diversi cluster e visualizzare un grafico gerarchico della famiglia di malware scoperta.
Elenco dei cluster come mostrato in Cosa Nostra:

Un piccolo cluster di Trojan.Backspace-1 (nome dato da ClamAV):

Un piccolo cluster di MiniDukes:

Un cluster di Kazy/Bifroses:

Una piccola parte di un cluster veramente grande di FannyWorms:
