You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Совместимость с Intel CET

Начиная с .NET 9.0, создаваемые приложения по умолчанию совместимы с Intel CET. Это накладывает на приложения .NET ограничения, которые позволяет загружать только нативные библиотеки, также совместимые с этой технологией. Необходимо учитывать возникающие при этом нюансы работы с Guardant.

Суть технологии Intel CET во многом сводится к тому, что проверяются адреса вызова и возврата из функций, что приводит к невозможности запуска произвольного, потенциально злонамеренного, кода во время работы приложения. В то же время, автоматическая защита Guardant намеренно запутывает (обфусцируетпоток управления защищенного кода, чтобы усложнить его реверс-инжиниринг (взлом). Одним из средств достижения этой цели является преобразование кода, заменяющее прямые вызовы косвенными. После такого преобразования кода проверки, выполняемые в рамках технологии Intel CET, обнаруживают несоответствие между наблюдаемыми и ожидаемыми адресами вызова и возврата.

Если на машине с операционной системе Windows 11 в настройках безопасности включена Аппаратная защита стека (Kernel-mode Hardware-enforced Stack Protection), то описанное несоответствие адресов приводит к падению приложения с соответствующей ошибкой. В оснастке Просмотр событий (Event Viewer) наблюдается ошибка приложения с указанием кода 0xC0000409 (STATUS_STACK_BUFFER_OVERRUN). Среди прочего, такая ситуация может наблюдаться при попытке приложения загрузить библиотеку grdlic.dll или grdlic.dotnet.core.dll (обертку для .NET), поскольку к библиотеке grdlic.dll применен вариант автоматической защиты.

В таком случае рекомендуется при сборке приложения .NET 9.0 (или выше) вручную отключать в проекте совместимость с Intel CET. Хотя эта мера может несколько понизить общую надежность кода, при правильном использовании методик безопасного программирования это ослабление не представляется критичным.

  • No labels