Патент на изобретение №2159953
|
||||||||||||||||||||||||||
(54) СПОСОБ ЗАЩИТЫ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
(57) Реферат: Изобретение относится к вычислительной технике и может быть использовано для защиты программного обеспечения от несанкционированного использования, распространения и исследования. Техническим результатом является обеспечение надежной защиты программного обеспечения при минимальных затратах на защиту. Способ заключается в том, что записывают программное обеспечение с предварительно введенным в него неповторяющимся кодом, при этом производят изъятие по меньшей мере одной функциональной компоненты, вводят в программное обеспечение с помощью элементов защиты код аппаратуры и код копии программного обеспечения, которые передают поставщику программного обеспечения или лицензионному органу, от которых принимают и вводят в программное обеспечение активационный код, формируют код на основе хода аппаратуры, кода копии программного обеспечения и активационного кода, затем при его совпадении со скрытым в программном обеспечении неповторяющимся кодом, разрешают использование и/или копирование программного обеспечения, при этом передают ранее изъятую компоненту санкционированному пользователю. 5 з.п. ф-лы. Настоящее изобретение относится к вычислительной технике и может быть использовано для защиты программного обеспечения от несанкционированного использования, распространения, исследования. Способ может быть использован разработчиками, поставщиками (продавцами) программного обеспечения или лицензионными органами для следующих целей: защиты от несанкционированного распространения программного обеспечения как зарегистрированными, так и незарегистрированными пользователями; защиты от несанкционированного использования функциональных возможностей программного обеспечения: защиты содержащихся в программном обеспечении “ноу-хау”, т.е. секретов реализации каких-либо функциональных возможностей и других сведений, не подлежащих разглашению. Известны различные способы защиты программного обеспечения от несанкционированного использования и распространения: – парольная защита (большая часть продаваемого программного обеспечения защищается этим способом, например, Adobe Illustrator x. x фирмы Adobe Systems Inc. [1], SCO Open Server x.x фирмы Santa Cruz Operation Ltd., [2]); – защита с помощью ключевых носителей, в качестве которых пользуются, например, картонные карты с кодовой перфорацией, магнитные карты компании OMRON Electronics Ltd. [3], магнитные носители с дефектами [4], интеллектуальные электронные ключи на базе процессоров и микросхем памяти (электронные идентификаторы Touch-Memory [5], электронные ключи HASP фирмы Aladdin Knowledge Systems Ltd [6]); – защита, основанная на взаимодействии пользователя программного обеспечения с поставщиком программного обеспечения и обмене регистрационными данными [7]. Парольная защита программного обеспечения является наиболее простой и наиболее слабой. При ее использовании возможно несанкционированное распространение программного обеспечения зарегистрированным пользователем, так как ему известен пароль (активационный код). Возможна также передача зарегистрированным пользователем активационного кода незарегистрированному пользователю с последующим несанкционированным использованием и/или распространением программного обеспечения. В глобальной сети Internet можно найти активационные коды для большого количества программных продуктов, что позволяет при наличии нелицензионной копии программного обеспечения несанкционированно использовать и/или распространять это программное обеспечение. Программное обеспечение также может быть подвергнуто анализу с помощью программ-дизассемблеров типа IDA [8] (статические методы анализа) и программ-отладчиков типа SoftlCE [9] (динамические методы анализа) пользователями средней и высокой квалификации с целью выявления “ноу-хау” и/или информации, не подлежащей разглашению, а также для обнаружения и исключения из программного обеспечения областей проверки активационного кода для несанкционированного использования и/или распространения программного обеспечения без применения активационного кода. Иногда для одного программного продукта используется несколько активационных кодов с целью ограничения несанкционированного использования всех функциональных возможностей этого программного продукта. Более устойчивой является защита программного обеспечения с помощью ключевых носителей. При распространении и/или использовании программного обеспечения необходимо наличие ключевого носителя (перфокарты, магнитной карты [3], электронного идентификатора Touch-Memory [5] и так далее), взаимодействующего с программным обеспечением с использованием аппаратных средств (например, считывателей перфокарт, считывателей магнитных карт, считывателей электронных идентификаторов Touch-Memory, портов ввода-вывода вычислительных машин). Наиболее современными из ключевых носителей являются интеллектуальные устройства на базе процессоров, реализующие сложные и защищенные протоколы взаимодействия защищаемого программного обеспечения и ключевого носителя. Применение ключевых носителей обеспечивает защиту от несанкционированного использования функциональных возможностей и/или распространения программного обеспечения зарегистрированными и незарегистрированными пользователями низкой и средней квалификации. Однако эта защита является недостаточной от исследования программного обеспечения такими методами, как анализ программного обеспечения с помощью программ-отладчиков типа SoftICE [9], анализ программного обеспечения с помощью аппаратных эмуляторов вычислительной среды, анализ протоколов взаимодействия программного обеспечения с ключевыми носителями с применением измерительной аппаратуры, например, логических анализаторов типа HP 54620A, HP 54620C, HP 1664A фирмы Hewlett Packard [10], анализ программного обеспечения с помощью программ-дизассемблеров типа IDA [8] зарегистрированными пользователями высокой квалификации с целью выявления “ноу-хау” и/или информации, не подлежащей разглашению, а также для обнаружения и исключения из программного обеспечения областей проверки ключевого носителя для несанкционированного использования и/или распространения программного обеспечения без применения ключевого носителя. Существенным недостатком такой защиты является также повышенная стоимость аппаратного обеспечения защиты, в некоторых случаях сопоставимая со стоимостью защищаемого программного обеспечения. Защита, основанная на вводе регистрационных данных и взаимодействии с поставщиком программного обеспечения, не требует наличия аппаратных средств защиты, препятствует несанкционированному распространению и использованию программного обеспечения зарегистрированными и незарегистрированными пользователями низкой и средней квалификации. Достоинством этого способа защиты является то, что контроль распространения программного обеспечения производится постоянно, при каждом копировании программного обеспечения, а не однократно, как при парольной защите. Известен способ защиты программного обеспечения [7], обеспечивающий защиту от несанкционированного использования и распространения программного обеспечения, учитывающий привязку программного обеспечения к вычислительной среде, в которой оно функционирует, и количество сделанных копий программного обеспечения. При использовании этого способа пользователь вводит код аппаратуры и код копии программного обеспечения, передает эти коды поставщику программного обеспечения, а также сообщает последнему об использовании оригинального программного обеспечения или его копии, количестве сделанных копий и номере копии. Поставщик программного обеспечения анализирует принятые данные, и в случае согласия на копирование программного обеспечения формирует с использованием кода аппаратуры и кода копии программного обеспечения активационный код, который передает пользователю программного обеспечения. Пользователь программного обеспечения принимает от поставщика и вводит активационный код. Промежуточный код, сформированный на основе введенных кода аппаратуры, кода копии программного обеспечения и активационного кода, сравнивается со скрытым в программном обеспечении неповторяющимся кодом, и при их совпадении разрешается использование и/или копирование программного обеспечения. При копировании программного обеспечения скрытый неповторяющийся код автоматически изменяется по закону, известному поставщику. Однако эта защита является недостаточной от анализа программного обеспечения с помощью программ-дизассемблеров типа IDA [8] (статические методы анализа) и программ-отладчиков типа SoftICE [9] (динамические методы анализа) зарегистрированными и незарегистрированными пользователями средней и высокой квалификации с целью выявления “ноу-хау” и/или информации, не подлежащей разглашению, а также для обнаружения и исключения из программного обеспечения областей проверки регистрационных данных для несанкционированного использования и/или распространения программного обеспечения без взаимодействия с поставщиком программного обеспечения. В основу настоящего изобретения положена задача создания способа защиты программного обеспечения, обеспечивающего повышение степени защиты за счет усложнения анализа программного обеспечения и активного противодействия злоумышленникам. Поставленная задача решается тем, что в способе защиты программного обеспечения, заключающемся в том, что на носителе записывают программное обеспечение с предварительно введенным в него неповторяющимся кодом, с использованием элементов защиты вводят в программное обеспечение код аппаратуры и код копии программного обеспечения, которые затем передают поставщику программного обеспечения или лицензионному органу, принимают от поставщика или лицензионного органа и вводят в программное обеспечение активационный код, формируют код на основе кодов аппаратуры, копии программного обеспечения и активационного кода, при совпадении скрытого в программном обеспечении неповторяющегося кода и сформированного кода разрешают использование и/или копирование программного обеспечения, согласно изобретению, при записи программного обеспечения производят изъятие по меньшей мере одной функциональной компоненты, которую передают санкционированному пользователю с последующим внедрением его в программное обеспечение при разрешении использования и/или копирования программного обеспечение. Изъятие и последующее внедрение по меньшей мере одной важной функциональной компоненты позволяет защититься от полного или частичного несанкционированного использования функциональных возможностей программного обеспечения. При двух и более изъятых функциональных компонент их передают санкционированному пользователю полностью или частично в зависимости от условий соглашения между пользователем и поставщиком программного обеспечения или лицензионного органа. С целью защиты от исследования и логического разбора программного обеспечения с помощью дизассемблера дополнительно осуществляют замену первоначальных кодов команд передачи управления программного обеспечения на коды команд, которые вызывают активацию элемента защиты, передающего управление в соответствии с кодами команд передачи управления, хранящимися в таблице, содержимое которой доступно только элементу защиты. Активацию элементов защиты, распределенных внутри программного обеспечения, можно производить псевдослучайным или случайным образом. Это позволяет скрыть наличие элементов защиты от злоумышленника в течение длительного времени, так как он вынужден исследовать программное обеспечение полностью, затрачивая на это много времени. Использование для активации элементов защиты, распределенных внутри программного обеспечения, значений параметров, характеризующих состояния электронно-вычислительной машины, позволяет определять наличие нежелательных аппаратных и программных средств и активно противодействовать им. Для обеспечения криптографической защиты по меньшей мере одного файла программного обеспечения от статического исследования значения параметров, характеризующих состояния, в том числе и прогнозируемые, электронно-вычислительной машины, используют для формирования ключа и/или криптографического преобразования, с помощью которых шифруют, расшифровывают и перешифровывают модифицируемое или самомодифицирующееся при выполнении программное обеспечение. Предлагаемый способ защиты программного обеспечения осуществляют следующим образом. Ниже приводится один из возможных примеров реализации способа для вычислительной машины типа IBM PC и операционной системы Windows 9x. На распространяемый носитель программного обеспечения, в качестве которого может быть использован, например, гибкий магнитный диск, CD-ROM, носитель с использованием микросхем памяти, записывают программное обеспечение, из которого изъята по меньшей мере одна функциональная компонента, например важный исполняемый (объектный) код, без которого оно неработоспособно или функционально ограничено. В качестве такой функциональной компоненты используется, например, последовательность команд электронно-вычислительной машины, реализующих определенную функцию программного обеспечения. При установке программного обеспечения в электронно-вычислительную машину пользователь запускает специальную программу-установщик, обычно называемую инсталлятором, которая проверяет наличие в электронно-вычислительной машине исполняемых программ-отладчиков типа SoftICE [9], а также программ исследования вычислительной среды типа RegMon, FileMon, VxDMon [11], и в случае их отсутствия начинает процедуру установки программного обеспечения, иначе установка запрещается. При установке инсталлятор определяет параметры вычислительной среды, например такие, как номер и дату BIOS, серийные номера контроллеров, структуру и разбиение магнитного диска, содержимое списка загружаемых драйверов, содержимое основных системных файлов и вычисляет эталонное значение хэш-функции (например, по алгоритму хэширования MD5 RFC 1321) по значениям этих параметров, которое сохраняет в скрытом виде, например, в программном обеспечении. Далее эталонное значение хэш-функции, код аппаратуры и введений код копии (серийный номер) программного обеспечения пересылают поставщику программного обеспечения или лицензионному органу, например, с использованием сервиса “электронной почты” по сети передачи данных или по телефону через телефонную сеть общего пользования. Поставщик программного обеспечения, в случае согласия на установку конкретной копии программного обеспечения в конкретной электронно-вычислительной машине, пересылает пользователю активационный код и недостающие функциональные компоненты, например, с использованием сервиса “электронной почты” по сетям передачи данных в виде файла (файлов). Внедрение принятых компонент в программное обеспечение может производиться как вручную (путем выполнения команд копирования/объединения файлов из командной строки), так и автоматически, например, инсталлятором. Количество передаваемых и внедряемых в программное обеспечение функциональных компонент и, соответственно, реализуемая функциональность программного обеспечения, зависят от условий соглашения между пользователем и поставщиком программного обеспечения или лицензионным органом. Например, на поставляемом CD-ROM с операционной системой SCO OpenServer 5.x фирмы Santa Cruz Operation имеется несколько редакций операционной системы: – SCO Desktop System; – SCO Host System; – SCO Enterprise System; а также ряд дополнительных программных продуктов: – SCO Development System (библиотеки и средства разработки приложений для данной операционной системы); – SCO Merge (продукт, позволяющий запускать DOS-приложения в операционной системе SCO OpenServer); – Symmetrical Multiprocessing Support (продукт, поддерживающий многопроцессорную работу операционной системы); – SCO Virtual Disk Manager (продукт поддержки надежных дисковых систем); – SCO WABI. При необходимости использования вышеперечисленных функциональных возможностей пользователь операционной системы заключает с поставщиком соглашение, по которому после оплаты необходимой редакции операционной системы и/или дополнительного программного обеспечения он получает активационный код для данного продукта. Элементы защиты используются для проверки активационного кода, проверки наличия исполняемых программ-отладчиков типа SoftICE [9] и программ исследования вычислительной среды типа RegMon, FileMon, VxDMon [11], для противодействия этим программам, для проверки правильности параметров вычислительной среды, для нарушения работы программного обеспечения при несоблюдении условий соглашения между поставщиком и пользователем программного обеспечения (например, превышении времени использования или числа запусков программного обеспечения), для скрытия наличия самих элементов защиты (например, исключении из записей аудита системы сведений, относящихся к элементам защиты), для предупреждения (например, по сетям передачи данных) поставщика программного обеспечения (или администратора системы) о неправомочных действиях пользователя и так далее. Элементы защиты программного обеспечения распределяют по программному обеспечению, причем активацию этих элементов производят случайным или псевдослучайным образом, а также в зависимости от значений параметров, характеризующих состояния электронно-вычислительной машины. При активации элементов защиты случайным или псевдослучайным образом в первом регистре процессора хранится 16-ти разрядное беззнаковое двоичное псевдослучайное число, сформированное программным генератором псевдослучайных чисел. Во втором регистре процессора хранится 16-ти разрядное беззнаковое двоичное число, являющееся младшей частью адреса оперативной памяти для хранения команды активации элемента защиты. При превышении значения из первого регистра над значением из второго регистра элемент защиты активируется. При активации элементов защиты в зависимости от значений параметров, характеризующих состояния электронно-вычислительной машины и программного обеспечения, в первом регистре процессора хранится текущее значение хэш-функции, вычисленной, например, по алгоритму хэширования MD5 RFC 1321 по значениям параметров вычислительной машины. Во второй регистр записывается эталонное значение хэш-функции, до этого хранимое в скрытом виде в программном обеспечении. При несовпадении этих двух значений (то есть попытке использования программного обеспечения в незарегистрированной вычислительной среде) элемент защиты активируется, нарушая правильное функционирование программного обеспечения. При использовании таких способов активации элементов защиты злоумышленник вынужден исследовать все программное обеспечение в течение длительного времени без гарантии выявления и исключения всех элементов защиты. Защита от исследования статическими способами основана на том, что коды исполняемых команд передачи управления программного обеспечения (обычно в местах разветвления программного обеспечения) заменяют кодами недопустимых команд, обрабатываемыми при исполнении программного обеспечения драйвером защиты (например, для операционной системы Windows таким драйвером является драйвер виртуального устройства VxD), с подстановкой и выполнением первоначальных кодов ветвления из скрытой в драйвере защиты таблицы, содержимое которой доступно только элементу защиты. Защита от исследования динамическими способами основывается на следующей совокупности защитных мер: – перехвате / захвате и использовании отладочных ресурсов вычислительной среды для реализации функциональности программного обеспечения (например, постоянное использование флага трассировки TF и регистров отладки), – неправильном разветвлении программного обеспечения при обнаружении отладчика, – использовании сложных форматов данных, – введении избыточности исполняемого кода, усложняющего логический анализ программного обеспечения, – разбиении программного обеспечения на множество взаимодействующих друг с другом сложным образом объектов. Увеличение сложности программного обеспечения, в том числе с учетом защитных элементов, по линейному закону, затрудняет исследование программного обеспечения в гораздо большей степени за счет увеличения числа связей, а также возможных состояний программного обеспечения. Таким образом, можно усложнить программное обеспечение до такой степени, что его логический анализ станет неформализуемым и нецелесообразным, а часто и практически невозможным. Усложнение логического анализа программного обеспечения при попытках его отладки достигается также изменчивостью программного обеспечения и форматов данных, и, как следствие, неповторяемостью частных (внутренних) результатов выполнения программного обеспечения. Важным является модифицирование или самомодифицирование программного обеспечения в процессе исполнения [12, 13] (например, путем полиморфного кодирования), а также шифрование, расшифрование и перешифрование при каждом использовании программного обеспечения с использованием ключа и/или криптографического преобразования, зависящих от состояний электронно-вычислительной машины. Например, инсталлятор при запуске программного обеспечения вычисляет текущее значение хэш-функции на параметры вычислительной среды для формирования ключа, на котором расшифровывает программное обеспечение. При неизменных статических параметрах вычислительной среды расшифрование происходит успешно. При завершении работы программного обеспечения и его сохранении на магнитный диск это программное обеспечение шифруют на ключе, сформированном из эталонного значения хэш-функции на параметры вычислительной среды. При запуске и использовании программы-отладчика типа SoftICE DDB-список загружаемых драйверов, получаемый с помощью функции VMM_GetDDBList, отличается от списка драйверов при инсталляции программного обеспечения. Таким образом, текущее значение хэш-функции на параметры вычислительной среды будет отличаться от эталонного значения хэш-функции и, соответственно, ключ, на котором шифровали программное обеспечение, будет отличаться от ключа расшифрования, что не позволит расшифровать программное обеспечение. Из практики известно, что затраты ресурсов на исследование программного обеспечения, превышающие примерно 10% от затрат на его разработку, можно считать новой разработкой (модификацией) программного обеспечения и превышение этого порога злоумышленниками обычно считается нецелесообразным. Таким образом, исключением из программного обеспечения функциональных компонент, внедрением недостающих компонент в программное обеспечение только зарегистрированным пользователем, шифрованием и перешифрованием программного обеспечения с использованием ключа и/или криптографического преобразования, зависящих от значений параметров, характеризующих состояние вычислительной среды и программного обеспечения, привязкой программного обеспечения к вычислительной среде, препятствованием использованию средств анализа и отладки программного обеспечения, обеспечивается повышение степени защиты от несанкционированного распространения, использования и исследования программного обеспечения при минимальных затратах на защиту. Источники информации: 3. FARNELL Electronic components catalogue 1997/1998, p. 995 7. Патент США N 5199066, МКИ: H 04 L 9/00, 1993 9. http:/www. numega. com/products/sys/sys. htm 12. Д. Гроувер. “Защита программного обеспечения”, Москва, изд. “Мир”, 1992 г., стр. 95-121. 13. С.П. Расторгуев. “Программные методы защиты информации в компьютерах и сетях”, Москва, изд. “Яхтсмен”, 1993 г” стр. 109-112. 14. М. Гук “Процессоры Pentium J.J. Pentium Pro и просто Pentium”, С.-Петербург, Питер Ком, 1999, стр. 226.Формула изобретения
MM4A Досрочное прекращение действия патента Российской Федерации на изобретение из-за неуплаты в установленный срок пошлины за поддержание патента в силе
Дата прекращения действия патента: 28.12.2001
Номер и год публикации бюллетеня: 12-2003
Извещение опубликовано: 27.04.2003
|
||||||||||||||||||||||||||