Трап (тарпит) за долазне ССХ везе

Није тајна да је Интернет веома непријатељско окружење. Чим подигнете сервер, он је тренутно подвргнут масовним нападима и вишеструким скенирањима. На пример лонац од чувара можете проценити размере овог саобраћаја смећа. У ствари, на просечном серверу, 99% саобраћаја може бити злонамерно.

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

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

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

Инсталација услужног програма:

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

Правилно примењена тарпит ће одузети више ресурса од нападача него од вас. Али није чак ни у питању ресурса. Аутор пишеда програм изазива зависност. Тренутно има 27 клијената у замци, од којих су неки повезани недељама. На врхунцу активности, 1378 клијената је било заробљено 20 сати!

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

Крис Велонс каже да његов програм користи један пасус спецификације РФЦ КСНУМКС на ССХ протокол. Одмах након успостављања ТЦП везе, али пре него што се примени криптографија, обе стране морају да пошаљу идентификациони низ. А ту је и напомена: „Сервер МОЖЕ да пошаље друге редове података пре слања реда верзије“. И без лимита на обиму ових података, само треба да почнете сваки ред са SSH-.

Управо то ради програм Ендлессх: ит шаље бескрајан ток насумично генерисаних података, који су у складу са РФЦ 4253, односно шаљу пре аутентификације, а сваки ред почиње са SSH- и не прелази 255 знакова, укључујући знак за завршетак реда. Генерално, све је по стандарду.

Подразумевано, програм чека 10 секунди између слања пакета. Ово спречава да клијент буде истекао, тако да ће клијент бити заувек заробљен.

Пошто се подаци шаљу пре примене криптографије, програм је изузетно једноставан. Не мора да имплементира никакве шифре и подржава више протокола.

Аутор је покушао да обезбеди да услужни програм троши минимум ресурса и ради потпуно непримећено на машини. За разлику од модерних антивируса и других „сигурносних система“, не би требало да успорава ваш рачунар. Успео је да минимизира и саобраћај и потрошњу меморије због мало лукавије софтверске имплементације. Ако би једноставно покренуо посебан процес на новој вези, онда би потенцијални нападачи могли покренути ДДоС напад отварањем више веза како би исцрпили ресурсе на машини. Једна нит по вези такође није најбоља опција, јер ће кернел трошити ресурсе на управљање нитима.

Зато је Цхрис Веллонс одабрао најлакшу опцију за Ендлессх: сервер са једном нити poll(2), где клијенти у трап-у не троше практично никакве додатне ресурсе, не рачунајући соцкет објекат у језгру и још 78 бајтова за праћење у Ендлессху. Да би избегао доделу бафера за пријем и слање за сваког клијента, Ендлессх отвара утичницу за директни приступ и директно преводи ТЦП пакете, заобилазећи скоро цео ТЦП/ИП стек оперативног система. Долазни бафер уопште није потребан, јер нас не занимају долазни подаци.

Аутор то каже у време свог програма нисам знао о постојању Пајтоновог асицио-а и других тарпита. Да је знао за асицио, могао би да имплементира своју корисност у само 18 редова у Питхон-у:

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())

Асинцио је идеалан за писање тарпита. На пример, ова кука ће замрзнути Фирефок, Цхроме или било који други клијент који покушава да се повеже са вашим ХТТП сервером на много сати:

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())

Тарпит је одличан алат за кажњавање онлајн насилника. Истина, постоји ризик, напротив, да им се скрене пажња на необично понашање одређеног сервера. Неко можда размишљати о освети и циљани ДДоС напад на ваш ИП. Међутим, до сада није било таквих случајева, а цераде одлично раде.

чворишта:
Питхон, безбедност информација, софтвер, системска администрација

Ознаке:
ССХ, Ендлессх, тарпит, тарпит, трап, асицио
Трап (тарпит) за долазне ССХ везе

Није тајна да је Интернет веома непријатељско окружење. Чим подигнете сервер, он је тренутно подвргнут масовним нападима и вишеструким скенирањима. На пример лонац од чувара можете проценити размере овог саобраћаја смећа. У ствари, на просечном серверу, 99% саобраћаја може бити злонамерно.

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

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

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

Инсталација услужног програма:

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

Правилно примењена тарпит ће одузети више ресурса од нападача него од вас. Али није чак ни у питању ресурса. Аутор пишеда програм изазива зависност. Тренутно има 27 клијената у замци, од којих су неки повезани недељама. На врхунцу активности, 1378 клијената је било заробљено 20 сати!

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

Крис Велонс каже да његов програм користи један пасус спецификације РФЦ КСНУМКС на ССХ протокол. Одмах након успостављања ТЦП везе, али пре него што се примени криптографија, обе стране морају да пошаљу идентификациони низ. А ту је и напомена: „Сервер МОЖЕ да пошаље друге редове података пре слања реда верзије“. И без лимита на обиму ових података, само треба да почнете сваки ред са SSH-.

Управо то ради програм Ендлессх: ит шаље бескрајан ток насумично генерисаних података, који су у складу са РФЦ 4253, односно шаљу пре аутентификације, а сваки ред почиње са SSH- и не прелази 255 знакова, укључујући знак за завршетак реда. Генерално, све је по стандарду.

Подразумевано, програм чека 10 секунди између слања пакета. Ово спречава да клијент буде истекао, тако да ће клијент бити заувек заробљен.

Пошто се подаци шаљу пре примене криптографије, програм је изузетно једноставан. Не мора да имплементира никакве шифре и подржава више протокола.

Аутор је покушао да обезбеди да услужни програм троши минимум ресурса и ради потпуно непримећено на машини. За разлику од модерних антивируса и других „сигурносних система“, не би требало да успорава ваш рачунар. Успео је да минимизира и саобраћај и потрошњу меморије због мало лукавије софтверске имплементације. Ако би једноставно покренуо посебан процес на новој вези, онда би потенцијални нападачи могли покренути ДДоС напад отварањем више веза како би исцрпили ресурсе на машини. Једна нит по вези такође није најбоља опција, јер ће кернел трошити ресурсе на управљање нитима.

Зато је Цхрис Веллонс одабрао најлакшу опцију за Ендлессх: сервер са једном нити poll(2), где клијенти у трап-у не троше практично никакве додатне ресурсе, не рачунајући соцкет објекат у језгру и још 78 бајтова за праћење у Ендлессху. Да би избегао доделу бафера за пријем и слање за сваког клијента, Ендлессх отвара утичницу за директни приступ и директно преводи ТЦП пакете, заобилазећи скоро цео ТЦП/ИП стек оперативног система. Долазни бафер уопште није потребан, јер нас не занимају долазни подаци.

Аутор то каже у време свог програма нисам знао о постојању Пајтоновог асицио-а и других тарпита. Да је знао за асицио, могао би да имплементира своју корисност у само 18 редова у Питхон-у:

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())

Асинцио је идеалан за писање тарпита. На пример, ова кука ће замрзнути Фирефок, Цхроме или било који други клијент који покушава да се повеже са вашим ХТТП сервером на много сати:

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())

Тарпит је одличан алат за кажњавање онлајн насилника. Истина, постоји ризик, напротив, да им се скрене пажња на необично понашање одређеног сервера. Неко можда размишљати о освети и циљани ДДоС напад на ваш ИП. Међутим, до сада није било таквих случајева, а цераде одлично раде.

Трап (тарпит) за долазне ССХ везе

Извор: ввв.хабр.цом

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