
Malcom - Malware-Kommunikationsanalysator
Malcom ist ein Werkzeug, das entwickelt wurde, um die Netzwerkkommunikation eines Systems mittels grafischer Darstellungen des Netzwerkverkehrs zu analysieren und mit bekannten Malware-Quellen abzugleichen. Dies ist nützlich bei der Analyse, wie bestimmte Malware-Arten versuchen, mit der Außenwelt zu kommunizieren.
Malcom kann Ihnen helfen:
Das Ziel von Malcom ist es, Malware-Analyse und Nachrichtenbeschaffung schneller zu machen, indem eine menschenlesbare Version des von einem bestimmten Host oder Netzwerk ausgehenden Netzwerkverkehrs bereitgestellt wird. Wandeln Sie Netzwerkverkehrsinformationen schneller in umsetzbare Erkenntnisse um.
Schauen Sie sich das wiki für einen Schnellstart mit einigen schönen Screenshots und ein Tutorial zum Hinzufügen eigener Feeds an.
Wenn Sie Hilfe benötigen oder einen Beitrag leisten möchten, können Sie gerne der Mailingliste beitreten oder versuchen, jemanden im IRC zu erreichen (#malcom on freenode.net, es ist ziemlich ruhig, aber es ist immer jemand da). Sie können mich auch auf Twitter kontaktieren @tomchop_
Hier ist ein Beispielgraph für den Host tomchop.me

Datensatzansicht (gefiltert, um nur IPs anzuzeigen)

mongodb und redis-server laufen./malcom.py -c malcom.conf (oder sehen Sie Optionen mit ./malcom.py --help)
** Für eine Beispielkonfigurationsdatei können Sie malcom.conf.example nach malcom.conf kopieren
** Standardport ist 8080
** Alternativ können Sie die Feeds von celery aus ausführen. Siehe den Abschnitt Feeds für Details zur Vorgehensweise.Malcom ist in Python geschrieben. Vorausgesetzt, Sie haben die notwendigen Bibliotheken, sollten Sie es auf jeder Plattform ausführen können. Ich empfehle dringend die Verwendung von Python-Virtualenvs (virtualenv), um Ihre Systembibliotheken nicht zu beeinträchtigen.
Das Folgende wurde auf Ubuntu Server 14.04 LTS getestet:
Installieren Sie git, python und libevent-Bibliotheken, mongodb, redis und andere Abhängigkeiten
$ 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
Klonen Sie das Git-Repository:
$ git clone https://github.com/tomchop/malcom.git malcom
Erstellen Sie Ihre virtuelle Umgebung und aktivieren Sie sie:
$ cd malcom
$ virtualenv env-malcom
$ source env-malcom/bin/activate
Holen und installieren Sie 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
Standardmäßig versucht Malcom, eine Verbindung zu einer lokalen MongoDB-Instanz herzustellen und eine eigene Datenbank namens malcom zu erstellen. Wenn dies für Sie in Ordnung ist, können Sie die folgenden Schritte überspringen. Andernfalls müssen Sie den Abschnitt database Ihrer malcom.conf-Datei bearbeiten.
Standardmäßig verwendet Malcom eine Datenbank namens malcom. Sie können dieses Verhalten ändern, indem Sie die malcom.conf-Datei bearbeiten und die Direktive name im Abschnitt database nach Ihren Wünschen einstellen.
[database]
...
name = my_malcom_database
...
Standardmäßig versucht Malcom, eine Verbindung zu localhost herzustellen, aber Ihre Datenbank könnte sich auf einem anderen Server befinden. Um dies zu ändern, setzen Sie einfach die Direktive hosts. Sie können Hostnamen oder IPv4/v6-Adressen verwenden (denken Sie daran, Ihre IPv6-Adressen zwischen [ und ] zu setzen, z.B. [::1]).
Wenn Sie eine eigenständige Datenbank auf dem Host my.mongo.server verwenden möchten, setzen Sie einfach:
[database]
...
hosts = my.mongo.server
...
Sie können auch den Port angeben, auf dem mongod lauscht, indem Sie ihn nach dem Namen/der Adresse Ihres Servers, getrennt durch ein :, angeben:
[database]
...
hosts = localhost:27008
...
Und wenn Sie ein ReplicaSet verwenden, das my.mongo1.server und my.mongo2.server gruppiert, setzen Sie einfach:
[database]
...
hosts = my.mongo1.server,my.mongo2.server
...
Sie haben möglicherweise Ihre mongod-Instanzen so konfiguriert, dass sie authentifizierte Verbindungen erzwingen. In diesem Fall müssen Sie den Benutzernamen festlegen, den der Treiber verwenden muss, um eine Verbindung zu Ihrer mongod-Instanz herzustellen. Fügen Sie dazu einfach eine Direktive username im Abschnitt database der malcom.conf-Datei hinzu. Möglicherweise müssen Sie auch das Passwort mit der Direktive password festlegen. Wenn der Benutzer kein Passwort hat, ignorieren Sie (d.h. kommentieren Sie) die Direktive password.
[database]
...
username = my_user
password = change_me
...
Wenn der Benutzer nicht mit der malcom-Datenbank verknüpft ist, sondern mit einer anderen (z.B. der admin-Datenbank für einen Admin-Benutzer), müssen Sie die Direktive authentication_database mit dem Namen dieser Datenbank setzen.
[database]
...
authentication_database = some_other_database
...
Bei Verwendung eines Replica Sets müssen Sie möglicherweise sicherstellen, dass Sie mit dem richtigen verbunden sind. Fügen Sie dazu einfach die Direktive replset hinzu, um den Mongo-Treiber zu zwingen, den Namen des Replica Sets zu überprüfen.
[database]
...
replset = my_mongo_replica
...
Standardmäßig versucht Malcom, eine Verbindung zum primären Knoten des Replica Sets herzustellen. Möglicherweise müssen/sollten Sie dies ändern. Um dieses Verhalten zu ändern, setzen Sie einfach die Direktive read_preference. Siehe die Mongo-Dokumentation für weitere Informationen.
[database]
...
read_preference = NEAREST
...
Unterstützte Read Preferences sind:
Der schnellste Weg, um loszulegen, ist das Docker-Image aus dem öffentlichen Docker-Repository zu ziehen. Um ältere, stabilere Docker-Builds zu ziehen, verwenden Sie tomchop/malcom anstelle von tomchop/malcom-automatic.
$ sudo docker pull tomchop/malcom-automatic
$ sudo docker run -p 8080:8080 -d --name malcom tomchop/malcom-automatic
Eine Verbindung zu http://<docker_host>:8080/ sollte Sie starten lassen.
Malcom unterstützt jetzt TLS-Abfang. Damit dies funktioniert, müssen Sie einige Schlüssel in Malcom/networking/tlsproxy/keys generieren. Siehe die Datei KEYS.md dort für weitere Informationen zur Vorgehensweise.
Stellen Sie sicher, dass Sie auch IPtables haben (sollten Sie bereits) und Berechtigungen, um damit Portweiterleitung durchzuführen (normalerweise benötigen Sie dazu Root-Rechte). Sie können dies mit dem praktischen Skript forward_port.sh tun. Um beispielsweise alle TLS-Kommunikation zu Port 443 abzufangen, verwenden Sie forward_port.sh 443 9999. Dann müssen Sie Malcom mitteilen, einen Abfang-Proxy auf Port 9999 auszuführen.
Dieser Prozess wird in zukünftigen Versionen automatisiert.
Malcom wurde auf einer Ubuntu Server 14.04 LTS VM entwickelt und getestet.
Wenn Sie mit Malware-Analyse vertraut sind, haben Sie wahrscheinlich bereits zahlreiche virtuelle Maschinen auf einem Host-Betriebssystem laufen. Installieren Sie einfach Malcom auf einer neuen VM und leiten Sie die Verbindungen Ihrer anderen VM über Malcom. Verwenden Sie enable_routing.sh, um Routing/NAT auf der VM zu aktivieren, auf der Malcom läuft. Sie müssen dem Gastbetriebssystem eine zusätzliche Netzwerkkarte hinzufügen.
Solange es Layer-3-Netzwerkdaten erhält, kann Malcom überall eingesetzt werden. Obwohl es nicht empfohlen wird, es in Hochverfügbarkeitsnetzwerken zu verwenden (es wurde nicht für Geschwindigkeit entwickelt, siehe Haftungsausschluss), können Sie es am Ende des Spiegelports Ihres Switches oder auf Ihrem Gateway laufen lassen.
Um eine Instanz von Malcom zu starten, die NUR Informationen aus Feeds abruft, führen Sie Malcom mit der Option --feeds aus oder passen Sie die Konfigurationsdatei an.
Ihre Datenbank sollte automatisch befüllt werden. Wenn Sie sich in den Code vertiefen können, ist das Hinzufügen von Feeds ziemlich einfach (vorausgesetzt, Sie generieren Evil-Objekte). Ein Beispiel-Feed finden Sie in /feeds/zeustracker. Ein detaillierteres Tutorial ist hier verfügbar.
Sie können auch celery verwenden, um Feeds auszuführen. Stellen Sie sicher, dass Celery installiert ist, indem Sie $ pip install celery in Ihrer virtuellen Umgebung ausführen. Sie können dann celery worker -E --config=celeryconfig --loglevel=DEBUG --concurrency=12 verwenden, um den Feed-Prozess mit 12 gleichzeitigen Workern zu starten.
Malcom wurde größtenteils von Grund auf in Python geschrieben. Es verwendet die folgenden Frameworks:
Zusammenarbeit - Die Hauptrichtung, in die ich dieses Tool lenken möchte, ist die Zusammenarbeit. Ich habe einige Ideen dazu und denke, dass es 100x nützlicher wird, sobald Datenaustausch implementiert ist.
Erweiterbarkeit - Die andere Sache, die ich in das Tool aufnehmen möchte, ist die Möglichkeit, es einfacher zu erweitern. Ich habe nicht die gleichen Bedürfnisse wie alle anderen, und dieses Tool wurde mit meinen Bedürfnissen im Sinn konzipiert. Sie können Malcom jetzt anpassen, indem Sie neue Feeds hinzufügen.
Sobald Zusammenarbeit und Erweiterung einsatzbereit sind, denke ich, dass dies für mehr als einen Incident-Responder da draußen hilfreich sein wird. :-)
Dieses Tool wurde in meiner Freizeit programmiert. Wie eine große Anzahl von Tools, die wir täglich herunterladen und verwenden, würde ich nicht empfehlen, es in einer Produktionsumgebung zu verwenden, in der Datenstabilität und Zuverlässigkeit ein MUSS sind.
Es befindet sich in einem frühen Entwicklungsstadium, was bedeutet, dass es "für mich funktioniert". Sie können es gerne teilen, verbessern, Pull-Requests anfragen.
Malcom - Malware-Kommunikationsanalysator Copyright (C) 2013 Thomas Chopitea
Dieses Programm ist freie Software: Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, entweder Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren Version weitergeben und/oder modifizieren.
Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich sein wird, aber OHNE JEGLICHE GEWÄHRLEISTUNG; ohne die stillschweigende Gewährleistung der MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die GNU General Public License für weitere Details.
Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm erhalten haben. Wenn nicht, siehe http://www.gnu.org/licenses/.
Bitte beachten Sie, dass Redis, MongoDB, d3js, Maximind und Bootstrap (und andere in Malcom enthaltene Drittanbieterbibliotheken) möglicherweise eigene GPL-kompatible Lizenzen haben.
Installieren Sie aus Ihrer virtuellen Umgebung die notwendigen Python-Pakete aus der Datei requirements.txt:
$ cd ../malcom
$ pip install -r requirements.txt
Damit die IP-Geolokalisierung funktioniert, müssen Sie die Maxmind-Datenbank herunterladen und die Datei in das Verzeichnis malcom/Malcom/auxiliary/geoIP extrahieren. Sie können Maxminds kostenlose (und daher mehr oder weniger genaue) Datenbank über den folgenden Link beziehen: 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
Starten Sie den Webserver aus dem malcom-Verzeichnis mit ./malcom.py. Überprüfen Sie ./malcom.py --help für die Lauschschnittstelle und Ports.
malcom.conf.example nach malcom.conf kopieren und ./malcom.py -c malcom.conf ausführen