آنے والے SSH کنکشنز کے لیے ٹریپ (tarpit)

یہ کوئی راز نہیں ہے کہ انٹرنیٹ ایک بہت ہی مخالف ماحول ہے۔ جیسے ہی آپ سرور اٹھاتے ہیں، اسے فوری طور پر بڑے پیمانے پر حملوں اور متعدد اسکینوں کا نشانہ بنایا جاتا ہے۔ مثال کے طور پر سیکورٹی گارڈز سے شہد کا برتن آپ اس کچرے کی ٹریفک کے پیمانے کا اندازہ لگا سکتے ہیں۔ درحقیقت، اوسط سرور پر، ٹریفک کا 99% نقصان دہ ہو سکتا ہے۔

Tarpit ایک ٹریپ پورٹ ہے جو آنے والے رابطوں کو سست کرنے کے لیے استعمال ہوتا ہے۔ اگر فریق ثالث کا نظام اس بندرگاہ سے جڑتا ہے، تو آپ اس کنکشن کو فوری طور پر بند نہیں کر سکیں گے۔ اسے اپنے سسٹم کے وسائل کو ضائع کرنا پڑے گا اور کنکشن کا وقت ختم ہونے تک انتظار کرنا پڑے گا، یا اسے دستی طور پر ختم کرنا پڑے گا۔

اکثر، ٹارپٹس کو تحفظ کے لیے استعمال کیا جاتا ہے۔ یہ تکنیک سب سے پہلے کمپیوٹر کے کیڑوں سے بچانے کے لیے تیار کی گئی تھی۔ اور اب اس کا استعمال اسپامرز اور محققین کی زندگیوں کو برباد کرنے کے لیے کیا جا سکتا ہے جو ایک قطار میں تمام IP پتوں کی وسیع اسکیننگ میں مصروف ہیں (Habré پر مثالیں: آسٹریا, یوکرائن).

کرس ویلنز نامی سسٹم ایڈمنسٹریٹر میں سے ایک بظاہر اس بے عزتی کو دیکھ کر تھک گیا اور اس نے ایک چھوٹا سا پروگرام لکھا۔ لامتناہی, SSH کے لیے ایک tarpit جو آنے والے رابطوں کو کم کرتا ہے۔ پروگرام ایک پورٹ کھولتا ہے (ٹیسٹنگ کے لیے ڈیفالٹ پورٹ 2222 ہے) اور SSH سرور ہونے کا بہانہ کرتا ہے، لیکن حقیقت میں یہ آنے والے کلائنٹ کے ساتھ ایک لامتناہی تعلق قائم کرتا ہے جب تک کہ وہ ہار نہ مانے۔ یہ کئی دن یا اس سے زیادہ تک جاری رہ سکتا ہے جب تک کہ کلائنٹ گر نہ جائے۔

افادیت کی تنصیب:

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

صحیح طریقے سے نافذ کیا گیا ٹارپٹ حملہ آور سے آپ سے زیادہ وسائل لے گا۔ لیکن یہ وسائل کا معاملہ بھی نہیں ہے۔ مصنف لکھتے ہیںکہ پروگرام نشہ آور ہے۔ ابھی اس کے 27 کلائنٹس پھنسے ہوئے ہیں، ان میں سے کچھ ہفتوں سے جڑے ہوئے ہیں۔ سرگرمی کے عروج پر، 1378 کلائنٹس 20 گھنٹے تک پھنسے ہوئے تھے!

آپریٹنگ موڈ میں، Endlessh سرور کو معمول کی بندرگاہ 22 پر انسٹال کرنے کی ضرورت ہے، جہاں غنڈے بڑے پیمانے پر دستک دیتے ہیں۔ معیاری حفاظتی سفارشات ہمیشہ SSH کو ایک مختلف بندرگاہ پر منتقل کرنے کا مشورہ دیتی ہیں، جو لاگز کے سائز کو فوری طور پر ایک ترتیب سے کم کر دیتی ہے۔

کرس ویلنز کا کہنا ہے کہ ان کا پروگرام تفصیلات کے ایک پیراگراف کا استحصال کرتا ہے۔ آر ایف سی 4253 SSH پروٹوکول میں۔ TCP کنکشن قائم ہونے کے فوراً بعد، لیکن خفیہ نگاری کو لاگو کرنے سے پہلے، دونوں فریقوں کو ایک شناختی تار بھیجنا چاہیے۔ اور ایک نوٹ بھی ہے: "ورژن قطار بھیجنے سے پہلے سرور ڈیٹا کی دوسری قطاریں بھیج سکتا ہے". اور کوئی حد نہیں اس ڈیٹا کے حجم پر، آپ کو صرف ہر لائن کو شروع کرنے کی ضرورت ہے۔ SSH-.

