Det er ingen hemmelighed, at internettet er et meget fjendtligt miljø. Så snart du rejser en server, bliver den øjeblikkeligt udsat for massive angreb og flere scanninger. For eksempel
Tarpit er en fældeport, der bruges til at bremse indgående forbindelser. Hvis et tredjepartssystem opretter forbindelse til denne port, vil du ikke hurtigt kunne lukke forbindelsen. Hun bliver nødt til at spilde sine systemressourcer og vente, indtil forbindelsen udløber, eller manuelt afslutte den.
Oftest bruges presenninger til beskyttelse. Teknikken blev først udviklet til at beskytte mod computerorme. Og nu kan det bruges til at ødelægge livet for spammere og forskere, der er engageret i bred scanning af alle IP-adresser i en række (eksempler på Habré:
En af systemadministratorerne ved navn Chris Wellons blev tilsyneladende træt af at se denne skændsel - og han skrev et lille program
Installation af hjælpeprogrammet:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
En korrekt implementeret tarpit vil tage flere ressourcer fra angriberen end fra dig. Men det er ikke engang et spørgsmål om ressourcer. Forfatter
I driftstilstand skal Endlessh-serveren installeres på den sædvanlige port 22, hvor hooligans banker på i massevis. Standardsikkerhedsanbefalinger anbefaler altid at flytte SSH til en anden port, hvilket øjeblikkeligt reducerer størrelsen af logfilerne med en størrelsesorden.
Chris Wellons siger, at hans program udnytter et afsnit i specifikationen SSH-
.
Det er præcis, hvad Endlessh-programmet gør: det sender endeløs strøm af tilfældigt genererede data, som overholder RFC 4253, dvs. sendes før godkendelse, og hver linje begynder med SSH-
og ikke overstiger 255 tegn, inklusive linjeafslutningstegn. Generelt er alt efter standarden.
Som standard venter programmet 10 sekunder mellem afsendelse af pakker. Dette forhindrer, at klienten får timeout, så klienten vil være fanget for altid.
Da dataene sendes før kryptografi anvendes, er programmet ekstremt enkelt. Det behøver ikke at implementere nogen cifre og understøtter flere protokoller.
Forfatteren forsøgte at sikre, at værktøjet bruger et minimum af ressourcer og fungerer helt ubemærket på maskinen. I modsætning til moderne antivirus og andre "sikkerhedssystemer" bør det ikke gøre din computer langsommere. Han formåede at minimere både trafik og hukommelsesforbrug på grund af en lidt mere snedig softwareimplementering. Hvis den blot lancerede en separat proces på en ny forbindelse, så kunne potentielle angribere starte et DDoS-angreb ved at åbne flere forbindelser for at udtømme ressourcer på maskinen. En tråd pr. forbindelse er heller ikke den bedste mulighed, fordi kernen vil spilde ressourcer på at administrere tråde.
Det er derfor, Chris Wellons valgte den letteste mulighed for Endlessh: en enkelt-trådet server poll(2)
, hvor klienterne i fælden stort set ikke bruger ekstra ressourcer, uden at tælle socket-objektet i kernen og yderligere 78 bytes til sporing i Endlessh. For at undgå at skulle allokere modtage- og sendebuffere til hver klient, åbner Endlessh en direkte adgangssocket og oversætter TCP-pakker direkte, og omgår næsten hele operativsystemets TCP/IP-stack. Den indgående buffer er slet ikke nødvendig, fordi vi ikke er interesserede i de indgående data.
Det siger forfatteren på tidspunktet for sit program
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 er ideel til at skrive tarpits. For eksempel vil denne hook fryse Firefox, Chrome eller enhver anden klient, der forsøger at oprette forbindelse til din HTTP-server i mange timer:
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 er et fantastisk værktøj til at straffe online mobbere. Sandt nok er der en vis risiko, tværtimod, for at henlede deres opmærksomhed på den usædvanlige opførsel af en bestemt server. En eller anden
Hubs:
Python, Informationssikkerhed, Software, Systemadministration
Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Trap (tarpit) for indgående SSH-forbindelser
Det er ingen hemmelighed, at internettet er et meget fjendtligt miljø. Så snart du rejser en server, bliver den øjeblikkeligt udsat for massive angreb og flere scanninger. For eksempel
Tarpit er en fældeport, der bruges til at bremse indgående forbindelser. Hvis et tredjepartssystem opretter forbindelse til denne port, vil du ikke hurtigt kunne lukke forbindelsen. Hun bliver nødt til at spilde sine systemressourcer og vente, indtil forbindelsen udløber, eller manuelt afslutte den.
Oftest bruges presenninger til beskyttelse. Teknikken blev først udviklet til at beskytte mod computerorme. Og nu kan det bruges til at ødelægge livet for spammere og forskere, der er engageret i bred scanning af alle IP-adresser i en række (eksempler på Habré:
En af systemadministratorerne ved navn Chris Wellons blev tilsyneladende træt af at se denne skændsel - og han skrev et lille program
Installation af hjælpeprogrammet:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
En korrekt implementeret tarpit vil tage flere ressourcer fra angriberen end fra dig. Men det er ikke engang et spørgsmål om ressourcer. Forfatter
I driftstilstand skal Endlessh-serveren installeres på den sædvanlige port 22, hvor hooligans banker på i massevis. Standardsikkerhedsanbefalinger anbefaler altid at flytte SSH til en anden port, hvilket øjeblikkeligt reducerer størrelsen af logfilerne med en størrelsesorden.
Chris Wellons siger, at hans program udnytter et afsnit i specifikationen SSH-
.
Det er præcis, hvad Endlessh-programmet gør: det sender endeløs strøm af tilfældigt genererede data, som overholder RFC 4253, dvs. sendes før godkendelse, og hver linje begynder med SSH-
og ikke overstiger 255 tegn, inklusive linjeafslutningstegn. Generelt er alt efter standarden.
Som standard venter programmet 10 sekunder mellem afsendelse af pakker. Dette forhindrer, at klienten får timeout, så klienten vil være fanget for altid.
Da dataene sendes før kryptografi anvendes, er programmet ekstremt enkelt. Det behøver ikke at implementere nogen cifre og understøtter flere protokoller.
Forfatteren forsøgte at sikre, at værktøjet bruger et minimum af ressourcer og fungerer helt ubemærket på maskinen. I modsætning til moderne antivirus og andre "sikkerhedssystemer" bør det ikke gøre din computer langsommere. Han formåede at minimere både trafik og hukommelsesforbrug på grund af en lidt mere snedig softwareimplementering. Hvis den blot lancerede en separat proces på en ny forbindelse, så kunne potentielle angribere starte et DDoS-angreb ved at åbne flere forbindelser for at udtømme ressourcer på maskinen. En tråd pr. forbindelse er heller ikke den bedste mulighed, fordi kernen vil spilde ressourcer på at administrere tråde.
Det er derfor, Chris Wellons valgte den letteste mulighed for Endlessh: en enkelt-trådet server poll(2)
, hvor klienterne i fælden stort set ikke bruger ekstra ressourcer, uden at tælle socket-objektet i kernen og yderligere 78 bytes til sporing i Endlessh. For at undgå at skulle allokere modtage- og sendebuffere til hver klient, åbner Endlessh en direkte adgangssocket og oversætter TCP-pakker direkte, og omgår næsten hele operativsystemets TCP/IP-stack. Den indgående buffer er slet ikke nødvendig, fordi vi ikke er interesserede i de indgående data.
Det siger forfatteren på tidspunktet for sit program
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 er ideel til at skrive tarpits. For eksempel vil denne hook fryse Firefox, Chrome eller enhver anden klient, der forsøger at oprette forbindelse til din HTTP-server i mange timer:
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 er et fantastisk værktøj til at straffe online mobbere. Sandt nok er der en vis risiko, tværtimod, for at henlede deres opmærksomhed på den usædvanlige opførsel af en bestemt server. En eller anden
Kilde: www.habr.com