အဝင် SSH ချိတ်ဆက်မှုများအတွက် ထောင်ချောက် (tarpit)

အင်တာနက်သည် အလွန်ရန်လိုသောပတ်ဝန်းကျင်ဖြစ်သည်ဟူသော လျှို့ဝှက်ချက်မဟုတ်ပါ။ ဆာဗာတစ်ခုကို သင်မြှင့်တင်လိုက်သည်နှင့် ၎င်းသည် ကြီးမားသော တိုက်ခိုက်မှုများနှင့် စကင်ဖတ်စစ်ဆေးမှုများစွာကို ချက်ချင်းခံရမည်ဖြစ်သည်။ ဥပမာအားဖြင့် လုံခြုံရေးအစောင့်ထံမှပျားရည်အိုး ဤအမှိုက်လမ်းကြောင်း၏အတိုင်းအတာကို သင်ခန့်မှန်းနိုင်သည်။ တကယ်တော့၊ ပျမ်းမျှဆာဗာမှာ အသွားအလာ 99% ဟာ အန္တရာယ်ရှိနိုင်ပါတယ်။

Tarpit သည် အဝင်ချိတ်ဆက်မှုများကို နှေးကွေးစေရန် အသုံးပြုသော ထောင်ချောက်အပေါက်တစ်ခုဖြစ်သည်။ Third-party စနစ်သည် ဤ port သို့ ချိတ်ဆက်ပါက၊ သင်သည် ချိတ်ဆက်မှုကို လျင်မြန်စွာ ပိတ်နိုင်မည် မဟုတ်ပါ။ သူမသည် ၎င်း၏စနစ်ရင်းမြစ်များကို ဖြုန်းတီးပြီး ချိတ်ဆက်မှု ကုန်ဆုံးသည်အထိ စောင့်ရမည် သို့မဟုတ် ၎င်းကို ကိုယ်တိုင်အဆုံးသတ်သွားမည်ဖြစ်သည်။

အများစုမှာ အကာအကွယ်အတွက် ကာရန်များကို အသုံးပြုကြသည်။ ကွန်ပြူတာ ပိုးမွှားများကို ကာကွယ်ရန် အဆိုပါနည်းပညာကို ပထမဆုံးတီထွင်ခဲ့ခြင်းဖြစ်သည်။ ယခုတွင် IP လိပ်စာအားလုံးကို ဆက်တိုက်စကင်န်ဖတ်ခြင်းတွင် ပါဝင်နေသော spammers နှင့် researchers များ၏ဘဝများကို ပျက်စီးစေရန်အတွက် ၎င်းကိုအသုံးပြုနိုင်ပြီ (Habré တွင်ဥပမာများ- သြစတြီးယား, ယူကရိန်း).

Chris Wellons လို့ အမည်ပေးထားတဲ့ စနစ်စီမံခန့်ခွဲသူတွေထဲက တစ်ယောက်က ဒီအရှက်ကွဲမှုကို ကြည့်ရတာ ငြီးငွေ့သွားပုံရပြီး ပရိုဂရမ်လေးတစ်ခု ရေးခဲ့ပါတယ်။ အဆုံးမဲ့အဝင်ချိတ်ဆက်မှုများကို နှေးကွေးစေသော SSH အတွက် tarpit တစ်ခု။ ပရိုဂရမ်သည် ပို့တ်တစ်ခုဖွင့်သည် (စမ်းသပ်မှုအတွက် မူရင်းဆိပ်ကမ်းမှာ 2222) ဖြစ်ပြီး SSH ဆာဗာအဖြစ် ဟန်ဆောင်သော်လည်း လက်တွေ့တွင် ၎င်းသည် ဝင်လာသည့် client နှင့် အဆုံးမဲ့ချိတ်ဆက်မှုတစ်ခုကို စွန့်လွှတ်သည်အထိ ပြုလုပ်ပေးပါသည်။ ဖောက်သည် ပြုတ်ကျသည်အထိ ၎င်းသည် ရက်အတော်ကြာ သို့မဟုတ် ထို့ထက်ပို၍ ဆက်သွားနိုင်သည်။

