အင်တာနက်သည် အလွန်ရန်လိုသောပတ်ဝန်းကျင်ဖြစ်သည်ဟူသော လျှို့ဝှက်ချက်မဟုတ်ပါ။ ဆာဗာတစ်ခုကို သင်မြှင့်တင်လိုက်သည်နှင့် ၎င်းသည် ကြီးမားသော တိုက်ခိုက်မှုများနှင့် စကင်ဖတ်စစ်ဆေးမှုများစွာကို ချက်ချင်းခံရမည်ဖြစ်သည်။ ဥပမာအားဖြင့်
Tarpit သည် အဝင်ချိတ်ဆက်မှုများကို နှေးကွေးစေရန် အသုံးပြုသော ထောင်ချောက်အပေါက်တစ်ခုဖြစ်သည်။ Third-party စနစ်သည် ဤ port သို့ ချိတ်ဆက်ပါက၊ သင်သည် ချိတ်ဆက်မှုကို လျင်မြန်စွာ ပိတ်နိုင်မည် မဟုတ်ပါ။ သူမသည် ၎င်း၏စနစ်ရင်းမြစ်များကို ဖြုန်းတီးပြီး ချိတ်ဆက်မှု ကုန်ဆုံးသည်အထိ စောင့်ရမည် သို့မဟုတ် ၎င်းကို ကိုယ်တိုင်အဆုံးသတ်သွားမည်ဖြစ်သည်။
အများစုမှာ အကာအကွယ်အတွက် ကာရန်များကို အသုံးပြုကြသည်။ ကွန်ပြူတာ ပိုးမွှားများကို ကာကွယ်ရန် အဆိုပါနည်းပညာကို ပထမဆုံးတီထွင်ခဲ့ခြင်းဖြစ်သည်။ ယခုတွင် IP လိပ်စာအားလုံးကို ဆက်တိုက်စကင်န်ဖတ်ခြင်းတွင် ပါဝင်နေသော spammers နှင့် researchers များ၏ဘဝများကို ပျက်စီးစေရန်အတွက် ၎င်းကိုအသုံးပြုနိုင်ပြီ (Habré တွင်ဥပမာများ-
Chris Wellons လို့ အမည်ပေးထားတဲ့ စနစ်စီမံခန့်ခွဲသူတွေထဲက တစ်ယောက်က ဒီအရှက်ကွဲမှုကို ကြည့်ရတာ ငြီးငွေ့သွားပုံရပြီး ပရိုဂရမ်လေးတစ်ခု ရေးခဲ့ပါတယ်။
utility ကိုတပ်ဆင်ခြင်း-
$ make
$ ./endlessh &
$ ssh -p2222 localhost
မှန်ကန်စွာ အကောင်အထည်ဖော်ထားသော တာပီသည် သင့်ထက် တိုက်ခိုက်သူထံမှ အရင်းအမြစ်များကို ပိုမိုရယူမည်ဖြစ်သည်။ ဒါပေမယ့် အရင်းအနှီးကိစ္စတောင် မဟုတ်ဘူး။ စာရေးသူ
လည်ပတ်မှုမုဒ်တွင်၊ လူဆိုးများ အစုလိုက်အပြုံလိုက် ခေါက်လိုက်သည့် ပုံမှန် port 22 တွင် Endlessh ဆာဗာကို ထည့်သွင်းရန် လိုအပ်သည်။ စံလုံခြုံရေး အကြံပြုချက်များသည် SSH ကို မတူညီသော ဆိပ်ကမ်းတစ်ခုသို့ ရွှေ့ရန် အမြဲတမ်း အကြံပေးသည်၊ ၎င်းသည် မှတ်တမ်းများ၏ အရွယ်အစားကို ပြင်းအားအစီအစဥ်ဖြင့် ချက်ခြင်း လျှော့ချပေးပါသည်။
Chris Wellons က သူ၏ ပရိုဂရမ်သည် သတ်မှတ်ချက်၏ အပိုဒ်တစ်ပိုဒ်ကို အသုံးချသည်ဟု ဆိုသည်။ 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 စတက်တစ်ခုလုံးနီးပါးကို ရှောင်သွားပါသည်။ ကျွန်ုပ်တို့သည် အဝင်ဒေတာကို စိတ်မဝင်စားသောကြောင့် အဝင်ကြားခံသည် လုံးဝမလိုအပ်ပါ။
စာရေးဆရာက သူ့အစီအစဉ်နဲ့သူ ပြောတယ်။
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၊ သတင်းအချက်အလက်လုံခြုံရေး၊ ဆော့ဖ်ဝဲလ်၊ စနစ်စီမံခန့်ခွဲမှု
Tags:
SSH၊ Endlessh၊ tarpit၊ tarpit၊ ထောင်ချောက်၊ asycio
အဝင် SSH ချိတ်ဆက်မှုများအတွက် ထောင်ချောက် (tarpit)
အင်တာနက်သည် အလွန်ရန်လိုသောပတ်ဝန်းကျင်ဖြစ်သည်ဟူသော လျှို့ဝှက်ချက်မဟုတ်ပါ။ ဆာဗာတစ်ခုကို သင်မြှင့်တင်လိုက်သည်နှင့် ၎င်းသည် ကြီးမားသော တိုက်ခိုက်မှုများနှင့် စကင်ဖတ်စစ်ဆေးမှုများစွာကို ချက်ချင်းခံရမည်ဖြစ်သည်။ ဥပမာအားဖြင့်
Tarpit သည် အဝင်ချိတ်ဆက်မှုများကို နှေးကွေးစေရန် အသုံးပြုသော ထောင်ချောက်အပေါက်တစ်ခုဖြစ်သည်။ Third-party စနစ်သည် ဤ port သို့ ချိတ်ဆက်ပါက၊ သင်သည် ချိတ်ဆက်မှုကို လျင်မြန်စွာ ပိတ်နိုင်မည် မဟုတ်ပါ။ သူမသည် ၎င်း၏စနစ်ရင်းမြစ်များကို ဖြုန်းတီးပြီး ချိတ်ဆက်မှု ကုန်ဆုံးသည်အထိ စောင့်ရမည် သို့မဟုတ် ၎င်းကို ကိုယ်တိုင်အဆုံးသတ်သွားမည်ဖြစ်သည်။
အများစုမှာ အကာအကွယ်အတွက် ကာရန်များကို အသုံးပြုကြသည်။ ကွန်ပြူတာ ပိုးမွှားများကို ကာကွယ်ရန် အဆိုပါနည်းပညာကို ပထမဆုံးတီထွင်ခဲ့ခြင်းဖြစ်သည်။ ယခုတွင် IP လိပ်စာအားလုံးကို ဆက်တိုက်စကင်န်ဖတ်ခြင်းတွင် ပါဝင်နေသော spammers နှင့် researchers များ၏ဘဝများကို ပျက်စီးစေရန်အတွက် ၎င်းကိုအသုံးပြုနိုင်ပြီ (Habré တွင်ဥပမာများ-
Chris Wellons လို့ အမည်ပေးထားတဲ့ စနစ်စီမံခန့်ခွဲသူတွေထဲက တစ်ယောက်က ဒီအရှက်ကွဲမှုကို ကြည့်ရတာ ငြီးငွေ့သွားပုံရပြီး ပရိုဂရမ်လေးတစ်ခု ရေးခဲ့ပါတယ်။
utility ကိုတပ်ဆင်ခြင်း-
$ make
$ ./endlessh &
$ ssh -p2222 localhost
မှန်ကန်စွာ အကောင်အထည်ဖော်ထားသော တာပီသည် သင့်ထက် တိုက်ခိုက်သူထံမှ အရင်းအမြစ်များကို ပိုမိုရယူမည်ဖြစ်သည်။ ဒါပေမယ့် အရင်းအနှီးကိစ္စတောင် မဟုတ်ဘူး။ စာရေးသူ
လည်ပတ်မှုမုဒ်တွင်၊ လူဆိုးများ အစုလိုက်အပြုံလိုက် ခေါက်လိုက်သည့် ပုံမှန် port 22 တွင် Endlessh ဆာဗာကို ထည့်သွင်းရန် လိုအပ်သည်။ စံလုံခြုံရေး အကြံပြုချက်များသည် SSH ကို မတူညီသော ဆိပ်ကမ်းတစ်ခုသို့ ရွှေ့ရန် အမြဲတမ်း အကြံပေးသည်၊ ၎င်းသည် မှတ်တမ်းများ၏ အရွယ်အစားကို ပြင်းအားအစီအစဥ်ဖြင့် ချက်ခြင်း လျှော့ချပေးပါသည်။
Chris Wellons က သူ၏ ပရိုဂရမ်သည် သတ်မှတ်ချက်၏ အပိုဒ်တစ်ပိုဒ်ကို အသုံးချသည်ဟု ဆိုသည်။ 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 စတက်တစ်ခုလုံးနီးပါးကို ရှောင်သွားပါသည်။ ကျွန်ုပ်တို့သည် အဝင်ဒေတာကို စိတ်မဝင်စားသောကြောင့် အဝင်ကြားခံသည် လုံးဝမလိုအပ်ပါ။
စာရေးဆရာက သူ့အစီအစဉ်နဲ့သူ ပြောတယ်။
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 သည် အွန်လိုင်းမှ အနိုင်ကျင့်သူများကို အပြစ်ပေးရန်အတွက် ကောင်းမွန်သောကိရိယာတစ်ခုဖြစ်သည်။ မှန်ပါသည်၊ ဆန့်ကျင်ဘက်အနေနှင့်၊ ဆာဗာတစ်ခု၏ ပုံမှန်မဟုတ်သော အပြုအမူကို ၎င်းတို့၏ အာရုံစူးစိုက်မှုကို ဆွဲဆောင်ရန် အန္တရာယ်အချို့ရှိပါသည်။ တစ်စုံတစ်ယောက်
source: www.habr.com