Интегрированная среда для исследования "обфускации" программ

Чернов А.В.

Московский государственный университет,
ф-т ВМиК (Москва)

В докладе представляется интегрированная среда (ИС) для изучения методов "обфускации"1) программ, разрабатываемая в Институте системного программирования РАН (Москва).

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

К настоящему времени разработано около двух десятков различных обфускаторов (в основном Java-программ), среди которых есть и коммерческие. Развитые обфускаторы программ на языке Java, а так же обфускаторы программ на других языках программирования выполняют преобразования графа потока управления программы и её структур данных. Методы, используемые в таких обфускаторах, как правило, имеют эмпирический характер и слабо обоснованы теоретически. В работе [1] приведена классификация таких методов обфускации.

В последнее время интерес к задаче обфускации значительно вырос. Появились попытки формализации и теоретического обоснования задачи [2].

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

Цель разработки - получить удобную и мощную ИС для исследования методов и алгоритмов преобразования программ. С её помощью можно быстро получить прототип нового обфускирующего преобразования программ, проверить его устойчивость против разнообразных известных методов анализа, либо проверять устойчивость уже существующих алгоритмов обфускации.

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

ИС строится вокруг единого внутреннего представления программ MIF. Трансляторы с входных языков (в настоящее время это Си, планируется транслятор с языка Java) преобразуют входную программу во внутреннее представление. Анализаторы (построение SSA, построение графа зависимостей по данным, построение "слайсов" программы и пр.) позволяют анализировать программы. Преобразователи позволяют строить новый метод обфускации из уже имеющихся в системе компонент, добавлять новые компоненты обфускации в систему. Генераторы позволяют получить программу на выходном языке (в настоящее время это Си) по внутреннему представлению. Программа может быть подвергнута инструментализации для последующего сбора трасс. Инструментированную программу можно выполнить на наборе тестов, причём каждый тест может быть подан программе произвольное количество раз, собранная информация может быть проанализирована с помощью анализатора трасс, результатом анализа является "очищенный" граф потока управления программы, по которому можно перестроить анализируемую программу.

Комментарии к тезисам

Поскольку тема обфускации ещё достаточно нова, мы сочли полезным сопроводить тезисы комментарием, который более подробно раскрывает сущность задачи обфускации и очень коротко описывает состояние работ в этой области.

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

Для других языков программирования, таких как Си/Си++ и др. разработаны достаточно мощные методы обратной инженерии, которые позволяют по тексту программы автоматически восстановить её проектную документацию.

Такое положение дел не может устраивать разработчиков программного обеспечения, и в качестве одного из способов борьбы с этим рассматривается обфускация программ. Под обфускацией понимается преобразование программы с целью максимально затруднить её анализ и модификацию.

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

Более развитые обфускаторы программ на языке Java, а так же обфускаторы программ на других языках программирования выполняют преобразования графа потока управления программы и её структур данных. Методы, используемые в таких обфускаторах, как правило, имеют эмпирический характер и слабо обоснованы теоретически. В работе [1] приведена классификация всех таких методов обфускации.

В последнее время интерес к задаче обфускации значительно вырос. Появились попытки формализации и теоретического обоснования задачи. Так, в работе [2] авторы дают несколько возможных формальных определений обфускации, но при данных ими формулировках доказывают, что полная обфускация программы невозможна.

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

В работе [3] рассматривается метод обфускации программ на Си, основанный на преобразовании графа потока управления в "плоский" граф, где для передачи управления от одного базового блока к другому используется "диспетчер", который вычисляет номер следующего базового блока по номеру текущего, логическим условиям и, возможно, некоторой дополнительной информацией. Для повышения стойкости метода к статическому анализу предлагается использовать алиасы (например, указатели и арифметику указателей). Известно, что точный статический анализ алиасов является NP-трудной задачей, из чего делается вывод что метод устойчив против статического анализа программ..

Похожий метод применён в алгоритме фирмы Cloakware Corp. (Канада), теоретическое исследование которого проводилось в Институте системного программирования [4]. Показывается, что восстановление исходной программы требует решения вычислительно-сложной задачи.

Литература

  1. C. Collberg, C. Thomborson, D. Low, A Taxonomy of Obfuscating Transformations, Technical Report #148, http://www.cs.auckland.ac.nz/~collberg/Research/Publications/CollbergThomborsonLow97a/index.html, 1997.
  2. B. Barak, O. Goldreich, R. Impagliazzo, S. Rudich, A. Sahai, S. Vadhan, Ke Yang, On the (Im)possibility of Obfuscating Programs, Accepted to CRYPTO? 2001
  3. Wang C. Hill, J. Knights, J. Davidson, Software Tamper Resistance: Obstructing Static Analysis of Programs, Technical Report #12, Dep. Of Comp. Science, Univ. of Virginia, 2000.
  4. H. Johnson, S. Chow, V. Zakharov, An approach to the obfuscation of control-flow of sequential computer programs, Accepted to the 2001 Information Security Conference (ISC'01), to appear in LNCS.

1) Буквальный перевод английского глагола "obfuscate" - затемнять, запутывать, озадачивать, сбивать с толку, ставить в тупик. Поскольку работы на русском языке, посвящённые этой теме, практически отсутствуют, соответствующий термин ещё не выработан. Автор не взял на себя смелость сделать это в данной работе.



Ваши комментарии
[SBRAS]
[Головная страница]
[Конференции]
[СО РАН]

© 2001, Сибирское отделение Российской академии наук, Новосибирск
© 2001, Объединенный институт информатики СО РАН, Новосибирск
© 2001, Институт вычислительных технологий СО РАН, Новосибирск
© 2001, Институт систем информатики СО РАН, Новосибирск
© 2001, Институт математики СО РАН, Новосибирск
© 2001, Институт цитологии и генетики СО РАН, Новосибирск
© 2001, Институт вычислительной математики и математической геофизики СО РАН, Новосибирск
© 2001, Новосибирский государственный университет
Дата последней модификации Sunday, 23-Sep-2001 21:03:28 NOVST