Кіріс SSH қосылымдары үшін қақпақ (tarpit).

Жасыратыны жоқ, Интернет өте жауласатын орта. Серверді көтерген бойда ол бірден жаппай шабуылдарға және бірнеше сканерлеуге ұшырайды. Мысалы күзетшілерден бал құмырасы Сіз бұл қоқыс трафигінің ауқымын бағалай аласыз. Шын мәнінде, орташа серверде трафиктің 99% зиянды болуы мүмкін.

Tarpit - кіріс қосылымдарын баяулату үшін қолданылатын қақпақ порты. Осы портқа үшінші тарап жүйесі қосылса, қосылымды жылдам жабу мүмкін болмайды. Ол өзінің жүйелік ресурстарын ысырап етіп, қосылым күту уақыты біткенше күтуге немесе оны қолмен тоқтатуға мәжбүр болады.

Көбінесе брезент қорғаныс үшін қолданылады. Техника алғаш рет компьютерлік құрттардан қорғау үшін жасалған. Енді оны қатарынан барлық IP мекенжайларын кең көлемде сканерлеумен айналысатын спам жіберушілер мен зерттеушілердің өмірін бұзу үшін пайдалануға болады (Хабредегі мысалдар: Австрия, Украина).

Крис Веллонс есімді жүйелік әкімшілердің бірі бұл масқараны көруден шаршаған сияқты - және ол шағын бағдарлама жазды. Шексіз, кіріс қосылымдарды баяулататын 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), мұнда тұзақтағы клиенттер іс жүзінде ешқандай қосымша ресурстарды тұтынбайды, ядродағы ұяшық нысанын және Endlessh жүйесінде бақылау үшін тағы 78 байтты есептемегенде. Әрбір клиент үшін қабылдау және жіберу буферлерін бөлуді болдырмау үшін Endlessh тікелей кіру ұясын ашады және TCP/IP операциялық жүйесінің барлық дерлік стегін айналып өтіп, TCP пакеттерін тікелей аударады. Кіріс буфері мүлдем қажет емес, өйткені біз кіріс деректеріне қызығушылық танытпаймыз.

Бұл туралы автор өз бағдарламасы кезінде айтады білмедім Python's asycio және басқа тарпиттер бар екендігі туралы. Егер ол asycio туралы білсе, ол өзінің утилитасын Python-да бар болғаны 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())

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 - желідегі бұзақыларды жазалаудың тамаша құралы. Рас, олардың назарын белгілі бір сервердің әдеттен тыс әрекетіне аударудың кейбір қаупі бар. Біреу кек алу туралы ойлауы мүмкін және сіздің IP-ге мақсатты DDoS шабуылы. Дегенмен, әзірге мұндай жағдайлар болған жоқ және тарпиттер керемет жұмыс істейді.

Хабтар:
Python, Ақпараттық қауіпсіздік, Бағдарламалық қамтамасыз ету, Жүйені басқару

Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Кіріс SSH қосылымдары үшін қақпақ (tarpit).

Жасыратыны жоқ, Интернет өте жауласатын орта. Серверді көтерген бойда ол бірден жаппай шабуылдарға және бірнеше сканерлеуге ұшырайды. Мысалы күзетшілерден бал құмырасы Сіз бұл қоқыс трафигінің ауқымын бағалай аласыз. Шын мәнінде, орташа серверде трафиктің 99% зиянды болуы мүмкін.

Tarpit - кіріс қосылымдарын баяулату үшін қолданылатын қақпақ порты. Осы портқа үшінші тарап жүйесі қосылса, қосылымды жылдам жабу мүмкін болмайды. Ол өзінің жүйелік ресурстарын ысырап етіп, қосылым күту уақыты біткенше күтуге немесе оны қолмен тоқтатуға мәжбүр болады.

Көбінесе брезент қорғаныс үшін қолданылады. Техника алғаш рет компьютерлік құрттардан қорғау үшін жасалған. Енді оны қатарынан барлық IP мекенжайларын кең көлемде сканерлеумен айналысатын спам жіберушілер мен зерттеушілердің өмірін бұзу үшін пайдалануға болады (Хабредегі мысалдар: Австрия, Украина).

Крис Веллонс есімді жүйелік әкімшілердің бірі бұл масқараны көруден шаршаған сияқты - және ол шағын бағдарлама жазды. Шексіз, кіріс қосылымдарды баяулататын 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), мұнда тұзақтағы клиенттер іс жүзінде ешқандай қосымша ресурстарды тұтынбайды, ядродағы ұяшық нысанын және Endlessh жүйесінде бақылау үшін тағы 78 байтты есептемегенде. Әрбір клиент үшін қабылдау және жіберу буферлерін бөлуді болдырмау үшін Endlessh тікелей кіру ұясын ашады және TCP/IP операциялық жүйесінің барлық дерлік стегін айналып өтіп, TCP пакеттерін тікелей аударады. Кіріс буфері мүлдем қажет емес, өйткені біз кіріс деректеріне қызығушылық танытпаймыз.

Бұл туралы автор өз бағдарламасы кезінде айтады білмедім Python's asycio және басқа тарпиттер бар екендігі туралы. Егер ол asycio туралы білсе, ол өзінің утилитасын Python-да бар болғаны 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())

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 - желідегі бұзақыларды жазалаудың тамаша құралы. Рас, олардың назарын белгілі бір сервердің әдеттен тыс әрекетіне аударудың кейбір қаупі бар. Біреу кек алу туралы ойлауы мүмкін және сіздің IP-ге мақсатты DDoS шабуылы. Дегенмен, әзірге мұндай жағдайлар болған жоқ және тарпиттер керемет жұмыс істейді.

Кіріс SSH қосылымдары үшін қақпақ (tarpit).

Ақпарат көзі: www.habr.com

пікір қалдыру