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 honningpot fra sikkerhedsvagter du kan estimere omfanget af denne affaldstrafik. Faktisk kan 99% af trafikken på den gennemsnitlige server være ondsindet.

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é: Østrig, Ukraine).

En af systemadministratorerne ved navn Chris Wellons blev tilsyneladende træt af at se denne skændsel - og han skrev et lille program Endeløs, en tarpit for SSH, der bremser indgående forbindelser. Programmet åbner en port (standardporten til test er 2222) og foregiver at være en SSH-server, men i virkeligheden etablerer det en endeløs forbindelse med den indkommende klient, indtil den giver op. Dette kan fortsætte i flere dage eller mere, indtil klienten falder fra.

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 skriverat programmet er vanedannende. Lige nu har det 27 klienter fanget, nogle af dem forbundet i uger. På toppen af ​​aktiviteten var 1378 klienter fanget i 20 timer!

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 RFC 4253 til SSH-protokollen. Umiddelbart efter at en TCP-forbindelse er etableret, men før kryptografi anvendes, skal begge parter sende en identifikationsstreng. Og der er også en bemærkning: "Serveren MÅSKE sende andre rækker af data, før den sender versionsrækken". og ingen grænse på mængden af ​​disse data, skal du bare starte hver linje med 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 vidste ikke om eksistensen af ​​Pythons asycio og andre tarpits. Hvis han kendte til asycio, kunne han implementere sit hjælpeprogram på kun 18 linjer i Python:

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 kunne tænke på hævn og et målrettet DDoS-angreb på din IP. Men indtil videre har der ikke været sådanne tilfælde, og presenninger fungerer glimrende.

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 honningpot fra sikkerhedsvagter du kan estimere omfanget af denne affaldstrafik. Faktisk kan 99% af trafikken på den gennemsnitlige server være ondsindet.

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é: Østrig, Ukraine).

En af systemadministratorerne ved navn Chris Wellons blev tilsyneladende træt af at se denne skændsel - og han skrev et lille program Endeløs, en tarpit for SSH, der bremser indgående forbindelser. Programmet åbner en port (standardporten til test er 2222) og foregiver at være en SSH-server, men i virkeligheden etablerer det en endeløs forbindelse med den indkommende klient, indtil den giver op. Dette kan fortsætte i flere dage eller mere, indtil klienten falder fra.

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 skriverat programmet er vanedannende. Lige nu har det 27 klienter fanget, nogle af dem forbundet i uger. På toppen af ​​aktiviteten var 1378 klienter fanget i 20 timer!

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 RFC 4253 til SSH-protokollen. Umiddelbart efter at en TCP-forbindelse er etableret, men før kryptografi anvendes, skal begge parter sende en identifikationsstreng. Og der er også en bemærkning: "Serveren MÅSKE sende andre rækker af data, før den sender versionsrækken". og ingen grænse på mængden af ​​disse data, skal du bare starte hver linje med 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 vidste ikke om eksistensen af ​​Pythons asycio og andre tarpits. Hvis han kendte til asycio, kunne han implementere sit hjælpeprogram på kun 18 linjer i Python:

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 kunne tænke på hævn og et målrettet DDoS-angreb på din IP. Men indtil videre har der ikke været sådanne tilfælde, og presenninger fungerer glimrende.

Trap (tarpit) for indgående SSH-forbindelser

Kilde: www.habr.com

Tilføj en kommentar