.NET 提供了許多功能來協助解決建置應用程式時的安全性問題。 原生 AOT 部署建置在這些功能之上,並提供數個可協助強化您的應用程式的功能。
無執行時程式碼產生
由於原生 AOT 會在發佈應用程式時產生所有程式碼,因此執行時不需要產生新的可執行程式碼。 這讓你的應用程式能在不允許執行時建立新可執行程式碼頁的環境中執行。 CPU 執行的所有程式碼都可以數位簽署。
限制的反射表面
使用原生 AOT 發佈應用程式時,編譯器會分析應用程式內反映的使用情況。 只有被視為反射目標的程式元素在執行時可用於反射。 在程式中嘗試執行不受限制反射的地方會使用 修剪警告來標示。 無法解析那些未設計為反射目標的程式元素。 此限制可防止惡意攻擊者控制程式的反射和執行非預期的程式碼這類的問題。 此限制包括使用 Assembly.LoadFrom 或 Reflection.Emit 的方法 - 這些都無法使用原生 AOT,而且使用時會在建置階段加上警告的標示。
控制流防護
控制流程防護是 Windows 上高度最佳化的平台安全性功能,建立目的是要對抗記憶體損毀弱點。 藉由嚴格限制應用程式可從何處執行程式碼,讓惡意探索更難透過如緩衝區溢位等弱點來執行任意程式碼。
若要在原生 AOT 應用程式上啟用控制流程防護,請在已發佈專案中設定 ControlFlowGuard 屬性。
<PropertyGroup>
<!-- Enable control flow guard -->
<ControlFlowGuard>Guard</ControlFlowGuard>
</PropertyGroup>
控制流程強制技術陰影堆疊 (.NET 9+)
控制流程強制技術 (CET) 陰影堆疊是一項電腦處理器功能。 所提供的功能可防禦返回導向程式設計 (ROP) 型的惡意程式碼攻擊。
針對 Windows 發行時,預設為啟用 CET。 若要停用 CET,請在已發佈專案中設定 CetCompat 屬性。
<PropertyGroup>
<!-- Disable Control-flow Enforcement Technology -->
<CetCompat>false</CetCompat>
</PropertyGroup>