Bok svima. Aktivno smo krenuli s radom i već pripremamo mnoga snažna lansiranja u siječnju. Među ostalim, objavljeni su i upisi za novi stream svima omiljenog tečaja.
Dozvole za datoteke nude sigurnu alternativu SUID izvršnim datotekama, ali u početku mogu djelovati malo zbunjujuće.
Svi znamo da binarne datoteke
Uštedjet ću vam malo vremena ako želite izbjeći detaljno čitanje gornjeg članka: U suštini, dozvole za datoteke dopuštaju procese koji se izvode kao root i stoga im je dopušteno učiniti nešto kako bi zadržali određene mogućnosti, ograničene
Dopuštenja su izvrsna za usluge koje obično uvijek rade kao root, ali što je s uslužnim programima naredbenog retka? Srećom, ovo je također podržano pod uvjetom da imate instalirane odgovarajuće uslužne programe. Ako koristite Ubuntu, trebat će vam, na primjer, paket libcap2-bin
. Također ćete morati pokrenuti ne-arhaični kernel (od verzije 2.6.24).
Ove funkcije dopuštaju da se dopuštenja povezuju s izvršnim datotekama, slično postavljanju SUID bita, ali samo za određeni skup dopuštenja. Korisnost setcap
koristi se za dodavanje i uklanjanje dopuštenja iz datoteke.
Prvi korak je odabir dopuštenja koja su vam potrebna. Za potrebe ovog članka, pretpostavljam da postoji mrežni dijagnostički alat pod nazivom tracewalk
, koji bi se trebao znati koristiti CAP_NET_RAW
.
Pod pretpostavkom da ste u direktoriju u kojem se nalazi binarna datoteka tracewalk
, ovu dozvolu možete dodati ovako:
sudo setcap cap_net_raw=eip tracewalk
Za sada zanemarite sufiks =eip
za rješenje, govorit ću o tome za nekoliko sekundi. Imajte na umu da je naziv dopuštenja napisan malim slovima. Sada možete provjeriti jeste li ispravno konfigurirali dopuštenja pomoću:
setcap -v cap_new_raw=eip tracewalk
Ili možete navesti sva dopuštenja postavljena za određenu izvršnu datoteku:
getcap tracewalk
Za referencu, također možete ukloniti sva dopuštenja iz izvršne datoteke pomoću:
setcap -r tracewalk
U ovom trenutku, trebali biste moći pokrenuti izvršnu datoteku kao neprivilegirani korisnik, i ona bi trebala moći raditi s neobrađenim utičnicama, ali ne bi imala druge privilegije koje ima root korisnik.
Dakle, što znači ovaj čudni sufiks? =eip
? To zahtijeva određeno razumijevanje prirode dopuštenja. Svaki proces ima tri skupa dopuštenja − djelotvoran, nasljediv i dopušten:
- Učinkovito Dozvole su one koje definiraju što proces zapravo može učiniti. Na primjer, ne može se nositi s neobrađenim utičnicama ako
CAP_NET_RAW
nije u efektivnom skupu. - Dostupno dozvole su one koje proces smije imati ako ih zatraži pomoću odgovarajućeg poziva. Oni sprječavaju proces da zapravo učini bilo što osim ako nije posebno napisano da traži navedeno dopuštenje. To omogućuje pisanje procesa za dodavanje kritičnih dozvola efektivnom skupu samo za razdoblje kada su stvarno potrebne.
- Nasljedna dozvole su one koje se mogu naslijediti u dostupnom skupu stvorenog procesa djeteta. Tijekom operacije
fork()
iliclone()
podređeni proces uvijek dobiva kopiju dopuštenja nadređenog procesa budući da u tom trenutku još uvijek izvodi istu izvršnu datoteku. Nasljedni skup se koristi kadaexec()
(ili ekvivalent) poziva se da zamijeni izvršnu datoteku drugom. U ovoj točki, dostupni skup procesa maskiran je naslijeđenim skupom kako bi se dobio dostupni skup koji će se koristiti za novi proces.
Dakle, korisnost setcap
omogućuje nam dodavanje dopuštenja ova tri skupa neovisno za danu izvršnu datoteku. Imajte na umu da se značenje grupa tumači malo drugačije za dopuštenja datoteka:
- dostupan dozvole za datoteke su one koje su uvijek dostupne izvršnoj datoteci, čak i ako ih roditeljski proces koji ju je pozvao nije imao. Prije su se zvale "prisilne" dozvole.
- Naslijeđeno dopuštenja za datoteke definiraju dodatnu masku koja se također može koristiti za uklanjanje dopuštenja iz skupa procesa pozivanja. Primjenjuju se uz naslijeđeni skup pozivajućeg procesa, tako da se dopuštenje nasljeđuje samo ako postoji u oba skupa.
- Učinkovito dopuštenja za datoteke zapravo su samo jedan bit, a ne skup, a ako su postavljena, to znači da se cijeli dostupni skup također kopira u efektivni skup novog procesa. Ovo se može koristiti za dodavanje dopuštenja procesima koji nisu posebno napisani da ih zahtijevaju. Budući da je to jedan bit, ako ga postavite za bilo koje dopuštenje, mora biti postavljeno za sve dopuštenja. Možete ga smatrati naslijeđenim dijelom jer se koristi za dopuštanje korištenja dozvola aplikacijama koje ih ne podržavaju.
Prilikom određivanja dopuštenja putem setcap
tri slova e
, i
и p
pozivati se na učinkovit, nasljediv i dostupan postavlja odnosno. Dakle, ranija specifikacija:
sudo setcap cap_net_raw=eip tracewalk
...označava da je rezolucija CAP_NET_RAW
mora biti dodan dostupnim i naslijeđenim skupovima i da efektivni bit također mora biti postavljen. Ovo će nadjačati sva prethodno postavljena dopuštenja za datoteku. Za postavljanje više dopuštenja odjednom koristite popis odvojen zarezima:
sudo setcap cap_net_admin,cap_net_raw=eip tracewalk
Prvo, mogućnosti datoteke ne rade sa simboličkim vezama - morate ih primijeniti na samu binarnu datoteku (tj. cilj simboličke veze).
Drugo, oni ne rade s interpretiranim skriptama. Na primjer, ako imate Python skriptu kojoj želite dodijeliti dopuštenje, morate je dodijeliti samom Python tumaču. Očito je ovo potencijalni sigurnosni problem jer će tada sve skripte koje se izvode s tim tumačem imati navedeno dopuštenje, iako je to još uvijek znatno bolje nego da bude SUID. Čini se da je najčešće zaobilazno rješenje pisanje zasebne izvršne datoteke u C-u ili ekvivalentu koji može izvesti potrebne operacije i pozvati je iz skripte. Ovo je slično pristupu koji koristi Wireshark koji koristi binarni zapis /usr/bin/dumpcap
za obavljanje privilegiranih operacija:
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip
Treće, dopuštenja za datoteke su onemogućena ako koristite varijablu okruženja LD_LIBRARY_PATH
iz očitih sigurnosnih razloga(1). Isto vrijedi i za LD_PRELOAD
, koliko ja znam.
1. Budući da napadač očito može zamijeniti jednu od standardnih biblioteka i koristiti LD_LIBRARY_PATH
da prisili svoju biblioteku da bude pozvana umjesto one sistemske, i stoga ima vlastiti proizvoljni kod koji se izvršava s istim privilegijama kao i pozivna aplikacija.
To je sve. Više detalja o programu tečaja možete pronaći na
Izvor: www.habr.com