Mozilla stelt W^X in Firefox 46 om de veiligheid te verbeteren

0
194

Mozilla ingeschakeld voor de beveiliging zijn voorzien van W^X in Firefox Nightly (momenteel versie 46) en de plannen om het beschikbaar te maken voor andere versies van de webbrowser wanneer ze worden bijgewerkt naar versie 46.

W^X, gesproken Schrijf XOR uit te Voeren, is een security-beleid voor geheugen dat bepaalt geheugen pagina ‘ s als beschrijfbare of uitvoerbaar is, maar niet beide. De functie is aanwezig in het OpenBSD besturingssysteem sinds 2003.

Het OpenBSD basissysteem is aangepast om hieraan te voldoen. Dit vermindert enkele buffer overloop aanvallen, waaronder de meest voorkomende stack-gebaseerde aanval: door ervoor te zorgen dat de stapel niet uitvoerbaar is, willekeurige code geïnjecteerd zal niet worden uitgevoerd, maar in plaats daarvan ervoor zorgen dat het programma te beëindigen

De meeste JIT (Just in Time) compilers gebruik RWX (read-write-execute) machtigingen voor het geheugen pagina ‘ s die het mogelijk maakt de compiler patch code zonder prestatie-overhead. Dit is het geval voor Firefox huidige JIT-compiler, maar ook voor Chrome of Safari ‘ s compiler.

Terwijl dat is gunstig voor de prestaties van de browser tijdens het uitvoeren van en het uitvoeren van JavaScript-code, introduceert problemen op hetzelfde moment.

RWX Beveiliging

firefox 46 rwx

Terwijl de meeste moderne besturingssystemen winkel code in uitvoerbare maar niet-beschrijfbaar geheugen, RWX JIT-code is een uitzondering en dat maakt het een doel voor aanvallen. Daarnaast is het geheugen corruptie kan een probleem zijn.

Mozilla ‘s implementatie van W^X maakt alle JIT-code pagina’ s niet-beschrijfbare standaard. Als de browser nodig heeft om te schrijven naar pagina ‘ s, is er een functie moet worden aangeroepen om het expliciet maken van de pagina beschrijfbaar en verwijder het uitvoeren vlag op hetzelfde moment.

Zodra de bewerking is uitgevoerd, de machtigingen worden gewijzigd om te lezen en uitvoeren opnieuw.

De ontwikkelaar verantwoordelijk voor de uitvoering merkt op dat de invoering van de functie de effecten van de prestaties bij de uitvoering van JavaScript-code.

Volgens de benchmark-tests, Firefox verliest minder dan 1% op moderne benchmarks zoals Kraken of Octane, en minder dan 4% op oudere benchmarks zoals SunSpider. Terwijl een performance neerzetten is meetbaar, het is niet merkbaar voor gebruikers van de browser wanneer de JavaScript-code wordt uitgevoerd. (via Sören Hentzschel)