logo
622231 / 622221с / очн 622221с / ПАЗИ 622221с / КЛ_ПАЗИ

2. Структура системы защиты от несанкционированного копирования

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

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

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

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

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

Блок установки характеристик среды отвечает за получение характеристик, идентифицирующих вычислительную среду.

Блок сравнения характеристик среды устанавливает факт легальности запуска защищаемой программы.

Блок ответной реакции реализует ответные действия системы защиты на попытки несанкционированного исполнения защищаемой программы.

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

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

— встроенная (внедряется при создании программного продукта);

— пристыковочная (подключается к уже готовому программному продукту).

Наибольшую популярность в последнее время приобрели системы второго типа.

Это обусловлено рядом преимуществ, которые дает их использование:

— простота тиражирования программных систем защиты на объекты заказчика и разработчика;

— простота технологии применения; обеспечение достаточного уровня защищенности данных в силу специализации разработчиков;

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

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

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

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

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

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