Институт системного программирования им. В.П. Иванникова РАН


ИСП Обфускатор. Технология запутывания кода для защиты от эксплуатации уязвимостей

ИСП Обфускатор

ИСП Обфускатор базируется на результатах долгосрочных исследований, проводимых в ИСП РАН с 2002 года. Технология прошла путь от фундаментальных исследований до внедрения в реальные промышленные разработки. За это время было опубликовано большое количество публикаций по теме запутывания программного кода и защищено две диссертационные работы.

Области применения технологии ИСП Обфускатор:

  • усложнение понимания алгоритмов и структур данных;
  • затруднение генерации эксплойтов на основе анализа патчей;
  • расстановка водяных знаков;
  • предотвращение эксплуатации известной уязвимости.

ИСП Обфускатор реализован на базе двух компиляторных инфраструктур (LLVM и GCC). Реализованные преобразования:

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

Преобразование приведения графа потока управления к плоскому виду

После применения данного преобразования структура графа потока управления меняется на плоскую. Задача восстановления в ходе статического анализа порядка следования базовых блоков является NP-трудной задачей.

Для наглядности проиллюстрируем данное преобразование примером. Ниже приведен граф потока управления оригинальной программы.

ИСП Обфускатор. Технология запутывания кода для защиты от эксплуатации уязвимостей

Граф потока управления состоит из нескольких вложенных ветвлений. После применения преобразования «диспетчер» структура графа потока управления меняется на плоскую.

ИСП Обфускатор. Технология запутывания кода для защиты от эксплуатации уязвимостей

Оценка производительности

Обфусцирующие преобразования негативно сказываются на производительности программы и ее размере. Некоторые из тяжеловесных преобразований (например приведение графа потока управления к плоскому виду) могут замедлять быстродействие программы в несколько раз.

Оценка производительности

Обфусцирующие преобразования негативно сказываются на производительности программы и ее размере. Некоторые из тяжеловесных преобразований (например приведение графа потока управления к плоскому виду) могут замедлять быстродействие программы в несколько раз.

Применение ИСП Обфускатор для противодействия эксплуатации уязвимостей

Ошибки программирования или специальные закладки, приводящие к уязвимостям программного обеспечения, особо опасны по той причине, что огромное количество компьютеров одновременно обладают идентичным программным обеспечением и могут быть массово атакованы одним эксплойтом. На данный момент сложилась ситуация программного однообразия. Идентичные исполняемые файлы самого популярного программного обеспечения работают на миллионах компьютеров. Это облегчает масштабное эксплуатирование, потому что одна и та же атака с успехом проходит на множество целей. На базе технологии ИСП Обфускатор реализовано средство противодействия эксплуатации уязвимостей.

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

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

Внедрение

ИСП Обфускатор входит в состав ОС "Циркон", разрабатываемой группой компаний "СВЕМЕЛ", и внедренной в следующие организации: МИД РФ, Пограничная служба ФСБ России (различные погрануправления), Образова- тельные организации ФСБ России, ОС и ПО семейства "Циркон" имеют сертификаты соответствия требованиям ФСБ и ФСТЭК к программному обеспечению и могут использоваться для защиты информации, содержащей сведения, составляющие государственную тайну.

ИСП Обфускатор, на базе модифицированного компилятора GCC, реализует методы обфускации, обеспечивающие: добавление избыточных локальных переменных (приводит к изменению размера стекового фрейма и смещению адреса возврата); перестановку порядка следования локальных переменных на стеке (приводит к изменению расположения переполняемого буфера и соответственно требований к размеру данных, требуемых для переполнения и успешной подмены адреса возврата); перестановку порядка функций в модуле программы (приводит к изменению адресов функций в программе, обеспечивая гранулярность на уровне функций).

ИСП Обфускатор. Технология запутывания кода для защиты от эксплуатации уязвимостей

Оценка защищенности в случае ROP-атаки

В случае ROP-атаки возможно построение цепочки ROP-гаджетов по коду копии приложения, имеющегося в наличии. Однако построение ROP-эксплойта для другой копии с неизвестным значением затравки для генератора случайных чисел - сложная задача, потому что требуется знание адресов ROP-гаджетов для этой копии. Подбор этих адресов потребует неприемлемого количества времени. Необходимо отметить возможность атаки на затравку для генератора случайных чисел. Предсказуемость этого значения может значительно упростить задачу перебора адресов ROP-гаджетов. Поэтому следует генерировать достаточно случайные значения для затравки генератора, чтобы их было сложно предсказать или подобрать.

Для обеспечения максимального уровня защиты рекомендуется использовать предлагаемый подход совместно с ASLR и DEP. Указанные технологии затрудняют прямую эксплуатацию уязвимостей, запрещая исполнять код на стеке и обеспечивая случайное перераспределение адресов загрузки исполняемых модулей. Тем не менее, сочетания ASLR и DEP зачастую недостаточно, поскольку в системе присутствуют файлы с выключенным ASLR, анализируя которые можно создать набор ROP-гаджетов (или использовать для этого модуль атакуемого приложения). Применение диверсификации решает данную проблему, поскольку найденные адреса ROP-гаджетов, смещения функций, системных структур оказываются непригодны для построения эксплойта на нескомпрометированных системах.

Разработчик/участник

Компиляторные технологии

Перейти к списку всех технологий