Kategorien
Allgemein Projekte

(SSH) Honeypot für Angreifer mit endlessh

Gliederung

In diesem Artikel lernst du einen Honeypot (zu Deutsch Honigtopf) bzw. eine Falle für Hacker in deinem eigenen Netzwerk zu erstellen.
Hierfür ist ein wenig Vorwissen nötig um den Sinn von dieser „Falle“ zu verstehen. Sollte dir das Thema SSH nicht fremd sein, kannst du natürlich gleich zum Abschnitt „Bedrohungen“ übergehen.

Was ist SSH?

…Häufig wird es verwendet, um lokal eine entfernte Kommandozeile verfügbar zu machen, d. h., auf einer lokalen Konsole werden die Ausgaben der entfernten Konsole ausgegeben, und die lokalen Tastatureingaben werden an den entfernten Rechner gesendet….

https://de.wikipedia.org/wiki/Secure_Shell

SSH ist die verbreitete Methode um mit Servern und IOT-Geräten zu interagieren. Es ist das erste Tool, welches ein Nutzer braucht, um ein neues Gerät ohne Tastatur und Monitor in Betrieb zu nehmen, aber oft auch die zuverlässigste Methode, wenn andere Interaktionen über Weboberflächen etc. fehlschlagen sollten.
Für den Login benötigt man (meistens):
IP-Adresse(oder Domain)
Nutzername
Passwort
Port

Aber in der IT ist es nicht selten, dass es für Anwendungen Standardports gibt. Sehr oft wird Software auf dem jeweiligen Standardport konfiguriert. Weswegen beim Weglassen der Ports beim Verbindungsaufbau der Port “22” genutzt wird. Mehr zu den Standards zu SSH findet man in der rfc4819.
Manche Nutzer jedoch ändern dieses Standardports und erhoffen sich hierdurch eine höhere Sicherheit ihres Systems.
Ich vertrete, was das Ändern der Standardports angeht, die Meinung von LifeOverflow, der da findet, dass wenn ein Zugang ordentlich abgesichert ist, man diesen nicht “verstecken” muss. Denn Angreifer, nutzen meist ein unsicheres Passwort aus, weswegen der Fix für eine solche Sicherheitslücke zwingend ein Ändern des Passwortes und nicht das Ändern des Ports sein sollte. Ich empfehle hierzu LifeOverflow’s großartiges Video zum Thema “Sicherheit bei Linux Servern”. (englisch): How To Protect Your Linux Server From Hackers!

Hier einmal zwei SSH-Logins in dem sich Nutzer “admin” auf die IP 127.0.0.1 aufschaltet. Im ersten Beispiel ohne Portangabe (wie wir gelernt haben wird so der Port 22 genutzt), und einmal mit Angabe des Ports 1234, für den Fall das aus irgendeinem Grund der Standardport geändert wurde.

ssh admin@127.0.0.1
ssh admin@127.0.0.1 -p 1234

Auf diesen Login folgt dann bei erfolgreicher Verbindung die Antwort des Servers mit der Abfrage für das Passwort von Nutzer “admin”:

ssh admin@127.0.0.1
admin@127.0.0.1's password:

Bedrohungen

Wie bei allen tollen Techniken, die mit dem Internet zu tun haben, gibt es auch hier Bedrohungen. Diese bestehen aus Hackern/Skiddys die diese Logins bruteforcen, um Server zu übernehmen.
Brute-Force (zu Deutsch: rohe Gewalt) steht für das Durchprobieren von Passwörtern. Diese Angriffe werden aber oft auch durch Passwort(-Kombo)listen gestützt, welche aus oft benutzten Passwörtern und Kombinationen aus Wörtern und Zahlen bestehen.
Dies geschieht natürlich nur noch selten per Hand, da auch Angreifer im Jahre 2021 leben. Hierfür schreiben sich viele Vollblut-Hacker ihre eigenen Scripts oder nutzen bereits vorhandene Tools um dieses bruteforcen zu automatisieren. Diese Art von Software nennt man “Bots”.

Ein Passwort wie “IchLiebeSchalke04” ist eine unfassbar schlechte Idee da dieses garantiert in den Basic Passwortlisten steht. Ob ein Passwort sicher ist, lässt sich mithilfe des vertrauenswürdigen Tools auf der Website von Kaspersky oder auch auf Seite howsecureismypassword.net abfragen. Trotzdem sind diese Tools keine Garantie für ein gutes Passwort.

