Hæ allir. Við erum virkir að hefjast handa og erum nú þegar að undirbúa margar öflugar kynningar í janúar. Meðal annars hefur verið tilkynnt um skráningu á nýjan straum af uppáhaldsnámskeiði allra.
Skráarheimildir bjóða upp á öruggan valkost við SUID keyrslur, en geta virst svolítið ruglingslegar í fyrstu.
Við vitum öll að tvíþættir
Ég mun spara þér smá tíma ef þú vilt forðast að lesa greinina hér að ofan í smáatriðum: Í meginatriðum leyfa skráarheimildir ferli sem keyra sem rót og er því leyft að gera eitthvað til að halda ákveðnum getu, takmörkuðum
Heimildir eru frábærar fyrir þjónustu sem venjulega keyrir alltaf sem rót, en hvað með skipanalínuforrit? Sem betur fer er þetta einnig stutt að því tilskildu að þú hafir réttu tólin uppsett. Ef þú ert að nota Ubuntu þarftu til dæmis pakkann libcap2-bin
. Þú þarft líka að keyra kjarna sem ekki er fornaldarlegur (frá útgáfu 2.6.24).
Þessar aðgerðir gera kleift að tengja heimildir við keyranlegar skrár, svipað og að setja SUID bitann, en aðeins fyrir tiltekið sett af heimildum. Gagnsemi setcap
notað til að bæta við og fjarlægja heimildir úr skrá.
Fyrsta skrefið er að velja þær heimildir sem þú þarft. Vegna þessarar greinar geri ég ráð fyrir að það sé netgreiningartæki sem heitir tracewalk
, sem ætti að geta notað CAP_NET_RAW
.
Að því gefnu að þú sért í möppunni þar sem tvöfaldurinn er staðsettur tracewalk
, þú getur bætt við þessari heimild svona:
sudo setcap cap_net_raw=eip tracewalk
Hunsa viðskeytið í bili =eip
til lausnar, ég mun tala um það eftir nokkrar sekúndur. Athugaðu að nafn leyfis er með litlum staf. Þú getur nú athugað hvort þú hafir stillt heimildir rétt með:
setcap -v cap_new_raw=eip tracewalk
Eða þú getur skráð allar heimildir settar fyrir tiltekið keyrsluefni:
getcap tracewalk
Til viðmiðunar geturðu líka fjarlægt allar heimildir úr keyrslunni með:
setcap -r tracewalk
Á þessum tímapunkti ættir þú að geta keyrt keyrsluna sem notandi án forréttinda og hann ætti að geta unnið með hráum fals en ekki hafa nein önnur réttindi sem rótnotandinn hefur.
Svo hvað þýðir þetta undarlega viðskeyti? =eip
? Þetta krefst nokkurs skilnings á eðli heimilda. Hvert ferli hefur þrjú sett af heimildum - áhrifarík, erfanleg og leyfileg:
- Árangursrík Heimildir eru þær sem skilgreina hvað ferli getur raunverulega gert. Til dæmis getur það ekki tekist á við hráar fals ef
CAP_NET_RAW
er ekki í virku setti. - Laus heimildir eru þær sem ferli er heimilt að hafa ef það biður um þær með því að nota viðeigandi símtal. Þeir koma í veg fyrir að ferli geti gert neitt í raun nema það hafi verið sérstaklega skrifað til að biðja um umrædd leyfi. Þetta gerir kleift að skrifa ferla til að bæta mikilvægum heimildum við virka settið aðeins fyrir það tímabil sem þeirra er raunverulega krafist.
- Erfanleg heimildir eru þær sem hægt er að erfa í hinu aðgengilega setti barnaferilsferlisins. Við aðgerð
fork()
eðaclone()
undirferlinu er alltaf gefið afrit af heimildum foreldraferlisins þar sem það er enn að keyra sama keyrsluforritið á þeim tímapunkti. Erfanlegt sett er notað þegarexec()
(eða samsvarandi) er kallað til að skipta út keyrsluskránni fyrir aðra. Á þessum tímapunkti er tiltækt sett ferlisins dulið af erfanlega settinu til að fá aðgengilega settið sem verður notað fyrir nýja ferlið.
Svo gagnsemi setcap
gerir okkur kleift að bæta við heimildum þessara þriggja setta sjálfstætt fyrir tiltekið keyrsluefni. Athugaðu að merking hópa er túlkuð aðeins öðruvísi fyrir skráarheimildir:
- Laus skráarheimildir eru þær sem eru alltaf tiltækar fyrir keyrsluskrá, jafnvel þótt foreldraferlið sem kallaði það hefði þær ekki. Þau voru áður kölluð „þvinguð“ leyfi.
- Erfðir skráarheimildir skilgreina viðbótargrímu sem einnig er hægt að nota til að fjarlægja heimildir úr setti hringingarferlisins. Þau eiga við til viðbótar við erfða mengi hringingarferlisins, þannig að heimildin erfist aðeins ef hún er til í báðum settunum.
- Árangursrík skráarheimildir eru í raun bara einn biti, ekki sett, og ef það er stillt þýðir það að allt tiltækt sett er einnig afritað í virkt sett nýja ferlisins. Þetta er hægt að nota til að bæta við heimildum við ferla sem ekki voru sérstaklega skrifuð til að biðja um þær. Þar sem það er einn biti, ef þú stillir það fyrir einhverja heimild, verður það að vera stillt fyrir allar heimildir. Þú getur hugsað um það sem arfleifð hluta vegna þess að það er notað til að leyfa að heimildir séu notaðar af forritum sem styðja þær ekki.
Þegar heimildir eru tilgreindar í gegnum setcap
þrír stafir e
, i
и p
tengjast áhrifarík, arfgeng og aðgengileg setur í sömu röð. Svo, fyrri forskriftin:
sudo setcap cap_net_raw=eip tracewalk
... gefur til kynna að ályktunin CAP_NET_RAW
verður að bæta við tiltæk og erfanleg sett og að virki bitinn verði einnig að vera stilltur. Þetta mun hnekkja öllum áður settum heimildum á skránni. Til að stilla margar heimildir í einu skaltu nota lista sem er aðskilinn með kommum:
sudo setcap cap_net_admin,cap_net_raw=eip tracewalk
Í fyrsta lagi virkar skráarmöguleikar ekki með samkennslu - þú verður að nota þá á tvíundarskrána sjálfa (þ.e. markmið samtengilsins).
Í öðru lagi vinna þau ekki með túlkuð handrit. Til dæmis, ef þú ert með Python skriftu sem þú vilt úthluta heimild til, verður þú að úthluta því til Python túlksins sjálfs. Augljóslega er þetta hugsanlegt öryggisvandamál vegna þess að þá munu allar forskriftir sem keyrðar eru með þeim túlk hafa tilgreint leyfi, þó að þetta sé samt verulega betra en að gera það SUID. Algengasta lausnin virðist vera að skrifa sérstakt keyrsluefni í C eða sambærilegt sem getur framkvæmt nauðsynlegar aðgerðir og kallað það úr skriftu. Þetta er svipað og aðferðin sem Wireshark notar sem notar tvöfalda /usr/bin/dumpcap
til að framkvæma forréttindaaðgerðir:
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip
Í þriðja lagi eru skráarheimildir óvirkar ef þú notar umhverfisbreytu LD_LIBRARY_PATH
af augljósum öryggisástæðum(1). Sama á við um LD_PRELOAD
, eftir því sem ég best veit.
1. Þar sem árásarmaður getur augljóslega skipt út einu af stöðluðu bókasöfnunum og notað LD_LIBRARY_PATH
að þvinga bókasafn sitt til að vera kallað fram yfir kerfi eitt og hafa því sinn eigin handahófskennda kóða sem keyrður er með sömu réttindi og forritið sem hringir.
Það er allt og sumt. Nánari upplýsingar um dagskrá námskeiðsins er að finna á
Heimild: www.habr.com