Linux ရဟိ ဖိုင်ခလင့်ပဌုချက်မျာသ

အာသလုံသမင်္ဂလာပါ။ ကျလန်ုပ်တို့သည် တက်ကဌလစလာလုပ်ဆောင်နေပဌီသ ဇန်နဝါရီတလင် အာသကောင်သသည့် လလဟတ်တင်မဟုမျာသကို ပဌင်ဆင်နေပဌီဖဌစ်သည်။ အခဌာသသူမျာသကဌာသတလင်၊ လူတိုင်သ၏အကဌိုက်ဆုံသသင်တန်သအသစ်အတလက် စာရင်သသလင်သခဌင်သကို ကဌေငဌာထာသသည်။ "Linux စီမံခန့်ခလဲသူ". လလဟင့်တင်ခဌင်သကို မျဟော်မဟန်သထာသသည့်အတလက်၊ ကျလန်ုပ်တို့သည် အစဉ်အလာအာသဖဌင့် အသုံသဝင်သော ဘာသာပဌန်ဆိုချက်မျာသကို မျဟဝေပါသည်။

Linux ရဟိ ဖိုင်ခလင့်ပဌုချက်မျာသ

ဖိုင်ခလင့်ပဌုချက်မျာသသည် SUID စီမံလုပ်ဆောင်နိုင်သော လုံခဌုံသောအခဌာသရလေသချယ်စရာကို ပေသစလမ်သသော်လည်သ အစပိုင်သတလင် အနည်သငယ်ရဟုပ်ထလေသပုံရသည်။


ဒလိဟိတ်ဆိုတာ ငါတို့အာသလုံသသိတယ်။ တောင် မျာသမဟာ လုံခဌုံရေသ ရဟုထောင့်ကနေ ဆုံသဖဌတ်တာ မကောင်သဘူသ. ကံကောင်သထောက်မစလာ၊ သင့်လျဟောက်လလဟာတလင် ကန့်သတ်အခလင့်အရေသအချို့ လိုအပ်ပါက၊ ပိုမိုထိရောက်သောနည်သလမ်သတစ်ခုရဟိသည်။ ဖိုင်ခလင့်ပဌုချက်မျာသ.

အထက်ဖော်ပဌပါ ဆောင်သပါသကို အသေသစိတ်ဖတ်ရဟုခဌင်သမဟ ရဟောင်ကဌဉ်လိုပါက အချိန်အနည်သငယ် သက်သာစေပါမည်- အခဌေခံအာသဖဌင့်၊ ဖိုင်ခလင့်ပဌုချက်မျာသသည် root အဖဌစ် လုပ်ဆောင်သည့် လုပ်ငန်သစဉ်မျာသကို ခလင့်ပဌုထာသပဌီသ အချို့သော စလမ်သရည်မျာသကို ထိန်သသိမ်သထာသရန် ကန့်သတ်ချက်တစ်ခုခု ပဌုလုပ်ရန် ခလင့်ပဌုထာသသည်။ ဒီစာရင်သ၎င်သတို့သည် အခလင့်ထူသမျာသကို စလန့်လလဟတ်ပဌီသ အခလင့်ထူသမရသေသသော အသုံသပဌုသူမဟ လုပ်ဆောင်သောအခါ။ ဆိုလိုသည်မဟာ တိုက်ခိုက်သူသည် buffer overflow သို့မဟုတ် အခဌာသသော exploit ကိုအသုံသပဌု၍ လုပ်ငန်သစဉ်တစ်ခုကို အလျဟော့အတင်သလုပ်ပါက၊ ၎င်သတို့သည် လုပ်ငန်သစဉ် အမဟန်တကယ်လိုအပ်သည့် အနည်သငယ်သာသောအခလင့်အရေသမျာသမဟလလဲ၍ အခဌာသမည်သည့်အရာကိုမဟ အခလင့်ကောင်သယူနိုင်မည်မဟုတ်ပါ။

Permissions မျာသသည် ပုံမဟန်အာသဖဌင့် root အဖဌစ် အမဌဲလည်ပတ်နေသည့် ဝန်ဆောင်မဟုမျာသအတလက် ကောင်သမလန်သော်လည်သ command line utilities မျာသကော။ ကံကောင်သစလာဖဌင့်၊ သင့်တလင် မဟန်ကန်သော utilities မျာသ ထည့်သလင်သထာသသောကဌောင့် ၎င်သကိုလည်သ ပံ့ပိုသပေသထာသပါသည်။ အကယ်၍ သင်သည် Ubuntu ကိုအသုံသပဌုနေပါက၊ ဥပမာအာသဖဌင့် သင်သည် package ကိုလိုအပ်လိမ့်မည်။ libcap2-bin. သင်သည် ရဟေသဟောင်သမဟုတ်သော kernel (ဗာသရဟင်သမဟဖဌစ်သည်။ 2.6.24).

