Felle (tarpit) for innkommende SSH-forbindelser

Det er ingen hemmelighet at Internett er et svært fiendtlig miljø. Så snart du reiser en server, blir den umiddelbart utsatt for massive angrep og flere skanninger. For eksempel honningkrukke fra sikkerhetsvakter du kan anslå omfanget av denne søppeltrafikken. Faktisk, på den gjennomsnittlige serveren, kan 99% av trafikken være skadelig.

Tarpit er en felleport som brukes til å bremse innkommende tilkoblinger. Hvis et tredjepartssystem kobles til denne porten, vil du ikke raskt kunne lukke forbindelsen. Hun må kaste bort systemressursene sine og vente til tilkoblingen går ut, eller avslutte den manuelt.

Oftest brukes presenninger til beskyttelse. Teknikken ble først utviklet for å beskytte mot dataorm. Og nå kan den brukes til å ødelegge livene til spammere og forskere som er engasjert i bred skanning av alle IP-adresser på rad (eksempler på Habré: Østerrike, Ukraina).

En av systemadministratorene ved navn Chris Wellons ble tilsynelatende lei av å se denne skammen - og han skrev et lite program Endeløs, en tarpit for SSH som bremser innkommende tilkoblinger. Programmet åpner en port (standardporten for testing er 2222) og utgir seg for å være en SSH-server, men i realiteten etablerer det en endeløs forbindelse med den innkommende klienten til den gir opp. Dette kan fortsette i flere dager eller mer til klienten faller av.

Installasjon av verktøyet:

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

En riktig implementert tarpit vil ta mer ressurser fra angriperen enn fra deg. Men det er ikke engang et spørsmål om ressurser. Forfatter skriverat programmet er avhengighetsskapende. Akkurat nå har den 27 klienter fanget, noen av dem koblet til i flere uker. På toppen av aktiviteten var 1378 klienter fanget i 20 timer!

I driftsmodus må Endlessh-serveren installeres på den vanlige porten 22, hvor hooligans banker massevis. Standard sikkerhetsanbefalinger anbefaler alltid å flytte SSH til en annen port, noe som umiddelbart reduserer størrelsen på loggene med en størrelsesorden.

Chris Wellons sier at programmet hans utnytter ett avsnitt av spesifikasjonen RFC 4253 til SSH-protokollen. Umiddelbart etter at en TCP-forbindelse er etablert, men før kryptografi tas i bruk, må begge parter sende en identifikasjonsstreng. Og det er også en merknad: "Tjeneren KAN sende andre rader med data før den sender versjonsraden". og ingen grense på volumet av disse dataene trenger du bare å starte hver linje med SSH-.

Dette er nøyaktig hva Endlessh-programmet gjør: det sender løse strøm av tilfeldig genererte data, som samsvarer med RFC 4253, det vil si sende før autentisering, og hver linje begynner med SSH- og ikke overstiger 255 tegn, inkludert linjeavslutningstegnet. Generelt er alt i henhold til standarden.

Som standard venter programmet 10 sekunder mellom sending av pakker. Dette forhindrer at klienten blir tidsavbrutt, slik at klienten vil være fanget for alltid.

Siden dataene sendes før kryptografi brukes, er programmet ekstremt enkelt. Den trenger ikke å implementere noen chiffer og støtter flere protokoller.

Forfatteren prøvde å sikre at verktøyet bruker et minimum av ressurser og fungerer helt ubemerket på maskinen. I motsetning til moderne antivirus og andre "sikkerhetssystemer", bør det ikke redusere hastigheten på datamaskinen. Han klarte å minimere både trafikk og minneforbruk på grunn av en litt mer utspekulert programvareimplementering. Hvis den ganske enkelt startet en egen prosess på en ny tilkobling, kan potensielle angripere starte et DDoS-angrep ved å åpne flere tilkoblinger for å tømme ressursene på maskinen. Én tråd per tilkobling er heller ikke det beste alternativet, fordi kjernen vil kaste bort ressurser på å administrere tråder.

Det er derfor Chris Wellons valgte det letteste alternativet for Endlessh: en enkelt-tråds server poll(2), der klientene i fellen bruker praktisk talt ingen ekstra ressurser, uten å telle socket-objektet i kjernen og ytterligere 78 byte for sporing i Endlessh. For å unngå å måtte tildele mottaks- og sendebuffere for hver klient, åpner Endlessh en direktetilgangssocket og oversetter TCP-pakker direkte, og omgår nesten hele operativsystemets TCP/IP-stabel. Den innkommende bufferen er ikke nødvendig i det hele tatt, fordi vi ikke er interessert i de innkommende dataene.

Forfatteren sier det på tidspunktet for programmet hans visste ikke om eksistensen av Pythons asycio og andre tarpits. Hvis han visste om asycio, kunne han implementert verktøyet sitt på 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 ideell for å skrive tarpits. For eksempel vil denne kroken fryse Firefox, Chrome eller en hvilken som helst annen klient som prøver å koble til HTTP-serveren din 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 flott verktøy for å straffe nettmobbere. Riktignok er det en viss risiko, tvert imot, for å trekke oppmerksomheten deres til den uvanlige oppførselen til en bestemt server. Noen kan tenke på hevn og et målrettet DDoS-angrep på IP-en din. Men så langt har det ikke vært slike tilfeller, og presenninger fungerer utmerket.

Huber:
Python, Informasjonssikkerhet, Programvare, Systemadministrasjon

Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Felle (tarpit) for innkommende SSH-forbindelser

