Не е тајна дека Интернетот е многу непријателска средина. Веднаш штом ќе подигнете сервер, тој веднаш е подложен на масовни напади и повеќекратни скенирања. На пример
Tarpit е приклучок за замка што се користи за забавување на дојдовните врски. Ако на оваа порта се поврзе систем од трета страна, нема да можете брзо да ја затворите врската. Таа ќе мора да ги троши своите системски ресурси и да чека да истече времето на конекцијата или рачно да го прекине.
Најчесто за заштита се користат цедилници. Техниката за прв пат беше развиена за заштита од компјутерски црви. И сега може да се користи за да се уништи животот на спамери и истражувачи кои се занимаваат со широко скенирање на сите IP адреси по ред (примери на Habré:
На еден од системските администратори по име Крис Велонс очигледно му здосади да го гледа овој срам - и напиша мала програма
Инсталација на алатката:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Правилно имплементираниот тарпит ќе одземе повеќе ресурси од напаѓачот отколку од вас. Но, не е ни прашање на ресурси. Автор
Во режим на работа, серверот Endlessh треба да се инсталира на вообичаената порта 22, каде што масовно тропаат хулиганите. Стандардните безбедносни препораки секогаш советуваат преместување на SSH на друга порта, што веднаш ја намалува големината на дневниците по ред на големина.
Крис Велонс вели дека неговата програма користи еден параграф од спецификацијата SSH-
.
Токму тоа го прави програмата Endlessh: тоа испраќа бесконечно проток на случајно генерирани податоци, кои се во согласност со RFC 4253, односно испраќаат пред автентикација и секоја линија започнува со SSH-
и не надминува 255 знаци, вклучувајќи го и знакот за крај на линијата. Во принцип, сè е според стандардот.
Стандардно, програмата чека 10 секунди помеѓу испраќањето пакети. Ова го спречува клиентот да истече, така што клиентот ќе остане засекогаш заробен.
Бидејќи податоците се испраќаат пред да се примени криптографијата, програмата е исклучително едноставна. Не треба да имплементира никакви шифри и поддржува повеќе протоколи.
Авторот се обиде да осигура дека алатката троши минимум ресурси и работи целосно незабележано на машината. За разлика од современите антивируси и другите „безбедносни системи“, тој не треба да го успорува вашиот компјутер. Тој успеа да ги минимизира и сообраќајот и потрошувачката на меморија поради малку полукавата имплементација на софтвер. Ако едноставно започне посебен процес на нова врска, тогаш потенцијалните напаѓачи би можеле да започнат DDoS напад со отворање на повеќе врски за да ги исцрпат ресурсите на машината. Една нишка по конекција, исто така, не е најдобрата опција, бидејќи кернелот ќе троши ресурси за управување со нишки.
Затоа Крис Велонс ја избра најлесната опција за Endlessh: сервер со една нишка poll(2)
, каде што клиентите во стапицата практично не трошат дополнителни ресурси, не сметајќи го сокетот објект во кернелот и уште 78 бајти за следење во Endlessh. За да не мора да распределува бафери за примање и испраќање за секој клиент, Endlessh отвора сокет за директен пристап и директно ги преведува TCP пакетите, заобиколувајќи го речиси целиот оџак TCP/IP на оперативниот систем. Дојдовниот бафер воопшто не е потребен, бидејќи не нè интересираат дојдовните податоци.
Тоа го кажува авторот во времето на неговата програма
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 е идеален за пишување тарпити. На пример, оваа кука ќе ги замрзне Firefox, Chrome или кој било друг клиент што се обидува да се поврзе со вашиот HTTP сервер многу часови:
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 е одлична алатка за казнување на онлајн насилниците. Точно, постои одреден ризик, напротив, да се привлече нивното внимание на невообичаеното однесување на одреден сервер. Некој
Хабови:
Python, Информациска безбедност, Софтвер, Системска администрација
Тагови:
SSH, Endlesssh, tarpit, tarpit, trap, asycio
Стапица (tarpit) за дојдовни SSH конекции
Не е тајна дека Интернетот е многу непријателска средина. Веднаш штом ќе подигнете сервер, тој веднаш е подложен на масовни напади и повеќекратни скенирања. На пример
Tarpit е приклучок за замка што се користи за забавување на дојдовните врски. Ако на оваа порта се поврзе систем од трета страна, нема да можете брзо да ја затворите врската. Таа ќе мора да ги троши своите системски ресурси и да чека да истече времето на конекцијата или рачно да го прекине.
Најчесто за заштита се користат цедилници. Техниката за прв пат беше развиена за заштита од компјутерски црви. И сега може да се користи за да се уништи животот на спамери и истражувачи кои се занимаваат со широко скенирање на сите IP адреси по ред (примери на Habré:
На еден од системските администратори по име Крис Велонс очигледно му здосади да го гледа овој срам - и напиша мала програма
Инсталација на алатката:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Правилно имплементираниот тарпит ќе одземе повеќе ресурси од напаѓачот отколку од вас. Но, не е ни прашање на ресурси. Автор
Во режим на работа, серверот Endlessh треба да се инсталира на вообичаената порта 22, каде што масовно тропаат хулиганите. Стандардните безбедносни препораки секогаш советуваат преместување на SSH на друга порта, што веднаш ја намалува големината на дневниците по ред на големина.
Крис Велонс вели дека неговата програма користи еден параграф од спецификацијата SSH-
.
Токму тоа го прави програмата Endlessh: тоа испраќа бесконечно проток на случајно генерирани податоци, кои се во согласност со RFC 4253, односно испраќаат пред автентикација и секоја линија започнува со SSH-
и не надминува 255 знаци, вклучувајќи го и знакот за крај на линијата. Во принцип, сè е според стандардот.
Стандардно, програмата чека 10 секунди помеѓу испраќањето пакети. Ова го спречува клиентот да истече, така што клиентот ќе остане засекогаш заробен.
Бидејќи податоците се испраќаат пред да се примени криптографијата, програмата е исклучително едноставна. Не треба да имплементира никакви шифри и поддржува повеќе протоколи.
Авторот се обиде да осигура дека алатката троши минимум ресурси и работи целосно незабележано на машината. За разлика од современите антивируси и другите „безбедносни системи“, тој не треба да го успорува вашиот компјутер. Тој успеа да ги минимизира и сообраќајот и потрошувачката на меморија поради малку полукавата имплементација на софтвер. Ако едноставно започне посебен процес на нова врска, тогаш потенцијалните напаѓачи би можеле да започнат DDoS напад со отворање на повеќе врски за да ги исцрпат ресурсите на машината. Една нишка по конекција, исто така, не е најдобрата опција, бидејќи кернелот ќе троши ресурси за управување со нишки.
Затоа Крис Велонс ја избра најлесната опција за Endlessh: сервер со една нишка poll(2)
, каде што клиентите во стапицата практично не трошат дополнителни ресурси, не сметајќи го сокетот објект во кернелот и уште 78 бајти за следење во Endlessh. За да не мора да распределува бафери за примање и испраќање за секој клиент, Endlessh отвора сокет за директен пристап и директно ги преведува TCP пакетите, заобиколувајќи го речиси целиот оџак TCP/IP на оперативниот систем. Дојдовниот бафер воопшто не е потребен, бидејќи не нè интересираат дојдовните податоци.
Тоа го кажува авторот во времето на неговата програма
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 е идеален за пишување тарпити. На пример, оваа кука ќе ги замрзне Firefox, Chrome или кој било друг клиент што се обидува да се поврзе со вашиот HTTP сервер многу часови:
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 е одлична алатка за казнување на онлајн насилниците. Точно, постои одреден ризик, напротив, да се привлече нивното внимание на невообичаеното однесување на одреден сервер. Некој
Извор: www.habr.com