Метод защиты программных средств на основе запутывающих преобразований

Автор: Пользователь скрыл имя, 23 Марта 2012 в 03:04, дипломная работа

Краткое описание

Актуальность работы. Многие направления науки и техники, имеющие отношение к получению, обработке, хранению и передаче ин­формации, в значительной степени ориентируются на развитие современ­ных компьютерных систем (КС) [30]. Такие системы представляют разно­образную и весьма сложную совокупность вычислительных устройств, систем обработки информации, телекоммуникационных технологий, про­граммного обеспечения и высокоэффективных средств его проектирова­ния и в общем случае представляющие гетерогенную программно-аппаратную среду.

Оглавление

Введение 4
Глава 1. Анализ методов защиты программных средств 11
1.1 Методы защиты информации с помощью аппаратных средств 12
1.2 Программные средства защиты информации 16
1.3 Анализ программных средств как объекта защиты 21
1.4 Анализ структуры программных систем защиты информации 24
1.5 Выводы 26
Глава 2. Построение методов защиты программных средств с помощью,
запутывающих преобразований 28
2.1 Понятие запутывающих преобразований для реализации защиты
программных средств вне доверенной вычислительной среды 29
2.2 Классификация запутывающих преобразований 32
2.2.1 Преобразования форматирования 32
2.2.2 Преобразования структур данных 33
2.2.3 Преобразования потока управления .34
2.3 Классификация методов анализа программ .44
2.3.1 Методы статического анализа .45
2.3.2 Методы статистического и динамического анализа 47

2.4 Классификация способов запутывания к применяемым методам анализа и распутывания программ 48
2.5 Оценка эффективности применения запутывающих преобразований 50
2.6 Выводы .51
ГлаваЗ. Построение метода защиты программных средств с помощью
запутывающих преобразований ;.53
3.1 Построение графа потока управления 56

з
3.2 Преобразование графа потока управления 60
3.5 Теоретическое обоснование устойчивости метода 68
3.6 Практическое обоснование устойчивости мето да 71
3.7 Выводы 72
Глава 4. Решение практических задач защиты программных средств 74
4.1 Анализ характеристик методов защиты программных средств 74
4.2 Выбор объектов тестирования 74
4.3 Методика оценки эффективности защиты 75
4.3.1 Оценка эффективности программных средств 80
4.4 Оценка устойчивости метода к ручному анализу и дизассемблированию85
4.4.1 Подготовка эксперимента 85
4.4.2 Описание результатов эксперимента 86
4.4.3 Результаты дизассемблирования 90

4.5 Определение размера требуемых ресурсов вычислительной системы 91
4.6 Показатели применимости разработанного метода защиты программных средств 99
4.7 Выводы 101
Заключение 103
Список использованной литературы 106

Файлы: 1 файл

диссер.doc

— 2.60 Мб (Скачать)


Блок ответной ре­акции



Рисунок 1.1 - Структура программной системы защиты от НСД

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

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



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

Из этого следует, что оптимально применять защиту ПС вне доверен­ной вычислительной среды для следующих классов ПС:

1.     ПС с низкой стоимостью копии и большим тиражом (компью­терные игры, электронные энциклопедии и т.п.);

2.     программные системы лицензирования ПС;

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

Для защиты ПС с высокой стоимостью следует применять программ­ные средства защиты совместно с аппаратными средствами.

1.5 Выводы

На основании проведенного в данной главе анализа методов и подхо­дов к защите информации можно сделать выводы об ограниченном коли­честве способов реализации защиты ПС.

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

В настоящее время методы защиты ПС вне доверенной вычислитель­ной среды основываются на разработке защиты против конкретных атак.



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

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

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



28

Глава 2. Построение методов защиты программных средств с помощью запутывающих преобразований

Проведенный анализ литературных источников [7, 19, 23, 28, 66, 70, 71, 75, 85, 87, 103, 104] позволяет сделать вывод, что в качестве основы для построения методов защиты ПС вне доверенной вычислительной сре­ды целесообразно использовать запутывающие преобразования, направ­ленные на обеспечение скрытности деталей реализации программных продуктов. Такой подход к построению методов защиты ПС приведен на рисунке 2.1.



 

Разработчик программного продукта

 

>

*

 

Исходная программа

 

>

>

 

Процессы запутывания исходной программы

 

>

'

 

Конечная программа (ее копии)

 


Передача

программного

продукта


Пользователь программного продукта

Инсталляция программного продукта

Запуск и выполнение программы



Рисунок 2.1 - Использование запутывающих преобразований для защи­ты программных продуктов Цель данной главы определить понятие запутывающих преобразова­ний и провести анализ, их классификацию в аспекте защиты от средств ис­следования. На основании созданной классификации и анализа провести оценку эффективности существующих методов защиты запутывающими преобразованиями, определить их достоинства и недостатки для дальней­шего построения метода защиты ПС.



29

2.1 Понятие запутывающих преобразований для реализации

защиты программных средств вне доверенной вычислительной

среды

Определим понятия запутывающие преобразования, запутанная про-
*              грамма, процесс запутывания. [71 ]

Запутывающие преобразования (obfuscating transformations) - это преоб­
разования, в результате применения которых к исходной программе изменя­
ется ее структура или код, но при этом она остается работоспособной и вы­
полняет те же функции. Запутанной (obfuscated) программой называется про­
грамма, которая после применения запутывающих преобразований, на всех
допустимых для исходной программы входных данных выдаёт тот же самый
ц              результат, что и оригинальная программа, но более трудна для анализа, по-

нимания и модификации (А.В. Чернов, ИСП РАН, 2002г.).

Процесс запутывания [105] - это процесс трансформации исходной про­граммы с помощью запутывающих преобразований, после которого про­грамма становится запутанной, т.е.:

Пусть Тг будет трансформирующим процессом исходной программы Ргх, тогда при Prx -=>Tr=> Pr2.

Программа Рг2 будет представлять собой трансформированный код про-

4

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

- код программы Рг2 в результате трансформации будет существенно от­личаться от кода программы Prx, но при этом он будет выполнять те же функции что и код программы Ргх;

і;              - изучение принципа работы, то есть процесс реверсивной инженерии

программы Рг2 будет более сложным, трудоемким, и будет занимать больше времени t, чем программы Prx, т.е.    tPr > tPr;



зо

-       при каждом процессе трансформации одного и того же кода программы Prx, код программ Ргг будут различны;

-       создание   программы детрансформирующей программу Рг2 в ее перво­начальный вид, будет неэффективно.

Дадим формальное определение запутывателя свойства Р класса про­грамм Р сформулированное В.А. Захаровым и А.В. Черновым [71, 103].

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

Эффективная программа (машина Тьюринга) - программа, работающая полиномиальное от длины входа время и требующая полиномиальную от длины входа рабочую память на всех входах, на которых программа завер­шается.

Пусть Q - множество всех программ (машин Тьюринга), удовлетво­ряющих сформулированным выше ограничениям, и пусть программа PreQ вычисляет функцию fPr \Input -> Output.

Подмножество 0qQ называется функциональным свойством если V/VlfiV2 є Q(fPn = fPr2 => {Prx ep<^>Pr2e /?)).

Пусть p - функциональное свойство, N czQ - класс программ такой, что существует эффективная программа Ргэ такая, что для любой программы

PreN PrJPr) = \l,PreP .
эК              [0,Pr£j3

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

Вероятностная программа /Vz называется запутывателем класса N от­носительно свойства /?, (N,fi) -запутывателем, если выполняются условия:

-              Эквивалентность преобразования запутывания, т.е.:
l.PreN, PreP;



31 2. Pr'zPrz(Pr);

-* • JPr ~ JPr' >

4. \Pr'\ = poly(\Pr\), где \Pr\ и |Pr'| - размер программы Pr и /V; 5.Vxedom(fPr), timePr,{x)-poly(timePr(x)), т.е. timePr,(x) ограничен по­линомом некоторой степени от переменной timePr(x), где timePr(x) -время выполнения программы Рг на входе х. -   Трудность определения свойств по запутанной программе.

Для любого полинома q и для любой программы (вероятностной ма­шины Тьюринга) Ргт такой, что PrT(Prz(Q)) = (ОД) и для любой PreQ вы­полняется timePrT{Prz{Pr)) = poly(\Prz(Pr)\), существует программа (вероят­ностная машина Тьюринга с оракулом) PrTO, и при этом для любой PreQ

p[PrT(Prz(Pr)) = Ргэ(Рг)] - p[PrT0Pr{^) = Ргэ(Рг)]

<

\             

q(\Pr\)'

т.е. вероятность определить свойство (3 по запутанной программе равна ве­роятности определения свойства Р только по входам и выходам функции fPr, т.е. наличие текста запутанной программы ничего не даёт для выявления

свойств этой программы.

Универсальный запутыватель - это программа О, которая для любого класса программ N и любого свойства Р является (Л^/О-запутывателем.

Авторами В. Barak, О. Goldreich и др. в работе [77, 78] приведено дока­зательства того, что универсального запутывателя не существует.

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



32

2.2 Классификация запутывающих преобразований

В зависимости от того, на трансформацию какой из компонент программы направлены запутывающие преобразования, их можно разделить на несколько групп (А.В.Чернов, ИСП РАН, 2002г.) [70, 71, 87]:

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

-         преобразования структур данных, изменяющие структуры данных, с которыми работает программа. К этой группе относятся, преобразо­вания, изменяющее иерархию наследования классов в программе, или преобразования, объединяющее скалярные переменные одного типа в массив;

-         преобразования потока управления программы, которые изменяют структуру её графа потока управления, такие как развёртка циклов, выделение фрагментов кода в процедуры, и другие;

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

2.2.1 Преобразования форматирования

К преобразованиям форматирования относятся удаление комментариев, переформатирование программы, удаление отладочной информации, изме­нение имён идентификаторов [70, 71, 82].

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



33

При переформатировании программы исходное форматирование теряет­ся, но программа всегда может быть переформатирована с использованием какого-либо инструмента для автоматического форматирования программ (indent, для программ на языке Си [34]).

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

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

Информация о работе Метод защиты программных средств на основе запутывающих преобразований