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 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é: , ).
En av systemadministratorene ved navn Chris Wellons ble tilsynelatende lei av Ä se denne skammen - og han skrev et lite program , 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 localhostEn riktig implementert tarpit vil ta mer ressurser fra angriperen enn fra deg. Men det er ikke engang et spÞrsmÄl om ressurser. Forfatter at 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 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 fangede klienter sÄ Ä si ikke bruker noen ekstra ressurser, bortsett fra kjernens socket-objekt og ytterligere 78 byte for sporing i Endlessh. For Ä unngÄ Ä tildele mottaks- og sendebuffere for hver klient, Äpner Endlessh en direkte tilgangssocket og videresender TCP-pakker direkte, og ignorerer nesten hele stakken. TCP/IP operativsystem. Inndatabufferen 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 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 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 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é: , ).
En av systemadministratorene ved navn Chris Wellons ble tilsynelatende lei av Ä se denne skammen - og han skrev et lite program , 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 localhostEn riktig implementert tarpit vil ta mer ressurser fra angriperen enn fra deg. Men det er ikke engang et spÞrsmÄl om ressurser. Forfatter at 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 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 fangede klienter sÄ Ä si ikke bruker noen ekstra ressurser, bortsett fra kjernens socket-objekt og ytterligere 78 byte for sporing i Endlessh. For Ä unngÄ Ä tildele mottaks- og sendebuffere for hver klient, Äpner Endlessh en direkte tilgangssocket og videresender TCP-pakker direkte, og ignorerer nesten hele stakken. TCP/IP operativsystem. Inndatabufferen 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 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 og et mÄlrettet DDoS-angrep pÄ IP-en din. Men sÄ langt har det ikke vÊrt slike tilfeller, og presenninger fungerer utmerket.
Kilde: www.habr.com
