PlÀne zur StÀrkung des W^X-Schutzmechanismus in OpenBSD.

Theo De Raadt teilte seine PlĂ€ne zur VerstĂ€rkung des W^X-Schutzmechanismus (Write XOR Execute). Der Kern des Mechanismus besteht darin, dass die Speicherseiten eines Prozesses nicht gleichzeitig zum Schreiben und AusfĂŒhren zugĂ€nglich sind. So kann der Code nur nach dem Verbot des Schreibens ausgefĂŒhrt werden, wĂ€hrend das Schreiben in die Speicherseite nur nach dem Verbot der AusfĂŒhrung möglich ist. Der W^X-Mechanismus hilft, Anwendungen im Benutzerspeicher vor typischen Angriffen wie Buffer Overflows zu schĂŒtzen, inklusive Stack Overflows, und ist in OpenBSD aktiv. standardmĂ€ĂŸig verwendet.

Von Anfang an war klar, dass die Arbeit an W^X ein langer Weg sein wĂŒrde, da eine signifikante Anzahl von Anwendungen JIT verwendet. JIT-Implementierungen können in drei Kategorien unterteilt werden:

  • Die zwischen den W- und X-ZustĂ€nden wechseln, wobei sie die "Kosten" des Systemaufrufs akzeptieren. mprotect.
  • Die Pseudonyme zwischen einem W- und X-Mapping desselben Speichers erstellen.
  • Die „schmutzigste“ Variante — Modelle, die W|X-Speicher zulassen, das gleichzeitige Schreiben und AusfĂŒhren ermöglichen.

Derzeit gibt es deutlich weniger Programme, die die dritte Variante nutzen, und mehr, die die erste und zweite verwenden. Da jedoch Programme mit W|X JIT (insbesondere Chromium und Iridium) erforderlich waren, wurde die Option zur Einbindung des Dateisystems „wxallowed“ hinzugefĂŒgt. Diese ermöglicht es, den Speicher sowohl fĂŒr die AusfĂŒhrung als auch fĂŒr das Schreiben zu verwenden, vorausgesetzt, die ausfĂŒhrbare ELF-Datei ist mit dem Marker „wxneeded“ versehen und die Anwendungen selbst werden zusĂ€tzlich durch Mechanismen geschĂŒtzt. pledge und unveil Dies dient dazu, die Liste der verwendeten Systemaufrufe und der fĂŒr die Anwendung zugĂ€nglichen Teile des Dateisystems entsprechend einzuschrĂ€nken.

Zur weiteren Erschwerung der Ausnutzung von Schwachstellen in solchen Anwendungen wurde eine ErgĂ€nzung des Mechanismus vorgeschlagen. MAP_STACK, das ĂŒberprĂŒft, ob ein Systemaufruf aus einem schreibbaren Speicherbereich erfolgt. Wenn die Seite schreibbar ist, wird der Prozess zwangsweise beendet. So kann ein Angreifer Systemaufrufe nicht ausnutzen und muss versuchen, die benötigten Gadgets in der JIT-Implementierung zu finden oder sogar die wesentlich schwierigere Arbeit der Auffindung von Stubs fĂŒr Systemaufrufe direkt innerhalb der Implementierung zu leisten. zufĂ€llig verbundenes libc.

Die Prozesse von Chrome/Iridium sind bereits recht zuverlĂ€ssig durch pledge und unveil geschĂŒtzt, aber das Verbot der Verwendung von Systemaufrufen wie write(2) hat offensichtliche Vorteile, da es dem Angreifer zusĂ€tzliche Schwierigkeiten bereitet. Schwierigkeiten können jedoch auch auftreten, wenn die JIT-Implementierung native Systemaufrufe aus W|X-Speicher verwendet. Es gibt jedoch Grundlagen zur Hoffnung, dass man damit nicht konfrontiert wird, da die ABI mehrfach geĂ€ndert wurde, aber niemand je von Problemen berichtet hat.

Die Änderungen sind bereits in den regelmĂ€ĂŸigen Snapshots des OpenBSD-CURRENT-Zweigs verfĂŒgbar; alle Interessierten sind eingeladen, Tests durchzufĂŒhren.

Ein gesonderter Kommentar von Theo zu den Neuigkeiten ĂŒber den neuen Modus in Chrome/Iridium ist angebracht. JITless. Aus seiner Sicht ist dies fĂŒr einige Nutzungsszenarien akzeptabel, allerdings wahrscheinlich nicht fĂŒr alle, da in diesem Modus die CPU-Belastung offensichtlich zunehmen wird. Derzeit funktioniert Chrome im Wesentlichen, wenn 'wxallowed' fĂŒr /usr/local deaktiviert ist, obwohl Probleme mit bestimmten Erweiterungen (zum Beispiel Ghostery) auftreten können. Theo hofft dennoch, dass der JITless-Modus bald vollstĂ€ndig funktionsfĂ€hig sein wird.

Quelle: opennet.ru

Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster