Как отключить flow control

Обновлено: 02.07.2024

Некоторые пользователи столкнулись с необычно медленной работой, подтормаживанием пользовательского интерфейса в Windows 10. Вы заметили, что Проводник, открывает окна очень медленно, и вы видите, как окно открытой вами папки появляется поэтапно. Это может напоминать вам о проблемах с графическими драйверами, но в этом случае это не так. Проблема с медленной работой интерфейса системы затрагивает пользователей, установивших обновление Windows 10 Fall Creators.

Симптомы могут быть следующими:

  • Открытие нового окна Проводника занимает слишком много времени.
  • Вы практически видите, как поэтапно появляется окно.
  • Большие задержки при открытии папок.
  • Другие проблемы, связанные с пользовательским интерфейсом системы.
  • Диспетчер задач не показывает каких-либо аномальных действий приложения или ресурса. Все, кажется, так и должно быть. Даже тяжелые игры могут работать нормально.

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

«Защита потока управления (CFG)» - это высоко оптимизированная функция безопасности, которая создана для борьбы с уязвимостями, связанными с повреждением памяти. Установив жесткие ограничения на то, где приложение может выполнить код, что значительно затрудняет выполнение эксплойтами произвольного кода с помощью таких уязвимостей, как переполнение буфера.

Ускорение пользовательского интерфейса в Windows 10, избавляемся от задержек.

  1. Откройте Центр безопасности Защитника Windows. Вы можете открыть Центр безопасности защитника Windows из меню «Пуск» или с помощью приложения «Параметры», нажав сочетание клавиш Win + I и перейдя Обновление и безопасность → Защитник Windows → Открыть центр безопасности защитника Windows.


  1. Нажмите «Управление приложениями и браузером».


  1. Прокрутите вниз до «Защита от Эксплойтов» и нажмите на ссылку «Параметры защиты от эксплойтов».


  1. На следующей странице, используя раскрывающийся список, установите опцию «Защита потока управления (CFG)» в положение «Выкл. по умолчанию».


Windows 10 Disable Control Flow Guard CFG

Все!

Это должно устранить все проблемы связанные с медленной работой графического интерфейса увеличив быстродействие Windows 10 Fall Creators Update.

Что вы думаете об этом регрессе? Многие из функций безопасности в Windows 10 хороши, но поскольку они появились совсем недавно, они не были хорошо протестированы. Теперь обычный пользователь является тестером.


Защитник Windows

Уязвимости безопасности памяти

Наиболее распространенным классом уязвимостей, встречающимся в системном программном обеспечении, являются уязвимости безопасности памяти. Этот класс включает переполнения буфера, висячие указатели (dangling pointers), неинициализированные переменные и прочее.

Каноническим примером переполнения стекового буфера является копирование данных из одного буфера в другой без проверки границ (использование strcpy). Если атакующий контролирует данные исходного буфера и размер, то целевой буфер и важные компоненты стека (например: адрес возврата) могут быть повреждены, чтобы указывать на нужный злоумышленнику код.


Висячие указатели (dangling pointers) возникают, когда память, на которую ссылается указатель, освобождена, но указатель на эту память все еще существует. В эксплойтах use-after-free (использование после освобождения) атакующий может читать/писать через висячий указатель, который теперь указывает на совершенно другую память (а не на ту, что рассчитывал программист).

В некоторых языках существуют неинициализированные переменные: переменные могут быть объявлены без значения, а память в этом случае инициализируется мусорными данными. Если злоумышленник может прочитать или записать это содержимое, это также приведет к непреднамеренному поведению программы.

Это наиболее популярные методы, которые злоумышленники могут использовать для получения контроля и запуска произвольного нативного кода на целевых машинах.

Суть ROP

В системном программном обеспечении, если злоумышленник обнаружит в коде уязвимость безопасности памяти, обратный адрес может быть взломан для передачи управления на определенный атакующим адрес. Здесь начинаются трудности для злоумышленника: невозможно передать управление на произвольный адрес, благодаря уже внедренным технологиям Data Execution Prevention (DEP) и Address Space Layout Randomization (ASLR). Но управление может быть передано фрагментам кода (гаджетам) в существующей исполняемой памяти. Злоумышленники могут найти гаджеты, которые заканчиваются командой RET (или другими инструкциями ветвления), а цепочкой из нескольких гаджетов можно воспользоваться для выполнения вредоносных действий (отключить функции защиты), чтобы в конце концов выполнить произвольный нативный код.

Стоит отдельно отметить, что аппаратная защита стека будет работать только на чипсетах с Intel'овскими инструкциями Control-flow Enforcement Technology (CET). Подробности о CET можно почерпнуть в официальном документе от Intel.

В этой публикации мы в общих чертах опишем соответствующие части реализации Windows 10. Эта технология работает одновременно с обычным стеком программных вызовов, сохраняя записи об адресах возврата в теневой стек (Shadow Stack). Во время обработки каждой инструкции CALL адрес возврата помещается как в стек вызовов, так и в теневой стек. А в момент обработки инструкции RET выполняется сравнение адресов возврата из обычного стека вызовов и теневого стека, чтобы гарантировать, что целостность не нарушена.