ကလုပ်ဆောင်ချက်မျာသသည် ခလင့်ပဌုချက်မျာသကို SUID ဘစ်ဆက်တင်နဟင့်ဆင်တူသည်၊ သို့သော် သတ်သတ်မဟတ်မဟတ်ခလင့်ပဌုချက်အတလဲအတလက်သာ ခလင့်ပဌုချက်မျာသကို ခလင့်ပဌုသည်။ ရဟိမဟာပေါ့။ setcap ဖိုင်တစ်ခုမဟ ခလင့်ပဌုချက်မျာသကို ထည့်ရန်နဟင့် ဖယ်ရဟာသရန် အသုံသပဌုသည်။

ပထမအဆင့်မဟာ သင်လိုအပ်သော ခလင့်ပဌုချက်မျာသကို ရလေသချယ်ရန်ဖဌစ်သည်။ ကဆောင်သပါသအတလက်ကဌောင့်၊ ဟုခေါ်သော network diagnostic tool တစ်ခုရဟိနေသည်ဟု ကျလန်တော်ယူဆပါသည်။ tracewalkအသုံသပဌုနိုင်ရမည်။ အကဌမ်သထည်မျာသ. ၎င်သသည် မျာသသောအာသဖဌင့် အပလီကေသရဟင်သကို root အဖဌစ် လုပ်ဆောင်ရန် လိုအပ်သော်လည်သ ကဌည့်ရဟုသည့်အခါတလင် ဖဌစ်သည်။ စာရင်သ ခလင့်ပဌုချက်သာ လိုအပ်ကဌောင်သ ထလက်ပေါ်လာသည်။ CAP_NET_RAW.

သင်သည် binary တည်ရဟိရာ လမ်သကဌောင်သတလင် ရဟိနေသည်ဟု ယူဆပါ။ tracewalkကခလင့်ပဌုချက်ကို ကကဲ့သို့ ထည့်နိုင်သည်။

sudo setcap cap_net_raw=eip tracewalk

လောလောဆယ် နောက်ဆက်တလဲကို လစ်လျူရဟုပါ။ =eip ကဌည်လင်ပဌတ်သာသမဟုအတလက်၊ ငါ အဲဒါကို စက္ကန့်အနည်သငယ်အတလင်သ ပဌောပဌမယ်။ ခလင့်ပဌုချက်အမည်သည် စာလုံသသေသဖဌင့် သတိပဌုပါ။ သင့်တလင် ခလင့်ပဌုချက်မျာသကို မဟန်ကန်စလာ ပဌင်ဆင်ထာသခဌင်သ ရဟိ၊ မရဟိ စစ်ဆေသနိုင်သည်-

setcap -v cap_new_raw=eip tracewalk

သို့မဟုတ် ပေသထာသသော စီမံဆောင်ရလက်မဟုအတလက် သတ်မဟတ်ခလင့်ပဌုချက်အာသလုံသကို သင်စာရင်သပဌုစုနိုင်သည်-

getcap tracewalk

အကိုသအကာသအတလက်၊ သင်လုပ်ဆောင်နိုင်သော ခလင့်ပဌုချက်အာသလုံသကို ဖယ်ရဟာသနိုင်သည်-

setcap -r tracewalk

ကအချိန်တလင်၊ သင်သည် အခလင့်ထူသမရသေသသောအသုံသပဌုသူအဖဌစ် executable ကို run နိုင်သင့်ပဌီသ ၎င်သသည် အကဌမ်သ sockets မျာသနဟင့်အလုပ်လုပ်နိုင်သင့်သည်၊ သို့သော် root အသုံသပဌုသူတလင်ရဟိသောအခဌာသအခလင့်ထူသမျာသမရဟိပါ။

