Nije tajna da je Internet vrlo neprijateljsko okruženje. Čim podignete poslužitelj, on je trenutno podvrgnut masivnim napadima i višestrukim skeniranjima. Na primjer
Tarpit je trap port koji se koristi za usporavanje dolaznih veza. Ako se sustav treće strane spoji na ovaj priključak, nećete moći brzo zatvoriti vezu. Morat će trošiti svoje sistemske resurse i čekati dok veza ne istekne ili je ručno prekinuti.
Najčešće se za zaštitu koriste cerade. Tehnika je prvo razvijena za zaštitu od računalnih crva. A sada se može koristiti za uništavanje života spamera i istraživača koji se bave širokim skeniranjem svih IP adresa zaredom (primjeri na Habréu:
Jednom od sistemskih administratora po imenu Chris Wellons očito je dosadilo gledati ovu sramotu - te je napisao mali program
Instalacija uslužnog programa:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Pravilno implementiran tarpit oduzet će više resursa od napadača nego od vas. Ali nije čak ni stvar u resursima. Autor
U načinu rada, 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 zapisa za red veličine.
Chris Wellons kaže da njegov program iskorištava jedan paragraf specifikacije SSH-
.
Upravo to čini program Endlessh: to šalje beskrajan tok nasumično generiranih podataka, koji su u skladu s RFC 4253, odnosno šalju se prije autentifikacije, a svaki red počinje s SSH-
i ne prelazi 255 znakova, uključujući znak završetka retka. Općenito, sve je prema standardu.
Prema zadanim postavkama, program čeka 10 sekundi između slanja paketa. Ovo sprječava da klijent istekne, tako da će klijent zauvijek biti zarobljen.
Budući da se podaci šalju prije primjene kriptografije, program je iznimno jednostavan. Ne treba implementirati nikakve šifre i podržava više protokola.
Autor je pokušao osigurati da uslužni program troši najmanje resursa i radi potpuno neprimjetno na stroju. Za razliku od modernih antivirusa i drugih "sigurnosnih sustava", ne bi trebao usporavati vaše računalo. Uspio je minimizirati i promet i potrošnju memorije zahvaljujući malo lukavijoj programskoj implementaciji. Ako je jednostavno pokrenuo zaseban proces na novoj vezi, tada bi potencijalni napadači mogli pokrenuti DDoS napad otvaranjem više veza kako bi iscrpili resurse na računalu. Jedna nit po vezi također nije najbolja opcija, jer će kernel uzalud trošiti resurse na upravljanje nitima.
Zato je Chris Wellons odabrao najlakšu opciju za Endlessh: poslužitelj s jednom niti poll(2)
, gdje klijenti u zamci ne troše praktički nikakve dodatne resurse, ne računajući socket objekt u kernelu i još 78 bajtova za praćenje u Endlesshu. Kako bi se izbjeglo dodjeljivanje međuspremnika za primanje i slanje za svakog klijenta, Endlessh otvara utičnicu s izravnim pristupom i izravno prevodi TCP pakete, zaobilazeći gotovo cijeli TCP/IP stog operativnog sustava. Dolazni međuspremnik uopće nije potreban, jer nas ne zanimaju dolazni podaci.
Autor kaže da 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 se pokušava spojiti na vaš HTTP poslužitelj 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 izvrstan alat za kažnjavanje online nasilnika. Istina, postoji određeni rizik, naprotiv, privlačenja njihove pozornosti na neobično ponašanje određenog poslužitelja. Netko
čvorišta:
Python, Informacijska sigurnost, Softver, Administracija sustava
Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Trap (tarpit) za dolazne SSH veze
Nije tajna da je Internet vrlo neprijateljsko okruženje. Čim podignete poslužitelj, on je trenutno podvrgnut masivnim napadima i višestrukim skeniranjima. Na primjer
Tarpit je trap port koji se koristi za usporavanje dolaznih veza. Ako se sustav treće strane spoji na ovaj priključak, nećete moći brzo zatvoriti vezu. Morat će trošiti svoje sistemske resurse i čekati dok veza ne istekne ili je ručno prekinuti.
Najčešće se za zaštitu koriste cerade. Tehnika je prvo razvijena za zaštitu od računalnih crva. A sada se može koristiti za uništavanje života spamera i istraživača koji se bave širokim skeniranjem svih IP adresa zaredom (primjeri na Habréu:
Jednom od sistemskih administratora po imenu Chris Wellons očito je dosadilo gledati ovu sramotu - te je napisao mali program
Instalacija uslužnog programa:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Pravilno implementiran tarpit oduzet će više resursa od napadača nego od vas. Ali nije čak ni stvar u resursima. Autor
U načinu rada, 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 zapisa za red veličine.
Chris Wellons kaže da njegov program iskorištava jedan paragraf specifikacije SSH-
.
Upravo to čini program Endlessh: to šalje beskrajan tok nasumično generiranih podataka, koji su u skladu s RFC 4253, odnosno šalju se prije autentifikacije, a svaki red počinje s SSH-
i ne prelazi 255 znakova, uključujući znak završetka retka. Općenito, sve je prema standardu.
Prema zadanim postavkama, program čeka 10 sekundi između slanja paketa. Ovo sprječava da klijent istekne, tako da će klijent zauvijek biti zarobljen.
Budući da se podaci šalju prije primjene kriptografije, program je iznimno jednostavan. Ne treba implementirati nikakve šifre i podržava više protokola.
Autor je pokušao osigurati da uslužni program troši najmanje resursa i radi potpuno neprimjetno na stroju. Za razliku od modernih antivirusa i drugih "sigurnosnih sustava", ne bi trebao usporavati vaše računalo. Uspio je minimizirati i promet i potrošnju memorije zahvaljujući malo lukavijoj programskoj implementaciji. Ako je jednostavno pokrenuo zaseban proces na novoj vezi, tada bi potencijalni napadači mogli pokrenuti DDoS napad otvaranjem više veza kako bi iscrpili resurse na računalu. Jedna nit po vezi također nije najbolja opcija, jer će kernel uzalud trošiti resurse na upravljanje nitima.
Zato je Chris Wellons odabrao najlakšu opciju za Endlessh: poslužitelj s jednom niti poll(2)
, gdje klijenti u zamci ne troše praktički nikakve dodatne resurse, ne računajući socket objekt u kernelu i još 78 bajtova za praćenje u Endlesshu. Kako bi se izbjeglo dodjeljivanje međuspremnika za primanje i slanje za svakog klijenta, Endlessh otvara utičnicu s izravnim pristupom i izravno prevodi TCP pakete, zaobilazeći gotovo cijeli TCP/IP stog operativnog sustava. Dolazni međuspremnik uopće nije potreban, jer nas ne zanimaju dolazni podaci.
Autor kaže da 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 se pokušava spojiti na vaš HTTP poslužitelj 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 izvrstan alat za kažnjavanje online nasilnika. Istina, postoji određeni rizik, naprotiv, privlačenja njihove pozornosti na neobično ponašanje određenog poslužitelja. Netko
Izvor: www.habr.com