اهو ڪو راز ناهي ته انٽرنيٽ هڪ تمام دشمن ماحول آهي. جيترو جلدي توهان سرور کي وڌايو، اهو فوري طور تي وڏي حملن ۽ گهڻن اسڪين جي تابع آهي. مثال طور توهان اندازو لڳائي سگهو ٿا هن گندگي جي ٽرئفڪ جي ماپ. حقيقت ۾، سراسري سرور تي، ٽرئفڪ جو 99٪ خراب ٿي سگھي ٿو.
ترپٽ هڪ ٽرپ پورٽ آهي جيڪو ايندڙ رابطن کي سست ڪرڻ لاءِ استعمال ٿيندو آهي. جيڪڏهن ٽئين پارٽي سسٽم هن بندرگاهه سان ڳنڍي ٿي، توهان جلدي ڪنيڪشن کي بند ڪرڻ جي قابل نه هوندا. هن کي پنهنجي سسٽم جي وسيلن کي ضايع ڪرڻو پوندو ۽ انتظار ڪرڻو پوندو جيستائين ڪنيڪشن جو وقت ختم ٿئي، يا دستي طور تي ان کي ختم ڪيو وڃي.
گهڻو ڪري، tarpits تحفظ لاء استعمال ٿيندا آهن. ٽيڪنڪ پهريون ڀيرو ڪمپيوٽر جي ورم کان بچائڻ لاء تيار ڪئي وئي هئي. ۽ ھاڻي اھو استعمال ڪري سگھجي ٿو اسپامرز ۽ محققن جي زندگين کي برباد ڪرڻ لاءِ جيڪي ھڪڙي قطار ۾ سڀني IP پتي جي وسيع اسڪيننگ ۾ مصروف آھن (مثال طور Habré تي: , ).
سسٽم ايڊمنسٽريٽرن مان هڪ ڪرس ويلنز نالي هڪ شخص ظاهري طور تي هن بي عزتي کي ڏسي ٿڪجي پيو هو - ۽ هن هڪ ننڍڙو پروگرام لکيو. ، SSH لاءِ هڪ تارپٽ جيڪو ايندڙ ڪنيڪشن کي سست ڪري ٿو. پروگرام هڪ بندرگاهه کوليندو آهي (ٽيسٽنگ لاءِ ڊفالٽ پورٽ 2222 آهي) ۽ هڪ SSH سرور هجڻ جو دعويٰ ڪري ٿو، پر حقيقت ۾ اهو اچڻ واري ڪلائنٽ سان لامحدود ڪنيڪشن قائم ڪري ٿو جيستائين اهو ڏئي ڇڏي. اهو ڪيترن ئي ڏينهن تائين جاري رهي سگهي ٿو يا وڌيڪ جيستائين ڪلائنٽ بند نه ٿئي.
افاديت جي انسٽاليشن:
$ make
$ ./endlessh &
$ ssh -p2222 localhostصحيح طريقي سان لاڳو ٿيل ٽرپٽ حملي ڪندڙ کان وڌيڪ وسيلا وٺي ويندا توهان کان. پر اهو به وسيلن جو معاملو ناهي. ليکڪ ته پروگرام لت آهي. هن وقت ان ۾ 27 ڪلائنٽ ڦاٿل آهن، انهن مان ڪجهه هفتن لاءِ ڳنڍيل آهن. سرگرمي جي چوٽي تي، 1378 ڪلائنٽ 20 ڪلاڪن تائين پھنس ويا!
آپريٽنگ موڊ ۾، Endlesssh سرور کي معمول جي بندرگاهن 22 تي انسٽال ڪرڻ جي ضرورت آهي، جتي غنڊا ٽوڙيندا آهن. معياري حفاظتي سفارشون هميشه SSH کي مختلف بندرگاهن ڏانهن منتقل ڪرڻ جي صلاح ڏين ٿيون، جيڪو فوري طور تي لاگ ان جي ماپ کي گھٽائي ٿو.
ڪرس ويلنس چوي ٿو ته هن جو پروگرام وضاحت جي هڪ پيراگراف کي استحصال ڪري ٿو SSH پروٽوڪول ڏانهن. TCP ڪنيڪشن قائم ٿيڻ کان فوري پوءِ، پر ان کان اڳ جو ڪرپٽ گرافي لاڳو ٿئي، ٻنهي ڌرين کي لازمي طور تي هڪ سڃاڻپ واري تار موڪلڻ گهرجي. ۽ اتي پڻ هڪ نوٽ آهي: "سرور ورزن قطار موڪلڻ کان اڳ ڊيٽا جون ٻيون قطارون موڪلي سگھي ٿو". ۽ ڪابه حد ناهي هن ڊيٽا جي مقدار تي، توهان کي صرف هر لڪير سان شروع ڪرڻ جي ضرورت آهي SSH-.
اھو اھو آھي جيڪو لامحدود پروگرام ڪندو آھي: اھو موڪليو لامتناہی بي ترتيب ٺاهيل ڊيٽا جو وهڪرو، جيڪو RFC 4253 سان مطابقت رکي ٿو، اهو آهي، تصديق ڪرڻ کان اڳ موڪليو، ۽ هر لائن شروع ٿئي ٿي SSH- ۽ 255 اکرن کان وڌيڪ نه هجي، جنهن ۾ لڪير جي پڇاڙي وارو ڪردار به شامل آهي. عام طور تي، هر شيء معيار جي مطابق آهي.
ڊفالٽ طور، پروگرام پيڪٽ موڪلڻ جي وچ ۾ 10 سيڪنڊن جو انتظار ڪري ٿو. هي ڪلائنٽ کي وقت ختم ٿيڻ کان روڪي ٿو، تنهنڪري ڪلائنٽ هميشه لاء ڦاسي ويندو.
جيئن ته ڊيٽا موڪلڻ کان اڳ ڪرپٽوگرافي لاڳو ٿئي ٿي، پروگرام تمام سادو آهي. اهو ڪنهن به سيفرن کي لاڳو ڪرڻ جي ضرورت ناهي ۽ ڪيترن ئي پروٽوڪول کي سپورٽ ڪري ٿو.
ليکڪ کي يقيني بڻائڻ جي ڪوشش ڪئي وئي ته افاديت گهٽ ۾ گهٽ وسيلن کي استعمال ڪري ٿو ۽ مشين تي مڪمل طور تي اڻڄاتل ڪم ڪري ٿو. جديد اينٽي وائرس ۽ ٻين "سيڪيورٽي سسٽم" جي برعڪس، اهو توهان جي ڪمپيوٽر کي سست نه ڪرڻ گهرجي. هن ٿورو وڌيڪ چالاڪ سافٽ ويئر لاڳو ڪرڻ جي ڪري ٽرئفڪ ۽ ياداشت جي استعمال کي گهٽائڻ ۾ مدد ڪئي. جيڪڏهن اهو آسان طور تي هڪ نئين ڪنيڪشن تي هڪ الڳ عمل شروع ڪيو، ته پوء امڪاني حملي ڪندڙ مشين تي وسيلن کي ختم ڪرڻ لاء ڪيترن ئي ڪنيڪشن کي کولڻ سان هڪ DDoS حملو شروع ڪري سگهي ٿو. ھڪڙي سلسلي في ڪنيڪشن پڻ بھترين اختيار نه آھي، ڇاڪاڻتہ ڪنييل وسيلن کي ٿريڊز کي منظم ڪرڻ ۾ ضايع ڪندو.
اهو ئي سبب آهي ته ڪرس ويلونز چونڊيو آهي سڀ کان وڌيڪ ٿلهي آپشن لاءِ Endlessh: هڪ واحد موضوع وارو سرور poll(2)، جتي ڦاٿل ڪلائنٽ عملي طور تي ڪو به اضافي وسيلا استعمال نٿا ڪن، سواءِ ڪرنل ساکٽ آبجيڪٽ ۽ اينڊليش ۾ ٽريڪنگ لاءِ اضافي 78 بائيٽس جي. هر ڪلائنٽ لاءِ وصول ۽ موڪلڻ بفر مختص ڪرڻ کان بچڻ لاءِ، اينڊليش هڪ سڌو رسائي ساکٽ کوليندو آهي ۽ سڌو سنئون TCP پيڪٽس کي رليز ڪندو آهي، تقريبن سڄي اسٽيڪ کي نظرانداز ڪندي. TCP/IP آپريٽنگ سسٽم. ان پٽ بفر جي بلڪل به ضرورت ناهي ڇو ته اسان کي ايندڙ ڊيٽا ۾ دلچسپي ناهي.
ليکڪ جو چوڻ آهي ته سندس پروگرام جي وقت ۾ پٿون جي اسڪيو ۽ ٻين تارپٽس جي وجود بابت. جيڪڏهن هو asycio بابت ڄاڻندو هو، ته هو پٿون ۾ صرف 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 حملو. بهرحال، اڃا تائين اهڙا ڪيس نه آهن، ۽ tarpits عظيم ڪم ڪن ٿا.
مرڪز:
پٿون، انفارميشن سيڪيورٽي، سافٽ ويئر، سسٽم ايڊمنسٽريشن
ٽيگ:
سَڇَ ، اَڻ پَٽُ ، تَرَپَٽُ ، تَرَپِٽُ ، ڦِري ، اَسِيڪو
ايندڙ SSH ڪنيڪشن لاء ٽرپ (tarpit).
اهو ڪو راز ناهي ته انٽرنيٽ هڪ تمام دشمن ماحول آهي. جيترو جلدي توهان سرور کي وڌايو، اهو فوري طور تي وڏي حملن ۽ گهڻن اسڪين جي تابع آهي. مثال طور توهان اندازو لڳائي سگهو ٿا هن گندگي جي ٽرئفڪ جي ماپ. حقيقت ۾، سراسري سرور تي، ٽرئفڪ جو 99٪ خراب ٿي سگھي ٿو.
ترپٽ هڪ ٽرپ پورٽ آهي جيڪو ايندڙ رابطن کي سست ڪرڻ لاءِ استعمال ٿيندو آهي. جيڪڏهن ٽئين پارٽي سسٽم هن بندرگاهه سان ڳنڍي ٿي، توهان جلدي ڪنيڪشن کي بند ڪرڻ جي قابل نه هوندا. هن کي پنهنجي سسٽم جي وسيلن کي ضايع ڪرڻو پوندو ۽ انتظار ڪرڻو پوندو جيستائين ڪنيڪشن جو وقت ختم ٿئي، يا دستي طور تي ان کي ختم ڪيو وڃي.
گهڻو ڪري، tarpits تحفظ لاء استعمال ٿيندا آهن. ٽيڪنڪ پهريون ڀيرو ڪمپيوٽر جي ورم کان بچائڻ لاء تيار ڪئي وئي هئي. ۽ ھاڻي اھو استعمال ڪري سگھجي ٿو اسپامرز ۽ محققن جي زندگين کي برباد ڪرڻ لاءِ جيڪي ھڪڙي قطار ۾ سڀني IP پتي جي وسيع اسڪيننگ ۾ مصروف آھن (مثال طور Habré تي: , ).
سسٽم ايڊمنسٽريٽرن مان هڪ ڪرس ويلنز نالي هڪ شخص ظاهري طور تي هن بي عزتي کي ڏسي ٿڪجي پيو هو - ۽ هن هڪ ننڍڙو پروگرام لکيو. ، SSH لاءِ هڪ تارپٽ جيڪو ايندڙ ڪنيڪشن کي سست ڪري ٿو. پروگرام هڪ بندرگاهه کوليندو آهي (ٽيسٽنگ لاءِ ڊفالٽ پورٽ 2222 آهي) ۽ هڪ SSH سرور هجڻ جو دعويٰ ڪري ٿو، پر حقيقت ۾ اهو اچڻ واري ڪلائنٽ سان لامحدود ڪنيڪشن قائم ڪري ٿو جيستائين اهو ڏئي ڇڏي. اهو ڪيترن ئي ڏينهن تائين جاري رهي سگهي ٿو يا وڌيڪ جيستائين ڪلائنٽ بند نه ٿئي.
افاديت جي انسٽاليشن:
$ make
$ ./endlessh &
$ ssh -p2222 localhostصحيح طريقي سان لاڳو ٿيل ٽرپٽ حملي ڪندڙ کان وڌيڪ وسيلا وٺي ويندا توهان کان. پر اهو به وسيلن جو معاملو ناهي. ليکڪ ته پروگرام لت آهي. هن وقت ان ۾ 27 ڪلائنٽ ڦاٿل آهن، انهن مان ڪجهه هفتن لاءِ ڳنڍيل آهن. سرگرمي جي چوٽي تي، 1378 ڪلائنٽ 20 ڪلاڪن تائين پھنس ويا!
آپريٽنگ موڊ ۾، Endlesssh سرور کي معمول جي بندرگاهن 22 تي انسٽال ڪرڻ جي ضرورت آهي، جتي غنڊا ٽوڙيندا آهن. معياري حفاظتي سفارشون هميشه SSH کي مختلف بندرگاهن ڏانهن منتقل ڪرڻ جي صلاح ڏين ٿيون، جيڪو فوري طور تي لاگ ان جي ماپ کي گھٽائي ٿو.
ڪرس ويلنس چوي ٿو ته هن جو پروگرام وضاحت جي هڪ پيراگراف کي استحصال ڪري ٿو SSH پروٽوڪول ڏانهن. TCP ڪنيڪشن قائم ٿيڻ کان فوري پوءِ، پر ان کان اڳ جو ڪرپٽ گرافي لاڳو ٿئي، ٻنهي ڌرين کي لازمي طور تي هڪ سڃاڻپ واري تار موڪلڻ گهرجي. ۽ اتي پڻ هڪ نوٽ آهي: "سرور ورزن قطار موڪلڻ کان اڳ ڊيٽا جون ٻيون قطارون موڪلي سگھي ٿو". ۽ ڪابه حد ناهي هن ڊيٽا جي مقدار تي، توهان کي صرف هر لڪير سان شروع ڪرڻ جي ضرورت آهي SSH-.
اھو اھو آھي جيڪو لامحدود پروگرام ڪندو آھي: اھو موڪليو لامتناہی بي ترتيب ٺاهيل ڊيٽا جو وهڪرو، جيڪو RFC 4253 سان مطابقت رکي ٿو، اهو آهي، تصديق ڪرڻ کان اڳ موڪليو، ۽ هر لائن شروع ٿئي ٿي SSH- ۽ 255 اکرن کان وڌيڪ نه هجي، جنهن ۾ لڪير جي پڇاڙي وارو ڪردار به شامل آهي. عام طور تي، هر شيء معيار جي مطابق آهي.
ڊفالٽ طور، پروگرام پيڪٽ موڪلڻ جي وچ ۾ 10 سيڪنڊن جو انتظار ڪري ٿو. هي ڪلائنٽ کي وقت ختم ٿيڻ کان روڪي ٿو، تنهنڪري ڪلائنٽ هميشه لاء ڦاسي ويندو.
جيئن ته ڊيٽا موڪلڻ کان اڳ ڪرپٽوگرافي لاڳو ٿئي ٿي، پروگرام تمام سادو آهي. اهو ڪنهن به سيفرن کي لاڳو ڪرڻ جي ضرورت ناهي ۽ ڪيترن ئي پروٽوڪول کي سپورٽ ڪري ٿو.
ليکڪ کي يقيني بڻائڻ جي ڪوشش ڪئي وئي ته افاديت گهٽ ۾ گهٽ وسيلن کي استعمال ڪري ٿو ۽ مشين تي مڪمل طور تي اڻڄاتل ڪم ڪري ٿو. جديد اينٽي وائرس ۽ ٻين "سيڪيورٽي سسٽم" جي برعڪس، اهو توهان جي ڪمپيوٽر کي سست نه ڪرڻ گهرجي. هن ٿورو وڌيڪ چالاڪ سافٽ ويئر لاڳو ڪرڻ جي ڪري ٽرئفڪ ۽ ياداشت جي استعمال کي گهٽائڻ ۾ مدد ڪئي. جيڪڏهن اهو آسان طور تي هڪ نئين ڪنيڪشن تي هڪ الڳ عمل شروع ڪيو، ته پوء امڪاني حملي ڪندڙ مشين تي وسيلن کي ختم ڪرڻ لاء ڪيترن ئي ڪنيڪشن کي کولڻ سان هڪ DDoS حملو شروع ڪري سگهي ٿو. ھڪڙي سلسلي في ڪنيڪشن پڻ بھترين اختيار نه آھي، ڇاڪاڻتہ ڪنييل وسيلن کي ٿريڊز کي منظم ڪرڻ ۾ ضايع ڪندو.
اهو ئي سبب آهي ته ڪرس ويلونز چونڊيو آهي سڀ کان وڌيڪ ٿلهي آپشن لاءِ Endlessh: هڪ واحد موضوع وارو سرور poll(2)، جتي ڦاٿل ڪلائنٽ عملي طور تي ڪو به اضافي وسيلا استعمال نٿا ڪن، سواءِ ڪرنل ساکٽ آبجيڪٽ ۽ اينڊليش ۾ ٽريڪنگ لاءِ اضافي 78 بائيٽس جي. هر ڪلائنٽ لاءِ وصول ۽ موڪلڻ بفر مختص ڪرڻ کان بچڻ لاءِ، اينڊليش هڪ سڌو رسائي ساکٽ کوليندو آهي ۽ سڌو سنئون TCP پيڪٽس کي رليز ڪندو آهي، تقريبن سڄي اسٽيڪ کي نظرانداز ڪندي. TCP/IP آپريٽنگ سسٽم. ان پٽ بفر جي بلڪل به ضرورت ناهي ڇو ته اسان کي ايندڙ ڊيٽا ۾ دلچسپي ناهي.
ليکڪ جو چوڻ آهي ته سندس پروگرام جي وقت ۾ پٿون جي اسڪيو ۽ ٻين تارپٽس جي وجود بابت. جيڪڏهن هو asycio بابت ڄاڻندو هو، ته هو پٿون ۾ صرف 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 حملو. بهرحال، اڃا تائين اهڙا ڪيس نه آهن، ۽ tarpits عظيم ڪم ڪن ٿا.
جو ذريعو: www.habr.com
