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

кандидата технических наук
Аранов, Владислав Юрьевич
город
Санкт-Петербург
год
2014
специальность ВАК РФ
05.13.19
Автореферат по информатике, вычислительной технике и управлению на тему «Метод защиты исполняемого программного кода от динамического и статического анализа»

Автореферат диссертации по теме "Метод защиты исполняемого программного кода от динамического и статического анализа"

Лранов Владислав Юрьевич

На правах рукописи

МЕТОД ЗАЩИТЫ ИСПОЛНЯЕМОГО ПРОГРАММНОГО КОДА ОТ ДИНАМИЧЕСКОГО И СТАТИЧЕСКОГО АНАЛИЗА

Специальность 05.13.19 - «Методы и системы защиты информации, информационная безопасность»

Автореферат диссертации на соискание ученой степени кандидата технических наук

25 СЕН 2014

Санкт-Петербург - 2014

005552712

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

государственный политехнический университет».

Научный руководитель:

Заборовский Владимир Сергеевич доктор технических наук, профессор,

доктор технических наук, профессор, заведующий кафедрой «Телематика» ФГБОУ ВПО «Санкт-Петербургский государственный политехнический университет»

Официальные оппоненты: Котенко Игорь Витальевич

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

Томилин Василий Николаевич кандидат технических наук системный инженер, ООО «Снско Системе»

Ведущая организации:

Балтийский Государственный Технический Университет "ВОЕНМЕХ" им. Д.Ф. Устинова, 198005, г. Санкт-Петербург, 1-я Красноармейская д. 1

Защита состоится «9» октября 2014 г. в 16:00 на заседании диссертационного совета Д 212.229.27 при ФГБОУ ВПО «Санкт-Петербургский государственный политехнический университет» по адресу 195251, Санкт-Петербург, ул. Политехническая, 29, ауд. 175 главного здания.

С диссертацией можно ознакомиться в библиотеке и на сайте 11Пр://\уту.5рЬ5Ш.ги/5с1епсе/с1еГепсез.111п11 ФГБОУ ВПО «Санкт-Петербургский государственный политехнический университет».

Автореферат разослан <<^">> сентября 2014г.

Ученый секретарь диссертационного совета:

Платонов Владимир Владимирович

АКТУАЛЬНОСТЬ ТЕМЫ ДИССЕРТАЦИИ

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

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

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

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

Актуальность решения задач повышения информационной безопасности компьютерных систем, построенных на базе современных технологии виртуализации и облачных вычислений, отмечается многими российскими и зарубежными учёными, в том числе В.А. Захаровым, П.Д. Зегждой, В.П. Бойко, B.C. Заборовским, П.П. Кузюриным, А.В. Шокуровым, Р.П. Подловченко, В.Л. Щербина, Н.П Варновскнм, С.С. Гайсаряном, В.П. I ¡Банниковым, А.И. Аветисяном, К. Коллбергом, К. Сомборсоном, Д. Внкстромом, Д.Лоу, Б. Бараком, Д. Бсргстромом, Ф. де Клю.

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

п

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

Целью исследовании является разработка метода защиты исполняемого программного кода от компьютерных атак обратного проектирования на основе динамического и статического анализа данных.

Для достижения поставленной цели в диссертационной работе были решены следующие

задачи:

1. Разработка модели угроз, связанных с использованием технологий обратного проектирования исполняемого программного кода, основанных на динамическом анализе (отладке) и статическом исследовании исполняемого кода.

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

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

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

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

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

Предмет исследования: метод защиты исполняемого программного кода от статических и динамических средств анализа и обратного проектирования.

Научная новизна работы: метод защиты при помощи запутывающих преобразований программного кода путем создания ПИОК с псевдослучайной архитектурой для его исполнения в недоверенной среде, подвергающейся компьютерным атакам обратного проектирования. В диссертационном исследовании, получены следующие новые научные результаты:

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

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

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

Положении, выносимые на защиту:

1. Модель угроз обратного проектирования машинного кода при условии доступа к исполняемому программному коду.

2. Алгоритм создания ПИОК с псевдослучайной архитектурой, исполняющих защищенный от обратного проектирования код программ, предназначенных для выполнения в вычислительной среде с возможностью нсавторизованного доступа к исполняемому коду.

3. Метол защиты исполняемого кола, основанный на запутывающих преобразованиях, которые используют изменение потока управления и внесения избыточности с помощью сетей Петри.

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

5. Архитектура программной системы, предназначенной для затруднения статического исследования защищаемого кода и противодействия динамическому анализу.

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

Практическая значимость работы. Результаты исследований, полученные в ходе выполнения диссертационной работы, были успешно апробированы при выполнении государственного контракта на проведение НИР (шифр «Защита-НД») по заказу министерства промышленности и торговли РФ за номером 192/11-ЭКБ-27.09ок в рамках работ по федеральной целевой программе "Развитие электронной компонентной базы и радиоэлектроники" на 2008-2015 годы, а также в учебном процессе и научных исследованиях на кафедре «Прикладная математика» ФГБОУ ВПО «СПб ГПУ» в рамках курса «Защита информации: Защита программных продуктов от нелегального копирования и методы исследования вредоносного ПО»

Апробации и публикации результатов работы. Основные результаты исследования обсуждались на Общероссийской научно-технической конференции «Информационная безопасность регионов России» 2013, г. Санкт-Петербург; на XL.II научно-практической конференции с международным участием «Неделя науки СПб ГПУ»; на Научном семинаре «Проблемы современных информационно-вычислительных систем» под руководством д. ф.-м. н., проф. В. А. Васенина в МГУ им. Ломоносова.

Основные результаты и положения работы опубликованы в 5 научных статьях, в том числе 2 статьи в изданиях, входящих в перечень Высшей аттестационной комиссии Министерства образования и науки Российской Федерации.

Структура и объем Днестр!анионной работы. Диссертационная работа объемом ИЗ машинописных страниц, содержит введение, четыре главы и заключение, список литературы, содержащий 36 наименований и 7 приложений. Общий объем работы - 113 е., 14 рис., 13 таб.

СОДЕРЖАНИЕ ДИССЕРТАЦИИ

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

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

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

Выбор кода для защиты

Применение стандартных обфускаций

Применение технологий противодействия отладке

Преобразование в промежуточное представление

Выбор псевдослучайной архитектуры ВП

Компиляция в байт-код

Создание интерпретатора команд ВП

Применение обфускации на основе сети Петри

Применение стандартных обфускаций

/ \

Оценка ч / возможности X. дополнительного /

Чуровня защитьк

\ /'

Выбор кода интерпретатора как нового кода для защиты

Применение технологий противодействия отладке

Применение самомодифициру ющегося кода

Сохранение защищенного кода на диск

Рис. 1. Метод защиты исполняемого программного кода

Анализируются недостатки существующих методов обфускации и показано, что для их преодоления можно использовать процедуры поэтапного преобразования исполняемого кода, инвариантом которого является семантика целевого алгоритма. В главе делается вывод о перспективности, актуальности и практической значимости применения метода поэтапного преобразования, а также выдвигаются требования к программным и пользовательским интерфейсам. В конце главы приведена постановка задачи исследования, которая базируется на анализе исполняемого кода с помощью инструментальной системы трансформации и оптимизации программ LLVM (Low Level Virtual Machine), формировании списка всех доступных для защиты подпрограмм, находящихся в объектном файле, анализа набора инструкций, используемых подпрограммой, а также выбора критического блока машинных инструкций, которые трансформируется в байт-код команд ПИОК (рис. 2).

При этом замещение защищаемого исполняемого кода происходит на уровне вызова удаленной подпрограммы интерпретатором ПИОК с параметрами, идентичными тем, которые использовались в исходном исполняемом коде с добавлением адреса точки входа в байт-код защищенной подпрограммы.

Исходный файл

Защищенный файл

Защищаемый код

Защищенный код

Код

интерпретатора ПИОК

Процесс защиты

/ 4

/

/ Код на языке ассемблера

^ инструментального процессора

Ч

К,

ч

Машинный код на языке ПИОК, Используемый интерпретатором ПИОК

\

Код на языке ассемблера инструментального процессора

Рис. 2 Пример незащищенного (исходного) и защищенного программного кода

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

Предложена модель угроз обратного проектирования исполняемого кода программы с помощью методов динамического и статического анализа. Модель угроз представляет собой кортеж из трех компонент <5, О, А>, где Б - субъект атаки, О объект атаки, А - атакующее действие. Показано, что структура компонент модели может быть представлена следующим образом:

