Lejet e skedarëve në Linux

Përshëndetje të gjithëve. Ne po përfshihemi aktivisht në punë dhe që në janar po përgatitemi për shumë lansime të fuqishme. Mes të tjerave, është shpallur regjistrimi për një grup të ri të kursit që të gjithë e duan. "Administrator Linux". Para lansimit, tradicionalisht ndajmë një përkthim të materialeve të dobishme.

Lejet e skedarëve në Linux

Lejet e skedarëve ofrojnë një alternativë të sigurt për skedarët e ekzekutueshëm SUID, por mund të duken disi të komplikuara me sa duket.


Të gjithë e dimë që skedarët binarë SUID janë janë një zgjidhje e keqe në terma të sigurisë.. Për fat të mirë, nëse aplikacionit tuaj i nevojiten disa privilegje të kufizuara, ekziston një mënyrë më efikase e quajtur lejet e skedarëve..

Do t'ju kursej kohë nëse dëshiron të shmangësh leximin e hollësishëm të artikullit më sipër: në thelb, lejet e skedarëve lejojnë proceset që nisin në emër të përdoruesit root dhe, për rrjedhojë, kanë të drejtë të bëjnë diçka, të ruajnë disa aftësi specifike të kufizuara në këtë listë, kur ata heqin privilegjet dhe nisin si një përdorues pa privilegje. Kjo do të thotë se nëse një sulmues arrin të comprometojë një proces përmes një mbushjeje të tamponit ose një eksploit tjetër, ai nuk do të jetë në gjendje të përfitojë nga asgjë tjetër përveç disa privilegjeve minimale që vërtet i nevojiten procesit.

Lejet janë ideale për shërbimet që zakonisht nisin në emër të përdoruesit root, por çfarë ndodh me utilitat e linjës komandave? Për fat të mirë, kjo mbështetet po ashtu me kusht që të keni instaluar utilitat e duhura. Nëse përdorni Ubuntu, për shembull, ju nevojitet paketa libcap2-bin. Ju gjithashtu do t'ju duhet një kernell jo arkaik (duke filluar nga versioni 2.6.24).

Këto funksione lejojnë lidhjen e lejeve me skedarët e ekzekutueshëm në mënyrë të ngjashme me vendosjen e bitit SUID, por vetëm për një grup të caktuar lejesh. Utilitari setcap përdoret për të shtuar dhe hequr leje nga një skedar.

Hapi i parë është të zgjidhni lejet e nevojshme për ju. Për këtë artikull, unë supozoj se ekziston një mjet diagnostikimi të rrjetit, i quajtur tracewalk, i cili duhet të jetë në gjendje të përdorë soket të papërpunuara.Kjo zakonisht kërkon që aplikacioni të fillojë si përdorues root, por gjatë shqyrtimit lista zgjidhet se vetëm leja CAP_NET_RAW.

Duke supozojmë se ndodheni në katalogun ku ndodhet skedari binar tracewalk, mund të shtoni këtë leje në këtë mënyrë:

sudo setcap cap_net_raw=eip tracewalk

Në këtë fazë injoroni prapashtesën =eip për lejen, do t'ju flas për të pas disa sekondash. Shihni se emri i lejes shkruhet me liter të vogël. Tani mund të kontrolloni nëse keni konfiguruar lejet siç duhet, duke përdorur:

setcap -v cap_new_raw=eip tracewalk

Ose mund të shihni një listë të gjitha lejeve të vendosura për këtë skedar ekzekutues:

getcap tracewalk

Për referencë, gjithashtu mund të hiqni të gjitha lejet nga skedari ekzekutues duke përdorur:

setcap -r tracewalk

Në këtë fazë duhet të jeni në gjendje të ekzekutoni skedarin ekzekutues si një përdorues pa privilegje, dhe ai duhet të ketë mundësinë të punojë me soket të papërpunuar, por pa ndonjë privilegj tjetër që ka përdoruesi root.

Pra, çfarë do të thotë kjo prapashtesë e çuditshme =eip? Здесь потребуется толика понимания природы разрешений. Каждый процесс имеет три набора разрешений — efektive, të trashëguara dhe të lejueshme (effective, inheritable dhe permitted):

  • Lejet efektive (Effective) janë ato që përcaktojnë se çfarë mund të bëjë procesi në të vërtetë. Për shembull, ai nuk mund të trajtojë soket të papërpunuar nëse CAP_NET_RAW nuk është në grupin efektiv.
  • Lejet e lejueshme (Permitted) janë ato që lejohet të ketë procesi, nëse e kërkon atë me thirrjen përkatëse. Ato nuk lejojnë procesin të bëjë në të vërtetë asgjë, përveç nëse është shkruar posaçërisht për të kërkuar lejen e caktuar. Kjo lejon që proceset të krijohen për të shtuar leje veçanërisht të rëndësishme në grupin efektiv vetëm për atë periudhë kur ato janë në të vërtetë të nevojshme.
  • Lejet e trashëguara (Inheritable) janë ato që mund të trashëgohen në grupin e lejeve të dorezës të procesit të ri të lindur. Gjatë operacionit fork() ose clone() procesit të ri gjithmonë i jepet një kopje e lejeve të procesit prind, pasi në atë moment ai ende po ekzekuton të njëjtin skedar ekzekutues. Grupi trashëgues përdoret kur exec() (ose analog) thirret për të zëvendësuar skedarin ekzekutues me një tjetër. Në këtë fazë grupi i lejeve të procesit maskohet nga grupi trashëgues për të marrë grupin e lejeve që do të përdoret për procesin e ri.