utility ကိုတပ်ဆင်ခြင်း-

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

မှန်ကန်စွာ အကောင်အထည်ဖော်ထားသော တာပီသည် သင့်ထက် တိုက်ခိုက်သူထံမှ အရင်းအမြစ်များကို ပိုမိုရယူမည်ဖြစ်သည်။ ဒါပေမယ့် အရင်းအနှီးကိစ္စတောင် မဟုတ်ဘူး။ စာရေးသူ သူကရေးသားခဲ့သည်ပရိုဂရမ်က စွဲလမ်းစေတယ်။ လက်ရှိတွင် ၎င်းတွင် ပိတ်မိနေသည့် ဖောက်သည် ၂၇ ဦးရှိပြီး အချို့မှာ ရက်သတ္တပတ်များစွာ ချိတ်ဆက်ထားသည်။ လှုပ်ရှားမှု၏အထွတ်အထိပ်တွင်၊ ဖောက်သည် 27 သည် နာရီ 1378 ကြာပိတ်မိနေခဲ့သည်။

လည်ပတ်မှုမုဒ်တွင်၊ လူဆိုးများ အစုလိုက်အပြုံလိုက် ခေါက်လိုက်သည့် ပုံမှန် port 22 တွင် Endlessh ဆာဗာကို ထည့်သွင်းရန် လိုအပ်သည်။ စံလုံခြုံရေး အကြံပြုချက်များသည် SSH ကို မတူညီသော ဆိပ်ကမ်းတစ်ခုသို့ ရွှေ့ရန် အမြဲတမ်း အကြံပေးသည်၊ ၎င်းသည် မှတ်တမ်းများ၏ အရွယ်အစားကို ပြင်းအားအစီအစဥ်ဖြင့် ချက်ခြင်း လျှော့ချပေးပါသည်။

Chris Wellons က သူ၏ ပရိုဂရမ်သည် သတ်မှတ်ချက်၏ အပိုဒ်တစ်ပိုဒ်ကို အသုံးချသည်ဟု ဆိုသည်။ RFC 4253 SSH ပရိုတိုကောသို့။ TCP ချိတ်ဆက်မှုတစ်ခုကို တည်ထောင်ပြီးနောက် ချက်ခြင်းတွင်၊ သို့သော် cryptography ကို မကျင့်သုံးမီ၊ နှစ်ဖက်စလုံးမှ အထောက်အထားစာကြောင်းတစ်ခု ပေးပို့ရမည်ဖြစ်သည်။ ပြီးတော့ မှတ်စုတစ်ခုလည်း ရှိပါတယ်- "ဗားရှင်းအတန်းကို မပို့မီ ဆာဗာသည် အခြားဒေတာအတန်းများကို ပေးပို့နိုင်သည်"။ နှင့် အကန့်အသတ်မရှိ ဤဒေတာ၏ထုထည်ပေါ်တွင်၊ သင်သည် စာကြောင်းတစ်ခုစီဖြင့် စတင်ရန်သာလိုသည်။ SSH-.

ဤသည်မှာ Endlessh ပရိုဂရမ်က အတိအကျလုပ်ဆောင်သည်- ၎င်း ပို့သည် အဆုံးမရှိသော ကျပန်းထုတ်ပေးသော ဒေတာစီးကြောင်းRFC 4253 နှင့် ကိုက်ညီသော၊ ဆိုလိုသည်မှာ အထောက်အထားမခိုင်လုံမီ ပေးပို့ပြီး စာကြောင်းတစ်ခုစီမှ အစပြုပါသည်။ SSH- မျဉ်းအဆုံးစာလုံးအပါအဝင် စာလုံး 255 လုံးထက် မပိုစေရပါ။ ယေဘုယျအားဖြင့် အရာအားလုံးသည် စံနှုန်းအတိုင်းဖြစ်သည်။

