Skráarheimildir í Linux

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. "Linux stjórnandi". Í aðdraganda útgáfunnar deilum við venjulega þýðingum á gagnlegu efni.

Skráarheimildir í Linux

Skráarheimildir bjóða upp á öruggan valkost við SUID keyrslur, en geta virst svolítið ruglingslegar í fyrstu.


Við vitum öll að tvíþættir SUÐUR eru slæm ákvörðun frá öryggissjónarmiði. Sem betur fer, ef umsókn þín krefst takmarkaðra réttinda, þá er til skilvirkari leið sem kallast skráarheimildir.

É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 þessum listaþegar þeir falla frá forréttindum og eru reknir af notanda sem er án forréttinda. Þetta þýðir að ef árásarmanni tekst að koma ferli í hættu með því að nota biðminni flæði eða aðra misnotkun, þá mun hann ekki geta nýtt sér neitt annað en ákveðin lágmarksréttindi sem ferlið þarf í raun.

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ð hráar innstungur. Þetta krefst venjulega að forritið sé keyrt sem rót, en þegar það er skoðað listanum kemur í ljós að einungis þarf leyfi 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ða clone() undirferlinu er alltaf gefið afrit af heimildum foreldraferlisins þar sem það er enn að keyra sama keyrsluforritið á þeim tímapunkti. Erfanlegt sett er notað þegar exec() (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

Leiðbeiningar um leyfi fjallar um þetta allt nánar, en vonandi hefur þessi færsla leyst aðeins úr því sem er að gerast. Það eru aðeins örfáir fyrirvarar og brellur sem þarf að nefna.

Í 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_PATHað þ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 á vefnámskeið sem fer fram 24. janúar.

Heimild: www.habr.com

Bæta við athugasemd