
Botnet-Befehls- und Kontrollmonitor
Hale ist ein Botnet-Command-&-Control-Monitor/Spion mit modularem Design, der es einfach macht, neue Module zu entwickeln, die neue Protokolle von C&C-Servern überwachen. Hale wird mit IRC- und HTTP-Monitoren ausgeliefert, die mit Twisted entwickelt wurden, um die Skalierbarkeit einer großen Anzahl von Verbindungen zu bewältigen. Diese Module haben konfigurierbare Protokollgrammatiken und Bot-Einstellungen, können aber auch an Ihre Bedürfnisse angepasst werden. Alle erfassten Logs und Dateien werden in einer Datenbank gespeichert, bei IRC zusätzlich auch die verfolgten IP-Nummern.
Um den Standort des Betreibers zu verbergen, können Verbindungen über SOCKSv5-Proxys hergestellt werden. Dies ist über die Weboberfläche konfigurierbar, auf der auch alle Logs zum Durchsuchen sowie statistische Diagramme und Zeitleisten verfügbar sind. Die Oberfläche wurde mit Django und der Google Visualization API entwickelt. Zusätzliche Funktionen der Weboberfläche sind eine RESTful-API mit OAuth-Unterstützung und eine Suchmaschine.
Die Hauptidee von Hale ist es, die Jagd auf Botnetze und die Forschung zu unterstützen, indem ein Netzwerk von Sensoren (Hale-Monitore) aufgebaut wird. Um diese Idee zu verbessern, steht ein XMPP-Bot zur Verfügung, der sich mit einem zentralen XMPP-Server verbindet, auf dem derzeit zwei verschiedene Gruppenräume genutzt werden: einer zur Koordinierung zwischen den Sensoren und einer zum Teilen von Logs und Dateien. Der Koordinierungsraum verwendet Botnet-Hashes, die aus den eindeutigen Schlüsseln in den Botnet-Einstellungen gebildet werden, sodass zwei Botnetze mit demselben Hash (Identität) nicht gleichzeitig überwacht werden müssen – dies verbessert die Auslastung. Damit Dritte dieses Netzwerk nutzen können, kann ein Bot dem Koordinierungsraum beitreten und einen Sensor bitten, ein Botnet zu verfolgen, wenn es noch nicht verfolgt wird, indem die entsprechenden Konfigurationen gesendet werden. Darüber hinaus können Dritt-Bots im Share-Raum in Echtzeit auf von den Sensoren erfasste Logs und Dateien zugreifen. Zur Unterstützung der Log-Historie kann die Web-API verwendet werden, die GET-Anfragen unterstützt.
Hale hat folgende Abhängigkeiten:
Python == 2.6
Django == 1.2.1
Twisted == 10.1.0
GeoIP-Python == 1.2.4 (sowie GeoIP C-Bibliothek)
Whoosh == 0.3.18
django-haystack == 1.0.1-final
django-piston == 0.2.3rc1
pefile == 1.2.10-63
sleekxmpp == 0.9Rrc1
wsgiref == 0.1.2
zope.interface == 3.6.1
oauth2 == 1.2.0
httplib2 == 0.6.0
Zusätzlich benötigt der Monitor einen Datenbank-Backend-Treiber, der der von Django verwendeten Datenbank entspricht. Wenn diese Bibliotheken installiert sind, laden Sie den Quellcode von hier herunter und entpacken Sie ihn an einem beliebigen Ort.
Erstellen Sie zunächst eine Datenbank, die von Hale verwendet wird. Die Datenbank-Engine kann frei gewählt werden. Wenn Sie eine vorhandene Datenbank verwenden, überspringen Sie diesen Schritt.
Im nächsten Schritt installieren Sie die Python-Datenbank-Backend-Treiber, die der verwendeten Server-Engine entsprechen.
Bearbeiten Sie settings.py in hale/src/webdb/ und ändern Sie die folgenden Konfigurationen: ENGINE, NAME, USER, PASSWORD, HOST und PORT. Die ENGINE-Einstellung ist z. B. django.db.backends.mysql, wenn Ihre Server-Engine MySQL ist. Die NAME-Einstellung ist der Name Ihrer Datenbank, den Sie beim Erstellen verwendet haben.
Wenn Sie nicht Ihre eigene Weboberfläche starten möchten, überspringen Sie diesen Schritt und gehen Sie zu 8). Ändern Sie in settings.py PATH_TO_APP, sodass er auf den vollständigen Pfad der Django-Anwendung zeigt, z. B. '/home/..../Hale/src/webdb'. Führen Sie im webdb-Verzeichnis folgenden Befehl aus: python manage.py syncdb. Wenn hier Fehler auftreten, sind die Datenbankeinstellungen in settings.py wahrscheinlich falsch. Legen Sie während der Synchronisation auch den Superuser fest, der für die Benutzerverwaltung verwendet wird.
Um die Suche in der Weboberfläche zu unterstützen, führen Sie python manage.py rebuild_index aus, damit die Suchmaschine zum ersten Mal indexiert. Dadurch wird ein Verzeichnis namens whoosh.index/ erstellt. Damit der Webserver dort schreiben kann, führen Sie chmod o+w whoosh.index/ aus. Danach führen Sie stattdessen python manage.py update_index aus und sollten dies als Cron-Job einrichten, um die Indizes in einem von Ihnen gewählten regelmäßigen Intervall zu aktualisieren.
Führen Sie python manage.py runserver aus und gehen Sie zu http://127.0.0.1:8000, um zu überprüfen, ob die Einrichtung korrekt war.
Der Befehl runserver startet einen Entwicklungsserver, der aufgrund von Leistungsproblemen nicht für den Produktionseinsatz empfohlen wird. Stattdessen setzen Sie die Weboberfläche ein, indem Sie mod_wsgi für Apache installieren. Angenommen, Sie verwenden Ubuntu, führen Sie apt-get install libapache2-mod-wsgi aus. Fügen Sie in /etc/apache2/sites-available/default Folgendes hinzu:
Alias /media /usr/local/lib/python2.6/dist-packages/django/contrib/admin/media/
<Location /media>
Order allow,deny
Allow from all
</Location>
WSGIDaemonProcess username processes=2 maximum-requests=500 threads=10
WSGIProcessGroup group
WSGIScriptAlias / /home/..../webdb/django.wsgi
und bearbeiten Sie den Benutzernamen und die Gruppe, unter denen der WSGI-Daemon laufen soll. WSGIScriptAlias sollte auf den vollständigen Pfad zur Datei django.wsgi im Verzeichnis webdb gesetzt werden. Der oben angegebene Alias wird benötigt, damit die Verwaltungsseite korrekt dargestellt wird. Um Module über die Weboberfläche hochladen zu können, führen Sie chmod o+w webdb/modules aus.
Laden Sie Module aus hale/src/modules/ hoch oder schreiben Sie eigene (siehe Abschnitt Entwicklung). Laden Sie das gewünschte Modul in der Administratoroberfläche hoch und bearbeiten Sie z. B. den Modulnamen zu irc und den Dateinamen zu ircModule.py. Geben Sie die entsprechenden Konfigurationsregeln für das Modul im entsprechenden Abschnitt in hale/conf/modules.conf an und fügen Sie sie in das Textfeld ein. Fügen Sie außerdem den Abschnitt uniqueKeys für das hochgeladene Modul hinzu.
Bevor Sie den Monitor ausführen, bearbeiten Sie hale.conf in hale/src/conf/, falls Sie einen XMPP-Server verwenden möchten. Um den XMPP-Bot zu aktivieren, setzen Sie die Einstellung use auf True und bearbeiten Sie entweder die Anmeldeinformationen für ein vorhandenes Konto und einen Server oder starten Sie Ihren eigenen XMPP-Server. Ein wichtiger Schritt beim Starten eines XMPP-Servers ist es, die maximale Stanza-Größe vom Standardwert auf etwa 10 MB zu erhöhen. Andernfalls ist die Malware-Werbung nicht möglich. Die Kanaleinstellungen in hale.conf werden für den Share-Gruppenraum verwendet, der vom Bot genutzt wird, und die Koordinierungseinstellung wird für den Gruppenraum verwendet, in dem die gesamte Koordinierung zwischen den Sensoren stattfindet.
Bearbeiten Sie hale.conf und legen Sie die Client- und Server-Einstellungen fest.