Es ist kein Geheimnis, dass das Internet eine sehr feindselige Umgebung ist. Sobald Sie einen Server hochfahren, ist er sofort massiven Angriffen und mehreren Scans ausgesetzt. Zum Beispiel
Tarpit ist ein Trap-Port, der dazu dient, eingehende Verbindungen zu verlangsamen. Wenn sich ein Drittsystem mit diesem Port verbindet, können Sie die Verbindung nicht schnell trennen. Sie muss ihre Systemressourcen verschwenden und warten, bis die Verbindung abbricht, oder sie manuell beenden.
Am häufigsten werden Planen zum Schutz verwendet. Die Technik wurde ursprünglich zum Schutz vor Computerwürmern entwickelt. Und jetzt kann es dazu verwendet werden, das Leben von Spammern und Forschern zu ruinieren, die alle IP-Adressen nacheinander umfassend scannen (Beispiele zu Habré:
Einer der Systemadministratoren namens Chris Wellons hatte es offenbar satt, dieser Schande zuzuschauen – und schrieb ein kleines Programm
Installation des Dienstprogramms:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Eine ordnungsgemäß implementierte Plane nimmt dem Angreifer mehr Ressourcen ab als Ihnen. Aber es ist nicht einmal eine Frage der Ressourcen. Autor
Im Betriebsmodus muss der Endlessh-Server auf dem üblichen Port 22 installiert werden, wo Hooligans massenhaft klopfen. Standard-Sicherheitsempfehlungen raten immer dazu, SSH auf einen anderen Port zu verschieben, wodurch sich die Größe der Protokolle sofort um eine Größenordnung verringert.
Chris Wellons sagt, dass sein Programm einen Absatz der Spezifikation ausnutzt SSH-
.
Genau das macht das Endlessh-Programm: es sendet endlos Strom zufällig generierter Daten, die RFC 4253 entsprechen, d. h. vor der Authentifizierung senden, und jede Zeile beginnt mit SSH-
und darf 255 Zeichen einschließlich des Zeilenendezeichens nicht überschreiten. Im Allgemeinen entspricht alles dem Standard.
Standardmäßig wartet das Programm 10 Sekunden zwischen dem Senden von Paketen. Dadurch wird verhindert, dass es beim Client zu einer Zeitüberschreitung kommt, sodass der Client für immer in der Falle bleibt.
Da die Daten vor der Anwendung der Kryptographie gesendet werden, ist das Programm äußerst einfach. Es muss keine Verschlüsselung implementiert werden und unterstützt mehrere Protokolle.
Der Autor hat versucht sicherzustellen, dass das Dienstprogramm ein Minimum an Ressourcen verbraucht und auf dem Computer völlig unbemerkt arbeitet. Im Gegensatz zu modernen Antivirenprogrammen und anderen „Sicherheitssystemen“ sollte es Ihren Computer nicht verlangsamen. Dank einer etwas ausgefeilteren Softwareimplementierung gelang es ihm, sowohl den Datenverkehr als auch den Speicherverbrauch zu minimieren. Wenn einfach ein separater Prozess für eine neue Verbindung gestartet würde, könnten potenzielle Angreifer einen DDoS-Angriff starten, indem sie mehrere Verbindungen öffnen und so die Ressourcen auf dem Computer erschöpfen. Ein Thread pro Verbindung ist auch nicht die beste Option, da der Kernel Ressourcen für die Threadverwaltung verschwendet.
Aus diesem Grund hat sich Chris Wellons für die einfachste Option für Endlessh entschieden: einen Single-Threaded-Server poll(2)
, wobei die Clients in der Falle praktisch keine zusätzlichen Ressourcen verbrauchen, abgesehen vom Socket-Objekt im Kernel und weiteren 78 Bytes für die Nachverfolgung in Endlessh. Um zu vermeiden, dass jedem Client Empfangs- und Sendepuffer zugewiesen werden müssen, öffnet Endlessh einen Direktzugriffs-Socket und übersetzt TCP-Pakete direkt und umgeht dabei fast den gesamten TCP/IP-Stack des Betriebssystems. Der Eingangspuffer wird überhaupt nicht benötigt, da uns die eingehenden Daten nicht interessieren.
Das sagt der Autor zum Zeitpunkt seiner Sendung
import asyncio
import random
async def handler(_reader, writer):
try:
while True:
await asyncio.sleep(10)
writer.write(b'%xrn' % 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 ideal zum Schreiben von Tarpits. Dieser Hook friert beispielsweise Firefox, Chrome oder jeden anderen Client ein, der viele Stunden lang versucht, eine Verbindung zu Ihrem HTTP-Server herzustellen:
import asyncio
import random
async def handler(_reader, writer):
writer.write(b'HTTP/1.1 200 OKrn')
try:
while True:
await asyncio.sleep(5)
header = random.randint(0, 2**32)
value = random.randint(0, 2**32)
writer.write(b'X-%x: %xrn' % (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. Allerdings besteht im Gegenteil ein gewisses Risiko, dass sie auf das ungewöhnliche Verhalten eines bestimmten Servers aufmerksam gemacht werden. Jemand
Hubs:
Python, Informationssicherheit, Software, Systemadministration
Stichworte:
SSH, Endlessh, Tarpit, Tarpit, Trap, Asycio
Falle (Tarpit) für eingehende SSH-Verbindungen
Es ist kein Geheimnis, dass das Internet eine sehr feindselige Umgebung ist. Sobald Sie einen Server hochfahren, ist er sofort massiven Angriffen und mehreren Scans ausgesetzt. Zum Beispiel
Tarpit ist ein Trap-Port, der dazu dient, eingehende Verbindungen zu verlangsamen. Wenn sich ein Drittsystem mit diesem Port verbindet, können Sie die Verbindung nicht schnell trennen. Sie muss ihre Systemressourcen verschwenden und warten, bis die Verbindung abbricht, oder sie manuell beenden.
Am häufigsten werden Planen zum Schutz verwendet. Die Technik wurde ursprünglich zum Schutz vor Computerwürmern entwickelt. Und jetzt kann es dazu verwendet werden, das Leben von Spammern und Forschern zu ruinieren, die alle IP-Adressen nacheinander umfassend scannen (Beispiele zu Habré:
Einer der Systemadministratoren namens Chris Wellons hatte es offenbar satt, dieser Schande zuzuschauen – und schrieb ein kleines Programm
Installation des Dienstprogramms:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Eine ordnungsgemäß implementierte Plane nimmt dem Angreifer mehr Ressourcen ab als Ihnen. Aber es ist nicht einmal eine Frage der Ressourcen. Autor
Im Betriebsmodus muss der Endlessh-Server auf dem üblichen Port 22 installiert werden, wo Hooligans massenhaft klopfen. Standard-Sicherheitsempfehlungen raten immer dazu, SSH auf einen anderen Port zu verschieben, wodurch sich die Größe der Protokolle sofort um eine Größenordnung verringert.
Chris Wellons sagt, dass sein Programm einen Absatz der Spezifikation ausnutzt SSH-
.
Genau das macht das Endlessh-Programm: es sendet endlos Strom zufällig generierter Daten, die RFC 4253 entsprechen, d. h. vor der Authentifizierung senden, und jede Zeile beginnt mit SSH-
und darf 255 Zeichen einschließlich des Zeilenendezeichens nicht überschreiten. Im Allgemeinen entspricht alles dem Standard.
Standardmäßig wartet das Programm 10 Sekunden zwischen dem Senden von Paketen. Dadurch wird verhindert, dass es beim Client zu einer Zeitüberschreitung kommt, sodass der Client für immer in der Falle bleibt.
Da die Daten vor der Anwendung der Kryptographie gesendet werden, ist das Programm äußerst einfach. Es muss keine Verschlüsselung implementiert werden und unterstützt mehrere Protokolle.
Der Autor hat versucht sicherzustellen, dass das Dienstprogramm ein Minimum an Ressourcen verbraucht und auf dem Computer völlig unbemerkt arbeitet. Im Gegensatz zu modernen Antivirenprogrammen und anderen „Sicherheitssystemen“ sollte es Ihren Computer nicht verlangsamen. Dank einer etwas ausgefeilteren Softwareimplementierung gelang es ihm, sowohl den Datenverkehr als auch den Speicherverbrauch zu minimieren. Wenn einfach ein separater Prozess für eine neue Verbindung gestartet würde, könnten potenzielle Angreifer einen DDoS-Angriff starten, indem sie mehrere Verbindungen öffnen und so die Ressourcen auf dem Computer erschöpfen. Ein Thread pro Verbindung ist auch nicht die beste Option, da der Kernel Ressourcen für die Threadverwaltung verschwendet.
Aus diesem Grund hat sich Chris Wellons für die einfachste Option für Endlessh entschieden: einen Single-Threaded-Server poll(2)
, wobei die Clients in der Falle praktisch keine zusätzlichen Ressourcen verbrauchen, abgesehen vom Socket-Objekt im Kernel und weiteren 78 Bytes für die Nachverfolgung in Endlessh. Um zu vermeiden, dass jedem Client Empfangs- und Sendepuffer zugewiesen werden müssen, öffnet Endlessh einen Direktzugriffs-Socket und übersetzt TCP-Pakete direkt und umgeht dabei fast den gesamten TCP/IP-Stack des Betriebssystems. Der Eingangspuffer wird überhaupt nicht benötigt, da uns die eingehenden Daten nicht interessieren.
Das sagt der Autor zum Zeitpunkt seiner Sendung
import asyncio
import random
async def handler(_reader, writer):
try:
while True:
await asyncio.sleep(10)
writer.write(b'%xrn' % 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 ideal zum Schreiben von Tarpits. Dieser Hook friert beispielsweise Firefox, Chrome oder jeden anderen Client ein, der viele Stunden lang versucht, eine Verbindung zu Ihrem HTTP-Server herzustellen:
import asyncio
import random
async def handler(_reader, writer):
writer.write(b'HTTP/1.1 200 OKrn')
try:
while True:
await asyncio.sleep(5)
header = random.randint(0, 2**32)
value = random.randint(0, 2**32)
writer.write(b'X-%x: %xrn' % (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. Allerdings besteht im Gegenteil ein gewisses Risiko, dass sie auf das ungewöhnliche Verhalten eines bestimmten Servers aufmerksam gemacht werden. Jemand
Source: habr.com