Справочные материалы по защите от эксплойтов
Область применения:
- Microsoft Defender для конечной точки (план 1)
- Microsoft Defender для конечной точки (план 2)
- Microsoft Defender XDR
Хотите попробовать Microsoft Defender для конечной точки? Зарегистрироваться для бесплатной пробной версии.
Защита от эксплойтов обеспечивает расширенную защиту приложений, которые администраторы предприятия и ИТ-специалисты могут применять после компиляции и распространения программного обеспечения разработчиком.
Эта статья поможет вам понять, как работает защита от эксплойтов как на уровне политики, так и на уровне отдельных мер по устранению рисков, помогая успешно создавать и применять политики защиты от эксплойтов.
Как применяются операции по устранению рисков
Защита от эксплойтов применяется для каждого приложения.
Операции по устранению рисков настраиваются с помощью записи реестра для каждой программы, для которой настроены средства защиты. Эти параметры хранятся в записи реестра MitigationOptions для каждой программы (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\*ImageFileName*\MitigationOptions
). Они вступают в силу при перезапуске программы и остаются в силе до тех пор, пока вы не измените их и снова не перезапустите программу.
Важно!
Параметры выполнения файла изображения позволяют только указать имя файла или путь, а не номер версии, архитектуру или любой другой способ отличия. Проявляйте осторожность, применяя меры к приложениям с уникальными именами или путями. Применяйте их только на устройствах, на которых вы протестировали эту версию и эту архитектуру приложения.
При настройке защиты от эксплойтов с помощью XML-файла конфигурации с помощью PowerShell, групповая политика или MDM при обработке этого XML-файла конфигурации настраиваются отдельные параметры реестра.
Сброс защиты от эксплойтов
Важно!
Если политика распространения XML-файла больше не применяется, параметры, развернутые этим XML-файлом конфигурации, не будут автоматически удалены.
Чтобы удалить параметры защиты от эксплойтов, экспортируйте конфигурацию XML с чистого Windows 10 или Windows 11 устройства и разверните новый XML-файл. Кроме того, корпорация Майкрософт предоставляет XML-файл в составе Безопасность Windows базовых показателей для сброса параметров защиты от эксплойтов.
Чтобы сбросить параметры защиты от эксплойтов с помощью PowerShell, используйте следующую команду:
Set-ProcessMitigation -PolicyFilePath EP-reset.xml
Ниже приводится EP-reset.xml, распространяемый вместе с базовыми показателями безопасности Windows:
<?xml version="1.0" encoding="UTF-8"?>
<MitigationPolicy>
<AppConfig Executable="ONEDRIVE.EXE">
<DEP OverrideDEP="false" />
<ASLR OverrideRelocateImages="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
<ImageLoad OverrideBlockRemoteImages="false" />
</AppConfig>
<AppConfig Executable="firefox.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
</AppConfig>
<AppConfig Executable="fltldr.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
<ImageLoad OverrideBlockRemoteImages="false" />
<ChildProcess OverrideChildProcess="false" />
</AppConfig>
<AppConfig Executable="GROOVE.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
<ImageLoad OverrideBlockRemoteImages="false" />
<ChildProcess OverrideChildProcess="false" />
</AppConfig>
<AppConfig Executable="Acrobat.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="AcroRd32.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="chrome.exe">
<DEP OverrideDEP="false" />
</AppConfig>
<AppConfig Executable="EXCEL.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="iexplore.exe">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="INFOPATH.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="java.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="javaw.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="javaws.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="LYNC.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="MSACCESS.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="MSPUB.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="OIS.EXE">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="OUTLOOK.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="plugin-container.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="POWERPNT.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="PPTVIEW.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="VISIO.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="VPREVIEW.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="WINWORD.EXE">
<DEP OverrideDEP="false" />
<ASLR ForceRelocateImages="true" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="wmplayer.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
<AppConfig Executable="wordpad.exe">
<DEP OverrideDEP="false" />
<Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
</AppConfig>
</MitigationPolicy>
Справочные материалы по мерам устранения рисков
В следующих разделах подробно рассматриваются меры защиты, предоставляемые каждой операцией по устранению рисков, связанных с эксплойтами, вопросы совместимости для мер защиты и доступные параметры конфигурации.
Произвольный Code Guard
Описание
Произвольный Code Guard помогает защититься от злоумышленников, загружающих в память свой код с помощью уязвимости безопасности памяти и создающих возможность выполнить этот код.
Произвольный code guard защищает приложение от выполнения динамически создаваемого кода (кода, который не загружается, например, из самого exe-файла или библиотеки DLL). Произвольный Code Guard способен предотвратить пометку памяти как исполняемой. Когда приложение пытается выделить память, мы проверяем флаги защиты. (Память может быть выделена с помощью флагов защиты чтения, записи и/или выполнения.) Если при выделении предпринимается попытка включить флаг защиты выполнения, выделение памяти не выполняется и возвращает код ошибки (STATUS_DYNAMIC_CODE_BLOCKED). Аналогичным образом, если приложение пытается изменить флаги защиты памяти, которая уже выделена и включает флаг защиты выполнения, изменение разрешений не выполняется и возвращает код ошибки (STATUS_DYNAMIC_CODE_BLOCKED).
Не устанавливая флаг выполнения, функция предотвращения выполнения данных в Windows 10 и Windows 11 может защититься от установки указателя инструкции для этой памяти и от запуска этого кода.
Совместимость
Произвольный Code Guard запрещает использовать какую-либо память в качестве исполняемой, что создает проблему совместимости с такими инструментами, как компиляторы JIT. Большинство современных браузеров, например, компилируют JavaScript в машинный код для оптимизации производительности. Чтобы обеспечить эту защиту, их необходимо перепроектировать, чтобы переместить JIT-компиляцию за пределы защищенного процесса. Другие приложения, дизайн которых динамически создает код из скриптов или других промежуточных языков, также несовместимы с этой мерой.
Параметры конфигурации
Разрешить отказ от потоков. Вы можете настроить меры защиты таким образом, чтобы разрешить отдельному потоку отказаться от них. Разработчик должен написать приложение с пониманием этой меры и вызвать API SetThreadInformation с параметром ThreadInformation, для параметра ThreadDynamicCodePolicy, чтобы иметь возможность выполнять динамический код в этом потоке.
Только аудит. Вы можете включить эту меру защиты в режиме аудита, чтобы оценить ее потенциальное влияние на совместимость с приложением. Затем события аудита можно будет просмотреть в средстве просмотра событий или с помощью функции расширенной охоты в Defender для конечной точки.
Блокировать изображений с низкой целостностью
Описание
Блокировать образы с низкой целостностью не позволяют приложению загружать файлы, которые не являются доверенными, как правило, из-за того, что они были скачаны из Интернета из изолированного браузера.
Это решение блокирует загрузку изображений, если образ имеет контроль доступа entry (ACE), который предоставляет доступ к процессам с низким уровнем IL и не имеет ACE с меткой доверия. Он реализуется диспетчером памяти, который блокирует сопоставление файла с памятью. Если приложение пытается сопоставить изображение с низкой целостностью, оно вызывает ошибку STATUS_ACCESS_DENIED. Подробные сведения о том, как работают уровни целостности, см. в разделе Обязательное управление целостностью.
Совместимость
Блокировать образы с низкой целостностью не позволяют приложению загружать файлы, скачанные из Интернета. Если рабочий процесс приложения требует загрузки загруженных образов, необходимо убедиться, что они скачиваются из процесса с более высоким уровнем доверия или явно перемаркированы для применения этой меры.
Параметры конфигурации
Только аудит. Вы можете включить эту меру защиты в режиме аудита, чтобы оценить ее потенциальное влияние на совместимость с приложением. Затем события аудита можно будет просмотреть в средстве просмотра событий или с помощью функции расширенной охоты в Microsoft Defender для конечной точки.
Блокировать удаленные изображения
Описание
Блокировка удаленных изображений помогает предотвратить загрузку в приложение файлов, которые находятся на удаленном устройстве, например, на общем ресурсе UNC. Блокировка удаленных изображений помогает защититься от загрузки в память двоичных файлов, которые находятся на внешнем устройстве, контролируемом злоумышленником.
Это решение блокирует загрузку изображений, если образ установлен на удаленном устройстве. Он реализуется диспетчером памяти, который блокирует сопоставление файла с памятью. Если приложение пытается сопоставить удаленный файл, оно вызывает ошибку STATUS_ACCESS_DENIED.
Совместимость
Блокировка удаленных образов запрещает приложению загружать образы с удаленных устройств. Если приложение загружает файлы или подключаемые модули с удаленных устройств, оно будет несовместимо с этой мерой защиты.
Параметры конфигурации
Только аудит. Вы можете включить эту меру защиты в режиме аудита, чтобы оценить ее потенциальное влияние на совместимость с приложением. Затем события аудита можно будет просмотреть в средстве просмотра событий или с помощью функции расширенной охоты в Microsoft Defender для конечной точки.
Блокировка ненадежные шрифты
Описание
Блокировка ненадежных шрифтов снижает риск возникновения недостатков при разборе шрифтов, позволяющих злоумышленнику запускать код на устройстве. Только шрифты, установленные в каталоге windows\fonts, будут загружаться для обработки с помощью GDI.
Эта мера защиты реализована в модуле GDI, который проверяет расположение файла. Если файл отсутствует в каталоге системных шрифтов, шрифт не будет загружен для синтаксического анализа, и этот вызов завершится ошибкой.
Эта мера защиты является дополнением к решению, встроенному в Windows 10 1607 и более поздних версий и в Windows 11, которое перемещает разбор шрифтов из ядра и в приложение-контейнер в пользовательском режиме. В результате любой эксплойт, основанный на разборе шрифтов, происходит в изолированном контексте, что значительно снижает риск. Подробные сведения об этой мере защиты см. в блоге о том, как укрепить Windows 10 с помощью сокращения уязвимостей нулевого дня.
Совместимость
Чаще всего шрифты за пределами каталога системных шрифтов используются с веб-шрифтами. Современные браузеры, такие как Microsoft Edge, используют DirectWrite вместо GDI и не затрагиваются. Однако на устаревшие браузеры, такие как Internet Explorer 11 (и режим IE в новом Microsoft Edge), могут влиять, в частности, такие приложения как Office 365, которые используют глифы шрифтов для отображения пользовательского интерфейса.
Параметры конфигурации
Только аудит. Вы можете включить эту меру защиты в режиме аудита, чтобы оценить ее потенциальное влияние на совместимость с приложением. Затем события аудита можно будет просмотреть в средстве просмотра событий или с помощью функции расширенной охоты в Microsoft Defender для конечной точки.
Защита целостности кода
Описание
Обеспечение целостности кода гарантирует, что все двоичные файлы, загруженные в процесс, имеют цифровую подпись корпорации Майкрософт. Защита целостности кода включает сигнатуры WHQL (Лаборатории качества оборудования Windows), которые позволяют запускать в процессе драйверы, утвержденные WHQL.
Эта мера защиты реализуется диспетчером памяти, который блокирует возможность сопоставить бинарный файл в памяти. При попытке загрузить двоичный файл, который не подписан корпорацией Майкрософт, подсистема памяти возвращает ошибку STATUS_INVALID_IMAGE_HASH. Блокирование на уровне диспетчера памяти предотвращает и загрузку двоичных файлов, выполняемую процессом, и внедрение двоичных файлов в процесс.
Совместимость
Эта мера специально блокирует любые двоичные файлы, которые не подписаны корпорацией Майкрософт. Таким образом, оно несовместимо с большинством программного обеспечения сторонних разработчиков, если оно не распространяется (и не подписывается) Microsoft Store, и выбран параметр разрешить загрузку изображений, подписанных Microsoft Store.
Параметры конфигурации
Кроме того, разрешите загрузку изображений, подписанных Microsoft Store . Приложения, распространяемые в Microsoft Store, имеют цифровую подпись в Microsoft Store. Добавление этой конфигурации позволяет загружать двоичные файлы, которые проходят сертификацию магазина, приложением.
Только аудит. Вы можете включить эту меру защиты в режиме аудита, чтобы оценить ее потенциальное влияние на совместимость с приложением. Затем события аудита можно будет просмотреть в средстве просмотра событий или с помощью функции расширенной охоты в Microsoft Defender для конечной точки.
Защита потока управления (CFG)
Описание
Защита потока управления (CFG) снижает риск использования злоумышленниками уязвимостей, связанных с повреждениями памяти, за счет защиты непрямых вызовов функций. Например, злоумышленник может использовать уязвимость к переполнению буфера для перезаписи памяти, содержащей указатель функции, и заменить этот указатель функции указателем на исполняемый код по своему выбору (который также может быть внедрен в программу).
Эта мера защиты обеспечивается за счет внедрения еще одной проверки на этапе компиляции. Перед каждым непрямым вызовом функции добавляются другие инструкции, которые проверяют, что целевой объект является допустимым целевым объектом вызова перед вызовом. Если целевой объект не является допустимым целевым объектом вызова, приложение завершается. Таким образом, только приложения, скомпилированные с поддержкой CFG, могут воспользоваться этой мерой защиты.
Проверка допустимости целевого объекта предоставляется ядром Windows. При загрузке исполняемых файлов метаданные для непрямых целей вызова извлекаются во время загрузки и помечаются как допустимые целевые объекты вызова. Кроме того, если память выделена и помечена как исполняемая (например, для сгенерированного кода), эти расположения памяти также помечаются как допустимые целевые объекты вызова для поддержки таких механизмов, как компиляция JIT.
Совместимость
То, что приложения должны быть скомпилированы для поддержки функции CFG, косвенно указывает на их совместимость с ней. Таким образом, большинство приложений должны работать с включенной мерой защиты. Так как эти проверки компилируются в двоичный файл, конфигурацию можно применить только для отключения проверок в ядре Windows. Иными словами, устранение рисков по умолчанию включено, но вы можете настроить ядро Windows так, чтобы оно всегда возвращало значение "да", если позже вы обнаружите, что при тестировании разработчик приложений не обнаружил проблемы совместимости, что должно быть редким явлением.
Параметры конфигурации
Использовать строгий CFG. В строгом режиме все загружаемые в процесс двоичные файлы должны быть скомпилированы для защиты потока управления (или не иметь исполняемого кода, например, DLL ресурсов), чтобы быть загруженными.
Примечание.
Защита потока управления не имеет режима аудита. Бинарные файлы компилируются, когда данная мера защиты включена.
Предотвращение выполнения данных (DEP)
Описание
Предотвращение выполнения данных (DEP) предотвращает выполнение памяти, которая не была явно выделена в качестве исполняемого файла. DEP помогает защититься от злоумышленника, который внедряет вредоносный код в процесс, например, через переполнение буфера, а затем выполняет этот код.
При попытке задать указатель инструкции на адрес памяти, не помеченный как исполняемый, обработчик выдает исключение (нарушение общей защиты), что приводит к сбою приложения.
Совместимость
Для всех исполняемых файлов x64, ARM и ARM-64 по умолчанию включено DEP, и его невозможно отключить. Так как приложение не выполняется без DEP, предполагается совместимость.
Для всех 32-битных бинарных файлов х86 функция DEP включена по умолчанию, но ее можно отключать для конкретных процессов. Некоторые старые приложения, как правило, разработанные до Windows XP с пакетом обновления 2 (SP2), могут быть несовместимы с DEP. Такие приложения обычно создают код динамически (например, компилируя JIT) или связываются с более старыми библиотеками (такими как более старые версии ATL), которые динамически создают код.
Параметры конфигурации
Включить эмуляцию преобразователя ATL - Этот параметр конфигурации отключает эмуляцию преобразователя ATL. ATL, библиотека шаблонов ActiveX, призвана быть максимально компактной и быстрой. Для уменьшения двоичного размера она использует метод преобразования. Преобразование обычно используется для взаимодействия между 32- и 16-битными приложениями, но здесь нет 16-битных компонентов ATL. Чтобы оптимизировать размер двоичного файла, ATL сохраняет код компьютера в памяти, которая не выровнена по словам (создание меньшего двоичного файла), а затем вызывает этот код напрямую. Компоненты ATL, скомпилированные с помощью Visual Studio 7.1 или более ранней версии (Visual Studio 2003), не выделяют эту память как исполняемую . Эмуляция thunk устраняет эту проблему совместимости. Приложениям с двоичной моделью расширения (например, Internet Explorer 11) часто требуется включить эмуляцию преобразователя ATL.
Отключить точки расширения
Описание
Эта мера защиты отключает различные точки расширения для приложения, которые могут использоваться для обеспечения устойчивости или повышения привилегий вредоносного содержимого.
К ним относятся:
- Библиотеки DLL AppInit . При каждом запуске процесса система загружает указанную библиотеку DLL в контекст только что запущенного процесса перед вызовом его функции точки входа. Подробные сведения о DLL AppInit можно найти здесь. При применении этой защиты библиотеки DLL AppInit не загружаются. Начиная с Windows 7, DLL AppInit должны иметь цифровую подпись, как описано здесь. Кроме того, начиная с Windows 8, библиотеки DLL AppInit не загружаются, если включена функция SecureBoot, как описано здесь.
- Устаревшие IME — редактор метода ввода (IME) позволяет пользователю вводить текст на языке, который имеет больше символов, чем может быть представлено на клавиатуре. Третьи стороны могут создавать IME. Вредоносный IME может получить учетные данные или другую конфиденциальную информацию из этой записи входных данных. Некоторые IMEs, называемые устаревшими IMEs, работают только в классических приложениях Windows, но не в приложениях UWP. Это также предотвращает загрузку этого устаревшего IME в указанное классическое приложение Windows.
- Перехватчики событий Windows — приложение может вызвать API SetWinEventHook, чтобы зарегистрировать интерес к происходящему событию. Указана DLL, которая может быть введена в процесс. Эта мера защиты побуждает внедрить перехватчика в процесс регистрации, а не запускать его внутри процесса с помощью внедряемой DLL.
Совместимость
Большинство из этих точек расширения используются относительно редко, поэтому влияние на совместимость обычно небольшое, особенно на уровне отдельных приложений. Одно из соображений заключается в том, если пользователи используют сторонние устаревшие imEs, которые не будут работать с защищенным приложением.
Параметры конфигурации
Для этой меры не существует параметров конфигурации.
Примечание.
Отключение точек расширения не имеет режима аудита.
Отключить системные вызовы Win32k
Описание
Win32k.sys предоставляет широкие возможности для атаки злоумышленника. Как компонент режима ядра он часто предназначен в качестве escape-вектора для изолированных приложений. Эта мера позволяет предотвратить вызовы win32k.sys, блокируя преобразование потока в поток GUI, который затем предоставляет доступ для вызова функций Win32k. Поток не является графическим пользовательским интерфейсом (GUI) на момент его создания, но преобразуется при первом вызове win32k.sys или с помощью вызова API в IsGuiThread.
Совместимость
Эта мера защиты предназначена для выделенных процессов, не относящихся к пользовательскому интерфейсу. Например, многие современные браузеры используют изоляцию процессов и включают процессы, не относящиеся к пользовательскому интерфейсу. Эта мера защиты будет влиять на любое приложение, которое отображает GUI с помощью одного процесса.
Параметры конфигурации
Только аудит. Вы можете включить эту меру защиты в режиме аудита, чтобы оценить ее потенциальное влияние на совместимость с приложением. Затем события аудита можно будет просмотреть в средстве просмотра событий или с помощью функции расширенной охоты в Microsoft Defender для конечной точки.
Не разрешать дочерние процессы
Описание
Эта мера защиты не дает приложению создавать новые дочерние приложения. Распространенный метод, используемый злоумышленниками, — инициировать доверенный процесс на устройстве с вредоносным вводом ( так называемые атаки на \"основе подножного корма\"), который часто требует запуска другого приложения на устройстве. Отсутствие законных причин, по которым приложение может запустить дочерний процесс, устраняет потенциальный вектор атаки. Эта мера защиты применяется путем установки свойства в маркере процесса, которое блокирует создание маркера для дочернего процесса с сообщением об ошибке STATUS_CHILD_PROCESS_BLOCKED.
Совместимость
Если приложение запускает дочерние приложения по какой-либо причине, например по поддержке гиперссылок, которые запускают браузер или внешний браузер, или запускают другие служебные программы на компьютере, эта функция будет нарушена с применением этой меры.
Параметры конфигурации
Только аудит. Вы можете включить эту меру защиты в режиме аудита, чтобы оценить ее потенциальное влияние на совместимость с приложением. Затем события аудита можно будет просмотреть в средстве просмотра событий или с помощью функции расширенной охоты в Microsoft Defender для конечной точки.
Фильтрация адресов экспорта
Описание
Фильтрация адресов экспорта (EAF) снижает риск поиска вредоносным кодом модулей, содержащих полезные API для атаки, в таблице адресов экспорта всех загруженных модулей. Это распространенный прием, используемый шелл-кодом. Чтобы снизить риск такой атаки, эта мера защиты обеспечивает безопасность трех наиболее подверженных атакам модулей:
- ntdll.dll
- kernelbase.dll
- kernel32.dll
Эта мера защиты ограждает страницу памяти в [каталоге экспорта, который указывает на таблицу адресов экспорта. На этой странице памяти применяется PAGE_GUARD защита. Когда кто-то пытается получить доступ к этой памяти, он создает STATUS_GUARD_PAGE_VIOLATION. Устранение рисков обрабатывает это исключение, и если инструкция доступа не проходит проверку, процесс завершается.
Совместимость
Эта мера защиты в первую очередь связана с такими приложениями, как отладчики, изолированные приложения, приложения, использующие DRM, или приложения, которые применяют технологию отладки.
Параметры конфигурации
Проверка доступа для модулей, которые подвержены рискам со стороны эксплойтов. Этот параметр, также известный как EAF+, добавляет средства защиты для других часто атакуемых модулей:
mshtml.dll
flash*.ocx
jscript*.ocx
vbscript.dll
vgx.dll
mozjs.dll
xul.dll
acrord32.dll
acrofx32.dll
acroform.api
Кроме того, за счет включения EAF+, эта мера добавляет защиту PAGE_GUARD на страницу, содержащую заголовок \"MZ\", первые два байта заголовка DOS в PE-файле, что является еще одним аспектом известного содержимого памяти, который шелл-код может искать для определения потенциально интересных модулей в памяти.
Только аудит. Вы можете включить эту меру защиты в режиме аудита, чтобы оценить ее потенциальное влияние на совместимость с приложением. Затем события аудита можно будет просмотреть в средстве просмотра событий или с помощью функции расширенной охоты в Microsoft Defender для конечной точки.
Принудительный случайный выбор изображений (обязательный ASLR)
Описание
Случайный выбор макета адресного пространства (ASLR) снижает риск использования злоумышленником своих знаний о структуре памяти системы для выполнения кода, который уже присутствует в памяти процесса и уже помечен как исполняемый. Это может снизить риск использования злоумышленником таких методов, как атаки с возвратом в библиотеку, где злоумышленник задает контекст, а затем изменяет обратный адрес для выполнения существующего кода с контекстом, который служит целям злоумышленника.
Обязательная функция ASLR принудительно перемещает все DLL в процессе. Разработчик может включить ASLR с помощью параметра связи /DYNAMICBASE, и такая мера защиты будет иметь аналогичный эффект.
Когда диспетчер памяти сопоставляет образ с процессом, обязательный ASLR принудительно перебазирует библиотеки DLL и exEs, которые не согласились на ASLR. Обратите внимание, что это перемещение не имеет энтропии и поэтому может быть помещено в предсказуемое расположение в памяти. Для перемещенных и случайных расположений бинарных файлов эта мера защиты должна использоваться вместе со случайными выделениями памяти (ASLR снизу вверх).
Совместимость
Это влияние ASLR на совместимость обычно ограничивается старыми приложениями, созданными с помощью компиляторов, которые сделали предположения о базовом адресе двоичного файла или исключили данные базового перемещения. Это может привести к непредсказуемым ошибкам, так как поток выполнения попытается перейти к ожидаемому, а не фактическому расположению в памяти.
Параметры конфигурации
Не разрешать упрощенные изображения. Этот параметр блокирует загрузку изображений, лишенных сведений о перемещениях. Формат файла Windows PE содержит абсолютные адреса, а компилятор также создает [базовую таблицу перемещения, которую загрузчик может использовать для поиска всех относительных ссылок на память и их смещения, чтобы их можно было обновить, если двоичный файл не загружается по предпочтительному базовому адресу. Некоторые старые приложения удаляют эту информацию в рабочих сборках, поэтому эти двоичные файлы нельзя перебазировать. Эта мера защиты блокирует загрузку подобных двоичных файлов (вместо того, чтобы разрешить их загрузку по предпочтительному базовому адресу).
Примечание.
Принудительный случайный выбор изображений (обязательный ASLR) не имеет режима аудита.
Защита аппаратного стека
Описание
Аппаратная защита стека обеспечивает надежную защиту от эксплойтов ROP, так как она ведет запись о предполагаемом потоке выполнения программы. Чтобы обеспечить плавное внедрение экосистемы и совместимость приложений, Windows предлагает эту защиту в качестве модели согласия, чтобы разработчики могли получить эту защиту в вашем собственном темпе.
Совместимость
Аппаратная защита стека работает только на наборах микросхем с поддержкой аппаратных теневых стеков, технологии intel Control-flow Enforcement Technology (CET) или стеках тени AMD.
Параметры конфигурации
Только аудит. Вы можете включить эту меру защиты в режиме аудита, чтобы оценить ее потенциальное влияние на совместимость с приложением. Затем события аудита можно будет просмотреть в средстве просмотра событий или с помощью функции расширенной охоты в Defender для конечной точки.
Принудительное применение для всех модулей вместо совместимых модулей . Вы можете включить эту меру для принудительного применения для всех модулей, а не совместимых модулей.
Фильтрация адресов импорта (IAF)
Описание
Мера фильтрации адресов импорта (IAF) помогает снизить риск изменения злоумышленником потока управления приложением путем изменения таблицы адресов импорта (IAT) для осуществления перенаправления на произвольный код по выбору злоумышленника при обращении к этой функции. Злоумышленник может использовать этот подход для захвата управления, перехвата, проверки и потенциальной блокировки вызовов конфиденциальных API.
На страницах памяти для всех защищенных API применяется PAGE_GUARD защита. Когда кто-то пытается получить доступ к этой памяти, он создает STATUS_GUARD_PAGE_VIOLATION. Устранение рисков обрабатывает это исключение, и если инструкция доступа не проходит проверку, процесс завершается.
Эта мера защиты обеспечивает безопасность следующих API Windows:
GetProcAddress
GetProcAddressForCaller
LoadLibraryA
LoadLibraryExA
LoadLibraryW
LoadLibraryExW
LdrGetProcedureAddress
LdrGetProcedureAddressEx
LdrGetProcedureAddressForCaller
LdrLoadDll
VirtualProtect
VirtualProtectEx
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
NtProtectVirtualMemory
CreateProcessA
CreateProcessW
WinExec
CreateProcessAsUserA
CreateProcessAsUserW
GetModuleHandleA
GetModuleHandleW
RtlDecodePointer
DecodePointer
Совместимость
Эта мера может обнаружить допустимые приложения, выполняющие перехват API, и привести к сбою некоторых приложений. Например, это применимо для драйверов совместимости программ безопасности и приложений.
Параметры конфигурации
Только аудит. Вы можете включить эту меру защиты в режиме аудита, чтобы оценить ее потенциальное влияние на совместимость с приложением. Затем события аудита можно будет просмотреть в средстве просмотра событий или с помощью функции расширенной охоты в Microsoft Defender для конечной точки.
Случайное распределение выделения памяти (ASLR снизу вверх).
Описание
Случайное распределение выделения памяти (ASLR снизу вверх) добавляет энтропию к перемещениям, делая их расположение случайным и, следовательно, менее предсказуемым. Для данной меры необходимо активировать обязательную функцию ASLR.
Размер 32-битного адресного пространства налагает практические ограничения на добавляемую энтропию, поэтому в 64-битных приложениях злоумышленнику будет сложнее угадать расположение в памяти.
Совместимость
Большинство приложений, совместимых с обязательной ASLR (перемещение), также совместимы с другой энтропией ASLR снизу вверх. В некоторых приложениях могут возникать проблемы с усечением указателя, если они сохраняют локальные указатели в 32-разрядных переменных (ожидается, что базовый адрес меньше 4 ГБ) и, следовательно, будут несовместимы с параметром высокой энтропии (который можно отключить).
Параметры конфигурации
Не использовать высокую энтропию. Этот параметр отключает использование ASLR с высокой энтропией, которая добавляет 24 бита энтропии (1 ТБ дисперсии) в выделение снизу вверх для 64-битных приложений.
Примечание.
Случайное распределение выделения памяти (ASLR снизу вверх) не имеет режима аудита.
Имитация выполнения (SimExec)
Описание
Имитация выполнения (SimExec) — это мера защиты, применимая только к 32-битным приложениям. Это помогает убедиться, что вызовы конфиденциальных API возвращаются к допустимым вызывающим функциям. Данная мера перехватывает вызовы в конфиденциальные API, а затем имитирует выполнение этих API, проходя по закодированным инструкциям языка сборки, чтобы найти инструкцию RET, которая должна вернуться к вызывающему абоненту. Затем она проверяет эту функцию и идет в обратном направлении в памяти, чтобы найти указанную ранее инструкцию CALL и определить, совпадают ли функции и инструкции CALL и не была ли перехвачена инструкция RET.
Эта мера защиты перехватывает следующие API:
LoadLibraryA
LoadLibraryW
LoadLibraryExA
LoadLibraryExW
LdrLoadDll
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
VirtualProtect
VirtualProtectEx
NtProtectVirtualMemory
HeapCreate
RtlCreateHeap
CreateProcessA
CreateProcessW
CreateProcessInternalA
CreateProcessInternalW
NtCreateUserProcess
NtCreateProcess
NtCreateProcessEx
CreateRemoteThread
CreateRemoteThreadEx
NtCreateThreadEx
WriteProcessMemory
NtWriteVirtualMemory
WinExec
CreateFileMappingA
CreateFileMappingW
CreateFileMappingNumaW
NtCreateSection
MapViewOfFile
MapViewOfFileEx
MapViewOfFileFromApp
LdrGetProcedureAddressForCaller
При обнаружении гаджета ROP процесс завершается.
Совместимость
Приложения, которые выполняют перехват API, в частности, программное обеспечение для обеспечения безопасности, могут вызывать проблемы совместимости с этой мерой.
Эта мера несовместимо с защитой от произвольного кода.
Параметры конфигурации
Только аудит. Вы можете включить эту меру защиты в режиме аудита, чтобы оценить ее потенциальное влияние на совместимость с приложением. Затем события аудита можно будет просмотреть в средстве просмотра событий или с помощью функции расширенной охоты в Microsoft Defender для конечной точки.
Проверка вызова API (CallerCheck)
Описание
Проверка вызова API (CallerCheck) — это мера защиты для методов возвратно-ориентированного программирования (ROP), которые проверяют, допустимым ли абонентом были вызваны конфиденциальные API. Эта мера защиты проверяет переданный обратный адрес, а затем выполняет эвристическую разборку в обратном порядке, чтобы найти вызов над обратным адресом и определить, соответствует ли целевой объект вызова параметру, переданному в функцию.
Эта мера защиты перехватывает следующие API:
LoadLibraryA
LoadLibraryW
LoadLibraryExA
LoadLibraryExW
LdrLoadDll
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
VirtualProtect
VirtualProtectEx
NtProtectVirtualMemory
HeapCreate
RtlCreateHeap
CreateProcessA
CreateProcessW
CreateProcessInternalA
CreateProcessInternalW
NtCreateUserProcess
NtCreateProcess
NtCreateProcessEx
CreateRemoteThread
CreateRemoteThreadEx
NtCreateThreadEx
WriteProcessMemory
NtWriteVirtualMemory
WinExec
CreateFileMappingA
CreateFileMappingW
CreateFileMappingNumaW
NtCreateSection
MapViewOfFile
MapViewOfFileEx
MapViewOfFileFromApp
LdrGetProcedureAddressForCaller
При обнаружении гаджета ROP процесс завершается.
Совместимость
Приложения, которые выполняют перехват API, в частности, программное обеспечение для обеспечения безопасности, могут вызывать проблемы совместимости с этой мерой.
Эта мера несовместимо с защитой от произвольного кода.
Параметры конфигурации
Только аудит. Вы можете включить эту меру защиты в режиме аудита, чтобы оценить ее потенциальное влияние на совместимость с приложением. Затем события аудита можно будет просмотреть в средстве просмотра событий или с помощью функции расширенной охоты в Microsoft Defender для конечной точки.
Проверка цепочек исключений (SEHOP)
Описание
Проверка цепочек исключений (SEHOP) — это мера по борьбе с методом эксплуатации обработчика структурированных исключений (SEH). Структурированная обработка исключений — это процесс, с помощью которого приложение может запросить обработку определенного исключения. Обработчики исключений сцепляются друг с другом, поэтому если один обработчик исключений не будет обрабатывать определенное исключение, его можно передать следующему обработчику исключений в цепочке, пока один из них не примет решение обработать его. Так как список обработчиков является динамическим, он хранится в стеке. Злоумышленник может использовать уязвимость переполнения стопки, чтобы переписать обработчик исключений, указав на код по выбору злоумышленника.
Это решение основано на структуре SEH, где каждая запись SEH содержит как указатель на обработчик исключений, так и указатель на следующий обработчик в цепочке исключений. Эта мера защиты вызывается диспетчером исключений, который проверяет цепочку SEH при вызове исключения. Он проверяет, что:
- Все записи цепочки исключений находятся в пределах стопки
- Все записи исключений выровнены
- Никакие указатели обработчиков исключений не указывают на стопку
- Нет обратных указателей
- Цепочка исключений заканчивается известным окончательным обработчиком исключений
Если эти проверки завершаются ошибкой, обработка исключений прерывается, и исключение не будет обработано.
Совместимость
Проблемы совместимости с SEHOP встречаются относительно редко. Приложение редко принимает зависимость от поврежденной цепочки исключений. Однако на некоторые приложения влияют незначительные изменения времени, которые могут проявляться в виде состояния гонки, которое показывает скрытую ошибку многопотоковой работы в приложении.
Параметры конфигурации
Примечание.
Проверка цепочек исключений (SEHOP) не имеет режима аудита.
Проверка использования дескриптора
Описание
Проверка использования дескриптора — это мера, которая помогает защититься от злоумышленника, использующего существующий дескриптор для доступа к защищенному объекту. Дескриптор представляет собой ссылку на защищенный объект. Если код приложения ссылается на недопустимый дескриптор, он может указывать на то, что злоумышленник пытается использовать дескриптор, записанный ранее (но о каком подсчете ссылок на приложения не будет известно). Если приложение пытается использовать недопустимый объект, а не просто возвращает значение NULL, оно создает исключение (STATUS_INVALID_HANDLE).
Эта мера защиты автоматически применяется к приложениям из Windows Store.
Совместимость
Приложения, которые не были точно отслеживают ссылки на дескрипторы и которые не упаковывали эти операции в обработчики исключений, потенциально будут затронуты этой мерой.
Параметры конфигурации
Примечание.
Проверка использования дескриптора не имеет режима аудита.
Проверка целостности кучи
Описание
Проверка целостности кучи повышает уровень защиты кучи в Windows, вызывая прекращение работы приложения при обнаружении повреждения кучи. Предусмотрены следующие меры устранения рисков:
- Предотвращение освобождения дескриптора кучи
- Выполнение другой проверки в расширенных заголовках блоков для выделений из кучи
- Проверка того, что выделения кучи еще не помечены как используемые
- Добавление страниц защиты в большие выделения, сегменты кучи и подсегменты, превышающие минимальный размер
Совместимость
Эта мера защиты уже применена по умолчанию для 64-битных приложений и 32-битных приложений, предназначенных для Windows Vista или более поздней версии. Устаревшие приложения из Windows XP или более ранних версий наиболее подвержены риску, хотя проблемы совместимости встречаются редко.
Параметры конфигурации
Примечание.
Проверка целостности кучи не имеет режима аудита.
Проверка целостности зависимостей изображения
Описание
Проверка зависимостей изображения защищает от атак, которые пытаются заменить код для DLL, статически связанных бинарными файлами Windows. Метод установки DLL не позволяет механизму поиска загрузчика внедрять вредоносный код, который можно использовать для запуска вредоносного кода в контексте с повышенными полномочиями. Когда загрузчик загружает двоичный файл со знаком Windows, а затем загружает все библиотеки DLL, от которых зависит двоичный файл, эти двоичные файлы проверяются, чтобы убедиться, что они также имеют цифровую подпись как двоичный файл Windows. Если проверка сигнатуры не проверка, библиотека DLL не загружается и выдает исключение, возвращая состояние STATUS_INVALID_IMAGE_HASH.
Совместимость
Проблемы совместимости редки. Приложения, которые зависят от замены двоичных файлов Windows локальными частными версиями, также существует небольшой риск выявления незначительных ошибок времени в многопоточных приложениях.
Параметры конфигурации
Только аудит. Вы можете включить эту меру защиты в режиме аудита, чтобы оценить ее потенциальное влияние на совместимость с приложением. Затем события аудита можно будет просмотреть в средстве просмотра событий или с помощью функции расширенной охоты в Microsoft Defender для конечной точки.
Проверка целостности стека (StackPivot)
Описание
Защита целостности стопки (StackPivot) помогает защититься от атаки Stack Pivot — это атака ROP, в результате которой злоумышленник создает фиктивную стопку в памяти кучи, а затем позволяет приложению возвращаться в фиктивную стопку, который управляет потоком выполнения.
Эта мера защиты перехватывает множество API Windows и проверяет значение указателя стопки. Если адрес указателя стека не находится между нижней и верхней частью стека, то записывается событие, а если нет в режиме аудита, процесс завершается.
Эта мера защиты перехватывает следующие API:
LoadLibraryA
LoadLibraryW
LoadLibraryExA
LoadLibraryExW
LdrLoadDll
VirtualAlloc
VirtualAllocEx
NtAllocateVirtualMemory
VirtualProtect
VirtualProtectEx
NtProtectVirtualMemory
HeapCreate
RtlCreateHeap
CreateProcessA
CreateProcessW
CreateProcessInternalA
CreateProcessInternalW
NtCreateUserProcess
NtCreateProcess
NtCreateProcessEx
CreateRemoteThread
CreateRemoteThreadEx
NtCreateThreadEx
WriteProcessMemory
NtWriteVirtualMemory
WinExec
CreateFileMappingA
CreateFileMappingW
CreateFileMappingNumaW
NtCreateSection
MapViewOfFile
MapViewOfFileEx
MapViewOfFileFromApp
LdrGetProcedureAddressForCaller
Совместимость
Приложения, использующие поддельные стеки, оказывают влияние, и существует также небольшой риск выявления незначительных ошибок времени в многопоточных приложениях. Приложения, которые выполняют перехват API, в частности, программное обеспечение для обеспечения безопасности, могут вызывать проблемы совместимости с этой мерой.
Эта мера несовместимо с защитой от произвольного кода.
Параметры конфигурации
Только аудит. Вы можете включить эту меру защиты в режиме аудита, чтобы оценить ее потенциальное влияние на совместимость с приложением. Затем события аудита можно будет просмотреть в средстве просмотра событий или с помощью функции расширенной охоты в Microsoft Defender для конечной точки.
Совет
Хотите узнать больше? Engage с сообществом Microsoft Security в нашем техническом сообществе: Microsoft Defender для конечной точки Техническое сообщество.