Failu atļaujas operētājsistēmā Linux

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. "Linux administrators". Gaidot palaiÅ”anu, mēs tradicionāli dalāmies ar noderÄ«ga materiāla tulkojumiem.

Failu atļaujas operētājsistēmā Linux

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 SUID Ir slikts lēmums no droŔības viedokļa. Par laimi, ja jÅ«su lietojumprogrammai ir vajadzÄ«gas dažas ierobežotas privilēģijas, ir efektÄ«vāks veids, ko sauc failu atļaujas.

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 Å”o sarakstukad tie zaudē privilēģijas un tos vada nepievilcÄ«gs lietotājs. Tas nozÄ«mē, ka, ja uzbrucējam izdodas apdraudēt procesu, izmantojot bufera pārpildÄ«Å”anu vai citu ļaunprātÄ«gu izmantoÅ”anu, viņŔ nevarēs izmantot neko citu kā tikai noteiktas minimālās privilēģijas, kas procesam patiesÄ«bā ir vajadzÄ«gas.

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 neapstrādātas ligzdas. Tas parasti prasa, lai lietojumprogramma tiktu palaists kā root, bet skatÄ«Å”anas laikā sarakstu izrādās, ka nepiecieÅ”ama tikai atļauja 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() vai clone() 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, kad exec() (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

Atļauju ceļvedis tas viss tiek apspriests sÄ«kāk, taču cerams, ka Å”is ieraksts ir nedaudz atminējis notiekoÅ”o. Atliek pieminēt tikai dažus brÄ«dinājumus un trikus.

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_PATHlai 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 vebinārs, kas notiks 24. janvārī.

Avots: www.habr.com

Pievieno komentāru