SSH-Tarpit oder wie man einen Angreifer entnervt

  Norbert Rüthers   Lesezeit: 5 Minuten  🗪 13 Kommentare

Wie man Angreifer auf den SSH Port zur Verzweiflung treibt

ssh-tarpit oder wie man einen angreifer entnervt

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/

Tags

SSH-Tarpit, Port, SSH, Angreifer, System, Tarpit

schtebo
Geschrieben von schtebo am 10. Januar 2022 um 10:28

Hi, interessanter Ansatz, vielen Dank. Vermutlich wird es aber nicht lange auf sich warten lassen, bis jemand am Client nen Timeout definiert. VG

Norbert
Geschrieben von Norbert am 10. Januar 2022 um 23:57

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

👓
Geschrieben von 👓 am 12. Januar 2022 um 23:00

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?

Viro
Geschrieben von Viro am 26. Juni 2023 um 06:12

Es geht doch darum, die Angreifer zu nerven, alles, was erstmal hängen bleibt, kann nicht im Sekundentakt den nächsten angreifen

Saddy
Geschrieben von Saddy am 10. Januar 2022 um 22:12

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.

Saddy
Geschrieben von Saddy am 11. Januar 2022 um 19:39

Nur um sicher zu gehen, mein letzter Beitrag wurde tatsächlich gelöscht oder war das ein technischer Fehler?

Lioh
Geschrieben von Lioh am 11. Januar 2022 um 20:51

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.

Norbert
Geschrieben von Norbert am 12. Januar 2022 um 14:16

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

👓
Geschrieben von 👓 am 12. Januar 2022 um 23:00

Ich habe es öfters, dass der Abschickken knopf nicht reagiert. War es beib dir vergleichbar?

123654123854
Geschrieben von 123654123854 am 4. August 2023 um 14:16

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.

dertw
Geschrieben von dertw am 20. September 2023 um 22:18

danke würde das gerne auch bei mir auswerten habe nur ein Problem... wo finde ich die log Datei?

Martin
Geschrieben von Martin am 13. November 2023 um 12:00

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. ^^

samuel
Geschrieben von samuel am 16. Februar 2024 um 16:19

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.