Sveiki visiem. MÄs aktÄ«vi iekļaujamies darbÄ un jau janvÄrÄ« gatavojam daudz jaudÄ«gu uzsÄkumu. Starp citu, ir paziÅots par jauna kursa uzsÄkÅ”anu, kas visiem ir iecienÄ«ts. . Pirms uzsÄkÅ”anas tradicionÄli dalÄmies ar noderÄ«ga materiÄla tulkojumu.

Failu atļaujas piedÄvÄ droÅ”u alternatÄ«vu izpildÄmiem SUID failiem, taÄu, pirmo reizi skatoties, tÄs var likties nedaudz mulsinoÅ”as.
MÄs visi zinÄm, ka binÄrie faili ir . Par laimi, ja jÅ«su lietojumprogrammai ir nepiecieÅ”amas dažas ierobežotas privilÄÄ£ijas, ir efektÄ«vÄks veids, ko sauc par .
Es ietaupīŔu jums laiku, ja vÄlaties izvairÄ«ties no detalizÄtas raksta izlasīŔanas: bÅ«tÄ«bÄ failu atļaujas ļauj procesiem, kas tiek palaisti root lietotÄja vÄrdÄ un tÄdÄjÄdi ir tiesÄ«gi darÄ«t kaut ko, saglabÄt noteiktas iespÄjas, kas ir ierobežotas , kad tie nolaiž privilÄÄ£ijas un tiek palaisti kÄ nepielÄgots lietotÄjs. Tas nozÄ«mÄ, ka, ja uzbrucÄjam izdodas kompromitÄt procesu ar buferpÄrsniegumu vai citu eksplojumu, viÅÅ” nevarÄs izmantot neko citu kÄ noteiktas minimÄlÄs privilÄÄ£ijas, kas tieÅ”Äm nepiecieÅ”amas procesam.
Atļaujas lieliski der pakalpojumiem, kas parasti vienmÄr tiek palaisti root lietotÄja vÄrdÄ, bet kÄ ir ar komandrindas rÄ«kiem? Par laimi, tas tÄpat ir atbalstÄ«ts, ja jums ir uzstÄdÄ«ti pareizie rÄ«ki. Ja izmantojat Ubuntu, jums, piemÄram, bÅ«s nepiecieÅ”ams pakotne libcap2-bin. Jums arÄ« bÅ«s jÄpalaiž nemoderns kodols (sÄkot no versijas 2.6.24).
Å Ä«s funkcijas ļauj saistÄ«t atļaujas ar izpildÄmiem failiem lÄ«dzÄ«gi, kÄ iestatÄ«t SUID bitu, bet tikai noteiktam atļauju kopumam. RÄ«ks setcap tiek izmantots atļauju pievienoÅ”anai un dzÄÅ”anai no faila.
Pirmais solis ir izvÄlÄties nepiecieÅ”amÄs atļaujas. Å ajÄ rakstÄ es pieÅemu, ka pastÄv tÄ«kloÅ”anas diagnostikas rÄ«ks, ko sauc par tracewalk, kuram vajadzÄtu spÄt izmantot Parasti tÄdai lietojumprogrammai ir jÄpalaist root lietotÄja vÄrdÄ, bet, pÄrbaudot , izrÄdÄs, ka nepiecieÅ”ama tikai atļauja CAP_NET_RAW.
PieÅemot, ka atrodaties katalogÄ, kur atrodas binÄrais fails tracewalk, jÅ«s varat pievienot Å”o atļauju Å”Ädi:
sudo setcap cap_net_raw=eip tracewalk PagÄjuÅ”ajÄ laikÄ ignorÄjiet sufiksu =eip par atļauju, es jums par to pastÄstīŔu pÄc dažÄm sekundÄm. LÅ«dzu, Åemiet vÄrÄ, ka atļaujas nosaukums ir mazajiem burtiem. Tagad jÅ«s varat pÄrbaudÄ«t, vai esat pareizi konfigurÄjis atļaujas, izmantojot:
setcap -v cap_new_raw=eip tracewalkVai arÄ« varat izvadÄ«t visu atļauju sarakstu, kas noteiktas konkrÄtajam izpildÄmam failam:
getcap tracewalk
Lai bÅ«tu skaidrÄ«ba, jÅ«s varat arÄ« noÅemt visas atļaujas no izpildÄmÄ faila, izmantojot:
setcap -r tracewalkÅ ajÄ posmÄ jums vajadzÄtu bÅ«t iespÄjai palaist izpildÄmo failu kÄ nepilnvarotam lietotÄjam, un tam vajadzÄtu spÄt strÄdÄt ar neapstrÄdÄtiem soketiem, taÄu tam nevajadzÄtu bÅ«t nekÄdu citu privilÄÄ£iju, ko iegÅ«st root lietotÄjs.
TÄtad, ko nozÄ«mÄ Å”is dÄ«vainais sufikss =eip? ŠŠ“еŃŃ ŠæŠ¾ŃŃŠµŠ±ŃеŃŃŃ ŃŠ¾Š»ŠøŠŗŠ° ŠæŠ¾Š½ŠøŠ¼Š°Š½ŠøŃ ŠæŃŠøŃŠ¾Š“Ń ŃŠ°Š·ŃŠµŃŠµŠ½ŠøŠ¹. ŠŠ°Š¶Š“ŃŠ¹ ŠæŃŠ¾ŃеŃŃ ŠøŠ¼ŠµŠµŃ ŃŃŠø Š½Š°Š±Š¾ŃŠ° ŃŠ°Š·ŃŠµŃŠµŠ½ŠøŠ¹ ā efektÄ«vÄs, mantojamÄs un pieejamÄs (effective, inheritable un permitted):
- EfektÄ«vÄs (Effective) atļaujas ir tÄs, kas nosaka, ko process faktiski var darÄ«t. PiemÄram, tam nevar bÅ«t sakari ar neapstrÄdÄtiem soketiem, ja
CAP_NET_RAWtas nav efektÄ«vÄ kopÄ. - PieejamÄs (Permitted) atļaujas ir tÄs, ko procesam ir atļauts iegÅ«t, ja tas tÄs pieprasa ar atbilstoÅ”o izsaukumu. TÄs neļauj procesam faktiski neko darÄ«t, ja vien tas nav Ä«paÅ”i uzrakstÄ«ts, lai pieprasÄ«tu attiecÄ«go atļauju. Tas ļauj rakstÄ«t procesus, lai pievienotu Ä«paÅ”i svarÄ«gas atļaujas efektÄ«vai kopai tikai brÄ«dÄ«, kad tÄs patieÅ”Äm ir nepiecieÅ”amas.
- Mantojamas (Inheritable) atļaujas ir tÄs, kuras var manto bÄrnu procesa pieejamajÄ kopÄ. Veicot operÄciju
fork()vaiclone()bÄrnu procesam vienmÄr tiek dota vecÄku procesa atļauju kopija, jo tajÄ brÄ«dÄ« tas joprojÄm izpilda to paÅ”u izpildÄmo failu. Mantojamo kopu izmanto, kadexec()(vai lÄ«dzÄ«gas) izsaukums tiek veikts, lai nomainÄ«tu izpildÄmo failu ar citu. Å ajÄ posmÄ procesa pieejamÄ kopa tiek maskÄta ar mantojamo kopu, lai iegÅ«tu pieejamo kopu, kas tiks izmantota jaunajam procesam.
TÄdÄjÄdi utilÄ«ta setcap ļauj mums pievienot Å”o triju kopu atļaujas neatkarÄ«gi Å”im izpildÄmam failam. Å
emiet vÄrÄ, ka grupu vÄrtÄ«ba tiek interpretÄta nedaudz citÄdi failu pieejas tiesÄ«bÄm:
- Pieejami failu atļaujas ā ir tÄs, kas vienmÄr ir pieejamas izpildÄmam failam, pat ja vecÄkam procesam, kas to izsauc, nav tÄs. AgrÄk tÄs tika sauktas par āpiespieduā atļaujÄm.
- MantojamÄs failu atļaujas nosaka papildu masku, kas var tikt izmantota, lai arÄ« dzÄstu atļaujas no zvanoÅ”Ä procesa kopas. TÄs tiek piemÄrotas papildus dzimtajai kopai, tÄpÄc atļauja tiek mantojama tikai tad, ja tÄ pastÄv abÄs kopÄs.
- EfektÄ«vÄs failu atļaujas ir patiesÄ«bÄ tikai viens bits, nevis kopa, un, ja tas ir iestatÄ«ts, tas nozÄ«mÄ, ka visa pieejamÄ kopa tiek arÄ« kopÄta jauna procesa efektÄ«vajÄ kopÄ. To var izmantot, lai pievienotu atļaujas procesiem, kuri nav speciÄli rakstÄ«ti to pieprasīŔanai. TÄ kÄ tas ir viens bits, ja jÅ«s to iestatÄt kÄdai atļaujai, tas jÄnoraida visÄm atļaujÄm. JÅ«s varat domÄt par to kÄ par mantoÅ”anas bitu, jo tas tiek izmantots, lai atļautu atļauju izmantoÅ”anu lietojumiem, kas tÄs neatbalsta.
Iestatot atļaujas caur setcap trÄ«s burtiem e, i un p attiecas uz efektÄ«vajÄm, mantojamajÄm un pieejamajÄm kopÄm attiecÄ«gi. TÄtad, agrÄkÄ specifikÄcija:
sudo setcap cap_net_raw=eip tracewalk ⦠norÄda, ka atļauja CAP_NET_RAW ir jÄpieŔķir pieejamÄm un mantojamÄm kopÄm un ka arÄ« jÄbÅ«t iestatÄ«tam efektÄ«vam bitam. Tas aizstÄs visas iepriekÅ”noteiktÄs atļaujas failÄ. Lai uzreiz iestatÄ«tu vairÄkas atļaujas, izmantojiet sarakstu pa komatiem:
sudo setcap cap_net_admin,cap_net_raw=eip tracewalkapspriež visu to detalizÄtÄk, bet, cerams, Å”is ieraksts nedaudz atklÄja to, kas notiek. VÄl paliek tikai daži brÄ«dinÄjumi un triki.
Vispirms, failu iespÄjas nedarbojas ar simboliskajÄm saitÄm ā jums tÄs jÄpiemÄro paÅ”am binÄrajam failam (t.i., simboliskÄs saites mÄrÄ·im).
OtrkÄrt, tie nedarbojas ar interpretÄtajiem skriptiem. PiemÄram, ja jums ir Python skripts, kuram vÄlaties pieŔķirt atļauju, jums tas jÄpiekÄrto paÅ”am Python interpretÄtÄjam. AcÄ«mredzot tas ir potenciÄls droŔības risks, jo tad visiem skriptiem, kas tiek izpildÄ«ti ar Å”o interpretÄtÄju, bÅ«s norÄdÄ«tÄ atļauja, lai gan tas joprojÄm ir ievÄrojami labÄk nekÄ izmantot SUID. VisizplatÄ«tÄkais apvedceļŔ, Ŕķiet, ir radÄ«t atseviŔķu izpildÄmo failu C vai tamlÄ«dzÄ«gÄ valodÄ, kas var veikt nepiecieÅ”amÄs operÄcijas un izsaukt to no skripta. Tas ir lÄ«dzÄ«gi kÄ pieeja, ko izmanto Wireshark, kas izmanto binÄro failu. /usr/bin/dumpcap privilegÄtu darbÄ«bu veikÅ”anai:
$ 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 droŔības apsvÄrumu dÄļ(1). Tas attiecas arÄ« uz LD_PRELOAD, cik man zinÄms.
1. TÄ kÄ uzbrucÄjs, acÄ«mredzot, var aizvietot kÄdu no standarta bibliotÄkÄm un izmantot LD_LIBRARY_PATH, lai panÄktu, ka viÅa bibliotÄka tiek izsaukta priekÅ”roka pÄr sistÄmas, un lÄ«dz ar to izpildÄ«t savu patvaļīgo kodu ar tÄm paÅ”Äm privilÄÄ£ijÄm kÄ saucoÅ”ajam lietojumam.
Uz to viss ir beidzies. SÄ«kÄk par kursa programmu varÄs uzzinÄt
Avots: habr.com
