Plāno stiprināt OpenBSD W^X drošības mehānismu

Teo De Rāts dalīts plāno stiprināt W^X (Write XOR Execute) atmiņas aizsardzības mehānismu. Mehānisma būtība ir tāda, ka procesa atmiņas lapām nevar vienlaikus piekļūt rakstīšanai un izpildei. Tādējādi kodu var izpildīt tikai pēc rakstīšanas atspējošanas, un ierakstīšana atmiņas lapā ir iespējama tikai pēc izpildes atspējošanas. W^X mehānisms palīdz aizsargāt lietotāja telpas lietojumprogrammas no bieži sastopamiem bufera pārpildes uzbrukumiem, tostarp steku pārpildes, un ir aktīvs OpenBSD pēc noklusējuma.

Sākot darbu pie W^X, bija skaidrs, ka tas bija garš ceļš, jo JIT izmantoja ievērojams skaits lietojumprogrammu. JIT ieviešanas var iedalīt trīs kategorijās:

  • Atmiņas pārslēgšana starp W un X stāvokļiem, pieņemot sistēmas zvana “izmaksas”. mprotect.
  • Pseidonīmu izveide starp vienas atmiņas W un X kartējumu pāri.
  • “Netīrākajai” opcijai ir nepieciešams W|X atmiņas modelis, kas nodrošina vienlaicīgu ierakstīšanu un izpildi.

Pašlaik ir ievērojami mazāk programmu, kas izmanto trešo opciju, un vairāk, izmantojot pirmo un otro. Taču, tā kā bija nepieciešams palaist programmas ar W|X JIT (galvenokārt Chromium un Iridum), tika pievienota "wxallowed" failu sistēmas montāžas opcija, kas ļāva vienlaikus izmantot atmiņu gan rakstīšanai, gan izpildei, ja izpildāmā ELF fails ir atzīmēts ar marķieri “wxneeded”, un pašas lietojumprogrammas tika papildus aizsargātas, izmantojot mehānismus ķīla и atklāt lai attiecīgi ierobežotu lietoto sistēmas izsaukumu sarakstu un lietojumprogrammai pieejamās failu sistēmas daļas.

Lai vēl vairāk sarežģītu šādu lietojumprogrammu ievainojamību izmantošanu, ir ierosināts mehānisma papildinājums. MAP_STACK, kas pārbauda, ​​vai sistēmas izsaukums tiek izpildīts no rakstāmās atmiņas lapas. Ja lapa ir rakstāma, process ir spiests pārtraukt. Tādā veidā uzbrucējs nevarēs izmantot sistēmas izsaukumus un būs spiests mēģināt atrast nepieciešamos sīkrīkus JIT ieviešanā vai pat veikt sarežģītāko darbu, lai atklātu sistēmas izsaukumus tieši iekšpusē. nejauši piesaistīts libc.

Chrome/Iridium procesi jau ir diezgan droši aizsargāti, izmantojot ieķīlāšanu un atklāšanu, taču, atņemot iespēju izmantot, piemēram, write(2) sistēmas izsaukumu, acīmredzot ir zināmas priekšrocības, jo tas rada papildu grūtības uzbrucējam. Tomēr grūtības var rasties arī tad, ja JIT ieviešana izmanto vietējos sistēmas izsaukumus no W|X atmiņas. Tomēr ir pamats cerēt, ka tā nebūs, jo ABI ir vairākkārt mainīts, taču par problēmām neviens nekad nav ziņojis.

Izmaiņas jau ir pieejamas parastajos OpenBSD-Current filiāles momentuzņēmumos, testēt aicināts ikviens interesents.

Saistītās ziņas par režīma parādīšanos pārlūkā Chrome/Iridium ir pelnījušas atsevišķu Teo komentāru JITless. No viņa viedokļa tas ir pieņemams dažiem lietošanas modeļiem, bet, iespējams, ne visiem, jo ​​šis režīms acīmredzami palielinās procesora slodzi. Pašlaik pārlūks Chrome lielākoties darbosies, ja atspējosit "wxallowed" /usr/local, lai gan var rasties problēmas ar dažiem paplašinājumiem (piemēram, spoku). Tā vai citādi Teo cer, ka pilnvērtīgs darbs JITless režīmā tuvākajā laikā tiks pilnībā funkcionāls.

Avots: opennet.ru

Pievieno komentāru