Не е тайна, че интернет е много враждебна среда. Веднага щом повдигнете сървър, той незабавно е подложен на масивни атаки и множество сканирания. Например
Tarpit е порт за прихващане, използван за забавяне на входящите връзки. Ако система на трета страна се свърже към този порт, няма да можете бързо да затворите връзката. Тя ще трябва да изразходва системните си ресурси и да изчака, докато връзката изтече, или ръчно да я прекрати.
Най-често тарпитите се използват за защита. Техниката е разработена за първи път за защита срещу компютърни червеи. И сега може да се използва, за да съсипе живота на спамери и изследователи, които се занимават с широко сканиране на всички IP адреси подред (примери на Habré:
Един от системните администратори на име Крис Уелънс явно се е уморил да гледа този позор - и той написа малка програма
Инсталиране на помощната програма:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Правилно внедреният tarpit ще отнеме повече ресурси от нападателя, отколкото от вас. Но това дори не е въпрос на ресурси. Автор
В режим на работа сървърът 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, Информационна сигурност, Софтуер, Системна администрация
Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Прихващане (tarpit) за входящи SSH връзки
Не е тайна, че интернет е много враждебна среда. Веднага щом повдигнете сървър, той незабавно е подложен на масивни атаки и множество сканирания. Например
Tarpit е порт за прихващане, използван за забавяне на входящите връзки. Ако система на трета страна се свърже към този порт, няма да можете бързо да затворите връзката. Тя ще трябва да изразходва системните си ресурси и да изчака, докато връзката изтече, или ръчно да я прекрати.
Най-често тарпитите се използват за защита. Техниката е разработена за първи път за защита срещу компютърни червеи. И сега може да се използва, за да съсипе живота на спамери и изследователи, които се занимават с широко сканиране на всички IP адреси подред (примери на Habré:
Един от системните администратори на име Крис Уелънс явно се е уморил да гледа този позор - и той написа малка програма
Инсталиране на помощната програма:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Правилно внедреният tarpit ще отнеме повече ресурси от нападателя, отколкото от вас. Но това дори не е въпрос на ресурси. Автор
В режим на работа сървърът 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