ပုံမှန်အားဖြင့်၊ ပရိုဂရမ်သည် packets ပေးပို့ခြင်းကြား 10 စက္ကန့်စောင့်သည်။ ၎င်းသည် သုံးစွဲသူအား အချိန်ကုန်ခြင်းမှ တားဆီးထားသောကြောင့် သုံးစွဲသူသည် ထာဝရ ပိတ်မိနေမည်ဖြစ်သည်။

cryptography ကို အသုံးမပြုမီ ဒေတာကို ပေးပို့ခြင်းဖြစ်သောကြောင့်၊ ပရိုဂရမ်သည် အလွန်ရိုးရှင်းပါသည်။ ၎င်းသည် မည်သည့်စာဝှက်ကိုမဆို အကောင်အထည်ဖော်ရန် မလိုအပ်ဘဲ ပရိုတိုကောများစွာကို ပံ့ပိုးပေးသည်။

စာရေးသူသည် utility သည် အနည်းဆုံး အရင်းအမြစ်များကို သုံးစွဲပြီး စက်ပေါ်တွင် လုံးဝသတိမပြုမိကြောင်း သေချာစေရန် ကြိုးစားခဲ့သည်။ ခေတ်မီဗိုင်းရပ်စ်ပိုးများနှင့် အခြား "လုံခြုံရေးစနစ်များ" နှင့်မတူဘဲ၊ ၎င်းသည် သင့်ကွန်ပျူတာကို နှေးကွေးစေသင့်သည်။ အနည်းငယ်ပိုကောက်ကျစ်သောဆော့ဖ်ဝဲကို အကောင်အထည်ဖော်မှုကြောင့် အသွားအလာနှင့် မှတ်ဉာဏ်သုံးစွဲမှု နှစ်မျိုးလုံးကို လျှော့ချနိုင်ခဲ့သည်။ အကယ်၍ ၎င်းသည် ချိတ်ဆက်မှုအသစ်တစ်ခုတွင် သီးခြားလုပ်ငန်းစဉ်တစ်ခုကို ရိုးရိုးရှင်းရှင်းစတင်ခဲ့မည်ဆိုလျှင်၊ ဖြစ်နိုင်ချေရှိသော တိုက်ခိုက်သူများသည် စက်ပေါ်ရှိ အရင်းအမြစ်များဆီသို့ ချိတ်ဆက်မှုများစွာကိုဖွင့်ခြင်းဖြင့် DDoS တိုက်ခိုက်မှုကို စတင်နိုင်သည်။ ချိတ်ဆက်မှုတစ်ခုလျှင် thread တစ်ခုသည် အကောင်းဆုံးရွေးချယ်မှုမဟုတ်ပေ။

ထို့ကြောင့် Chris Wellons သည် Endlessh အတွက် အပေါ့ပါးဆုံး ရွေးချယ်မှုဖြစ်သည်- single-threaded server ကို ရွေးချယ်ခဲ့သည်။ poll(2)ထောင်ချောက်ထဲရှိ ဖောက်သည်များသည် kernel ရှိ socket အရာဝတ္ထုနှင့် Endlessh တွင် ခြေရာခံခြင်းအတွက် အခြား 78 bytes ကို ထည့်မတွက်ဘဲ အပိုအရင်းအမြစ်များကို လုံးဝနီးပါးစားသုံးပါသည်။ ကလိုင်းယင့်တစ်ခုစီအတွက် လက်ခံခြင်းနှင့် ပေးပို့ခြင်းကြားခံများကို ခွဲဝေသတ်မှတ်ခြင်းမှ ရှောင်ကြဉ်ရန်၊ 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 တိုက်ခိုက်မှု။ သို့သော်လည်း ယခုအချိန်အထိ ထိုသို့သောကိစ္စများ မရှိသေးဘဲ ကာရန်းများသည် ကောင်းမွန်စွာ အလုပ်လုပ်ပါသည်။

အချက်အချာများ-
Python၊ သတင်းအချက်အလက်လုံခြုံရေး၊ ဆော့ဖ်ဝဲလ်၊ စနစ်စီမံခန့်ခွဲမှု

