Características de seguridad

.NET ofrece muchos servicios para ayudar a abordar los problemas de seguridad al compilar aplicaciones. La implementación nativa de AOT se basa en estos servicios y proporciona varios que pueden ayudar a proteger las aplicaciones.

Sin generación de código en tiempo de ejecución

Dado que AOT nativo genera todo el código en el momento de publicar la aplicación, no es necesario generar ningún código ejecutable nuevo en tiempo de ejecución. Esto permite ejecutar las aplicaciones en entornos que no permiten la creación de nuevas páginas de códigos ejecutables en tiempo de ejecución. Todo el código que ejecuta la CPU se puede firmar digitalmente.

Superficie de reflejo restringida

Cuando las aplicaciones se publican con AOT nativo, el compilador analiza el uso del reflejo dentro de la aplicación. Solo los elementos del programa que se consideraron como objetivos de reflexión están disponibles para uso en tiempo de ejecución. Las partes del programa que intentan realizar una reflexión sin restricciones se marcan utilizando advertencias de recorte. No se pueden reflejar elementos del programa que no estaban destinados a ser objeto de reflejo. Esta restricción puede evitar una clase de problemas en los que un actor malintencionado obtiene el control de lo que el programa refleja e invoca código no deseado. Esta restricción incluye enfoques que utilizan Assembly.LoadFrom o Reflection.Emit; ninguno de estos funciona con AOT nativo y su uso se señala con una advertencia durante el tiempo de compilación.

Protección de flujo de control

Protección de flujo de control es una característica de seguridad de plataforma muy optimizada en Windows que se creó para luchar contra vulnerabilidades de corrupción de memoria. Al imponer restricciones estrictas sobre el lugar desde el que una aplicación puede ejecutar código, hace mucho más difícil que las vulnerabilidades ejecuten código arbitrario a través de vulnerabilidades como los desbordamientos de búfer.

Para habilitar la protección de flujo de control en la aplicación AOT nativa, establezca la propiedad ControlFlowGuard en el proyecto publicado.

<PropertyGroup>
  <!-- Enable control flow guard -->
  <ControlFlowGuard>Guard</ControlFlowGuard>
</PropertyGroup>

Pila de sombras de la tecnología de cumplimiento de flujo de control (.NET 9+)

La pila sombra de la Tecnología de Ejecución de Control de Flujo (CET) es una característica de los procesadores de computadora. Proporciona funcionalidades para defenderse contra ataques de malware basados en programación orientada a retorno (ROP).

CET está habilitado de forma predeterminada al publicar para Windows. Para deshabilitar CET, establezca la propiedad CetCompat en el proyecto publicado.

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