Kiruvchi SSH ulanishlari uchun tuzoq (tarpit).

Hech kimga sir emaski, Internet juda dushman muhit. Serverni ko'targaningizdan so'ng, u darhol katta hujumlarga va bir nechta skanerlarga duchor bo'ladi. Masalan qo'riqchilardan honeypot bu axlat trafigining ko'lamini taxmin qilishingiz mumkin. Aslida, o'rtacha serverda trafikning 99% zararli bo'lishi mumkin.

Tarpit - kiruvchi ulanishlarni sekinlashtirish uchun ishlatiladigan tuzoq porti. Agar uchinchi tomon tizimi ushbu portga ulansa, ulanishni tezda yopa olmaysiz. U tizim resurslarini behuda sarflashi va ulanish vaqti tugaguncha kutishi yoki uni qo'lda tugatishi kerak bo'ladi.

Ko'pincha tarpitlar himoya qilish uchun ishlatiladi. Texnika birinchi marta kompyuter qurtlaridan himoya qilish uchun ishlab chiqilgan. Va endi u barcha IP manzillarni ketma-ket skanerlash bilan shug'ullanadigan spamerlar va tadqiqotchilarning hayotini buzish uchun ishlatilishi mumkin (Habré-dagi misollar: Avstriya, Ukraina).

Kris Vellons ismli tizim ma'murlaridan biri bu sharmandalikni ko'rishdan charchagan - va u kichik dastur yozgan. Cheksiz, kiruvchi ulanishlarni sekinlashtiradigan SSH uchun tarpit. Dastur portni ochadi (sinov uchun standart port - 2222) va o'zini SSH serveri sifatida ko'rsatadi, lekin aslida u kiruvchi mijoz bilan cheksiz aloqa o'rnatadi, toki u voz kechmaguncha. Bu mijoz tushib qolguncha bir necha kun yoki undan ko'proq davom etishi mumkin.

Yordamchi dasturni o'rnatish:

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

To'g'ri amalga oshirilgan tarpit sizdan ko'ra tajovuzkordan ko'proq resurslarni oladi. Ammo bu hatto resurslar masalasi ham emas. Muallif U yozadidastur qo'shadi. Hozirda 27 mijoz tuzoqqa tushib qolgan, ulardan ba'zilari bir necha hafta davomida ulangan. Faoliyatning eng yuqori cho'qqisida 1378 mijoz 20 soat davomida tuzoqqa tushdi!

Ish rejimida Endlessh serverini bezorilar ommaviy ravishda taqillatgan odatiy 22-portga o'rnatish kerak. Standart xavfsizlik bo'yicha tavsiyalar har doim SSH-ni boshqa portga ko'chirishni maslahat beradi, bu esa jurnallar hajmini kattalik tartibida darhol kamaytiradi.

Kris Vellonsning aytishicha, uning dasturi spetsifikatsiyaning bir paragrafidan foydalanadi QRM 4253 SSH protokoliga. TCP ulanishi o'rnatilgandan so'ng darhol, lekin kriptografiya qo'llanilishidan oldin, ikkala tomon ham identifikatsiya qatorini yuborishlari kerak. Va yana bir eslatma bor: "Server versiyalar qatorini yuborishdan oldin boshqa qator ma'lumotlarni yuborishi mumkin". Va chegara yo'q ushbu ma'lumotlarning hajmi bo'yicha siz har bir qatorni boshlashingiz kerak SSH-.

Endlessh dasturi aynan shunday qiladi: bu yuboradi cheksiz tasodifiy yaratilgan ma'lumotlar oqimi, RFC 4253 ga mos keladi, ya'ni autentifikatsiyadan oldin yuboriladi va har bir satr bilan boshlanadi SSH- va 255 belgidan oshmaydi, shu jumladan satr oxiri belgisi. Umuman olganda, hamma narsa standartga muvofiq.

Odatiy bo'lib, dastur paketlarni yuborish o'rtasida 10 soniya kutadi. Bu mijozning vaqti tugashining oldini oladi, shuning uchun mijoz abadiy tuzoqqa tushadi.

Ma'lumotlar kriptografiya qo'llanilishidan oldin yuborilganligi sababli, dastur juda oddiy. U hech qanday shifrlarni amalga oshirishni talab qilmaydi va bir nechta protokollarni qo'llab-quvvatlaydi.

Muallif yordamchi dastur minimal resurslarni iste'mol qilishini va mashinada butunlay sezilmasligini ta'minlashga harakat qildi. Zamonaviy antiviruslar va boshqa "xavfsizlik tizimlari" dan farqli o'laroq, u kompyuteringizni sekinlashtirmasligi kerak. U biroz ayyorroq dasturiy ta'minotni amalga oshirish tufayli trafikni ham, xotira sarfini ham minimallashtirishga muvaffaq bo'ldi. Agar u shunchaki yangi ulanishda alohida jarayonni ishga tushirgan bo'lsa, potentsial tajovuzkorlar kompyuterdagi resurslarni sarflash uchun bir nechta ulanishlarni ochib, DDoS hujumini boshlashlari mumkin. Har bir ulanish uchun bitta ip ham eng yaxshi variant emas, chunki yadro iplarni boshqarish uchun resurslarni behuda sarflaydi.

