Сайн уу. Бид ажилдаа идэвхтэй орж байгаа бөгөөд XNUMX-р сард олон хүчирхэг хөөргөлтүүдийг бэлдэж байна. Үүнээс гадна хүн бүрийн дуртай хичээлийн шинэ урсгалын элсэлтээ зарлалаа.
Файлын зөвшөөрөл нь 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
Энэ үед та гүйцэтгэх файлыг эрхгүй хэрэглэгчийн хувьд ажиллуулах боломжтой байх ёстой бөгөөд энэ нь raw залгууруудтай ажиллах чадвартай байх ёстой, гэхдээ үндсэн хэрэглэгчдэд байгаа бусад давуу эрхгүй байх ёстой.
Тэгвэл энэ хачирхалтай дагавар юу гэсэн үг вэ? =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
Нэгдүгээрт, файлын чадварууд нь симболын холбоосуудтай ажиллахгүй - та тэдгээрийг хоёртын файлд (жишээ нь, симболын зорилт) ашиглах хэрэгтэй.
Хоёрдугаарт, тэд тайлбарласан скрипттэй ажилладаггүй. Жишээлбэл, хэрэв танд зөвшөөрөл олгохыг хүсч буй Python скрипт байгаа бол та үүнийг Python орчуулагч руу өөрөө оноох ёстой. Мэдээжийн хэрэг, энэ нь аюулгүй байдлын асуудал байж болзошгүй, учир нь тэр орчуулагчаар гүйцэтгэсэн бүх скриптүүд заасан зөвшөөрөлтэй байх болно, гэхдээ энэ нь үүнийг SUID болгохоос хамаагүй дээр хэвээр байна. Хамгийн түгээмэл шийдвэрлэх арга бол шаардлагатай үйлдлүүдийг хийж, скриптээс дуудаж чадах С хэл дээр эсвэл түүнтэй адилтгах программыг тусад нь бичих явдал юм. Энэ нь хоёртын файлыг ашигладаг 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