Комплексная защита программного обеспечения
15 апреля 2000 годаСравнение защитных возможностей электронных ключей от компаний «Актив» и Multisoft, проведенное редакцией журнала PC Magazine. Исследуются как характеристики самих ключей, так и программный инструментарий разработчика защиты.
На страницах нашего журнала мы уже не раз рассказывали о так называемых «донглях» (dongle) — электронных ключах для параллельного порта. Этот тип аппаратной защиты по праву считается одновременно удобным и очень надежным. Дополнив готовое программное обеспечение модулем идентификации электронного ключа, разработчик предотвращает использование незаконных копий этого программного обеспечения.
Подделка электронного ключа — очень ресурсоемкий процесс. Для решения этой задачи требуется не только высочайшая квалификация, но и широкие технические возможности.
Среди методов взлома программного обеспечения, защищенного электронными ключами, самые очевидные и чаще всего используемые подходы — это создание эмулятора электронного ключа и коррекция участков кода программы, содержащих зависящие от наличия ключа условия. В первом случае злоумышленник пытается передать программе верный ответ на запрос к ключу, во втором же — вовсе избежать такого запроса.
Сложная внутренняя структура современных электронных ключей и уникальные внутренние идентификаторы, применяемые в алгоритмах ключа, призваны свести к минимуму возможность изготовления полноценного аппаратного дубликата. Но всегда остается опасность, что недостаточно надежными окажутся алгоритмы защиты, встроенные в программное обеспечение. Многие разработчики электронных ключей предлагают решения, направленные на увеличение этой надежности.
В нашу испытательную лабораторию были представлены два схожих изделия — стартовый комплект разработчика SmartKey Plus+ и мастер-комплект Guardant, предлагаемые компаниями Multisoft и «Актив» соответственно.
SmartKey Plus+ SP
Электронные ключи SmartKey Plus+ построены на основе ASIC-микросхемы. Они содержат встроенную энергонезависимую память, размер который, в зависимости от модификации, составляет от 64 до 416 байт. Каждый ключ защищен уникальным идентификационным номером и двумя 16-байт перезаписываемыми кодами доступа, недоступными для чтения. Попытка записи этих кодов повлечет за собой стирание памяти ключа.
Один из двух кодов доступа к ключу используется в качестве метки ключа, второй — в качестве пароля при обращении к ключу. Немаловажен тот факт, что формат ответа при неверно указанных кодах доступа ничем не отличается от формата «правильного» ответа.
Модельный ряд SmartKey Plus+ включает как LPT- так и USB-модели. В представленный нам для проведения испытаний комплект входил ключ SmartKey Plus+ SP для параллельного порта. В нем реализованы все инструменты защиты, предусмотренные в ключах серии SmartKey, но он соответственно и самый дорогой.
Для построения механизмов защиты может применяться аппаратно реализованный алгоритм преобразования, режим Scrambling, в котором используется уникальный идентификационный номер разработчика. Этот номер присваивается каждому заказчику и гарантирует, что все ключи его серии будут выполнять преобразование одинаково, но отлично от ключей других пользователей. Помимо аппаратного, пользователь может запрограммировать свои, произвольные алгоритмы. Они будут записаны в память ключа.
Еще один инструмент защиты — наличие в ключах SmartKey Plus+ счетчика ошибок доступа по паролю с увеличением на единицу всякий раз, когда при обращении к ключу был указан неверный пароль.
В комплект разработчика помимо самого ключа входит компакт-диск с программным обеспечением, библиотеками и примерами программ, а также документация.
Guardant Stealth
Ключи Guardant — это разработка российской компании «Актив». В этих электронных ключах, в отличие от ключей SmartKey Plus+ с ASIC, используются микроконтроллеры. Ключ Guardant Stealth защищен тремя кодами доступа, под которые отведено 14 байт. Эти коды не могут быть ни считаны, ни перезаписаны. Размер встроенной энергонезависимой памяти ключа составляет 256 байт. Однако 30 байт зарезервировано под служебную информацию ключа и в режиме UAM (пользовательский режим адресации) доступны только 226 байт.
В отличие от ключей SmartKey, в Guardant Stealth реализовано 18 (!) аппаратных алгоритмов преобразования, каждый из которых можно настроить на использование идентификационного номера ключа. В этом случае пользователь получает гарантию, что функции преобразования его ключа уникальны. Кроме того, пользователь может создавать собственные алгоритмы, однако теоретически защищенность аппаратных алгоритмов выше.
В мастер-комплект Guardant, помимо собственно ключа, входят документация и компакт-диск с программным обеспечением и библиотеками разработчика. Необходимо отметить, что все программное обеспечение имеет русскоязычный интерфейс, а подробнейшее руководство пользователя (более 300 страниц) заслуживает самой высокой оценки.
Методы защиты
Программное обеспечение обоих комплектов включает в себя утилиты для защиты готовых программ и кодирования ключей. Разработчику достаточно настроить электронный ключ (ввести защитные коды) и указать, какие именно файлы он хотел бы защитить, чтобы его программное обеспечение стало «ключезависимым». Кроме того, в программу будут встроены модули обнаружения программ-отладчиков в памяти системы, используемых злоумышленниками.
Однако это — защита самого низшего уровня. Гораздо более надежной защитой будет внедрение методов работы с электронным ключом на уровне исходного кода программы. В предоставляемых разработчиками API содержатся все необходимые для этого функции. Алгоритмы взаимодействия программы с электронным ключом могут задействовать все описанные выше аппаратные возможности этих устройств. В памяти ключа могут храниться необходимые программе константы, а результаты сделанных ключом преобразований можно использовать в качестве условий перехода.
Очень мощные методы — хранение части кода в памяти ключа или перепрограммирование ключа во время выполнения программы. Обойти такую защиту, заблокировав в коде обращения к электронному ключу, злоумышленнику уже не удастся, ведь тогда программа будет функционировать неверно или попросту откажется работать.
Кроме того, возможны и другие варианты применения электронных ключей. Например, записав в памяти ключа дату окончания лицензии и встроив в программу соответствующий алгоритм проверки, разработчик получает гарантию, что по окончании лицензии программа не будет использоваться. С другой стороны, чтобы продлить лицензию для конкретного пользователя, достаточно будет просто перепрограммировать его ключ.
Способов применения программируемых электронных ключей можно придумать еще множество, тем более что модельные ряды SmartKey и Guardant достаточно велики и входящие в них ключи имеют разные возможности. За рамками статьи остались, например, модели ключей, предназначенные для использования с сетевыми приложениями.
В заключение лишь еще раз подчеркнем, что максимальный уровень защиты можно получить только тогда, когда алгоритмы защиты встроены в программное обеспечение еще на стадии программирования.