Теневой стек (Shadow Stack) хранит только адреса возвратов, что позволяет минимизировать дополнительные затраты памяти.

Теневые стеки (Shadow Stacks) CET

Аппаратное обеспечение, совместимое с теневым стеком, обеспечивает расширение архитектуры, добавляя инструкции по управлению теневыми стеками и аппаратной защите страниц теневого стека.

Оборудование имеет новый регистр SSP, который содержит адрес (указатель) теневого стека. Аппаратное обеспечение также подразумевает расширение таблиц страниц для идентификации страниц теневого стека и защиты этих страниц от атак.

Для управления страницами теневого стека были добавлены новые инструкции:

  • INCSSP — инкремент SSP (например для раскрутки теневого стека)
  • RDSSP — чтение SSP в регистр общего назначения
  • SAVEPREVSSP/RSTORSSP — сохранение/восстановление теневого стека (например, для переключения контекста)

Более детальную информацию о реализации можно найти в Intel’овском мануале по CET.

Скрытая настройка во всех компьютерах на Windows 10 значительно повышает скорость работы

Операционная система Windows 10 является одной из самых сложных и запутанных для начинающих пользователей. Прямо «из коробки» она просто работает, но если требуется настроить ее каким-то особым образом, то это может повлечь за собой множество проблем. Оказывается, что во всех компьютерах и прочих устройства, работающих на базе последней сборки этой ОС, есть скрытая от посторонних глаз настройках, которая значительно повышает скорость работы всей системы.

После обновления до Windows 10 Fall Creators Update (1709) все владельцы компьютеров и планшетов должны были заметить, что система стала работать ощутимо медленнее. Особенно сильно это заметно на компьютерах с обычными жесткими дисками (HDD) и слабеньким процессором. Сначала многие подумали, что дело в неправильно работающих драйверах видеокарты, которые после установки апдейта начали работать некорректно, однако эта гипотеза была очень быстро опровергнута.


Пользователи выяснили, что даже самые крутые 3D-игры на максимальных настройках не тормозят, тогда как многие системные программы в Windows 10 очень сильно «тупят». Наиболее сильно это заметно при работе с приложением «Проводник», который позволяет работать с файлами. Зачастую некоторые папки открываются по одной минуте, от чего многие пользователи в бешенстве.


Оказалось, что Microsoft добавила во все компьютеры на базе Windows 10 новую разработку под названием Control Flow Guard. Это своего рода специальная защита, направленная на борьбы с уязвимостями, связанными с повреждениями памяти. Защита защитой, но она в несколько раз снижает скорость работы всей операционной системы, причем отключить ее, на первый взгляд, невозможно.


К счастью, была обнаружена скрытая настройка, которая значительно повышает скорость работы всех компьютеров на Windows 10. Для этого необходимо запустить «Защитник Windows», а затем перейти в раздел «Управление приложениями и браузеров». Потребуется открыть подраздел «Параметры защиты от эксплойт», после чего отключить защиту CFG (Control Flow Guard). Чтобы все начало работать потребуется перезагрузить компьютер.


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

Исполнение произвольного кода

Мы формулируем нашу стратегию противодействия исполнению произвольного кода в форме четырех столпов:


Code Integrity Guard (CIG) предъявляет обязательное требование к подписи загружаемых двоичных файлов.

Arbitrary Code Guard (ACG) гарантирует, что подписанные страницы неизменны, а динамический код не может быть сгенерирован, что гарантирует целостность загружаемых двоичных файлов.

Мы внедрили Control Flow Guard (CFG) в Windows 10 для обеспечения целостности при косвенных вызовах (контроль прямой передачи управления, forward-edge CFI). А аппаратная защита с помощью теневых стеков (Shadow Stacks) обеспечивает целостность обратной передачи управления (backward-edge CFI).

Мини конкурс

Бонусом, для дочитавших (или просколливших) до конца я предлагаю небольшой конкурс. Если кто-то случайно (или не случайно) догадался перевод какой статьи (уже опубликованной в интернете на текущий момент) я готовлю во второй части — пишите в комментарии. Призом для первого угадавшего будет… ну, например, плюс в карму :) Если нужны идеи, то в качестве подсказки можно посмотреть в самое начало этой публикации.

Введение в аппаратную защиту стека (Windows 10)


Под катом представлен перевод статьи "Understanding Hardware-enforced Stack Protection".

Авторы: Kernel protection team — Jin Lin, Jason Lin, Niraj Majmudar, Greg Colombo

Это первая (обзорная) публикация задуманной серии из двух переводов о внедрении Intel'овской Control-flow Enforcement Technology (CET) в Windows 10.