• Субъект атаки Б = эя, ¡в>:

о Множество автоматизированных средств динамического анализа кода (в):

отладчики, средства мониторинга вызовов сервисов операционной системы, о Множество полуавтоматических средств анализа кода (ей): дизассемблеры,

анализаторы графа достижимости, о Множество интеллектуальные средства анализа (¡5): семантическая сеть, генетические алгоритмы.

• Объекты атаки О = <гп, I, р>:

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

• Атакующее действие А = <о, с>, А- <А, Ь>:

о о - операция по сбору данных о переменных, адресах областей памяти

исполнения кода и их порядка выполнения, о с - преобразование кода к текстовому формату.

о Ь наблюдение за поведением защищаемого алгоритма с использованием парадигмы «черного ящика» путем анализа входных и выходных данных.

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

В результате модель угроз обратного проектирования может быть редуцирована до кортежа <Б, р, А>. В дальнейшем объектом рассмотрения являются компьютерные атаки на исполняемый машинный код, для защиты от которых предложен новый вид запутывающих преобразований, формирующих байт-код для ПИОК с псевдослучайной архитектурой.

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

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

Систему команд ПИОК предложено формировать так, чтобы каждая инструкция имела: символическое имя, код (уникальное число, однозначно характеризующее действие) и набор аргументов-операндов, которые параметризируют действие. В результате набор машинных команд ПИОК можно сгенерировать таким образом, чтобы количество информации по Колмогорову в защищаемой сегменте исполняемого кода увеличилось: (> (?„, где количество информации в защищенном коде, а <?„ количество информации в незащищенном коде, а сама структура команд имела псевдослучайный характер. Эффект увеличения количества информации по Колмогорову достигается за счет таких факторов как: добавление обфусцирующих вычислений, изменение набора исполняемых инструкций и включение в защищаемый сегмент кода интерпретатора ПИОК, который становится неотъемлемой частью исполняемого алгоритма (рис. 2). Последовательность команд ПИОК, реализующая целевой алгоритм в дальнейшем рассматривается как виртуальная программа, в которой обфускации подвержен как целевой алгоритм, так и исполняемый байт-код.

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

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

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

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

Коды машинной инструкции ПИОК или опкод определяет последовательность действий, которая должна быть выполнена ПИОК вплоть до команды выхода, например: while (1) {

opcode = NextOpcode() ; if (HasArg(opcode))

oparg = NextArgO; switch (opcode) {

case opCodel: // код на ЯВУ реализующий семантику opCodel case opCode2: // код на ЯВУ реализующий семантику opCode2 ... // и т.д. для всех опкодов ПИОК

}

)

mov edx, есх push есх add есх, еах

—^ протектор

——-

call procl

Id f

stab a

V........................................

ПИОК,

f .........

add tempi = t, regl

cmp reg2 - 15, reg3

add res — tempi, 12

4_

ПИОК2

ПИОК,

Рис. 3 - Генерация кодов ПИОК на основе одного блока исходного кода для различных ПИОК при последовательных запусках протектора на одних и тех же исходных данных

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

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

шоу еах, (с!шогс1 р1;г [еЬр эЫ еах,

2041}]

РЗ

Р2

г \ ! Р1)

Р5

РО )

Р6

шоу с11«)гс1 ри [еЬр - 12011], еах

Р4

Р7

Рис. 4 Базовый блок прог раммы (слева) и сеть Петри для его обфускации (справа)

Па рис. 4 представлено два вида защищаемых значений: константы, обозначенные прямоугольниками и четырехбайтовое значение, лежащее по адресу ячейки памяти, обозначенной овалом. На третьем этапе выбирается количество раундов сети Петри с учетом того, что увеличение числа раундов создает большую запутанность кода для выбранного базового блока защищаемой программы. Важным преимуществом метода, повышающего его практическую стойкость, является то, что часть значений ячеек памяти, связанных с метками сети Петри, можно выбрать случайным образом. На четвертом этапе осуществляется выбор шаблона сети Петри, размер которого зависит от количества защищаемых значений, что достигается за счет операции масштабирования с использованием принципа функционального самоподобия. Пример масштабирования сети Петри с двукратным увеличением числа позиций сети приведен на рис. 5. Па пятом этапе производится определение начальных пометок сети Петри при помощи решения системы диофантовых уравнений в поле 12зг-1_1, где 32 бита - это разрядность инструментального процессора Так, в случае использования сети Петри с восьмью позициями и всеми разрешенными переходами (рис.4), полная система диофантовых уравнений для выбора начальных пометок имеет вид:

ГХ 2 = Х7 + Х1 + Х4

= Х-7 "4" Х1 4" Х4

Хл — Х-з Хп

_ , (I)

Х5 — Х0

Х6 = хо

УХу — Хг- ~~Ь X^ ~Ь X4

где Х[ значения пометок сети Петри. При составлении первого уравнения в (1) учитывается то, что согласно рис. 4, в позицию Р2 пометки могут прийти только из позиций 1, 4 и 7.

Для вычисления начального состояния сети Петри предложено редуцировать систему диофантовых уравнений до описания только разрешенных на текущем раунде переходов. Так на первом шаге система (1) редуцируется к уравнению:{*4ч = Хз1 х2г, на втором к уравнению {х22 = *72 *42 и так далее. В результате задача достижимости подмаркировки для конкретной конфигурации сети Петри решается за полиномиальное время, зависящее от размерности системы используемых диафантовых уравнений. Результатом выполнения данного этапа является базовый блок со вставленными инструкциями расчёта раундов работы сети Петри.

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

Для создания промежуточного представления защищаемого кода предложено использовать инструментарий ЬЬУМ, который предоставляет программные интерфейсы для трансформации исполняемого во время компиляции, компоновки и выполнения.

Рис. 5 Масштабирование сети Петри путем замены одного из начальных состояний сети на вычисляемое значение

Показано, что максимальное количество операндов исполняемого кода для процессоров х86 равно 7 в случае использования 8 битовых операндов. В главе предложен алгоритм кодирования опкодов, позволяющий обеспечить сокрытие структуры семантических близких инструкций. Показано, что для сохранения семантической целостности защищаемой программы алгоритм преобразования должен биекцией. Например, если для каждого опкода сгенерировать 3 произвольных значения: кеу! = гапс1РготТо(0, 7);

кеу2 = randFromTo(0, OxFF); кеуЗ = randFromTo(0, 7). то, автоморфные преобразования будут иметь следующий вид: b = ror(b, keyl), циклический сдвиг вправо; b = b Л key2, поразрядное исключающее или;

b = rol(b, кеуЗ), циклический сдвиг влево.

Показано, что для" автоматической генерации системы команд ПИОК необходимо сформировать множество регистров процессора R, которые задаются кортежем: Vr е R, где г = <name, size>.

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

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

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

1) указывается опкод, отображающий семантику команды;

2) для команд с вещественными операндами перед соответствующей командой ставится префикс f;

3) определяются размеры операндов (8, 16, 32, 64 или 80 бит) - одно число, если у всех операндов один и тот же размер, несколько чисел, каждое из которых соответствует размеру одного из операндов, если операнды имеют разный размер. Так как после размера операнда указывается его тип, визуально эти значения разделены;

4) после размера указывается тип операнда:

о m - ячейка памяти, о г - регистр,

о i - непосредственное значение, о b - регистр, содержащий адрес ячейки памяти;

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

о s - знаковый (signed), о и - беззнаковый (unsigned);

6) для команд управления потоком выполнения определяется тип перехода: abs -абсолютный переход, переход по адресу в памяти, rel -относительный переход, переход относительно текущей позиции;

7) через пробел указываются операнды - роль и тип (источник - приемник).

Для создания большого числа инструкций ПИОК определены следующие правила наименования. Источник данных в инструкции обозначается через i (input), приемник через о (output), операнд, одновременно являющийся приемником и источником через io. Для команд условных переходов у второго операнда стоит буква j - jump, что говорит о том, что этот операнд определяет смещение относительно текущего значения счетчика команд; для команд сдвига второй операнд с префиксом sh определяет сдвиг (shift). По аналогии также вводится соглашение о наименовании остальные необходимых типы операндов: о reg -регистр, о mem -ячейка в памяти, о imm - непосредственное значение, о brg - регистр, содержащий адрес ячейки памяти. Введение данных соглашения исчерпывающим образом определяет множество возможных, но при этом семантически различных команд ПИОК. Пример описания:

div64s_mr iomem, ireg - команда знакового деления 64 битных значений, где первый операнд - ячейка памяти, второй - регистр, при этом первый операнд является одновременно приемником и источником, а второй только источником.

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

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

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

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

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

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

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

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

о подсистемы изменения порядка выполнения и подмены инструкций, о блока встраивания, перестановки, переноса подпрограмм и вставки кодового «мусора».

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

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

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

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

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

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

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

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

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

Таблица 1

Таблица частот опкодов для исследуемой совокупности защищенных файлов с частотой

более 5%

Код операции Относительная частота (защищенный код) Относительная частота (незащищенный код)

00 0.26 0.01

СР 0.14 0.01

44 0.14 0.01

45 0.08 0.02

Л9 0.06 0.00

Частотный анализ алгоритма вычисления синуса методом разложения в ряд Тейлора для защищенного и незащищенного кода, результаты которого представлены в таблице 1 показывает, что в защищенном коде самой часто встречающейся командой является опкод, закодированный нулем, реализующий операцию вычитания двух чисел с фиксированной запятой, что при осуществлении анализа кода позволяет предположить, что данная команда, закодированная нулем является командой пересылки данных, так как именно команды пересылки данных являются чаще всего встречающимися в незащищенной версии данного алгоритма. В тоже время в данном примере ПИОК нулем кодируется инструкция вычитания, частота которой в незащищенном коде составляет менее 1%.

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

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

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

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

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

Г

случайные метки Неслучайные ¡иатки •Число раундов

1 2 3 4 5 6 7 8 9 10 И 12 13 14 15 16 17 Случайные метки/Неслучайные метки/Рйунды сети

Рис. 6 Количество инструкций в коде после деобфускации при помощи стандартного

инструментария анализа (IDA с плагином Hex-Rays) Применение метода в проекте, выполненном в рамках госконтракта 192/1 1-ЭКБ-27.09ок, показало его высокую стойкость к стандартным методам анализа, так как позволяет увеличивать меру информации по Колмогорову путем настройки параметров разработанного для защиты исполняемого кода метода.

ОСНОВНЫЕ РЕЗУЛЬТАТЫ РАБОТЫ

В процессе выполнения работы были получены следующие результаты:

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

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

3. Реализован алгоритм обфускации про помощи псевдослучайных ПИОК, допускающий масштабирование в процессе своей работы.

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

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

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

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

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

СПИСОК ПУБЛИКАЦИЙ ПО ТЕМЕ ДИССЕРТАЦИИ

1. V. Aranov, A. Terentiev, Generation of overlapped executable code/ V.Aranov/ Preliminary Proceedings of 8"' Spring /Summer Young Researchers Colloquium on Software Engineering, May 2931 2014 - Saint Petersburg, Russia - с. 150-154.

2. Аранов В.10., Заборовскнй B.C. Метод запутывающих преобразований программного кода при помощи сетей Петри. /В.Ю. Аранов// XLII Неделя науки СПбГПУ, Сборник лучших докладов, —2014, —с. 129-133.

3. Аранов В.Ю., Заборовскнй B.C. Метод защиты or компьютерных атак, основанных на анализе исполняемого машинного кода/В.Ю. Аранов//Проблемы информационном безопасности. Компьютерные системы. — 2013. — №4. — с. 73-81.

4. Аранов В.Ю., Заборовскнй В.С Обфускация машинного кода при помощи сетей Петри, /В.Ю. Аранов // XLII Неделя науки СПбГПУ, Материалы конференции. — 2013. —с. 41-43,

5. Аранов В. Ю. Защита исполняемого машинного кода от обратного проектирования при помощи многоуровневой виртуализации. /В.Ю. Аранов// ИБРР-2013, Материалы конференции. — 2013.-е. 76-77.

6. Аранов В.Ю., Заборовскнй B.C. Разработка генератора виртуальных машин для сокрытия выполняемого кода/В.Ю. Аранов// Научно-технические ведомости СпбГПУ. — 2012. -№4.-с. 61-64.

Подписано в печать 04.09.2014. Формат 60x84/16. Печать цифровая. Усл. печ. л. 1,0. Тираж 100. Заказ 12139Ь.

Отпечатано с готового оригинал-макета, предоставленного автором, в Типографии Политехнического университета. 195251, Санкт-Петербург, Политехническая ул., 29. Тел.: (812) 552-77-17; 550-40-14