Nije tajna da je internet veoma neprijateljsko okruženje. Čim podignete server, on je trenutno podvrgnut masovnim napadima i višestrukim skeniranjima. Na primjer
Tarpit je trap port koji se koristi za usporavanje dolaznih veza. Ako se sistem treće strane poveže na ovaj port, nećete moći brzo da zatvorite vezu. Morat će potrošiti svoje sistemske resurse i pričekati da istekne vremensko ograničenje veze ili je ručno prekinuti.
Najčešće se tarpiti koriste za zaštitu. Tehnika je prvo razvijena za zaštitu od kompjuterskih crva. A sada se može iskoristiti da uništi živote spamera i istraživača koji se bave širokim skeniranjem svih IP adresa zaredom (primjeri na Habré-u:
Jedan od sistemskih administratora po imenu Chris Wellons očigledno se umorio od gledanja ove sramote - i napisao je mali program
Instalacija uslužnog programa:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Pravilno implementiran tarpit će oduzeti više resursa od napadača nego od vas. Ali nije čak ni u pitanju resursa. Autor
U radnom režimu, Endlessh server treba instalirati na uobičajeni port 22, gdje huligani masovno kucaju. Standardne sigurnosne preporuke uvijek savjetuju premještanje SSH-a na drugi port, što odmah smanjuje veličinu dnevnika za red veličine.
Chris Wellons kaže da njegov program koristi jedan paragraf specifikacije SSH-
.
To je upravo ono što Endlessh program radi: it šalje beskonačno tok nasumično generiranih podataka, koji su u skladu s RFC 4253, odnosno šalju prije provjere autentičnosti, a svaki red počinje sa SSH-
i ne prelazi 255 znakova, uključujući znak za završetak reda. Generalno, sve je po standardu.
Standardno, program čeka 10 sekundi između slanja paketa. Ovo sprečava da klijent bude istekao, tako da će klijent biti zauvek zarobljen.
Budući da se podaci šalju prije primjene kriptografije, program je izuzetno jednostavan. Ne mora implementirati nikakve šifre i podržava više protokola.
Autor je pokušao osigurati da uslužni program troši minimum resursa i radi potpuno neprimjetno na mašini. Za razliku od modernih antivirusa i drugih „sigurnosnih sistema“, ne bi trebalo da usporava vaš računar. Uspio je minimizirati i promet i potrošnju memorije zbog malo lukavije softverske implementacije. Ako bi jednostavno pokrenuo poseban proces na novoj vezi, onda bi potencijalni napadači mogli pokrenuti DDoS napad otvaranjem više veza kako bi iscrpili resurse na mašini. Jedna nit po vezi takođe nije najbolja opcija, jer će kernel trošiti resurse na upravljanje nitima.
Zato je Chris Wellons odabrao najlakšu opciju za Endlessh: server s jednim niti poll(2)
, gdje klijenti u trap-u ne troše praktično nikakve dodatne resurse, ne računajući socket objekat u kernelu i još 78 bajtova za praćenje u Endlesshu. Kako bi se izbjeglo dodjeljivanje bafera za primanje i slanje za svakog klijenta, Endlessh otvara utičnicu za direktni pristup i direktno prevodi TCP pakete, zaobilazeći gotovo cijeli TCP/IP stog operativnog sistema. Dolazni bafer uopšte nije potreban, jer nas ne zanimaju dolazni podaci.
Autor to kaže u vrijeme svog programa
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 je idealan za pisanje tarpita. Na primjer, ova kuka će zamrznuti Firefox, Chrome ili bilo koji drugi klijent koji pokušava da se poveže na vaš HTTP server na mnogo sati:
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 je odličan alat za kažnjavanje onlajn nasilnika. Istina, postoji određeni rizik, naprotiv, da im se skrene pažnja na neobično ponašanje određenog servera. Neko
čvorišta:
Python, Sigurnost informacija, Softver, Administracija sistema
Tagovi:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Trap (tarpit) za dolazne SSH veze
Nije tajna da je internet veoma neprijateljsko okruženje. Čim podignete server, on je trenutno podvrgnut masovnim napadima i višestrukim skeniranjima. Na primjer
Tarpit je trap port koji se koristi za usporavanje dolaznih veza. Ako se sistem treće strane poveže na ovaj port, nećete moći brzo da zatvorite vezu. Morat će potrošiti svoje sistemske resurse i pričekati da istekne vremensko ograničenje veze ili je ručno prekinuti.
Najčešće se tarpiti koriste za zaštitu. Tehnika je prvo razvijena za zaštitu od kompjuterskih crva. A sada se može iskoristiti da uništi živote spamera i istraživača koji se bave širokim skeniranjem svih IP adresa zaredom (primjeri na Habré-u:
Jedan od sistemskih administratora po imenu Chris Wellons očigledno se umorio od gledanja ove sramote - i napisao je mali program
Instalacija uslužnog programa:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Pravilno implementiran tarpit će oduzeti više resursa od napadača nego od vas. Ali nije čak ni u pitanju resursa. Autor
U radnom režimu, Endlessh server treba instalirati na uobičajeni port 22, gdje huligani masovno kucaju. Standardne sigurnosne preporuke uvijek savjetuju premještanje SSH-a na drugi port, što odmah smanjuje veličinu dnevnika za red veličine.
Chris Wellons kaže da njegov program koristi jedan paragraf specifikacije SSH-
.
To je upravo ono što Endlessh program radi: it šalje beskonačno tok nasumično generiranih podataka, koji su u skladu s RFC 4253, odnosno šalju prije provjere autentičnosti, a svaki red počinje sa SSH-
i ne prelazi 255 znakova, uključujući znak za završetak reda. Generalno, sve je po standardu.
Standardno, program čeka 10 sekundi između slanja paketa. Ovo sprečava da klijent bude istekao, tako da će klijent biti zauvek zarobljen.
Budući da se podaci šalju prije primjene kriptografije, program je izuzetno jednostavan. Ne mora implementirati nikakve šifre i podržava više protokola.
Autor je pokušao osigurati da uslužni program troši minimum resursa i radi potpuno neprimjetno na mašini. Za razliku od modernih antivirusa i drugih „sigurnosnih sistema“, ne bi trebalo da usporava vaš računar. Uspio je minimizirati i promet i potrošnju memorije zbog malo lukavije softverske implementacije. Ako bi jednostavno pokrenuo poseban proces na novoj vezi, onda bi potencijalni napadači mogli pokrenuti DDoS napad otvaranjem više veza kako bi iscrpili resurse na mašini. Jedna nit po vezi takođe nije najbolja opcija, jer će kernel trošiti resurse na upravljanje nitima.
Zato je Chris Wellons odabrao najlakšu opciju za Endlessh: server s jednim niti poll(2)
, gdje klijenti u trap-u ne troše praktično nikakve dodatne resurse, ne računajući socket objekat u kernelu i još 78 bajtova za praćenje u Endlesshu. Kako bi se izbjeglo dodjeljivanje bafera za primanje i slanje za svakog klijenta, Endlessh otvara utičnicu za direktni pristup i direktno prevodi TCP pakete, zaobilazeći gotovo cijeli TCP/IP stog operativnog sistema. Dolazni bafer uopšte nije potreban, jer nas ne zanimaju dolazni podaci.
Autor to kaže u vrijeme svog programa
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 je idealan za pisanje tarpita. Na primjer, ova kuka će zamrznuti Firefox, Chrome ili bilo koji drugi klijent koji pokušava da se poveže na vaš HTTP server na mnogo sati:
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 je odličan alat za kažnjavanje onlajn nasilnika. Istina, postoji određeni rizik, naprotiv, da im se skrene pažnja na neobično ponašanje određenog servera. Neko
izvor: www.habr.com