Pozdravljeni vsi. Aktivno se vključujemo v delo in že januarja pripravljamo veliko močnih lansiranj. Med drugim je razpisan nov cikel priljubljenega tečaja . V pričakovanju lansiranja tradicionalno delimo prevod koristnega gradiva.

Datotečne pravice ponujajo varno alternativo izvršnim datotekam SUID, vendar so lahko na prvi pogled nekoliko zmedene.
Vsi vemo, da so binarne datoteke so . Na srečo, če vaše aplikacije potrebujejo nekatere omejene privilegije, obstaja učinkovitejši način, imenovan .
Prihranil bom vaš čas, če želite preskočiti podrobno branje zgornjega članka: v bistvu datotečne pravice omogočajo procesom, ki se izvajajo v imenu uporabnika root, in so torej pooblaščeni za izvajanje, da ohranijo določene zmogljivosti, omejene , ko opustijo privilegije in se izvajajo kot neprivilegirani uporabnik. To pomeni, da če zlonamerni uporabnik uspe s kompromitiranjem procesa preko napake v pomnilniku ali drugega izvoza, ne more izkoristiti ničesar drugega kot določene minimalne privilegije, ki jih proces dejansko potrebuje.
Pravice so odlične za storitve, ki se običajno vedno izvajajo v imenu uporabnika root, toda kaj pa ukazne vrstice? Na srečo, to tudi podpira, pod pogojem, da imate nameščena prava orodja. Če uporabljate Ubuntu, boste na primer potrebovali paket libcap2-bin. Prav tako boste morali uporabljati sodobno jedro (od različice 2.6.24).
. Te funkcije omogočajo povezovanje pravic z izvršnimi datotekami podobno, kot je nastavitev SUID bita, vendar le za določen sklop pravic. Orodje setcap se uporablja za dodajanje in odstranjevanje pravic iz datoteke.
Prvi korak je izbrati ustrezne pravice. Za ta člen predvidevam, da obstaja orodje za diagnosticiranje omrežja, imenovano tracewalk, ki bi moralo biti sposobno obravnavati . Običajno je za to potrebno, da se aplikacija izvaja v imenu uporabnika root, vendar ob pregledu se ugotovi, da so potrebne le pravice CAP_NET_RAW.
Pod pretpostavkom da se nalazite u direktoriju gdje je izvršna datoteka tracewalk, možete dodati ovo dopuštenje na sljedeći način:
sudo setcap cap_net_raw=eip tracewalk Za sada zanemarite sufiks =eip za dopuštenje, o tome ću vam reći za nekoliko sekundi. Imajte na umu da je naziv dopuštenja napisan malim slovima. Sada možete provjeriti jeste li ispravno postavili dopuštenja pomoću:
setcap -v cap_new_raw=eip tracewalkIli možete ispisati popis svih dopuštenja postavljenih za ovu izvršnu datoteku:
getcap tracewalk
Za informaciju, također možete ukloniti sva dopuštenja iz izvršne datoteke koristeći:
setcap -r tracewalkU ovoj fazi trebali biste biti u mogućnosti pokrenuti izvršnu datoteku kao neprivilegirani korisnik, a ona bi trebala imati mogućnost rada s sirovim soketima, ali ne bi trebala imati nikakve druge privilegije koje ima root korisnik.
Dakle, što znači ovaj čudni sufiks =eip? Здесь потребуется толика понимания природы разрешений. Каждый процесс имеет три набора разрешений — efektivna, nasljedna i dopuštena (effective, inheritable i permitted):
- Efektivna (Effective) dopuštenja su ona koja određuju što proces zapravo može raditi. Na primjer, ne može se baviti sirovim soketima ako
CAP_NET_RAWnije u efektivnom skupu. - Dopuštena (Permitted) dopuštenja su ona koja procesu smijete imati, ako ih zatraži odgovarajućim pozivom. Ona ne dopuštaju procesu da zapravo nešto radi, osim ako nije posebno napisano za zahtijevanje određenog dopuštenja. Ovo omogućava pisanje procesa za dodavanje posebno važnih dopuštenja u efektivni skup samo u trenutku kada su stvarno potrebna.
- Nasljedna (Inheritable) dopuštenja su ona koja se mogu naslijediti u dostupnom skupu potomkog procesa. Tijekom operacije
fork()iliclone()potomku uvijek se dodjeljuje kopija dopuštenja roditeljskog procesa, budući da u tom trenutku još uvijek izvršava istu izvršnu datoteku. Nasljedni set se koristi kadaexec()(ili ekvivalent) poziva za zamjenu izvršne datoteke drugom. U ovoj fazi, dostupni set procesa maskira nasljedni skup kako bi se dobio dostupni skup koji će se koristiti za novi proces.
Tako da, alat setcap omogoča, da za to izvršno datoteko samostojno dodajamo dovoljenja teh treh sklopov. Upoštevajte, da se vrednost skupin za dostop do datotek interpretira rahlo drugače:
- Dostopni dovoljenja datotek so tista, ki so vedno na voljo za izvršno datoteko, tudi če nadrejeni proces, ki jo je poklical, tega nima. Pred tem so jih imenovali 'prisilna' dovoljenja.
- Dedovana dovoljenja datotek določajo dodatno masko, ki se lahko uporabi tudi za odstranitev dovoljenj iz skupa klicajočega procesa. Uporabljajo se poleg dedovanega sklopa klicajočega procesa, zato se dovoljenje deduje le, če obstaja v obeh sklopih.
- Učinkovita dovoljenja datotek so v resnici le en bit, ne pa sklop, in če je nastavljen, to pomeni, da se celoten dostopen sklop prav tako kopira v učinkovit sklop novega procesa. To se lahko uporabi za dodajanje dovoljenj procesom, ki niso bila posebej napisana, da jih zahtevajo. Ker je to en bit, če ga nastavite na katero koli dovoljenje, mora biti nastavljen za vsa dovoljenja. Lahko ga obravnavate kot dedni bit, saj se uporablja za omogočanje uporabe dovoljenj za aplikacije, ki jih ne podpirajo.
Ko nastavite dovoljenja preko setcap treh črk e, i in p se nanašajo na učinkovito, dedovano in dostopno sklopi, zato prejšnja specifikacija:
sudo setcap cap_net_raw=eip tracewalk … navaja, da je treba dovoljenje CAP_NET_RAW dodati dostopnim in dedovanim sklopom ter da mora biti nastavljen tudi učinkovit bit. To bo nadomestilo vsa prej nastavljena dovoljenja v datoteki. Za hkratno nastavitev več dovoljenj uporabite seznam ločen z vejico:
sudo setcap cap_net_admin,cap_net_raw=eip tracewalkpodrobneje obravnava vse to, vendar upam, da je ta objava nekoliko razjasnila, kaj se dogaja. Še nekaj opozoril in trikov je vredno omeniti.
Prvič, datotečne sposobnosti ne delujejo s simbolnimi povezavami — morali jih boste uporabiti na sami izvršni datoteki (tj. na cilju simbolne povezave).
Poleg tega ne delujejo z interpretiranimi skripti. Na primer, če imate skript Python, kateremu želite dodeliti privilegije, ga morate dodeliti samemu interpreterju Python. Očitno je, da je to potencialen varnostni problem, saj bodo vsi skripti, ki se izvajajo s tem interpreterjem, imeli dodeljene privilegije, čeprav je to še vedno bistveno boljša možnost kot SUID. Najbolj pogosta rešitev je očitno napisati ločeno izvajalno datoteko v C-ju ali analogu, ki lahko izvaja potrebne operacije in ga pokliče iz skripta. To je podobno pristopu, ki ga uporablja Wireshark, ki uporablja binarno datoteko. /usr/bin/dumpcap za izvajanje privilegiranih operacij:
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip Poleg tega se datotečne pravice onemogočijo, če uporabljate okoljsko spremenljivko LD_LIBRARY_PATH iz razumljivih varnostnih razlogov(1). Enako velja tudi za LD_PRELOAD, kolikor vem.
1. Ker lahko napadalec očitno nadomesti eno od standardnih knjižnic in uporabi LD_LIBRARY_PATH, da prisili svojo knjižnico, da se pokliče pred sistemsko, in tako ima lastno poljubno kodo, ki se izvaja s takšnimi privilegiji kot klicna aplikacija.
S tem je vse. O programu tečaja se boste lahko podrobneje seznanili na
Izvor: habr.com
