Tere kõigile. Meie meeskond on aktiivselt töös ja juba jaanuaris valmistame ette palju põnevaid lansseerimisi. Nende seas on kuulutatud välja uus kursuse grupp, mis on kõigile hästi tuntud. . Traditsiooniliselt jagame enne lansseerimist kasulikku materjali tõlget.

Faili õigused pakuvad turvalist alternatiivi SUID-väl executible failidele, kuid need võivad esmapilgul tunduda veidi segased.
Me kõik teame, et binaarfailid on . Õnneks, kui teie rakendus vajab teatud piiratud privileege, on olemas tõhusam meetod, mida nimetatakse .
Ma säästan teie aega, kui soovite vältida ülaltoodud artikli põhjalikku lugemist: põhimõtteliselt võimaldavad failiõigused protsessidel, mis käivitatakse root-kasutaja nimel ja seega teevad, mida nad soovivad, säilitada teatavad võimalused, piiratud , kui nad tühistavad õigused ja töötavad privileege mitteomava kasutajana. See tähendab, et kui ründajal õnnestub protsess kompromiteerida näiteks puhverülevoolu või mõne muu eksploitiga, ei saa ta kasutada midagi muud, kui ainult teatud minimaalset õiguste hulka, mis on protsessile tõeliselt vajalik.
Õigused sobivad suurepäraselt teenustele, mis tavaliselt käivitatakse root-kasutaja nimel, kuid kuidas on käsurea utiliitidega? Õnneks toetatakse seda samuti, kui teil on õiged utiliidid installitud. Kui kasutate näiteks Ubuntu’t, vajate paketti libcap2-bin. Samuti peate käitama mitte arhaistlikku kerneli (alates versioonist 2.6.24).
Need funktsioonid võimaldavad siduda õigusi täidetavate failidega, sarnaselt SUID bitti seadistamisega, kuid ainult spetsiifilisema õiguste kogumi jaoks. Utiliiti setcap kasutatakse õiguste lisamiseks ja eemaldamiseks faililt.
Esimene samm on valida vajalikud õigused. Selle artikli puhul eeldan, et olemas on võrgu diagnostikavahend nimega tracewalk, mis peaks olema võimeline töötama . Tavaliselt peab selleks rakendus käivituma root-kasutaja nime all, kuid vaadates selgub, et vajalik on ainult luba CAP_NET_RAW.
Eeldades, et viibite kaustas, kus asub binaarfail tracewalk, saate sellele lubamise järgmisega:
sudo setcap cap_net_raw=eip tracewalk Praegu ignoreerige sufiks =eip luba osas, räägin sellest paari sekundi pärast. Pange tähele, et lubade nimi on väikestes tähtedes. Nüüd saate kontrollida, kas olete õigesti seadistanud load, järgmisega:
setcap -v cap_new_raw=eip tracewalkVõi võite loetleda kõik õigused, mis on antud antud täideviimise failile:
getcap tracewalk
Viidatud jaoks saate kustutada kõik load järgnevast täideviimise failist järgmisega:
setcap -r tracewalkSelles etapis peaksite suutma käivitada täideviimise faili kui mitteprivileegitud kasutaja ning see peaks suutma töötada toorimata soketidega, kuid mitte olema muid privileege, millega root-kasutaja omab.
Nii et mida tähendab see kummaline sufiks =eip? Здесь потребуется толика понимания природы разрешений. Каждый процесс имеет три набора разрешений — tõhusad, pärandatavad ja lubatud:
- Tõhusad lubatud õigused on need, mis määravad, mida protsess tegelikult teha võib. Näiteks ei saa see teha toorete pistikute käsitlemist, kui
CAP_NET_RAWsee ei ole tõhusas kogumis. - Lubatud õigused on need, mis on protsessile lubatud, kui ta neid nõuab vastava süsteemi kutsumise kaudu. Need ei luba protsessil tegelikult midagi teha, kui ta pole spetsiaalselt kirjutatud konkreetse loa taotlemiseks. See võimaldab kirjutada protsesse, et lisada eriti olulisi õigusi tõhusasse kogumisse ainult siis, kui need tõeliselt vajalikud on.
- Pärandatavad õigused on need, mis võivad olla pärandatud tütardprotsessi lubatud kogumis. Operatsiooni ajal
fork()võiclone()tütardprotsessile antakse alati koopia vanema protsessi õigustest, kuna sel hetkel käitab see endiselt sama täitmisfaili. Pärandatud kogumit kasutatakse, kuiexec()(või analoog) kutsub üles asendama täitmisfaili teisega. Sellel etapil varjitakse protsessi olemasolev komplekt pärimise kaudu saadud komplektiga, et saada uus komplekt, mida kasutab uus protsess.
Seega tööriist setcap võimaldab meil iseseisvalt lisada nende kolme komplekti õigusi antud täitmisfailile. Pange tähele, et grupi väärtusi tõlgendatakse failide juurdepääsu õiguste jaoks veidi erinevalt:
- Saadaval failiõigused on need, mis on alati kergesti saadaval täitmisfailile, isegi kui vanemprotsess, mis selle käivitas, ei omanud neid. Varem nimetati neid „sundjõududeks” õigusteks.
- Pärimise failiõigused määravad täiendava maski, mida saab kasutada ka õiguste eemaldamiseks kutsuva protsessi komplektist. Need kehtivad koos kutsuva protsessi pärandkomplektiga, seega pärandatakse õigus ainult siis, kui see eksisteerib mõlemas komplektis.
- Tõhusad Failide õigused on tegelikult vaid üks bitt, mitte komplekt, ja kui see on seadistatud, tähendab see, et kogu saadaval olev komplekt kopeeritakse ka uue protsessi efektiivsetesse õigustesse. Seda saab kasutada õiguste lisamiseks protsessidele, mis ei ole spetsiaalselt kirjutatud nende taotlemiseks. Kuna see on üks bitt, peab selle seadistamine mingile õigusele olema kõikide õiguste jaoks. Võite mõelda sellele kui legatsi bitile, sest seda kasutatakse õiguste lubamiseks rakendustes, mis neid ei toeta.
Õiguste määramisel kaudu setcap kolm tähte e, i ja p viitavad efektiivsele, pärandatud ja saadaval komplektile vastavalt. Nii et varasem spetsifikatsioon:
sudo setcap cap_net_raw=eip tracewalk … näitab, et õigust CAP_NET_RAW peab olema lisatud saadaval ja pärandatud komplektidesse ning et efektiivne bitt peab samuti olema seadistatud. See asendab kõik varem määratud õigused failis. Mitme õiguse seadistamiseks korraga kasutage nimekirja komadega:
sudo setcap cap_net_admin,cap_net_raw=eip tracewalkarutab kõik seda põhjalikumalt, kuid loodan, et see postitus on veidi demüstifitseerinud toimuvat. Rääkida tuleb veel mõnest ettevaatusest ja nippidest.
Esiteks ei toimi failivõimeid sümboolsete linkidega – peate neid rakendama otse binaarfailile (st sümboolse lingi sihtfailile).
Teiseks ei toimi nad tõlgendatavate skriptidega. Näiteks, kui teil on Python skript, millele soovite määrata õigusi, peate õigused määrama Python tõlgendajale endale. See on ilmselgelt potentsiaalne turvarisk, kuna kõik selle tõlgendajaga täidetavad skriptid omavad neid õigusi, kuigi see on siiski oluliselt parem kui SUID rakendamine. Näib, et kõige levinum lahendus on kirjutada eraldi täidetav fail C või sarnases keeles, mis suudab vajalikke toiminguid teha ja kutsuda skriptist seda faili. See on sarnane lähenemisviis, mida kasutab Wireshark, mis kasutab binaarfaili /usr/bin/dumpcap privilegeeritud toimingute tegemiseks:
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip Kolmandaks, failide õigused keelatakse, kui kasutate keskkonnamuutujat LD_LIBRARY_PATH ilmsete turvakaalutluste tõttu(1). Sama kehtib ka LD_PRELOAD,nii palju kui mina tean.
1. Kuna pahatahtlik isik suudab ilmselt asendada ühe standardsetest teekidest ja kasutada LD_LIBRARY_PATH, et panna oma teeke kutsuma eelistatult süsteemis, ja seega käivitama enda omaval arbirikoodi sama privileegiga nagu kutse tegeva rakenduse.
Sellega on kõik. Kursuse programmi kohta saate rohkem teada
Allikas: habr.com