Shuning uchun Kris Vellons Endlessh uchun eng engil variantni tanladi: bitta tarmoqli server poll(2), bu erda tuzoqdagi mijozlar yadrodagi rozetka ob'ektini va Endlesshda kuzatish uchun yana 78 baytni hisobga olmaganda, deyarli qo'shimcha resurslarni iste'mol qilmaydi. Har bir mijoz uchun qabul qilish va jo'natish buferlarini ajratishga to'g'ri kelmaslik uchun Endlessh to'g'ridan-to'g'ri kirish rozetkasini ochadi va deyarli butun TCP/IP operatsion tizimining stekini chetlab o'tib, TCP paketlarini to'g'ridan-to'g'ri tarjima qiladi. Kiruvchi bufer umuman kerak emas, chunki biz kiruvchi ma'lumotlarga qiziqmaymiz.

Muallif buni o'z dasturi vaqtida aytadi bilmagan edim Python asycio va boshqa tarpitlarning mavjudligi haqida. Agar u asycio haqida bilsa, u o'z yordam dasturini Python'da atigi 18 qatorda amalga oshirishi mumkin edi:

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 tarpitlarni yozish uchun ideal. Misol uchun, bu ilgak Firefox, Chrome yoki HTTP serveringizga ulanishga harakat qilayotgan boshqa har qanday mijozni bir necha soat davomida muzlatib qo'yadi:

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 - bu onlayn bezorilarni jazolash uchun ajoyib vosita. To'g'ri, aksincha, ularning e'tiborini ma'lum bir serverning g'ayrioddiy xatti-harakatlariga jalb qilish xavfi mavjud. Kimdir qasos haqida o'ylashi mumkin va IP-ga maqsadli DDoS hujumi. Biroq, hozirgacha bunday holatlar bo'lmagan va tarpitlar juda yaxshi ishlaydi.

Hublar:
Python, Axborot xavfsizligi, Dasturiy ta'minot, Tizim boshqaruvi

Tags:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Kiruvchi SSH ulanishlari uchun tuzoq (tarpit).

Hech kimga sir emaski, Internet juda dushman muhit. Serverni ko'targaningizdan so'ng, u darhol katta hujumlarga va bir nechta skanerlarga duchor bo'ladi. Masalan qo'riqchilardan honeypot bu axlat trafigining ko'lamini taxmin qilishingiz mumkin. Aslida, o'rtacha serverda trafikning 99% zararli bo'lishi mumkin.

Tarpit - kiruvchi ulanishlarni sekinlashtirish uchun ishlatiladigan tuzoq porti. Agar uchinchi tomon tizimi ushbu portga ulansa, ulanishni tezda yopa olmaysiz. U tizim resurslarini behuda sarflashi va ulanish vaqti tugaguncha kutishi yoki uni qo'lda tugatishi kerak bo'ladi.

Ko'pincha tarpitlar himoya qilish uchun ishlatiladi. Texnika birinchi marta kompyuter qurtlaridan himoya qilish uchun ishlab chiqilgan. Va endi u barcha IP manzillarni ketma-ket skanerlash bilan shug'ullanadigan spamerlar va tadqiqotchilarning hayotini buzish uchun ishlatilishi mumkin (Habré-dagi misollar: Avstriya, Ukraina).

Kris Vellons ismli tizim ma'murlaridan biri bu sharmandalikni ko'rishdan charchagan - va u kichik dastur yozgan. Cheksiz, kiruvchi ulanishlarni sekinlashtiradigan SSH uchun tarpit. Dastur portni ochadi (sinov uchun standart port - 2222) va o'zini SSH serveri sifatida ko'rsatadi, lekin aslida u kiruvchi mijoz bilan cheksiz aloqa o'rnatadi, toki u voz kechmaguncha. Bu mijoz tushib qolguncha bir necha kun yoki undan ko'proq davom etishi mumkin.

Yordamchi dasturni o'rnatish:

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

To'g'ri amalga oshirilgan tarpit sizdan ko'ra tajovuzkordan ko'proq resurslarni oladi. Ammo bu hatto resurslar masalasi ham emas. Muallif U yozadidastur qo'shadi. Hozirda 27 mijoz tuzoqqa tushib qolgan, ulardan ba'zilari bir necha hafta davomida ulangan. Faoliyatning eng yuqori cho'qqisida 1378 mijoz 20 soat davomida tuzoqqa tushdi!