Tags:
SSH၊ Endlessh၊ tarpit၊ tarpit၊ ထောင်ချောက်၊ asycio
အဝင် SSH ချိတ်ဆက်မှုများအတွက် ထောင်ချောက် (tarpit)

အင်တာနက်သည် အလွန်ရန်လိုသောပတ်ဝန်းကျင်ဖြစ်သည်ဟူသော လျှို့ဝှက်ချက်မဟုတ်ပါ။ ဆာဗာတစ်ခုကို သင်မြှင့်တင်လိုက်သည်နှင့် ၎င်းသည် ကြီးမားသော တိုက်ခိုက်မှုများနှင့် စကင်ဖတ်စစ်ဆေးမှုများစွာကို ချက်ချင်းခံရမည်ဖြစ်သည်။ ဥပမာအားဖြင့် လုံခြုံရေးအစောင့်ထံမှပျားရည်အိုး ဤအမှိုက်လမ်းကြောင်း၏အတိုင်းအတာကို သင်ခန့်မှန်းနိုင်သည်။ တကယ်တော့၊ ပျမ်းမျှဆာဗာမှာ အသွားအလာ 99% ဟာ အန္တရာယ်ရှိနိုင်ပါတယ်။

Tarpit သည် အဝင်ချိတ်ဆက်မှုများကို နှေးကွေးစေရန် အသုံးပြုသော ထောင်ချောက်အပေါက်တစ်ခုဖြစ်သည်။ Third-party စနစ်သည် ဤ port သို့ ချိတ်ဆက်ပါက၊ သင်သည် ချိတ်ဆက်မှုကို လျင်မြန်စွာ ပိတ်နိုင်မည် မဟုတ်ပါ။ သူမသည် ၎င်း၏စနစ်ရင်းမြစ်များကို ဖြုန်းတီးပြီး ချိတ်ဆက်မှု ကုန်ဆုံးသည်အထိ စောင့်ရမည် သို့မဟုတ် ၎င်းကို ကိုယ်တိုင်အဆုံးသတ်သွားမည်ဖြစ်သည်။

အများစုမှာ အကာအကွယ်အတွက် ကာရန်များကို အသုံးပြုကြသည်။ ကွန်ပြူတာ ပိုးမွှားများကို ကာကွယ်ရန် အဆိုပါနည်းပညာကို ပထမဆုံးတီထွင်ခဲ့ခြင်းဖြစ်သည်။ ယခုတွင် IP လိပ်စာအားလုံးကို ဆက်တိုက်စကင်န်ဖတ်ခြင်းတွင် ပါဝင်နေသော spammers နှင့် researchers များ၏ဘဝများကို ပျက်စီးစေရန်အတွက် ၎င်းကိုအသုံးပြုနိုင်ပြီ (Habré တွင်ဥပမာများ- သြစတြီးယား, ယူကရိန်း).

Chris Wellons လို့ အမည်ပေးထားတဲ့ စနစ်စီမံခန့်ခွဲသူတွေထဲက တစ်ယောက်က ဒီအရှက်ကွဲမှုကို ကြည့်ရတာ ငြီးငွေ့သွားပုံရပြီး ပရိုဂရမ်လေးတစ်ခု ရေးခဲ့ပါတယ်။ အဆုံးမဲ့အဝင်ချိတ်ဆက်မှုများကို နှေးကွေးစေသော SSH အတွက် tarpit တစ်ခု။ ပရိုဂရမ်သည် ပို့တ်တစ်ခုဖွင့်သည် (စမ်းသပ်မှုအတွက် မူရင်းဆိပ်ကမ်းမှာ 2222) ဖြစ်ပြီး SSH ဆာဗာအဖြစ် ဟန်ဆောင်သော်လည်း လက်တွေ့တွင် ၎င်းသည် ဝင်လာသည့် client နှင့် အဆုံးမဲ့ချိတ်ဆက်မှုတစ်ခုကို စွန့်လွှတ်သည်အထိ ပြုလုပ်ပေးပါသည်။ ဖောက်သည် ပြုတ်ကျသည်အထိ ၎င်းသည် ရက်အတော်ကြာ သို့မဟုတ် ထို့ထက်ပို၍ ဆက်သွားနိုင်သည်။