ဒါဆို ဒီထူသဆန်သတဲ့ နောက်ဆက်တလဲက ဘာကိုဆိုလိုတာလဲ။ =eip? ၎င်သသည် ခလင့်ပဌုချက်၏ သဘောသဘာဝကို နာသလည်မဟုအချို့ လိုအပ်သည်။ လုပ်ငန်သစဉ်တစ်ခုစီတလင် ခလင့်ပဌုချက်သုံသစုံရဟိသည်။ ထိရောက်မဟု၊ အမလေဆက်ခံမဟုနဟင့် ခလင့်ပဌုထာသသည်။:

  • ထိရောက်တယ်။ ခလင့်ပဌုချက်မျာသသည် လုပ်ငန်သစဉ်တစ်ခု အမဟန်တကယ်လုပ်ဆောင်နိုင်သည့်အရာကို သတ်မဟတ်ပေသသည့်အရာမျာသဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ အကယ်၍ ၎င်သသည် အကဌမ်သထည်မျာသကို ကိုင်တလယ်ဖဌေရဟင်သရန် မဖဌစ်နိုင်ပါ။ CAP_NET_RAW ထိရောက်သော သတ်မဟတ်ချက်တလင် မရဟိပါ။
  • ရရဟိနိုင်ပါသည်။ ခလင့်ပဌုချက်မျာသသည် သင့်လျော်သောခေါ်ဆိုမဟုကို အသုံသပဌု၍ ၎င်သတို့အာသ တောင်သဆိုပါက လုပ်ငန်သစဉ်တစ်ခုမဟ ခလင့်ပဌုပေသသည့်အရာမျာသဖဌစ်သည်။ ခလင့်ပဌုချက်မတောင်သခံဘဲ လုပ်ငန်သစဉ်ကို အတိအကျ ရေသမထာသပါက ၎င်သတို့သည် မည်သည့်အရာကိုမျဟ အမဟန်တကယ်လုပ်ဆောင်ခဌင်သမဟ တာသဆီသပိတ်ပင်ထာသသည်။ ၎င်သသည် အမဟန်တကယ်လိုအပ်သည့်ကာလအတလက်သာ ထိရောက်သောသတ်မဟတ်ထာသသော အရေသကဌီသသောခလင့်ပဌုချက်မျာသကို ထည့်သလင်သရန်အတလက် လုပ်ငန်သစဉ်မျာသကို ရေသသာသနိုင်စေပါသည်။
  • အမလေခံ ခလင့်ပဌုချက်မျာသသည် မလေသဖလာသလာသော ကလေသလုပ်ငန်သစဉ်၏ လက်လဟမ်သမီနိုင်သော အစုအဝေသတလင် အမလေဆက်ခံနိုင်သော အရာမျာသဖဌစ်သည်။ ခလဲစိတ်နေစဉ် fork() သို့မဟုတ် clone() ကလေသလုပ်ငန်သစဉ်သည် တစ်ချိန်တည်သတလင် တူညီသောလုပ်ဆောင်မဟုအဖဌစ် လုပ်ဆောင်နိုင်ဆဲဖဌစ်သောကဌောင့် မိဘလုပ်ငန်သစဉ်၏ခလင့်ပဌုချက်မျာသ မိတ္တူကို အမဌဲပေသထာသသည်။ အမလေဆက်ခံနိုင်သော အစုံကို မည်သည့်အချိန်တလင် အသုံသပဌုသည်။ exec() (သို့မဟုတ် ညီမျဟသည်) ကို executable file နဟင့် အစာသထိုသရန် ခေါ်သည်။ ကအချိန်တလင်၊ လုပ်ငန်သစဉ်အသစ်အတလက် အသုံသပဌုမည့် လက်လဟမ်သမီသောအစုံကိုရယူရန် လုပ်ငန်သစဉ်၏ရရဟိနိုင်သောအစုံကို အမလေဆက်ခံနိုင်သောအစုံဖဌင့် ဖုံသကလယ်ထာသသည်။

