CET wird standardmäßig unterstützt
apphost
und singlefilehost
sind jetzt als Intel CET gekennzeichnet – kompatibel (sie werden mit der /CETCOMPAT
Option kompiliert). Diese Änderung wurde vorgenommen, um die Sicherheit von .NET-Anwendungen zu verbessern. Sie legt jedoch eine Einschränkung für die freigegebenen Bibliotheken fest, mit denen .NET-Apps geladen und interopiert werden können. Bibliotheken dürfen keinen Threadkontext auf eine Position mit einem Anweisungszeiger festlegen, der nicht im Schattenstapel oder in einer Tabelle zulässiger Fortsetzungsadressen für die Ausnahmebehandlung vorhanden ist.
Vorheriges Verhalten
Zuvor konnten freigegebene Bibliotheken, die in den .NET-Prozess geladen wurden, den Threadkontext mithilfe von SetThreadContext, RtlRestoreContext/NtContinue
oder deren Ausnahmehandler auf einen beliebigen Speicherort im Prozessadressraum festlegen.
Neues Verhalten
Ab .NET 9 dürfen freigegebene Bibliotheken, die in den .NET-Prozess geladen wurden, nur den Threadkontext mithilfe von SetThreadContext, RtlRestoreContext/NtContinue
oder deren Ausnahmehandler auf Speicherorte festlegen, die eine der folgenden sind:
- Im Schattenstapel vorhanden.
- In einer Tabelle zulässiger Fortsetzungsadressen für die Ausnahmebehandlung (generiert durch die
/EHCONT
Compileroption oder dieSetProcessDynamicEHContinuationTargets
API).
Wenn Bibliotheken versuchen, einen Threadkontext an einen anderen Speicherort zu ändern, wird der Prozess beendet.
Eingeführt in Version
.NET 9 Preview 6
Typ des Breaking Changes
Diese Änderung kann sich auf die binäre Kompatibilität auswirken.
Grund für die Änderung
Durch die Aktivierung von CET wird die Sicherheit von .NET-Anwendungen verbessert, indem hardwaregezwungener Stapelschutz hinzugefügt wird, der einen robusten Schutz vor ROP-Exploits (return-oriented programming) bietet.
Empfohlene Maßnahme
Problemumgehungen:
- Sie können CET deaktivieren, indem Sie der Projektdatei Ihrer App (z. B. CSPROJ-Datei) hinzufügen
<CETCompat>false</CETCompat>
. - Verwenden Sie die Windows-Sicherheit-App oder eine Gruppenrichtlinie, um die hardwaregestützte Stapelerzwingung für die spezifische .NET-Anwendung zu deaktivieren. Weitere Informationen finden Sie unter Aktivieren des Exploit-Schutzes.
Betroffene APIs
- –