SSH ist eine exzellente Methode um mit Servers usw. zu interagieren, ist aber bei schlechter/falscher Konfiguration mit schwachen Passwörtern oder ohne Anti-Brute-Force Tools wie FAIL2BAN ein beliebter Eintrittspunkt für Angreifer in ein System.
Hat ein Angreifer sich erfolgreich einen Zugang über SSH verschafft, ist es quasi so als hätte er seine Tastatur an deinen Rechner angeschlossen und könnte jetzt (je nach Rechten) wild loslegen und dein System nach seinem Interesse nutzen und missbrauchen, sowie empfindliche Daten auslesen.

Schaut man sich einmal die SSH-Logs eines stinknormalen Servers an, der frei über das Interwebz erreichbar ist, so erkennt man meist nicht unerhebliche viele fehlgeschlagene Loginversuche.
Mit dem folgenden Befehl lässt sich überprüfen, wie viele solcher sogenannten Bots ihr Glück auf dem eigenen Server versuchen.

tail -n 100 /var/log/auth.log | grep 'Failed password'

Sep 19 02:15:34 ubuntu sshd[7489]: Failed password for admin from 127.0.0.1 port 16502 ssh2

...

Und was ist jetzt dieses Honeypot?

honeypot wird eine Einrichtung bezeichnet, die einen Angreifer oder Feind vom eigentlichen Ziel ablenken soll oder in einen Bereich hineinziehen soll, der ihn sonst nicht interessiert hätte – z. B. in Form eines Scheinziels.

https://de.wikipedia.org/wiki/Honeypot

Nun kommt aber eine Art Lösung des Problems, da wir diesen Bots mit simpler Software, wenig Vorwissen, in kürzester Zeit und mit wenig Systemressourcen eine Art Falle stellen können. Mit Tools wie endlessh (auch bekannt als ssh-tarpit) lässt sich ein Honeypot konfigurieren, der diese Bots Dauer-beschäftigt.
Im erwähnten oberen Beispiel wurde gezeigt wie so ein typischer Login über SSH funktioniert. Jedoch zwischen Eingabe des Nutzernamens etc. und der Antwort des Servers mit der Frage nach dem Passwort passiert einiges im Hintergrund, von dem ein Nutzer meist wenig mit bekommt (Was genau würde den Rahmen jetzt sprengen, und hierfür gibt es sicherlich mehr als genügend Lesematerial im Netz).
Aber Teil der Antwort des Servers besteht aus einem “Banner”, für dessen Länge und dessen Übertragungsgeschwindigkeit keinerlei Standards festgelegt wurden. Dies ermöglicht eine beliebige Länge und Übertragungsdauer dieses Banners.


Nun funktioniert der Honeypot folgendermaßen:
Anstatt wie ein echter SSH-Server üblich, einen überschaubar langen Banner innerhalb kürzester Zeit zu senden, lässt sich endlessh richtig schön Zeit bei der Übertragung des Banners und greift bei der Länge auch mal was tiefer in die Tasche.
Dies beschäftigt den Bot natürlich lange, da er vergeblich auf den Abschluss der Übertragung und auf die Frage nach dem Passwort wartet. Wenn diesem Bot kein Timeout eingebaut wurde, sodass er bei dieser Prozedur nicht automatisch die Verbindung abbricht, wird dieser stunden-, wenn nicht sogar tagelang beschäftigt sein.
Während dieses Zeitraums kann dieser eine Bot natürlich keine “echten” SSH-Server im Internet angreifen, da er ja weiterhin mit endlessh beschäftigt ist und brav wartet. Diese Idee von Chris Wellons aus dem Jahre 2019, hat relativ schnell seine Wellen geschlagen, da es vielen IT-Professionals und oder Serveradmins wie mir sehr gefiel diese Art der Angriffe nicht unerheblich stark zu erschweren. Besonders die geringe Komplexität dieses Stück Softwares spricht für seine Benutzung.
Ich betreibe schon seit vielen Monaten unter meiner Domain jakami.de unter dem Standardport 22 meinen kleinen endlessh Honeypot und konnte so schon vielen Bots das “Leben” schwer machen.
Gerne kannst du dir einmal anschauen was während eines solchen Verbindungsaufbaus mit diesem Honeypot passiert. Der Parameter -vvv am Ende des Befehls sorgt dafür, dass du von der ganzen Kommunikation überhaupt etwas mit bekommst. Standardmäßig wird diese nämlich nicht angezeigt. (Keine Angst mit Strg+C beendest du einfach den Aufbau)

