بر کسی پوشیده نیست که اینترنت یک محیط بسیار خصمانه است. به محض اینکه سروری را بالا می برید، فوراً در معرض حملات گسترده و اسکن های متعدد قرار می گیرد. مثلا
تارپیت یک پورت تله است که برای کاهش سرعت اتصالات ورودی استفاده می شود. اگر یک سیستم شخص ثالث به این پورت متصل شود، نمی توانید به سرعت اتصال را ببندید. او باید منابع سیستم خود را هدر دهد و منتظر بماند تا زمان اتصال به پایان برسد یا به صورت دستی آن را خاتمه دهد.
اغلب از تارپیت ها برای محافظت استفاده می شود. این تکنیک برای اولین بار برای محافظت در برابر کرم های کامپیوتری توسعه یافت. و اکنون میتوان از آن برای خراب کردن زندگی هرزنامهها و محققانی که درگیر اسکن گسترده تمام آدرسهای IP در یک ردیف هستند، استفاده کرد (مثالهایی در Habré:
یکی از مدیران سیستم به نام کریس ولونز ظاهراً از تماشای این رسوایی خسته شد - و یک برنامه کوچک نوشت.
نصب ابزار:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
یک tarpit که به درستی اجرا شود، منابع بیشتری را از مهاجم می گیرد تا از شما. اما حتی بحث منابع هم نیست. نویسنده
در حالت عملیاتی، سرور Endlessh باید روی پورت معمولی 22 نصب شود، جایی که هولیگان ها به طور انبوه در می زنند. توصیههای امنیتی استاندارد همیشه انتقال SSH را به یک پورت دیگر توصیه میکنند، که بلافاصله اندازه گزارشها را با مرتبهای بزرگ کاهش میدهد.
کریس ولونز می گوید که برنامه او از یک پاراگراف مشخصات استفاده می کند SSH-
.
این دقیقاً همان کاری است که برنامه Endlessh انجام می دهد: آن می فرستد بی پایان جریان داده های تولید شده به صورت تصادفی، که مطابق با RFC 4253 هستند، یعنی قبل از احراز هویت ارسال می کنند و هر خط با SSH-
و از 255 کاراکتر، از جمله کاراکتر پایان خط، تجاوز نمی کند. به طور کلی، همه چیز طبق استاندارد است.
به طور پیش فرض، برنامه بین ارسال بسته ها 10 ثانیه صبر می کند. این کار از اتمام زمان مشتری جلوگیری می کند، بنابراین مشتری برای همیشه در دام خواهد افتاد.
از آنجایی که داده ها قبل از اعمال رمزنگاری ارسال می شوند، برنامه بسیار ساده است. نیازی به پیاده سازی هیچ رمزی ندارد و از چندین پروتکل پشتیبانی می کند.
نویسنده سعی کرد اطمینان حاصل کند که ابزار حداقل منابع را مصرف می کند و کاملاً بدون توجه روی دستگاه کار می کند. برخلاف آنتی ویروسهای مدرن و دیگر «سیستمهای امنیتی»، نباید کامپیوتر شما را کند کند. او به دلیل اجرای نرمافزار کمی حیلهگرتر، توانست هم ترافیک و هم مصرف حافظه را به حداقل برساند. اگر به سادگی یک فرآیند جداگانه را روی یک اتصال جدید راه اندازی کند، مهاجمان بالقوه می توانند با باز کردن چندین اتصال برای تخلیه منابع روی دستگاه، یک حمله DDoS را انجام دهند. یک رشته در هر اتصال نیز بهترین گزینه نیست، زیرا هسته منابع مدیریت رشته ها را هدر می دهد.
به همین دلیل کریس ولونز سبک ترین گزینه را برای Endlessh انتخاب کرد: یک سرور تک رشته ای poll(2)
، جایی که کلاینت های موجود در تله تقریباً هیچ منبع اضافی مصرف نمی کنند، بدون احتساب شی سوکت در هسته و 78 بایت دیگر برای ردیابی در Endlessh. برای اجتناب از تخصیص بافرهای دریافت و ارسال برای هر کلاینت، 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 برای نوشتن tarpit ایده آل است. به عنوان مثال، این قلاب فایرفاکس، کروم یا هر کلاینت دیگری را که سعی در اتصال به سرور 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())
تارپیت ابزاری عالی برای مجازات قلدرهای آنلاین است. درست است، برعکس، خطری وجود دارد که توجه آنها را به رفتار غیرمعمول یک سرور خاص جلب کند. کسی
هاب ها:
پایتون، امنیت اطلاعات، نرم افزار، مدیریت سیستم
برچسب ها:
SSH، Endlessh، tarpit، tarpit، trap، asycio
تله (tarpit) برای اتصالات SSH ورودی
بر کسی پوشیده نیست که اینترنت یک محیط بسیار خصمانه است. به محض اینکه سروری را بالا می برید، فوراً در معرض حملات گسترده و اسکن های متعدد قرار می گیرد. مثلا
تارپیت یک پورت تله است که برای کاهش سرعت اتصالات ورودی استفاده می شود. اگر یک سیستم شخص ثالث به این پورت متصل شود، نمی توانید به سرعت اتصال را ببندید. او باید منابع سیستم خود را هدر دهد و منتظر بماند تا زمان اتصال به پایان برسد یا به صورت دستی آن را خاتمه دهد.
اغلب از تارپیت ها برای محافظت استفاده می شود. این تکنیک برای اولین بار برای محافظت در برابر کرم های کامپیوتری توسعه یافت. و اکنون میتوان از آن برای خراب کردن زندگی هرزنامهها و محققانی که درگیر اسکن گسترده تمام آدرسهای IP در یک ردیف هستند، استفاده کرد (مثالهایی در Habré:
یکی از مدیران سیستم به نام کریس ولونز ظاهراً از تماشای این رسوایی خسته شد - و یک برنامه کوچک نوشت.
نصب ابزار:
$ make
$ ./endlessh &
$ ssh -p2222 localhost
یک tarpit که به درستی اجرا شود، منابع بیشتری را از مهاجم می گیرد تا از شما. اما حتی بحث منابع هم نیست. نویسنده
در حالت عملیاتی، سرور Endlessh باید روی پورت معمولی 22 نصب شود، جایی که هولیگان ها به طور انبوه در می زنند. توصیههای امنیتی استاندارد همیشه انتقال SSH را به یک پورت دیگر توصیه میکنند، که بلافاصله اندازه گزارشها را با مرتبهای بزرگ کاهش میدهد.
کریس ولونز می گوید که برنامه او از یک پاراگراف مشخصات استفاده می کند SSH-
.
این دقیقاً همان کاری است که برنامه Endlessh انجام می دهد: آن می فرستد بی پایان جریان داده های تولید شده به صورت تصادفی، که مطابق با RFC 4253 هستند، یعنی قبل از احراز هویت ارسال می کنند و هر خط با SSH-
و از 255 کاراکتر، از جمله کاراکتر پایان خط، تجاوز نمی کند. به طور کلی، همه چیز طبق استاندارد است.
به طور پیش فرض، برنامه بین ارسال بسته ها 10 ثانیه صبر می کند. این کار از اتمام زمان مشتری جلوگیری می کند، بنابراین مشتری برای همیشه در دام خواهد افتاد.
از آنجایی که داده ها قبل از اعمال رمزنگاری ارسال می شوند، برنامه بسیار ساده است. نیازی به پیاده سازی هیچ رمزی ندارد و از چندین پروتکل پشتیبانی می کند.
نویسنده سعی کرد اطمینان حاصل کند که ابزار حداقل منابع را مصرف می کند و کاملاً بدون توجه روی دستگاه کار می کند. برخلاف آنتی ویروسهای مدرن و دیگر «سیستمهای امنیتی»، نباید کامپیوتر شما را کند کند. او به دلیل اجرای نرمافزار کمی حیلهگرتر، توانست هم ترافیک و هم مصرف حافظه را به حداقل برساند. اگر به سادگی یک فرآیند جداگانه را روی یک اتصال جدید راه اندازی کند، مهاجمان بالقوه می توانند با باز کردن چندین اتصال برای تخلیه منابع روی دستگاه، یک حمله DDoS را انجام دهند. یک رشته در هر اتصال نیز بهترین گزینه نیست، زیرا هسته منابع مدیریت رشته ها را هدر می دهد.
به همین دلیل کریس ولونز سبک ترین گزینه را برای Endlessh انتخاب کرد: یک سرور تک رشته ای poll(2)
، جایی که کلاینت های موجود در تله تقریباً هیچ منبع اضافی مصرف نمی کنند، بدون احتساب شی سوکت در هسته و 78 بایت دیگر برای ردیابی در Endlessh. برای اجتناب از تخصیص بافرهای دریافت و ارسال برای هر کلاینت، 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 برای نوشتن tarpit ایده آل است. به عنوان مثال، این قلاب فایرفاکس، کروم یا هر کلاینت دیگری را که سعی در اتصال به سرور 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())
تارپیت ابزاری عالی برای مجازات قلدرهای آنلاین است. درست است، برعکس، خطری وجود دارد که توجه آنها را به رفتار غیرمعمول یک سرور خاص جلب کند. کسی
منبع: www.habr.com