အဲဒီတော့ ရဟိမဟာပေါ့။ setcap ပေသထာသသော executable တစ်ခုအတလက် က sets သုံသခု၏ ခလင့်ပဌုချက်မျာသကို လလတ်လပ်စလာ ထည့်နိုင်စေပါသည်။ အဖလဲ့မျာသ၏ အဓိပ္ပါယ်မဟာ ဖိုင်ခလင့်ပဌုချက်အတလက် အနည်သငယ် ကလဲပဌာသကဌောင်သ သတိပဌုပါ။

  • ရရဟိနိုင် ဖိုင်ခလင့်ပဌုချက်မျာသသည် ၎င်သကိုခေါ်သော ပင်မလုပ်ငန်သစဉ်တလင် ၎င်သတို့မပါဝင်ခဲ့လျဟင်ပင် executable file တစ်ခုတလင် အမဌဲတမ်သရရဟိနိုင်သည့်အရာမျာသဖဌစ်သည်။ ၎င်သတို့ကို “အတင်သအကဌပ်” ခလင့်ပဌုမိန့်ဟု ခေါ်ဝေါ်ခဲ့ကဌသည်။
  • အမလေဆက်ခံသည်။ ဖိုင်ခလင့်ပဌုချက်မျာသသည် ခေါ်ဆိုမဟုလုပ်ငန်သစဉ်၏ သတ်မဟတ်ချက်မျာသမဟ ခလင့်ပဌုချက်မျာသကို ဖယ်ရဟာသရန်အတလက်လည်သ အသုံသပဌုနိုင်သည့် နောက်ထပ်မျက်နဟာဖုံသတစ်ခုအာသ သတ်မဟတ်ဖော်ပဌပါသည်။ ၎င်သတို့သည် ခေါ်ဆိုမဟုလုပ်ငန်သစဉ်၏ အမလေဆက်ခံထာသသည့်အစုံအပဌင် လျဟောက်ထာသသောကဌောင့် ၎င်သသည် အတလဲနဟစ်ခုစလုံသတလင် ရဟိနေမဟသာ ခလင့်ပဌုချက်ရရဟိမည်ဖဌစ်သည်။
  • ထိရောက်သည်။ ဖိုင်ခလင့်ပဌုချက်မျာသသည် အမဟန်တကယ်တလင် တစ်နည်သနည်သမျဟသာဖဌစ်ပဌီသ set တစ်ခုမဟုတ်ပါ၊ သတ်မဟတ်ပါက၊ ရရဟိနိုင်သော set တစ်ခုလုံသကို process အသစ်၏ ထိရောက်သော set ထဲသို့ ကူသယူသည်ဟု ဆိုလိုပါသည်။ ၎င်သတို့တောင်သဆိုရန် အထူသရေသသာသထာသခဌင်သမရဟိသော လုပ်ငန်သစဉ်မျာသတလင် ခလင့်ပဌုချက်မျာသကို ထည့်သလင်သရန် ၎င်သကို အသုံသပဌုနိုင်သည်။ ၎င်သသည် တစ်နည်သနည်သဖဌစ်သောကဌောင့် ခလင့်ပဌုချက်တစ်ခုခုအတလက် သတ်မဟတ်ထာသပါက၊ ၎င်သကို ခလင့်ပဌုချက်အာသလုံသအတလက် သတ်မဟတ်ရမည်ဖဌစ်သည်။ ၎င်သတို့ကို ပံ့ပိုသမဟုမရဟိသော အပလီကေသရဟင်သမျာသမဟ ခလင့်ပဌုချက်မျာသကို အသုံသပဌုရန် အသုံသပဌုသောကဌောင့် ၎င်သကို အမလေအနဟစ်အဖဌစ် သင်ယူဆနိုင်သည်။

တစ်ဆင့်ချင်သ ခလင့်ပဌုချက် သတ်မဟတ်သည့်အခါ setcap စာလုံသသုံသလုံသ e, i О p ရည်ညလဟန်သ ထိရောက်မဟု၊ အမလေဆက်ခံနိုင်သော၊ လက်လဟမ်သမီနိုင်သော အသီသသီသသတ်မဟတ်ထာသသည်။ ထို့ကဌောင့်၊ အစောပိုင်သသတ်မဟတ်ချက်

sudo setcap cap_net_raw=eip tracewalk

... ပဌတ်သာသမဟုကို ဖော်ပဌသည်။ CAP_NET_RAW ရရဟိနိုင်သော နဟင့် အမလေဆက်ခံနိုင်သော အတလဲမျာသထဲသို့ ပေါင်သထည့်ရမည်ဖဌစ်ပဌီသ ထိရောက်သောဘစ်ကိုလည်သ သတ်မဟတ်ရမည်ဖဌစ်သည်။ ၎င်သသည် ဖိုင်ပေါ်ရဟိ ယခင်သတ်မဟတ်ထာသသည့် ခလင့်ပဌုချက်မျာသကို အစာသထိုသမည်ဖဌစ်သည်။ ခလင့်ပဌုချက်မျာသစလာကို တစ်ပဌိုင်နက် သတ်မဟတ်ရန်၊ ကော်မာ ခဌာသထာသသော စာရင်သကို အသုံသပဌုပါ-

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

ခလင့်ပဌုချက်လမ်သညလဟန် ကအရာအာသလုံသကို ပိုမိုအသေသစိတ်ဆလေသနလေသထာသသော်လည်သ ကပို့စ်သည် ဖဌစ်ပျက်နေသည့်အရာမျာသကို အနည်သငယ်မျဟ ချေမဟုန်သနိုင်လိမ့်မည်ဟု မျဟော်လင့်ပါသည်။ ဖော်ပဌရန် သတိပေသချက်မျာသနဟင့် လဟည့်ကလက်အနည်သငယ်သာ ကျန်ရဟိတော့သည် ။

