Planer för att stÀrka skyddsmekanismen W^X i OpenBSD

Theo De Raadt delte planer för att förstÀrka W^X (Write XOR Execute) minnesskyddsmekanismen. Idén bakom mekanismen Àr att processens minnessidor inte samtidigt kan vara tillgÀngliga för skrivning och exekvering. PÄ sÄ sÀtt kan koden exekveras först efter att skrivning har förhindrats, och skrivning till minnessidan Àr endast möjlig efter att exekvering har förhindrats. W^X-mekanismen hjÀlper till att skydda anvÀndarutrymmet frÄn typiska attacker som utförs genom buffertöverskridning, inklusive stacköverskridningar, och Àr aktiv i OpenBSD. standard.

FrÄn början av arbetet med W^X var det klart att detta skulle bli en lÄng vÀg, eftersom det finns ett betydande antal applikationer som anvÀnder JIT. JIT-implementationer kan delas in i tre kategorier:

  • Att vĂ€xla minne mellan W- och X-tillstĂ„nd och acceptera "kostnaden" för systemanrop. mprotect.
  • Skapar alias mellan ett par W och X-mappingar av samma minne.
  • Den mest "smutsiga" varianten Ă€r de som krĂ€ver W|X-minnesmodeller, som tillĂ„ter samtidig skrivning och exekvering.

För nĂ€rvarande finns det betydligt fĂ€rre program som anvĂ€nder det tredje alternativet och fler som anvĂ€nder det första och andra. ÄndĂ„, eftersom det var nödvĂ€ndigt att köra program med W|X JIT (frĂ€mst Chromium och Iridum), lades alternativet för montering av filsystemet "wxallowed" till, vilket gjorde det möjligt att anvĂ€nda minnet för bĂ„de skrivning och exekvering, om den exekverbara ELF-filen var markerad med "wxneeded"-taggen, och sjĂ€lva applikationerna skyddades ytterligare med hjĂ€lp av mekanismer. pledge och unveil för att begrĂ€nsa listan över anvĂ€nda systemanrop och de delar av filsystemet som Ă€r tillgĂ€ngliga för applikationen.

För att ytterligare komplicera utnyttjandet av sÄrbarheter i sÄdana applikationer föreslogs en tillÀggsmekanism. MAP_STACK, som kontrollerar om systemanropet utförs frÄn en minnessida som Àr tillgÀnglig för skrivning. Om sidan Àr tillgÀnglig för skrivning avslutas processen tvingat. SÄledes kan inte angriparen anvÀnda systemanrop och tvingas försöka hitta nödvÀndiga gadgets i JIT-implementationen eller till och med utföra ett svÄrare arbete med att upptÀcka stubbarna för systemanrop direkt i. slumptilldelad libc..

Chrome- och Iridium-processerna Ă€r tillrĂ€ckligt skyddade med pledge och unveil, men att begrĂ€nsa möjligheten att anvĂ€nda systemanrop som write(2) ger uppenbarligen nĂ„gra fördelar, eftersom det skapar ytterligare svĂ„righeter för angriparen. Å andra sidan kan svĂ„righeter ocksĂ„ uppstĂ„ om JIT-implementationen anvĂ€nder inbyggda systemanrop frĂ„n W|X-minnet. Det finns dock anledning att hoppas att detta inte blir ett problem, eftersom ABI har Ă€ndrats flera gĂ„nger, och ingen har nĂ„gonsin rapporterat om nĂ„gra problem.

Ändringarna finns nu tillgĂ€ngliga i de regelbundna snapshots för OpenBSD-CURRENT-grenen, alla intresserade Ă€r inbjudna att testa.

Theo förtjÀnade en sÀrskild kommentar angÄende relaterade nyheter om introduktionen av lÀgen i Chrome/Iridium. JITless. Ur hans perspektiv Àr detta acceptabelt för vissa anvÀndningsmodeller, men sannolikt inte för alla, eftersom belastningen pÄ processorn uppenbarligen ökar i detta lÀge. Nu kommer Chrome huvudsakligen att fungera om "wxallowed" stÀngs av för /usr/local, Àven om det kan uppstÄ problem med vissa tillÀgg (ghostery nÀmns som ett exempel). Hur som helst hoppas Theo att fullstÀndig drift i JITless-lÀget kommer att nÄ ett fullt fungerande tillstÄnd inom en snar framtid.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster