Kategorien
Allgemein Projekte

Pwnamap

Map all the things

Nur ein kleiner Blogpost, aber ich wollte gerne von meinem ersten veröffentlichten Projekt berichten.

Laut meinen Bestellbestätigungen der Teile ist es schon über 4 Jahre her, dass ich mir einen sogenannten Pwnagotchi gebaut hab. Was genau dieses kleine “Spielzeug” für Nerds sein soll, ist bereits ausreichend dokumentiert. Aber eine kurze Zusammenfassung

Small gadget with a black display and a 3d printed case.
pwnagotchi
Leo, mein Pwnagotchi in seinem selbstgedruckten neongrünem Gehäuse, welches unter UV-Licht super fluoresziert

Pwnagotchi (von Pwn und dem beliebten Spielzeug der 2000er-Wende Tamagotchi) ist ein Projekt, welches ursprünglich vom Entwickler evilsocket, welcher besonders für sein WLAN und Bluetooth Pentest Tool Bettercap bekannt ist, veröffentlicht.
Pwnagotchi nutzt Deep Reinforcement (“AI”), um Wi-Fi besonders effizient Handshakes zu sammeln, mit welchen man im Falle eines schwachen Passwortes ein solches berechnen könnte. Ein solches Errechnen wäre natürlich total illegal, deswegen bleiben wir beim Konjunktiv.

Fun Faktor

So ein pwnagotchi kann also eine Menge von Handshakes sammeln, aus welchen man dann mit genügend Rechenleistung das Passwort errechnen kann, solange es schwach gewählt wurde.
Total spannend und aufregend, ein solches Projekt zu realisieren, die Hardware zusammenzubauen und bei fehlenden Headern sogar mit dem Lötkolben aktiv zu werden.
Um es richtig schick zu haben, kann man dem Pwnagotchi dann noch ein Gehäuse mit dem 3D-Drucker spendieren.

Dann geht’s ans Installieren und Konfigurieren und wenn alles geklappt hat und der pwnagotchi glücklich scheint, kann es in die echte Welt gehen, um etwas Gras anzufassen.

1. no system is safe.
2. aim for the impossible.
3. have fun in cyberspace and meat space

Who Am I: MRX

Wenn man dann also eine Weile seine Runden mit dem Pwnagotchi gedreht hat, wird er einige Handshakes gesammelt haben, welche man, wäre es nicht illegal, mit Tools wie hashcat zu knacken versuchen könnte.

Langzeitmotivation

Aber irgendwann stellt sich die Frage: “Was jetzt?”.
Für alle, die einen gesunden moralischen Kompass haben, endet die Reise meistens nach dem Knacken der Passwörter.
Dadurch langweilt man sich irgendwann, hat eventuell keine Motivation mehr den pwnagotchi für Spaziergänge einzupacken und er fängt an in der Ecke zu verstauben.
Hier kommt jedoch das von mir erstellte Tool “pwnamap” ins Spiel.

Um eine Langzeitmotivation zu schaffen, habe ich ein Tool erstellt, welches einem die Netzwerke parst, lokalisiert und wie eine Trophäe auf eine Karte packt. So sieht man, wo man überall schon unterwegs war und ist motiviert, sich noch weiter mit dem Thema Wi-Fi Security zu beschäftigen und die Datenbank zu füllen.

pwnamap joined the party

Website showing a map with a Point of interest
Pwnamap mit einem Beispiel Datenpunkt. (Nicht real)

Mithilfe der Tools kann die Potfile (aktuell nur vom Distributed Computing Service wpa-sec) importiert und geparst werden.
Kompliziert wird es bei der Lokalisierung des Netzwerkes.
Hierfür werden die selbsterstellten Daten einer Wardriving App für das Handy genutzt. Diese App speichert, wenn aktiv, Informationen über Bluetooth-Geräte, Wi-Fi-Geräte und Mobilfunkmasten aus der Umgebung, sowie ihren Standort mithilfe von GNSS (“GPS”). Mithilfe der erstellen Datenbank lassen sich dann beliebige Netzwerke lokalisieren, solange das Handy sie empfangen hat.

Um motiviert zu bleiben, weiterhin Daten über die echte Welt zu sammeln, hat pwnamap auch eine kleine Statistik Seite, auf welcher man sich einen Überblick über die verschiedenen Datenpunkte in der Datenbank verschaffen kann.

In den Statistiken gibt es einiges zu entdecken.

Da aufgrund der Problematik mit der Lokalisierung, eigenen Daten über die Standorte von WI-FI-Netzwerken gesammelt werden müssen, hat es sich angeboten, gleich noch eine zweite Map zu bauen. Die gibt einen Einblick in die gesammelten Daten. Auch wenn diese eigentlich nur zur Brücke zum Erreichen eines anderen Zieles gedacht war, hat sich diese Brücke mittlerweile zu einem eigenständigen vollwertigen Tool entwickelt.

Mit dem Database Explorer, lässt sich nach Netzwerk Typen und Namen filtern. Es lassen sich so einige Schätze zwischen all den zu erwartenen Netzwerknamen entdecken.

In meinem Database Explorer habe ich schon einige Zeit herum geforscht. Es gibt tatsächlich einige kuriose Netzwerknamen, zwischen all den sonst ziemlich langweiligen Netzwerken mit Standardnamen wie “FRITZ!Box 6490”, “Vodafone-1234” und “UPC42049” zu entdecken.

Abschließende Worte

Zum Ende möchte ich mit einem kleinen Fazit kommen.
Zwar hab ich schon immer gerne mal etwas herum programmiert, aber so wirklich was von “built from ground up” war neu für mich. Neben vielen halben Nervenzusammenbrüchen konnte ich viel lernen und mich weiter mit Python vertraut machen. Es hat Spaß gemacht, zur pwnagotchi Community beizutragen und das Projekt, welches sich mittlerweile selbstständig gemach hat (Der ursprüngliche Programmiere “maintained” das Projekt nicht mehr) weiter voranzubringen.
Natürlich lässt sich mit meinem Tool noch einfacher Schindluder treiben. Aber für diejenigen, die ihr Wissen über Schwachstellen mit Moral nutzen, ist es eine tolle Bereicherung.

Zum Ende kann ich nur jedem ans Herz legen sichere Passwörter zu nutzen und da wo möglich das sicherere Protokoll WPA3 für seine Geräte zu nutzen!

Links

Nachfolgend Links zu den verschiedenen erwähnten Projekten

Pwnamap Github Seite:

Pwnagotchi Ur-Website
Pwnagotchi Community Website

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