Det er ingen hemmelighet at Internett er et svært fiendtlig miljø. Så snart du reiser en server, blir den umiddelbart utsatt for massive angrep og flere skanninger. For eksempel honningkrukke fra sikkerhetsvakter du kan anslå omfanget av denne søppeltrafikken. Faktisk, på den gjennomsnittlige serveren, kan 99% av trafikken være skadelig.

Tarpit er en felleport som brukes til å bremse innkommende tilkoblinger. Hvis et tredjepartssystem kobles til denne porten, vil du ikke raskt kunne lukke forbindelsen. Hun må kaste bort systemressursene sine og vente til tilkoblingen går ut, eller avslutte den manuelt.

Oftest brukes presenninger til beskyttelse. Teknikken ble først utviklet for å beskytte mot dataorm. Og nå kan den brukes til å ødelegge livene til spammere og forskere som er engasjert i bred skanning av alle IP-adresser på rad (eksempler på Habré: Østerrike, Ukraina).

En av systemadministratorene ved navn Chris Wellons ble tilsynelatende lei av å se denne skammen - og han skrev et lite program Endeløs, en tarpit for SSH som bremser innkommende tilkoblinger. Programmet åpner en port (standardporten for testing er 2222) og utgir seg for å være en SSH-server, men i realiteten etablerer det en endeløs forbindelse med den innkommende klienten til den gir opp. Dette kan fortsette i flere dager eller mer til klienten faller av.

Installasjon av verktøyet:

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

En riktig implementert tarpit vil ta mer ressurser fra angriperen enn fra deg. Men det er ikke engang et spørsmål om ressurser. Forfatter skriverat programmet er avhengighetsskapende. Akkurat nå har den 27 klienter fanget, noen av dem koblet til i flere uker. På toppen av aktiviteten var 1378 klienter fanget i 20 timer!

I driftsmodus må Endlessh-serveren installeres på den vanlige porten 22, hvor hooligans banker massevis. Standard sikkerhetsanbefalinger anbefaler alltid å flytte SSH til en annen port, noe som umiddelbart reduserer størrelsen på loggene med en størrelsesorden.

Chris Wellons sier at programmet hans utnytter ett avsnitt av spesifikasjonen RFC 4253 til SSH-protokollen. Umiddelbart etter at en TCP-forbindelse er etablert, men før kryptografi tas i bruk, må begge parter sende en identifikasjonsstreng. Og det er også en merknad: "Tjeneren KAN sende andre rader med data før den sender versjonsraden". og ingen grense på volumet av disse dataene trenger du bare å starte hver linje med SSH-.

Dette er nøyaktig hva Endlessh-programmet gjør: det sender løse strøm av tilfeldig genererte data, som samsvarer med RFC 4253, det vil si sende før autentisering, og hver linje begynner med SSH- og ikke overstiger 255 tegn, inkludert linjeavslutningstegnet. Generelt er alt i henhold til standarden.

Som standard venter programmet 10 sekunder mellom sending av pakker. Dette forhindrer at klienten blir tidsavbrutt, slik at klienten vil være fanget for alltid.

Siden dataene sendes før kryptografi brukes, er programmet ekstremt enkelt. Den trenger ikke å implementere noen chiffer og støtter flere protokoller.

Forfatteren prøvde å sikre at verktøyet bruker et minimum av ressurser og fungerer helt ubemerket på maskinen. I motsetning til moderne antivirus og andre "sikkerhetssystemer", bør det ikke redusere hastigheten på datamaskinen. Han klarte å minimere både trafikk og minneforbruk på grunn av en litt mer utspekulert programvareimplementering. Hvis den ganske enkelt startet en egen prosess på en ny tilkobling, kan potensielle angripere starte et DDoS-angrep ved å åpne flere tilkoblinger for å tømme ressursene på maskinen. Én tråd per tilkobling er heller ikke det beste alternativet, fordi kjernen vil kaste bort ressurser på å administrere tråder.

Det er derfor Chris Wellons valgte det letteste alternativet for Endlessh: en enkelt-tråds server poll(2), der klientene i fellen bruker praktisk talt ingen ekstra ressurser, uten å telle socket-objektet i kjernen og ytterligere 78 byte for sporing i Endlessh. For å unngå å måtte tildele mottaks- og sendebuffere for hver klient, åpner Endlessh en direktetilgangssocket og oversetter TCP-pakker direkte, og omgår nesten hele operativsystemets TCP/IP-stabel. Den innkommende bufferen er ikke nødvendig i det hele tatt, fordi vi ikke er interessert i de innkommende dataene.

Forfatteren sier det på tidspunktet for programmet hans visste ikke om eksistensen av Pythons asycio og andre tarpits. Hvis han visste om asycio, kunne han implementert verktøyet sitt på 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 ideell for å skrive tarpits. For eksempel vil denne kroken fryse Firefox, Chrome eller en hvilken som helst annen klient som prøver å koble til HTTP-serveren din 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 flott verktøy for å straffe nettmobbere. Riktignok er det en viss risiko, tvert imot, for å trekke oppmerksomheten deres til den uvanlige oppførselen til en bestemt server. Noen kan tenke på hevn og et målrettet DDoS-angrep på IP-en din. Men så langt har det ikke vært slike tilfeller, og presenninger fungerer utmerket.

Felle (tarpit) for innkommende SSH-forbindelser

Kilde: www.habr.com

Legg til en kommentar