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
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é:
En av systemadministratorene ved navn Chris Wellons ble tilsynelatende lei av å se denne skammen - og han skrev et lite program
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
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 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
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
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
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é:
En av systemadministratorene ved navn Chris Wellons ble tilsynelatende lei av å se denne skammen - og han skrev et lite program
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
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 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
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
Kilde: www.habr.com