Het is geen geheim dat internet een zeer vijandige omgeving is. Zodra je een server aanzet, wordt deze onmiddellijk onderworpen aan massale aanvallen en meerdere scans. Bijvoorbeeld
Tarpit is een trappoort die wordt gebruikt om inkomende verbindingen te vertragen. Als een systeem van een derde partij verbinding maakt met deze poort, kunt u de verbinding niet snel verbreken. Ze zal haar systeembronnen moeten verspillen en moeten wachten tot de verbindingstime-outs zijn bereikt, of de verbinding handmatig moeten beëindigen.
Meestal worden tarpits gebruikt voor bescherming. De techniek werd in eerste instantie ontwikkeld ter bescherming tegen computerwormen. En nu kan het worden gebruikt om de levens te ruïneren van spammers en onderzoekers die bezig zijn met het breed scannen van alle IP-adressen op een rij (voorbeelden op Habré:
Een van de systeembeheerders, Chris Wellons genaamd, werd blijkbaar het beu om naar deze schande te kijken - en hij schreef een klein programma
Installatie van het hulpprogramma:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Een goed geïmplementeerde tarpit zal meer middelen van de aanvaller vergen dan van jou. Maar het is niet eens een kwestie van middelen. Auteur
In de bedrijfsmodus moet de Endlessh-server op de gebruikelijke poort 22 worden geïnstalleerd, waar hooligans massaal aankloppen. Standaard beveiligingsaanbevelingen adviseren altijd om SSH naar een andere poort te verplaatsen, waardoor de omvang van de logs onmiddellijk met een orde van grootte wordt verkleind.
Chris Wellons zegt dat zijn programma één paragraaf van de specificatie exploiteert SSH-
.
Dit is precies wat het Endlessh-programma doet: it stuurt eindeloos stroom van willekeurig gegenereerde gegevens, die voldoen aan RFC 4253, dat wil zeggen verzenden vóór authenticatie, en elke regel begint met SSH-
en mag niet langer zijn dan 255 tekens, inclusief het regeleindteken. Over het algemeen is alles volgens de standaard.
Standaard wacht het programma 10 seconden tussen het verzenden van pakketten. Dit voorkomt dat de client een time-out krijgt, waardoor de client voor altijd vastzit.
Omdat de gegevens worden verzonden voordat cryptografie wordt toegepast, is het programma uiterst eenvoudig. Het hoeft geen cijfers te implementeren en ondersteunt meerdere protocollen.
De auteur probeerde ervoor te zorgen dat het hulpprogramma een minimum aan bronnen verbruikt en volledig onopgemerkt op de machine werkt. In tegenstelling tot moderne antivirusprogramma's en andere 'beveiligingssystemen' zou het uw computer niet moeten vertragen. Hij slaagde erin zowel het verkeer als het geheugenverbruik te minimaliseren dankzij een iets sluwere software-implementatie. Als het eenvoudigweg een afzonderlijk proces op een nieuwe verbinding zou starten, zouden potentiële aanvallers een DDoS-aanval kunnen lanceren door meerdere verbindingen te openen om de bronnen op de machine uit te putten. Eén thread per verbinding is ook niet de beste optie, omdat de kernel middelen zal verspillen aan het beheren van threads.
Daarom koos Chris Wellons voor de lichtste optie voor Endlessh: een single-threaded server poll(2)
, waarbij de clients in de trap vrijwel geen extra bronnen verbruiken, het socketobject in de kernel en nog eens 78 bytes voor tracking in Endlessh niet meegerekend. Om te voorkomen dat u voor elke client ontvangst- en verzendbuffers moet toewijzen, opent Endlessh een directe toegangssocket en vertaalt TCP-pakketten rechtstreeks, waarbij bijna de gehele TCP/IP-stack van het besturingssysteem wordt omzeild. De inkomende buffer is helemaal niet nodig, omdat we niet geïnteresseerd zijn in de binnenkomende gegevens.
Dat zegt de auteur ten tijde van zijn programma
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 is ideaal voor het schrijven van tarpits. Deze hook zorgt er bijvoorbeeld voor dat Firefox, Chrome of elke andere client die verbinding probeert te maken met uw HTTP-server urenlang vastloopt:
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 is een geweldig hulpmiddel voor het straffen van online pestkoppen. Het is waar dat er integendeel enig risico bestaat dat hun aandacht wordt gevestigd op het ongebruikelijke gedrag van een bepaalde server. Iemand
Naven:
Python, Informatiebeveiliging, Software, Systeembeheer
Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Trap (tarpit) voor inkomende SSH-verbindingen
Het is geen geheim dat internet een zeer vijandige omgeving is. Zodra je een server aanzet, wordt deze onmiddellijk onderworpen aan massale aanvallen en meerdere scans. Bijvoorbeeld
Tarpit is een trappoort die wordt gebruikt om inkomende verbindingen te vertragen. Als een systeem van een derde partij verbinding maakt met deze poort, kunt u de verbinding niet snel verbreken. Ze zal haar systeembronnen moeten verspillen en moeten wachten tot de verbindingstime-outs zijn bereikt, of de verbinding handmatig moeten beëindigen.
Meestal worden tarpits gebruikt voor bescherming. De techniek werd in eerste instantie ontwikkeld ter bescherming tegen computerwormen. En nu kan het worden gebruikt om de levens te ruïneren van spammers en onderzoekers die bezig zijn met het breed scannen van alle IP-adressen op een rij (voorbeelden op Habré:
Een van de systeembeheerders, Chris Wellons genaamd, werd blijkbaar het beu om naar deze schande te kijken - en hij schreef een klein programma
Installatie van het hulpprogramma:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Een goed geïmplementeerde tarpit zal meer middelen van de aanvaller vergen dan van jou. Maar het is niet eens een kwestie van middelen. Auteur
In de bedrijfsmodus moet de Endlessh-server op de gebruikelijke poort 22 worden geïnstalleerd, waar hooligans massaal aankloppen. Standaard beveiligingsaanbevelingen adviseren altijd om SSH naar een andere poort te verplaatsen, waardoor de omvang van de logs onmiddellijk met een orde van grootte wordt verkleind.
Chris Wellons zegt dat zijn programma één paragraaf van de specificatie exploiteert SSH-
.
Dit is precies wat het Endlessh-programma doet: it stuurt eindeloos stroom van willekeurig gegenereerde gegevens, die voldoen aan RFC 4253, dat wil zeggen verzenden vóór authenticatie, en elke regel begint met SSH-
en mag niet langer zijn dan 255 tekens, inclusief het regeleindteken. Over het algemeen is alles volgens de standaard.
Standaard wacht het programma 10 seconden tussen het verzenden van pakketten. Dit voorkomt dat de client een time-out krijgt, waardoor de client voor altijd vastzit.
Omdat de gegevens worden verzonden voordat cryptografie wordt toegepast, is het programma uiterst eenvoudig. Het hoeft geen cijfers te implementeren en ondersteunt meerdere protocollen.
De auteur probeerde ervoor te zorgen dat het hulpprogramma een minimum aan bronnen verbruikt en volledig onopgemerkt op de machine werkt. In tegenstelling tot moderne antivirusprogramma's en andere 'beveiligingssystemen' zou het uw computer niet moeten vertragen. Hij slaagde erin zowel het verkeer als het geheugenverbruik te minimaliseren dankzij een iets sluwere software-implementatie. Als het eenvoudigweg een afzonderlijk proces op een nieuwe verbinding zou starten, zouden potentiële aanvallers een DDoS-aanval kunnen lanceren door meerdere verbindingen te openen om de bronnen op de machine uit te putten. Eén thread per verbinding is ook niet de beste optie, omdat de kernel middelen zal verspillen aan het beheren van threads.
Daarom koos Chris Wellons voor de lichtste optie voor Endlessh: een single-threaded server poll(2)
, waarbij de clients in de trap vrijwel geen extra bronnen verbruiken, het socketobject in de kernel en nog eens 78 bytes voor tracking in Endlessh niet meegerekend. Om te voorkomen dat u voor elke client ontvangst- en verzendbuffers moet toewijzen, opent Endlessh een directe toegangssocket en vertaalt TCP-pakketten rechtstreeks, waarbij bijna de gehele TCP/IP-stack van het besturingssysteem wordt omzeild. De inkomende buffer is helemaal niet nodig, omdat we niet geïnteresseerd zijn in de binnenkomende gegevens.
Dat zegt de auteur ten tijde van zijn programma
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 is ideaal voor het schrijven van tarpits. Deze hook zorgt er bijvoorbeeld voor dat Firefox, Chrome of elke andere client die verbinding probeert te maken met uw HTTP-server urenlang vastloopt:
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 is een geweldig hulpmiddel voor het straffen van online pestkoppen. Het is waar dat er integendeel enig risico bestaat dat hun aandacht wordt gevestigd op het ongebruikelijke gedrag van een bepaalde server. Iemand
Bron: www.habr.com