
Cosa Nostra, un kit de herramientas FOSS de clusterización de malware basado en grafos.
Cosa Nostra es un conjunto de herramientas de agrupamiento de software de código abierto centrado en el análisis de malware. Puede crear árboles filogenéticos de muestras de malware binarias que son estructuralmente similares. Fue lanzado inicialmente durante SyScan360 Shanghái (2016).
Básicamente lo mantengo desde 2016 para mi único usuario, que resulta ser un amigo... Bueno.
Para usar Cosa Nostra necesitarás una versión de Python 3.X, así como una de las siguientes herramientas para realizar el análisis de código:
Una vez que hayas instalado cualquiera de las herramientas mencionadas anteriormente, necesitarás usar la herramienta batch adecuada para analizar las muestras de malware, como en el ejemplo a continuación:
$ cd $COSA_NOSTRA_DIR
$ /path/to/ida64 -B -A -S/full/path/to/ida_batch.py example.exe
O
$ cd $COSA_NOSTRA_DIR
$ python r2_batch.py example.exe
La forma más fácil de analizar un conjunto de datos de malware es simplemente ejecutar un comando como el siguiente ejemplo:
$ find /your/malware/dataset/path -type f -exec python r2_batch.py {} ';'
Se puede hacer en paralelo usando la herramienta "GNU Parallel", como en el siguiente ejemplo:
$ find /your/malware/dataset/path -type f | parallel -j 8 ida64 -B -A -S/path/to/ida_batch.py {}
En el ejemplo anterior, se lanzarán un total de 8 procesos pyew_batch en paralelo.
Después de analizar las muestras de malware, si el análisis fue exitoso, los datos del grafo de llamadas para cada muestra se almacenarán, por defecto, en una base de datos SQLite llamada "db.sqlite". Puedes configurar el nombre de la base de datos, la ruta, el sistema de base de datos, etc. editando el archivo $COSA_NOSTRA_DIR/, como se muestra a continuación:
$ cat config.cfg
########################################################################
# Configuration for SQLite3
########################################################################
[database]
dbn=sqlite
# Database name
db=db.sqlite
Si prefieres usar, por ejemplo, un sistema de base de datos MySQL, puedes configurarlo en config.cfg colocando las siguientes secciones de configuración con los valores apropiados para tu entorno:
########################################################################
# 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
Este es el paso que tomará más tiempo. Una vez que hayas analizado todas las muestras de malware de tus conjuntos de datos y las firmas de grafos de llamadas, los números primos correspondientes, etc. estén calculados y almacenados en la base de datos, el siguiente paso es encontrar grupos. La herramienta para hacerlo se llama "cn_clusterer.py". Hará uso del mismo archivo de configuración de base de datos ($COSA_NOSTRA_DIR/config.cfg) para extraer las firmas de grafos de llamadas de las muestras analizadas. Ejecutarlo es tan simple como hacer lo siguiente:
$ 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
Cuando el proceso finaliza, se crean grupos que agrupan las muestras de malware analizadas en la base de datos especificada.
El último paso es lanzar la aplicación web basada en web.py e iniciar sesión:
$ cd $COSA_NOSTRA_DIR
$ python cosa_nostra.py [optional port to listen to]
http://0.0.0.0:YOURPORT/
Luego, abre un navegador y navega a la dirección que muestra cosa_nostra.py. Se mostrará un formulario de inicio de sesión solicitando un nombre de usuario y contraseña. Por defecto, es "admin/cosanostra". Puedes cambiarlo en el archivo $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 vez que hayas iniciado sesión, puedes seleccionar desde el panel izquierdo una de las siguientes opciones:
En la vista "Clusters", se pueden seleccionar diferentes grupos y ver un gráfico jerárquico de la familia de malware descubierta.
Lista de grupos tal como se muestra en Cosa Nostra:

Un pequeño grupo de Trojan.Backspace-1 (nombre según ClamAV):

Un pequeño grupo de MiniDukes:

Un grupo de Kazy/Bifroses:

Una pequeña parte de un grupo realmente grande de FannyWorms:
