Failu atļaujas Linux

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. Linux administrators. Pirms uzsākÅ”anas tradicionāli dalāmies ar noderÄ«ga materiāla tulkojumu.

Failu atļaujas Linux

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 SUID ir slikta izvēle droŔības ziņā. Par laimi, ja jÅ«su lietojumprogrammai ir nepiecieÅ”amas dažas ierobežotas privilēģijas, ir efektÄ«vāks veids, ko sauc par failu atļaujām..

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 Å”ajā sarakstā, 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 neapstrādātus soketus.Parasti tādai lietojumprogrammai ir jāpalaist root lietotāja vārdā, bet, pārbaudot saraksta , 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 tracewalk

Vai 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_RAW tas 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() vai clone() 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, kad exec() (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 tracewalk

Atļauju ceļvedis apspriež 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 vebinārā, kas notiks 24. janvārī.

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster