Theo De Raadt 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. .
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. .
- 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. och 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. , 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. .
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. . 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
