Opcja CET obsługiwana domyślnie
apphost
i singlefilehost
są teraz oznaczone jako Intel CET — zgodne (są kompilowane z opcją /CETCOMPAT
). Ta zmiana została wprowadzona w celu zwiększenia bezpieczeństwa aplikacji platformy .NET. Nakłada jednak ograniczenie dotyczące bibliotek udostępnionych, z którymi aplikacje platformy .NET mogą ładować i współdziałać. Biblioteki nie mogą ustawiać kontekstu wątku na lokalizację ze wskaźnikiem instrukcji, który nie znajduje się na stosie w tle ani w tabeli dozwolonych adresów kontynuacji na potrzeby obsługi wyjątków.
Poprzednie zachowanie
Wcześniej udostępnione biblioteki załadowane do procesu platformy .NET były w stanie ustawić kontekst wątku przy użyciu polecenia SetThreadContext, RtlRestoreContextNtContinue
/ lub ich procedur obsługi wyjątków do dowolnej lokalizacji w przestrzeni adresowej procesu.
Nowe zachowanie
Począwszy od platformy .NET 9, biblioteki udostępnione załadowane do procesu platformy .NET mogą ustawiać kontekst wątku tylko przy użyciu polecenia SetThreadContext, RtlRestoreContextNtContinue
/ lub ich procedur obsługi wyjątków do lokalizacji, które są:
- Obecny na stosie cieni.
- W tabeli dozwolonych adresów kontynuacji obsługi wyjątków (generowanych przez
/EHCONT
opcję kompilatoraSetProcessDynamicEHContinuationTargets
lub interfejs API).
Jeśli biblioteki spróbują zmienić kontekst wątku na inną lokalizację, proces zostanie zakończony.
Wprowadzona wersja
.NET 9 (wersja zapoznawcza 6)
Typ zmiany powodującej niezgodność
Ta zmiana może mieć wpływ na zgodność binarną.
Przyczyna wprowadzenia zmiany
Włączenie instrukcji CET zwiększa bezpieczeństwo aplikacji platformy .NET przez dodanie wymuszanej sprzętowo ochrony stosu, która zapewnia niezawodną ochronę przed programami wykorzystującymi ropę (programowanie zorientowane na zwrot).
Zalecana akcja
Obejścia:
- Możesz zrezygnować z cet, dodając
<CETCompat>false</CETCompat>
plik projektu aplikacji (na przykład plik csproj ). - Użyj aplikacji Zabezpieczenia Windows lub zasad grupy, aby zrezygnować z wymuszania stosu obsługiwanego przez sprzęt dla określonej aplikacji .NET. Aby uzyskać więcej informacji, zobacz Włączanie ochrony przed programami wykorzystującą luki w zabezpieczeniach.
Dotyczy interfejsów API
- Nie dotyczy