Несмотря на наличие всего комплекса законодательных и правовых мер по защите авторских и смежных прав на интеллектуальную собственность, ситуация с пиратским рынком программного обеспечения (ПО) оставляет желать лучшего. Согласно исследованиям компании, IDC Inc., занимающейся изучением мирового рынка информационных технологий и телекоммуникаций, уровень пиратства в России в 2015 г. составил 62 % [1]. Несмотря на то, что эта цифра каждый год снижается, для производителей коммерческого ПО это означает огромную недополученную прибыль. Подобная проблема существует не только на отечественном рынке, но и во всем мире. Для ее устранения используются различные системы защиты программного обеспечения (СЗПО), которые получили широкое распространение и находятся в процессе постоянного развития, благодаря глубокой интеграции информационных технологий в общество. Необходимость использования СЗПО обусловлена рядом причин, среди которых может быть: заимствование кода программы, являющейся интеллектуальной собственностью автора, для написания аналогов продукта; несанкционированная модификация программы, с целью внедрения в ее код вредоносного ПО; незаконное копирование и распространение ПО и т. п.
Существующие СЗПО можно классифицировать по ряду признаков, среди которых можно выделить: метод установки, использование различных механизмов защиты и принцип функционирования (рис. 1).
Рис. 1. Классификация СЗПО
Системы защиты (СЗ), устанавливаемые на скомпилированные модули ПО, наиболее популярны, поскольку производитель легко может защитить уже готовый программный продукт (ПП). Однако стойкость этих систем невелика, так как для обхода защиты достаточно определить точку завершения работы «конверта» защиты и передачи управления защищенной программе, а затем принудительно сохранить ее в незащищенном виде.
Системы, встраиваемые в исходный код ПО до компиляции, неудобны для производителя ПО, так как возникает необходимость обучать персонал работе с программным интерфейсом СЗ с вытекающими отсюда денежными и временными затратами. Кроме того, усложняется процесс тестирования ПО и снижается его надежность, так как кроме самого ПО ошибки может содержать API СЗ или процедуры его использующие. Однако такие системы являются более стойкими к атакам, поскольку здесь исчезает четкая граница между СЗ и ПО как таковым [2–4].
Все же разумнее будет использовать комбинированные СЗ, включающие в себя механизмы защиты как систем, устанавливаемых на скомпилированные модули ПО, так и систем, встраиваемых в исходный код ПО до компиляции. Они максимально затрудняют анализ и дезактивацию своих защитных модулей.
СЗ, использующие сложные логические преобразования, применяют различные методы и приёмы, ориентированные на затруднение изучения программного кода алгоритмов СЗ и защищаемого ПО. Этот тип СЗ наименее стоек к атакам, так как для преодоления защиты достаточно проанализировать логику процедур проверки и должным образом их модифицировать [2].
Более стойкими являются системы, использующие криптографические алгоритмы. Для дезактивации защиты таких систем необходимо определение ключа дешифрации ПО. Однако выполнить данную задачу не всегда возможно. Например, взлом будет невозможен в случае использования злоумышленником системы с малой вычислительной мощностью. В случае же успешного взлома криптоалгоритма, зашифрованная информация к этому моменту уже может потерять свою актуальность.
Самыми стойкими к атакам являются системы, включающие в себя основные защитные механизмы двух предыдущих типов систем.
К основным защитным механизмам, используемым комбинированными системами, относятся:
- Запутывание программного кода — используются неупорядоченные переходы в различные части кода, внедряются ложные процедуры — «пустышки», холостые циклы, искажается количество реальных параметров процедур программы и т. п.
- Мутация — формируются таблицы соответствия операндов-синонимов, которые при каждом запуске программы по определенной схеме или случайным образом заменяют их друг на друга; также возможны случайные изменения в структуре программы.
- Компрессия данных — программа упаковывается, а затем (по мере выполнения) распаковывается.
- Шифрование данных — программа шифруется, а затем (по мере выполнения) расшифровывается.
- Защита от дизассемблирования — используются различные приемы, направленные на предотвращение дизассемблирования в пакетном режиме.
- Защита от отладки — используются различные приемы, направленные на усложнение отладки программы.
- Эмуляция процессоров и операционных систем (ОС) — создается виртуальный процессор и/или ОС и программа-переводчик из системы команд IBM в систему команд созданного процессора или ОС. После такого перевода данное ПО может выполняться только при помощи эмулятора, что резко затрудняет исследование исходного алгоритма.
- Нестандартные методы работы с аппаратным обеспечением — модули СЗ, минуя процедуры ОС, обращаются к аппаратуре ЭВМ и используют малоизвестные или недокументированные возможности системы.
Литература:
- BSA Global Software Survey [Электронный ресурс] / Software Management: Security Imperative, Business Opportunity. — Режим доступа: https://gss.bsa.org/wp-content/uploads/2018/05/2018_BSA_GSS_Report_en.pdf, свободный.
- Середа, С. А. Оценка эффективности систем защиты программного обеспечения [Электронный ресурс]. — Режим доступа: http://www.security.ase.md/publ/ru/pubru30.html, свободный.
- Степин, А. Современные технологии защиты программного обеспечения от нелегального копирования: что выбрать разработчику / А. Степин // Информационная безопасность. — 2010. — № 4. — С.30–32.
- Semjanov, P. V. On cryptosystems untrustworthiness [Электронный ресурс]. — Режим доступа: http://www.password-crackers.ru, свободный.