
Malcom - Analizzatore di Comunicazioni di Malware
Malcom è uno strumento progettato per analizzare le comunicazioni di rete di un sistema utilizzando rappresentazioni grafiche del traffico di rete e confrontarle con fonti di malware note. Questo è utile quando si analizza come determinate specie di malware cercano di comunicare con il mondo esterno.
Malcom può aiutarti a:
L'obiettivo di Malcom è rendere l'analisi del malware e la raccolta di intelligence più veloci fornendo una versione leggibile del traffico di rete proveniente da un dato host o rete. Converti le informazioni sul traffico di rete in intelligence utilizzabile più rapidamente.
Consulta il wiki per una guida rapida con alcuni screenshot e un tutorial su come aggiungere i tuoi feed.
Se hai bisogno di aiuto o vuoi contribuire, sentiti libero di iscriverti alla mailing list o provare a contattare qualcuno su IRC (#malcom su freenode.net, è piuttosto silenzioso ma c'è sempre qualcuno in giro). Puoi anche contattarmi su Twitter @tomchop_
Ecco un esempio di grafico per l'host tomchop.me

Vista del dataset (filtrata per mostrare solo IP)

mongodb e redis-server siano in esecuzione./malcom.py -c malcom.conf (o visualizza le opzioni con ./malcom.py --help)
** Per un file di configurazione di esempio, puoi copiare malcom.conf.example in malcom.conf
** La porta predefinita è 8080
** In alternativa, esegui i feed da celery. Vedi la sezione feed per i dettagli su come fare.Malcom è scritto in Python. A condizione che tu abbia le librerie necessarie, dovresti essere in grado di eseguirlo su qualsiasi piattaforma. Raccomando vivamente l'uso di ambienti virtuali Python (virtualenv) per non sporcare le librerie di sistema.
Quanto segue è stato testato su Ubuntu server 14.04 LTS:
Installa git, python e le librerie libevent, mongodb, redis e altre dipendenze
$ sudo apt-get install build-essential git python-dev libevent-dev mongodb libxml2-dev libxslt-dev zlib1g-dev redis-server libffi-dev libssl-dev python-virtualenv
Clona il repository Git:
$ git clone https://github.com/tomchop/malcom.git malcom
Crea il tuo virtualenv e attivalo:
$ cd malcom
$ virtualenv env-malcom
$ source env-malcom/bin/activate
Ottieni e installa scapy:
$ cd ..
$ wget http://www.secdev.org/projects/scapy/files/scapy-latest.tar.gz
$ tar xvzf scapy-latest.tar.gz
$ cd scapy-2.1.0
$ python setup.py install
Sempre dal tuo virtualenv, installa i pacchetti Python necessari dal file :
Per impostazione predefinita, Malcom proverà a connettersi a un'istanza mongodb locale e creerà il proprio database, chiamato malcom. Se per te va bene, puoi saltare i passaggi seguenti. Altrimenti, devi modificare la sezione database del tuo file malcom.conf.
Per impostazione predefinita, Malcom utilizzerà un database chiamato malcom. Puoi cambiare questo comportamento modificando il file malcom.conf e impostando la direttiva name nella sezione database a tuo piacimento.
[database]
...
name = my_malcom_database
...
Per impostazione predefinita, Malcom proverà a connettersi a localhost, ma il tuo database potrebbe trovarsi su un altro server. Per cambiare, imposta la direttiva hosts. Puoi usare nomi host o indirizzi IPv4/v6 (ricorda di racchiudere gli indirizzi IPv6 tra [ e ], ad esempio [::1]).
Se desideri utilizzare un database autonomo sull'host my.mongo.server, imposta:
[database]
...
hosts = my.mongo.server
...
Puoi anche specificare la porta su cui mongod è in ascolto indicandola dopo il nome/indirizzo del server, separata da :
[database]
...
hosts = localhost:27008
...
E se stai utilizzando un ReplicaSet che raggruppa my.mongo1.server e my.mongo2.server, imposta:
[database]
...
hosts = my.mongo1.server,my.mongo2.server
...
Potresti aver configurato le tue istanze mongod per richiedere connessioni autenticate. In tal caso, devi impostare il nome utente che il driver dovrà usare per connettersi alla tua istanza mongod. Per farlo, aggiungi una direttiva username alla sezione database nel file malcom.conf. Potresti anche dover impostare la password con la direttiva password. Se l'utente non ha una password, ignora (cioè commenta) la direttiva password.
[database]
...
username = my_user
password = change_me
...
Se l'utente non è collegato al database malcom ma a un altro (ad esempio il database admin per un utente amministratore), dovrai impostare la direttiva authentication_database con il nome di quel database.
[database]
...
authentication_database = some_other_database
...
Quando si utilizza un replica set, potresti dover assicurarti di essere connesso a quello giusto. Per farlo, aggiungi la direttiva replset per forzare il driver mongo a verificare il nome del replicaset
[database]
...
replset = my_mongo_replica
...
Per impostazione predefinita, Malcom proverà a connettersi al nodo primario del replica set. Potresti aver bisogno/volete cambiarlo. Per cambiare questo comportamento, imposta la direttiva read_preference. Vedi la documentazione di Mongo per maggiori informazioni.
[database]
...
read_preference = NEAREST
...
Le preferenze di lettura supportate sono:
Il modo più veloce per iniziare è scaricare l'immagine Docker dal repository docker pubblico. Per scaricare build Docker più vecchie e stabili, usa tomchop/malcom invece di tomchop/malcom-automatic.
$ sudo docker pull tomchop/malcom-automatic
$ sudo docker run -p 8080:8080 -d --name malcom tomchop/malcom-automatic
Connettendoti a http://<docker_host>:8080/ dovresti essere pronto per iniziare.
Malcom ora supporta l'intercettazione TLS. Affinché funzioni, devi generare alcune chiavi in Malcom/networking/tlsproxy/keys. Vedi il file KEYS.md lì per maggiori informazioni su come fare.
Assicurati di avere anche IPtables (dovresti già averlo) e i permessi per fare port forwarding con esso (di solito devi essere root per farlo).
Puoi farlo usando il pratico script forward_port.sh. Ad esempio, per intercettare tutte le comunicazioni TLS verso la porta 443, usa forward_port.sh 443 9999. Dovrai quindi dire a malcom di eseguire un proxy di intercettazione sulla porta 9999.
Ci si aspetta che questo processo venga automatizzato in future versioni.
Malcom è stato progettato e testato su una VM Ubuntu Server 14.04 LTS.
Se sei abituato a fare analisi di malware, probabilmente hai già dozzine di macchine virtuali in esecuzione su un sistema operativo host. Installa Malcom su una nuova VM e instrada le connessioni delle altre VM attraverso Malcom. Usa enable_routing.sh per attivare il routing/NAT sulla VM su cui Malcom è in esecuzione. Dovrai aggiungere una scheda di rete extra al sistema operativo guest.
Fintanto che riceve dati di rete di livello 3, Malcom può essere distribuito ovunque. Anche se non è consigliato utilizzarlo su reti ad alta disponibilità (non è stato progettato per essere veloce, vedi disclaimer), puoi farlo funzionare all'estremità della porta mirror del tuo switch o sul tuo gateway.
Per avviare un'istanza di Malcom che recuperi SOLO informazioni dai feed, esegui Malcom con l'opzione --feeds o modifica il file di configurazione.
Il tuo database dovrebbe essere popolato automaticamente. Se riesci a scavare nel codice, aggiungere feed è piuttosto semplice (supponendo che tu stia generando oggetti Evil). Puoi trovare un feed di esempio in /feeds/zeustracker. Un tutorial più dettagliato è disponibile qui.
Puoi anche usare celery per eseguire i feed. Assicurati che celery sia installato eseguendo $ pip install celery dal tuo virtualenv. Puoi quindi usare celery worker -E --config=celeryconfig --loglevel=DEBUG --concurrency=12 per avviare il processo di alimentazione con 12 worker simultanei.
Malcom è stato scritto per lo più da zero, in Python. Utilizza i seguenti framework per funzionare:
Collaborazione - La principale direzione in cui voglio portare questo strumento è diventare collaborativo. Ho alcune idee per questo e penso che diventerà 100 volte più utile una volta implementata la condivisione dei dati.
Estendibilità - L'altra cosa che voglio includere nello strumento è la capacità di estenderlo più facilmente. Non ho le stesse esigenze di tutti gli altri e questo strumento è stato concepito pensando alle mie esigenze. Ora puoi personalizzare Malcom aggiungendo nuovi feed.
Una volta che collaborazione ed estensione saranno operative, penso che sarà utile per più di un incident responder là fuori. :-)
Questo strumento è stato codificato nel mio tempo libero. Come un enorme numero di strumenti che scarichiamo e usiamo quotidianamente, non consiglierei di usarlo in un ambiente di produzione dove la stabilità e l'affidabilità dei dati sono un MUST.
È nelle prime fasi di sviluppo, il che significa "funziona per me". Sei libero di condividerlo, migliorarlo, chiedere pull request.
Malcom - Analizzatore di comunicazioni malware Copyright (C) 2013 Thomas Chopitea
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
Si prega di notare che Redis, MongoDB, d3js, Maxmind e Bootstrap (e altre librerie di terze parti incluse in Malcom) possono avere le proprie licenze compatibili con GPL.
requirements.txt $ cd ../malcom
$ pip install -r requirements.txt
Affinché la geolocalizzazione IP funzioni, devi scaricare il database Maxmind ed estrarre il file nella directory malcom/Malcom/auxiliary/geoIP. Puoi ottenere il database gratuito (e quindi più o meno accurato) di Maxmind dal seguente link: http://dev.maxmind.com/geoip/geoip2/geolite2/:
$ cd Malcom/auxiliary/geoIP
$ wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
$ gunzip -d GeoLite2-City.mmdb.gz
$ mv GeoLite2-City.mmdb GeoIP2-City.mmdb
Avvia il webserver dalla directory malcom usando ./malcom.py. Controlla ./malcom.py --help per l'interfaccia di ascolto e le porte.
malcom.conf.example in malcom.conf ed eseguire ./malcom.py -c malcom.conf