Научная статья на тему 'Проверка методов обфускации Perl-программ'

Проверка методов обфускации Perl-программ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
563
143
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
обфускация / PERL / шифрование / obfuscation / PERL / encryption

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Мышенков Артём Алексеевич, Никонов Александр Иванович

В данной работе выполнен анализ проведения испытаний разрабатываемого обфускатора программ, написанных на языке PERL. Целью испытаний являлось выявления узких мест в защите программы, написанной на языке PERL, а также изучение методов взлома, используемых злоумышленниками. Разрабатываемый обфускатор использует для осуществления защитных преобразований комплекс методов обфускации и шифрования. Обфускация проводится в два этапа: лексические преобразования и шифрование исходного кода. Для усложнения обратного анализа для каждой зашифрованной строки кода используется свой ключ шифрования. Также в комплексе с методами шифрования используются методы проверки целостности в виде подсчета контрольной суммы. Испытания проводились в близких к реальным условиям в рамках межвузовских соревнований по информационной безопасности VolgaCTF 2015, где обфусцированная программа представлялась в качестве задания. В соревнованиях участвовали команды из разных стран. Некоторые из участников, решивших задание, рассматриваемое в данной статье, опубликовали алгоритм действий для решения задачи. В статье рассмотрены описания решений четырёх команд. На основе проведенного исследования были выявлены уязвимые места и предложены способы улучшения методов обфускации.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

VERIFICATION OF PERL PROGRAMS OBFUSCATION METHODS

In this article an analysis of a test of PERL program obfuscator is performed. An aim of the test was to identify bottlenecks in a protection of the program, written in PERL, and a research of hacking techniques used by hackers. Developing obfuscator uses a complex of obfuscation and encryption methods for performing protecting transforming. Obfuscation is performing in two stages: lexical transforming and encryption. The own encryption key is used for each encrypted line to complicate reverse engineering. As such, continuity testing methods in terms of checking sum are used in the complex with encryption methods. The experiment was carried out under practical conditions as a part of VolgaCTF 2015 interuniversity competition of information security. Obfuscated program was appeared as a task. Teams from different countries are participated in competition. Some of participants who solved a task published an algorithm of solving a task. Solving of four teams are reviewed in article. Based on result bottlenecks are identified and enhancement approaches of obfuscation methods are provided.

Текст научной работы на тему «Проверка методов обфускации Perl-программ»

Д • 7universum.com

ЖД UNIVERSUM:

ЛД ТЕХНИЧЕСКИЕ НАУКИ

ПРОВЕРКА МЕТОДОВ ОБФУСКАЦИИ PERL-ПРОГРАММ

Мышенков Артём Алексеевич

аспирант, Самарский государственный технический университет, 443100, Россия, г. Самара, ул. Молодогвардейская, 244

E-mail: artem.myshenkov@gmail.com

Никонов Александр Иванович

д-р техн. наук, профессор, Самарский государственный технический университет, 443100, Россия г. Самара, ул. Молодогвардейская, 244

E-mail: nikonovai@mail.ru

VERIFICATION OF PERL PROGRAMS OBFUSCATION METHODS

Artem Myshenkov

Postgraduate student, Samara State Technical University, 443100, Russia, Samara, str. Molodogvardeyskaya, 244

Alexander Nikonov

Doctor of Engineering sciences, professor, Samara State Technical University,

443100, Russia, Samara, str. Molodogvardeyskaya, 244

АННОТАЦИЯ

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

и шифрование исходного кода. Для усложнения обратного анализа для каждой

Мышенков А.А., Никонов А.И. Проверка методов обфускации PERL-программ // Universum: Технические науки : электрон. научн. журн. 2015. № 11 (22) .

URL: http://7universum.com/ru/tech/archive/item/2760

зашифрованной строки кода используется свой ключ шифрования. Также в комплексе с методами шифрования используются методы проверки целостности в виде подсчета контрольной суммы. Испытания проводились в близких к реальным условиям в рамках межвузовских соревнований по информационной безопасности VolgaCTF 2015, где обфусцированная программа представлялась в качестве задания. В соревнованиях участвовали команды из разных стран. Некоторые из участников, решивших задание, рассматриваемое в данной статье, опубликовали алгоритм действий для решения задачи. В статье рассмотрены описания решений четырёх команд. На основе проведенного исследования были выявлены уязвимые места и предложены способы улучшения методов обфускации.

ABSTRACT

In this article an analysis of a test of PERL program obfuscator is performed. An aim of the test was to identify bottlenecks in a protection of the program, written in PERL, and a research of hacking techniques used by hackers. Developing obfuscator uses a complex of obfuscation and encryption methods for performing protecting transforming. Obfuscation is performing in two stages: lexical transforming and encryption. The own encryption key is used for each encrypted line to complicate reverse engineering. As such, continuity testing methods in terms of checking sum are used in the complex with encryption methods. The experiment was carried out under practical conditions as a part of VolgaCTF 2015 interuniversity competition of information security. Obfuscated program was appeared as a task. Teams from different countries are participated in competition. Some of participants who solved a task published an algorithm of solving a task. Solving of four teams are reviewed in article. Based on result bottlenecks are identified and enhancement approaches of obfuscation methods are provided.

Ключевые слова: обфускация, PERL, шифрование.

Keywords: obfuscation, PERL, encryption.

Введение

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

В данной работе выполнен анализ проведения испытаний разрабатываемого обфускатора программ, написанных на языке PERL. Испытания проводились в условиях, близких к реальным, в рамках соревнований по информационной безопасности VolgaCTF 2015. Программа на языке PERL, обфусцированная разрабатываемыми средствами, была представлена в качестве задания соревнований. Целью задания было обойти средства обфускации и, таким образом, получить информацию, скрытую в исходном коде программы.

О соревнованиях CTF

CTF, или в переводе «Захвати флаг» (Capture The Flag), - это командные соревнования по защите информации. Цель этих соревнований - развитие и обучение специалиста по информационной безопасности в условиях, приближенных к реальным. Обычно соревнования проходят в 2-х форматах: task-based и собственно CTF. Первый формат используется в основном для проведения отборочных испытаний и заключается в решении заданий из разнообразных категорий, таких как реверс-инжиниринг, web, эксплойтинг, криптография. За решение каждого задания начисляется некоторое количество баллов. Целью формата task-based является получение как можно большего количества очков [3]. В основном формате соревнований команды получают идентичные серверы с предустановленным набором уязвимых сервисов. Задача участников - найти уязвимости, закрыть их у себя и воспользоваться ими для получения приватной информации (флагов) у соперников.

Соревнования VolgaCTF ежегодно проводятся в Самаре с 2011 года. С 1 по 3 мая 2015 года проводились отборочные соревнования VolgaCTF

в формате task-based, в которых приняли участие 605 команд из России и других стран всего мира [10]. Командам предлагалось решить 27 заданий различных категорий и уровней сложности, в том числе и задание, рассматриваемое в данной работе. Задание получило имя «gostfuscator» [9]. Задание было сформулировано так: «Try to solve a riddle...» (Попробуйте отгадать загадку). К заданию были приложены файлы, исследовав которые, можно было получить ответ.

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

Обфускация

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

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

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

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

Главными требованиями обфускации являются [1]:

Функциональные возможности - исходная семантика (поведение) защищаемой программы должна сохраняться. То есть результат выполнения

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

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

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

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

Авторами статьи разрабатывается обфускатор, направленный на защиту программ, написанных на языке PERL [4; 5]. PERL является очень гибким языком программирования. Это означает, что для реализации одной задачи возможно множество различных исполнений. Это открывает огромные возможности для обфускации и защиты программ, написанных на языке PERL. Существует множество методов обфускации PERL программ, но они обладают недостатками и уязвимостями. Поэтому задача совершенствования средств обфускации программ на PERL является актуальной.

Принцип работы обфускатора

Разрабатываемый обфускатор использует для осуществления защитных преобразований комплекс следующих методов обфускации и шифрования:

• Лексические преобразования - замена имен переменных и функций.

• Шифрование исходного кода. Для увеличения сложности взлома шифрование проводится построчно, а также для каждого уровня вложенности блоков исходного кода, таких как блоки циклов, условий и т. д. Для каждой зашифрованной строки или блока используется уникальный ключ шифрования. В качестве алгоритма шифрования используется ГОСТ 28147-89 [2].

• Проверка целостности, направленная против внесения изменений в исходный код программы.

Методы проверки целостности и шифрования исходного кода работают в комплексе, то есть при нарушении целостности строки будут расшифрованы некорректно. Функция проверки целостности использует встроенную переменную $ 0, которая хранит в себе путь к текущему исполняемому файлу программы [9]. Значения контрольной суммы интегрируются в исходный код в процессе зашифрования.

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

