보안 기능

.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) 기반 멀웨어 공격을 방어하는 기능을 제공합니다.

CET는 Windows용 게시 시 기본적으로 활성화됩니다. CET를 비활성화하려면 게시된 프로젝트에서 CetCompat 속성을 설정하세요.

<PropertyGroup>
  <!-- Disable Control-flow Enforcement Technology -->
  <CetCompat>false</CetCompat>
</PropertyGroup>