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:version-dfe44eb2

Oder f├╝r alle Unraid Nutzer direkt als Dockercontainer 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