Целостность потока управления ( CFI ) - это общий термин для методов компьютерной безопасности , которые предотвращают широкий спектр атак вредоносных программ, перенаправляющих поток выполнения ( поток управления ) программы.
Методы
Связанные методы включают разделение указателя кода (CPS), целостность указателя кода (CPI), канарейки стека , теневые стеки и проверку указателя vtable . [1] [2] [3]
Реализации
Связанные реализации доступны в Clang , [4] Microsoft Control Flow Guard [5] [6] [7] и Return Flow Guard [8], Google Indirect Function-Call Checks [9] и Reuse Attack Protector (RAP)). [10] [11]
Clang и Google Android
Google поставляет Android с ядром Linux, скомпилированным Clang с оптимизацией времени компоновки (LTO) и CFI с 2018 года. [12]
Технология Intel Control-Flow Enforcement
Технология Intel Control-flow Enforcement (CET) обнаруживает нарушения целостности управления потоком с помощью теневого стека и косвенного отслеживания переходов. [13] [14]
Теневой стек хранит копию каждого CALL в специально защищенном теневом стеке, а при RET проверяет, равны ли адреса возврата, хранящиеся в нормальном стеке и теневом стеке. Если адреса не равны, процессор генерирует INT # 21 (Ошибка защиты потока управления).
Непрямое отслеживание переходов пытается обнаружить вызовы неавторизованных косвенных целей JMP или CALL. Это было реализовано путем изменения поведения косвенных инструкций JMP и CALL, чтобы они также устанавливали внутренний конечный автомат с IDLE на WAIT_FOR_ENDBRANCH, и размещения новой инструкции ENDBRANCH, которая изменяет внутренний конечный автомат с WAIT_FOR_ENDBRANCH на IDLE, в начале каждого авторизованного косвенная цель JMP или CALL. Если процессор находится в состоянии WAIT_FOR_ENDBRANCH (то есть предыдущая инструкция была косвенным JMP или CALL), а следующая инструкция не является инструкцией ENDBRANCH, процессор генерирует INT # 21 (Ошибка защиты потока управления).
Microsoft Control Flow Guard
Control Flow Guard (CFG) был впервые выпущен для Windows 8.1 с обновлением 3 (KB3000850) в ноябре 2014 года. Разработчики могут добавлять CFG в свои программы, добавляя /guard:cf
флаг компоновщика перед компоновкой программ в Visual Studio 2015 или новее. [15]
Начиная с обновления Windows 10 Creators Update (Windows 10 версии 1703) ядро Windows скомпилировано с CFG. [16] Ядро Windows использует Hyper-V для предотвращения перезаписи вредоносным кодом ядра битовой карты CFG. [17]
CFG работает путем создания битовой карты для каждого процесса, где установленный бит указывает, что адрес является допустимым местом назначения. Перед выполнением каждого косвенного вызова функции приложение проверяет, находится ли адрес назначения в битовой карте. Если адрес назначения отсутствует в битовой карте, программа завершается. [15] Это усложняет злоумышленнику возможность использования использования после освобождения путем замены содержимого объекта и последующего использования косвенного вызова функции для выполнения полезной нагрузки. [18]
Детали реализации
Для всех защищенных косвенных вызовов функций вызывается _guard_check_icall
функция, которая выполняет следующие шаги: [19]
- Преобразуйте целевой адрес в смещение и номер бита в битовой карте.
- Старшие 3 байта - это байтовое смещение в битовой карте.
- Битовое смещение - это 5-битное значение. Первые четыре бита - это младшие биты адреса с 4-го по 8-й.
- Пятый бит битового смещения устанавливается в 0, если адрес назначения выровнен с 0x10 (последние четыре бита равны 0), и 1, если это не так.
- Изучите значение адреса цели в растровом изображении
- Если целевой адрес находится в битовой карте, вернуть без ошибок.
- Если целевой адрес отсутствует в битовой карте, завершите программу.
Техники обхода
Есть несколько общих методов обхода CFG:
- Задайте в качестве пункта назначения код, расположенный в модуле, отличном от CFG, загруженном в том же процессе. [18] [20]
- Найдите косвенный вызов, который не был защищен CFG (CALL или JMP). [18] [20] [21]
- Используйте вызов функции с другим количеством аргументов, чем предназначен для вызова, что приведет к смещению стека и выполнению кода после возврата из функции (исправлено в Windows 10). [22]
- Используйте вызов функции с тем же количеством аргументов, но один из переданных указателей рассматривается как объект и записывается в смещение на основе указателя, позволяя перезаписать адрес возврата. [23]
- Перезаписать вызов функции, используемый CFG для проверки адреса (исправлено в марте 2015 г.) [21]
- Установите растровое изображение CFG на все единицы, разрешая все косвенные вызовы функций [21]
- Используйте примитив управляемой записи для перезаписи адреса в стеке (поскольку стек не защищен CFG) [21]
Microsoft eXtended Flow Guard
eXtended Flow Guard (XFG) еще не был официально выпущен, но доступен в предварительной версии Windows Insider и был публично представлен на Bluehat Shanghai в 2019 году [24].
XFG расширяет CFG, проверяя сигнатуры вызовов функций, чтобы гарантировать, что косвенные вызовы функций относятся только к подмножеству функций с той же сигнатурой. Проверка подписи вызова функции осуществляется путем добавления инструкций по сохранению хэша целевой функции в регистре r10 непосредственно перед косвенным вызовом и сохранения вычисленного хэша функции в памяти непосредственно перед кодом целевого адреса. Когда выполняется косвенный вызов, функция проверки XFG сравнивает значение в r10 с сохраненным хешем целевой функции. [25] [26]
Смотрите также
Рекомендации
- ^ Плательщик, Матиас ; Кузнецов, Владимир. «О различиях свойств CFI, CPS и CPI» . nebelwelt.net . Проверено 1 июня 2016 .
- ^ «Обнаружение ошибок Adobe Flash приводит к новому методу смягчения атак» . Темное чтение . Проверено 1 июня 2016 .
- ^ Финал. «Финал, который будет представлен на Black Hat USA 2016» . www.prnewswire.com . Проверено 1 июня 2016 .
- ^ «Целостность потока управления - документация Clang 3.9» . clang.llvm.org . Проверено 1 июня 2016 .
- ^ Паули, Даррен. «Средство защиты от вредоносных программ Microsoft обновлено, но даже Редмонд говорит, что он больше не нужен» . Проверено 1 июня 2016 .
- ^ Мимозо, Майкл (2015-09-22). «Обход разработан для защиты памяти Microsoft, Control Flow Guard» . Threatpost | Первая остановка для новостей безопасности . Проверено 1 июня 2016 .
- ^ Смит, г-жа «DerbyCon: бывший обладатель приза BlueHat обойдет Control Flow Guard в Windows 10» . Сетевой мир . Проверено 1 июня 2016 .
- ^ «Защита обратного потока» . Tencent . Проверено 19 января 2017 .
- ^ Тайс, Кэролайн; Родер, Том; Коллингборн, Питер; Checkoway, Стивен; Эрлингссон, Эльфар; Лозано, Луис; Пайк, Джефф (2014-01-01). «Обеспечение целостности прямого потока управления в GCC и LLVM» . Цитировать журнал требует
|journal=
( помощь ) - ^ Безопасность, хайз. "PaX Team stellt Schutz vor Code Reuse Exploits vor" . Безопасность (на немецком языке) . Проверено 1 июня 2016 .
- ^ «Часто задаваемые вопросы о РПД» . Проверено 1 июня 2016 .
- ^ https://www.phoronix.com/scan.php?page=news_item&px=Clang-LTO-Linux-Kernel-V2
- ^ «Спецификация технологии обеспечения соблюдения потока управления» (PDF) . Зона разработчиков Intel . Проверено 5 января 2021 .
- ^ «RIP ROP: внутреннее устройство CET в Windows 20H1» . Winsider Семинары & Solutions Inc . Проверено 5 января 2021 .
- ^ а б «Защита потока управления» . MSDN . Проверено 19 января 2017 .
- ^ «Анализ выпуска Shadow Brokers и смягчение его последствий с помощью безопасности на основе виртуализации Windows 10» . Microsoft Technet . Проверено 20 июня 2017 .
- ^ «Универсальный обход CFG через злоупотребление изменчивостью» (PDF) . Блог Алекса Ионеску . Проверено 7 июля 2017 .
- ^ а б в Фалькон, Франсиско (25 марта 2015 г.). «Использование CVE-2015-0311, часть II: Обход Control Flow Guard в Windows 8.1 с обновлением 3» . Основная безопасность . Проверено 19 января 2017 .
- ^ «Защита потока управления» (PDF) . Trend Micro . Проверено 19 января 2017 .
- ^ а б «Внутреннее устройство Windows 10 Control Flow Guard» (PDF) . Сила сообщества . Проверено 19 января 2017 .
- ^ а б в г «Обход управления потоком в полном объеме» (PDF) . BlackHat . Проверено 19 января 2017 .
- ^ «Интересная деталь о Control Flow Guard» . Бром . Проверено 19 января 2017 .
- ^ Томас, Сэм. «Объектно-ориентированная эксплуатация: новые методы обхода защиты Windows» . Slideshare . Проверено 19 января 2017 .
- ^ «Повышение безопасности Windows» . Проверено 19 мая 2021 .
- ^ "РАСШИРЕННЫЙ ПРОТОКОПИТЕЛЬ ПОД МИКРОСКОПОМ" . Проверено 19 мая 2021 .
- ^ «Разработка эксплойтов: между камнем и охраняемым (Xtended Flow) местом: изучение XFG» . Проверено 19 мая 2021 .