Endlessh ist eine SSH Fallgrube für Hacker. Dabei wird ein SSH Server auf dem Standardport 22 erstellt und mit einer Portweiterleitung an den Router gebunden. Wenn nun jemand versucht eine SSH Verbindung herzustellen, gelangt er allerdings nicht zu gewohnten Login, sondern bekommt vorher eine endlose Folge an zufällig generierten Zeichen übermittelt. Dadurch können zum einen keine Passwörter probiert werden und zum anderen hat man eine gute Chance automatisierte Angriffe für längere Zeit zu beschäftigen, ohne das diese bei mir oder jemand anderem Schaden anrichten können.
Das Programm steht bei GitHub zum Download bereit. https://github.com/skeeto/endlessh
Main Dashboard findet sich hier:
https://jrehkemper.de/HoneypotHTML/index.php
Installation
Zuerst kopiert man das Repository in einen beliebigen Ordner.
git clone https://github.com/skeeto/endlessh.git
Danach kompiliert man das Programm, sodass es ausgeführt werden kann.
cd endlessh
make
Danach ist es ratsam, den gesamten Ordner nach /etc/endlessh zu kopieren, sodass auch Skripte darauf zugreifen könne. So kann der Startvorgang leichter automatisiert werden.
Im gleichen Ordner sollte man nun eine config nach Anleitung im GitHub erstellen. In dieser kann zum Beispiel der Port definiert werden.
Ist das erledigt, kann man endlessh eigentlich schon starten. Hat man jedoch Port 22 definiert, wird man die Fehlermeldung bekommen, dass der Port bereits besetzt ist. Grund dafür ist, dass in vielen Distributionen auf Port 22 standardmäßig schon ein OpenSSH Server läuft. Den müssen wir natürlich abschalten.
systemctl disable sshd
Danach kann man den Endlessh Server starten. Dazu geht man in das /etc/endlessh
Verzeichnis und für ./endlessh
aus. Alternative kann man natürlich auch den absoluten Pfad definieren.
Nun läuft der Endlessh Server. Versucht man jetzt von einem anderen gerät darauf zuzugreifen, passiert scheinbar erstmal nichts. Erst wenn man dem ssh Befehl die Parameter -vvv mitgibt, werden die Debug Nachrichten sichtbar und man sieht wie der Endlessh Server willkürliche Zeichen übermittelt.
Autostart
Um ein Programm unter Ubuntu in den Autostart aufzunehmen, biete sich Systemd an. Dies lässt sich relativ einfach konfigurieren.
Zuerst biete es sich an ein Bash-Skript unter /usr/local/bin
zu erstellen, dass den genauen Befehl zum start des Programms speichert. Dadurch wird die Syntax in der Konfiguration des Systemd einfacher. Als Skript reicht schon etwas wie:
#!/bin/bash
/etc/endlessh/endlessh > /var/log/endlessh.log
Danach muss man die Berechtigung erteilen, das Skript auszuführen.
chmod +x skript.sh
Danach legen wir den Systemd Job an. Dieser wir als Datei unter /etc/systemd/system/skript.service gespeichert. Der Inhalt lautet wie folgt.
[Unit]
After=network.service
[Service]
ExecStart=/usr/local/bin/skript.sh
[Install]
WantedBy=default.target
Danach muss der Service nur noch aktiviert werden.
Systemctl enable skript.service
Nun startet unser Skript bei jedem Systemstart. Sollte das nicht der Fall sein lässt sich mit Systemctl status skript.service
der Status abfragen und so evtl der Fehler finden.
Weitere Ideen und Spielereien
Eine weitere Idee ist es den Output des Endlessh Servers in ein Log schreiben zu lassen. Das geht folgendermaßen
/etc/endlessh/endlessh > /var/log/endlessh.log
Mit diesem Befehl starten wir den Server und leiten die Ausgabe in die Daten /var/log/endlessh.log
um. Natürlich kann man auch eine andere Datei als log definieren. Momentan wird jedoch bei jedem neuen Start das Log überschrieben. Möchte man das nicht kann man statt > auch >> schreiben und der neue Output wird an das alte Log angehängt.
Mit diesem Log kann man dann machen, was man möchte. Zum Beispiel kann man mit tail -f -n 100 /var/log/endlessh.log
in Echtzeit verfolgen, wer sich gerade an dem SSH Zugang zu schaffen macht. Außerdem kann man mit dem Pivot.py Programm aus den Ordner endlessh/util/
eine CSV Datei aus dem log generieren lassen. Dazu leite man das Log als Input in das Programm.
python3 /etc/endlessh/util/pivot.py < /var/log/endlessh.log
Ich selber habe diese Programm noch etwas erweitert. Zum einen schicke ich die Ip an eine kostenlose API und frage so Land und Kontinent der IP ab. Danach schreibe ich alle Werte in eine MySQL Datenbank. Diese Werte lese ich dann per PHP auf einer Website aus und kann so die Werte grafisch aufbereiten.
Das Ergebnis sieht man dann hier: https://jrehkemper.de/HoneypotHTML/index.php
Zur Website:
Die Website ist eine Mischung aus HTML/CSS/JavaScript/PHP. Das Layout habe ich mithilfe von Bootstrap, einem Framework, das mithilfe von class Tags die CSS Eigenschaften eines Objektes anpasst, erstellt. Die Kacheln oben, sind einfache Divs, mit ein wenig Schatten und runden Ecken. Das Podium sind ebenfalls nur Divs mit eigener Hintergrundfarbe. Um die Darstellung responsive zu machen, habe ich hier Bootstrap genutzt.
Die Graphen weiter unten sind mit Hilfe von Chart.js entstanden.
Im Backend werden beim Seitenaufruf mehrere PHP und JS Dateien geladen, die zuerst mit SQL die Werte aus der Datenbank abfragen und danach mit JS und Charts.js darstellen. Grundlage dafür ist die Dokumentation für Chart.js. Um die Kacheln und das Podium mit werten zu füllen nutze ich JavaScript (getElementById(„Id“).innerHTML = „Wert“).
Die Tabelle am Ende der Seite ist ebenfalls aus dem Bootstrap Arsenal und kann von der Bootstrap Website als Vorlage kopiert und angepasst werden.
Datenbank optimieren
Um die RAM-Auslastung zu minimieren, habe ich die Engine der Datenbank von InnoDB auf MyISAM umgestellt. Die Anleitung dazu gibt es hier.
Fazit
Ich finde die Idee hinter dem Endlessh klasse. Man lenkt Hacker von wichtigen Geräten im Netzwerk ab und hindert sie daran andere Netzwerke anzugreifen. Außerdem war es sehr lehrreich auszuprobieren, wie man die Daten in eine Datenbank schreiben kann und auf einer Website aufbereiten kann. Dadurch hat man eine große Spanne abgedeckt. Der Server selbst ist schnell aufgesetzt, lässt aber trotzdem noch viel Luft für Spielereien.