Pra, utilitarja setcap na lejon të na lejojë të shtojmë lejet e këtyre tre grupeve ndaras për këtë skedar ekzekutiv. Vini re se vlera e grupeve interpretohet pak ndryshe për të drejtat e aksesit në skedarë:

  • Të disponueshëm lejet e skedarëve janë ato që janë gjithmonë të disponueshme për skedarin ekzekutiv, edhe nëse procesi prind që e thirri atë nuk i kishte ato. Më parë quheshin "leje të detyrueshme".
  • Të trashëguara lejet e skedarëve përcaktojnë një maskë shtesë, e cila gjithashtu mund të përdoret për të hequr leje nga grupi i procesit thirrës. Ato aplikohen përveç grupit të trashëguar të procesit thirrës, kështu që leja trashëgohet vetëm nëse ajo ekziston në të dy grupet.
  • Efektive lejet e skedarëve në të vërtetë përfaqësojnë vetëm një bit, jo një grup, dhe nëse ai është aktivizuar, atëherë kjo do të thotë se e gjithë grupi i disponueshëm gjithashtu kopjohet në grupin efektiv të procesit të ri. Kjo mund të përdoret për të shtuar leje në procese që nuk janë shkruar posaçërisht për t'i kërkuar ato. Duke qenë se ky është një bit, nëse e aktivizoni atë për ndonjë leje, ai duhet të aktivizohet për të gjitha lejet. Mund ta mendoni si një bit legjacie, sepse përdoret për të lejuar përdorimin e lejeve për aplikacione që nuk i mbështesin ato.

Kur specifikoni lejet përmes setcap tre shkronjave e, i dhe p i referohen grupeve efektive, të trashëguara dhe të aksesueshme përkatësisht. Pra, specifikimi më i hershëm:

sudo setcap cap_net_raw=eip tracewalk

… tregon se leja CAP_NET_RAW duhet të shtohet në grupet e aksesit dhe të trashëguara dhe se gjithashtu duhet të vendoset bita efektiv. Kjo do të zëvendësojë çdo leje të vendosur më parë në skedar. Për të vendosur disa leje në të njëjtën kohë, përdorni një listë ndarë me presje:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Manuali për lejet diskuton të gjitha këto në detaje, por, shpresoj, ky post ka demistifikuar paksa atë që po ndodh. Duhet vetëm të përmenden disa paralajmërime dhe truke.

Së pari, mundësitë e skedarëve nuk funksionojnë me lidhjet simbolike — ju duhet t'i aplikoni ato në vetë skedarin binar (dmth në qëllimin e lidhjes simbolike).

Për më tepër, ato nuk punojnë me skriptet e interpretuara. Për shembull, nëse keni një skript Python dhe dëshironi t'i caktoni një leje, duhet ta caktoni vetë interpretuesit Python. Kjo përbën një problem të mundshëm sigurie, sepse të gjitha skriptet që ekzekutohen me këtë interpretues do të kenë lejen e caktuar, ndonjëherë akoma më mirë se sa të përdoret SUID. Zgjidhja më e zakonshme duket se është të shkruhet një skedar ekzekutiv të veçantë në C ose një analog, i cili mund të kryejë operacionet e nevojshme dhe ta thërrasë atë nga skripti. Kjo është si qasja e përdorur nga Wireshark, i cili përdor një skedar binar /usr/bin/dumpcap për të kryer operacione të privilegjuara:

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

Në të tretë, lejet e skedarëve çaktivizohen nëse përdorni një variabël mjedisi LD_LIBRARY_PATH për arsye sigurie të qarta(1). E njëjta gjë vlen edhe për LD_PRELOAD, aq sa di unë.

1. Sepse një sulmues mund të ndryshojë një nga bibliotekat standarde dhe të përdorë LD_LIBRARY_PATH, për të bërë që biblioteka e tij të thirret përpara asaj sistemike, dhe si rezultat të ketë kodin e tij arbitrar të ekzekutuar me të njëjtat privilegje si aplikacioni që e thirr.

Kjo është gjithçka. Detajet mbi programin e kursit mund të njihen në webinarin që do të zhvillohet më 24 janar.

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster