Базовые методы программной защиты

      Комментарии к записи Базовые методы программной защиты отключены

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

К базовым методам защиты программ от незаконного использования отнесем широко распространенные на практике методы. Это

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

Парольная защита

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

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

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

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

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

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

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

1) эталон хранится непосредственно в защищенной программе;

2) эталон хранится в отдельном специально предназначенном файле (этот способ часто используют при защите Windows-приложений);

3) эталон хранится в системных областях (в свободных, зарезервированных или редко используемых областях дисков). Например, оригинальный пароль записан в один из последних секторов корневого каталога. При защитеWindows-приложений разработчики часто хранят оригинальный пароль в системной базе данных Registry.

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

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

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

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

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

Хорошо зарекомендовал себя метод шифрования пароля. «Шифровка даже при использовании некриптостойких алгоритмов и коротких паролей все же требует трудоемкого изучения алгоритма, написания атакующих программ и часто очень длительного времени на поиск подходящего пароля» [20, стр.86].

!

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

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

Шифрование

Шифрование — это обратимое преобразование информации с целью сокрытия ее содержания для неавторизованных лиц.

Авторизованное (неавторизованное) лицо — пользователь, имеющий (не имеющий) право на доступ к информации.

Дешифрование — преобразование информации, обратное шифрованию.

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

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

Криптографические методы и алгоритмы подробно изложены в литературе, например, в учебном пособии Ю.С. Харин, В.И. Берник, Г.В. Матвеев «Математические основы криптологии» [21]. Поэтому здесь только перечислим основные методы и криптоалгоритмы, а также остановимся на способах применения шифрования для защиты авторских прав в сфере программного обеспечения.

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

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

Здесь под стойкостью (надежностью) криптоалгоритма понимают количество компьютерных операций, необходимых криптоаналитику для вскрытия ключа (или исходного текста) [21]

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

!

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

На практике применяются в основном два вида криптосистем:

  • симметричные и
  • асимметричные.

В симметричных криптосистемах одним и тем же секретным ключом осуществляется и шифрование, и дешифрование. Наиболее известными симметричными криптосистемами являются системы DES, GOST (ГОСТ),IDEA, являющиеся национальными стандартами.

В асимметричных криптосистемах используются разные ключи для шифрования и дешифрования. Несекретный (открытый) ключ используется для шифрования, секретный — для дешифрования. С помощью открытого ключа любой может зашифровать информацию, но только человек, знающий секретный ключ, может произвести дешифрацию. Асимметричные криптосистемы называют также системами с открытым ключом. Метод шифрования RSA — метод шифрования с открытым ключом. Это один из самых надежных и широко используемых на практике методов. Алгоритм Эль-Гамаля — второй метод шифрования с открытым ключом, который получил широкое признание. На основе алгоритмов RSA и Эль-Гамаля приняты национальные стандарты.

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

!

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

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

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

В самом деле,

0 xor 0 = 0

0 xor 1 = 1 = Text xor Key = Shifr

1 xor 0 = 1 Shifr xor Key = Text

1 xor 1 = 0

!

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

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

!

стойкость шифра должна определяться только секретностью ключа(правило Кирхгоффа).

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

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

Шифрование кода программы

Код программы шифруется с тем, чтобы быть расшифрованным только во время выполнения программы.

Шифрование фрагмента (участка) программы.

Для шифрования чаще выбирается критический участок программы.

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

Шифрование пароля.

Этот метод упоминался выше.

Шифрование данных.

Зашифрованные команды после дешифрации легко «узнать на вид», поэтому рекомендуется шифровать данные.

!

Сильной реализацией специалистами признается шифрование данных прямо в исходном тексте программы.

Статьи к прочтению:

Программное обеспечение


Похожие статьи: