Целостность потока управления - Control-flow integrity

Целостность потока управления (CFI) - общий термин для компьютерная безопасность методы, предотвращающие широкий спектр вредоносное ПО атаки от перенаправления потока выполнения ( поток управления ) программы.

Методы

Связанные методы включают разделение кодового указателя (CPS), целостность кодового указателя (CPI), стек канареек, теневые стеки, и vtable проверка указателя.[1][2][3]

Реализации

Связанные реализации доступны в Лязг,[4] Контроль потока управления Microsoft[5][6][7] и Return Flow Guard,[8] Косвенные проверки вызовов функций Google[9] и Reuse Attack Protector (RAP).[10][11]

Clang и Google Android

Google отправил Android с Ядро Linux составлено Clang с оптимизация времени компоновки (LTO) и CFI с 2018 года.[12]

Microsoft Control Flow Guard

Control Flow Guard (CFG) был впервые выпущен для Windows 8.1 Обновление 3 (KB3000850) в ноябре 2014 г. Разработчики могут добавлять CFG в свои программы, добавляя / охранник: cf флаг компоновщика перед компоновкой программы в Visual Studio 2015 или новее.[13]

По состоянию на Обновление Windows 10 Creators Update (Windows 10 версии 1703) ядро ​​Windows скомпилировано с CFG.[14] Ядро Windows использует Hyper-V для предотвращения перезаписи растрового изображения CFG вредоносным кодом ядра.[15]

CFG работает путем создания битовой карты для каждого процесса, где установленный бит указывает, что адрес является допустимым местом назначения. Перед выполнением каждого косвенного вызова функции приложение проверяет, находится ли адрес назначения в битовой карте. Если адрес назначения отсутствует в битовой карте, программа завершается.[13] Это усложняет злоумышленнику использование использование после освобождения путем замены содержимого объекта и последующего использования косвенного вызова функции для выполнения полезной нагрузки.[16]

Детали реализации

Для всех защищенных косвенных вызовов функций _guard_check_icall вызывается функция, которая выполняет следующие шаги:[17]

  1. Преобразуйте целевой адрес в смещение и число битов в битовой карте.
    1. Старшие 3 байта - это смещение байта в битовой карте
    2. Битовое смещение - это 5-битное значение. Первые четыре бита - это младшие биты адреса с 4-го по 8-й.
    3. Пятый бит битового смещения устанавливается в 0, если адрес назначения выровнен с 0x10 (последние четыре бита равны 0), и в 1, если это не так.
  2. Изучите значение адреса цели в битовой карте
    1. Если целевой адрес находится в битовой карте, вернуть без ошибок.
    2. Если целевой адрес отсутствует в битовой карте, завершите программу.

Техники обхода

Есть несколько общих методов обхода CFG:

  • Задайте в качестве пункта назначения код, расположенный в модуле не-CFG, загруженном в том же процессе.[16][18]
  • Найдите косвенный вызов, который не был защищен CFG (CALL или JMP).[16][18][19]
  • Используйте вызов функции с другим количеством аргументов, чем предназначен для вызова, что приведет к смещению стека и выполнению кода после возврата функции (исправлено в Windows 10).[20]
  • Используйте вызов функции с тем же количеством аргументов, но один из переданных указателей рассматривается как объект и записывается в смещение на основе указателя, позволяя перезаписать адрес возврата.[21]
  • Перезаписать вызов функции, используемый CFG для проверки адреса (исправлено в марте 2015 г.)[19]
  • Установите растровое изображение CFG на все единицы, разрешая все косвенные вызовы функций[19]
  • Используйте примитив управляемой записи для перезаписи адреса в стеке (поскольку стек не защищен CFG) [19]

Смотрите также

использованная литература

  1. ^ Плательщик, Матиас; Кузнецов, Владимир. «О различиях между свойствами CFI, CPS и CPI». nebelwelt.net. Получено 2016-06-01.
  2. ^ «Обнаружение ошибок Adobe Flash ведет к новому методу смягчения атак». Темное чтение. Получено 2016-06-01.
  3. ^ Финал. «Финал, который будет представлен на Black Hat USA 2016». www.prnewswire.com. Получено 2016-06-01.
  4. ^ «Целостность потока управления - документация Clang 3.9». clang.llvm.org. Получено 2016-06-01.
  5. ^ Паули, Даррен. «Средство защиты от вредоносных программ Microsoft обновлено, но даже Редмонд говорит, что он больше не нужен». Получено 2016-06-01.
  6. ^ Мимозо, Майкл (2015-09-22). «Обход, разработанный для защиты памяти Microsoft, Control Flow Guard». Threatpost | Первая остановка для новостей безопасности. Получено 2016-06-01.
  7. ^ Смит, г-жа «DerbyCon: бывший обладатель приза BlueHat обойдет Control Flow Guard в Windows 10». Сетевой мир. Получено 2016-06-01.
  8. ^ «Защита обратного потока». Tencent. Получено 2017-01-19.
  9. ^ Тайс, Кэролайн; Рёдер, Том; Коллингборн, Питер; Checkoway, Стивен; Эрлингссон, Эльфар; Лозано, Луис; Пайк, Джефф (2014-01-01). «Обеспечение целостности прямого потока управления в GCC и LLVM». Цитировать журнал требует | журнал = (Помогите)
  10. ^ Безопасность, хайз. "PaX Team stellt Schutz vor Code Reuse Exploits vor". Безопасность (на немецком). Получено 2016-06-01.
  11. ^ «Часто задаваемые вопросы о РПД». Получено 2016-06-01.
  12. ^ https://www.phoronix.com/scan.php?page=news_item&px=Clang-LTO-Linux-Kernel-V2
  13. ^ а б «Защита потока управления». MSDN. Получено 2017-01-19.
  14. ^ «Анализ выпуска Shadow Brokers и смягчение его последствий с помощью безопасности на основе виртуализации Windows 10». Microsoft Technet. Получено 2017-06-20.
  15. ^ «Универсальный обход CFG посредством злоупотребления изменчивостью» (PDF). Блог Алекса Ионеску. Получено 2017-07-07.
  16. ^ а б c Фалькон, Франсиско (25 марта 2015 г.). «Использование CVE-2015-0311, часть II: обход защиты потока управления в Windows 8.1 с обновлением 3». Основная безопасность. Получено 2017-01-19.
  17. ^ «Защита потока управления» (PDF). Trend Micro. Получено 2017-01-19.
  18. ^ а б «Внутреннее устройство Windows 10 Control Flow Guard» (PDF). Сила сообщества. Получено 2017-01-19.
  19. ^ а б c d «Обход управления Flow Guard в комплексе» (PDF). Черная шляпа. Получено 2017-01-19.
  20. ^ «Интересная деталь о Control Flow Guard». Бром. Получено 2017-01-19.
  21. ^ Томас, Сэм. «Объектно-ориентированная эксплуатация: новые методы обхода защиты Windows». Slideshare. Получено 2017-01-19.