ලිනක්ස් කර්නලයේ මූල අවදානම සහ systemd හි සේවා ප්‍රතික්ෂේප කිරීම

Qualys හි ආරක්ෂක පර්යේෂකයන් විසින් Linux කර්නලයට සහ systemd පද්ධති කළමනාකරුට බලපාන දුර්වලතා දෙකක් පිළිබඳ තොරතුරු අනාවරණය කර ඇත. කර්නලයේ ඇති අවදානමක් (CVE-2021-33909) දේශීය පරිශීලකයෙකුට ඉතා කැදැලි නාමාවලි හැසිරවීම හරහා මූල අයිතිවාසිකම් සමඟ කේත ක්‍රියාත්මක කිරීමට ඉඩ සලසයි.

පෙරනිමි වින්‍යාසය තුළ Ubuntu 20.04/20.10/21.04, Debian 11 සහ Fedora 34 මත ක්‍රියා කරන වැඩ සූරාකෑම් සකස් කිරීමට පර්යේෂකයන්ට හැකි වීම අවදානමේ අන්තරාය උග්‍ර කරයි. අනෙකුත් බෙදාහැරීම් පරීක්‍ෂා කර නොමැති නමුත් න්‍යායාත්මකව ද ගැටලුවට ගොදුරු විය හැකි අතර ප්‍රහාර එල්ල කළ හැකි බව සටහන් වේ. සෑම තැනකම ගැටලුව ඉවත් කිරීමෙන් පසු සූරාකෑමේ සම්පූර්ණ කේතය ප්‍රකාශයට පත් කිරීමට පොරොන්දු වී ඇත, නමුත් දැනට සීමිත ක්‍රියාකාරීත්වයේ මූලාකෘතියක් පමණක් ලබා ගත හැකි අතර එය පද්ධතිය බිඳ වැටීමට හේතු වේ. ගැටළුව 2014 ජූලි මාසයේ සිට පවතින අතර 3.16 සිට ආරම්භ වන කර්නල් නිකුතු වලට බලපායි. අවදානම් නිරාකරණය ප්‍රජාව සමඟ සම්බන්ධීකරණය කරන ලද අතර ජූලි 19 වන දින කර්නලය තුළට පිළිගනු ලැබීය. ප්‍රධාන බෙදාහැරීම් දැනටමත් ඔවුන්ගේ කර්නල් පැකේජ වෙත යාවත්කාලීන ජනනය කර ඇත (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch).

වාර්තා අනුපිළිවෙලකින් ගොනු නිර්මාණය කරන seq_file කේතයේ මෙහෙයුම් සිදු කිරීමට පෙර, size_t සිට int පරිවර්තනයේ ප්‍රතිඵලය පරීක්ෂා කිරීමට අපොහොසත් වීම හේතුවෙන් මෙම අවදානම ඇති වේ. පරීක්ෂා කිරීමට අපොහොසත් වීමෙන් ඉතා කැදැලි නාමාවලි ව්‍යුහයක් (1 GB ට වැඩි මාර්ග ප්‍රමාණය) නිර්මාණය කිරීමේදී, සවි කිරීමේදී සහ මකා දැමීමේදී බෆරයට සීමාවෙන් පිටත ලිවීම් සිදු විය හැක. එහි ප්‍රතිඵලයක් ලෙස, ප්‍රහාරකයෙකුට "-10 GB - 2 bytes" හි ඕෆ්සෙට් එකකින් ලියා ඇති "//මකන ලද" 10-byte තන්තුවක් ලබා ගත හැක.

සකස් කරන ලද සූරාකෑමට ක්‍රියාත්මක වීමට 5 GB මතකයක් සහ මිලියන 1 ක නිදහස් ඉනෝඩ අවශ්‍ය වේ. 1 GB ඉක්මවන ගොනු මාර්ග ප්‍රමාණය ලබා ගැනීම සඳහා උප බහලුම් මිලියනයක පමණ ධුරාවලියක් නිර්මාණය කිරීමට mkdir() ඇමතීමෙන් සූරාකෑම ක්‍රියා කරයි. මෙම නාමාවලිය වෙනම පරිශීලක නාම අවකාශයක bind-mount හරහා සවි කර ඇති අතර, ඉන් පසුව එය ඉවත් කිරීමට rmdir() ශ්‍රිතය ක්‍රියාත්මක වේ. සමාන්තරව, කුඩා eBPF වැඩසටහනක් පූරණය කරන නූල් එකක් සාදනු ලැබේ, එය eBPF ව්‍යාජ කේතය පරීක්ෂා කිරීමෙන් පසු වේදිකාවේදී අවහිර කරනු ලැබේ, නමුත් එහි JIT සම්පාදනයට පෙර.

unprivileged userid namespace තුළ, ගොනුව /proc/self/mountinfo විවෘත වන අතර, බන්ධන සවිකර ඇති නාමාවලියෙහි දිගු පථ නාමය කියවනු ලැබේ, එහි ප්‍රතිඵලයක් ලෙස බෆරය ආරම්භ වීමට පෙර ප්‍රදේශයට "// මකා දමනු ලැබේ" යන තන්තුව ලියා ඇත. දැනටමත් පරීක්‍ෂා කර ඇති නමුත් තවමත් සම්පාදනය කර නොමැති eBPF වැඩසටහනේ උපදෙස් උඩින් ලියන පරිදි රේඛාව ලිවීම සඳහා ස්ථානය තෝරා ඇත.

