СПОСОБ ЗАЩИТЫ ПРОГРАММНО-ИНФОРМАЦИОННОГО ОБЕСПЕЧЕНИЯ ОТ НЕСАНКЦИОНИРОВАННОГО ИСПОЛЬЗОВАНИЯ
METHOD OF PROTECTING SOFTWARE AND DATAWARE FROM UNAUTHORISED USE

Изобретение относится к электронно-вычислительным машинам и их программно-информационному обеспечению, а именно к способам и средствам защиты приложений от несанкционированного копирования и распространения, и преимущественно может использоваться разработчиками программного и информационного обеспечения для ограничения несанкционированного использования программных и информационных продуктов.
Известен способ защиты программно-информационного обеспечения (ПИО) от несанкционированного использования (НИ) с помощью ключей. В качестве ключей использовались кодовые карты: картонные с кодовой перфорацией, затем магнитные, с записанным кодом на магнитном покрытии. Наиболее современными ключами являются применяемые на персональных ЭВМ электронные ключи. Ключ является электронным устройством, которое при работе с защищаемым ПИО устанавливается в разъем одного из портов ввода-вывода ЭВМ. Защищаемая программа в процессе работы идентифицирует ключ, т.е. запрашивает код ключа и сравнивает его с кодом, записанным в программе. По результатам идентификации программа реализует заданный регламент ее использования. Способ защиты является достаточно не надежным, за счет того, что существует достаточно большое количество методов автоматической компрометации систем защиты, реализующих данный способ.
Другим общеизвестным способом защиты ПИО от НИ является парольная защита. Ключом в этом случае является пользователь. Вводимый пользователем на запрос программы код (пароль) является условием для реализации заданного регламента использования ПИО. Способ защиты достаточно эффективен при ограниченном круге пользователей и их заинтересованности в защите ПИО от НИ. Но этот способ практически не может использоваться для защиты от НИ программно-информационных продуктов массового использования, так как сообщение пароля большому числу пользователей, обычно не заинтересованных в защите ПИО, быстро приводит к падению эффективности защиты.
Существует достаточно большое количество различных способов защиты приложений от несанкционированного копирования.
Среди таких методов защиты приложений стоит отметить следующие:
- программные способы защиты приложений;
- запутывание кода приложения;
- шифрование кода приложения;
- защита кода приложений с использованием внешних библиотек
- программно-аппаратные способы защиты приложений;
- идентификация аппаратного модуля;
- шифрование с использованием аппаратного модуля;
- защита посредством выгрузки кода защищаемого приложения в автоматическом (либо автоматизированном) режиме.
Примером систем защиты приложений, реализующих запутывание программного кода приложения, является программный продукт Dotfuscator. Суть метода защиты приложений с использованием запутывания кода заключается в том, что к оригинальному коду приложения добавляются некоторые наборы инструкций, призванные усложнить анализ защищаемого приложения. В результате анализ приложения злоумышленником и поиск в нем критически важных участков кода становится более трудной задачей. В некоторых научных работах обоснована сложность анализа приложения после осуществления процесса его защиты. В целом, класс методов запутывания приложений можно разделить на два основных класса:
- запутывание графа потока управления приложения;
- символьное запутывание приложения.
Под запутыванием графа потока управления защищаемого приложения понимается процесс, при котором происходит добавление программного кода к защищаемому приложению. В результате анализ приложения «ручными» способами становится затруднителен. Основной целью данных преобразований над защищаемым приложением является увеличение времени анализа защищенного приложения и, как следствие, увеличение времени, требуемого для компрометации системы защиты приложения.
Примерами преобразований, осуществляемых над защищаемым приложением посредством запутывания кода, являются преобразования генерации «мертвого» кода, добавление недостижимого кода и др. Основным недостатком данного класса методов защиты приложений от несанкционированного копирования является снижение скорости выполнения приложения после защиты. Проблема замедления возникает в связи с тем, что кроме так называемого «недостижимого» кода, то есть программного кода, который не получает управления, к приложению зачастую добавляют «мертвый» код, то есть такой код, который получает управление, однако не воздействует на значения переменных защищенного приложения. Кроме описанной проблемы с замедлением приложения, происходит естественный процесс увеличения места, требуемого приложению для хранения на жестком диске ПЭВМ пользователя, что в некоторых случаях также может являться недостатком данного метода защиты приложений от несанкционированного копирования.
Защита приложений от копирования, осуществляемая посредством шифрования кода защищаемого приложения, также в той или иной степени относится к запутыванию кода приложения. Однако в отличие от рассмотренного ранее примера компрометация системы защиты при неизвестной ключевой информации является вычислительно трудной задачей. Основной проблемой, возникающей при использовании данного класса методов защиты, является то, что хранить ключевой материал необходимо совместно с приложением, что, в свою очередь, приводит к тому, что сложность метода защиты приложений с использованием шифрования кода базируется на стойкости сокрытия ключевой информации. В связи с тем что данный метод защиты приложений допускает исследование приложения с привлечением методов анализа «белого ящика», то «сокрытый» ключевой материал в течение достаточно непродолжительного времени будет обнаружен злоумышленником. Обнаружение ключа приведет к полной компрометации системы защиты и, как следствие, совершению несанкционированного копирования защищенного приложения. На данный момент идут исследования, связанные с решением проблемы сокрытия ключевой информации непосредственно в самом алгоритме, однако существуют только теоретические разработки, которые не могут быть использованы на практике.
Суть известного метода защиты приложения посредством шифрования заключается в том, что часть или весь программный код защищаемого приложения зашифровывается с использованием некоторого криптографического алгоритма. Далее, для того чтобы приложение корректно функционировало, происходит модификация программного загрузчика таким образом, что перед выполнением либо все приложение, либо отдельные участки кода проходят процедуру расшифрования. В результате во время своего функционирования приложение остается расшифрованным и абсолютно идентичным оригинальному, не защищенному программному коду. Процесс расшифрования является критическим для данного метода защиты приложений, в связи с тем что именно в этот момент происходи обращение к криптографическому ключу. После осуществления преобразования расшифрования программный код защищенного приложения принимает оригинальный вид и может быть достаточно легко получен злоумышленником для дальнейшего анализа.
Системы защиты приложений, реализующие выгрузку части кода приложений в неуправляемые библиотеки, характеризуются тем, что часть кода защищенного приложения «выгружается» в программный модуль, скомпилированный непосредственно в машинный код. В результате для приложения, скомпилированного в промежуточное представление, допустимо использовать технологии и способы защиты, обычно применяемые для защиты приложений, компилируемых в машинный код. При таком подходе к защите приложения, чтобы не нарушить логику работы оригинального приложения, обычно не происходит перекомпиляции кода; происходит упаковка кода защищаемого приложения в модуль, компилируемый в некоторое промежуточное представление. В ходе исполнения защищенного приложения сокрытый код извлекается и в незащищенном виде передается оригинальной виртуальной машине, осуществляющей выполнение защищенного приложения. Таким образом, такой момент является достаточно критичным для защищаемого приложения, и аналитик может совершить несанкционированное копирование.
В связи с тем что для запуска и дальнейшего исполнения зашифрованного файла необходимо совершать больше действий, нежели чем при запуске и выполнении оригинального файла, данная технология имеет достаточно серьезный недостаток, связанный со снижением скорости (в 4-8 раз) выполнения защищенного приложения. Кроме того, в связи с генерацией отдельного загрузчика для корректной работы защищенного приложения увеличивается размер файла по сравнению с его незащищенным аналогом. В зависимости от реализации программных модулей, с помощью которых осуществляется защита приложения, у защищенного приложения может пропасть свойство кросс-платформенности (иными словами, возможность функционирования на различном аппаратном обеспечении и в различных операционных системах).
Для класса методов защиты, реализующих выгрузку кода приложения в неуправляемые библиотеки, существует способ компрометации системы защиты в автоматизированном, а для некоторых систем и в автоматическом, режиме.
Общим недостатком программных способов защиты приложений от несанкционированного копирования является низкая сложность компрометации системы защиты, построенной с использованием этих методов. Существуют научные публикации, в которых показано, что сложность компрометации методов запутывания кода защищенного приложения крайне низка, и применение данного метода защиты приложений не является эффективным.
Известно, что среди недостатков программных способов защиты приложений присутствует увеличение объема кода защищенного приложения по сравнению с его незащищенным аналогом. Более того, в связи с генерацией дополнительного кода приложения возникает снижение скорости выполнения защищенного приложения.
Известно, что для программных систем защиты существует метод несанкционированного копирования, использующий динамическую отладку приложения. В результате применения данного метода компрометации систем защиты приложений сложность компрометации становится линейной функцией от времени.
Рассмотрим существующие программно-аппаратные способы защиты приложений от несанкционированного копирования.
Известно, что методы защиты приложений с использованием идентификации аппаратного модуля, достаточно старая стратегия, которая на данный момент практически не используется и приводится в данном случае для обеспечения полноты анализа состояния сферы защиты программного обеспечения от несанкционированного копирования.
Суть метода идентификации внешнего аппаратного модуля заключается в том, что защищенное приложение через некоторые временные интервалы (или в ходе выполнения определенных участков кода) опрашивает внешний аппаратный модуль и получает от него некоторый идентификатор, в соответствии с которым происходит принятие решения о дальнейшем функционировании защищенного приложения. В случае неполучения ответа от внешнего аппаратного модуля или же если полученный ответ не соответствует заданному идентификатору, приложение завершает свою работу.
Известно, что недостатком данного метода защиты приложений является возможность создания автоматизированной системы компрометации данного метода защиты приложения посредством модификации драйвера внешнего аппаратного модуля. Алгоритм работы данной системы будет строиться следующим образом:
- перехват данных с внешнего аппаратного модуля;
- генерация собственного драйвера внешнего аппаратного модуля, реализующего функционал по передаче полученного на предыдущем этапе идентификатора.
Методы защиты приложений путем шифрования участка кода приложения в программно-аппаратных реализациях данного метода защиты по принципу действия аналогичны программным реализациям, однако в случае с программно-аппаратной системой ключевой материал (ключ, с помощью которого проводилось за- и расшифрование кода защищенного приложения) хранится во внешнем аппаратном модуле. Также известны реализации метода защиты приложений посредством аппаратного шифрования кода приложения. Иными словами, внешний аппаратный модуль не только выполняет функции хранилища ключевой информации, но и выполняет действия, связанные непосредственно с шифрованием данных и кода защищаемого приложения. Основным недостатком данного класса методов защиты приложений от копирования является достаточно низкая сложность компрометации. В связи с тем что приложение в ходе своей работы должно быть полностью расшифровано, возникает возможность перехвата открытого кода приложения во время его выполнения. Другим, достаточно серьезным недостатком данного метода защиты приложений является то, что скорость выполнения приложения после защиты достаточно сильно падает. Подобные потери скорости выполнения связаны с тем, что время обращения к памяти, а также скорость работы процессора внешнего аппаратного модуля значительно ниже, чем у ПЭВМ пользователя, на котором выполняется приложение. В результате при обращении к новому участку кода необходимо сначала совершить процедуру расшифрования запрошенного участка и уже потом передать на него управление. Более того, достаточно часто возникают случаи некорректной реализации данного метода защиты, когда снижение скорости выполнения приложения стоит еще более остро.
Известен способ защиты программно-информационного обеспечения от несанкционированного использования стандартными программно-аппаратными средствами ЭВМ с помощью идентифицируемых технических ключей. В качестве ключа используют носитель информации, на записывающее покрытие которого наносят дефекты, определяют координаты дефектов в виде номеров дефектных секторов и эти координаты используют в качестве идентификаторов носителя (пат. РФ 2109331). При работе пользователя с электронными ключами есть определенные неудобства, заключающиеся в необходимости устанавливать ключи в разъем, особенно если разъемы портов ввода-вывода заняты внешними устройствами или приходиться работать с несколькими программами, имеющими защиту с помощью электронных ключей.
Известен метод, представленный в патенте (GB 2232279). Данный метод рассматривается в проведенном анализе существующих методов защиты. У аналога существуют два серьезных недостатка. Первым и наиболее важным недостатком данного метода защиты приложений является высокое замедление приложения после его защиты (до 10 раз). Иными словами, после осуществления процесса защиты скорость выполнения приложения снижается до 10 раз. Рассматриваемый метод относится к так называемым методам аппаратного шифрования. Несмотря на относительно высокую сложность компрометации данного метода защиты приложений (задача, по сложности эквивалентная полному обходу графа потока управления приложения), данный метод защиты по сложности компрометации системы защиты уступает предлагаемому методу защиты приложений. Более того, как было показано в тестировании предлагаемого метода защиты приложений, снижение скорости выполнения защищенного приложения не превышает 3х раз.
Другим, близким по способу защиты, является решение, предложенное специалистами компании «Актив». Решения предварительной выгрузки кода и выгрузки кода защищаемого приложения в автоматизированном режиме реализованы компанией «Актив». Суть данной методики заключается в том, что часть кода защищенного приложения переносится во внешний аппаратный модуль, на котором и происходит его непосредственное исполнение. В результате применения данного метода защиты часть кода защищенного приложения выполняется на компьютере пользователя, а часть приложения - в защищенном аппаратном модуле. Сложность компрометации такой системы защиты базируется на невозможности анализа внешнего аппаратного модуля, в результате для восстановления оригинального приложения аналитику необходимо восстановить те алгоритмы, которые были выгружены в электронный ключ, используя исключительно методы анализа кода посредством «черного ящика». Также известно, что для компрометации подобного рода систем может быть использован физический анализ внешнего аппаратного модуля. Недостатком метода компрометации системы защиты приложений с внешним аппаратным модулем, реализуемой посредством физического анализа ключа, является достаточно высокая стоимость анализа, что в свою очередь делает нерентабельным применение данного способа компрометации рассматриваемой системы защиты приложений.
Как показывает практика, сложность компрометации систем защиты, построенных с применением аппаратной части, достаточно высока, однако известно, что данный класс защиты обладает несколькими серьезными недостатками:
- снижение скорости выполнения защищенного приложения по сравнению с оригиналом (известно, что падение скорости выполнения приложения после защиты может достигать значений в 10-15 раз);
- необходимость «подбора» кода защищаемого приложения для дальнейшей выгрузки (не любой код приложения может быть выгружен во внешний аппаратный модуль, в связи с архитектурными особенностями);
- в некоторых случаях возникает необходимость разрабатывать программный код, для выгрузки во внешний аппаратный модуль отдельно, с целью снижения замедлений.
Среди недостатков, которыми обладают известные программно-аппаратные системы защиты приложений от несанкционированного копирования, стоит отметить следующие:
- низкая скорость выполнения защищенного приложения при использовании методик перенесения части кода во внешний аппаратный модуль;
- длительное время разработки приложения при перенесении кода во внешний аппаратный модуль;
- отсутствие автоматизированных решений.
Наиболее близким техническим решением является способ защиты программно-информационного обеспечения от несанкционированного использования с помощью приложений, включающий построение графа потока управления и запутывающие преобразования (пат. США 5199066, 1989 г.).
Известные методы защиты приложений, компилируемых в промежуточное представление, от несанкционированного копирования имеют следующие недостатки.
Основным недостатком рассмотренных аналогов и прототипа, как показывает анализ методов защиты, является низкая сложность компрометации системы защиты. Сложность компрометации в данном случае оценивалась за счет анализа сложности реализации атак на данный метод защиты. В связи с тем что рассматриваемые методы защиты приложений являются исключительно программными методами защиты, сложность компрометации которых, как известно, относится к классу задач Р. Иными словами, самый сложный алгоритм компрометации такой системы защиты является алгоритмом полиномиального времени.
Технической задачей предлагаемого изобретения является необходимость создания методики защиты от несанкционированного копирования приложений, компилируемых в некоторое промежуточное представление.
Цель предлагаемого изобретения: возможность реализации автоматической защиты для приложений с заранее выгруженным кодом; повышение скорости выполнения защищенного приложения после процесса защиты; высокая сложность компрометации системы защиты приложений; более высокая производительность защищенного приложения, нежели чем в аналогичных программно-аппаратных решениях с использованием идентичных аппаратных платформ.
Поставленная цель достигается за счет использования способа защиты программно-информационного обеспечения от несанкционированного использования с помощью приложений, включающего построение графа потока управления и запутывающие преобразования, при этом после построения графа потока осуществляют интерпретацию приложения в виде конечного автомата и его разделение, защиту переменных приложения и генерацию низкоуровневого программного обеспечения для внешнего аппаратурного модуля.
В рамках предлагаемой методики защищаемое приложение интерпретируется в виде конечного автомата с заданным набором свойств. Суть методики заключается в разбиении конечного автомата на две группы объектов. Одна группа выгружается для своего функционирования во внешний аппаратный модуль. В результате часть автомата, реализующего защищенное приложение, выполняется в рамках внешнего аппаратного модуля и не подлежит исследованию злоумышленником при попытке компрометации системы защиты.
n-2
В результате такого разбиения автомата анализ приложения и, как следствие, несанкционированное копирование приложения по сложности будет ограничено функцией, где n - число базовых блоков защищенного приложения. Для проведения оценки сложности компрометации предложенной системы защиты использовалась теорема Кэли для деревьев. В соответствии с данной теоремой сложность компрометации системы защиты ограничена функцией Ω(n).
Возможность снижения сложности восстановления оригинального автомата, а как следствие, компрометации системы защиты посредством анализа переменных, была учтена в предложенной методике. В методике используется аналог известной задачи «Псевдонимов» для защиты переменных приложения от анализа. В результате сложность анализа переменных защищенного приложения будет являться NP-полной задачей.
Для предотвращения использования различных атак на защищенное приложение посредством динамического анализа кода предлагается использовать модель, в терминах теории конечных автоматов, в соответствии с которой осуществляется функционирование внешнего аппаратного модуля.
Изобретение поясняется на рис.1 и рис.2.
Автоматный граф, интерпретирующий логику работы внешнего аппаратного модуля, представлен на рис.1.
Блок-схема общего использования методики представлена на рис.2.
Сравнительная характеристика существующих методов защиты в сравнении с предложенным методом приведена в таблице 1.
Таблица 1
Сравнительный анализ методов защиты приложений.
Методы защиты
Оценочная степень замедления приложения
Возможность автоматической компрометации
Возможность автоматической защиты
Задание уровня сложности компрометации
Запутывание кода приложений
1,2-4
+
+
-
Выгрузка кода в «неуправляемые» библиотеки
4-6
+
+
-
Шифрование кода приложения
4-5
+
+
+
Идентификация внешнего аппаратного модуля
1,2
+
+
-
Шифрование кода приложения
6-8
+
+
+
Выгрузка кода приложения во внешний аппаратный модуль
10-15
-
-
-
Предлагаемый метод
0,5-3
-
+
+
В представленной таблице знаками «+» и «-» обозначается наличие или отсутствие той или иной характеристики у рассматриваемого метода защиты приложений. Цифрами в таблице обозначен коэффициент снижения скорости выполнения приложения в результате защиты его тем или иным методом из представленных в таблице.
В результате проведенного тестирования было выявлено, что предложенный метод защиты приложений от несанкционированного копирования обладает рядом преимуществ по сравнению с существующими методами защиты программного обеспечения от несанкционированного копирования приложений.