ssh xyz@jakami.de -vvv

Output:

debug1: kex_exchange_identification: banner line 0: 5@=|E`zG(C0;Qhc

debug1: kex_exchange_identification: banner line 1: -z_glT(J-} ''.%{@<=wxn35ypp

debug1: kex_exchange_identification: banner line 2: 
Vvj}F&

debug1: kex_exchange_identification: banner line 3: `zal\\BryUX(\\8Ur[ARJ

debug1: kex_exchange_identification: banner line 5: T[)yaomhUL(!fD!Sr?v!]&hF+_$

debug1: kex_exchange_identification: banner line 6: fvI\\2n'Vr`Fe8@@{j,7U

debug1: kex_exchange_identification: banner line 7:
 =)<`#f3


Alleine in den letzten 5 Tagen konnte ich über 1000 Verbindungen auf meinem Honeypot verbuchen, was natürlich eine stolze Summe ist, wobei diese Zahl stark gesunken ist, da sich viele Bots wohl merken, dass sie bei mir nicht weit gekommen sind und mich wohl auf eine Art Blacklist setzen. Da bleiben aber noch ganze 1000 Verbindungen in den letzten 5 Tagen, die nicht an echte Ziele gingen und somit nicht anderswo Schaden anrichten konnten. Ist das nicht wundervoll?

Installation

Sollte ich dein Interesse geweckt haben und du möchtest jetzt auch einen SSH-Honeypot aufsetzen, möchte ich dich hier mit Links versorgen.
Ein wichtiges Detail aber noch, solltest du neben dem Honeypot noch einen echten SSH-Server für dich nutzen, muss dieser natürlich auf einen anderen Port weichen. Das gleichzeitige Betreiben von einem Honeypot und einem echten SSH-Server birgt keinerlei Probleme, nur musst du beim Verbindungsaufbau zu deinem Server den geänderten Port angeben. Sonst landest du selber in deiner eigenen Falle (Strg+C hilft dir aber beim manuellen Abbruch).

Endlessh läuft auf fast jedes Linuxgerät, empfehlen für das Heimnetz tut sich aber ein Raspberry Pi, da er wenig Strom verbraucht und für den kleinen Geldbeutel erhältlich ist. Er ist somit perfekt für einen 24/7 Einsatz.
Für die genau Installation hier die versprochenen Links:

Github: skeeto/endlessh
https://github.com/skeeto/endlessh

Englisches 4 Minuten Youtubevideo:
https://youtu.be/SKhKNUo6rJU

Direkt als Docker-Container:

docker pull ghcr.io/linuxserver/endlessh:latest

Oder für alle Unraid Nutzer direkt als Docker-Container aus dem Communitystore: nach “endlessh” suchen.

Konfiguration

Für den Fall, dass das Gerät auf welchen endlessh läuft im internen Netzwerk ist, musst dieser Service natürlich noch nach außen hin erreichbar gemacht werden:
Standardmäßig läuft endlessh unter dem Port 2222, welchen wir nach außen hin auf den Port 22 mappen.
Das Prozedere hierfür ist je nach Router unterschiedlich, hierfür lassen sich aber schnell Anleitungen im Internet finden mit einer fixen Suche:
“MEINROUTER Port Forwarding”
Solltest du bei der Konfiguration Probleme haben, zögere nicht, einen Kommentar zu schreiben, mich zu kontaktieren oder gar auf meinen Discord zu kommen. Sobald ich Zeit habe helfe ich dir sehr gerne.


Hast du bis hierhin gelesen möchte ich mich für deine Aufmerksamkeit bedanken und freue mich dir einen Einblick in eins meiner Projekte gegeben zu haben.
Ich würde mich sehr über einen kleinen Kommentar freuen, ob dir der Artikel gefallen hat.

Vielen Dank
Jannic