Зарегистрируйся в два клика и получи неограниченный доступ к материалам,а также промокод на новый заказ в Автор24. Это бесплатно.
Введение
В современных программных продуктах зачастую реализованы наукоёмкие алгоритмы, в которых заложены «know-how» не только из области информационных технологий, но и смежных областей народного хозяйства. При этом лицензионные соглашения между поставщиком и пользователем обычно ограничивают конечного пользователя лишь возможностью использования результатов выполнения программ, но не передает права на сами алгоритмы, используемые в программном продукте. Несанкционированный доступ к исполняемым кодам такого программного обеспечения может привести к анализу и реконструкции (реинжинирингу) этих алгоритмов третьими лицами, что влечёт за собой нарушение прав интеллектуальной собственности, кражу технологий (промышленный шпионаж), несанкционированную модификацию программного обеспечения (ПО) с целью внедрения программных злоупотреблений, а в худшем случае – раскрытие государственной тайны. Поэтому техническая защита от подобных действий является важной государственной задачей.
Нынешний уровень коммерческих систем защиты недостаточен для надежной защиты прикладных программ ответственного назначения. Большинство этих защит взламывается злоумышленниками довольно быстро после их ввода в эксплуатацию.
В диссертационной работе проводится сравнительное исследование существующих технологий защиты ПО от реинжиниринга, выбор наиболее эффективных из них, разработка оригинальной технологии, а также ее реализация в виде комплекта макетов программных инструментов, содержащего прототипы модулей системы защиты.
Задачей второго этапа исследований было создание прототипа системы защиты на основе описанных и выборанных методов защиты на первом этапе.
Постановка задачи комплексной защиты от обратного
Проектирования
Цель охраны интересов производителей 1. программного обеспечения, а также экономики страны в целом. Из-за компьютерного пиратства страдают также местные дистрибьюторы и поставщики услуг, теряя доход, который будет использован для создания новых рабочих мест и налоговых поступлений. По данным Альянса бизнес-программного обеспечения (BSA), 63% программного обеспечения, установленного на персональных компьютерах в России в 2011 году, было пиратским. Коммерческая стоимость этого программного обеспечения составила 3,3 миллиарда долларов США.
Источник ссылки не найден. Согласно тому же исследованию, потери от использования пиратского программного обеспечения в мире в 2011 году составили 63 миллиарда долларов США. Это доказывает актуальность задачи защиты программного обеспечения от анализа и несанкционированного распространения в настоящее время.
С неправомерным использованием программного обеспечения можно бороться различными способами. Среди них, разумеется, должен быть и законный. Взлом, анализ, незаконное копирование и распространение программного обеспечения должны быть надлежащим образом описаны в соответствующих законах, а ответственность за их несоблюдение должна регулироваться государством. Но на данном этапе государство не может решить эту проблему легально, и наиболее эффективными методами защиты являются программно-технические средства.
При этом средства защиты программ от анализа и реинжиниринга (реинжиниринга) принципиально отличаются от обычных средств защиты от несанкционированного использования и копирования программного обеспечения, которые перечислены ниже:
привязка к носителю распространения, предварительная или периодическая аутентификация пользователя, защита паролем, привязка к уникальным знакам компьютера, электронные ключи.
Специфика программ защиты кода от реинжиниринга заключается в том, что необходимо защищать не двоичный код сам по себе, а закодированный в нем алгоритм, что значительно сложнее. Злоумышленником может быть законный пользователь, который приобрел программный продукт и которому не нужно взламывать указанные выше типы защиты.
Обычно злоумышленник разбирает двоичный код исполняемой программы и пытается восстановить алгоритм ассемблерным кодом. Это несложно сделать опытному программисту, если производитель не включил в программу специальные средства защиты от анализа.
Более того, многие из имеющихся на рынке средств защиты от несанкционированного использования и копирования программного обеспечения взломаны из-за плохой защиты от обучения. После того, как злоумышленник проанализировал алгоритмы защиты, генерируются последовательные ключи и аппаратные ключи успешно эмулируются. Ситуацию можно исправить путем разработки эффективного метода программной защиты от изучения, применяя который к алгоритмам другой защиты можно было бы качественно повысить их уровень.
Целью данного диссертационного исследования является разработка и программная реализация генератора виртуальных машин как эффективного метода защиты программного обеспечения от анализа и реинжиниринга.
Главной особенностью данного протектора, основанного на использовании генератора виртуальных машин, является модификация кода программного продукта в виде исходных кодов и скомпилированного исполняемого кода до того типа, который сохраняет свою функциональность, но затрудняет анализ, понимание алгоритмов работы и, как следствие, модификацию третьими лицами. Другой важной характеристикой данного протектора является его многоплатформенный характер. Наиболее распространенными в настоящее время операционными системами являются MS Windows и Linux, поэтому, в первую очередь, для них спроектированы средства защиты в данном диссертационном исследовании, хотя исследуемые принципы применимы и для других ОС. Таким образом, в данной работе проводится разработка метода защиты программ от анализа и их программная реализация в виде многоплатформенной инструментальной системы.
Существующие подходы 1. История защиты программ от изучения начинается в 80-х годах прошлого века, как история самозащиты вирусов [Ошибка! Источник ссылки не найден.]. Первым вирусом, который попытался решить задачу защиты своего тела от уже существовавших тогда антивирусных утилит, был DOS-вирус Cascade (Virus.DOS.Cascade). Его «самозащита»
заключалась в частичном шифровании собственного кода. Эта задача оказалась не решена, поскольку каждый новый экземпляр вируса, хотя и был уникален, все же содержал в себе неизменную часть, которая «выдавала» его и позволяла антивирусам его обнаружить. Через два года появился первый полиморфный вирус Chameleon (Virus.DOS.Chameleon), а его ровесник Whale использовал для защиты своего кода сложное шифрование и обфускацию. Еще через два года начали появляться так называемые полиморфик-генераторы, которые можно было применить в качестве готового решения для защиты кода вредоносной программы.
В настоящее время известно много методов защиты программного обеспечения от изучения. Основные из них - следующие:
а) компрессия/шифрование: изначально программа упаковывается / шифруется, и затем сама производит обратный процесс дешифрования и распаковки по мере выполнения;
б) обфускация (запутывание) - искусственное усложнение кода с целью затруднить его читабельность и отладку (перемешивание кода, внедрение ложных процедур, передача лишних параметров в процедуры и т.п.);
в) мутация: создаются таблицы соответствия операндов - синонимов и заменяются друг на друга при каждом запуске программы по определенной схеме или случайным образом;
г) виртуализация процессора: создается процессор, исполняющий обфусцированный код(ПИОК) со своей системой команд; защищаемая программа компилируется для нее и затем выполняется на целевой машине с помощью симулятора виртуальной машины;
д) морфирование, или изменение кода;
е) затруднение дизассемблирования и отладки;
ж) нестандартные методы работы с аппаратным обеспечением: модули системы защиты обращаются к аппаратуре ЭВМ, минуя процедуры операционной системы, и используют малоизвестные или недокументированные её возможности.
Следует отметить, что терминология в области защиты программ размыта, и разные авторы трактуют понятия по-разному
. Например, и мутацию, и морфирование кода многие считают частным случаем обфускации.
Нетрудно видеть, что все перечисленные методы являются, по существу, внесением избыточности в программный код, которая и мешает восстановить его алгоритм. В то же время эта избыточность приводит к замедлению выполнения программы (иногда существенному) и росту объема занимаемой ею памяти. Поэтому критериями оценки методов должны быть:
- устойчивость к различным видам анализа и реинжиниринга программы, - степень потери эффективности программы по времени и памяти, - сложность метода построения защиты, ручного или автоматического.
Компрессия/шифрование – это традиционный способ защиты информации от несанкционированного доступа. В нашем случае уязвимым местом является наличие механизма декомпрессии/дешифрации в самой защищаемой программе, что дает возможность опытному злоумышленнику выделить и задействовать его для раскрытия программного кода. Другой вариант: взломщик после приобретения лицензионной копии программы извлекает расшифрованные части программы в процессе ее работы из памяти. Кроме того, нужно учитывать, что чем выше криптостойкость шифра, тем длительнее дешифрация, и замедление программы может стать неприемлемым.
Обфускация кода. Существует множество способов запутать программный код. К сожалению, большинство из них применимо только к исходному коду программы на языке высокого уровня (С/С++, Java, Python и т.д.), а не к машинному (исполняемому) коду. (Обзоры этих методов можно найти в [Ошибка! Источник ссылки не найден. - 5].) Разнообразие способов запутывания машинного кода гораздо меньше хотя бы потому, что в нем меньше разнообразие сущностей (имен, структур управления и т.д.), чем в исходном коде. Для нас же важна защита именно исполняемого кода.
Простейший способ обфускации машинного кода — вставка в него мусорных, недействующих конструкций (таких как or ax, ax). При этом простая вставка таких инструкций не сильно усложняет процесс анализа кода т.к. существует много программных средств дизассемблирования кода, которые анализируют код и упрощают его, в том числе и убирая недействующие конструкции. Таким образом, этот метод эффективен, если данные инструкции не просто недействующие, а недействующие в данном исходном коде, например, это могут быть реальные инструкции, но оперирующие регистрами, не используемыми в данном коде.
Виртуализация процессора. Этот метод состоит в построении псевдокода, работающего на виртуальной машине, и, на сегодняшний момент он является наиболее актуальным и эффективным. Суть технологии состоит в том, что исполняемые файлы дизассемблируются, анализируются и преобразуются в защищенный код некоторой уникальной защищенной виртуальной машины. Сама виртуальная машина генерируется тут же.
Анализировать алгоритм работы защищенного подобным образом кода существенно сложнее, чем стандартные инструкции Intel совместимых процессоров, поскольку для него не существует никакого стандартного инструментария (отладчиков, дизассемблеров). К тому же, защищенный код не содержит в явном виде методов восстановления оригинального кода [Ошибка! Источник ссылки не найден.]. Поэтому злоумышленнику приходится все делать вручную, самому, что занимает несравнимо больше времени, чем использование готовых инструментов.
Задача реинжиниринга сводится к изучению архитектуры симулятора, симулируемого им процессора, созданию дизассемблера для последнего, и, наконец, анализу дизассемблированного кода. Ведь злоумышленник не имеет доступа ни к описанию архитектуры виртуального процессора, ни к информации по организации используемого симулятора.
К сожалению, применение данного метода затруднено ввиду высокой сложности и, соответственно, стоимости его реализации. Другой недостаток – существенное замедление исполняемой программы (на один-два порядка величины). Несмотря на эти недостатки, передовые производители защитного ПО все же реализуют его в новейших продуктах:
StarForce3, NeoGuard, VMProtect и др.
Морфирование (морфинг) кода. Этот метод в простейшем варианте (полиморф) добавляет в код мусорные инструкции, как при обфускации, а в более сложном варианте (метаморф) целиком изменяет вид кода, сохраняя при этом оригинальный алгоритм его работы, для чего он заменяет инструкции их синонимами, состоящими в свою очередь из одной или нескольких других инструкций. Эта замена может делаться неоднократно. Число проходов (циклов замены) морфера называется глубиной морфинга. Чем она больше, тем более запутанным будет получаемый код. После морфинга инструкции компилируются обратно в машинный код.
Затруднение дизассемблирования и отладки необходимо для противодействия злоумышленникам, пытающимся преодолеть защиту кода. Поэтому средства, обеспечивающие такое затруднение, обычно включаются в защищаемую программу.
Нестандартные методы работы с аппаратным обеспечением – модули системы защиты обращаются к аппаратуре ЭВМ, минуя процедуры операционной системы, и используют малоизвестные или недокументированные её возможности. Этот подход чреват слишком большой зависимостью от конкретного вида аппаратуры и, значит, противоречит требованию многоплатформенности.
Обзор существующих коммерческих решений в исследуемой области 1. Исследуемая область защиты ПО богата и диверсифицирована из-за большой востребованности этих средств. Ее можно классифицировать по двум признакам.
По целям защиты программные средства защиты делится на следующие виды:
защита алгоритмов работы ПО (т.е. защита от реинжиниринга), защита ПО от несанкционированного использования (после покупки требуется ввод серийного номера, привязанного к оборудованию), защита ПО от несанкционированного копирования (например, DVD-дисков).
По операционным системам данные решения делится на:
защита Windows-приложений защита мобильных приложений на всех платформах (основные: Windows Mobile, WinCE, Android, iPhone) Существуют, по меньшей мере, два десятка успешных производителей средств защиты (будем называть такие программные продукты протекторами). Существуют компании, которые имеют решения для всех видов защит. Например, компания Oreans предоставляет ПО для всех видов защит, что описано ниже. Есть компания, которая предоставляет средства защиты почти для всех операционных систем, в списке нет только Apple. Это компания Flexera, ее продукт FlexLM поддерживает Windows (все версии), WinCE, Linux, VxWorks.
Защита исполняемого кода от статического анализа
Модель угроз обратного проектирования исполняемого кода 2
Закажи написание реферата по выбранной теме всего за пару кликов. Персональная работа в кратчайшее время!
Наш проект является банком работ по всем школьным и студенческим предметам. Если вы не хотите тратить время на написание работ по ненужным предметам или ищете шаблон для своей работы — он есть у нас.
Нужна помощь по теме или написание схожей работы? Свяжись напрямую с автором и обсуди заказ.
В файле вы найдете полный фрагмент работы доступный на сайте, а также промокод referat200 на новый заказ в Автор24.