Ish rejimida Endlessh serverini bezorilar ommaviy ravishda taqillatgan odatiy 22-portga o'rnatish kerak. Standart xavfsizlik bo'yicha tavsiyalar har doim SSH-ni boshqa portga ko'chirishni maslahat beradi, bu esa jurnallar hajmini kattalik tartibida darhol kamaytiradi.

Kris Vellonsning aytishicha, uning dasturi spetsifikatsiyaning bir paragrafidan foydalanadi QRM 4253 SSH protokoliga. TCP ulanishi o'rnatilgandan so'ng darhol, lekin kriptografiya qo'llanilishidan oldin, ikkala tomon ham identifikatsiya qatorini yuborishlari kerak. Va yana bir eslatma bor: "Server versiyalar qatorini yuborishdan oldin boshqa qator ma'lumotlarni yuborishi mumkin". Va chegara yo'q ushbu ma'lumotlarning hajmi bo'yicha siz har bir qatorni boshlashingiz kerak SSH-.

Endlessh dasturi aynan shunday qiladi: bu yuboradi cheksiz tasodifiy yaratilgan ma'lumotlar oqimi, RFC 4253 ga mos keladi, ya'ni autentifikatsiyadan oldin yuboriladi va har bir satr bilan boshlanadi SSH- va 255 belgidan oshmaydi, shu jumladan satr oxiri belgisi. Umuman olganda, hamma narsa standartga muvofiq.

Odatiy bo'lib, dastur paketlarni yuborish o'rtasida 10 soniya kutadi. Bu mijozning vaqti tugashining oldini oladi, shuning uchun mijoz abadiy tuzoqqa tushadi.

Ma'lumotlar kriptografiya qo'llanilishidan oldin yuborilganligi sababli, dastur juda oddiy. U hech qanday shifrlarni amalga oshirishni talab qilmaydi va bir nechta protokollarni qo'llab-quvvatlaydi.

Muallif yordamchi dastur minimal resurslarni iste'mol qilishini va mashinada butunlay sezilmasligini ta'minlashga harakat qildi. Zamonaviy antiviruslar va boshqa "xavfsizlik tizimlari" dan farqli o'laroq, u kompyuteringizni sekinlashtirmasligi kerak. U biroz ayyorroq dasturiy ta'minotni amalga oshirish tufayli trafikni ham, xotira sarfini ham minimallashtirishga muvaffaq bo'ldi. Agar u shunchaki yangi ulanishda alohida jarayonni ishga tushirgan bo'lsa, potentsial tajovuzkorlar kompyuterdagi resurslarni sarflash uchun bir nechta ulanishlarni ochib, DDoS hujumini boshlashlari mumkin. Har bir ulanish uchun bitta ip ham eng yaxshi variant emas, chunki yadro iplarni boshqarish uchun resurslarni behuda sarflaydi.

Shuning uchun Kris Vellons Endlessh uchun eng engil variantni tanladi: bitta tarmoqli server poll(2), bu erda tuzoqdagi mijozlar yadrodagi rozetka ob'ektini va Endlesshda kuzatish uchun yana 78 baytni hisobga olmaganda, deyarli qo'shimcha resurslarni iste'mol qilmaydi. Har bir mijoz uchun qabul qilish va jo'natish buferlarini ajratishga to'g'ri kelmaslik uchun Endlessh to'g'ridan-to'g'ri kirish rozetkasini ochadi va deyarli butun TCP/IP operatsion tizimining stekini chetlab o'tib, TCP paketlarini to'g'ridan-to'g'ri tarjima qiladi. Kiruvchi bufer umuman kerak emas, chunki biz kiruvchi ma'lumotlarga qiziqmaymiz.

Muallif buni o'z dasturi vaqtida aytadi bilmagan edim Python asycio va boshqa tarpitlarning mavjudligi haqida. Agar u asycio haqida bilsa, u o'z yordam dasturini Python'da atigi 18 qatorda amalga oshirishi mumkin edi:

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 tarpitlarni yozish uchun ideal. Misol uchun, bu ilgak Firefox, Chrome yoki HTTP serveringizga ulanishga harakat qilayotgan boshqa har qanday mijozni bir necha soat davomida muzlatib qo'yadi:

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 - bu onlayn bezorilarni jazolash uchun ajoyib vosita. To'g'ri, aksincha, ularning e'tiborini ma'lum bir serverning g'ayrioddiy xatti-harakatlariga jalb qilish xavfi mavjud. Kimdir qasos haqida o'ylashi mumkin va IP-ga maqsadli DDoS hujumi. Biroq, hozirgacha bunday holatlar bo'lmagan va tarpitlar juda yaxshi ishlaydi.

Kiruvchi SSH ulanishlari uchun tuzoq (tarpit).

Manba: www.habr.com

a Izoh qo'shish