Theo De Raadt seine PlĂ€ne zur VerstĂ€rkung des W^X (Write XOR Execute)-Schutzmechanismus. Der Kern des Mechanismus besteht darin, dass Speicherseiten eines Prozesses nicht gleichzeitig zum Schreiben und AusfĂŒhren zugĂ€nglich sein können. Somit kann Code nur ausgefĂŒhrt werden, nachdem das Schreiben verboten wurde, und das Schreiben auf eine Speicherseite ist nur nach dem Verbot der AusfĂŒhrung möglich. Der W^X-Mechanismus hilft, Anwendungen im Benutzerspeicher vor typischen Angriffen zu schĂŒtzen, die durch PufferĂŒberlĂ€ufe, einschlieĂlich StackĂŒberlĂ€ufen, ausgefĂŒhrt werden, und er ist in OpenBSD aktiv. .
Von Beginn der Arbeiten an W^X war klar, dass dies ein langer Weg sein wĂŒrde, da es eine erhebliche Anzahl von Anwendungen gibt, die JIT verwenden. JIT-Implementierungen lassen sich in drei Kategorien unterteilen:
- Wechseln des Speichers zwischen W- und X-ZustĂ€nden, wobei die âKostenâ von Systemaufrufen in Kauf genommen werden. .
- Erstellen von Aliasen zwischen einem Paar von W- und X-Abbildungen desselben Speichers.
- Die dreckigste Variante - die ein W|X-Speichermodell erfordert, das gleichzeitig Schreiben und AusfĂŒhren zulĂ€sst.
Derzeit gibt es deutlich weniger Programme, die die dritte Variante verwenden, und mehr, die die erste und zweite verwenden. Dennoch, da es notwendig war, auch Programme mit W|X JIT (hauptsĂ€chlich Chromium und Iridum) auszufĂŒhren, wurde eine Option zum EinhĂ€ngen des Dateisystems âwxallowedâ hinzugefĂŒgt, die es ermöglichte, Speicher gleichzeitig fĂŒr Schreiben und AusfĂŒhren zu nutzen, wenn die ausfĂŒhrbare ELF-Datei mit dem Marker âwxneededâ gekennzeichnet ist, wĂ€hrend die Anwendungen selbst durch Mechanismen zusĂ€tzlich geschĂŒtzt wurden. und um die Liste der verwendeten Systemaufrufe und die Teile des Dateisystems, die fĂŒr die Anwendung verfĂŒgbar sind, entsprechend einzuschrĂ€nken.
Um das Ausnutzen von Schwachstellen in solchen Anwendungen weiter zu erschweren, wurde eine ErgĂ€nzung des Mechanismus vorgeschlagen , die ĂŒberprĂŒft, ob der Systemaufruf aus einer beschreibbaren Speicherseite erfolgt. Wenn die Seite beschreibbar ist, wird der Prozess zwangsweise beendet. Somit kann ein Angreifer keine Systemaufrufe nutzen und wird gezwungen sein, die benötigten Gadgets in der JIT-Implementierung zu finden oder sogar die schwierige Arbeit der Auffindung von Stub-Systemaufrufen direkt innerhalb von .
Die Prozesse von Chrome/Iridium sind bereits durch pledge und unveil ausreichend geschĂŒtzt, aber das Verhindern der Nutzung eines systematischen Aufrufs wie write(2) hat eindeutig einige Vorteile, da es dem Angreifer zusĂ€tzliche Schwierigkeiten bereitet. Dennoch können auch Schwierigkeiten auftreten, wenn die JIT-Implementierung native Systemaufrufe aus W|X-Speicher verwendet. Es besteht jedoch Grund zur Hoffnung, dass es nicht dazu kommen wird, da sich die ABI mehrfach geĂ€ndert hat, aber niemand jemals von Problemen berichtet hat.
Die Ănderungen sind bereits in den aktuellen Snapshot-Versionen des OpenBSD-Currents verfĂŒgbar, und alle Interessierten sind eingeladen, diese zu testen.
Besondere ErwĂ€hnung von Theo erhielt die verwandte Nachricht ĂŒber die EinfĂŒhrung des Modus in Chrome/Iridium . In seinen Augen ist dies fĂŒr einige Anwendungsmodelle akzeptabel, wahrscheinlich jedoch nicht fĂŒr alle, da die Belastung der CPU in diesem Modus offensichtlich zunehmen wird. Zurzeit wird Chrome hauptsĂ€chlich funktionieren, wenn "wxallowed" fĂŒr /usr/local deaktiviert ist, obwohl Probleme mit einigen Erweiterungen (beispielsweise ghostery) wahrscheinlich sind. Wie dem auch sei, Theo hofft, dass der vollstĂ€ndige Betrieb im JITless-Modus bald in einen voll funktionsfĂ€higen Zustand gebracht wird.
Quelle: opennet.ru