1. res.bin - Бинарный файл, содержащий зашифрованные строки и блоки исходного текста;

2. res.pl - Файл сценария, который выполняет расшифрование и запуск кода (рисунок 1);

3. G.pm - Файл подключаемого модуля, в который входит функция расшифрования и проверки целостности;

4. key - Файл, содержащий ключи шифрования.

use G;G->pon (} r-ie“'=G->g (-1) r-eval ^evr-for ( ?e=0 r-$e<=5#a r-5e++} {$e"-=G->g ( [ ?e] } r-eval $evr- }

Рисунок 1. Файл res.pl

Необходимость использования набора из 4 файлов обусловлена следующими факторами:

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

• для проведения процесса расшифрования, необходимо иметь ключевую информацию;

• сам модуль шифрования, а также модуль запуска расшифрованного кода не могут быть зашифрованы.

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

На основе данного комплекса методов было создано задание “gostfuscator”, которое должно было подтвердить данные уязвимости, а также выявить неизвестные.

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

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

• исследование и модификация функции шифрования, добавление вывода расшифрованных строк на экран или в файл;

• использование отладчика - “PERL-d”, трассировка программы -пошаговый вывод исполняемых строк;

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

Решение и результаты

Как показали результаты VolgaCTF 2015 задание «gostfuscator» решили 43 команды из 605, что уже говорит о достаточно высокой сложности решения задания.

После завершения соревнования в Интернете появилось несколько обзоров от тех команд, которые решили задание. Рассмотрим записи в блогах Whitehatters Academy (Команда из Великобритании) [11], MSM (Польша) [7], EVERNICK & RUINA (Республика Корея) [8].

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

Далее авторы указанных записей направили внимание на анализ подключаемого модуля G.pm, в котором находится функция g(). Результатом выполнения функции g() является расшифрованная строка кода, которая затем передается в качестве параметра функции eval() для выполнения(см. файл res.pl на рисунке 3). По результатам анализа модуля G.pm взломщики пришли к правильному решению - модификация функции g() и добавление вывода строк на экран (рисунки 2-4).

Это позволило получить доступ к расшифрованному коду и узнать пароль и ответ на вопрос

Стоит отметить, что автор под псевдонимом MSM (Польша) осуществил также попытку взлома функции проверки целостности. А именно путем сохранения оригинального файла res.pl под именем res.old.pl и заменой переменной $0 на путь к сохраненному файлу “res.old.pl” в процессе выполнения функции проверки целостности. Несмотря на то, что автор в итоге пошел более легким путем, данная уязвимость также могла позволить получить доступ к расшифрованному коду.

Рисунок 2. Модификация функции g() - Whitehatters Academy

program "bnonit si§" przed edycja; tzn. podowolnej edycji niedalo si^juz go uruchomic bow jakich siebie" i cos z tym robi. I faktycznie, program w kilku miejscach otwiera SO (zerowy argument wierc kochac perla). Zaczelismy od skopiowania res.pl do "res.old.pl" i podmiany wszystkich wystapieri I dopisalismy

print "result " . Jqmp . "= " . Jorc . "\n";

na koricu funkcji 'g' (funkcja g zwracata jakeis napisy: ktore pozniej byty evalowane.

Рисунок 3. Модификация функции g() - MSM

Рисунок 4. Модификация функции g() - EVERNICK & RUINA

Кроме трех упомянутых авторов, Akiym, представитель команды “dodododo” (Япония), опубликовал в своем блоге информацию о решении задания “gostfuscator” другим способом. Его команда решила задание с использованием отладчика «PERL -d» [7].

Выводы

По результатам проведенного исследования можно сделать следующие выводы.

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

• Добавить функцию проверки целостности подключаемого модуля G.pm наряду с проверкой целостности основного файла res.pl. Это позволит запретить внесение изменений в подключаемый модуль G.pm.

• Так как функция проверки целостности находится в том же модуле G.pm, она по-прежнему будет оставаться уязвимой. Например, остается возможность осуществить взлом путем замены переменной $ 0. Поэтому предлагается продублировать функцию проверки целостности внутри зашифрованного кода и обфусцировать или скрыть имя встроенной переменной $0 для предотвращения её замены.

• Разработать способы противодействия отладчику PERL.

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

Список литературы:

1. Варновский Н.П., Захаров В.А., Кузюрин Н.Н. Математические проблемы обфускации // Математика и безопасность информационных технологий. Материалы конференции в МГУ 28-29 октября 2004 г. - М.: МЦНМО, 2005. - С. 65-91.

2. ГОСТ 28147-89. Система обработки информации. Защита криптографическая. Алгоритм криптографического преобразования. - М.: Госстандарт СССР, 1989.

3. Межрегиональные межвузовские открытые соревнования в области информационной безопасности VolgaCTF / [Электронный ресурс]. -Режим доступа: URL: http://volgactf.ru/ (дата обращения: 02.11.2015).

4. Никонов А.И., Мышенков А.А. Исследование методов обфускации программных продуктов и алгоритмов // Материалы VI Всероссийской научно-технической конференции 13-14 декабря 2012 г. СамГТУ, Самара. -С. 76-78.

5. Никонов А.И., Мышенков А.А. Создание комплексной защиты программного кода с использованием обфускации // Материалы VII Всероссийской научно-технической конференции 20-21 марта 2014 г. СамГТУ, Самара. - С.152-154.

6. 4programmers.net. Writeup VolgaCTF 2015 / [Электронный ресурс]. - Режим

доступа: URL: http://forum.4programmers.net/Spolecznosc/251462-

writeup_volgactf_2015 (дата обращения: 02.11.2015).

7. Akiym - Twitter / [Электронный ресурс]. - Режим доступа: URL:

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

https://twitter.com/akiym/status/594903878941876224 (дата обращения:

02.11.2015).

8. EVERNICK & RUINA / [Электронный ресурс]. - Режим доступа: URL: http://ruinick.tistory.com/109 (дата обращения: 02.11.2015).

9. PERL Programming Documentation / [Электронный ресурс]. - Режим доступа: URL: http://perldoc.perl.org/perl.html (дата обращения: 02.11.2015).

10. VolgaCTF 2015 Quals / [Электронный ресурс]. - Режим доступа: URL: http://2015.volgactf.ru/ (дата обращения: 01.07.2015).

11. Whitehatters Academy. VolgaCTF 2015 gostfuscator / [Электронный ресурс]. -

Режим доступа: URL: https://www.whitehatters.academy/volgactf-2015-

gostfuscator/ (дата обращения: 02.11.2015).

References:

1. Varnovsky N.P., Zakharov V.A., Kuzyurin N.N. Mathematical problems of obfuscation. Matematika i bezopasnost' informacionnyh tekhnologij. Materialy konferencii v MGU 28-29 oktiabria 2004 [Mathematics and Information Technologies Security. Materials of conference in MSU 28-29 October 2004]. Moscow, MCNMO Publ., 2005, pp. 65-91 (In Russian).

2. GOST 28147-89. State Standard 28147-89. The information processing system. Protection cryptographic. Algorithm of cryptographic transformation. Moscow, Gosstandart USSR Publ., 1989 (In Russian).

3. VolgaCTF is a regional interuniversity open computer security contest. Available at: http://volgactf.ru/ (accessed 2 November 2015).

4. Nikonov A.I., Myshenkov A.A. Research on methods of obfuscation programs and algorithms. Materialy VI Vserossijskoj nauchno-tekhnicheskoj konferencii /Materials of VI all-russian technology science conference], 2012, SamGTU Publ., Samara, pp. 76-78 (In Russian).

5. Nikonov A.I., Myshenkov A.A. Establishment of an integrated software protection code using obfuscation. Materialy VII Vserossijskoj nauchno-tekhnicheskoj konferencii [Materials of VII all-russian technology science conference]. 2014, SamGTU Publ., Samara, pp. 152-154 (In Russian).

6. 4programmers.net. Writeup VolgaCTF 2015. Available at: http://forum.4programmers.net/Spolecznosc/251462-writeup_volgactf_2015 (accessed 2 November 2015).

7. Akiym - Twitter. Available at: https://twitter.com/akiym/status/

594903878941876224 (accessed 2 November 2015).

8. EVERNICK & RUINA. Available at: http://ruinick.tistory.com/109 (accessed 2 November 2015).

9. PERL Programming Documentation. Available at:

http://perldoc.perl.org/perl.html (accessed 2 November 2015).

10. VolgaCTF 2015 Quals. Available at: http://2015.volgactf.ru/ (accessed 1 July 2015).

11. Whitehatters Academy. VolgaCTF 2015 gostfuscator Available at:

https://www.whitehatters.academy/volgactf-2015-gostfuscator/ (accessed

2 November 2015).

i Надоели баннеры? Вы всегда можете отключить рекламу.