utility ကိုတပ်ဆင်ခြင်း-

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

မှန်ကန်စွာ အကောင်အထည်ဖော်ထားသော တာပီသည် သင့်ထက် တိုက်ခိုက်သူထံမှ အရင်းအမြစ်များကို ပိုမိုရယူမည်ဖြစ်သည်။ ဒါပေမယ့် အရင်းအနှီးကိစ္စတောင် မဟုတ်ဘူး။ စာရေးသူ သူကရေးသားခဲ့သည်ပရိုဂရမ်က စွဲလမ်းစေတယ်။ လက်ရှိတွင် ၎င်းတွင် ပိတ်မိနေသည့် ဖောက်သည် ၂၇ ဦးရှိပြီး အချို့မှာ ရက်သတ္တပတ်များစွာ ချိတ်ဆက်ထားသည်။ လှုပ်ရှားမှု၏အထွတ်အထိပ်တွင်၊ ဖောက်သည် 27 သည် နာရီ 1378 ကြာပိတ်မိနေခဲ့သည်။

လည်ပတ်မှုမုဒ်တွင်၊ လူဆိုးများ အစုလိုက်အပြုံလိုက် ခေါက်လိုက်သည့် ပုံမှန် port 22 တွင် Endlessh ဆာဗာကို ထည့်သွင်းရန် လိုအပ်သည်။ စံလုံခြုံရေး အကြံပြုချက်များသည် SSH ကို မတူညီသော ဆိပ်ကမ်းတစ်ခုသို့ ရွှေ့ရန် အမြဲတမ်း အကြံပေးသည်၊ ၎င်းသည် မှတ်တမ်းများ၏ အရွယ်အစားကို ပြင်းအားအစီအစဥ်ဖြင့် ချက်ခြင်း လျှော့ချပေးပါသည်။

Chris Wellons က သူ၏ ပရိုဂရမ်သည် သတ်မှတ်ချက်၏ အပိုဒ်တစ်ပိုဒ်ကို အသုံးချသည်ဟု ဆိုသည်။ RFC 4253 SSH ပရိုတိုကောသို့။ TCP ချိတ်ဆက်မှုတစ်ခုကို တည်ထောင်ပြီးနောက် ချက်ခြင်းတွင်၊ သို့သော် cryptography ကို မကျင့်သုံးမီ၊ နှစ်ဖက်စလုံးမှ အထောက်အထားစာကြောင်းတစ်ခု ပေးပို့ရမည်ဖြစ်သည်။ ပြီးတော့ မှတ်စုတစ်ခုလည်း ရှိပါတယ်- "ဗားရှင်းအတန်းကို မပို့မီ ဆာဗာသည် အခြားဒေတာအတန်းများကို ပေးပို့နိုင်သည်"။ နှင့် အကန့်အသတ်မရှိ ဤဒေတာ၏ထုထည်ပေါ်တွင်၊ သင်သည် စာကြောင်းတစ်ခုစီဖြင့် စတင်ရန်သာလိုသည်။ SSH-.

ဤသည်မှာ Endlessh ပရိုဂရမ်က အတိအကျလုပ်ဆောင်သည်- ၎င်း ပို့သည် အဆုံးမရှိသော ကျပန်းထုတ်ပေးသော ဒေတာစီးကြောင်းRFC 4253 နှင့် ကိုက်ညီသော၊ ဆိုလိုသည်မှာ အထောက်အထားမခိုင်လုံမီ ပေးပို့ပြီး စာကြောင်းတစ်ခုစီမှ အစပြုပါသည်။ SSH- မျဉ်းအဆုံးစာလုံးအပါအဝင် စာလုံး 255 လုံးထက် မပိုစေရပါ။ ယေဘုယျအားဖြင့် အရာအားလုံးသည် စံနှုန်းအတိုင်းဖြစ်သည်။

