Plaanid tugevdada OpenBSD W^X turvamehhanismi

Theo De Raadt jagatud kavatseb tugevdada W^X (Write XOR Execute) mälukaitsemehhanismi. Mehhanismi olemus seisneb selles, et protsessimälu lehtedele ei saa üheaegselt juurde pääseda nii kirjutamiseks kui ka täitmiseks. Seega saab koodi käivitada alles pärast kirjutamise keelamist ja mälulehele kirjutamine on võimalik alles pärast täitmise keelamist. W^X mehhanism aitab kaitsta kasutajaruumi rakendusi tavaliste puhvri ületäitumise rünnakute eest, sealhulgas pinu ületäitumise eest ning on aktiivne OpenBSD-s vaikimisi.

W^X-iga töötamise algusest peale oli selge, et see tee oli pikk, kuna JIT-i kasutas märkimisväärne arv rakendusi. JIT-rakendused võib jagada kolme kategooriasse:

  • Mälu ümberlülitamine W ja X olekute vahel, aktsepteerides süsteemikõne "kulu". mprotect.
  • Pseudonüümi loomine sama mälu paari W ja X vastenduse vahel.
  • Kõige määrdunud valik nõuab W|X mälumudelit, mis võimaldab samaaegset salvestamist ja täitmist.

Praegu on kolmandat võimalust kasutavaid programme oluliselt vähem ning esimest ja teist kasutavaid programme rohkem. Kuna aga oli vaja käivitada programme W|X JIT-ga (peamiselt Chromium ja Iridum), siis lisati failisüsteemi ühendamisvalik "wxallowed", mis võimaldas kasutada mälu üheaegselt nii kirjutamiseks kui ka täitmiseks, juhul kui käivitatav ELF fail on tähistatud markeriga "wxneeded" ja rakendused ise olid mehhanismide abil täiendavalt kaitstud pant и avalikustama et piirata vastavalt kasutatavate süsteemikutsete loendit ja rakendusele saadaolevaid failisüsteemi osi.

Selliste rakenduste haavatavuste ärakasutamise veelgi keerulisemaks muutmiseks tehakse ettepanek mehhanismi täiendada. MAP_STACK, mis kontrollib, kas süsteemikutset täidetakse kirjutatava mälu lehelt. Kui leht on kirjutatav, on protsess sunnitud lõpetama. Nii ei saa ründaja süsteemikõnesid ära kasutada ja on sunnitud püüdma leida JIT-i juurutusest vajalikke vidinaid või isegi tegema keerulisemat tööd otse seest süsteemikutsete tuvastamisel. kogemata lingitud libc.

Chrome/Iridiumi protsessid on panti ja paljastamise abil juba üsna usaldusväärselt kaitstud, kuid näiteks write(2) süsteemikutse kasutamise võimaluse eemaldamisel on ilmselgelt teatud eelised, kuna see tekitab ründajale lisaraskusi. Raskusi võib aga tekkida ka siis, kui JIT-i juurutus kasutab W|X-mälust pärinevaid natiivseid süsteemikutseid. Siiski on põhjust loota, et see nii ei lähe, kuna ABI-d on korduvalt muudetud, kuid keegi pole kunagi probleemidest teatanud.

Muudatused on juba saadaval tavaliste OpenBSD-Currenti haru hetkepiltidena, testima on oodatud kõik huvilised.

Seotud uudised režiimi ilmumise kohta Chrome'is/Iridiumis väärivad Theo eraldi kommentaari JITless. Tema seisukohast on see mõne kasutusmudeli puhul vastuvõetav, kuid tõenäoliselt mitte kõigi jaoks, kuna see režiim suurendab ilmselt protsessori koormust. Praegu töötab Chrome enamasti siis, kui keelate "wxallowed" /usr/local jaoks, kuigi mõnede laiendustega võib esineda probleeme (näiteks kummitus). Nii või teisiti loodab Theo, et täisväärtuslik töö JITless-režiimis viiakse lähitulevikus täielikult töötavasse olekusse.

Allikas: opennet.ru

Lisa kommentaar