共用方式為


默認支援 CET

apphostsinglefilehost 現在標示為 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