默認支援 CET
apphost
和 singlefilehost
現在標示為 Intel CET— 相容 (它們會使用 /CETCOMPAT
選項進行編譯)。 這項變更是為了增強 .NET 應用程式的安全性。 不過,它會對 .NET 應用程式可以載入和 Interop 的共用連結庫施加限制。 不允許連結庫將線程內容設定為具有指令指標的位置,該位置不存在於陰影堆疊或允許的接續位址表中,以便處理例外狀況。
先前的行為
先前,載入 .NET 進程的共享連結庫可以使用 SetThreadContext、RtlRestoreContextNtContinue
/ 或其例外狀況處理程式,將線程內容設定為進程地址空間中的任何位置。
新的行為
從 .NET 9 開始,載入 .NET 進程的共享連結庫只允許使用 SetThreadContext、RtlRestoreContext/NtContinue
或其例外狀況處理程式,將線程內容設定為下列其中一個位置:
- 出現在陰影堆疊上。
- 在允許的接續地址數據表中,用於例外狀況處理(由
/EHCONT
編譯程式選項或SetProcessDynamicEHContinuationTargets
API 產生)。
如果連結庫嘗試將線程內容變更為任何其他位置,則會終止進程。
導入的版本
.NET 9 Preview 6
中斷性變更的類型
這項變更會影響二進位相容性。
變更原因
啟用 CET 可藉由新增硬體強制執行的堆疊保護來增強 .NET 應用程式的安全性,以提供針對 ROP 惡意探索的強固保護(傳回導向的程序設計)。
建議的動作
因應措施:
- 您可以新增
<CETCompat>false</CETCompat>
至應用程式的項目檔(例如 .csproj 檔案)來退出宣告 CET。 - 使用 Windows 安全性 應用程式或組策略,退出宣告特定 .NET 應用程式的硬體支援堆疊強制執行。 如需詳細資訊,請參閱 啟用惡意探索保護。
受影響的 API
- N/A