Ирж буй SSH холболтуудад зориулсан хавх (tarpit).

Интернэт бол маш дайсагнасан орчин гэдэг нь нууц биш. Та серверээ босгосон даруйдаа асар их хэмжээний халдлагад өртөж, олон удаа сканнердах болно. Жишээлбэл хамгаалалтын ажилтнуудаас зөгийн бал Энэ хогны хөдөлгөөний цар хүрээг та тооцоолж болно. Үнэн хэрэгтээ дундаж сервер дээр траффикийн 99% нь хортой байж болно.

Tarpit нь ирж буй холболтыг удаашруулахад ашигладаг трап порт юм. Хэрэв гуравдагч талын систем энэ порт руу холбогдсон бол та холболтыг хурдан хаах боломжгүй болно. Тэрээр системийн нөөцөө үрж, холболтын хугацаа дуусах хүртэл хүлээх эсвэл гараар дуусгах шаардлагатай болно.

Ихэнхдээ брезентийг хамгаалах зорилгоор ашигладаг. Энэ техникийг анх компьютерийн хорхойноос хамгаалах зорилгоор бүтээжээ. Одоо үүнийг бүх IP хаягийг дараалан сканнердаж буй спам илгээгч, судлаачдын амьдралыг сүйрүүлэхэд ашиглаж болно (Habré дээрх жишээнүүд: Австри, Украйны).

Крис Веллонс хэмээх системийн администраторуудын нэг энэ гутамшигт явдлыг хараад залхсан бололтой жижиг хөтөлбөр бичсэн. Төгсгөлгүй, ирж буй холболтыг удаашруулдаг SSH-д зориулсан tarpit. Программ нь порт нээж (туршилтын өгөгдмөл порт нь 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-ийн asycio болон бусад tarpits байгаа тухай. Хэрэв тэр 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 нь tarpits бичихэд тохиромжтой. Жишээлбэл, энэ дэгээ нь 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 халдлага. Гэсэн хэдий ч өнөөг хүртэл ийм тохиолдол гараагүй бөгөөд tarpits маш сайн ажилладаг.

Төвүүд:
Python, Мэдээллийн аюулгүй байдал, Програм хангамж, Системийн удирдлага

Сэдвийн:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Ирж буй SSH холболтуудад зориулсан хавх (tarpit).

Интернэт бол маш дайсагнасан орчин гэдэг нь нууц биш. Та серверээ босгосон даруйдаа асар их хэмжээний халдлагад өртөж, олон удаа сканнердах болно. Жишээлбэл хамгаалалтын ажилтнуудаас зөгийн бал Энэ хогны хөдөлгөөний цар хүрээг та тооцоолж болно. Үнэн хэрэгтээ дундаж сервер дээр траффикийн 99% нь хортой байж болно.

Tarpit нь ирж буй холболтыг удаашруулахад ашигладаг трап порт юм. Хэрэв гуравдагч талын систем энэ порт руу холбогдсон бол та холболтыг хурдан хаах боломжгүй болно. Тэрээр системийн нөөцөө үрж, холболтын хугацаа дуусах хүртэл хүлээх эсвэл гараар дуусгах шаардлагатай болно.

Ихэнхдээ брезентийг хамгаалах зорилгоор ашигладаг. Энэ техникийг анх компьютерийн хорхойноос хамгаалах зорилгоор бүтээжээ. Одоо үүнийг бүх IP хаягийг дараалан сканнердаж буй спам илгээгч, судлаачдын амьдралыг сүйрүүлэхэд ашиглаж болно (Habré дээрх жишээнүүд: Австри, Украйны).

Крис Веллонс хэмээх системийн администраторуудын нэг энэ гутамшигт явдлыг хараад залхсан бололтой жижиг хөтөлбөр бичсэн. Төгсгөлгүй, ирж буй холболтыг удаашруулдаг SSH-д зориулсан tarpit. Программ нь порт нээж (туршилтын өгөгдмөл порт нь 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-ийн asycio болон бусад tarpits байгаа тухай. Хэрэв тэр 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 нь tarpits бичихэд тохиромжтой. Жишээлбэл, энэ дэгээ нь 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 халдлага. Гэсэн хэдий ч өнөөг хүртэл ийм тохиолдол гараагүй бөгөөд tarpits маш сайн ажилладаг.

Ирж буй SSH холболтуудад зориулсан хавх (tarpit).

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх