Защита программ от ошибок и сбоев

Различают
следующие виды защиты ПС от искажения
информации:

  • защита
    от сбоев аппаратуры;

  • защита
    от влияния «чужой» программы;

  • защита
    от отказов «своей» программы;

  • защита
    от ошибок оператора (пользователя);

  • защита
    от несанкционированного доступа;

  • защита
    от защиты.

11.6.1
Защита
от сбоев аппаратуры.

В настоящее время этот вид защиты
является не очень злободневной задачей
(с учетом уровня достигнутой надежности
компьютеров). Но все же полезно знать
ее решение. Это обеспечивается организацией
т.н. «двойных или тройных просчетов».
Для этого весь процесс обработки данных,
определяемый ПС, разбивается по времени
на интервалы так называемыми «опорными
точками». Длина этого интервала не
должна превосходить половины среднего
времени безотказной работы компьютера.
В начале каждого такого интервала во
вторичную память записывается с некоторой
контрольной суммой копия состояния
изменяемой в этом процессе памяти
(«опорная точка»). Для того, чтобы
убедиться, что обработка данных от одной
опорной точки до следующей (т.е. один
«просчет») произведена правильно (без
сбоев компьютера), производится два
таких «просчета». После первого «просчета»
вычисляется и запоминается указанная
контрольная сумма, а затем восстанавливается
состояние памяти по опорной точке и
делается второй «просчет». После второго
«просчета» вычисляется снова указанная
контрольная сумма, которая затем
сравнивается с контрольной суммой
первого «просчета». Если эти две
контрольные суммы совпадают, второй
просчет считается правильным, в противном
случае контрольная сумма второго
«просчета» также запоминается и
производится третий «просчет» (с
предварительным восстановлением
состояния памяти по опорной точке). Если
контрольная сумма третьего «просчета»
совпадет с контрольной суммой одного
из первых двух «просчетов», то третий
просчет считается правильным, в противном
случае требуется инженерная проверка
компьютера.

11.6.2.
Защита
от влияния «чужой» программы.

При появлении мультипрограммного режима
работы компьютера в его памяти может
одновременно находиться в стадии
выполнения несколько программ, попеременно
получающих управление в результате
возникающих прерываний (т.н. квазипараллельное
выполнение программ). Одна из таких
программ (обычно: операционная система)
занимается обработкой прерываний и
управлением мультипрограммным режимом.
Здесь под «чужой» программой понимается
программа (или какой-либо программный
фрагмент), выполняемая параллельно (или
квазипараллельно) по отношению к
защищаемой программе (или ее фрагменту).
Этот вид защиты должна обеспечить, чтобы
эффект выполнения защищаемой программы
не зависел от того, какие программы
выполняются параллельно с ней, и
относится, прежде всего, к функциям
операционных систем.

Различают
две разновидности этой защиты:

  • защита
    от отказов «чужой» программы,

  • защита
    от злонамеренного влияния «чужой»
    программы.

Защита
от отказов «чужой» программы

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

  • защиту
    памяти,

  • два
    режима функционирования компьютера:
    привилегированный и рабочий
    (пользовательский),

  • два
    вида операций: привилегированные и
    ординарные,

  • корректную
    реализацию прерываний и начального
    включения компьютера,

  • временнóе
    прерывание.

  • Защита
    памяти означает возможность программным
    путем задавать для каждой программы
    недоступные для нее участки памяти. В
    привилегированном режиме могут
    выполняться любые операции (как
    ординарные, так и привилегированные),
    а в рабочем режиме 
    только ординарные. Попытка выполнить
    привилегированную операцию, а также
    обратиться к защищенной памяти в рабочем
    режиме вызывает соответствующее
    прерывание. К привилегированным
    операциям относятся операции изменения
    защиты памяти и режима функционирования,
    а также доступа к внешней информационной
    среде. Корректная реализация прерываний
    и начального включения компьютера
    означает обязательную установку
    привилегированного режима и отмену
    защиты памяти. В этих условиях управляющая
    программа (операционная система) может
    полностью защитить себя от влияния
    отказов других программ. Для этого
    достаточно, чтобы

  • все
    точки передачи управления при начальном
    включении компьютера и при прерываниях
    принадлежали этой программе,

  • она
    не позволяла никакой другой программе
    работать в привилегированном режиме
    (при передаче управления любой другой
    программе должен включаться только
    рабочий режим),

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

Тогда никто не помешает
ей выполнять любые реализованные в ней
функции защиты других программ (в том
числе и доступа к внешней информационной
среде). Для облегчения решения этой
задачи часть такой программы помещается
в постоянную память. Наличие временнóго
прерывания позволяет управляющей
программе защититься от зацикливания
в других программах (без такого прерывания
она могла бы просто лишиться возможности
управлять).

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

Этот
вид защиты включает, в частности, и
защиту от т.н. «компьютерных вирусов»,
под которыми понимают фрагменты программ,
способные в процессе своего выполнения
внедряться (копироваться) в другие
программы (или в отдельные программные
фрагменты). «Компьютерные вирусы»,
обладая способностью к размножению (к
внедрению в другие программы), при
определенных условиях вызывают изменение
эффекта выполнения «зараженной»
программы, что может привести к серьезным
деструктивным изменениям ее внешней
информационной среды. Операционная
система, будучи защищенной от влияния
«чужих» программ, может ограничить
доступ к программным фрагментам,
хранящимся во внешней информационной
среде. Так, например, может быть запрещено
изменение таких фрагментов любыми
программами, кроме некоторых, которые
знает операционная система, или, другой
вариант, может быть разрешено только
после специальных подтверждений
программы (или пользователя).

Защита
от отказов «своей» программы
.
Обеспечивается надежностью ПС, на что
ориентирована вся технология
программирования, обсуждаемая в настоящем
курсе лекций.

Защита
от ошибок пользователя.

Здесь идет речь не об ошибочных данных,
поступающих от пользователя ПС, 
защита от них связана с обеспечением
устойчивости ПС, а о действиях пользователя,
приводящих к деструктивному изменению
состояния внешней информационной среды
ПС, несмотря на корректность используемых
при этом данных. Защита от таких действий,
частично, обеспечивается выдачей
предупредительных сообщений о попытках
изменить состояние внешней информационной
среды ПС с требованием подтверждения
этих действий. Для случаев же, когда
такие ошибки совершаются, может быть
предусмотрена возможность восстановления
состояния отдельных компонент внешней
информационной среды ПС на определенные
моменты времени. Такая возможность
базируется на ведении (формировании)
архива состояний (или изменений состояния)
внешней информационной среды.

Защита
от несанкционированного доступа
.
Каждому пользователю ПС предоставляет
определенные информационные и процедурные
ресурсы (услуги), причем у разных
пользователей ПС предоставленные им
ресурсы могут отличаться, иногда очень
существенно. Этот вид защиты должен
обеспечить, чтобы каждый пользователь
ПС мог использовать только то, что ему
предоставлено (санкционировано). Для
этого ПС в своей внешней информационной
среде может хранить информацию о своих
пользователях и предоставленным им
правах использования ресурсов, а также
предоставлять пользователям определенные
возможности формирования этой информации.
Защита от несанкционированного доступа
к ресурсам ПС осуществляется с помощью
т.н. паролей
(секретных слов). При этом предполагается,
что каждый пользователь знает только
свой пароль, зарегистрированный в ПС
этим пользователем. Для доступа к
выделенным ему ресурсам он должен
предъявить ПС свой пароль. Другими
словами, пользователь как бы «вешает
замок» на предоставленные ему права
доступа к ресурсам, «ключ» от
которого имеется только у этого
пользователя.

Различают две
разновидности такой защиты:

  • простая
    защита от несанкционированного доступа,

  • защита
    от взлома защиты.

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

Защита
от взлома защиты


это такая
разновидность защиты от несанкционированного
доступа, которая существенно затрудняет
преодоление этой защиты. Это связано с
тем, что в отдельных случаях могут быть
предприняты настойчивые попытки взломать
защиту от несанкционированного доступа,
если защищаемые ресурсы представляют
для кого-то чрезвычайную ценность. Для
такого случая приходится предпринимать
дополнительные меры защиты. Во-первых,
необходимо обеспечить, чтобы такую
защиту нельзя было обойти, т. е. должна
действовать защита от влияния «чужих»
программ. Во-вторых, необходимо усилить
простую защиту от несанкционированного
доступа использованием в ПС специальных
программистских приемов, в достаточной
степени затрудняющих подбор подходящего
пароля или его вычисление по информации,
хранящейся во внешней информационной
среде ПС. Использование обычных паролей
оказывается недостаточной, когда речь
идет о чрезвычайно настойчивом стремлении
добиться доступа к ценной информации.
Если требуемый пароль («замок») в явном
виде хранится во внешней информационной
среде ПС, то «взломщик» этой защиты
относительно легко может его достать,
имея доступ к этому ПС. Кроме того,
следует иметь в виду, что с помощью
современных компьютеров можно осуществлять
достаточно большой перебор возможных
паролей с целью найти подходящий.

Защититься
от этого можно следующим образом. Пароль
(секретное слово или просто секретное
целое число) X должен быть известен
только владельцу защищаемых прав доступа
и он не должен храниться во внешней
информационной среде ПС. Для проверки
прав доступа во внешней информационной
среде ПС хранится другое число Y=F(X),
однозначно вычисляемое ПС по предъявленному
паролю X. При этом функция F может быть
хорошо известной всем пользователям
ПС, однако она должна обладать таким
свойством, что восстановление слова X
по Y практически невозможно: при достаточно
большой длине слова X (например, в
несколько сотен знаков) для этого может
потребоваться астрономическое время.
Такое число Y будем называть
электронной

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

Другой
способ защиты от взлома защиты связан
с защитой сообщений, пересылаемых по
компьютерным сетям. Такое сообщение
может представлять команду на дистанционный
доступ к ценной информации, и этот доступ
отправитель сообщения хочет защитить
от возможных искажений. Например, при
осуществлении банковских операций с
использованием компьютерной сети.
Использование компьютерной подписи в
такой ситуации недостаточно, так как
защищаемое сообщение может быть
перехвачено «взломщиком» (например, на
«перевалочных» пунктах компьютерной
сети) и подменено другим сообщением с
сохранением компьютерной подписи (или
пароля).

Защиту
от такого взлома защиты можно осуществить
следующим образом [11.4]. Наряду с функцией
F, определяющей компьютерную подпись
владельца пароля X, в ПС определены еще
две функции: Stamp и Notary. При передаче
сообщения отправитель, помимо компьютерной
подписи Y=F(X), должен вычислить еще другое
число S=Stamp(X,R), где X 
пароль,
а R 
текст
передаваемого сообщения. Здесь также
предполагается, что функция Stamp хорошо
известна всем пользователям ПС и
обладает таким свойством, что по S
практически невозможно ни восстановить
число X, ни подобрать другой текст
сообщения R с заданной компьютерной
подписью Y. При этом передаваемое
сообщение (вместе со своей защитой)
должно иметь вид:

(R Y S),

причем
Y (компьютерная подпись) позволяет
получателю сообщения установить
истинность клиента, а S как бы скрепляет
защищаемый текст сообщения R с компьютерной
подписью Y. В связи с этим будем называть
число S электронной
(компьютерной)
печатью.
Функция Notary(R,Y,S).проверяет истинность
защищаемого сообщения:

(R,Y,S).

Эта позволяет получателю
сообщения однозначно установить, что
текст сообщения R принадлежит владельцу
пароля X.

Защита
от защиты.

Защита от несанкционированного доступа
может создать нежелательную ситуацию
для самого владельца прав доступа к
ресурсам ПС 
он не сможет воспользоваться этими
правами, если забудет (или потеряет)
свой пароль («ключ»). Для защиты интересов
пользователя в таких ситуациях и
предназначена защита от защиты. Для
обеспечения такой защиты ПС должно
иметь привилегированного пользователя,
называемого администратором
ПС.
Администратор
ПС должен, в частности, отвечать за
функционирование защиты ПС: именно он
должен формировать контингент
пользователей данного экземпляра ПС,
предоставляя каждому из этих пользователей
определенные права доступа к ресурсам
ПС. В ПС должна быть привилегированная
операция (для администратора), позволяющая
временно снимать защиту от
несанкционированного доступа для
пользователя с целью фиксации требуемого
пароля («замка»).

Упражнения к
лекции 11.

11.1. Что такое
защитное программирование?

11.2.
Какие виды защиты программного средства
от искажения информации Вы знаете?

11.3.
Какие требования предъявляются к
компьютеру, чтобы можно было обеспечить
защиту программы от отказов другой
программы в мультипрограммном режиме?

11.4.Что
такое компьютерная подпись?

11.5.
Что такое компьютерная печать?

Литература к
лекции 11.

  1. И.С. Березин, Н.П.
    Жидков. Методы вычислений, т.т. 1 и 2. —
    М.: Физматгиз, 1959.

  2. Н.С.
    Бахвалов, Н.П. Жидков, Г.М.Кобельков.
    Численные методы. — М.: Наука, 1987.

11.3.
Г.
Майерс. Надежность программного
обеспечения. — М.: Мир, 1980. С. 127-154.

11.4.
А.Н. Лебедев. Защита банковской информации
и современная криптография
//
Вопросы
защиты информации, 2(29), 1995.

Соседние файлы в папке Лекции по ООП 15шт

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Урок 34.

Предмет: Технология разработки
программных продуктов.

Тема: Обеспечение защищенности
программных средств.

Цели:

Образовательная

Ознакомление с методами защиты ПО.

Развивающая:

Развивать умение слушать других, делать выводы и обобщать полученные знания

Воспитательная:

Воспитывать чувство значимости предмета в профессиональной деятельности,
аккуратности в работе

