Felle (tar pit) for innkommende SSH-forbindelser

Det er ingen hemmelighet at internett er et veldig fiendtlig miljÞ. SÄ snart du setter opp en server, blir den umiddelbart utsatt for massive angrep og mange skanninger. Eksempelet ved honeypoten fra sikkerhetsfolkene kan illustrere omfanget av denne sÞppeltrafikken. Faktisk kan 99% av trafikken pÄ en gjennomsnittlig server vÊre ondsinnet.

Tarpit er en portfelle som brukes for Ä bremse innkommende forbindelser. Hvis et ekstern system kobler seg til denne porten, kan forbindelsen ikke lukkes raskt. Det mÄ bruke sine systemressurser og vente til forbindelsen blir avbrutt pÄ grunn av timeout, eller manuelt kutte den.

Ofte brukes tarpitter til beskyttelse. Teknologien ble fÞrst utviklet for Ä beskytte mot datavirus. NÄ kan den brukes til Ä gjÞre livet surt for spammerne og forskerne som driver med omfattende skanning av alle IP-adresser i rekkefÞlge (eksempler pÄ Habr: Østerrike, Ukraina).

En av systemadministratorene ved navn Chris Wellons, ble tydeligvis lei av Ä se pÄ dette kaoset - sÄ han skrev et lite program Endlessh, en tarpit for SSH som bremser innkommende forbindelser. Programmet Äpner en port (som standard for testing angitt til port 2222) og later som om det er en SSH-server, men i virkeligheten oppretter det en uendelig forbindelse med den innkommende klienten til den gir opp. Dette kan vare i flere dager eller mer, til klienten faller fra.

Installasjon av verktĂžyet:

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

En riktig implementert tarpit vil ta mer ressurser fra angriperen enn fra deg. Men det handler ikke bare om ressursene. Forfatteren skrivernevner at programmet er avhengighetsskapende. Akkurat nÄ er det 27 klienter i hans felle, noen av dem har vÊrt tilkoblet i flere uker. PÄ toppunktet hadde fellen hele 1378 klienter tilkoblet i 20 timer!

I drift skal serveren Endlessh settes opp pÄ standardport 22, hvor gjengangere regelmessig prÞver Ä koble seg til. Standard sikkerhetsanbefalinger rÄder alltid til Ä flytte SSH til en annen port, noe som umiddelbart reduserer stÞrrelsen pÄ loggene.

Chris Wellons sier at programmet hans utnytter et avsnitt fra spesifikasjonen RFC 4253 for SSH-protokollen. Umiddelbart etter at TCP-forbindelsen er etablert, men fÞr kryptografi brukes, mÄ begge parter sende en identifikasjonsstreng. Og der er det en tillegg: «ServerEN kan sende andre datapunkter fÞr versjonslinjen sendes». Og ingen begrensning i mengden av disse dataene, bare hver linje mÄ starte med SSH-.

Nettopp dette gjĂžr programmet Endlessh: det sender uendelig strĂžm av tilfeldig genererte data, som overholder RFC 4253, noe som betyr at sending skjer fĂžr identifisering, og hver linje begynner med SSH- og ikke overskrider 255 tegn, inkludert linjeavslutning. Generelt sett, alt i henhold til standard.

Som standard venter programmet 10 sekunder mellom sendingene av pakker. Dette forhindrer frakobling pÄ grunn av tidsavbrudd, slik at klienten vil sitte fast for alltid.

Siden sendingen av data skjer fĂžr kryptografi brukes, er programmet helt enkelt. Det er ikke nĂždvendig Ă„ implementere noen krypteringer og stĂžtte for mange protokoller.

Forfatteren har sĂžrget for at verktĂžyet bruker minimum ressurser og jobber helt usynlig pĂ„ maskinen. I motsetning til moderne antivirusprogrammer og andre «sikkerhetssystemer», skal det ikke bremse datamaskinen. Han klarte Ă„ minimere bĂ„de trafikk og minneforbruk ved hjelp av en litt mer sofistikert programvareimplementering. Hvis han bare hadde startet en egen prosess for en ny tilkobling, ville potensielle angripere kunne utfĂžre et DDoS-angrep ved Ă„ Ă„pne mange tilkoblinger for Ă„ tĂžmme ressursene pĂ„ maskinen. Én strĂžmlinjeformet for tilkobling — er heller ikke den beste lĂžsningen, fordi kjernen bruker ressurser pĂ„ Ă„ administrere trĂ„der.

Derfor valgte Chris Wellons den letteste varianten for Endlessh: en enkelttrÄdet server poll(2), der klientene i fellen praktisk talt ikke bruker ekstra ressurser, bortsett fra sokkelobjektet i kjernen og ytterligere 78 byte for sporing i Endlessh. For Ä ikke tildele buffere for mottak og sending for hver enkelt klient, Äpner Endlessh en direkte tilgangssokkel og direkte sender TCP-pakker, og ignorerer nesten hele TCP/IP-stakken i operativsystemet. Den innkommende bufferen er ikke nÞdvendig i det hele tatt, fordi innkommende data ikke interesserer oss.

Forfatteren sier at pÄ tidspunktet for programmet sitt visste ikke om eksistensen av Python's asyncio og andre tarpit. Hvis han hadde visst om asyncio, ville han kunnet implementere verktÞyet sitt i bare 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 perfekt for Ă„ skrive tarpits. For eksempel, en slik felle kan henge Firefox, Chrome eller en annen klient i mange timer hvis de prĂžver Ă„ koble seg til serveren din:

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())

En tarpit er et utmerket verktÞy for Ä straffe internettmobbere. Det er imidlertid en viss risiko for Ä tiltrekke deres oppmerksomhet mot serverens uvanlige oppfÞrsel. Noen kan tenke pÄ hevn og mÄlrettet DDoS-angrep mot IP-en din. SÄ langt har det ikke vÊrt slike tilfeller, og tarpits fungerer utmerket.

Kategorier:
Python, Informasjonssikkerhet, Programvare, Systemadministrasjon

Tags:
SSH, Endlessh, tarpit, felle, asyncio
Felle (tar pit) for innkommende SSH-forbindelser

Det er ingen hemmelighet at internett er et veldig fiendtlig miljÞ. SÄ snart du setter opp en server, blir den umiddelbart utsatt for massive angrep og mange skanninger. Eksempelet ved honeypoten fra sikkerhetsfolkene kan illustrere omfanget av denne sÞppeltrafikken. Faktisk kan 99% av trafikken pÄ en gjennomsnittlig server vÊre ondsinnet.

Tarpit er en portfelle som brukes for Ä bremse innkommende forbindelser. Hvis et ekstern system kobler seg til denne porten, kan forbindelsen ikke lukkes raskt. Det mÄ bruke sine systemressurser og vente til forbindelsen blir avbrutt pÄ grunn av timeout, eller manuelt kutte den.

Ofte brukes tarpitter til beskyttelse. Teknologien ble fÞrst utviklet for Ä beskytte mot datavirus. NÄ kan den brukes til Ä gjÞre livet surt for spammerne og forskerne som driver med omfattende skanning av alle IP-adresser i rekkefÞlge (eksempler pÄ Habr: Østerrike, Ukraina).

En av systemadministratorene ved navn Chris Wellons, ble tydeligvis lei av Ä se pÄ dette kaoset - sÄ han skrev et lite program Endlessh, en tarpit for SSH som bremser innkommende forbindelser. Programmet Äpner en port (som standard for testing angitt til port 2222) og later som om det er en SSH-server, men i virkeligheten oppretter det en uendelig forbindelse med den innkommende klienten til den gir opp. Dette kan vare i flere dager eller mer, til klienten faller fra.

Installasjon av verktĂžyet:

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

En riktig implementert tarpit vil ta mer ressurser fra angriperen enn fra deg. Men det handler ikke bare om ressursene. Forfatteren skrivernevner at programmet er avhengighetsskapende. Akkurat nÄ er det 27 klienter i hans felle, noen av dem har vÊrt tilkoblet i flere uker. PÄ toppunktet hadde fellen hele 1378 klienter tilkoblet i 20 timer!

