Статья 'Анализ методов обфускации' - журнал 'Кибернетика и программирование' - NotaBene.ru
по
Меню журнала
> Архив номеров > Рубрики > О журнале > Авторы > О журнале > Требования к статьям > Редакция и редакционный совет > Порядок рецензирования статей > Политика издания > Ретракция статей > Этические принципы > Политика открытого доступа > Оплата за публикации в открытом доступе > Online First Pre-Publication > Политика авторских прав и лицензий > Политика цифрового хранения публикации > Политика идентификации статей > Политика проверки на плагиат
Журналы индексируются
Реквизиты журнала

ГЛАВНАЯ > Вернуться к содержанию
Кибернетика и программирование
Правильная ссылка на статью:

Анализ методов обфускации

Коробейников Анатолий Григорьевич

доктор технических наук

профессор, Санкт-Петербургский филиал Федерального государственного бюджетного учреждения науки Института земного магнетизма, ионосферы и распространения радиоволн им. Н.В.Пушкова Российской академии наук.

199034, Россия, г. Санкт-Петербург, ул. Менделеевская, 1

Korobeinikov Anatolii Grigor'evich

Doctor of Technical Science

professor, Pushkov institute of terrestrial magnetism, ionosphere and radio wave propagation of the Russian Academy of Sciences St.-Petersburg Filial

199034, Russia, g. Saint Petersburg, ul. Mendeleevskaya, 1

Korobeynikov_A_G@mail.ru
Другие публикации этого автора
 

 
Кутузов Илья Михайлович

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

197101, Россия, г. Санкт-Петербург, Кронверский проспект, 49

Kutuzov Il'ya Mikhailovich

graduate student, Department of Design and Security of Computer Systems, St. Petersburg National Research University of Information Technologies, Mechanics and Optics

197101, Russia, St. Petersburg, Kronverkskiy prospect, d. 49

formalizator@gmail.com
Другие публикации этого автора
 

 
Колесников Павел Юрьевич

аспирант, , Санкт-Петербургский национальный исследовательский университет информационных технологий, механики и оптики

197101, Россия, г. Санкт-Петербург, Кронверкский пр-кт, 49

Kolesnikov Pavel Yur'evich

graduate student, St. Petersburg National Research University of Information Technologies, Mechanics and Optics

197101, Russia, g. Saint Petersburg, Kronverkskii pr-kt, 49

Korobeynikov_A_G@mail.ru

Дата направления статьи в редакцию:

20-11-2014


Дата публикации:

04-12-2014


Аннотация: Современные компьютерные технологии делают актуальными различные задачи в сфере информационной безопасности. Например, для защиты авторских прав на изображения применяют методы стеганографии. Для решения задачи доказательства авторства (или наоборот скрытия такового) программного кода используют методы обфуска́ции. Обфуска́ция (от лат. Obfuscare – затенять, затемнять; и англ. Obfuscate – делать неочевидным, запутанным, сбивать с толку) или запутывание кода – это процесс приведения исходного текста или исполняемого кода программы к виду, сохраняющему ее функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции. В настоящее время имеются специальные программы, производящие обфускацию, называемые обфускаторами, которые решают поставленную задачу по-разному. В данной статье рассматриваются основные методы обфускации от самых простых полиморфных генераторов до изощренных обфускаторов, выполняющих математические преобразования программного кода, а так же взаимосвязь обфускации и повышения эффективности исполнения программного кода и уменьшению размера программы. Описано дальнейшее развитие методов обфускации.


Ключевые слова: обфускация, стеганография, авторские права, защита информации, сокрытие информации, методы обфускации, распознавание, обфускатор, оптимизация, декомпиляция

УДК:

003.26.09

Abstract: Modern computer technology makes it a variety of tasks relevant to the field of information security. For example, for the protection of copyright in the images methods of steganography are used. To solve the problem of proving authorship (or vice versa) code obfuscation techniques are used. Obfuscation (from Lat. Obfuscare - obscure, obfuscate, and English. Obfuscate - make non-obvious, confusing, confusing) or obfuscated code - is the process of bringing the source code or executable program code to the form, that keeps its functionality, but complicates the analysis, understanding algorithms and modification during decompilation. Currently, there are special programs called obfuscators that performes obfuscation to solve the task in different ways. The article discusses the techniques of obfuscation from the most basic to sophisticated polymorphic generators obfuscators performing the mathematical transformation of the code, as well as the relationship of obfuscation and efficiency of program code execution and reduce the size of the program. The authors describe further development of obfuscation techniques.



Keywords:

optimization, obfuscator, recognition, methods of obfuscation, concealment of information, information protection, copyright, steganography, obfuscation, decompilation

Введение

В настоящее время имеются специальные программы, производящие обфускацию[1], называемые обфускаторами, которые решают поставленную задачу по-разному. Например, одни занимаются интерпретируемыми языками типа PHP и изменяют исходные тексты (удаляют комментарии, дают переменным бессмысленные имена, шифруют строковые константы и т.д.), другие изменяют байт-код виртуальных машин Java и .NET, что технически сделать намного труднее. Более развитые обфускаторы изменяют машинный код, вставляя бессмысленные инструкциями. Кроме того они могут делать структурные или математические преобразования, изменяющие программу до неузнаваемости.

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

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

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

Рассмотрим основные методы обфускации.

Методы обфускации

Первые, и самые простые, обфускаторы являются давно известными полиморфными генераторы. Они за небольшое время генерируют бесполезные команды вида nop, xchg reg,reg, никогда не выполняющимися переходами типа xor reg,reg/jnz junk, где xor — значимая команда, а junk — «мертвый код», и вставляя их в значимый код. Конечно, при этом происходит некоторая потеря эффективности, но это не критично.

Современные дизассемблеры не могут эффективно удалять «мусор» в автоматическом режиме, а проанализировать мегабайты кода вручную нереально. Но идеи как это делать имеются, например наложение маршрута трассировки на графы зависимостей по данным.

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

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

Изощренные обфускаторы отслеживать зависимость по данным, внедряя осмысленные инструкции с «нулевым эффектом».

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

Разработка качественного и надежного запутывателя – сложная инженерная задача, но потраченное время стоит того[2]. Бесполезность «инструкций с нулевым эффектом» уже не распознается визуально, и обычный трассер тут ничем не поможет. Необходимо трассировать не только поток управления, но и поток данных, то есть отслеживать реальные изменения значений регистров/ячеек памяти, для чего обычно используются графы. Как только граф замыкается сам на себя, все «лишние» операции над данными удаляются и остается только суть.

Более совершенные обфускаторы выполняют математические преобразования программного кода. Например, команда «a++» может быть заменена на эквивалентную ей конструкцию a += abs(exp(I*x)), где abs(exp(I*x)) – модуль экспоненциального представления комплексной величины, вычисляемый при помощи разложения в ряд Тейлора. Распознать в такой записи исходную формулу очень трудно.

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

Повышение эффективности

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

В качестве примера используем язык Java. Сначала создадим пример исходного текста программы.

public static void multiply(ArrayList array){

int length = array.size();
double multiplier = 0.1;
for(int i=0; i<length; i++){

double result = array.get(i)*multiplier;
array.set(i, result);
}
}

В обфусцированном варианте данный код выглядит следующим образом:

public static void a1(ArrayList a2){

for(int a3=0;a3<a2.size(); a3++) a2.set(a3, a2.get(a3)*0.1);

}

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

Заключение

Дальнейшее развитие методов обфускации ставит перед хакерам трудные задачи по взлому программного обеспечения. С ходу можно назвать трансляторы С-кода в байт-код Машин Тьюринга, Стрелок Пирса, Сетей Петри и многих других примитивных машин. Производительности современных процессоров уже достаточно. В практическом плане это означает бесперспективность анализа кода стандартным методам. Если теоретически возможно (но практически очень и очень сложно) вычистить мусор и удалить избыточность, внесенную «запутывателями», то «распутать» байт-код Сетей Петри уже невозможно.

Далее, обфускация создает новую ситуацию в антивирусной индустрии. Чтобы взломать программу, анализировать ее алгоритм в общем-то необязательно. Зато обнаружить зловредный код (он же malware) без этого уже не удастся!

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

Библиография
1.
Коробейников А.Г., Кувшинов С.С. Cистема скрытой передачи сообщений в графических изображениях формата JPEG//Научно-технический вест¬ник СПб ГУ ИТМО– СПб: СПбГУ ИТМО, 2008.– вып. 51.– с.152-159.
2.
Анализ запутывающих преобразований программ//CIT Forum URL: http://citforum.ru/security/articles/analysis/(дата обращения: 21.03.2012).
References (transliterated)
1.
Korobeinikov A.G., Kuvshinov S.S. Cistema skrytoi peredachi soobshchenii v graficheskikh izobrazheniyakh formata JPEG//Nauchno-tekhnicheskii vest¬nik SPb GU ITMO– SPb: SPbGU ITMO, 2008.– vyp. 51.– s.152-159.
2.
Analiz zaputyvayushchikh preobrazovanii programm//CIT Forum URL: http://citforum.ru/security/articles/analysis/(data obrashcheniya: 21.03.2012).
Ссылка на эту статью

Просто выделите и скопируйте ссылку на эту статью в буфер обмена. Вы можете также попробовать найти похожие статьи


Другие сайты издательства:
Официальный сайт издательства NotaBene / Aurora Group s.r.o.
Сайт исторического журнала "History Illustrated"