Tere kõigile. Meie meeskond töötab aktiivselt ja valmistame jaanuaris ette mitmeid võimsaid lansseerimisi. Muude hulgas on avatud uus grupp kõigile armastatud kursusele. . Traditsiooniliselt jagame lansseerimise eel kasulikku materjali tõlget.

Failiõigused pakuvad turvalisemat alternatiivi SUID täitmisskriptidele, kuid võivad esmapilgul tunduda veidi segased.
Me kõik teame, et binaarfailid terminid «primary/secondary». . Õnneks, kui teie rakendus vajab piiratud privileege, on olemas efektiivsem viis, mida nimetatakse .
Ma säästan teie aega, kui soovite vältida eelneva artikli põhjalikku lugemist: põhimõtteliselt võimaldavad failiõigused protsessidel, mis käivitatakse root-kasutaja nime all ja seega omavad õigusi midagi teha, säilitada teatud võimalusi, piiratud , kui nad loobuvad privileegidest ja käivituvad mitteprivileegitud kasutajana. See tähendab, et kui kurjategija suudab kompromiteerida protsessi näiteks puhverülevoolu või muu rünnaku abil, ei saa ta kasutada muud kui teatud minimaalset privileegi, mis tegelikult protsessile vajalik on.
Õigused sobivad suurepäraselt teenustele, mis tavaliselt käivitatakse root-kasutaja nime all, aga kuidas on käsureateenustega? Õnneks on ka see toetatud, kui teil on õiged utiliidid paigaldatud. Näiteks Ubuntu puhul peate teil olema pakett libcap2-bin. Samuti peate kasutama mitte-ajaloolist kernelit (alates versioonist 2.6.24).
Need funktsioonid võimaldavad linkida õigusi täitmisfailidega, sarnaselt SUID bitti seadistamisega, kuid ainult teatud õiguste kogumile. Utiliidi setcap kasutatakse õiguste lisamiseks ja eemaldamiseks faililt.
Esimene samm on valida vajalikud õigused. Käesolevas artiklis eeldan, et eksisteerib võrgu diagnostika tööriist nimega tracewalk, mis peab suutma kasutada Tavaliselt nõuab see, et rakendus käivituks root-kasutaja nime all, kuid vaatamise käigus selgub, et vajatakse ainult õigust CAP_NET_RAW.
Eeldades, et olete kaustas, kus on binaarfail tracewalk, saate selle õiguse lisada järgmiselt:
sudo setcap cap_net_raw=eip tracewalk Praegu ignoreerige sufiks =eip õiguse jaoks, räägin sellest mõne sekundi pärast. Pange tähele, et õiguse nimi on väikestes tähtedes. Nüüd saate kontrollida, kas olete õigused õigesti seadistatud, kasutades:
setcap -v cap_new_raw=eip tracewalkVõi saate kuvada loendi kõigist õigustest, mis on antud käivitatavale failile:
getcap tracewalk
Teabe jaoks saate samuti eemaldada kõik õigused käivitatavast failist, kasutades:
setcap -r tracewalkSellel hetkel peaksite olema võimeline käivitatavat faili käitama kui mitteprivileegitud kasutaja, ja sellel peaks olema võimalik töötada toorete sokettidega, kuid ei tohiks olla muid privileege, millega omab root-kasutaja.
Nii et mida tähendab see kummaline sufiks =eip? Здесь потребуется толика понимания природы разрешений. Каждый процесс имеет три набора разрешений — efektiivne, pärandatud ja lubatud (effective, inheritable ja permitted):
- Efektiivsed (Effective) õigused on need, mis määravad, mida protsess tegelikult teha võib. Näiteks ei saa ta tegeleda toorete sokettidega, kui
CAP_NET_RAWei ole efektiivses kogus. - Lubatud (Permitted) õigused on need, mis on protsessile lubatud, kui ta neid vastava kutsungi kaudu küsib. Need ei luba protsessil tegelikult midagi teha, kui ta ei ole spetsiaalselt kirjutatud, et küsida antud õigust. See võimaldab kirjutada protsesse, et lisada eriti olulisi õigusi efektiivsesse kogusse ainult selle ajaks, kui need tõeliselt vajalikud on.
- Pärandatud (Inheritable) õigused on need, mis võivad olla pärandatud kättesaadavas kogus loodud alamprotsessile. Operatsiooni ajal
fork()võiclone()saab alamprotsess alati koopia vanema protsessi õigustest, kuna sel hetkel täidab ta endiselt sama käivitatavat faili. Pärandatud kogust kasutatakse, kuiexec()(või analoog) kutsutakse, et asendada käivitatavat faili teisega. Sel hetkel varjatakse protsessi kättesaadav kogus pärandatud kogusega, et saada kättesaadav kogus, mida kasutatakse uue protsessi jaoks.
Seega kas utiliit setcap võimaldab meil lisada nende kolme komplekti õigused sõltumatult antud täitmisfailile. Pange tähele, et rühma väärtust tõlgendatakse failide juurde pääsemise õigustes veidi erinevalt:
- Saadaval failiõigused - need on õigused, mis on alati kergesti kätte saadavad täitmisfailile, isegi kui vanemprotsess, mis seda kutsus, ei olnud neid saanud. Varem nimetati neid "sundõigusteks".
- pärandatud failiõigused määravad täiendava maski, mida saab kasutada õiguste eemaldamiseks kutsuva protsessi komplektist. Need kehtivad koos kutsuva protsessi pärandatud komplektiga, seega pärandatakse õigus ainult siis, kui see esineb mõlemas komplektis.
- tõhusad failiõigused on tegelikult vaid üks bit, mitte komplekt, ja kui see on seatud, siis tähendab see, et kogu saadaval olev komplekt kopeeritakse ka uue protsessi tõhusasse komplekti. Seda saab kasutada õiguste lisamiseks protsessidele, mis ei ole spetsiaalselt loodud nende küsimiseks. Kuna see on üks bit, kui seadistate selle mõnele õigusele, peab see olema seatud kõigile õigustele. Saate mõelda sellele kui pärandibitile, kuna seda kasutatakse õiguste lubamiseks rakendustes, mis neid ei toeta.
Õiguste määramisel läbi setcap kolme tähe e, i ja p seonduvad tõhusate, pärandatud ja kergesti kätte saadavate komplektide vastavalt. Nii et varasem spetsifikatsioon:
sudo setcap cap_net_raw=eip tracewalk … näitab, et õigus CAP_NET_RAW peab olema lisatud kergesti kätte saadavatele ja pärandatud komplektidele ja et tõhus bit peab samuti olema seadistatud. See asendab kõik varem seatud õigused failis. Mitme õiguse korraga seadmiseks kasutage loendit, eraldatud koma abil:
sudo setcap cap_net_admin,cap_net_raw=eip tracewalkarutab seda kõike üksikasjalikumalt, kuid loodetavasti on see postitus natuke demüstifitseerinud, mis toimub. Jäänud on mainida vaid mõned hoiatavad ja näpunäited.
Esiteks, failiõigused ei tööta sümboolsed lingid — peate need rakendama otse binaarfailile (st sümboolse lingi sihtpunktile).
Teiseks, nad ei töötle tõlgendatavaid skripte. Näiteks, kui teil on Python skript, millele soovite õigused määrata, peate need määrama ise Python tõlgendusprogrammile. See on selgelt potentsiaalne turvaprobleem, kuna kõik selle tõlgendusprogrammi kaudu käitatavad skriptid saavad määratud õigused, kuigi see on siiski oluliselt parem kui SUID-i kasutamine. Kõige levinum lahendus näib olevat eraldi C või selle analoogkeeles kirjutatud täitmisfaili kirjutamine, mis suudab vajalikud toimingud teostada ja kutsuda seda skriptist. See on sarnane lähenemisele, mida kasutab Wireshark, millel on binaarfail. /usr/bin/dumpcap privileegide teostamiseks:
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip Kolmandaks, failide õigused tühistatakse, kui kasutate keskkonnamuutujat LD_LIBRARY_PATH turvalisuse pärast arusaadavatel põhjustel.(1). Sama kehtib ka LD_PRELOAD, niipalju kui ma tean.
1. Kuna ründaja võib ilmselgelt asendada ühe standardsetest teekidest ja kasutada LD_LIBRARY_PATH, et sundida oma teeki kutsuma süsteemi ees, ja seega lasta oma suvalisel koodil töötada samade privileegidega nagu kutsuv rakendus.
Sellega on kõik. Kursuse programmi kohta saab rohkem teada
Allikas: habr.com