Межпредметные
связи:

        
Английский язык

        
Операционные системы

        
Информационные технологии

        
Основы алгоритмизации и программирования

Оборудование:
доска, мел, письменные принадлежности, проектор, ПК

Тип
урока: комбинированный

Метод
обучения: Объяснительно иллюстративный

Ход
урока:

1.Организационный
момент

         — Проверка готовности кабинета

         — Объявление темы

2.
Постановка цели урока

3.Повторение
пройденного материала

  1. Оценка
    стоимости программного продукта
  2. Выполнение
    оценки проекта на основе LOC- и FP-метрик
  3. Конструктивная
    модель стоимости
  4. Модель
    композиции приложения
  5. Модель
    раннего этапа проектирования
  6. Оценка
    затрат на разработку ПО

4.Сообщение
новых знаний

1.      Основные
сведения о защите программных
продуктов

2.     
Криптографические методы защиты информации

3.     
Программные системы защиты от несанкционированного
копирования

4.     
защита от сбоев аппаратуры;

5.     
защита от влияния «чужой» программы;

6.     
защита от отказов «своей» программы;

7.     
защита от ошибок оператора (пользователя);

8.     
защита от несанкционированного доступа;

9.     
защита от защиты.

5.
Восприятие и осознание учащимися нового материала

6.
Осмысление обобщение и систематизация знаний

7.
Подведение итогов урока и  постановка
домашнего задания

   Выучить содержимое темы

Гагарина Л.Г. стр.240253

        Ответить на вопросы:

7.3. Защита программных продуктов

7.З.1
Основные сведения о защите программных
продуктов

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

     Это обусловливает
необходимость принятия мер по защите 
интересов разработчика программ и создателей компьютерных баз данных от
несанкционированного их использования [56].

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

     Защита программного обеспечения
преследует цели:

1) ограничение несанкционированного доступа к  программам или их преднамеренное разрушение и
хищение;

2) исключение несанкционированного копирования  (тиражирования) программ.

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

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

2) аппаратуры — подключение к компьютеру аппаратных средств для считывания
программ и данных или их физического разрушения;

3) специализированных программ — приведение 
программного продукта или базы данных в неработоспособное  состояние (например, вирусное заражение),
несанкционированное  копирование программ
и базы данных и т. д.

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

• защиты программ при их запуске паролем;

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

• ограничения доступных пользователям программных 

модулей или данных, функций обработки и др.

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

7.3.2.
Криптографические методы защиты информации

     Первоначальное значение термина
«криптография» —  «тайнопись», «тайное
письмо».

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

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

Криптосистема — семейство выбираемых с помощью ключа  обратимых преобразований, которые преобразуют
защищаемый открытый текст в шифрограмму, и обратно [56].

    По характеру использования ключа
известные  криптосистемы можно разделить
на два типа: симметричные (с секретным ключом) и несимметричные (с открытым
ключом).

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

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

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

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

Такие криптосистемы называются системами блочного  шифрования.

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

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

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

7.3.3.
Программные системы защиты от несанкционированного копирования

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

ключевого элемента.

     Таким ключевым элементом могут
быть:

• дискета, на которой записан не подлежащий копированию ключ;

• определенные характеристики аппаратуры компьютера;

• специальное устройство (электронный ключ), 

подключаемое к компьютеру и предназначенное для выдачи  опознавательного кода.

     Программные системы защиты от
копирования  программных продуктов:

• идентифицируют среду, из которой будет запускаться  программа;

• устанавливают соответствие среды, из которой запущена программа, той, для
которой разрешен 

санкционированный запуск;

• вырабатывают реакцию на запуск из несанкционированной среды;

• регистрируют санкционированное копирование;

• противодействуют изучению алгоритмов и программ  работы системы.

      Для идентификации запускающих дискет
применяются  следующие методы:

• нанесение повреждений на поверхность дискеты 

(«лазерная дыра»), которая с трудом может быть воспроизведена в
несанкционированной копии дискеты;

• нестандартное форматирование запускающей дискеты.

      Идентификация среды компьютера
обеспечивается за счет:

• закрепления месторасположения программ на жестком магнитном диске (так
называемые неперемещаемые  программы);

• привязки к номеру BIOS (расчет и запоминание с  последующей проверкой при запуске контрольной
суммы  системы);

• привязки к аппаратному (электронному) ключу,  вставляемому в порт ввода-вывода, и др.

Защищенность — способность компонентов программного средства защищать
программы и информацию от любых негативных воздействий.

11.6. Обеспечение защищенности
программных средств.

Различают следующие виды
защиты ПС от искажения информации:защита от сбоев аппаратуры;

·      защита от
влияния «чужой» программы;

·      защита от
отказов «своей» программы;

·      защита от
ошибок оператора (пользователя);

·      защита от
несанкционированного доступа;

·      защита от
защиты.

11.6.1 Защита от сбоев аппаратуры. В
настоящее время этот вид защиты является не очень злободневной задачей (с
учетом уровня достигнутой надежности компьютеров). Но все же полезно знать ее
решение. Это обеспечивается организацией т.н. «двойных или тройных просчетов».
Для этого весь процесс обработки данных, определяемый  ПС, разбивается по времени на интервалы так
называемыми «опорными точками». Длина этого интервала не должна превосходить
половины  среднего времени безотказной
работы компьютера. В начале каждого такого интервала во вторичную память
записывается с некоторой контрольной суммой копия состояния изменяемой в этом
процессе памяти («опорная точка»). Для того, чтобы убедиться, что обработка
данных от одной опорной точки до следующей (т.е. один «просчет») произведена
правильно (без сбоев компьютера), производится два таких «просчета». После
первого «просчета» вычисляется и запоминается указанная контрольная сумма, а
затем восстанавливается состояние памяти по опорной точке и делается второй
«просчет». После второго «просчета» вычисляется снова указанная контрольная
сумма, которая затем сравнивается с контрольной суммой первого «просчета». Если
эти две контрольные суммы совпадают, второй просчет считается правильным, в
противном случае контрольная сумма второго «просчета» также запоминается и
производится третий «просчет» (с предварительным восстановлением состояния
памяти по опорной точке). Если контрольная сумма третьего «просчета» совпадет с
контрольной суммой одного из первых двух «просчетов», то третий просчет
считается правильным, в противном случае требуется инженерная проверка
компьютера.

11.6.2. Защита от влияния «чужой» программы. При
появлении мультипрограммного режима работы компьютера в его памяти может
одновременно находиться в стадии выполнения несколько программ, попеременно
получающих управление в результате возникающих прерываний (т.н.
квазипараллельное выполнение программ). Одна из таких программ (обычно: операционная
система) занимается обработкой прерываний и управлением мультипрограммным
режимом. Здесь под «чужой» программой понимается программа (или какой-либо
программный фрагмент), выполняемая параллельно (или квазипараллельно) по
отношению к защищаемой программе (или ее фрагменту). Этот вид защиты должна
обеспечить, чтобы эффект выполнения защищаемой программы не зависел от того,
какие программы выполняются параллельно с ней, и относится, прежде всего, к
функциям операционных систем.

Различают
две разновидности этой защиты:

·      защита от
отказов «чужой» программы,

·      защита от
злонамеренного влияния «чужой» программы.

Защита от отказов «чужой»
программы
означает, что на выполнение функций защищаемой
программой не будут влиять отказы (проявления ошибок), возникающие в
параллельно выполняемых программах. Для того чтобы управляющая программа
(операционная  система) могла обеспечить
защиту себя и других программ от такого влияния, аппаратура компьютера должна
реализовывать следующие возможности:

*     
защиту памяти,

*     
два режима функционирования компьютера:
привилегированный и рабочий (пользовательский),

*     
два вида операций: привилегированные и
ординарные,

*     
корректную реализацию прерываний и начального
включения компьютера,

*     
временнóе прерывание.

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

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

·      все точки
передачи управления при начальном включении компьютера и при прерываниях
принадлежали этой программе,

·      она не
позволяла никакой другой программе работать в привилегированном режиме (при
передаче управления любой другой программе должен включаться только рабочий
режим),

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

Тогда
никто не помешает ей выполнять любые реализованные в ней функции защиты других
программ (в том числе и доступа к внешней информационной среде). Для облегчения
решения этой задачи часть такой программы помещается в постоянную память.
Наличие временнóго прерывания позволяет управляющей программе защититься
от зацикливания в других программах (без такого прерывания она могла бы просто
лишиться возможности управлять).

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

Этот
вид защиты включает, в частности, и защиту от т.н. «компьютерных вирусов», под
которыми понимают фрагменты программ, способные в процессе своего выполнения
внедряться (копироваться) в другие программы (или в отдельные программные
фрагменты). «Компьютерные вирусы», обладая способностью к размножению (к
внедрению в другие программы), при определенных условиях вызывают изменение
эффекта выполнения «зараженной» программы, что может привести к серьезным
деструктивным изменениям ее внешней информационной среды. Операционная система,
будучи защищенной от влияния «чужих» программ, может ограничить доступ к программным
фрагментам, хранящимся во внешней информационной среде. Так, например, может
быть запрещено изменение таких фрагментов любыми программами, кроме некоторых,
которые знает операционная система, или, другой вариант, может быть разрешено
только после специальных подтверждений программы (или пользователя).

11.6.3. Защита от отказов «своей» программы.
Обеспечивается надежностью ПС, на что ориентирована вся технология
программирования, обсуждаемая в настоящем курсе лекций.

11.6.4. Защита от ошибок пользователя. Здесь
идет речь не об ошибочных данных, поступающих от пользователя ПС,
защита
от них связана с обеспечением устойчивости ПС, а о действиях пользователя,
приводящих к деструктивному изменению состояния внешней информационной среды
ПС, несмотря на корректность используемых при этом данных. Защита от таких
действий, частично, обеспечивается выдачей предупредительных сообщений о
попытках изменить состояние внешней информационной среды ПС с требованием
подтверждения этих действий. Для случаев же, когда такие ошибки совершаются,
может быть предусмотрена возможность восстановления состояния отдельных
компонент внешней информационной среды ПС на определенные моменты времени.
Такая возможность базируется на ведении (формировании) архива состояний (или
изменений состояния) внешней информационной среды.

11.6.5. Защита от
несанкционированного доступа
. Каждому пользователю ПС предоставляет
определенные информационные и процедурные ресурсы (услуги), причем у разных
пользователей ПС предоставленные им ресурсы могут отличаться, иногда очень
существенно. Этот вид защиты должен обеспечить, чтобы каждый пользователь ПС
мог использовать только то, что ему предоставлено (санкционировано). Для этого
ПС в своей внешней информационной среде может хранить информацию о своих пользователях
и предоставленным им правах использования ресурсов, а также предоставлять
пользователям определенные возможности формирования этой информации. Защита от
несанкционированного доступа к ресурсам ПС осуществляется с помощью т.н. паролей (секретных слов). При этом
предполагается, что каждый пользователь знает только свой пароль,
зарегистрированный в ПС этим пользователем. Для доступа к выделенным ему
ресурсам он должен предъявить ПС свой пароль. Другими словами, пользователь как
бы «вешает замок» на предоставленные ему права доступа к ресурсам,
«ключ» от которого имеется только у этого пользователя.

Различают две
разновидности такой защиты:

·      простая
защита от несанкционированного доступа,

·      защита от
взлома защиты.

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

Защита
от взлома защиты
это такая разновидность
защиты от несанкционированного доступа, которая существенно затрудняет
преодоление этой защиты. Это связано с тем, что в отдельных случаях могут быть
предприняты настойчивые попытки взломать защиту от несанкционированного
доступа, если защищаемые ресурсы представляют для кого-то чрезвычайную
ценность. Для такого случая приходится предпринимать дополнительные меры
защиты. Во-первых, необходимо обеспечить, чтобы такую защиту нельзя было
обойти, т. е. должна действовать защита от влияния «чужих» программ. Во-вторых,
необходимо усилить простую защиту от несанкционированного доступа
использованием в ПС специальных программистских приемов, в достаточной степени
затрудняющих подбор подходящего пароля или его вычисление по информации,
хранящейся во внешней информационной среде ПС. Использование обычных паролей
оказывается недостаточной, когда речь идет о чрезвычайно настойчивом  стремлении добиться доступа к ценной информации.
Если требуемый пароль («замок») в явном виде хранится во внешней информационной
среде ПС, то «взломщик» этой защиты относительно легко может его
достать, имея доступ к этому ПС. Кроме того, следует иметь в виду, что с
помощью современных компьютеров можно осуществлять достаточно большой перебор
возможных паролей с целью найти подходящий.

Защититься от этого
можно следующим образом. Пароль (секретное слово или просто секретное целое
число) X должен быть известен только владельцу защищаемых прав доступа и он не
должен храниться во внешней информационной среде ПС. Для проверки  прав доступа во внешней информационной среде
ПС хранится другое число Y=F(X), однозначно вычисляемое ПС по предъявленному
паролю X. При этом функция F может быть хорошо известной всем пользователям ПС,
однако она должна обладать таким свойством, что восстановление слова X по Y
практически невозможно: при достаточно большой длине слова X (например, в
несколько сотен знаков) для этого может потребоваться астрономическое время.
Такое число Y будем называть электронной
(компьютерной) подписью владельца пароля X (а значит, и защищаемых прав доступа).

Другой способ защиты от
взлома защиты связан с защитой сообщений, пересылаемых по компьютерным сетям.
Такое сообщение может представлять команду на дистанционный доступ к ценной
информации, и этот доступ отправитель сообщения хочет защитить от возможных
искажений. Например, при осуществлении банковских операций с использованием
компьютерной сети. Использование компьютерной подписи в такой ситуации
недостаточно, так как защищаемое сообщение может быть перехвачено «взломщиком»
(например, на «перевалочных» пунктах компьютерной сети) и подменено другим
сообщением с сохранением компьютерной подписи (или пароля).

Защиту от такого взлома
защиты можно осуществить следующим образом [11.4]. Наряду с функцией F,
определяющей компьютерную подпись владельца пароля X, в ПС определены еще две
функции: Stamp и Notary. При передаче сообщения отправитель, помимо
компьютерной подписи Y=F(X), должен вычислить еще другое число S=Stamp(X,R),
где X
пароль, а R текст передаваемого сообщения. Здесь также предполагается,
что функция Stamp хорошо  известна всем
пользователям ПС и обладает таким свойством, что по S практически невозможно ни
восстановить число X, ни подобрать другой текст сообщения R с заданной
компьютерной подписью Y. При этом передаваемое сообщение (вместе со своей
защитой) должно иметь вид:

(R Y S),

причем Y (компьютерная подпись) позволяет
получателю сообщения установить истинность клиента, а S как бы скрепляет
защищаемый текст сообщения R с компьютерной подписью Y. В связи с этим будем
называть число S электронной (компьютерной) печатью. Функция Notary(R,Y,S).проверяет истинность защищаемого
сообщения:

(R,Y,S).

Эта позволяет получателю сообщения однозначно
установить, что текст сообщения R принадлежит владельцу пароля X.

11.6.6. Защита от защиты. Защита от несанкционированного
доступа может создать нежелательную ситуацию для самого владельца прав доступа
к ресурсам ПС

он не сможет воспользоваться этими правами, если забудет (или потеряет) свой
пароль («ключ»). Для защиты интересов пользователя в таких ситуациях и
предназначена защита от защиты. Для обеспечения такой защиты ПС должно иметь
привилегированного пользователя, называемого администратором ПС. Администратор ПС должен, в частности, отвечать
за функционирование защиты ПС: именно он должен формировать контингент
пользователей данного экземпляра ПС, предоставляя каждому из этих пользователей
определенные права доступа к ресурсам ПС. В ПС должна быть привилегированная
операция (для администратора), позволяющая временно снимать защиту от
несанкционированного доступа для пользователя с целью фиксации требуемого
пароля («замка»).

     Первоначальное значение термина
«криптография» —  «тайнопись», «тайное
письмо».

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

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

Криптосистема — семейство выбираемых с помощью ключа  обратимых преобразований, которые преобразуют
защищаемый открытый текст в шифрограмму, и обратно [56].

    По характеру использования ключа
известные  криптосистемы можно разделить
на два типа: симметричные (с секретным ключом) и несимметричные (с открытым
ключом).

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

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

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

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

Такие криптосистемы называются системами блочного  шифрования.

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

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

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

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

ключевого элемента.

Системы и механизмы защиты программных продуктов

Введение

Простая проверка поврежденного носителя

Ограничение числа установок программы

Ограничение числа запусков программы (limited use copy)

Контрольные вопросы

Временные (умирающие) версии

Версии, работающие с ограничениями

Анализ поверхности поврежденного носителя

Аппаратные ключи (dongles)

Сетевая защита

Немного о принятии решения

А как же быть с данными?

Crypto ++ SDK 3.0

Gus

CripKey

Microcosm Copy Protection

Dinkey Dongles

PC Guard

SafeSerial OCX для Windows 95, 98, NT, 2000

Wibu — Key

Lock & Key

Windows Protection Tool-Kit™

Sheriff

Hardlock Bistro

Введение

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

Несмотря на наличие всего комплекса
законодательных и правовых мер по защите
авторских и смежных прав на интеллектуальную
собственность, ситуация с так называемым
«черным» или, как его чаще называют, пиратским
рынком программного обеспечения остается весьма
плачевной. К примеру, ни для кого не секрет, что
подавляющее большинство программного
обеспечения в России нелицензионное, да что тут
говорить, достаточно вспомнить пресловутую
«Горбушку», где за умеренную плату (около 60 руб.)
можно приобрести компакт-диск, в то время как
цена содержащегося в нем лицензионного
программного обеспечения превышает сумму
примерно в 1000 раз. Разумеется, подобная проблема
существует не только на отечественном рынке
программного обеспечения, но и во всем мире.
Однако следует отметить, что так остро, как в
России, она почти нигде не стоит. В частности,
если средний процент пиратского программного
обеспечения по Европе составляет 20-40%, то в России
эта цифра близка к 95%.

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

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

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

Так что же и от кого следует
защищать?

В общих чертах ответ на этот вопрос
выглядит следующим образом:

  1. Выполняемые модули программы — от работы в несанкционированных условиях;
  2. Данные — от их использования независимо от выполняемых модулей;
  3. Программу — от ее несанкционированного копирования и/или применения;

Разумеется, в зависимости от характера
защищаемого программного обеспечения этот
список может меняться.

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

Теперь давайте последовательно рассмотрим механизмы, применяемые с целью защиты.

Простая проверка поврежденного носителя

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

Достоинства: простота и быстрота реализации.

Недостатки: требуется аппаратное участие со
стороны завода-производителя, достаточно зыбка и
в принципе легко взламываема.

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

Ограничение числа установок программы

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

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

Недостатки: требуется аппаратное участие со стороны завода-производителя; защита
не может быть применена самостоятельно (без проверки носителя на предмет наличия
дефекта поверхности).

Ограничение числа запусков программы (limited use copy)

Позволяет ограничить число
запусков программы. При каждом запуске программы
«вычитывается» значение количества оставшихся
запусков.

Достоинства: обладает хорошим рекламным
свойством.

Недостатки: для взлома достаточно определить место в системе (файл или системный
реестр), куда заносится информация о количестве оставшихся запусков.

Контрольные вопросы

Защищает выполняемые модули
программы от работы в несанкционированных
условиях. Как правило, срабатывает по истечении
определенного срока со дня применения.
Пользователю задается контрольный вопрос
(вопросы), требующий наличия у него лицензионной
версии программного продукта, например о
надписях на поверхности компакт-диска, или слова
из прилагаемой к программному обеспечению
инструкции. Таким образом, может быть обеспечена
привязка к поверхности компакт-диска, коробке
продукта или руководству пользователя. Основной
смысл здесь состоит в следующем: предположим, что
потенциальному взломщику удалось запустить
программу несанкционированно, тираж пиратских
копий им уже подготовлен и почти распродан, и тут
оказывается, что программа требует ввода
третьего слова с пятнадцатой строки на последней
странице справочного руководства.

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

Недостатки: механизм не может применяться как основное средство защиты программы
или обучающего курса.

Временные (умирающие) версии

Защищает выполняемые модули программы от работы в несанкционированных условиях.
Срабатывает по дате или по количеству запусков. Программа попросту перестает
работать начиная, например, с 2000 года. Применяется в основном для создания
временных, демонстрационных, так называемых «умирающих» (trial) версий. Возможно
применение другого варианта, например программа перестает работать под управлением
операционных систем, чьи системные файлы обновлялись позднее 2000 года (например,
system.ini, win.ini, control.ini …).

