Информационная безопасность. Курс лекций.
Вопрос 3. Защита программ и ценных баз данных от несанкционированного копирования и распространения.
По оценкам экспертов в первом десятилетии XXI века только в США общая стоимость нелегально тиражируемых программных средств ежегодно составляла около 3 миллиардов долларов, а общее число нелегально изготовленных копий ПО составляло 45–52 % всех используемых программных средств. При этом особенно широкое распространение получило незаконное копирование программ для персональных ЭВМ. В частности, ущерб от экспортных недопоставок ПО для ПЭВМ в другие страны и от недополучения лицензионных платежей из-за рубежа за использование ПО только в 2007 г. оценивался в США соответственно в 705 и 235 миллионов долларов.
Выполнить простейшую операцию, достаточную для несанкционированного копирования программного средства на персональной ЭВМ, способен сегодня каждый пользователь.
Процесс нелегального распространения ПО получил развитие и в нашей стране. Это объясняется не только массовым применением вычислительной техники и умением большинства пользователей работать с командой СОРУ, но и более фундаментальными обстоятельствами и факторами:
– Новизной законодательства по авторскому праву на программные средства и фактическим отсутствием юридической практики по вопросам защиты прав авторов программной продукции;
– Наличием в прошлом многолетней практики нелегального заимствования иностранного программного обеспечения, во многом опиравшейся на определенную государственную поддержку;
– Неразвитостью и низкой культурой рыночных отношений в нашей стране.
Можно выделить юридические, экономические и технические меры защиты программного обеспечения от несанкционированного копирования (НСК).
К юридическим средствам охраны ПО относятся различные правовые акты, оговаривающие вопросы зашиты ПО, а также более общие правовые нормы, которые могут применяться для этой цели. Хотя юридическая охрана прав на ПО в технически развитых странах осуществляется различными способами, в основном для этого применяются законы об охране авторских прав, об охране коммерческой тайны, о торговой марке и о патентной защите.
Авторское право. Заявление авторских прав на ПО применяется в качестве наиболее общего способа защиты ПО. Обладание авторским правом на ПО относит практически все операции по манипулированию этим ПО (продажа, применение, развитие) в исключительное ведение владельца.
Вместе с тем применение Закона об авторских правах для защиты ПО сталкивается с некоторыми проблемами, в частности с проблемой создания ПО в рамкам служебного задания.
Другой проблемой применения этого Закона для защиты ПО является вопрос о границах действия охраны прав на ПО – охраняется ли алгоритм, текст и структура программы или внешний способ организации взаимодействия с пользователем.
Патентная защита. Несмотря на возможность зашиты ПО с помощью патентов, очень немногие фирмы-производители ПО прибегают к патентованию программ, как способу защиты своих интересов.
На практике громоздкая процедура оформления и получения патента зачастую затягивается на столь длительный срок (более года), что многие программные продукты могут морально устареть раньше, чем на них может быть оформлен патент. Кроме того, патент на ПО действует меньший период времени по сравнению с авторскими правами.
Коммерческая тайна. Согласно Закону о коммерческой тайне под коммерческой тайной понимается некоторая информация либо формула, не являющаяся общеизвестной. В отношении ПО Закон о коммерческой тайне может применяться для защиты программ, разрабатываемых под конкретные требования клиента.
Торговая марка. Торговая марка представляет собой фирменный знак продуцента ПО, применяемый для идентификации программы при ее сбыте, официально защищаемый от копирования. Регистрация торговой марки полезна в случае возрастания спроса на какой-либо программный продукт – если название популярной программы не было зарегистрировано в качестве торговой марки, оно может быть использовано конкурентами для привлечения покупателей. Закон о торговой марке во многих случаях проще для применения, чем другие способы защиты ПО, т. к. гораздо легче доказать незаконное использование чужой торговой марки, чем доказать копирование.
В Российской Федерации в конце прошлого столетия происходили весьма важные процессы в области становления законодательства по охране программного обеспечения и ценной компьютерной информации. С этой целью приняты законы "О правовой охране программ для электронных вычислительных машин и баз данных" и "О правовой охране топологии интегральных микросхем", что знаменует новый этап в решении проблемы защиты интеллектуальной собственности в нашей стране. Теперь, после появления законодательной базы защиты ПО, основная проблема переходит в плоскость прецедентного накопления юридической практики и внедрения соответствующих административных процедур.
Экономические меры защиты ПО, проводимые фирмами-изготовителями программного обеспечения, предусматривают действенное стимулирование легального приобретения программных средств. Такое стимулирование проводится в настоящее время только для зарегистрированных пользователей, которые совершили легальное приобретение программных средств, и позволяет значительно экономить средства при использовании программ, а иногда даже делает невыгодным их нелегальное копирование.
Возможно, использование следующих мер стимулирования зарегистрированных пользователей:
– Периодическая поставка дополнительной документации, специальных журналов и т. п.;
– Регулярное сообщение об изменениях и обнаруженных ошибках;
– Проведение семинаров и курсов по обучению пользователей программных средств;
– Возможность получения оперативной консультации; – предоставление скидки при покупке следующей версии. В настоящее время отечественные предприятия-поставщики ПО активно осваивают вышеуказанные меры стимулирования легального приобретения программной продукции.
Технические меры защиты от несанкционированного копирования программ тесно увязаны с вопросами защиты информации от несанкционированного доступа (НСД). Хотя несанкционированный доступ не всегда направлен на копирование информации, большинство методов защиты от НСД можно применять и для защиты от НСК. Однако в проблеме защиты от НСК имеются свои, специфические методы, описанию которых и посвящена данная глава.
Отметим важную особенность – реализация средств защиты от ИСК существенно облегчается при наличии привилегированных режимов функционирования процессов в операционной системе.
Механизм защиты программного обеспечения, как показывает опыт работы в данной области, может включать следующие блоки:
– Защиты от наблюдения;
– Установки характеристик среды;
– Сравнения характеристик среды;
– Ответной реакции.
Блок защиты от наблюдения (БЗОН) представляет собой комплекс программных средств, ориентированных на исследование защищенного программного продукта. Главная функция БЗОН заключается в том, чтобы обеспечить надежную защиту от профессиональных любителей "раздевать" чужие программы, т. е. снимать защиту с пакетов программ. Ниже изложены некоторые способы, которые направлены на выявление и ликвидацию непредусмотренных внешних воздействий на защищаемую программу, характерных для средств снятия защиты.
Для снятия защиты используется комбинация двух основных методов нападения: статического и динамического.
Статические методы предусматривают анализ текстов защищенных программ. Динамические методы осуществляют слежение за выполнением программы с помощью специальных средств. Обработка результатов слежения может быть частично или полностью автоматизирована.
Среди мер противодействия статическим методам нападения следует упомянуть следующие:
– Модификация и шифрование программного кода (типичные способы внесения особенностей в программную среду);
– Включение в тело программы переходов по динамически изменяемым адресам и прерываниям, а также самогенерирующихся команд (например, команд, полученных с помощью сложения и вычитания);
– Скрытый переход, когда вместо команды безусловного перехода ЗМР используется команда возврата из подпрограммы КЕТ (предварительно в стек записывается адрес перехода, который в процессе работы программы модифицируется непосредственно в стеке);
– включение в тело программы, если ее размер недостаточно велик, так называемой "пустышки", т. е. модуля, к которому имитируется, но не осуществляется передача управления. Этот модуль может содержать большое количество команд, не имеющих никакого отношения к логике работы программы. Но "ненужность" этих команд не должна быть очевидна потенциальному нарушителю;
– Изменение начала защищаемой программы таким образом, чтобы стандартный дизассемблер не смог ее правильно восстановить.
Среди мер противодействия динамическим методам нападения следует отметить следующие:
– периодический подсчет в процессе выполнения программы контрольной суммы области оперативной памяти, занимаемой образом задачи, что позволяет своевременно обнаружить изменения, вносимые в загрузочный модуль при попытке ее "раздеть";
– проверка количества свободной памяти и сравнения с тем объемом, к которому "приучена" задача. Это действие позволяет застраховаться от явной слежки за программой с помощью резидентных модулей;
– проверка содержимого незадействованных для решения защищаемой программы областей памяти, которые не попадают под общее распределение оперативной памяти, доступной для программиста, что позволяет добиться "монопольного" режима работы программы;
– проверка содержимого векторов прерываний (особенно с кодами 13h и 21h) на наличие тех значений, к которым "приучена" задача. Иногда полезным бывает сравнение первых команд операционной системы, отрабатывающих эти прерывания, с теми командами, которые там должны быть (вместе с предварительной очисткой оперативной памяти проверка векторов прерываний и их принудительное восстановление позволяет избавиться от большинства присутствующих в памяти резидентных программ);
– Переустановка векторов прерываний.
– Содержимое некоторых векторов прерываний копируется в область свободных векторов, соответственно изменяются и обращения к прерываниям. При этом слежение за известными векторами не даст нарушителю желаемого результата (например, первыми исполняемыми командами программы копируется содержимое вектора с кодом 21h в вектор с кодом 60h, а вместо команд int21h в программе везде записывается команда int60h, в результате в тексте программы не обнаружится ни одной команды работы с прерыванием 21h (обращение к функциям DOS);
– Постоянное чередование команд разрешения и запрещения прерывания, что затрудняет установку отладчиком контрольных точек;
– контроль времени выполнения отдельных частей программы, что позволяет выявить "остановы" в теле исполняемого модуля.
Блок установки характеристик среды (БУХС) отвечает за первоначальное "знакомство" защищаемой программы с окружающей средой. Инициатором "знакомства" может выступать как сама защищаемая программа, так и специальный "Установщик". Последний заносит в тело защищаемого файла снятые им характеристики программно-аппаратной среды или, наоборот, подгоняет окружающую среду, например DOS, под защищаемую программу, если она изначально не способна функционировать в нормальном окружении.
Среди основных характеристик, на которые может ориентироваться "привыкающая" программа, исполняются особенности аппаратной среды ЭВМ; программной среды; психофизиологических характеристик оператора ЭВМ.
Если среда недостаточно индивидуальна, ее можно дополнить специальными "индивидуализирующими" признаками.
К особенностям аппаратной среды относятся:
– Конфигурация конкретной ПЭВМ (наличие логических дисков, тип видеоадаптера – EGA, CGA или VGA, объем оперативной памяти и т. п.);
– Контрольная сумма и дата создания микропрограмм базовой системы ввода-вывода (BIOS);
– Измеряемые программой динамические характеристики различных компонентов компьютера и их соотношение между собой (основной проблемой при использовании динамических характеристик является их зависимость от температуры, продолжительности работы и других меняющихся условий, что делает затруднительным получение достаточно стабильных характеристик, индивидуальных для каждого устройства);
– Специальная модификация BIOS путем перепрограммирования соответствующих ПЗУ;
– Подключение специальных устройств (логических микросхем, дополнительных ПЗУ, подключаемых к ЭВМ через параллельный или последовательный интерфейс и т. п.);
– создание специальных "дефектов" на предъявляемых носителях данных, например на "ключевых" дискетах. Недостаток данного способа заключается в том, что совсем несложно сделать резидентную программу, которая будет перехватывать все обращения к устройству и возвращать в защищенный пакет все те коды завершения, которые тот рассчитывает получить. Этот недостаток можно ликвидировать, если обращения к внешнему устройству адресовать напрямую, а не через DOS.
К особенностям программной среды относятся:
– Место физического размещения защищаемого файла на магнитном диске;
– Порядок физического размещения файлов защищаемого программного средства на магнитном диске (при этом учитывается не только место физического размещения, но и положение файлов относительно друг друга);
– наличие на ПЭВМ "привычных" для пакета драйверов, таблиц, файлов; простой для реализации, но столь же простой для снятия защиты способ;
– Наличие заданной последовательности вызовов определенных программ перед запуском защищаемого пакета;
– Специально модифицированные программы операционной системы;
– Проверка наличия уникальной даты, например даты инициализации диска;
– Нестандартные способы организации данных на магнитных носителях;
– размещение в теле программы в зашифрованном виде данных, которые бы однозначно идентифицировали автора программы и пользователя, которому она официально продана. В качестве таких данных часто используется строка "© ФИО Дата" и системный номер программы; наличие таких данных позволят впоследствии применять юридические средства защиты.
Блок сравнения характеристик среды (БСХС) является одним из самых уязвимых мест защиты. Можно детально не разбираться с логикой защиты, а немного "подправить" результат сравнения, и защита будет снята. Иногда этот блок отсутствует и его выполняет человек (например, в некоторых системах с шифрованием информации сравнение производится человеком на этапе ее использования).
БСХС может иметь следующие варианты реализации:
– Реализация множества операторов сравнения наличных параметров с ожидаемыми;
– Генерация исполняемых команд в зависимости от результатов работы защитного механизма (например, в первом байте хранится исходная ключевая контрольная сумма BIOS, во второй байт в процессе выполнения записывается подсчитанная контрольная сумма в процессе выполнения задачи; суть блока сравнения – вычесть из первого байта значение второго байта, а полученный результат добавить к каждой ячейке оперативной памяти в области DOS; ясно, что если суммы не совпадут, то, вряд ли DOS продолжит функционирование);
– Выполнение ряда арифметических операций над данными в зависимости от результатов работы защитного механизма.
Блок ответной реакции (БОР) реализует ответные действия программы при обнаружении ею попытки анализа и взлома защитных механизмов. Такими действиями могут быть:
– Саморазрушение программы или частичное уменьшение числа выполняемых ею функции;
– Необратимая перестройка окружающей среды нот свои потребности, что приводит к невозможности работать на данной ПЭВМ с любыми другими пакетами, кроме данного;
– разрушение окружающей среды, в том числе запуск в профаммную среду вирусов и создание в ней "троянских коней".
– различные способы "издевательства" над пользователем, например замедление реакции программы, подача различных звуковых сигналов в случайные моменты времени, вывод посторонних изображений, добавление комментариев к вводимой и выводимой информации и тому подобное.
Блок ответной реакции может заметно демаскировать систему защиты. С целью снижения демаскирующего эффекта применяются идеи кратности ответной реакции (только после определенного числа запусков) и отложенности возмездия (ответная реакция происходит через определенное время или при срабатывании фрагмента программы, далеко отстоящего от блока сравнения характеристик среды).
Идеи постепенности ответной реакции и частичной деградации исполняемой программы перед полным прекращением работоспособности имеют в плане защиты некоторые плюсы:
– Пользователь несанкционированной копии не сразу замечает факт наличия реакции системы защиты;
– Желание вскрывать защиту может не появиться, так как используемая программа воспринимается как просто плохо отлаженная;
– Может пропасть желание использовать программу из-за страха получить какую-нибудь неизвестную реакцию.
Отрицательным моментом является возникновение антирекламы, поскольку ответная реакция может быть воспринята как свойство самого продукта в незащищенном виде.
Эффект ответной реакции может быть усилен, если она соответствующим образом описана в документации. Возможно описание не всех ответных воздействий или некоторое их преувеличение.
Следует упомянуть о демонстрационных версиях программ, распространяемых с целью рекламы. Представляется, что способ их создания путем установки переключателя в блоке ответной реакции, реализующего частичную потерю программой своих функций, вряд ли может быть признан удачным. Такая демонстрационная версия может быть легко превращена нарушителем в рабочую. Демонстрационная версия должна быть специальной программой, у которой недопустимые функции отсутствуют физически. Кроме того, должны отсутствовать все защитные механизмы, и даже намеки на них.