Udostępnij za pośrednictwem


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ę kompilatora SetProcessDynamicEHContinuationTargets 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).

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