Seit einiger Zeit habe ich auf einem alten Raspberry Pi 1 einen besonderen Dienst laufen. Er heisst SSH-Tarpit, was übersetzt SSH-Teergrube bedeutet. Und genauso funktioniert er. Frei nach dem Motto ab jetzt wird zurückgeschlagen.
Dem ein oder anderen ist vielleicht bekannt, dass, wenn man einen Server im Internet zur Verfügung stellt, schon nach wenigen Minuten Abfragen nach offenen Ports eintrudeln. In den meisten Fällen erfolgt das auf Port 22, dem SSH Port, der Zugriff auf die Konsole und damit direkt ins Herz des Systems erlaubt. Ich hatte bereits am ersten Tag hunderte von Zugriffen.
Beispiel:
Jemand stellt eine Anfrage auf Port 22. Der Benutzername ist in der Regel "root", weil der alle Rechte am System besitzt. Sofern der Port freigegeben ist, erfolgt vom System sofort die Aufforderung ein Passwort einzugeben. Nun probiert der Angreifer die verschiedensten Passwörter aus. Wenn er sich einer automatisierten Wörterbuchattacke bedient, können das Millionen sein. Und vielleicht hat er damit Erfolg.
SSH-Tarpit geht nun folgendermassen vor:
Es nutzt eine Eigenschaft des SSH Protokolls aus die besagt, dass es egal ist in welcher Zeit unser System eine Antwort (sprich die Anfrage nach einem Passwort) geben muss. Nachdem der Angreifer also auf einen offenen Port 22 trifft, erfolgt keine Abfrage nach einem Passwort. Der Angreifer wartet....und wartet...und wartet. Der Angreifer kann natürlich in dieser Zeit auch kein anderes Passwort ausprobieren.
Ebenfalls kann er in dieser Zeit auch kein anderes System angreifen, weil er ja brav auf die Antwort unseres Systems wartet. Wenn es eine automatisierte Attacke ist, wird irgendwann ein timeout erfolgen oder ein manueller Angreifer bricht entnervt von selber ab. Auf diese Weise kann nicht nur ein Angreifer zur gleichen Zeit, sondern mehrere blockiert werden.
Nun will man sein System natürlich auch selber gerne per SSH bedienen.
Aus dem Internet heraus muss man dafür einfach einen anderen Port durchleiten, z.B. 1234 oder etwas beliebig anderes und den dann auf den entsprechenden Server Port 22 forwarden. Aus dem internen Netzwerk ist der Server natürlich weiterhin auf Port 22 erreichbar.
Installiert wird SSH-Tarpit wie folgt:
sudo apt install python3-pip
pip3 install ssh-tarpit
Die Optionen fragt man mit folgendem Kommando ab:
ssh-tarpit --help
Am Router muss der Port 22 (aussen) auf Port 2222 (Tarpit) freigegeben werden:
Gestartet wird SSH-Tarpit wie folgt:
ssh-tarpit -i 4 -a <IP-Adresse des Tarpit> -p 2222
Will man das Log von SSH-Tarpit in eine Textdatei zur späteren Auswertung schreiben, gilt folgender Befehl:
ssh-tarpit -i 4 -a <IP-Adresse des Tarpit> -p 2222 -f /pfad/zum/log/tarpit.log
Wobei der Dateiname tarpit.log an die eigenen Gegebenheiten anpassbar ist.
Hier ein Auszug aus einer Logdatei:
Wer will, der kann die Logdatei auch problemlos im csv Format abspeichern und dann mit einem beliebigen Tabellenkalkulationsprogramm auswerten.
Bei mir kamen innerhalb eines Monats über 25000 Angriffsversuche zusammen.
Nun könnte jemand behaupten das sich das auch z.B. mit fail2ban erledigen liesse. Aber.....
fail2ban blockt zwar nach einstellbaren X Versuchen einen Angreifer. Aber erstens erfolgt das sehr schnell und der Angreifer kann sofort zum nächsten System das angreifbar ist, springen und sein Werk dort fortführen. Und zweitens macht es einen Riesenspass zu beobachten wie sich ein Angreifer in meiner Teergrube verfangen hat und dort nicht mehr herauskommt.
Bildquelle: https://www.qacafe.com/resources/endlessh-ssh-tarpit/
Hi, interessanter Ansatz, vielen Dank. Vermutlich wird es aber nicht lange auf sich warten lassen, bis jemand am Client nen Timeout definiert. VG
na und wenn schon ....rennen sie halt beim nächsten Mal wieder in die Teergrube
Es gibt auf Github übrigens ein nettes Java Programm mit dem man Tarpit Logs analysieren kann, auch nach Geodaten. Nennt sich Tarpitan
Ich denke ja nicht, das das ein problem für die Angreifer darstellt, die werden doch eh parallelisierte Abfragen haben.
Könnte es vielleicht helfen einen Gegenangriff zu starten?
Es geht doch darum, die Angreifer zu nerven, alles, was erstmal hängen bleibt, kann nicht im Sekundentakt den nächsten angreifen
Um ein einfaches Timeout als Abwehr zu umgehen wäre es sinnvoller das Tool würde vorgeben, die Passwort Versuche wären immer falsch. Und je nachdem wieviel Bandbreite zur Verfügung steht könnte man dies sehr schnell tun, um dem Angreifer Bandbreite zu stehlen.
Nur um sicher zu gehen, mein letzter Beitrag wurde tatsächlich gelöscht oder war das ein technischer Fehler?
Jeder Beitrag wird von Moderatoren zuächst geprüft und manuell freigeschaltet. Dieser Vorgang kann teilweise etwas mehr Zeit in Anspruch nehmen. Sofern ein Beitrag nicht gegen unsere Community-Richtlinien verstösst wird er in der Regel spätestens innerhalb von einem Tag freigeschaltet.
Das kann ich nicht sagen, von mir jedenfalls nicht
Wenn es jemand aus Versehen gemacht hat tut es mir leid Stelle den Beitrag nochmal ein
Ich habe es öfters, dass der Abschickken knopf nicht reagiert. War es beib dir vergleichbar?
die anleitung ist etwas veraltet, kannst du die version mit venv erwänen? unter debian und arch ist das jetzt der standard, es wird nicht lang brauchen bis diese anleitung komplett hinfällig ist.
danke würde das gerne auch bei mir auswerten habe nur ein Problem... wo finde ich die log Datei?
Moin. Ich mache es mir einfacher. Ich habe überall wo SSH im Internet offen sein muss Fail2Ban im Einsatz und zusätzlich via DKMS den TARPIT Target installiert. Dann ändere ich den Blocktype in iptables common auf TARPIT und feddich. Fail2Ban managed das Ganze und Botnetze bleiben schön kleben während ihrer Bantime, bis sie jemand mit einem SIGINT wieder zum Leben erweckt. Das kann einem Bruteforcer schon ganz schön den Tag versauen, wenn das viele machen. ^^
Hätte ich jz anders gemacht, pip kann viel auf linux systemen kaputt machen... entweder den pakete manager machen lassen oder ein venv pro installation auf machen. ich weiß ist nicht so lustig aber so ist das leider mit abhängigkeits problemen. am schnellsten geht es mit pipx damit bleibt die syntax und der aufwand gleich, jedoch macht man sich damit die anderen pakete auf dem system nicht kaputt.