ပုံမှန်အားဖြင့်၊ ပရိုဂရမ်သည် packets ပေးပို့ခြင်းကြား 10 စက္ကန့်စောင့်သည်။ ၎င်းသည် သုံးစွဲသူအား အချိန်ကုန်ခြင်းမှ တားဆီးထားသောကြောင့် သုံးစွဲသူသည် ထာဝရ ပိတ်မိနေမည်ဖြစ်သည်။

cryptography ကို အသုံးမပြုမီ ဒေတာကို ပေးပို့ခြင်းဖြစ်သောကြောင့်၊ ပရိုဂရမ်သည် အလွန်ရိုးရှင်းပါသည်။ ၎င်းသည် မည်သည့်စာဝှက်ကိုမဆို အကောင်အထည်ဖော်ရန် မလိုအပ်ဘဲ ပရိုတိုကောများစွာကို ပံ့ပိုးပေးသည်။

စာရေးသူသည် utility သည် အနည်းဆုံး အရင်းအမြစ်များကို သုံးစွဲပြီး စက်ပေါ်တွင် လုံးဝသတိမပြုမိကြောင်း သေချာစေရန် ကြိုးစားခဲ့သည်။ ခေတ်မီဗိုင်းရပ်စ်ပိုးများနှင့် အခြား "လုံခြုံရေးစနစ်များ" နှင့်မတူဘဲ၊ ၎င်းသည် သင့်ကွန်ပျူတာကို နှေးကွေးစေသင့်သည်။ အနည်းငယ်ပိုကောက်ကျစ်သောဆော့ဖ်ဝဲကို အကောင်အထည်ဖော်မှုကြောင့် အသွားအလာနှင့် မှတ်ဉာဏ်သုံးစွဲမှု နှစ်မျိုးလုံးကို လျှော့ချနိုင်ခဲ့သည်။ အကယ်၍ ၎င်းသည် ချိတ်ဆက်မှုအသစ်တစ်ခုတွင် သီးခြားလုပ်ငန်းစဉ်တစ်ခုကို ရိုးရိုးရှင်းရှင်းစတင်ခဲ့မည်ဆိုလျှင်၊ ဖြစ်နိုင်ချေရှိသော တိုက်ခိုက်သူများသည် စက်ပေါ်ရှိ အရင်းအမြစ်များဆီသို့ ချိတ်ဆက်မှုများစွာကိုဖွင့်ခြင်းဖြင့် DDoS တိုက်ခိုက်မှုကို စတင်နိုင်သည်။ ချိတ်ဆက်မှုတစ်ခုလျှင် thread တစ်ခုသည် အကောင်းဆုံးရွေးချယ်မှုမဟုတ်ပေ။

ထို့ကြောင့် Chris Wellons သည် Endlessh အတွက် အပေါ့ပါးဆုံး ရွေးချယ်မှုဖြစ်သည်- single-threaded server ကို ရွေးချယ်ခဲ့သည်။ poll(2)ထောင်ချောက်ထဲရှိ ဖောက်သည်များသည် kernel ရှိ socket အရာဝတ္ထုနှင့် Endlessh တွင် ခြေရာခံခြင်းအတွက် အခြား 78 bytes ကို ထည့်မတွက်ဘဲ အပိုအရင်းအမြစ်များကို လုံးဝနီးပါးစားသုံးပါသည်။ ကလိုင်းယင့်တစ်ခုစီအတွက် လက်ခံခြင်းနှင့် ပေးပို့ခြင်းကြားခံများကို ခွဲဝေသတ်မှတ်ခြင်းမှ ရှောင်ကြဉ်ရန်၊ 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 တိုက်ခိုက်မှု။ သို့သော်လည်း ယခုအချိန်အထိ ထိုသို့သောကိစ္စများ မရှိသေးဘဲ ကာရန်းများသည် ကောင်းမွန်စွာ အလုပ်လုပ်ပါသည်။

အဝင် SSH ချိတ်ဆက်မှုများအတွက် ထောင်ချောက် (tarpit)

source: www.habr.com

မှတ်ချက် Add