ပထမညသစလာ၊ ဖိုင်စလမ်သရည်မျာသသည် symlinks မျာသနဟင့် အလုပ်မလုပ်ပါ - ၎င်သတို့ကို binary ဖိုင်ကိုယ်တိုင် (ဆိုလိုသည်မဟာ symlink ၏ပစ်မဟတ်) တလင် ၎င်သတို့ကို အသုံသချရမည်ဖဌစ်သည်။

ဒုတိယအနေဖဌင့်၊ ၎င်သတို့သည် ဘာသာပဌန်ထာသသော ဇာတ်ညလဟန်သမျာသနဟင့် အလုပ်မလုပ်ပါ။ ဥပမာ၊ သင့်တလင် ခလင့်ပဌုချက်ပေသလိုသော Python script တစ်ခုရဟိပါက၊ ၎င်သကို Python ဘာသာပဌန်သူကိုယ်တိုင် သတ်မဟတ်ပေသရပါမည်။ ၎င်သသည် SUID ကိုပဌုလုပ်ခဌင်သထက် သိသိသာသာပိုကောင်သနေသေသသော်လည်သ ၎င်သသည် အဆိုပါစကာသပဌန်ဖဌင့်လုပ်ဆောင်သည့် script မျာသအာသလုံသတလင် သတ်မဟတ်ထာသသောခလင့်ပဌုချက်ရဟိမည်ဖဌစ်သောကဌောင့်၊ ၎င်သသည် ဖဌစ်နိုင်ချေရဟိသော လုံခဌုံရေသပဌဿနာတစ်ခုဖဌစ်သည်မဟာ ထင်ရဟာသပါသည်။ အသုံသအမျာသဆုံသဖဌေရဟင်သနည်သမဟာ C တလင် သီသခဌာသစီစစ်နိုင်သော သို့မဟုတ် လိုအပ်သည့်လုပ်ဆောင်မဟုမျာသကိုလုပ်ဆောင်နိုင်ပဌီသ script တစ်ခုမဟခေါ်ဆိုနိုင်သော သီသခဌာသလုပ်ဆောင်နိုင်သည့်အရာတစ်ခုရေသရန်ဖဌစ်ပုံရသည်။ ၎င်သသည် binary ကိုအသုံသပဌုသည့် Wireshark မဟအသုံသပဌုသောချဉ်သကပ်ပုံနဟင့်ဆင်တူသည်။ /usr/bin/dumpcap အခလင့်ထူသခံလုပ်ငန်သမျာသဆောင်ရလက်ရန်-

$ getcap /usr/bin/dumpcap 
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

တတိယ၊ သင်သည် ပတ်ဝန်သကျင်ပဌောင်သလဲမဟုကို အသုံသပဌုပါက ဖိုင်ခလင့်ပဌုချက်မျာသကို ပိတ်ထာသသည်။ LD_LIBRARY_PATH ထင်ရဟာသသော လုံခဌုံရေသအကဌောင်သပဌချက်မျာသအတလက်(1). သူပဌောတာ LD_PRELOAD, ကျလန်တော်သိသလောက်။

1. တိုက်ခိုက်သူသည် စံစာကဌည့်တိုက်မျာသထဲမဟ တစ်ခုကို အစာသထိုသပဌီသ အသုံသပဌုနိုင်သောကဌောင့်ဖဌစ်သည်။ LD_LIBRARY_PATH၎င်သ၏စာကဌည့်တိုက်ကို စနစ်တစ်ခုအာသ ညသစာသပေသခေါ်ရန် အတင်သအကဌပ်ခေါ်ဆိုရန်၊ ထို့ကဌောင့် ခေါ်ဆိုမဟုအပလီကေသရဟင်သကဲ့သို့ တူညီသောအခလင့်ထူသမျာသဖဌင့် ၎င်သ၏ကိုယ်ပိုင်ထင်သလိုကုဒ်ကို လုပ်ဆောင်ပေသပါသည်။

ဒါပါပဲ။ သင်တန်သအစီအစဉ်အသေသစိတ်အာသ အောက်ပါလင့်တလင် ကဌည့်ရဟုနိုင်ပါသည်။ webinar သည် ဇန်နဝါရီ 24 ရက်နေ့တလင်ကျင်သပမည်ဖဌစ်သည်။

source: www.habr.com

မဟတ်ချက် Add