Helo i gyd. Rydym wrthi'n dechrau gweithio ac eisoes yn paratoi llawer o lansiadau pwerus ym mis Ionawr. Ymhlith eraill, mae cofrestriad wedi'i gyhoeddi ar gyfer ffrwd newydd o hoff gwrs pawb.
Mae caniatadau ffeil yn cynnig dewis arall diogel i weithrediadau SUID, ond gallant ymddangos ychydig yn ddryslyd ar y dechrau.
Rydym i gyd yn gwybod bod binaries
Byddaf yn arbed peth amser i chi os ydych am osgoi darllen yr erthygl uchod yn fanwl: Yn y bôn, mae caniatâd ffeiliau yn caniatáu prosesau sy'n rhedeg fel gwraidd ac felly'n cael gwneud rhywbeth i gadw galluoedd penodol, cyfyngedig
Mae caniatâd yn wych ar gyfer gwasanaethau sydd fel arfer bob amser yn rhedeg fel gwraidd, ond beth am gyfleustodau llinell orchymyn? Yn ffodus, mae hyn hefyd yn cael ei gefnogi ar yr amod bod y cyfleustodau cywir wedi'u gosod gennych. Os ydych chi'n defnyddio Ubuntu, bydd angen y pecyn arnoch er enghraifft libcap2-bin
. Bydd angen i chi hefyd redeg cnewyllyn nad yw'n hynafol (o fersiwn 2.6.24).
Mae'r swyddogaethau hyn yn caniatáu i ganiatadau fod yn gysylltiedig â ffeiliau gweithredadwy, yn debyg i osod y did SUID, ond dim ond ar gyfer set benodol o ganiatadau. Cyfleustodau setcap
a ddefnyddir i ychwanegu a dileu caniatadau o ffeil.
Y cam cyntaf yw dewis y caniatâd sydd ei angen arnoch. Er mwyn yr erthygl hon, rwy'n cymryd bod yna offeryn diagnostig rhwydwaith o'r enw tracewalk
, a ddylai allu defnyddio CAP_NET_RAW
.
Gan dybio eich bod yn y cyfeiriadur lle mae'r deuaidd wedi'i leoli tracewalk
, gallwch ychwanegu'r caniatâd hwn fel hyn:
sudo setcap cap_net_raw=eip tracewalk
Anwybyddwch yr ôl-ddodiad am y tro =eip
i'w ddatrys, byddaf yn siarad am hynny mewn ychydig eiliadau. Sylwch fod enw'r caniatâd mewn llythrennau bach. Gallwch nawr wirio a ydych wedi ffurfweddu caniatâd yn gywir gyda:
setcap -v cap_new_raw=eip tracewalk
Neu gallwch restru'r holl ganiatadau a osodwyd ar gyfer gweithredadwy penodol:
getcap tracewalk
Er gwybodaeth, gallwch hefyd ddileu pob caniatâd o'r gweithredadwy gyda:
setcap -r tracewalk
Ar y pwynt hwn, dylech allu rhedeg y gweithredadwy fel defnyddiwr di-freintiedig, a dylai allu gweithio gyda socedi amrwd, ond heb fod ag unrhyw un o'r breintiau eraill sydd gan y defnyddiwr gwraidd.
Felly beth mae'r ôl-ddodiad rhyfedd hwn yn ei olygu? =eip
? Mae hyn yn gofyn am rywfaint o ddealltwriaeth o natur caniatadau. Mae gan bob proses dair set o ganiatadau − effeithiol, etifeddol a ganiateir:
- Effeithiol Caniatadau yw'r rhai sy'n diffinio'r hyn y gall proses ei wneud mewn gwirionedd. Er enghraifft, ni all ddelio â socedi amrwd os
CAP_NET_RAW
nad yw yn y set effeithiol. - Ar gael caniatadau yw'r rhai y caniateir i broses eu cael os yw'n gofyn iddynt ddefnyddio'r alwad briodol. Maent yn atal proses rhag gwneud unrhyw beth mewn gwirionedd oni bai ei bod wedi'i hysgrifennu'n benodol i ofyn am y caniatâd hwnnw. Mae hyn yn caniatáu i brosesau gael eu hysgrifennu i ychwanegu caniatâd critigol at y set effeithiol dim ond ar gyfer y cyfnod pan fydd eu hangen mewn gwirionedd.
- Etifeddol caniatadau yw'r rhai y gellir eu hetifeddu yn y set hygyrch o'r broses plentyn silio. Yn ystod llawdriniaeth
fork()
neuclone()
mae'r broses plentyn bob amser yn cael copi o ganiatadau'r broses rhiant gan ei fod yn dal i redeg yr un gweithredadwy bryd hynny. Defnyddir set etifeddadwy panexec()
(neu gyfwerth) yn cael ei alw i ddisodli'r ffeil weithredadwy am ffeil arall. Ar y pwynt hwn, mae set y broses sydd ar gael yn cael ei chuddio gan y set etifeddadwy i gael y set hygyrch a ddefnyddir ar gyfer y broses newydd.
Felly y cyfleustodau setcap
yn caniatáu inni ychwanegu caniatâd y tair set hyn yn annibynnol ar gyfer gweithredadwy penodol. Sylwch fod ystyr grwpiau yn cael ei ddehongli ychydig yn wahanol ar gyfer caniatâd ffeiliau:
- Ar gael caniatadau ffeil yw'r rhai sydd bob amser ar gael i ffeil gweithredadwy, hyd yn oed os nad oedd gan y rhiant-broses a'i galwodd. Roedden nhw'n arfer cael eu galw'n drwyddedau “gorfodol”.
- Etifeddwyd mae caniatadau ffeil yn diffinio mwgwd ychwanegol y gellir ei ddefnyddio hefyd i ddileu caniatadau o set y broses alw. Maent yn berthnasol yn ychwanegol at set etifeddol y broses alw, felly dim ond os yw'n bodoli yn y ddwy set y caiff y caniatâd ei etifeddu.
- Effeithiol Dim ond un darn yw caniatadau ffeil mewn gwirionedd, nid set, ac os caiff ei osod, mae'n golygu bod y set gyfan sydd ar gael hefyd yn cael ei chopïo i set effeithiol y broses newydd. Gellir defnyddio hwn i ychwanegu caniatâd at brosesau na chawsant eu hysgrifennu'n benodol i ofyn amdanynt. Gan ei fod yn un did, os ydych chi'n ei osod ar gyfer unrhyw ganiatâd, rhaid ei osod ar gyfer pob caniatâd. Gallwch feddwl amdano fel darn etifeddiaeth oherwydd fe'i defnyddir i ganiatáu i geisiadau nad ydynt yn eu cefnogi ddefnyddio caniatâd.
Wrth nodi caniatâd trwy setcap
tri llythyren e
, i
и p
ymwneud â effeithiol, etifeddadwy a hygyrch setiau yn y drefn honno. Felly, y fanyleb gynharach:
sudo setcap cap_net_raw=eip tracewalk
...yn dangos bod y penderfyniad CAP_NET_RAW
rhaid ychwanegu at y setiau sydd ar gael ac etifeddadwy a bod yn rhaid gosod y did effeithiol hefyd. Bydd hyn yn diystyru unrhyw ganiatadau a osodwyd yn flaenorol ar y ffeil. I osod sawl caniatâd ar unwaith, defnyddiwch restr wedi'i gwahanu gan goma:
sudo setcap cap_net_admin,cap_net_raw=eip tracewalk
Yn gyntaf, nid yw galluoedd ffeil yn gweithio gyda symlinks - mae'n rhaid i chi eu cymhwyso i'r ffeil ddeuaidd ei hun (h.y. targed y cyswllt syml).
Yn ail, nid ydynt yn gweithio gyda sgriptiau wedi'u dehongli. Er enghraifft, os oes gennych sgript Python yr ydych am aseinio caniatâd iddo, rhaid i chi ei aseinio i'r cyfieithydd Python ei hun. Yn amlwg mae hwn yn fater diogelwch posibl oherwydd yna bydd gan bob sgript a weithredir gyda'r cyfieithydd hwnnw'r caniatâd penodol, er bod hyn yn dal yn sylweddol well na'i wneud yn SUID. Ymddengys mai'r ateb mwyaf cyffredin yw ysgrifennu gweithredadwy ar wahân yn C neu gyfwerth a all gyflawni'r gweithrediadau angenrheidiol a'i alw o sgript. Mae hyn yn debyg i'r dull a ddefnyddir gan Wireshark sy'n defnyddio deuaidd /usr/bin/dumpcap
i gyflawni gweithrediadau breintiedig:
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip
Yn drydydd, mae caniatâd ffeiliau wedi'u hanalluogi os ydych chi'n defnyddio newidyn amgylchedd LD_LIBRARY_PATH
am resymau diogelwch amlwg(1). Mae'r un peth yn berthnasol i LD_PRELOAD
, hyd y gwn i.
1. Gan y gall ymosodwr yn amlwg yn disodli un o'r llyfrgelloedd safonol a defnydd LD_LIBRARY_PATH
i orfodi ei llyfrgell i gael ei galw yn hytrach na'r system yn un, ac felly cael ei chod mympwyol ei hun wedi'i weithredu gyda'r un breintiau â'r cais galw.
Dyna i gyd. Mae rhagor o fanylion am raglen y cwrs ar gael yn
Ffynhonnell: hab.com