Sveiki visiem. MÄs aktÄ«vi Ä·eramies pie darba un jau gatavojam daudzus spÄcÄ«gus startus janvÄrÄ«. Cita starpÄ ir izsludinÄta pieteikÅ”anÄs jaunai visu iecienÄ«tÄko kursu straumei.
Failu atļaujas piedÄvÄ droÅ”u alternatÄ«vu SUID izpildÄmajiem failiem, taÄu sÄkotnÄji var Ŕķist nedaudz mulsinoÅ”i.
MÄs visi zinÄm, ka binÄrie faili
Es ietaupÄ«Å”u jums laiku, ja nevÄlaties detalizÄti lasÄ«t iepriekÅ” minÄto rakstu: BÅ«tÄ«bÄ failu atļaujas ļauj procesiem, kas darbojas kÄ root, un tÄpÄc tiem ir atļauts kaut ko darÄ«t, lai saglabÄtu noteiktas iespÄjas, ierobežotas
Atļaujas ir lieliski piemÄrotas pakalpojumiem, kas parasti vienmÄr darbojas kÄ root, bet kÄ ar komandrindas utilÄ«tprogrammÄm? Par laimi, tas tiek atbalstÄ«ts arÄ« tad, ja ir instalÄtas pareizÄs utilÄ«tas. Ja izmantojat Ubuntu, jums, piemÄram, bÅ«s nepiecieÅ”ama pakotne libcap2-bin
. Jums bÅ«s jÄpalaiž arÄ« nearhaisks kodols (no versijas 2.6.24).
Å Ä«s funkcijas ļauj saistÄ«t atļaujas ar izpildÄmajiem failiem, lÄ«dzÄ«gi kÄ SUID bita iestatÄ«Å”ana, bet tikai noteiktai atļauju kopai. LietderÄ«ba setcap
izmanto, lai failam pievienotu un noÅemtu atļaujas.
Pirmais solis ir izvÄlÄties nepiecieÅ”amÄs atļaujas. Å Ä« raksta labad es pieÅemu, ka ir tÄ«kla diagnostikas rÄ«ks, ko sauc tracewalk
, ko vajadzÄtu bÅ«t iespÄjai izmantot CAP_NET_RAW
.
PieÅemot, ka atrodaties direktorijÄ, kurÄ atrodas binÄrais fails tracewalk
, varat pievienot Å”o atļauju Å”Ädi:
sudo setcap cap_net_raw=eip tracewalk
PagaidÄm ignorÄjiet sufiksu =eip
lai atrisinÄtu, es par to runÄÅ”u pÄc pÄris sekundÄm. Å
emiet vÄrÄ, ka atļaujas nosaukums ir ar mazajiem burtiem. Tagad varat pÄrbaudÄ«t, vai esat pareizi konfigurÄjis atļaujas, izmantojot:
setcap -v cap_new_raw=eip tracewalk
Vai arÄ« varat uzskaitÄ«t visas konkrÄtajam izpildÄmajam failam iestatÄ«tÄs atļaujas:
getcap tracewalk
UzziÅai varat arÄ« noÅemt visas izpildÄmÄ faila atļaujas, izmantojot:
setcap -r tracewalk
Å ajÄ brÄ«dÄ« jums vajadzÄtu bÅ«t iespÄjai palaist izpildÄmo failu kÄ nepievilinÄtam lietotÄjam, un tam vajadzÄtu bÅ«t iespÄjai strÄdÄt ar neapstrÄdÄtÄm ligzdÄm, taÄu tai nevajadzÄtu bÅ«t citÄm privilÄÄ£ijÄm, kas ir root lietotÄjam.
TÄtad, ko nozÄ«mÄ Å”is dÄ«vainais piedÄklis? =eip
? Tas prasa zinÄmu izpratni par atļauju bÅ«tÄ«bu. Katram procesam ir trÄ«s atļauju kopas ā efektÄ«va, pÄrmantojama un atļauta:
- EfektÄ«vs Atļaujas ir tÄs, kas nosaka, ko process faktiski var darÄ«t. PiemÄram, tÄ nevar tikt galÄ ar neapstrÄdÄtÄm ligzdÄm, ja
CAP_NET_RAW
nav efektÄ«vajÄ komplektÄ. - Pieejams Atļaujas ir tÄs, kuras procesam ir atļauts iegÅ«t, ja tas tÄs pieprasa, izmantojot atbilstoÅ”o izsaukumu. Tie neļauj procesam faktiski kaut ko darÄ«t, ja vien tas nav Ä«paÅ”i rakstÄ«ts, lai pieprasÄ«tu minÄto atļauju. Tas ļauj rakstÄ«t procesus, lai pievienotu kritiskÄs atļaujas efektÄ«vajai kopai tikai tajÄ periodÄ, kad tÄs faktiski ir nepiecieÅ”amas.
- Mantojama Atļaujas ir tÄs, kuras var mantot izveidotÄ bÄrnprocesa pieejamajÄ kopÄ. OperÄcijas laikÄ
fork()
vaiclone()
pakÄrtotajam procesam vienmÄr tiek pieŔķirta vecÄkprocesa atļauju kopija, jo tajÄ brÄ«dÄ« tas joprojÄm darbojas ar to paÅ”u izpildÄmo failu. Mantojams komplekts tiek izmantots, kadexec()
(vai ekvivalents) tiek izsaukts, lai aizstÄtu izpildÄmo failu ar citu. Å ajÄ brÄ«dÄ« procesa pieejamÄ kopa tiek maskÄta ar mantojamu kopu, lai iegÅ«tu pieejamo kopu, kas tiks izmantota jaunajam procesam.
TÄtad lietderÄ«ba setcap
ļauj mums neatkarÄ«gi pievienot Å”o trÄ«s kopu atļaujas konkrÄtajam izpildÄmajam failam. Å
emiet vÄrÄ, ka grupu nozÄ«me failu atļaujÄm tiek interpretÄta nedaudz atŔķirÄ«gi:
- Pieejams faila atļaujas ir tÄs, kas vienmÄr ir pieejamas izpildÄmajam failam, pat ja vecÄkprocesam, kas to izsauca, to nebija. AgrÄk tÄs sauca par āpiespieduā atļaujÄm.
- Iedzimts faila atļaujas definÄ papildu masku, ko var izmantot arÄ«, lai noÅemtu atļaujas no zvanÄ«Å”anas procesa kopas. Tie tiek piemÄroti papildus izsaukÅ”anas procesa mantotajai kopai, tÄpÄc atļauja tiek mantota tikai tad, ja tÄ pastÄv abÄs kopÄs.
- EfektÄ«vs failu atļaujas faktiski ir tikai viens bits, nevis kopa, un, ja tas ir iestatÄ«ts, tas nozÄ«mÄ, ka visa pieejamÄ kopa tiek kopÄta arÄ« jaunÄ procesa efektÄ«vajÄ kopÄ. To var izmantot, lai pievienotu atļaujas procesiem, kas nav Ä«paÅ”i rakstÄ«ti, lai tos pieprasÄ«tu. TÄ kÄ tas ir viens bits, ja iestatÄt to jebkurai atļaujai, tÄ ir jÄiestata visÄm atļaujÄm. Varat to uzskatÄ«t par mantotu bitu, jo tas tiek izmantots, lai atļautu atļaujas izmantot lietojumprogrammÄm, kas tÄs neatbalsta.
NorÄdot atļaujas, izmantojot setcap
trīs burti e
, i
Šø p
atsaukties uz efektÄ«va, pÄrmantojama un pieejama Š¼Š½Š¾Š¶ŠµŃŃŠ²Š°Š¼ ŃŠ¾Š¾ŃŠ²ŠµŃŃŃŠ²ŠµŠ½Š½Š¾. ŠŃŠ°Šŗ, Š±Š¾Š»ŠµŠµ ŃŠ°Š½Š½ŃŃ ŃŠæŠµŃŠøŃŠøŠŗŠ°ŃŠøŃ:
sudo setcap cap_net_raw=eip tracewalk
...norÄda, ka rezolÅ«cija CAP_NET_RAW
jÄpievieno pieejamajÄm un pÄrmantojamajÄm kopÄm un jÄiestata arÄ« efektÄ«vais bits. TÄdÄjÄdi tiks ignorÄtas visas failam iepriekÅ” iestatÄ«tÄs atļaujas. Lai vienlaikus iestatÄ«tu vairÄkas atļaujas, izmantojiet ar komatu atdalÄ«tu sarakstu:
sudo setcap cap_net_admin,cap_net_raw=eip tracewalk
PirmkÄrt, failu iespÄjas nedarbojas ar simsaitÄm ā tÄs ir jÄpiemÄro paÅ”am binÄrajam failam (t.i., simsaites mÄrÄ·im).
OtrkÄrt, tie nedarbojas ar interpretÄtiem skriptiem. PiemÄram, ja jums ir Python skripts, kuram vÄlaties pieŔķirt atļauju, tas ir jÄpieŔķir paÅ”am Python tulkam. AcÄ«mredzot tÄ ir iespÄjama droŔības problÄma, jo tad visiem skriptiem, kas izpildÄ«ti ar Å”o tulku, bÅ«s norÄdÄ«tÄ atļauja, lai gan tas joprojÄm ir ievÄrojami labÄks par SUID. Å Ä·iet, ka visizplatÄ«tÄkais risinÄjums ir rakstÄ«t atseviŔķu izpildÄmo failu C vai lÄ«dzvÄrtÄ«gÄ valodÄ, kas var veikt nepiecieÅ”amÄs darbÄ«bas un izsaukt to no skripta. Tas ir lÄ«dzÄ«gs Wireshark izmantotajai pieejai, kurÄ tiek izmantots binÄrs /usr/bin/dumpcap
lai veiktu priviliÄ£Ätas darbÄ«bas:
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip
TreÅ”kÄrt, failu atļaujas tiek atspÄjotas, ja izmantojat vides mainÄ«go LD_LIBRARY_PATH
acÄ«mredzamu droŔības apsvÄrumu dÄļ(1). Tas pats attiecas uz LD_PRELOAD
, cik es zinu.
1. TÄ kÄ uzbrucÄjs acÄ«mredzami var aizstÄt vienu no standarta bibliotÄkÄm un izmantot LD_LIBRARY_PATH
lai piespiestu savu bibliotÄku izsaukt, nevis sistÄmas bibliotÄku, un tÄpÄc tam tiktu izpildÄ«ts savs patvaļīgs kods ar tÄdÄm paÅ”Äm privilÄÄ£ijÄm kÄ izsaucÄjai lietojumprogrammai.
Tas ir viss. SÄ«kÄku informÄciju par kursu programmu var atrast
Avots: www.habr.com