Мы стремимся сделать Windows 10 одной из самых безопасных операционных систем для наших клиентов, и для этого мы инвестируем во множество функций безопасности. Наша философия заключается в создании функций, которые снижают эффективность широкого класса уязвимостей (в идеале без изменения кода приложения). В MSDN есть отдельная статья "Mitigate threats by using Windows 10 security features", которая агрегирует все технологии, ориентированные на безопасность, которые мы встроили в Windows на протяжении многих лет. В этой статье так же описано, как каждая из функций обеспечивает безопасность наших клиентов. А так же есть еще презентация Matt Miller и David Weston, которую можно рекомендовать к прочтению после статьи MSDN. Презентация углубляется в нашу философию безопасности.

В настоящее время мы изучаем функции безопасности, основанные на аппаратной интеграции. Это позволит нам существенно поднять планку защиты от атак. Благодаря глубокой интеграции ядра Windows с аппаратным обеспечением злоумышленникам станет сложно и дорого проводить масштабные атаки.

Основываясь на проведенных исследованиях (Evolution of CFI attacks, Joe Bialek), можно заявить, что атаки на основе ROP (Return Oriented Programming, Возвратно-ориентированное программирование) стали очень распространенным инструментом злоумышленников. Следовательно, они являются следующей целью для встроенных упреждающих технологий безопасности Windows. В этой публикации мы опишем наши усилия по укреплению целостности потока управления в Windows 10 с помощью аппаратной защиты стека.

Компиляция с аппаратной поддержкой защиты стека

Для включения аппаратной поддержкой защиты стека в вашем приложении появился новый флаг линкера, выставляющий соответствующий бит в PE заголовке, который запрашивает новые функции защиты у ядра.

Если у приложения выставлен этот бит, а текущая версия Windows и аппаратное обеспечение поддерживают теневые стеки, то ядро будет поддерживать работу теневых стеков на всем протяжении работы программы. Если ваша версия Windows или аппаратное обеспечение не поддерживают теневые стеки, то соответствующий бит в PE заголовке игнорируется.

Такая модель применения защиты (opt-in: опциональное использование при желании и возможности) позволит разработчикам сначала внимательно протестировать свое приложение с аппаратной защитой стека, а уже затем добавить флаг совместимости в релиз.

Функция аппаратной защиты стека находится в стадии разработки, но попробовать в ознакомительном режиме ее можно в Insider preview-сборках Windows 10. Если у вас есть аппаратное обеспечение, совместимое с Intel'овской CET , вы можете включить приведенный выше флаг компоновщика в своем приложении для тестирования на последних Insider preview-сборках Windows 10.

Аппаратная защита стека обеспечивает надежную защиту от использования ROP в эксплойтах, поскольку ведет запись непосредственного потока выполнения программы. Чтобы обеспечить плавное внедрение экосистемы и совместимость приложений, Windows предложит эту защиту в качестве дополнительной модели, чтобы разработчики могли внедрить новые технологии защиты в своем собственном темпе.

Мы будем постоянно предоставлять рекомендации о том, как перестроить ваше приложение, чтобы оно было совместимо с теневым стеком. В нашем следующем посте мы подробнее поговорим о передовом опыте использования новой технологии, а также предоставим техническую документацию. Эта защита станет важным шагом вперед в наших постоянных усилиях сделать Windows 10 одной из самых безопасных операционных систем для наших клиентов.

Контроль Flow Guard в Windows 10

Давайте немного углубимся в функцию Control Flow Guard в Windows 10 и ответим на несколько вопросов, таких как:

  1. Что такое Control Flow Guard и как он работает?
  2. Как Control Flow Guard влияет на производительность браузера?
  3. Как отключить Control Flow Guard?

1] Что такое Control Flow Guard и как он работает

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

Когда проверка CFG не выполняется во время выполнения, Windows немедленно завершает работу программы, тем самым устраняя любую уязвимость, которая пытается косвенно вызвать неверный адрес.

2] Как Control Flow Guard влияет на производительность браузера

Сообщается, что эта функция вызывает проблемы с производительностью браузеров на базе Chromium. Все основные браузеры, такие как Google Chrome, Microsoft Edge browser, Vivaldi и многие другие, похоже, пострадали от этого. Эта проблема обнаружилась, когда разработчики Vivaldi запустили модульные тесты Chromium в Windows 7 и обнаружили, что они работают быстрее, чем в самой последней версии Windows 10.

Менеджер команды ядра Windows признал проблему и сказал, что они создали исправление, которое будет выпущено через пару недель.

3] Как отключить Control Flow Guard в Windows 10

Если вы хотите отключить эту функцию, следуйте этой процедуре.


Нажмите Пуск и найдите Безопасность Windows .

Выберите «Безопасность Windows» на левой панели раздела « Обновление и безопасность » в настройках Защитника Windows.


Выберите « Управление приложениями и браузером » и прокрутите вниз, чтобы найти « Настройки защиты от эксплойтов ». Выберите его и выберите Control Flow Guard ’.

Нажмите стрелку раскрывающегося списка и выберите «Выключить по умолчанию».

Читайте также: