CET stöds som standard
apphost
och singlefilehost
är nu markerade som Intel CET – kompatibla (de kompileras med /CETCOMPAT
alternativet ). Den här ändringen gjordes för att förbättra säkerheten för .NET-program. Det medför dock en begränsning för de delade bibliotek som .NET-appar kan läsa in och interop med. Bibliotek får inte ange trådkontext till en plats med en instruktionspekare som inte finns i skuggstacken eller i en tabell med tillåtna fortsättningsadresser för undantagshantering.
Tidigare beteende
Tidigare kunde delade bibliotek som lästs in i .NET-processen ange trådkontext med SetThreadContext, RtlRestoreContext/NtContinue
eller deras undantagshanterare till valfri plats i processadressutrymmet.
Nytt beteende
Från och med .NET 9 kan delade bibliotek som läses in i .NET-processen endast ange trådkontext med SetThreadContext, RtlRestoreContext/NtContinue
eller deras undantagshanterare till platser som antingen är:
- Finns på skuggstacken.
- I en tabell med tillåtna fortsättningsadresser för undantagshantering (genereras av
/EHCONT
kompilatoralternativet eller API:etSetProcessDynamicEHContinuationTargets
).
Om bibliotek försöker ändra en trådkontext till någon annan plats avslutas processen.
Version introducerad
Förhandsversion 6 av .NET 9
Typ av icke-bakåtkompatibel ändring
Den här ändringen kan påverka binär kompatibilitet.
Orsak till ändringen
Genom att aktivera CET förbättras säkerheten för .NET-program genom att lägga till maskinvarustyrt stackskydd som ger robust skydd mot ROP-sårbarheter (returorienterad programmering).
Rekommenderad åtgärd
Provisoriska lösningar:
- Du kan välja bort CET genom att lägga
<CETCompat>false</CETCompat>
till i appens projektfil (till exempel .csproj-fil ). - Använd Windows-säkerhet-appen eller en grupprincip för att välja bort den maskinvarustödda stacktillämpningen för det specifika .NET-programmet. Mer information finns i Aktivera exploateringsskydd.
Berörda API:er
- Ej tillämpligt