یہ بالکل وہی ہے جو Endlessh پروگرام کرتا ہے: یہ بھیجتا ہے لامتناہی تصادفی طور پر تیار کردہ ڈیٹا کا سلسلہجو کہ RFC 4253 کے ساتھ تعمیل کرتا ہے، یعنی تصدیق سے پہلے بھیجیں، اور ہر لائن اس سے شروع ہوتی ہے SSH- اور 255 حروف سے زیادہ نہیں ہے، بشمول لائن کے اختتامی کردار۔ عام طور پر، سب کچھ معیار کے مطابق ہے.

پہلے سے طے شدہ طور پر، پروگرام پیکٹ بھیجنے کے درمیان 10 سیکنڈ انتظار کرتا ہے۔ یہ کلائنٹ کو ٹائم آؤٹ ہونے سے روکتا ہے، لہذا کلائنٹ ہمیشہ کے لیے پھنس جائے گا۔

چونکہ کرپٹوگرافی کو لاگو کرنے سے پہلے ڈیٹا بھیجا جاتا ہے، اس لیے پروگرام انتہائی آسان ہے۔ اسے کسی بھی سائفرز کو لاگو کرنے کی ضرورت نہیں ہے اور متعدد پروٹوکول کو سپورٹ کرتا ہے۔

مصنف نے اس بات کو یقینی بنانے کی کوشش کی کہ افادیت کم سے کم وسائل استعمال کرے اور مشین پر مکمل طور پر کسی کا دھیان نہ رکھے۔ جدید اینٹی وائرسز اور دوسرے "سیکیورٹی سسٹمز" کے برعکس اسے آپ کے کمپیوٹر کو سست نہیں کرنا چاہیے۔ اس نے تھوڑا زیادہ ہوشیار سافٹ ویئر کے نفاذ کی وجہ سے ٹریفک اور میموری کی کھپت دونوں کو کم کرنے میں کامیاب کیا۔ اگر اس نے نئے کنکشن پر ایک الگ عمل شروع کیا تو ممکنہ حملہ آور مشین پر وسائل کو ختم کرنے کے لیے متعدد کنکشن کھول کر DDoS حملہ کر سکتے ہیں۔ ایک دھاگہ فی کنکشن بھی بہترین آپشن نہیں ہے، کیونکہ دانا دھاگوں کے انتظام کے وسائل کو ضائع کردے گا۔

اسی لیے کرس ویلنز نے اینڈ لیس کے لیے سب سے ہلکا پھلکا آپشن کا انتخاب کیا: سنگل تھریڈڈ سرور poll(2)، جہاں ٹریپ میں کلائنٹ عملی طور پر کوئی اضافی وسائل استعمال نہیں کرتے ہیں، کرنل میں ساکٹ آبجیکٹ کو شمار نہیں کرتے ہیں اور Endlessh میں ٹریکنگ کے لیے مزید 78 بائٹس۔ ہر کلائنٹ کے لیے وصول کرنے اور بھیجنے والے بفرز مختص کرنے سے بچنے کے لیے، Endlessh ایک براہ راست رسائی ساکٹ کھولتا ہے اور تقریباً پورے آپریٹنگ سسٹم TCP/IP اسٹیک کو نظرانداز کرتے ہوئے، براہ راست TCP پیکٹ کا ترجمہ کرتا ہے۔ آنے والے بفر کی بالکل بھی ضرورت نہیں ہے، کیونکہ ہمیں آنے والے ڈیٹا میں کوئی دلچسپی نہیں ہے۔

مصنف کا کہنا ہے کہ اپنے پروگرام کے وقت نہیں جانتا 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 لکھنے کے لئے مثالی ہے. مثال کے طور پر، یہ ہک فائر فاکس، کروم، یا کسی دوسرے کلائنٹ کو منجمد کر دے گا جو آپ کے 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, Endless, 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 کو ایک مختلف بندرگاہ پر منتقل کرنے کا مشورہ دیتی ہیں، جو لاگز کے سائز کو فوری طور پر ایک ترتیب سے کم کر دیتی ہے۔

