Интернэт бол маш дайсагнасан орчин гэдэг нь нууц биш. Та серверээ босгосон даруйдаа асар их хэмжээний халдлагад өртөж, олон удаа сканнердах болно. Жишээлбэл
Tarpit нь ирж буй холболтыг удаашруулахад ашигладаг трап порт юм. Хэрэв гуравдагч талын систем энэ порт руу холбогдсон бол та холболтыг хурдан хаах боломжгүй болно. Тэрээр системийн нөөцөө үрж, холболтын хугацаа дуусах хүртэл хүлээх эсвэл гараар дуусгах шаардлагатай болно.
Ихэнхдээ брезентийг хамгаалах зорилгоор ашигладаг. Энэ техникийг анх компьютерийн хорхойноос хамгаалах зорилгоор бүтээжээ. Одоо үүнийг бүх IP хаягийг дараалан сканнердаж буй спам илгээгч, судлаачдын амьдралыг сүйрүүлэхэд ашиглаж болно (Habré дээрх жишээнүүд:
Крис Веллонс хэмээх системийн администраторуудын нэг энэ гутамшигт явдлыг хараад залхсан бололтой жижиг хөтөлбөр бичсэн.
Хэрэгслийг суурилуулах:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Зөв хэрэгжүүлсэн тарпит нь халдагчаас чамаас илүү их нөөцийг авах болно. Гэхдээ энэ нь бүр нөөцийн асуудал биш юм. Зохиогч
Үйлдлийн горимд Endlessh серверийг хулиганууд бөөнөөр нь тогшдог ердийн 22-р порт дээр суулгах шаардлагатай. Аюулгүй байдлын стандарт зөвлөмжүүд нь SSH-ийг өөр порт руу шилжүүлэхийг үргэлж зөвлөдөг бөгөөд энэ нь бүртгэлийн хэмжээг даруй дарааллаар нь багасгадаг.
Крис Веллонс хэлэхдээ, түүний хөтөлбөр нь тодорхойлолтын нэг догол мөрийг ашигладаг SSH-
.
Endlessh программ яг үүнийг хийдэг: энэ илгээдэг хязгааргүй санамсаргүй байдлаар үүсгэгдсэн мэдээллийн урсгал, RFC 4253-д нийцсэн, өөрөөр хэлбэл баталгаажуулахаас өмнө илгээх ба мөр бүр нь дараахаар эхэлдэг. SSH-
мөрийн төгсгөлийн тэмдэгтийг оруулаад 255 тэмдэгтээс хэтрэхгүй. Ерөнхийдөө бүх зүйл стандартын дагуу байдаг.
Анхдагч байдлаар, програм пакет илгээх хооронд 10 секунд хүлээдэг. Энэ нь үйлчлүүлэгчийг хугацаа хэтрүүлэхээс сэргийлдэг тул үйлчлүүлэгч үүрд баригдах болно.
Мэдээллийг криптограф хэрэглэхээс өмнө илгээдэг тул програм нь маш энгийн. Энэ нь ямар ч шифрийг хэрэгжүүлэх шаардлагагүй бөгөөд олон протоколыг дэмждэг.
Зохиогч уг хэрэгсэл нь хамгийн бага нөөц зарцуулж, машин дээр огт анзаарагдахгүй ажиллахыг хичээсэн. Орчин үеийн вирусны эсрэг болон бусад "аюулгүй байдлын системүүд"-ээс ялгаатай нь энэ нь таны компьютерийг удаашруулах ёсгүй. Тэрээр арай илүү зальтай програм хангамжийн хэрэгжилтийн ачаар ачаалал болон санах ойн зарцуулалтыг аль алиныг нь багасгаж чадсан. Хэрэв энэ нь зүгээр л шинэ холболт дээр тусдаа процессыг эхлүүлсэн бол боломжит халдагчид машин дээрх нөөцийг шавхахын тулд олон холболт нээснээр DDoS халдлага хийх боломжтой. Холболт бүрт нэг урсгалтай байх нь хамгийн сайн сонголт биш, учир нь цөм нь хэлхээг удирдахад нөөцийг үрэх болно.
Тийм ч учраас Крис Веллонс Endlessh-ийн хамгийн хөнгөн сонголтыг сонгосон: нэг урсгалтай сервер poll(2)
, энд урхинд байгаа үйлчлүүлэгчид цөм дэх сокет объект болон Endlessh дээр хянах өөр 78 байтыг тооцохгүйгээр бараг ямар ч нэмэлт нөөц хэрэглэдэггүй. Үйлчлүүлэгч бүрт хүлээн авах, илгээх буфер хуваарилахаас зайлсхийхийн тулд Endlessh нь шууд хандалтын залгуур нээж, TCP пакетуудыг бараг бүхэлд нь үйлдлийн системийн TCP/IP стекийг алгасаж шууд орчуулдаг. Ирж буй буфер нь огт хэрэггүй, учир нь бид ирж буй өгөгдлийг сонирхдоггүй.
Зохиогч нь нэвтрүүлгийнх нь үеэр ингэж хэлжээ
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 бол онлайн дээрэлхэгчдийг шийтгэх гайхалтай хэрэгсэл юм. Тодорхой серверийн ер бусын үйлдэлд тэдний анхаарлыг татах эрсдэлтэй байдаг нь үнэн. Хэн нэгэн
Төвүүд:
Python, Мэдээллийн аюулгүй байдал, Програм хангамж, Системийн удирдлага
Сэдвийн:
SSH, Endlessh, tarpit, tarpit, trap, asycio
Ирж буй SSH холболтуудад зориулсан хавх (tarpit).
Интернэт бол маш дайсагнасан орчин гэдэг нь нууц биш. Та серверээ босгосон даруйдаа асар их хэмжээний халдлагад өртөж, олон удаа сканнердах болно. Жишээлбэл
Tarpit нь ирж буй холболтыг удаашруулахад ашигладаг трап порт юм. Хэрэв гуравдагч талын систем энэ порт руу холбогдсон бол та холболтыг хурдан хаах боломжгүй болно. Тэрээр системийн нөөцөө үрж, холболтын хугацаа дуусах хүртэл хүлээх эсвэл гараар дуусгах шаардлагатай болно.
Ихэнхдээ брезентийг хамгаалах зорилгоор ашигладаг. Энэ техникийг анх компьютерийн хорхойноос хамгаалах зорилгоор бүтээжээ. Одоо үүнийг бүх IP хаягийг дараалан сканнердаж буй спам илгээгч, судлаачдын амьдралыг сүйрүүлэхэд ашиглаж болно (Habré дээрх жишээнүүд:
Крис Веллонс хэмээх системийн администраторуудын нэг энэ гутамшигт явдлыг хараад залхсан бололтой жижиг хөтөлбөр бичсэн.
Хэрэгслийг суурилуулах:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
Зөв хэрэгжүүлсэн тарпит нь халдагчаас чамаас илүү их нөөцийг авах болно. Гэхдээ энэ нь бүр нөөцийн асуудал биш юм. Зохиогч
Үйлдлийн горимд Endlessh серверийг хулиганууд бөөнөөр нь тогшдог ердийн 22-р порт дээр суулгах шаардлагатай. Аюулгүй байдлын стандарт зөвлөмжүүд нь SSH-ийг өөр порт руу шилжүүлэхийг үргэлж зөвлөдөг бөгөөд энэ нь бүртгэлийн хэмжээг даруй дарааллаар нь багасгадаг.
Крис Веллонс хэлэхдээ, түүний хөтөлбөр нь тодорхойлолтын нэг догол мөрийг ашигладаг SSH-
.
Endlessh программ яг үүнийг хийдэг: энэ илгээдэг хязгааргүй санамсаргүй байдлаар үүсгэгдсэн мэдээллийн урсгал, RFC 4253-д нийцсэн, өөрөөр хэлбэл баталгаажуулахаас өмнө илгээх ба мөр бүр нь дараахаар эхэлдэг. SSH-
мөрийн төгсгөлийн тэмдэгтийг оруулаад 255 тэмдэгтээс хэтрэхгүй. Ерөнхийдөө бүх зүйл стандартын дагуу байдаг.
Анхдагч байдлаар, програм пакет илгээх хооронд 10 секунд хүлээдэг. Энэ нь үйлчлүүлэгчийг хугацаа хэтрүүлэхээс сэргийлдэг тул үйлчлүүлэгч үүрд баригдах болно.
Мэдээллийг криптограф хэрэглэхээс өмнө илгээдэг тул програм нь маш энгийн. Энэ нь ямар ч шифрийг хэрэгжүүлэх шаардлагагүй бөгөөд олон протоколыг дэмждэг.
Зохиогч уг хэрэгсэл нь хамгийн бага нөөц зарцуулж, машин дээр огт анзаарагдахгүй ажиллахыг хичээсэн. Орчин үеийн вирусны эсрэг болон бусад "аюулгүй байдлын системүүд"-ээс ялгаатай нь энэ нь таны компьютерийг удаашруулах ёсгүй. Тэрээр арай илүү зальтай програм хангамжийн хэрэгжилтийн ачаар ачаалал болон санах ойн зарцуулалтыг аль алиныг нь багасгаж чадсан. Хэрэв энэ нь зүгээр л шинэ холболт дээр тусдаа процессыг эхлүүлсэн бол боломжит халдагчид машин дээрх нөөцийг шавхахын тулд олон холболт нээснээр DDoS халдлага хийх боломжтой. Холболт бүрт нэг урсгалтай байх нь хамгийн сайн сонголт биш, учир нь цөм нь хэлхээг удирдахад нөөцийг үрэх болно.
Тийм ч учраас Крис Веллонс Endlessh-ийн хамгийн хөнгөн сонголтыг сонгосон: нэг урсгалтай сервер poll(2)
, энд урхинд байгаа үйлчлүүлэгчид цөм дэх сокет объект болон Endlessh дээр хянах өөр 78 байтыг тооцохгүйгээр бараг ямар ч нэмэлт нөөц хэрэглэдэггүй. Үйлчлүүлэгч бүрт хүлээн авах, илгээх буфер хуваарилахаас зайлсхийхийн тулд Endlessh нь шууд хандалтын залгуур нээж, TCP пакетуудыг бараг бүхэлд нь үйлдлийн системийн TCP/IP стекийг алгасаж шууд орчуулдаг. Ирж буй буфер нь огт хэрэггүй, учир нь бид ирж буй өгөгдлийг сонирхдоггүй.
Зохиогч нь нэвтрүүлгийнх нь үеэр ингэж хэлжээ
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 бол онлайн дээрэлхэгчдийг шийтгэх гайхалтай хэрэгсэл юм. Тодорхой серверийн ер бусын үйлдэлд тэдний анхаарлыг татах эрсдэлтэй байдаг нь үнэн. Хэн нэгэн
Эх сурвалж: www.habr.com