WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

загрузка...
   Добро пожаловать!

Pages:     | 1 | 2 ||

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

3. Генерация «мусорного» кода. На основе приведенных выше теоретических выкладок генерируется «фальшивый» код, работающий как с локальным, так и с глобальным контекстом. Обеспечивается полиморфизм кода за счет замены части исходных инструкций на набор других инструкций, выполняющих в своей совокупности те же действия (в том числе и с глобальным контекстом). В диссертационной работе приведен подробный пример алгоритма генерации «мусорного» кода. Алгоритм подразумевает добавление кода в соответствии с разработанными рекомендациями по построению запутывающих преобразований. Для генерации «мусорных» инструкций активно используется «фальшивый» глобальный и «фальшивый» локальный контекст.

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

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

a > C aop k > C op k (9) Операция op означает любую операцию, удовлетворяющую тождеству (9).

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

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

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

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

instr p : p,instr P, P П (10) Формула (10) дает формальное определение действий, выполняемых генератором полиморфного кода. instr – машинная инструкция, p – подпрограмма, обладающая тем же функциональным свойством, что и инструкция instr. Выбор подпрограммы осуществляется из конечного множества P мощностью k. Множество P является подмножеством всех подпрограмм с функциональным свойством. Основной задачей генератора полиморфного кода следует считать задачу сокрытия сигнатур. Если найдется алгоритм, который сможет установить взаимнооднозначное соответствие между инструкцией instr и подпрограммой p, то впоследствии можно осуществить деобфускацию при помощи алгоритмов сигнатурного поиска. Для того чтобы воспрепятствовать сигнатурному поиску, необходимо дополнить условие (10) следующим образом:

instri pi : pi,instri Pi , Pi Пi instri+1 pi+1 : pi+1,instri+1 Pi+1, Pi+1 Пi+……………………………………………………. (11) instri+m pi+m : pi+m,instri+m Pi+m, Pi+m Пi+m { instri,instri+1,...,instri+m } p : i * i+1 *...* i+m p p W( pi, pi+1,..., pi+m ) Исходные инструкции instri,instri+1,instri+m следуют друг за другом. На этапе генерации полиморфного кода они отображаются соответственно в подпрограммы pi, pi+1, pi+m. Далее эти подпрограммы объединяются в одну подпрограмму, но так, чтобы полученная подпрограмма p не представляла собой конкатенацию элементов pi, pi+1, pi+m - W( pi, pi+1,..., pi+m ). Эта технология была названа технологией пересечения полиморфных инструкций. Она заключается в том, что часть инструкций подпрограммы pi переносится в тело подпрограммы pi+1 и наоборот.

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

В генераторе полиморфного кода используются системы полных функций И-НЕ и ИЛИ-НЕ. Также используются следующие тождества:

x = x -x1 x2 = x1 + x2 - x1 x2 (12) x1 x2 = x1 + x2 - 2 ( x1 x2 ) Генератор полиморфного кода сконструирован таким образом, что инструкции, которые он создает, могут либо менять флаги произвольным образом - либо строго соответствовать спецификации.

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

В четвертой главе описана практическая реализация разработанных методик, алгоритмов и подходов, а также произведен анализ защищенности и скорости работы приложения, защищенного при помощи данных методик.

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

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

Подробно рассмотрены UML-диаграммы, описывающие статическую структуру разработанного программного обеспечения.

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

Kspeed = maxi( Cspeed 4 m FPT IterNumi ) (13) Kvalue = Cvalue 4 m k FPT (14) Коэффициенты Cspeed и Cvalue - коэффициенты, зависящие от платформы, на которой будет выполняться полученный код и от генератора машинного кода из промежуточного. IterNum в формуле (13) – это число вхождений в i-й базовый блок или число итераций в цикле. FPT - число «мусорных» инструкций на одну истинную, m – число констант, сгенерированных для сравнения. В результате проведения 200 замеров на различных подпрограммах было отмечено, что скорость работы запутанного кода уменьшается по сравнению с исходной не более чем на 2 порядка. В свою очередь размер запутанного кода увеличивается по сравнению с исходным не более чем на 2 порядка.