Достоинства: обеспечивает защиту в случаях,
когда создание полноценной защиты в силу
определенных обстоятельств невозможно. Один из
самых дешевых с точки зрения производства тиража
вариантов защиты (нет необходимости в сложных
технологических процессах повреждения
поверхности, ключевых дискетах и т.д.).

Недостатки: первый вариант попросту можно обойти, изменив системную дату, хотя
это и несколько неудобно для пользователя.

Версии, работающие с ограничениями

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

Достоинства:обладает хорошим рекламным
свойством. Программа в таком случае может
распространяться бесплатно, например в качестве
приложения к журналу или по сети Internet. Таким
образом с пользователя снимается необходимость
покупать «кота в мешке», а с разработчика —
затраты на рекламу, доставку, телефонные
разговоры или почтовые переводы.

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

Анализ поверхности поврежденного носителя

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

Достоинства: защита достаточно надежна и
обладает наименьшей степенью взламываемости.

Недостатки: защита сложна в реализации ввиду того, что различные устройства
носителей (в частности, CD-ROM) ведут себя совершенно по-разному при попытке
чтения поврежденной области. Например, подавляющее большинство устройств CD-ROM
(приблизительно 85%) попросту возвращают ошибку чтения. Однако некоторые устройства
зависают напрочь, что создает необходимость в реализации обходного варианта
для этих случаев. Приходится искусственно отлавливать зависший процесс, например
по таймеру, и «убивать» вручную, например программным открытием или закрытием
лотка устройства (так как все другие методы, как правило, ни к чему не приводят)
или перезагрузкой компьютера. В последнем случае, разумеется, следует позаботиться
о механизме регистрации событий, фиксирующем реализацию обходного варианта и
запускающем для таких устройств вспомогательную защиту, например «контрольные
вопросы». Может создавать определенный дискомфорт при запуске программы (простои,
перезагрузки, зависания).

Аппаратные ключи (dongles)

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

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

Недостатки:сложность и дороговизна реализации. Дискомфорт при работе (возможны
проблемы с портом и принтером). Механизм непригоден для продаж или распространения
программного обеспечения средствами Internet.

Сетевая защита

Обеспечивает работу
ограниченного числа зарегистрированных копий
программного продукта в локальной
вычислительной сети. Защита может быть
реализована как контроль над числом
одновременно работающих копий программы с
сервера приложений или в автономном (локальном)
режиме. Механизм требует наличия системы
слежения за числом одновременно работающих
копий и должен обеспечивать постановку
пользователей в очередь с автоматическим
запуском или без автоматического запуска
освободившейся копии. Кроме того, разработчик
приложения, желающий защитить его в локальной
вычислительной сети, должен подумать и о
механизме «дозакупки» рабочих мест такой
системы.

Достоинства: защита полезна при разработке
корпоративного продукта.

Недостатки:сложность реализации (необходимость поддержки различных протоколов
локальных сетей).

Немного о принятии решения

Разумеется, не следует сразу
же после возврата функции проверки легальности
программного продукта закрывать программу,
выдав при этом гордое предупреждение о том, что
защита «сработала». Целесообразнее применить
метод «глобальных переменных». Суть его
заключается в следующем: при запуске программы
инициализируются несколько глобальных
переменных, участвующих в программе во всех
основных вычислениях в разных модулях, объектах
и т.д. Значения этих переменных, присвоенные им по
умолчанию, никак не отражаются на результатах
вычислений, однако стоит защите «сработать»
как сразу же эти переменные получают совершенно
другие, неправильные значения, приводящие к
некорректной работе программы.

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

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

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

А как же быть с данными?

Представьте себе такую
картину: вы разрабатываете программный продукт,
например мультимедийный CD-ROM, который помимо
написанной талантливыми программистами
программы, содержит массу качественного и
актуального материала, например видеороликов
или звуков, которые в доступной форме лежат на
нем. Не правда ли обидно, ведь пользователь
такого диска может использовать все его данные
без искуснейшим образом защищенной программы. А
если это база данных в стандартном формате
(например, dbf), то тут и говорить не о чем, никому
тут программа нужна не будет, ведь основная
ценность такого пакета в первую очередь в данных.
Ясно одно, если тот или иной программный пакет
представляет собой не просто какое-то решение
или прикладной инструмент, а содержит еще и
актуальные данные, то встает вопрос о защите этих
данных от использования независимо от программы
их представления. Разумеется, речь идет лишь о
стандартных форматах данных.

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

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

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

Crypto ++ SDK 3.0

Copyright © 1997-1999 Sampson
Multimedia.

Инструментальный пакет Crypto++
SDK состоит из динамических библиотек OCX, DLL,
контролирующих весь процесс защиты, а также
вспомогательного средства Key Calculator Wizard,
позволяющего генерировать знаковые
последовательности для защиты приложений.

Crypto++ SDK применяется для защиты
программных продуктов методом “умирающих”
версий и предназначен для их распространения с
помощью Internet. При этом используются механизмы
ограничений количества запусков, инсталляций и
ограничения по дате работы программы. Помимо
этого в арсенале Crypto++ имеются также средства по
поддержке механизма привязки программного
продукта к конкретному компьютеру аппаратно.
Пакет содержит динамически подключаемые
библиотеки, поддерживающие многие
распространенные языки программирования, такие
как: Visual Basic, Visual C++, Delphi, C++ Builder и Borland C++ .
Поддерживается как Win32 так и Win16.

Кроме того, в Crypto ++ встроена поддержка
ActiveX и Director Xtras, последняя позволяет защищать
приложения, созданные с помощью Macromedia Director так
называемые прожекторы (projectors).

Временные (1 год) версии средств разработки механизмов защиты программных
продуктов с помощью Crypto++ SDK 3.0 можно скачать с сайта компании Sampson Multimedia.
При этом Вам по почте пришлют список паролей для распаковки скаченных Вами модулей
(при условии, что Вы указали свой электронный адрес во время регистрации).

Gus

Gus Communications, Inc.

Инструментальный пакет Gus
также представляет собой библиотеки OCX для
автоматизации разработки защиты программного
обеспечения. Механизм действия пакета похож на
механизм действия Crypto++. Защита, реализуемая с
помощью Gus Software Protection OCX полностью программная и
превращает зарегистрированные копии,
перенесенные на другие компьютеры во временные.

Системные требования: Windows 95/98 или Windows NT; Любой OCX (ActiveX) совместимый
язык программирования (Delphi, Visual Basic, Microsoft Visual C++ и т.д.).

CripKey

Kenonic Controls Ltd.

Разработчики предлагают
использовать два способа защиты приложений – с
помощью CripKey Software Developer Kit или программной
реализации тех же функций CrypKey Instant. Программа
автоматически устанавливает CrypKey в готовый EXE
(как Win 16 так и Win32). Далее заботливый мастер
проводит Вас, последовательно помогая выбрать
необходимые опции защиты (в основном это опции
ограниченной версии).

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

Основной отличительной особенностью
CrypKey является то, что он позволяет передавать
зарегистрированную версию от компьютера к
компьютеру, деинсталлируя при этом
версию-исходник.

Помимо этого, CrypKey может контролировать использование программного продукта
в локальной вычислительной сети. Это означает, что если пользователь заплатил
за 5 копий программного продукта, то 6-я копия с сервера приложений в локальной
сети не запуститься. Реализованная система не зависит от используемого протокола
(IPX, NetBios или WinSockets). Примечательно еще то, что при защите программного
продукта средствами CriptKey нет необходимости в разработке множества выполняемых
модулей для поддержки различных платформ и сетевых протоколов. Система снабжена
автоматическим менеджером очереди приложений, который уведомляет пользователей
очереди об освободившейся копии.

Microcosm Copy Protection

Microcosm Copy Protection

Из всего спектра программных решений
по защите, разрабатываемых компанией, рассмотрим
два следующих:

UnLock-It

Программа позволяет реализовать механизм ограниченных версий и не требует наличия
дополнительных аппаратных средств (дискет или аппаратных ключей). Обладает возможностью
сетевой защиты и антивирусной защиты выполняемых модулей. UnLock-It поддерживает
режим так называемого найма приложений, при котором пользователь может «заказать»
определенное количество запусков или определенное время работы приложения. UnLock-It
совместим с операционными системами: старше MS-DOS 2.0, PC DOS или Novell DOS,
Concurrent DOS, Windows 3.x, NT и с сетями DOS или Windows (включая Novell).

Dinkey Dongles

Реализует механизм аппаратного ключа,
используя для этого порт принтера.

Поддерживает четыре режима Dinkey Dongle: Dinkey 1, Dinkey 1S,
Dinkey 2 и Dinkey Net.

Dinkey 1: уникальный серийный номер,
присвоенный аппаратному ключу, позволяет
защитить лишь одно приложение;

Dinkey 1S: серии аппаратных ключей присваивается
один и тот же серийный номер. Таким образом,
разработчик может тиражировать программное
обеспечение без его индивидуализации, для
использования с определенным аппаратным ключом;

Dinkey 2: позволяет реализовать временные или
ограниченные версии на базе аппаратного ключа, а
также одновременную защиту до 17 приложений.
Имеет возможность дистанционно изменять
параметры защиты.

Dinkey Net: представляет собой сетевую версию аппаратного ключа Dinkey 2. При
установке в локальной вычислительной сети реализует механизм сетевой защиты.
Имеет возможность дистанционно изменять параметры защиты.

PC Guard

Copyright © by Blagoje Ceklic

Инструментальный пакет PC Guard
представляет собой систему защиты программных
продуктов, позволяющую полностью
автоматизировать этот процесс. PC Guard достаточно
прост в обращении. Принцип его работы
заключается в том, что вокруг защищаемой
программы создается этакий конверт, защищающий
ее от анализа потенциальным взломщиком или
копирования с одного компьютера на другие.
Замечательно то, что PC Guard легко комбинируется с
любым другим механизмом защиты. Кроме того, в PC
Guard для Win32 встроена функция защиты приложения
паролем. Защитить можно непосредственно модули
EXE или DLL. Этот механизм не требует встраивания
библиотек в код защищаемого программного
продукта, обеспечивая, таким образом, поддержку
практически любого языка программирования.
Защитный конверт состоит из нескольких защитных
слоев, каждый из которых реализует
соответствующую задачу (защита от анализа
выполняемых модулей, защита с использованием
механизмов ограничений, защита паролем).

PC Guard позволяет обеспечить привязку защищаемого программного продукта к
аппаратуре компьютера, а именно: к жесткому диску, к дате BIOS и к установленной
операционной системе. PC Guard работает под управлением операционных систем
DOS,Windows 3.x (Win16) и Windows 95/98/NT (Win32).

SafeSerial OCX для Windows 95, 98, NT, 2000

Sikander Soft Inc.

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

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

Следует отметить, что отличительной
особенностью библиотек OCX по сравнению со
стандартными DLL является максимальная простота
встраивания в код разрабатываемой программы.
Необходимо всего лишь «перетащить» компонент
управления на основную «форму» защищаемого
приложения. Наглядным примером тому служит SafeSerial
OCX. Добавьте к этому еще и набор всевозможных
стандартных сообщений и диалоговых окон на 8
различных языках.

Библиотека поддерживает языки программирования Delphi (только Win32) , Visual
Basic, C++ Builder и другие, поддерживающие механизм ActiveX. Для получения
более детальных сведений о работе системы разработчики советуют прочитать руководство
по использованию SafeSerial OCX.

Wibu — Key

©1999 Copy-Protection.com.

Компания ©1999 Copy-Protection.com
разработала и реализовала механизм аппаратного
ключа в своем продукте WIBU-KEY Copy Protection System.
Основной областью применения разработанной
технологии выбрана защита программ, работающих в
вычислительных сетях.

Аппаратные ключи разрабатываются на базе чипов ASIC (Application Specific
Integrated Circuit) и совместимы с персональными компьютерами как PC так и Macintosh.

Lock & Key

Timeless Technologies, Inc.

Lock & Key разработан для платформ Windows 3.x, 95/98, NT и полностью
совместим с Delphi версий 1, 2, 3, 4. Представляет собой достаточно простую
реализацию стандартных алгоритмов по созданию временных или ограниченных версий
программных продуктов.

Windows Protection Tool-Kit™

Advanced Software Technologies

Инструментальный пакет Windows
Protection Tool-Kit™ работает под управлением Windows 3.x, 95/98,
NT. Оснащен механизмом привязки к ключевой
дискете, работающим, правда, только под
управлением Windows NT. Может защищать программы для
работы в локальных сетях на базе Windows NT, Lantastic или
Novell. Защищаемые приложения могут привязываться к
жесткому диску или к локальной сети. По желанию
можно создавать версии с ограничением
количества инсталляций, и даже умеющие
возвращать количество инсталляций при
деинсталляции защищенного программного
продукта.

Однако система защищает программный
продукт лишь на стадии его установки (setup).

Пакет Windows Protection Tool-Kit™ совместим с такими известными пакетами
автоматизации создания инсталляций, как Install Shield и Visual Basic’s Setup
Wizard, а разрабатывался он для WISE Installation System.

Sheriff

Acudata Limited

Инструментальный комплекс
Sheriff предлагает еще одно средство разработки
механизма программной защиты приложений
(временных и ограниченных версий) – Sheriff Software
Development Kit (SDK) для Win32.

Sheriff представлен пользователю
достаточно гибким набором библиотек: как
стандартной Windows DLL, так и компонентом ActiveX (OCX
control).