کرس ویلنز کا کہنا ہے کہ ان کا پروگرام تفصیلات کے ایک پیراگراف کا استحصال کرتا ہے۔ آر ایف سی 4253 SSH پروٹوکول میں۔ TCP کنکشن قائم ہونے کے فوراً بعد، لیکن خفیہ نگاری کو لاگو کرنے سے پہلے، دونوں فریقوں کو ایک شناختی تار بھیجنا چاہیے۔ اور ایک نوٹ بھی ہے: "ورژن قطار بھیجنے سے پہلے سرور ڈیٹا کی دوسری قطاریں بھیج سکتا ہے". اور کوئی حد نہیں اس ڈیٹا کے حجم پر، آپ کو صرف ہر لائن کو شروع کرنے کی ضرورت ہے۔ SSH-.

یہ بالکل وہی ہے جو Endlessh پروگرام کرتا ہے: یہ بھیجتا ہے لامتناہی تصادفی طور پر تیار کردہ ڈیٹا کا سلسلہجو کہ RFC 4253 کے ساتھ تعمیل کرتا ہے، یعنی تصدیق سے پہلے بھیجیں، اور ہر لائن اس سے شروع ہوتی ہے SSH- اور 255 حروف سے زیادہ نہیں ہے، بشمول لائن کے اختتامی کردار۔ عام طور پر، سب کچھ معیار کے مطابق ہے.

پہلے سے طے شدہ طور پر، پروگرام پیکٹ بھیجنے کے درمیان 10 سیکنڈ انتظار کرتا ہے۔ یہ کلائنٹ کو ٹائم آؤٹ ہونے سے روکتا ہے، لہذا کلائنٹ ہمیشہ کے لیے پھنس جائے گا۔

چونکہ کرپٹوگرافی کو لاگو کرنے سے پہلے ڈیٹا بھیجا جاتا ہے، اس لیے پروگرام انتہائی آسان ہے۔ اسے کسی بھی سائفرز کو لاگو کرنے کی ضرورت نہیں ہے اور متعدد پروٹوکول کو سپورٹ کرتا ہے۔

مصنف نے اس بات کو یقینی بنانے کی کوشش کی کہ افادیت کم سے کم وسائل استعمال کرے اور مشین پر مکمل طور پر کسی کا دھیان نہ رکھے۔ جدید اینٹی وائرسز اور دوسرے "سیکیورٹی سسٹمز" کے برعکس اسے آپ کے کمپیوٹر کو سست نہیں کرنا چاہیے۔ اس نے تھوڑا زیادہ ہوشیار سافٹ ویئر کے نفاذ کی وجہ سے ٹریفک اور میموری کی کھپت دونوں کو کم کرنے میں کامیاب کیا۔ اگر اس نے نئے کنکشن پر ایک الگ عمل شروع کیا تو ممکنہ حملہ آور مشین پر وسائل کو ختم کرنے کے لیے متعدد کنکشن کھول کر DDoS حملہ کر سکتے ہیں۔ ایک دھاگہ فی کنکشن بھی بہترین آپشن نہیں ہے، کیونکہ دانا دھاگوں کے انتظام کے وسائل کو ضائع کردے گا۔

اسی لیے کرس ویلنز نے اینڈ لیس کے لیے سب سے ہلکا پھلکا آپشن کا انتخاب کیا: سنگل تھریڈڈ سرور poll(2)، جہاں ٹریپ میں کلائنٹ عملی طور پر کوئی اضافی وسائل استعمال نہیں کرتے ہیں، کرنل میں ساکٹ آبجیکٹ کو شمار نہیں کرتے ہیں اور Endlessh میں ٹریکنگ کے لیے مزید 78 بائٹس۔ ہر کلائنٹ کے لیے وصول کرنے اور بھیجنے والے بفرز مختص کرنے سے بچنے کے لیے، Endlessh ایک براہ راست رسائی ساکٹ کھولتا ہے اور تقریباً پورے آپریٹنگ سسٹم TCP/IP اسٹیک کو نظرانداز کرتے ہوئے، براہ راست TCP پیکٹ کا ترجمہ کرتا ہے۔ آنے والے بفر کی بالکل بھی ضرورت نہیں ہے، کیونکہ ہمیں آنے والے ڈیٹا میں کوئی دلچسپی نہیں ہے۔

مصنف کا کہنا ہے کہ اپنے پروگرام کے وقت نہیں جانتا 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 لکھنے کے لئے مثالی ہے. مثال کے طور پر، یہ ہک فائر فاکس، کروم، یا کسی دوسرے کلائنٹ کو منجمد کر دے گا جو آپ کے 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)

ماخذ: www.habr.com

نیا تبصرہ شامل کریں