Кирүүчү SSH байланыштары үчүн капкан (tarpit).

Интернет өтө кас чөйрө экени эч кимге жашыруун эмес. Сиз серверди көтөрөрүңүз менен, ал ошол замат массалык чабуулдарга жана бир нече сканерлөөгө дуушар болот. Мисалы коопсуздук кызматкерлеринен бал бул таштанды трафигинин масштабын баалай аласыз. Чынында, орточо серверде трафиктин 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), мында тузактагы кардарлар иш жүзүндө эч кандай кошумча ресурстарды керектебейт, ядродогу розетка объектисин жана Endlesshде көзөмөлдөө үчүн дагы 78 байт. Ар бир кардар үчүн кабыл алуу жана жөнөтүү буферлерин бөлүштүрбөө үчүн, Endlessh түз кирүү розеткасын ачат жана TCP пакеттерин дээрлик бүтүндөй TCP/IP стекти айланып өтүп, түздөн-түз которот. Кирүүчү буфер такыр керек эмес, анткени биз кирүүчү маалыматтарга кызыкпайбыз.

Жазуучу өзүнүн программасы учурунда мындай дейт билбептирмин 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 даректерди кеңири сканерлөө менен алектенген спам жасоочулардын жана изилдөөчүлөрдүн жашоосун бузуу үчүн колдонсо болот (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), мында тузактагы кардарлар иш жүзүндө эч кандай кошумча ресурстарды керектебейт, ядродогу розетка объектисин жана Endlesshде көзөмөлдөө үчүн дагы 78 байт. Ар бир кардар үчүн кабыл алуу жана жөнөтүү буферлерин бөлүштүрбөө үчүн, Endlessh түз кирүү розеткасын ачат жана TCP пакеттерин дээрлик бүтүндөй TCP/IP стекти айланып өтүп, түздөн-түз которот. Кирүүчү буфер такыр керек эмес, анткени биз кирүүчү маалыматтарга кызыкпайбыз.

Жазуучу өзүнүн программасы учурунда мындай дейт билбептирмин 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).

Source: www.habr.com

Комментарий кошуу