Trap (Tarp) für eingehende SSH-Verbindungen

Es ist kein Geheimnis, dass das Internet eine sehr feindliche Umgebung ist. Sobald Sie den Server anheben, wird er sofort massiven Angriffen und mehreren Scans ausgesetzt. Am Beispiel eines Wachmann-Hanipots kann man das Ausmaß dieses Junk-Verkehrs abschätzen. Auf einem durchschnittlichen Server können 99% des Datenverkehrs bösartig sein.

Tarpit ist ein Trap-Port, mit dem eingehende Verbindungen verlangsamt werden. Wenn ein System eines Drittanbieters eine Verbindung zu diesem Port herstellt, kann die Verbindung nicht schnell geschlossen werden. Sie muss ihre Systemressourcen ausgeben und warten, bis die Verbindung durch eine Zeitüberschreitung unterbrochen wird, oder sie manuell trennen.

Am häufigsten werden Planen zum Schutz verwendet. Die Technik wurde zuerst zum Schutz vor Computerwürmern entwickelt. Und jetzt kann es verwendet werden, um das Leben von Spammern und Forschern zu verderben, die alle IP-Adressen hintereinander umfassend scannen (Beispiele zu Habré: Österreich , Ukraine ).

Einer der Systemadministratoren namens Chris Wellons, der es anscheinend satt hat, diese Schande zu sehen - und er schrieb ein kleines Programm Endlessh , Tarpit für SSH, das eingehende Verbindungen verlangsamt. Das Programm öffnet den Port (standardmäßig wird Port 2222 zum Testen angegeben) und gibt vor, ein SSH-Server zu sein, stellt jedoch tatsächlich eine endlose Verbindung mit dem eingehenden Client her, bis er sich ergibt. Dies kann mehrere Tage oder länger dauern, bis der Kunde abfällt.

Installation des Dienstprogramms:

$ make $ ./endlessh & $ ssh -p2222 localhost 

Ein ordnungsgemäß implementiertes Tarpit entzieht dem Angreifer mehr Ressourcen als Sie. Aber die Sache ist nicht einmal in den Ressourcen. Der Autor schreibt, dass das Programm süchtig macht. Derzeit sind 27 Kunden gefangen, von denen einige wochenlang verbunden sind. Auf dem Höhepunkt der Aktivität saßen 1378 Kunden 20 Stunden lang in der Falle!

Im Betriebsmodus muss der Endlessh-Server auf dem regulären Port 22 installiert werden, an dem Hooligans massiv klopfen. Standard-Sicherheitsempfehlungen empfehlen immer, SSH an einen anderen Port zu verschieben, wodurch die Protokollgröße sofort um eine Größenordnung reduziert wird.

Laut Chris Wellons nutzt sein Programm einen Absatz der RFC 4253- Spezifikation für das SSH-Protokoll. Unmittelbar nach dem Herstellen einer TCP-Verbindung, jedoch vor dem Anwenden der Kryptografie, sollten beide Parteien eine Identifikationszeichenfolge senden. Und es gibt einen Hinweis: "Der Server kann andere Datenzeilen senden, bevor die Zeile mit der Version gesendet wird . " Und es gibt keine Begrenzung für die Menge dieser Daten, nur sollte nicht jede Zeile mit SSH- .

Dies ist genau das, was Endlessh tut: Es sendet einen endlosen Strom zufällig generierter Daten , die RFC 4253 entsprechen, dh vor der Identifizierung senden, und jede Zeile beginnt nicht mit SSH- und überschreitet nicht 255 Zeichen, einschließlich des Zeilenabschlusszeichens. Im Allgemeinen ist alles Standard.

Standardmäßig wartet das Programm 10 Sekunden zwischen dem Senden von Paketen. Dies verhindert eine Zeitüberschreitungsreise, sodass der Client für immer gefangen bleibt.

Da Daten gesendet werden, bevor die Kryptografie angewendet wird, ist das Programm außergewöhnlich einfach. Es müssen keine Chiffren und keine Unterstützung für mehrere Protokolle implementiert werden.

Der Autor hat versucht, das Dienstprogramm auf ein Minimum an Ressourcen zu beschränken und absolut nahtlos auf der Maschine zu arbeiten. Im Gegensatz zu modernen Virenschutzprogrammen und anderen "Sicherheitssystemen" sollte dies den Computer nicht verlangsamen. Aufgrund einer etwas schlaueren Software-Implementierung gelang es ihm, sowohl den Datenverkehr als auch den Speicherverbrauch zu minimieren. Wenn er einfach einen separaten Prozess für eine neue Verbindung startet, können potenzielle Angreifer einen DDoS-Angriff ausführen und viele Verbindungen öffnen, um die Ressourcen auf dem Computer zu erschöpfen. Ein Thread pro Verbindung ist ebenfalls nicht die beste Option, da der Kernel Ressourcen für die Thread-Verwaltung ausgibt.

Aus diesem Grund hat Chris Wellons die leichteste Option für Endlessh ausgewählt: einen Single-Threaded- poll(2) -Server, bei dem Clients in der Falle praktisch keine unnötigen Ressourcen verbrauchen, das Socket-Objekt im Kernel nicht zählen und 78 weitere Bytes für die Verfolgung in Endlessh. Um nicht jedem Client Empfangs- und Sendepuffer zuzuweisen, öffnet Endlessh einen Direktzugriffssocket und übersetzt TCP-Pakete direkt, wobei fast der gesamte TCP / IP-Stapel des Betriebssystems ignoriert wird. Der Eingabepuffer wird überhaupt nicht benötigt, da uns die Eingabedaten nicht interessieren.

Der Autor sagt, dass er zum Zeitpunkt seines Programms nichts über die Existenz des Python Asycio und anderer Tarpits wusste. Wenn er etwas über Asycio wüsste, könnte er sein Dienstprogramm in Python in nur 18 Zeilen implementieren:

 import asyncio import random async def handler(_reader, writer): try: while True: await asyncio.sleep(10) writer.write(b'%x\r\n' % random.randint(0, 2**32)) await writer.drain() except ConnectionResetError: pass async def main(): server = await asyncio.start_server(handler, '0.0.0.0', 2222) async with server: await server.serve_forever() asyncio.run(main()) 


Asyncio ist perfekt zum Schreiben von Tarpits. Ein solcher Trap hängt beispielsweise Firefox, Chrome oder einen anderen Client, der versucht, für viele Stunden eine Verbindung zu Ihrem HTTP-Server herzustellen:

 import asyncio import random async def handler(_reader, writer): writer.write(b'HTTP/1.1 200 OK\r\n') try: while True: await asyncio.sleep(5) header = random.randint(0, 2**32) value = random.randint(0, 2**32) writer.write(b'X-%x: %x\r\n' % (header, value)) await writer.drain() except ConnectionResetError: pass async def main(): server = await asyncio.start_server(handler, '0.0.0.0', 8080) async with server: await server.serve_forever() asyncio.run(main()) 


Tarpit ist ein großartiges Tool zur Bestrafung von Online-Mobbern. Im Gegenteil, es besteht das Risiko, dass sie auf das ungewöhnliche Verhalten eines bestimmten Servers aufmerksam gemacht werden. Jemand könnte an Rache und einen gezielten DDoS-Angriff auf Ihre IP denken . Bisher gab es jedoch keine derartigen Fälle, und die Plane funktioniert einwandfrei.





Source: https://habr.com/ru/post/de445318/


All Articles