
Cosa Nostra, um toolkit FOSS de clusterização de malware baseado em grafos.
Cosa Nostra é um kit de ferramentas de clusterização de software de código aberto com foco em análise de malware. Ele pode criar árvores filogenéticas de amostras binárias de malware que são estruturalmente semelhantes. Foi lançado inicialmente durante o SyScan360 Shanghai (2016).
Basicamente, mantenho-o desde 2016 para o meu único e único usuário, que por acaso é um amigo... Bem.
Para usar o Cosa Nostra, você precisará de uma versão do Python 3.X, bem como de uma das seguintes ferramentas para realizar a análise de código:
Depois de instalar qualquer uma das ferramentas mencionadas anteriormente, você precisará usar a ferramenta de lote apropriada para analisar as amostras de malware, como no exemplo abaixo:
$ 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
A maneira mais fácil de analisar um conjunto de dados de malware é simplesmente executar um comando como o exemplo a seguir:
$ find /your/malware/dataset/path -type f -exec python r2_batch.py {} ';'
Isso pode ser feito em paralelo usando a ferramenta "GNU Parallel", como no seguinte exemplo:
$ find /your/malware/dataset/path -type f | parallel -j 8 ida64 -B -A -S/path/to/ida_batch.py {}
No exemplo acima, serão lançados um total de 8 processos pyew_batch em paralelo.
Após a análise das amostras de malware, se a análise for bem-sucedida, os dados do grafo de chamadas para cada amostra serão armazenados, por padrão, em um banco de dados SQLite chamado "db.sqlite". Você pode configurar o nome do banco de dados, caminho, sistema de banco de dados, etc. editando o arquivo $COSA_NOSTRA_DIR/, conforme mostrado abaixo:
$ cat config.cfg
########################################################################
# Configuration for SQLite3
########################################################################
[database]
dbn=sqlite
# Database name
db=db.sqlite
Se preferir usar, por exemplo, um sistema de banco de dados MySQL, você pode configurá-lo em config.cfg colocando as seguintes seções de configuração com os valores apropriados para sua configuração:
########################################################################
# 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 é o passo que levará mais tempo. Depois de analisar todas as amostras de malware dos seus conjuntos de dados e as assinaturas do grafo de chamadas, números primos correspondentes, etc. forem calculados e armazenados no banco de dados, o próximo passo é encontrar clusters. A ferramenta para fazer isso é chamada "cn_clusterer.py". Ela usará o mesmo arquivo de configuração do banco de dados ($COSA_NOSTRA_DIR/config.cfg) para extrair as assinaturas do grafo de chamadas das amostras analisadas. Executá-la é tão simples quanto fazer o seguinte:
$ 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 o processo terminar, clusters agrupando as amostras de malware analisadas serão criados no banco de dados especificado.
O último passo é iniciar o aplicativo web baseado em web.py e fazer login:
$ cd $COSA_NOSTRA_DIR
$ python cosa_nostra.py [optional port to listen to]
http://0.0.0.0:YOURPORT/
Em seguida, abra um navegador e navegue até o endereço exibido por cosa_nostra.py. Um formulário de login será exibido solicitando um nome de usuário e senha. Por padrão, é "admin/cosanostra". Você pode alterá-lo no arquivo $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"
(...)
Depois de fazer login, você pode selecionar no painel esquerdo uma das seguintes opções:
Na visualização "Clusters", pode-se selecionar diferentes clusters e visualizar um gráfico hierárquico da família de malware descoberta.
Lista de clusters como mostrada no Cosa Nostra:

Um pequeno cluster de Trojan.Backspace-1 (nome dado pelo ClamAV):

Um pequeno cluster de MiniDukes:

Um cluster de Kazy/Bifroses:

Uma pequena parte de um cluster muito grande de FannyWorms:
