Стапица (tarpit) за дојдовни SSH конекции

Не е тајна дека Интернетот е многу непријателска средина. Веднаш штом ќе подигнете сервер, тој веднаш е подложен на масовни напади и повеќекратни скенирања. На пример Honeypot од чуварите можете да го процените размерот на овој сообраќај со ѓубре. Всушност, на просечниот сервер, 99% од сообраќајот може да биде злонамерен.

Tarpit е приклучок за замка што се користи за забавување на дојдовните врски. Ако на оваа порта се поврзе систем од трета страна, нема да можете брзо да ја затворите врската. Таа ќе мора да ги троши своите системски ресурси и да чека да истече времето на конекцијата или рачно да го прекине.

Најчесто за заштита се користат цедилници. Техниката за прв пат беше развиена за заштита од компјутерски црви. И сега може да се користи за да се уништи животот на спамери и истражувачи кои се занимаваат со широко скенирање на сите IP адреси по ред (примери на Habré: Австрија, Украина).

На еден од системските администратори по име Крис Велонс очигледно му здосади да го гледа овој срам - и напиша мала програма Бескрајна, тарпит за SSH што ги успорува дојдовните врски. Програмата отвора порта (стандардната порта за тестирање е 2222) и се преправа дека е SSH сервер, но во реалноста воспоставува бескрајна врска со дојдовниот клиент додека не се откаже. Ова може да продолжи неколку дена или повеќе додека клиентот не падне.

Инсталација на алатката:

$ make
$ ./endlessh &
$ ssh -p2222 localhost

Правилно имплементираниот тарпит ќе одземе повеќе ресурси од напаѓачот отколку од вас. Но, не е ни прашање на ресурси. Автор пишувадека програмата предизвикува зависност. Во моментов има 27 клиенти заробени, некои од нив се поврзани со недели. Во шпицот на активност, 1378 клиенти биле заробени 20 часа!

Во режим на работа, серверот Endlessh треба да се инсталира на вообичаената порта 22, каде што масовно тропаат хулиганите. Стандардните безбедносни препораки секогаш советуваат преместување на SSH на друга порта, што веднаш ја намалува големината на дневниците по ред на големина.

Крис Велонс вели дека неговата програма користи еден параграф од спецификацијата RFC 4253 на протоколот SSH. Веднаш откако ќе се воспостави TCP врска, но пред да се примени криптографијата, двете страни мора да испратат низа за идентификација. И има и забелешка: „Серверот МОЖЕ да испрати други редови на податоци пред да го испрати редот за верзија“. И Нема ограничување за обемот на овие податоци, само треба да ја започнете секоја линија со SSH-.

Токму тоа го прави програмата Endlessh: тоа испраќа бесконечно проток на случајно генерирани податоци, кои се во согласност со RFC 4253, односно испраќаат пред автентикација и секоја линија започнува со SSH- и не надминува 255 знаци, вклучувајќи го и знакот за крај на линијата. Во принцип, сè е според стандардот.

Стандардно, програмата чека 10 секунди помеѓу испраќањето пакети. Ова го спречува клиентот да истече, така што клиентот ќе остане засекогаш заробен.

Бидејќи податоците се испраќаат пред да се примени криптографијата, програмата е исклучително едноставна. Не треба да имплементира никакви шифри и поддржува повеќе протоколи.

Авторот се обиде да осигура дека алатката троши минимум ресурси и работи целосно незабележано на машината. За разлика од современите антивируси и другите „безбедносни системи“, тој не треба да го успорува вашиот компјутер. Тој успеа да ги минимизира и сообраќајот и потрошувачката на меморија поради малку полукавата имплементација на софтвер. Ако едноставно започне посебен процес на нова врска, тогаш потенцијалните напаѓачи би можеле да започнат DDoS напад со отворање на повеќе врски за да ги исцрпат ресурсите на машината. Една нишка по конекција, исто така, не е најдобрата опција, бидејќи кернелот ќе троши ресурси за управување со нишки.

Затоа Крис Велонс ја избра најлесната опција за Endlessh: сервер со една нишка poll(2), каде што клиентите во стапицата практично не трошат дополнителни ресурси, не сметајќи го сокетот објект во кернелот и уште 78 бајти за следење во Endlessh. За да не мора да распределува бафери за примање и испраќање за секој клиент, Endlessh отвора сокет за директен пристап и директно ги преведува TCP пакетите, заобиколувајќи го речиси целиот оџак TCP/IP на оперативниот систем. Дојдовниот бафер воопшто не е потребен, бидејќи не нè интересираат дојдовните податоци.

Тоа го кажува авторот во времето на неговата програма не знаев за постоењето на Python's assycio и други тарпити. Ако знаел за asycio, би можел да ја спроведе својата алатка во само 18 линии во 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 е идеален за пишување тарпити. На пример, оваа кука ќе ги замрзне 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 е одлична алатка за казнување на онлајн насилниците. Точно, постои одреден ризик, напротив, да се привлече нивното внимание на невообичаеното однесување на одреден сервер. Некој може да размислува за одмазда и насочен DDoS напад на вашата IP адреса. Сепак, досега немало такви случаи, а тапитите одлично функционираат.

Хабови:
Python, Информациска безбедност, Софтвер, Системска администрација

Тагови:
SSH, Endlesssh, tarpit, tarpit, trap, asycio
Стапица (tarpit) за дојдовни SSH конекции

Не е тајна дека Интернетот е многу непријателска средина. Веднаш штом ќе подигнете сервер, тој веднаш е подложен на масовни напади и повеќекратни скенирања. На пример Honeypot од чуварите можете да го процените размерот на овој сообраќај со ѓубре. Всушност, на просечниот сервер, 99% од сообраќајот може да биде злонамерен.

Tarpit е приклучок за замка што се користи за забавување на дојдовните врски. Ако на оваа порта се поврзе систем од трета страна, нема да можете брзо да ја затворите врската. Таа ќе мора да ги троши своите системски ресурси и да чека да истече времето на конекцијата или рачно да го прекине.

Најчесто за заштита се користат цедилници. Техниката за прв пат беше развиена за заштита од компјутерски црви. И сега може да се користи за да се уништи животот на спамери и истражувачи кои се занимаваат со широко скенирање на сите IP адреси по ред (примери на Habré: Австрија, Украина).

На еден од системските администратори по име Крис Велонс очигледно му здосади да го гледа овој срам - и напиша мала програма Бескрајна, тарпит за SSH што ги успорува дојдовните врски. Програмата отвора порта (стандардната порта за тестирање е 2222) и се преправа дека е SSH сервер, но во реалноста воспоставува бескрајна врска со дојдовниот клиент додека не се откаже. Ова може да продолжи неколку дена или повеќе додека клиентот не падне.

Инсталација на алатката:

$ make
$ ./endlessh &
$ ssh -p2222 localhost

Правилно имплементираниот тарпит ќе одземе повеќе ресурси од напаѓачот отколку од вас. Но, не е ни прашање на ресурси. Автор пишувадека програмата предизвикува зависност. Во моментов има 27 клиенти заробени, некои од нив се поврзани со недели. Во шпицот на активност, 1378 клиенти биле заробени 20 часа!

Во режим на работа, серверот Endlessh треба да се инсталира на вообичаената порта 22, каде што масовно тропаат хулиганите. Стандардните безбедносни препораки секогаш советуваат преместување на SSH на друга порта, што веднаш ја намалува големината на дневниците по ред на големина.

Крис Велонс вели дека неговата програма користи еден параграф од спецификацијата RFC 4253 на протоколот SSH. Веднаш откако ќе се воспостави TCP врска, но пред да се примени криптографијата, двете страни мора да испратат низа за идентификација. И има и забелешка: „Серверот МОЖЕ да испрати други редови на податоци пред да го испрати редот за верзија“. И Нема ограничување за обемот на овие податоци, само треба да ја започнете секоја линија со SSH-.

Токму тоа го прави програмата Endlessh: тоа испраќа бесконечно проток на случајно генерирани податоци, кои се во согласност со RFC 4253, односно испраќаат пред автентикација и секоја линија започнува со SSH- и не надминува 255 знаци, вклучувајќи го и знакот за крај на линијата. Во принцип, сè е според стандардот.

Стандардно, програмата чека 10 секунди помеѓу испраќањето пакети. Ова го спречува клиентот да истече, така што клиентот ќе остане засекогаш заробен.

Бидејќи податоците се испраќаат пред да се примени криптографијата, програмата е исклучително едноставна. Не треба да имплементира никакви шифри и поддржува повеќе протоколи.

Авторот се обиде да осигура дека алатката троши минимум ресурси и работи целосно незабележано на машината. За разлика од современите антивируси и другите „безбедносни системи“, тој не треба да го успорува вашиот компјутер. Тој успеа да ги минимизира и сообраќајот и потрошувачката на меморија поради малку полукавата имплементација на софтвер. Ако едноставно започне посебен процес на нова врска, тогаш потенцијалните напаѓачи би можеле да започнат DDoS напад со отворање на повеќе врски за да ги исцрпат ресурсите на машината. Една нишка по конекција, исто така, не е најдобрата опција, бидејќи кернелот ќе троши ресурси за управување со нишки.

Затоа Крис Велонс ја избра најлесната опција за Endlessh: сервер со една нишка poll(2), каде што клиентите во стапицата практично не трошат дополнителни ресурси, не сметајќи го сокетот објект во кернелот и уште 78 бајти за следење во Endlessh. За да не мора да распределува бафери за примање и испраќање за секој клиент, Endlessh отвора сокет за директен пристап и директно ги преведува TCP пакетите, заобиколувајќи го речиси целиот оџак TCP/IP на оперативниот систем. Дојдовниот бафер воопшто не е потребен, бидејќи не нè интересираат дојдовните податоци.

Тоа го кажува авторот во времето на неговата програма не знаев за постоењето на Python's assycio и други тарпити. Ако знаел за asycio, би можел да ја спроведе својата алатка во само 18 линии во 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 е идеален за пишување тарпити. На пример, оваа кука ќе ги замрзне 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 е одлична алатка за казнување на онлајн насилниците. Точно, постои одреден ризик, напротив, да се привлече нивното внимание на невообичаеното однесување на одреден сервер. Некој може да размислува за одмазда и насочен DDoS напад на вашата IP адреса. Сепак, досега немало такви случаи, а тапитите одлично функционираат.

Стапица (tarpit) за дојдовни SSH конекции

Извор: www.habr.com

Додадете коментар