В результате оценки качества запутывающих преобразований, осуществляемых разработанными методиками, по методу, описанному в работе Гайсаряна, Чернова, Белеванцева и др., был сделан вывод, что качество запутывания при помощи данных методик превосходит качество обфускации, обеспечиваемое технологиями виртуализации на 30%.

Существующие методики оценки качества запутывающих преобразований не предполагают оценки потенциала исходных данных к запутыванию. Выделим ряд характеристик запутываемого кода – доля времени нахождения в запутываемом участке кода по отношению к времени работы всей программы (vc), доля инструкций перехода во внешнюю среду по отношению к общему количеству инструкций (tc) и процент редких инструкций по отношению к общему количеству инструкций (rc). Если vc некоторой функции превышает 20%, то данную функцию защищать не рекомендуется. Если tc превышает 30%, то данную функцию тоже не рекомендуется защищать так же, как если rc превышает 50%. Если функция удовлетворяет вышеописанным требованием, то качество запутывающих преобразований соответствует высокому уровню по Коллбергу.

В заключении изложены основные теоретические и практические результаты диссертационной работы.

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

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

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

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

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

6. Разработанные в диссертационной работе методики позволили повысить качество обфускации по сравнению с качеством, обеспечиваемым технологией виртуализации кода, на 30%. Оценка качества производилась по методике, описанной в работе Гайсаряна, Чернова, Белеванцева и др.

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

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

Публикации по теме работы 1. Щелкунов Д.А. Методика защиты от несанкционированного доступа и контроля действий оператора в системах оповещения на базе ОС Windows NT\2000\XP/ //III Российская НТК «Новые информационные технологии в системах связи и управления». – Калуга: ЦНТИ, 2004. – C. 171 – 173.

2. Мазин А.А., Щелкунов Д.А. Анализ и применение запутывающих преобразований при защите исполняемых файлов от несанкционированного использования //Всероссийская НТК «Прогрессивные технологии, конструкции и системы в приборо- и машиностроении» Материалы. – М:

МГТУ, 2005. – Т. 1. – С. 330 – 333.

3. Щелкунов Д.А. Методы автоматической защиты Windowsприложений от исследования и несанкционированной модификации // Технологии Microsoft в теории и практике программирования. Труды Всероссийской конференции студентов, аспирантов и молодых ученых. – М.:

МГТУ им. Н.Э. Баумана, 2006 – С. 96-97.

4. Щелкунов Д.А. Автоматическая защита программ от исследования и отладки // Интеллектуальные системы (INTELS 2006): Сб. Трудов VII Международ. симпоз. – Краснодар, 2006. – С. 401 – 405.

5. Семинар в рамках Ассоциации РусКрипто на тему «Защита информации: аспекты теории и вопросы практических приложений» http://www.ruscrypto.ru/netcat_files/File/seminar.015.zip 6. Щелкунов Д.А. Обфускация. Теоретические и практические аспекты., //Труды международной конференции РусКрипто, 1-4 февраля 2007 г. – http://www.ruscrypto.ru/sources/conference/rc2007/ 7. Щелкунов Д.А. Запутывание программ и внедрение в приложение стороннего кода // Технологии Microsoft в теории и практике программирования. Труды IV Всероссийской конференции студентов, аспирантов и молодых ученых. Центральный регион. – М.: Вузовская книга, 2007. – C.191 – 192.

8. Щелкунов Д.А. Применение запутывающих преобразований и полиморфных технологий для автоматической защиты исполняемых файлов от исследования и модификации. //Труды международной конференции РусКрипто, 3-6 апреля 2008 г.

http://www.ruscrypto.ru/sources/conference/rc2008/ 9. Щелкунов Д.А. Методика запутывания кода для автоматической защиты приложений от нелегального распространения //Безопасность информационных технологий. – М.: МИФИ, 2008. - №3. – С. 48 – 51.

Pages:     | 1 | 2 ||






© 2011 www.dissers.ru - «Бесплатная электронная библиотека»