I drift skal serveren Endlessh settes opp pÄ standardport 22, hvor gjengangere regelmessig prÞver Ä koble seg til. Standard sikkerhetsanbefalinger rÄder alltid til Ä flytte SSH til en annen port, noe som umiddelbart reduserer stÞrrelsen pÄ loggene.

Chris Wellons sier at programmet hans utnytter et avsnitt fra spesifikasjonen RFC 4253 for SSH-protokollen. Umiddelbart etter at TCP-forbindelsen er etablert, men fÞr kryptografi brukes, mÄ begge parter sende en identifikasjonsstreng. Og der er det en tillegg: «ServerEN kan sende andre datapunkter fÞr versjonslinjen sendes». Og ingen begrensning i mengden av disse dataene, bare hver linje mÄ starte med SSH-.

Nettopp dette gjĂžr programmet Endlessh: det sender uendelig strĂžm av tilfeldig genererte data, som overholder RFC 4253, noe som betyr at sending skjer fĂžr identifisering, og hver linje begynner med SSH- og ikke overskrider 255 tegn, inkludert linjeavslutning. Generelt sett, alt i henhold til standard.

Som standard venter programmet 10 sekunder mellom sendingene av pakker. Dette forhindrer frakobling pÄ grunn av tidsavbrudd, slik at klienten vil sitte fast for alltid.

Siden sendingen av data skjer fĂžr kryptografi brukes, er programmet helt enkelt. Det er ikke nĂždvendig Ă„ implementere noen krypteringer og stĂžtte for mange protokoller.

Forfatteren har sĂžrget for at verktĂžyet bruker minimum ressurser og jobber helt usynlig pĂ„ maskinen. I motsetning til moderne antivirusprogrammer og andre «sikkerhetssystemer», skal det ikke bremse datamaskinen. Han klarte Ă„ minimere bĂ„de trafikk og minneforbruk ved hjelp av en litt mer sofistikert programvareimplementering. Hvis han bare hadde startet en egen prosess for en ny tilkobling, ville potensielle angripere kunne utfĂžre et DDoS-angrep ved Ă„ Ă„pne mange tilkoblinger for Ă„ tĂžmme ressursene pĂ„ maskinen. Én strĂžmlinjeformet for tilkobling — er heller ikke den beste lĂžsningen, fordi kjernen bruker ressurser pĂ„ Ă„ administrere trĂ„der.

Derfor valgte Chris Wellons den letteste varianten for Endlessh: en enkelttrÄdet server poll(2), der klientene i fellen praktisk talt ikke bruker ekstra ressurser, bortsett fra sokkelobjektet i kjernen og ytterligere 78 byte for sporing i Endlessh. For Ä ikke tildele buffere for mottak og sending for hver enkelt klient, Äpner Endlessh en direkte tilgangssokkel og direkte sender TCP-pakker, og ignorerer nesten hele TCP/IP-stakken i operativsystemet. Den innkommende bufferen er ikke nÞdvendig i det hele tatt, fordi innkommende data ikke interesserer oss.

Forfatteren sier at pÄ tidspunktet for programmet sitt visste ikke om eksistensen av Python's asyncio og andre tarpit. Hvis han hadde visst om asyncio, ville han kunnet implementere verktÞyet sitt i bare 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 perfekt for Ă„ skrive tarpits. For eksempel, en slik felle kan henge Firefox, Chrome eller en annen klient i mange timer hvis de prĂžver Ă„ koble seg til serveren din:

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())

En tarpit er et utmerket verktÞy for Ä straffe internettmobbere. Det er imidlertid en viss risiko for Ä tiltrekke deres oppmerksomhet mot serverens uvanlige oppfÞrsel. Noen kan tenke pÄ hevn og mÄlrettet DDoS-angrep mot IP-en din. SÄ langt har det ikke vÊrt slike tilfeller, og tarpits fungerer utmerket.

Felle (tar pit) for innkommende SSH-forbindelser

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster