Автор: Пользователь скрыл имя, 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.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]).
Удаление отладочной информации применимо, когда запутывание выполняется на уровне объектной программы. Удаление отладочной информации приводит к тому, что имена локальных переменных становятся невосстановимы.
Изменение имён локальных переменных требует семантического анализа (привязки имён) в пределах одной функции. Изменение имён всех переменных и функций программы помимо полной привязки имён в каждой единице компиляции требует анализа межмодульных связей. Имена, определённые в программе и не используемые во внешних библиотеках, могут быть изменены произвольным, но согласованным во всех единицах компиляции образом, в то время как имена библиотечных переменных и функций меняться не могут.
Информация о работе Метод защиты программных средств на основе запутывающих преобразований