ආයුබෝවන් සියල්ලටම. අපි ක්රියාශීලීව වැඩට බැස සිටින අතර දැනටමත් ජනවාරි මාසයේදී බොහෝ ප්රබල දියත් කිරීම් සූදානම් කරමින් සිටිමු. අනෙක් ඒවා අතර, සියලු දෙනාගේ ප්රියතම පාඨමාලාවේ නව ප්රවාහයක් සඳහා බඳවා ගැනීම නිවේදනය කර ඇත.
ගොනු අවසරයන් SUID ක්රියාත්මක කිරීමට ආරක්ෂිත විකල්පයක් ඉදිරිපත් කරයි, නමුත් මුලදී ටිකක් ව්යාකූල විය හැක.
අපි හැමෝම දන්නවා ද්විමය බව
ඔබට ඉහත ලිපිය විස්තරාත්මකව කියවීමෙන් වැළකී සිටීමට අවශ්ය නම් මම ඔබට යම් කාලයක් ඉතිරි කරමි: අත්යවශ්යයෙන්ම, ගොනු අවසර මඟින් root ලෙස ක්රියාත්මක වන ක්රියාවලීන්ට ඉඩ ලබා දෙන අතර එම නිසා යම් යම් හැකියාවන් රඳවා ගැනීමට යමක් කිරීමට අවසර ඇත, සීමිතය
සාමාන්යයෙන් සෑම විටම root ලෙස ක්රියාත්මක වන සේවාවන් සඳහා අවසර විශිෂ්ටයි, නමුත් විධාන රේඛා උපයෝගිතා ගැන කුමක් කිව හැකිද? වාසනාවකට මෙන්, ඔබ නිවැරදි උපයෝගිතා ස්ථාපනය කර ඇත්නම් මෙයද සහාය දක්වයි. ඔබ Ubuntu භාවිතා කරන්නේ නම්, උදාහරණයක් ලෙස ඔබට පැකේජය අවශ්ය වේ libcap2-bin
. ඔබට පෞරාණික නොවන කර්නලයක් ද ධාවනය කිරීමට අවශ්ය වනු ඇත (අනුවාදයෙන් 2.6.24).
මෙම කාර්යයන් මඟින් SUID බිට් සැකසීමට සමාන ක්රියාත්මක කළ හැකි ගොනු සමඟ අවසර සම්බන්ධ කිරීමට ඉඩ ලබා දේ, නමුත් විශේෂිත අවසර කට්ටලයක් සඳහා පමණි. උපයෝගිතා setcap
ගොනුවකට අවසර එකතු කිරීමට සහ ඉවත් කිරීමට භාවිතා කරයි.
පළමු පියවර වන්නේ ඔබට අවශ්ය අවසර තෝරා ගැනීමයි. මෙම ලිපිය සඳහා, මම උපකල්පනය කරන්නේ ජාල රෝග විනිශ්චය මෙවලමක් ඇති බවයි tracewalk
, භාවිතා කිරීමට හැකි විය යුතුය CAP_NET_RAW
.
ඔබ ද්විමය පිහිටා ඇති නාමාවලියෙහි යැයි උපකල්පනය කරයි tracewalk
, ඔබට මෙම අවසරය මෙලෙස එකතු කළ හැක:
sudo setcap cap_net_raw=eip tracewalk
දැනට උපසර්ගය නොසලකා හරින්න =eip
විසඳුම සඳහා, මම තත්පර කිහිපයකින් ඒ ගැන කතා කරන්නම්. අවසර නාමය කුඩා අකුරින් ඇති බව සලකන්න. ඔබ නිවැරදිව අවසර වින්යාස කර ඇත්දැයි දැන් ඔබට පරීක්ෂා කළ හැක:
setcap -v cap_new_raw=eip tracewalk
නැතහොත් ඔබට ලබා දී ඇති ක්රියාත්මක කළ හැකි සියලුම අවසරයන් ලැයිස්තුගත කළ හැක:
getcap tracewalk
යොමුව සඳහා, ඔබට ක්රියාත්මක කළ හැකි සියලු අවසරයන් ඉවත් කළ හැක්කේ:
setcap -r tracewalk
මෙම අවස්ථාවේදී, ඔබට වරප්රසාද රහිත පරිශීලකයෙකු ලෙස executable ධාවනය කිරීමට හැකි විය යුතු අතර, එය raw sockets සමඟ වැඩ කිරීමට හැකි විය යුතුය, නමුත් root පරිශීලකයාට ඇති වෙනත් වරප්රසාද කිසිවක් නොතිබිය යුතුය.
ඉතින් මේ අමුතු උපසර්ගයේ තේරුම කුමක්ද? =eip
? මේ සඳහා අවසරවල ස්වභාවය පිළිබඳව යම් අවබෝධයක් අවශ්ය වේ. සෑම ක්රියාවලියකටම අවසර කට්ටල තුනක් ඇත - ඵලදායී, උරුම වූ සහ අවසර ලත්:
- ඵලදායී අවසර යනු ක්රියාවලියකට සැබවින්ම කළ හැකි දේ නිර්වචනය කරන ඒවා වේ. උදාහරණයක් ලෙස, එය නම් අමු සොකට් සමඟ කටයුතු කළ නොහැක
CAP_NET_RAW
ඵලදායී කට්ටලයේ නොවේ. - ඇත අවසර යනු ක්රියාවලියකට සුදුසු ඇමතුමක් භාවිතා කර ඒවා ඉල්ලා සිටියහොත් ලබා ගැනීමට අවසර ඇති ඒවා වේ. එම අවසරය ඉල්ලා සිටීම සඳහා විශේෂයෙන් ලියා ඇති ක්රියාවලියක් මිස ක්රියාවලියක් සත්ය වශයෙන්ම කිරීමෙන් ඔවුන් වළක්වයි. මෙය සැබවින්ම අවශ්ය කාල සීමාව සඳහා පමණක් ඵලදායී කට්ටලයට තීරණාත්මක අවසර එකතු කිරීමට ක්රියාවලි ලිවීමට ඉඩ සලසයි.
- පරම්පරාගත අවසරයන් යනු පැටවූ ළමා ක්රියාවලියේ ප්රවේශ විය හැකි කට්ටලය තුළ උරුම විය හැකි ඒවා වේ. ශල්යකර්මයේදී
fork()
හෝclone()
ළමා ක්රියාවලියට සෑම විටම මාපිය ක්රියාවලියේ අවසරවල පිටපතක් ලබා දෙන්නේ එය එම අවස්ථාවේදීම ක්රියාත්මක කළ හැකි ආකාරයටම ක්රියාත්මක වන බැවිනි. විට පරම්පරාගත කට්ටලයක් භාවිතා වේexec()
(හෝ ඊට සමාන) ක්රියාත්මක කළ හැකි ගොනුව වෙනත් එකක් සමඟ ප්රතිස්ථාපනය කිරීමට කැඳවනු ලැබේ. මෙම අවස්ථාවෙහිදී, නව ක්රියාවලිය සඳහා භාවිතා කරනු ලබන ප්රවේශ විය හැකි කට්ටලය ලබා ගැනීම සඳහා ක්රියාවලියේ පවතින කට්ටලය ප්රවේණිගත කට්ටලය මගින් වසං කරනු ලැබේ.
එබැවින් උපයෝගීතාව setcap
දී ඇති ක්රියාත්මක කළ හැකි එකක් සඳහා මෙම කට්ටල තුනේ අවසරයන් ස්වාධීනව එක් කිරීමට අපට ඉඩ සලසයි. ගොනු අවසර සඳහා කණ්ඩායම්වල අර්ථය තරමක් වෙනස් ලෙස අර්ථකථනය කර ඇති බව සලකන්න:
- පවතින ගොනු අවසර යනු ක්රියාත්මක කළ හැකි ගොනුවකට සෑම විටම ලබා ගත හැකි ඒවා වන අතර, එය හැඳින්වූ මාපිය ක්රියාවලියට ඒවා නොතිබුණද. ඒවා "බලහත්කාර" බලපත්ර ලෙස හැඳින්විණි.
- උරුමයි ගොනු අවසරයන් ඇමතුම් ක්රියාවලියේ කට්ටලයෙන් අවසර ඉවත් කිරීමට භාවිතා කළ හැකි අතිරේක ආවරණයක් නිර්වචනය කරයි. ඒවා ඇමතුම් ක්රියාවලියේ උරුම වූ කට්ටලයට අමතරව අදාළ වේ, එබැවින් අවසරය උරුම වන්නේ එය කට්ටල දෙකෙහිම පවතින්නේ නම් පමණි.
- ඵලදායී ගොනු අවසරයන් ඇත්ත වශයෙන්ම තනි බිට් එකක් මිස කට්ටලයක් නොවේ, සහ සකසන්නේ නම්, එයින් අදහස් වන්නේ පවතින සම්පූර්ණ කට්ටලයම නව ක්රියාවලියේ ඵලදායි කට්ටලයට පිටපත් කර ඇති බවයි. මෙය විශේෂයෙන් ලියා නොමැති ක්රියාවලි සඳහා අවසර එක් කිරීමට භාවිතා කළ හැක. එය බිට් එකක් බැවින්, ඔබ එය කිසියම් අවසරයක් සඳහා සකසා ඇත්නම්, එය සියලු අවසර සඳහා සැකසිය යුතුය. ඔබට එය ලෙගසි බිට් එකක් ලෙස සිතිය හැක, මන්ද එය ඒවාට සහය නොදක්වන යෙදුම්වලට අවසර භාවිතා කිරීමට ඉඩ දීමට භාවිතා කරන බැවිනි.
හරහා අවසරයන් සඳහන් කරන විට 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 සමඟ ක්රියා නොකරයි - ඔබ ඒවා ද්විමය ගොනුවටම යෙදිය යුතුය (එනම් symlink හි ඉලක්කය).
දෙවනුව, ඒවා අර්ථකථනය කරන ලද ස්ක්රිප්ට් සමඟ ක්රියා නොකරයි. උදාහරණයක් ලෙස, ඔබට අවසර ලබා දීමට අවශ්ය පයිතන් ස්ක්රිප්ට් එකක් තිබේ නම්, ඔබ එය පයිතන් පරිවර්තකයටම පැවරිය යුතුය. පැහැදිලිවම මෙය විභව ආරක්ෂක ගැටළුවක් වන්නේ එවිට එම පරිවර්තකය සමඟ ක්රියාත්මක කරන ලද සියලුම ස්ක්රිප්ට් වලට නිශ්චිත අවසරය හිමි වනු ඇත, නමුත් මෙය තවමත් එය SUID බවට පත් කිරීමට වඩා සැලකිය යුතු තරම් හොඳ ය. වඩාත්ම පොදු විසඳුම වන්නේ අවශ්ය මෙහෙයුම් සිදු කළ හැකි සහ ස්ක්රිප්ට් එකකින් ඇමතීමට හැකි වෙනම ක්රියාත්මක කළ හැකි C හෝ ඊට සමාන ලෙස ලිවීමයි. මෙය බයිනරි භාවිතා කරන 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
එහි පුස්තකාලය පද්ධතියට වඩා ප්රමුඛව ඇමතීමට බල කිරීම සහ එම නිසා ඇමතුම් යෙදුමට සමාන වරප්රසාද සහිතව ක්රියාත්මක කර ඇති තමන්ගේම අත්තනෝමතික කේතයක් ඇත.
එච්චරයි. පාඨමාලා වැඩසටහන පිළිබඳ වැඩි විස්තර මෙතැනින් සොයාගත හැකිය
මූලාශ්රය: www.habr.com