මීළඟට, eBPF වැඩසටහන් මට්ටමේදී, btf සහ map_push_elem ව්‍යුහයන් හැසිරවීම හරහා වෙනත් කර්නල් ව්‍යුහයන් වෙත කියවීමට සහ ලිවීමට පාලනය කළ නොහැකි බෆරයෙන් පිටත ලිවීම පාලනය කිරීමේ හැකියාව බවට පරිවර්තනය වේ. එහි ප්‍රතිඵලයක් වශයෙන්, සූරාකෑම මඟින් කර්නල් මතකයේ ඇති modprobe_path[] බෆරයේ පිහිටීම තීරණය කරන අතර එහි ඇති “/sbin/modprobe” මාර්ගය උඩින් ලියයි, එමඟින් මූල අයිතිවාසිකම් සහිත ඕනෑම ක්‍රියාත්මක කළ හැකි ගොනුවක් දියත් කිරීම ආරම්භ කිරීමට ඉඩ සලසයි. request_module() call, එය ක්‍රියාත්මක කරනු ලැබේ, උදාහරණයක් ලෙස, netlink socket නිර්මාණය කිරීමේදී.

පර්යේෂකයන් නිශ්චිත සූරාකෑමකට පමණක් ඵලදායී වන විසඳුම් කිහිපයක් සපයයි, නමුත් ගැටලුවම ඉවත් නොකරයි. වෙනම පරිශීලක ID නාම අවකාශයක සවිකිරීමේ නාමාවලි අක්‍රිය කිරීමට "/proc/sys/kernel/unprivileged_usrns_clone" 0 ලෙසත්, kernel වැඩසටහන් පූරණය කිරීම අක්‍රීය කිරීමට "/proc/sys/kernel/unprivileged_bpf_disabled" 1 ලෙසත් සැකසීම නිර්දේශ කෙරේ.

විශාල නාමාවලියක් සවි කිරීම සඳහා Bind-mund වෙනුවට FUSE යාන්ත්‍රණය භාවිතා කිරීම සම්බන්ධ විකල්ප ප්‍රහාරයක් විශ්ලේෂණය කිරීමේදී, පර්යේෂකයන්ට systemd පද්ධති කළමනාකරුට බලපාන තවත් අවදානමක් (CVE-2021-33910) හමු වූ බව සැලකිය යුතු කරුණකි. FUSE හරහා 8 MB ඉක්මවන මාර්ග ප්‍රමාණය සහිත නාමාවලියක් සවි කිරීමට උත්සාහ කරන විට, පාලන ආරම්භක ක්‍රියාවලිය (PID1) තොග මතකය අවසන් වී බිඳවැටෙන අතර එමඟින් පද්ධතිය “භීතිකා” තත්වයකට පත්වේ.

ගැටලුව වන්නේ systemd විසින් /proc/self/mountinfo හි අන්තර්ගතය ලුහුබැඳීම සහ විග්‍රහ කිරීම සහ Unit_name_path_escape() ශ්‍රිතයේ එක් එක් සවිකිරීම් ලක්ෂ්‍යය ක්‍රියාවට නැංවීමයි, එය ගතිකව වෙන්කර ඇති මතකයේ නොව දත්ත තොගය මත තබන strdupa() මෙහෙයුමක් සිදු කරයි. . උපරිම අට්ටි ප්‍රමාණය RLIMIT_STACK හරහා සීමා වී ඇති බැවින්, සවි කිරීමේ ලක්ෂ්‍යයට විශාල මාර්ගයක් සැකසීම PID1 ක්‍රියාවලිය බිඳ වැටීමට සහ පද්ධතිය නතර කිරීමට හේතු වේ. ප්‍රහාරයක් සඳහා, ඔබට සරලම FUSE මොඩියුලය සවිකිරීමේ ලක්ෂ්‍යයක් ලෙස ඉහළ කැදැලි නාමාවලියක් භාවිතා කිරීම සමඟ ඒකාබද්ධව භාවිතා කළ හැක, එහි මාර්ග ප්‍රමාණය 8 MB ඉක්මවයි.

ප්‍රශ්නය systemd 220 (අප්‍රේල් 2015) සිට දිස්වේ, දැනටමත් ප්‍රධාන systemd ගබඩාවේ සවි කර ඇති අතර බෙදාහැරීම් වල සවි කර ඇත (Debian, Ubuntu, Fedora, RHEL, SUSE, Arch). සැලකිය යුතු ලෙස, systemd නිකුතුව 248 හි /proc/self/mountinfo සැකසීම අසාර්ථක වීමට හේතු වන systemd කේතයේ දෝෂයක් හේතුවෙන් සූරාකෑම ක්‍රියා නොකරයි. 2018 දී ද එවැනිම තත්වයක් ඇති වූ අතර ලිනක්ස් කර්නලයේ CVE-2018-14634 අවදානම සඳහා සූරාකෑමක් ලිවීමට උත්සාහ කරන විට, Qualys පර්යේෂකයන්ට systemd හි තීරණාත්මක දුර්වලතා තුනක් හමු විය.

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න