В отличие от решений, рассмотренных
ранее, API системы Sheriff предлагает самостоятельно
настроить все характеристики создаваемой версии
программного продукта, а не заполнить поля в
стандартном диалоговом окне. Предлагаемый SDK
достаточно гибок и включает классы и
демонстрационные примеры на различных языках с
использованием разнообразных технологий: Visual C++,
Visual Basic, Visual FoxPro и Delphi, а также ActiveX Сontrol.

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

Hardlock Bistro

Aladdin Knowledge Systems GmbH & Co.

Компания Aladdin разработала
Hardlock Bistro – целую серию средств для защиты
приложений. Aladdin предлагает наиболее полный
набор средств автоматизации защиты приложений,
входящих в состав Hardlock Bistro: Espresso Wizard, Espresso, Cappuccino и
Lattecino, и девять различных аппаратных привязок для
обеспечения функционирования разных механизмов
аппаратных зависимостей.

Этакий интерфейс самого высокого
уровня между собственно модулем Hardlock и
защищаемой программой. Чуть «ниже»
располагается следующий модуль – программа
Espresso, позволяющая защищать программы в
автоматизированном режиме, а для любителей
программировать Aladdin предлагает реализацию API –
Lattecino. В любом случае Hardlock Bistro заботливо проведет
Вас последовательно по всем этапам создания
защиты.

Немного о специфике рынка

Рассмотрев различные
средства автоматизации процесса защиты
программных продуктов, мы видим, что все они в
основном принадлежат к двум классам:

системы, предназначенные для создания временных
или ограниченных копий;

системы с аппаратными ключами защиты;

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

В то же время, как показывает практика,
многие отечественные пользователи предпочитают
применять ограниченные или временные версии
программ, вместо того чтобы покупать полные.

Альтернативой этим двум системам
являются системы защиты с анализом поверхности
поврежденного носителя. И хотя такие системы
неприемлемы для распространения программы
средствами Internet, но довольно-таки надежны.

Все рассмотренные системы различаются
как по реализуемым механизмам защиты, так и по
надежности. Весь вопрос в том, какую систему
применять для защиты того или иного программного
продукта. Здесь имеет место взаимосвязь
игра-свечи как для потенциального взломщика, так
и для потенциального покупателя.

И в заключение

Несколько полезных ссылок для
разработчиков:

Много разнообразных полезных инструментов в помощь разработчикам как прикладного,
так и системного программного обеспечения вы найдете на http://computer.org/computer/tools/sof-toc.htm

Сайт рейтингов различных программ и инструментальных пакетов находится на сайте
http://topsoft.com/.

Советую также заглянуть на сайт http://www.winfiles.com/.

КомпьютерПресс 11’1999

Защита ПО, статьи


Безопасность

Свежие лицензионные ключи для ESET NOD32 Internet Security до 2019-2020 года

07 Март 2019


Игры


Инструкции

Как в Steam сменить логин и ник?

29 Апрель 2019


Обзор ПО

Teamviewer: что это за программа

30 Май 2022


Настройка

Где закладки в Яндекс браузере на Андроид телефон

28 Декабрь 2018

ЛЕКЦИЯ 30

Тема 3.8 Защитное программирование

1.     Способы проявления ошибок.

2.     Принципы защитного программирования.

3.     Рекомендации по защитному программированию.

1. Способы проявления ошибок

Любая из ошибок программирования,
которая не обнаруживается на этапах компиляции и компоновки программ, в
конечном счете может проявиться тремя способами: привести к выдаче системного
сообщения об ошибке, «зависанию» компьютера и получению неверных результатов.

Рисунок 1 — Способы проявления ошибок

Однако до того как результат работы
программы становится фатальным, ошибки обычно много раз проявляются в виде
неверных промежуточных результатов, неверных управляющих переменных, неверных
типах данных, индексах структур данных и т.д. (рисунок 3.1). А это значит, что
часть ошибок можно попытаться обнаружить и нейтрализовать, пока они еще не
привели к тяжелым последствиям. Для этого используется защитное
программирование. При его использовании существенно уменьшается вероятность
получения неверных результатов.

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

Детальный анализ ошибок и их возможных
ранних проявлений показывает, что целесообразно проверять:

      
правильность выполнения операций ввода-вывода;

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

Проверка
правильности операций ввода-вывода.

Причины неверного определения исходных
данных:

      
внутренние ошибки – ошибки устройств ввода-вывода
или программного обеспечения;

      
внешние ошибки – ошибки пользователя.

Различают:

         
ошибки передачи (аппаратные средства, например,
вследствие неисправности, искажают данные);

         
ошибки преобразования (программа неверно
преобразует исходные данные из входного формата во внутренний);

         
ошибки перезаписи (пользователь ошибается при вводе
данных, например, вводит лишний или другой символ);

         
ошибки данных (пользователь вводит неверные
данные).

Ошибки передачи обычно контролируются
аппаратно.

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

Обнаружить и устранить ошибки
перезаписи можно только, если пользователь вводит избыточные данные, например
контрольные суммы. Если ввод избыточных данных нежелателен, то следует проверять
вводимые данные, хотя бы контролировать интервалы возможных значений, которые
обычно определены в техническом задании, и выводить введенные данные для
проверки пользователю.

Неверные данные может обнаружить
только пользователь.

Проверка
допустимости промежуточных результатов.

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

Предотвращение
накопления погрешностей.

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

      
избегать вычитания близких чисел (машинный ноль);

      
избегать деления больших чисел на малые;

      
сложение длинной последовательности чисел начинать
с меньших по абсолютной величине;

      
стремиться по возможности уменьшать количество
операций;

      
использовать методы с известными оценками
погрешностей;

      
не использовать условие равенства вещественных
чисел;

      
вычисления производить с двойной точность, а
результат выдавать – с одинарной.

Обработка
исключений.

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

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

2. Принципы защитного программирования

Существуют три основных принципа
защитного программирования:

1.    
Общее недоверие. Для каждого модуля входные данные должны
тщательно анализироваться в предположении, что они могут быть ошибочными.

2.    
Немедленное
обнаружение.
Каждая
ошибка должна быть выявлена как можно раньше, это упрощает установление ее
причины.

3.    
Изолирование ошибки. Ошибки в одном модуле должны быть изолированы
так, чтобы не допустить их влияние на другие модули.

3. Рекомендации по защитному программированию

Рекомендации по защитному
программированию:

       Делайте проверку области значений переменных.

       Выполняйте контроль правдоподобности значений
переменных, которые не должны превышать некоторых констант или значений других
переменных

       Контролируйте итоги вычислений.

       Включайте автоматические проверки (например,
контроль переполнения или потери точности).

       Проверяйте длину элементов информации.

       Проверяйте коды возврата функций.

Понравилась статья? Поделить с друзьями:
  • Зачем ты с ошибками пишешь
  • Защита от случайной ошибки в бережливом производстве это
  • Зачем ты вернулся назад лексическая ошибка
  • Защита от ошибок пока йоке
  • Зачем стирать ошибки на автомобиле