
Malcom - Analyseur de communications de malwares
Malcom est un outil conçu pour analyser les communications réseau d'un système à l'aide de représentations graphiques du trafic réseau, et les recouper avec des sources de malwares connues. Cela s'avère utile lors de l'analyse de la manière dont certaines espèces de malwares tentent de communiquer avec l'extérieur.
Malcom peut vous aider à :
Le but de Malcom est de rendre l'analyse des malwares et la collecte de renseignements plus rapides en fournissant une version lisible par l'humain du trafic réseau provenant d'un hôte ou d'un réseau donné. Convertissez les informations de trafic réseau en renseignements exploitables plus rapidement.
Consultez le wiki pour un démarrage rapide avec de belles captures d'écran et un tutoriel sur comment ajouter vos propres flux.
Si vous avez besoin d'aide ou souhaitez contribuer, n'hésitez pas à rejoindre la liste de diffusion ou à essayer de trouver quelqu'un sur IRC (#malcom sur freenode.net, c'est assez calme mais il y a toujours quelqu'un). Vous pouvez aussi me contacter sur Twitter @tomchop_
Voici un exemple de graphe pour l'hôte tomchop.me

Vue de l'ensemble de données (filtrée pour n'afficher que les IP)

mongodb et redis-server sont en cours d'exécution./malcom.py -c malcom.conf (ou voir les options avec ./malcom.py --help)
** Pour un exemple de fichier de configuration, vous pouvez copier malcom.conf.example vers malcom.conf
** Le port par défaut est 8080
** Sinon, exécutez les flux depuis celery. Voir la section flux pour plus de détails sur la procédure.Malcom est écrit en Python. Si vous disposez des bibliothèques nécessaires, vous devriez pouvoir l'exécuter sur n'importe quelle plateforme. Je recommande vivement l'utilisation d'environnements virtuels Python (virtualenv) afin de ne pas perturber les bibliothèques système.
Ce qui suit a été testé sur Ubuntu Server 14.04 LTS :
Installer git, python et les bibliothèques libevent, mongodb, redis, ainsi que d'autres dépendances
$ 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
Cloner le dépôt Git :
$ git clone https://github.com/tomchop/malcom.git malcom
Créer votre virtualenv et l'activer :
$ cd malcom
$ virtualenv env-malcom
$ source env-malcom/bin/activate
Obtenir et installer 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
Par défaut, Malcom tentera de se connecter à une instance MongoDB locale et créera sa propre base de données nommée malcom. Si cela vous convient, vous pouvez sauter les étapes suivantes. Sinon, vous devez modifier la section database de votre fichier malcom.conf.
Par défaut, Malcom utilise une base de données nommée malcom. Vous pouvez modifier ce comportement en éditant le fichier malcom.conf et en définissant la directive name dans la section database comme vous le souhaitez.
[database]
...
name = my_malcom_database
...
Par défaut, Malcom tentera de se connecter à localhost, mais votre base de données peut se trouver sur un autre serveur. Pour modifier cela, définissez simplement la directive hosts. Vous pouvez utiliser des noms d'hôtes ou des adresses IPv4/v6 (n'oubliez pas d'encadrer vos adresses IPv6 entre [ et ], par exemple [::1]).
Si vous souhaitez utiliser une base de données autonome sur l'hôte my.mongo.server, définissez :
[database]
...
hosts = my.mongo.server
...
Vous pouvez également spécifier le port sur lequel mongod écoute en l'indiquant après le nom/adresse de votre serveur, séparé par : :
[database]
...
hosts = localhost:27008
...
Et si vous utilisez un ReplicaSet regroupant my.mongo1.server et my.mongo2.server, définissez :
[database]
...
hosts = my.mongo1.server,my.mongo2.server
...
Vous avez peut-être configuré vos instances mongod pour imposer des connexions authentifiées. Dans ce cas, vous devez définir le nom d'utilisateur que le pilote devra utiliser pour se connecter à votre instance mongod. Pour cela, ajoutez simplement une directive username dans la section database du fichier malcom.conf. Vous devrez peut-être également définir le mot de passe avec la directive password. Si l'utilisateur n'a pas de mot de passe, ignorez (commentez) la directive password.
[database]
...
username = my_user
password = change_me
...
Si l'utilisateur n'est pas lié à la base de données malcom mais à une autre (par exemple la base admin pour un utilisateur administrateur), vous devrez définir la directive authentication_database avec le nom de cette autre base.
[database]
...
authentication_database = some_other_database
...
Lors de l'utilisation d'un jeu de réplicas, vous devrez peut-être vous assurer que vous êtes connecté au bon. Pour cela, ajoutez la directive replset pour forcer le pilote mongo à vérifier le nom du jeu de réplicas :
[database]
...
replset = my_mongo_replica
...
Par défaut, Malcom tentera de se connecter au nœud principal du jeu de réplicas. Vous devrez peut-être modifier ce comportement. Pour cela, définissez la directive read_preference. Voir la documentation MongoDB pour plus d'informations.
[database]
...
read_preference = NEAREST
...
Les préférences de lecture prises en charge sont :
Le moyen le plus rapide de commencer est de tirer l'image Docker depuis le dépôt Docker public. Pour utiliser des versions Docker plus anciennes et plus stables, utilisez tomchop/malcom au lieu de tomchop/malcom-automatic.
$ sudo docker pull tomchop/malcom-automatic
$ sudo docker run -p 8080:8080 -d --name malcom tomchop/malcom-automatic
La connexion à http://<docker_host>:8080/ devrait vous permettre de commencer.
Malcom supporte désormais l'interception TLS. Pour que cela fonctionne, vous devez générer des clés dans le répertoire malcom/networking/tlsproxy/keys. Consultez le fichier KEYS.md qui s'y trouve pour plus d'informations sur la procédure.
Assurez-vous également de disposer d'IPtables (vous devriez déjà l'avoir) et des permissions nécessaires pour effectuer du transfert de port avec celui-ci (vous devez généralement être root pour cela). Vous pouvez le faire à l'aide du script pratique forward_port.sh. Par exemple, pour intercepter toutes les communications TLS vers le port 443, utilisez forward_port.sh 443 9999. Vous devrez ensuite indiquer à Malcom d'exécuter un proxy d'interception sur le port 9999.
Attendez-vous à ce que ce processus soit automatisé dans les versions futures.
Malcom a été conçu et testé sur une VM Ubuntu Server 14.04 LTS.
Si vous avez l'habitude de faire de l'analyse de malwares, vous avez probablement déjà des tonnes de machines virtuelles fonctionnant sur un système hôte. Installez simplement Malcom sur une nouvelle VM, et acheminez les connexions de vos autres VMs via Malcom. Utilisez enable_routing.sh pour activer le routage/NAT sur la VM sur laquelle Malcom s'exécute. Vous devrez ajouter une carte réseau supplémentaire au système invité.
Tant qu'il reçoit des données réseau de couche 3, Malcom peut être déployé n'importe où. Bien qu'il ne soit pas recommandé de l'utiliser sur des réseaux à haute disponibilité (il n'a pas été conçu pour être rapide, voir l'avertissement), vous pouvez le faire fonctionner à l'extrémité du port miroir de votre commutateur ou sur votre passerelle.
Pour lancer une instance de Malcom qui SEULEMENT récupère des informations à partir de flux, exécutez Malcom avec l'option --feeds ou modifiez le fichier de configuration.
Votre base de données devrait être automatiquement remplie. Si vous pouvez fouiller dans le code, l'ajout de flux est assez simple (en supposant que vous générez des objets Evil). Vous trouverez un exemple de flux dans /feeds/zeustracker. Un tutoriel plus détaillé est disponible ici.
Vous pouvez également utiliser celery pour exécuter les flux. Assurez-vous que celery est installé en exécutant $ pip install celery depuis votre virtualenv. Vous pouvez ensuite utiliser celery worker -E --config=celeryconfig --loglevel=DEBUG --concurrency=12 pour lancer le processus d'alimentation avec 12 travailleurs simultanés.
Malcom a été écrit principalement à partir de zéro, en Python. Il utilise les frameworks suivants :
Collaboration - La principale direction que je souhaite donner à cet outil est de le rendre collaboratif. J'ai quelques idées à ce sujet, et je pense qu'il deviendra 100 fois plus utile une fois le partage de données mis en œuvre.
Extensibilité - L'autre chose que je veux inclure dans l'outil est la possibilité de l'étendre plus facilement. Je n'ai pas les mêmes besoins que tout le monde, et cet outil a été conçu en fonction de mes besoins. Vous pouvez désormais personnaliser Malcom en ajoutant de nouveaux flux.
Une fois la collaboration et l'extension opérationnelles, je pense que cela sera utile à plus d'un intervenant en incident. :-)
Cet outil a été codé pendant mon temps libre. Comme un grand nombre d'outils que nous téléchargeons et utilisons quotidiennement, je ne recommanderais pas de l'utiliser dans un environnement de production où la stabilité et la fiabilité des données sont primordiales.
Il en est aux premiers stades de développement, ce qui signifie « ça marche pour moi ». Vous êtes libre de le partager, de l'améliorer, de demander des pull requests.
Malcom - Analyseur de communications de malwares Copyright (C) 2013 Thomas Chopitea
Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier selon les termes de la GNU General Public License telle que publiée par la Free Software Foundation ; soit la version 3 de la Licence, soit (à votre discrétion) toute version ultérieure.
Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de COMMERCIALISATION ou d'ADAPTATION À UN USAGE PARTICULIER. Voir la GNU General Public License pour plus de détails.
Vous devriez avoir reçu une copie de la GNU General Public License avec ce programme ; si ce n'est pas le cas, consultez http://www.gnu.org/licenses/.
Veuillez noter que Redis, MongoDB, d3js, Maximind et Bootstrap (ainsi que d'autres bibliothèques tierces incluses dans Malcom) peuvent avoir leurs propres licences compatibles avec la GPL.
Depuis votre virtualenv, installer les paquets Python nécessaires à partir du fichier requirements.txt :
$ cd ../malcom
$ pip install -r requirements.txt
Pour que la géolocalisation IP fonctionne, vous devez télécharger la base de données Maxmind et extraire le fichier dans le répertoire malcom/Malcom/auxiliary/geoIP. Vous pouvez obtenir la base de données gratuite (donc plus ou moins précise) de Maxmind depuis le lien suivant : 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
Lancer le serveur web depuis le répertoire malcom avec ./malcom.py. Consultez ./malcom.py --help pour l'interface d'écoute et les ports.
malcom.conf.example vers malcom.conf et exécuter ./malcom.py -c malcom.conf