Flow windows 10 что это
Что такое Control Flow Guard в Windows 10 – как его включить или выключить
Встроенная функция безопасности Windows 10 – Control Flow Guard (CFG) предназначена для борьбы с уязвимостями повреждения памяти. Control Flow Guard помогает предотвратить повреждение памяти, что очень помогает предотвратить атаки вымогателей. Возможности сервера ограничены тем, что необходимо в этот момент времени, чтобы уменьшить поверхность атаки. Защита от эксплойтов является частью функции защиты от эксплойтов в Защитнике Windows. CFG является частью этой функции.
Контроль Flow Guard в Windows 10
Давайте немного углубимся в функцию Control Flow Guard в Windows 10 и ответим на несколько вопросов, таких как:
1] Что такое Control Flow Guard и как он работает
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.
Выберите « Управление приложениями и браузером » и прокрутите вниз, чтобы найти « Настройки защиты от эксплойтов ». Выберите его и выберите Control Flow Guard ’.
Нажмите стрелку раскрывающегося списка и выберите «Выключить по умолчанию».
Microsoft Flow: что это и зачем?
Подпишитесь, чтобы получать новые статьи
Для пользователей Office 365 в 2016 году был официально запущен открытый бета-тест нового в то время продукта от компании Microsoft «Microsoft Flow». В данной статье мы попробуем поближе познакомиться с сервисом, который призван автоматизировать наши рутинные задачи и облегчить жизнь и работу сотрудников компании.
Microsoft Flow – облачный сервис от компании Microsoft, который позволяет автоматизировать рабочие процессы между приложениями, службами и online-сервисами. Эти процессы можно использовать для сбора данных, синхронизации файлов, получения уведомлений и других целей.
На данный момент реализована поддержка более 200 различных сторонних сервисов и служб таких гигантов как Google, Dropbox, Slack, WordPress, а также различных социальных сервисов: Blogger, Instagram, Twitter, Youtube, Facebook, Vimeo и тд. Конечно же, помимо этого доступна простая интеграция с приложениями Office 365.
Для упрощения использования MS Flow компания Microsoft предоставила нам большое число стандартных шаблонов для различных приложений и событий, которые мы можем использовать, просто заполнив набор необходимых параметров. Также пользователи могут сами создавать шаблоны в конструкторе и публиковать их для использования другими пользователями.
Рассмотрим примеры популярных сценариев:
Мы можем собирать письма по определенным критериям (тема, отправитель и тд), статистику по этим письмам, например, в Excel на OneDrive для дальнейшего анализа с помощью средств MS Office.
Можно отслеживать посты в социальных сетях Facebook, Twitter, Instagram по ключевым словам (например, упоминание компании/продукта). Затем настроить получение уведомлений по таким событиям, собирать данные и мнения людей для дальнейшего анализа.
С помощью MS Flow мы можем настроить синхронизацию данных между файловыми хранилищами OneDrive, Dropbox, GoogleDrive и тд. Например, собирать все актуальные версии файлов с серверов заказчика у себя в OneDrive и не думать о проблемах с версионностью.
Теперь давайте рассмотрим подробнее несколько простых сценариев, демонстрирующих нам, что для использования «Microsoft Flow» не нужно быть разработчиком или ИТ-специалистом, достаточно всего лишь иметь учетную запись Microsoft Office 365.
К примеру, мы хотим отслеживать твиты, в которых упоминается название нашего продукта или компании, и создавать в Dynamics CRM Интерес (Лид) для автора твита. Для этих целей есть уже готовый шаблон, поэтому нам не придется тратить время на дополнительные настройки или создание с нуля.
Как видно, конструктор на основе шаблонов предлагает очень обширные и гибкие возможности для бизнеса, но что делать если для бизнес-целей нет подходящего шаблона?
Для этого используется система триггеров (прим.: триггер – событие, при наступлении которого начнется выполнение процесса). Продемонстрируем на простом примере: мы хотим получать сообщения на почту при создании интереса в Microsoft Dynamics 365 (CRM).
2. Для данного сервиса предусмотрено несколько триггеров, которые могут срабатывать на создание, обновление, удаление записи. Выбираем триггер создания записи “When a record is created”, затем выбираем организацию, для которой создается процесс, название сущности (объекта системы), на создание которой будет реагировать наш триггер и нажимаем “+ New step”.
3. Как видно, конструктор предлагает нам много возможностей для тонкой настройки процесса, добавления дополнительных условий и действий.
В данном случае мы добавим действие “Add an action”. У нас на выбор есть огромное количество всевозможных видов действий: отправка sms, выполнение запроса к SQL-серверу, сбор данных и запись в файл, получение информации о погоде, создание поста в соц. сетях, работа с календарем, контактами и тд.
Сейчас выберем действие “Send an email” для решения нашей тривиальной задачи.
4. Заполним обязательные параметры. При необходимости список параметров можно развернуть для более тонкой настройки почтового сообщения. Обратим внимание на такую прекрасную вещь, как динамический контент. Мы можем вытащить данные из полей создаваемой записи и использовать в нашем почтовом сообщении. Например, возьмем поле “Имя” и добавим его в тело сообщения, после обработки сообщения на этом месте выведется Имя Интереса из системы.
Как мы видим сервис предлагает нам множество возможностей и большинство из них доступно бесплатно. Есть также возможность приобрести премиум аккаунт, который добавляет возможность работать с дополнительными сервисами. Однако в большинстве случаев бесплатного аккаунта достаточно для решения большинства рутинных задач и сокращения трудозатрат сотрудников на подобные задачи.
В данной статье мы рассмотрели только малую часть потенциала, скрываемого под названием «Microsoft Flow», и надеюсь у вас появилось желание попробовать данный сервис в своих повседневных бизнес-задачах, ведь как гласит лозунг этого сервиса «Work less, do more»!
device flow windows 10 что это
Совершенно случайно наткнулся на статью о системе защиты Control Flow Guard, которая появилась в Windows 10 и Windows 8.1 Update 3 после одного из обновлений. Оказывается это технология сильно тормозит работу компьютера, особенно это ощущается на ПК без SSD диска.
Вот как было у меня:
Пользовался ноутбуком на Windows 8, скорость работы и всё остальное меня вполне устраивало. Но потом вышла Windows 10 и компьютер постоянно начал предлагать обновится. Я с этим делом не торопился и решил, что буду переходить на десятку намного позже, чтобы разработчики исправили баги, так присущие их продуктам, особенно «сырым».
Обновился до Windows 10 в один из последних дней возможного бесплатного перехода на новую операционную систему и сразу заметил как упала скорость работы по сравнению с восьмеркой. Возможности откатить на Windows 8 уже не было. Пришлось «наслаждаться» тем что имеем.
И вот спустя почти год я вдруг узнал, что есть такая программа как Control Flow Guard и она всему виной. Как говорится — «Лучше поздно, чем никогда!».
Что такое Control Flow Guard
Это система защиты персонального компьютера от атак, которые направлены на повреждение памяти. Стал разбираться и оказалось, данная технология непосредственна связана с Защитником Windows. Получается большое количество людей, которые используют другие антивирусы и у которых стандартный виндосовский защитник отключен не используют эту технологию защиты. Ну и славно. Значит не так она и важна.
В любом случае интересно провести эксперимент и сравнить скорость загрузки и работы ноутбука с CFG и без неё. Сказано — сделано!
Как отключить Control Flow Guard в Windows 10
У кого стоит Windows 8, думаю, по аналогии не составит труда разобраться ведь отключается CFG в защитнике виндоус. Для наглядности прилагаю скриншот ниже.
Allows ConnectUX and PC Settings to Connect and Pair with WiFi displays and Bluetooth devices.
Default Settings
Default Behavior
In Windows 10 it is starting only if the user, an application or another service starts it. If DevicesFlow fails to start, the failure details are being recorded into Event Log. Then Windows 10 will start up and notify the user that the DevicesFlowUserSvc service has failed to start due to the error.
Dependencies
DevicesFlow cannot be started under any conditions, if the Remote Procedure Call (RPC) service is disabled.
Restore Default Startup Configuration for DevicesFlow
1. Run the Command Prompt as an administrator.
2. Copy the command below, paste it into the command window and press ENTER:
sc config DevicesFlowUserSvc start= demand
3. Close the command window and restart the computer.
Некоторые пользователи после обновления до Windows 10 Fall Creators Update (1709) могли замтетить, что окна в Проводнике открываются очень медленно, а файлы в папках подгружаются поэтапно. Все это очень похоже на то, что в системе отсутствует корректный драйвер на видеокарту, но это не так — у вас вполне могут идти новые 3D-игры и. лагать Проводник.
В чем же проблема? А виновата тут новая защита, которую Microsoft решила включить. Называется она Control Flow Guard, и она является функцией безопасности платформы, которая была создана для борьбы с уязвимостями, связанными с повреждением памяти. Установив жесткие ограничения на то, где приложения могут выполняться, она значительно затрудняет выполнение эксплойтами произвольного кода с помощью таких уязвимостей, как переполнение буфера. Но, увы, на некоторых устройствах она может серьезно снижать скорость работы Проводника.
Отключить ее просто — для этого нужно зайти в Защитник Windows > Управление приложениями и браузером > Параметры защиты от эксплойтов и выключить CFG:
После этого нужно перезагрузиться, и Проводник снова должен начать работать быстро.
Control Flow Guard. Принцип работы и методы обхода на примере Adobe Flash Player
Компания Microsoft не оставляет попыток победить в бесконечной войне с эксплоитописателями, раз за разом реализуя новые техники по защите приложений. На сей раз разработчики операционной системы Windows подошли к решению данного вопроса более фундаментально, переведя свой взгляд на корень проблемы. Работа почти каждого эксплоита так или иначе нацелена на перехват потока исполнения приложения, следовательно, не помешало бы «научить» приложения следить за этим моментом.
Концепия Control Flow Integrity (целостность потока исполнения) была описана еще в 2005 году. И вот, 10 лет спустя, разработчики из компании Microsoft представили свою неполную реализацию данного концепта — Control Flow Guard.
Что такое Control Flow Guard
Аналогичная реализация механизма защиты на основе концепции Control Flow Integrity для ОС семейства Linux имеется в расширении PaX.
Как работает Control Flow Guard
Рассмотрим принцип работы CFG в пользовательском режиме. Данный механизм имеет два основных компонента: битовую карту адресов (управляется ядром) и процедуру проверки указателя вызываемой функции (используется пользовательскими приложениями).
Вся служебная информация CFG заносится в IMAGE_LOAD_CONFIG_DIRECTORY исполняемого файла во время компиляции:
GuardFlags
Заголовочный файл winnt.h для Windows 10 (1511) содержит следующие флаги CFG (последний является маской, а не флагом):
Стоит отметить, что это неполный список существующих флагов. Наиболее полный список можно получить из внутренностей файла link.exe (компоновщик):
Также стоит обратить внимание на присутствие некоторых интересных флагов, официальной информации о которых нет. Разработчики Microsoft, по всей видимости, тестируют дополнительный механизм CFG для проверки адреса записи ( IMAGE_GUARD_CFW_INSTRUMENTED ).
Битовая карта
Процедура проверки указателя вызываемой функции
Каждый неявный вызов в программе на этапе компиляции обрамляется проверкой адреса вызываемой функции. Адрес процедуры проверки устанавливает загрузчик исполняемых файлов, поскольку изначально установлен адрес пустой процедуры, тем самым сохраняя обратную совместимость.
Для наглядности посмотрим на один и тот же код, скомпилированный без CFG и с ним.
Оригинальный код на C++:
ASM листинг (вырезка):
С ключом компиляции /guard:cf :
В первом случае код подвержен атаке с использованием техники подмены таблицы виртуальных функций. Если атакующий при эксплуатации уязвимости способен перезаписать данные объекта, то он может подменить таблицу виртуальных функций таким образом, что вызов функции someClass->doSomething() приведет к выполнению контролируемого атакующим кода, тем самым перехватив поток исполнения приложения.
В случае же использования Control Flow Guard, адрес вызываемой функции предварительно будет сверен с битовой картой. Если соответствующий бит будет равен нулю, произойдет программное исключение.
Изучим алгоритм данной функции на примере входного адреса 0x0B3385B0.
B3385B016 = 10110011001110000101101100002
Теперь остается только проверить значение бита, проведя bit test. Инструкция bt проверяет значение бита первого регистра, порядковый номер которого берется из 5 младших бит (по модулю 32) второго регистра. В случае, если бит равен 1, будет выставлен Carry Flag (CF) и программа продолжит свое выполнение в обычном режиме.
Проверив 22-ой бит, можно убедиться, что адрес вызываемой функции является валидным.
Реализация данного алгоритма на Python выглядит следующим образом:
Результат работы скрипта:
Исключения
Не во всех случаях вызов невалидной функции будет заканчиваться 29-ым прерыванием. В функции ntdll!RtlpHandleInvalidUserCallTarget происходят следующие проверки:
Псевдокод данной функции выглядит следующим образом:
Слабые места Control Flow Guard
Как и любой другой защитный механизм, CFG имеет некоторые слабые места:
Выключенный DEP процесса влечет за собой потерю смысла проверок CFG, поскольку функция ntdll!RtlpHandleInvalidUserCallTarget в таком случае будет всегда разрешать исполнение невалидного адреса.
Адрес битовой карты хранится по фиксированному адресу и может быть легко вычислен из пользовательского режима. Пользователю запрещено модифицировать данные в битовой карте, но эксплоитописатели так или иначе найдут способ обойти это ограничение.
Если исполняемый файл не скомпилирован с поддержкой CFG, то поддержка CFG в подгружаемых им модулей теряет смысл. Битовая карта и адрес процедуры проверки заполняются только при условии, что исполняемый файл поддерживает механизм CFG, поэтому проверки внутри кода модулей будут являться простыми заглушками.
CFG зависит от процесса компиляции, поэтому модули сторонних разработчиков и даже старые модули Microsoft являются уязвимым местом в защищаемом CFG исполняемом файле. Поскольку битовая карта составляется по таблице адресов валидных функций, которая генерируется компилятором, весь код модуля без поддержки CFG будет помечен в битовой карте валидным адресатом.
За каждые 8 байт адресного пространства отвечает 1 бит, но, на самом деле, 1 выравненный адрес соотносится с одним четным битом, при этом следующий нечетный бит соотносится сразу с 15 байтами адресного пространства. Убедиться в этом можно, запустив приведенный выше Python скрипт в цикле и проанализировав результат:
Из этого следует, что у атакующего есть возможность вызвать недоверенную функцию в непосредственной близости от доверенной функции, при условии, что последняя не выравнена.
CFG не способен предотвратить перехват потока исполнения при модификации атакующим адреса возврата функции.
Реализация обхода Control Flow Guard на примере Adobe Flash Player
Начиная с Windows 8 плагин Adobe Flash Player интегрирован в Internet Explorer, а с Windows 8.1 (Update 3) он поставляется с поддержкой CFG. Существует несколько реализаций обхода Control Flow Guard в эксплоитах под Adobe Flash Player, некоторые из которых актуальны и по сей день.
Обход при помощи динамического кода
В Adobe Flash Player активно используется JIT-компиляция, которая позволяет избегать выполнения такой ресурсоемкой операции, как интерпретация ActionScript кода. Но, как было сказано ранее, динамически генерируемые функции требуют дополнительного внимания со стороны разработчиков. Два метода обхода, описанные ниже, являются следствием упущения разработчиков в отношении работы с выделением памяти.
Отсутствие проверок неявных вызовов в динамическом коде
Класс VTable является внутренним представлением виртуальной таблицы функций (то есть не той, которую генерирует C++) для классов ActionScript.
Объект данного класса содержит в себе указатели на объекты класса MethodEnv :
Такое становится возможным по причине того, что метод данного класса будет вызываться из JIT-кода:
Как видно на скриншоте выше, неявный вызов происходит без предварительной проверки вызываемого адреса, поскольку данная функция была сгенерирована динамически.
Данный метод обхода CFG был исправлен с выходом Adobe Flash Player версии 18.0.0.160 (KB3065820, Июнь 2015). Исправление заключается в следующем: если JIT-функция содержит неявный вызов, то JIT-компилятор вставит вызов процедуры проверки непосредственно перед неявным вызовом.
Любой адрес в пределах тела динамической функции является валидным
Предыдущий метод обхода был возможен из-за недочета в функции, которая производит неявный вызов. А данный метод возможен из-за недочета в функции, которую неявно вызывют.
Исследователи Юрий Дроздов и Людмила Дроздова из Center of Vulnerability Research представили данный метод обхода CFG на конференции Defcon Russia (Санкт-Петербург, 2015) (презентация, статья). Их метод основан на том факте, что при выделении исполняемой памяти ядро выставляет единичный бит в битовой карте CFG для всей выделенной памяти. Посмотрим, к чему может привести такое поведение.
Предположим, что существует некая JIT-функция по адресу 0x69BC9080, в теле которой находится следующий код:
Что именно делает эта функция, нас не интересует, нужно лишь обратить внимание на 2 байта FF D0 инструкции по адресу 0x69BC90F0. Что будет, если начало функции вдруг сдвинется в середину данной инструкции? Вот что:
Сгенерировать необходимую последовательность можно, просто экспериментируя с ActionScript-кодом. Стоит лишь учитывать тот факт, что Nanojit (JIT-компилятор AVM ) обфусцирует генерируемый код, поэтому легкого пути не будет. Посмотрим, во что превратит Nanojit данную функцию:
Совсем не то, что мы ожидали. Опытным путем можно прийти, например, к такому варианту кода:
Тело первой функции будет содержать следующие инструкции:
Интересующие нас байты FF 11 являются инструкцией call [ecx] :
Вызов функции SetProcessValidCallTargets реализован в AVMPI_makeTargetValid (AVMPI/MMgcPortWin.cpp):
Из этого можно сделать вывод, что правильная последовательность действий при размещении в памяти динамически генерируемого кода в условиях работы CFG должна быть следующей:
И, конечно же, не стоит забывать про неявные вызовы внутри динамического кода.
Обход при помощи функций WinAPI
Обратимся к скриншоту из предыдущего метода:
Модифицируем алгоритм из предыдущего метода и получим следующий код:
Поиск WinAPI функции в условиях современных Flash-эксплоитов является тривиальной задачей. Данную реализацию мы опустим, но с ней можно всегда ознакомиться, изучив пакет Flash Exploiter из фреймворка Metasploit.
Выполнив приведенный выше алгоритм при эксплуатации уязвимости, можно убедиться в работоспособности данного метода:
Данная реализация, несмотря на свою работоспособность и лаконичность, представляет малый интерес для атакующего, поскольку дает небольшой спектр возможностей.
Образец для подражания
Подробное описание данного метода требует отдельной статьи, но с реализацией можно ознакомиться на GitHub. Также есть хороший материал с разбором данного метода в условиях 64-битного Flash в блоге Metasploit.
Другие работы по обходу Control Flow Guard
В данной статье были рассмотрены методы обхода CFG при эксплуатации уязвимостей Adobe Flash Player. Но мир не крутится вокруг Flash, поэтому рекомендуем ознакомиться со следующими исследованиями, в которых затрагивается вопрос обхода Control Flow Guard в Internet Explorer 11.
Заключение
Несмотря на свои недостатки, Control Flow Guard при должном внимании со стороны разработчиков является хорошим дополнением в арсенале борцов с эксплоитами в среде ОС Windows. Компании Microsoft удалось, пусть и не полностью, реализовать концепцию Control Flow Integrity, минимально повлияв на производительность приложений, и сохранив обратную совместимость. Данный механизм еще не достиг предела своих возможностей, и разработчики из Microsoft наверняка в ближайшем будущем смогут усилить защиту приложений.
Хочется надеяться, что все разработчики приложений задумаются над современной защитой от эксплуатации уязвимостей и добавят в свои продукты поддержку CFG.
Подобные механизмы защиты появляются и на уровне железа. Компания Intel, например, выпустила спецификацию их новой технологии, нацеленную на противодействие ROP-атакам — CET (Control-flow Enforcement Technology) (статья на хабре). В добавок к лучшей производительности, CET избавлен от многих недостатков Control Flow Guard.