Функции безопасности

.NET предлагает множество средств для решения проблем безопасности при создании приложений. Собственное развертывание AOT строится на основе этих объектов и предоставляет несколько средств, которые помогут защитить приложения.

Без создания кода среды выполнения

Так как собственный AOT создает весь код во время публикации приложения, новый исполняемый код не должен быть создан во время выполнения. Это позволяет запускать приложения в средах, которые запрещают создание новых исполняемых кодовых страниц во время выполнения. Весь код, который выполняется ЦП, может быть цифрово подписан.

Ограниченная поверхность отражения

Когда приложения публикуются с помощью собственного AOT, компилятор анализирует использование отражения в приложении. Только элементы программы, которые были признаны целевыми объектами отражения, доступны для отражения во время выполнения. Места в программе, которые пытаются выполнить неограниченное отражение, помечаются с помощью предупреждений о тримминге. Программные элементы, которые не предназначены для целей отражения, не могут быть отражены. Это ограничение может препятствовать классу проблем, когда вредоносный субъект получает контроль над тем, что программа отражает и вызывает непреднамеренный код. Это ограничение касается подходов, которые используют Assembly.LoadFrom или Reflection.Emit: ни тот, ни другой не работают с собственным AOT, и их использование помечается предупреждением во время сборки.

Защита потока управления

Control Flow Guard — это высокооптимизируемая функция безопасности платформы в Windows, которая была создана для борьбы с уязвимостями повреждения памяти. При размещении жестких ограничений на то, где приложение может выполнять код, это делает его гораздо сложнее для эксплойтов выполнять произвольный код через уязвимости, такие как переполнение буфера.

Чтобы включить Control Flow Guard в собственном AOT-приложении, установите свойство ControlFlowGuard в опубликованном проекте.

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

Технология контроля потока управления Shadow Stack (.NET 9+)

Технология контроля потока выполнения (CET) и теневая стековая память являются функциями процессора компьютера. Она предоставляет возможности защиты от атак вредоносных программ на основе возвращаемых программ (ROP).

CET включен по умолчанию при публикации для Windows. Чтобы отключить CET, задайте CetCompat свойство в опубликованном проекте.

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