Все программные средства, ориентированные на массовое применение, можно с некоторым приближением разделить на коммерческие программные продукты, распространяемые на возмездной основе, и бесплатные программы, находящиеся в открытом доступе или предлагаемые пользователям по символической цене. Программы второго класса для своего распространения активно используют сеть Интернет. На ее общедоступных сайтах пользователи могут найти и «скачать» на свой компьютер всевозможные демонстрационные версии коммерческих программ, небольшие программки типа расчета биоритмов, созданные в целях популяризации своих авторов, или вполне «солидные» программы вроде мониторов файловой системы и реестра Windows FileMon и RegMon (автор – М.Русинович). К сожалению, среди бесплатно распространяемых программ немало таких, которые заносят на компьютер доверчивого пользователя вирусы или устанавливают на него программные закладки, позволяющие посторонним лицам получить несанкционированный доступ к информационным ресурсам пользователя. Предъявление авторам вредоносных программ претензий в таких случаях вряд ли возможно, т.к. эти лица труднодостижимы, да и установил эти программы пользователь добровольно и совершенно бесплатно.
Коммерческие программные продукты в настоящее время распространяются, как правило, через специализированные предприятия торговли на компакт-дисках (так называемый «коробочный» вариант) или через представителей (агентов) фирмы-изготовителя программного обеспечения. В первом случае установку программы с помощью приобретенных инсталляционных дисков пользователь производит самостоятельно, а во втором случае – это делает представитель фирмы. В обоих случаях установке программного продукта предшествует заключение между покупателем и продавцом договора купли-продажи (оплата покупателем приобретаемого программного средства). Поскольку защитить свои авторские права юридическими методами в современных российских условиях производитель программных продуктов скорее всего не сможет, он вынужден включать в состав продаваемых программ средства защиты их от несанкционированного копирования.
Можно ли использовать для распространения коммерческих программ сеть Интернет? Казалось бы, ответ должен быть безусловно отрицательным: в условиях открытой сети невозможно обеспечить «доставку» программного продукта только оплатившему его пользователю с дополнительной гарантией целостности этого продукта, т.е. отсутствия в нем посторонних вредоносных «вложений». Тем не менее, в настоящей статье будет предложен подход, позволяющий решить поставленную задачу.
Разрабатываемый подход должен удовлетворять следующим требованиям:
· обеспечение подлинности и целостности передаваемого по сети Интернет от продавца покупателю программного продукта;
· защита файлов программы от несанкционированного доступа со стороны третьих лиц при их передаче по сети;
· защита файлов программы от несанкционированного копирования со стороны покупателя и третьих лиц после установки программы на компьютере пользователя;
· возможность использования с любой версией операционной системы Windows и отсутствие необходимости в установке на компьютере покупателя дополнительных программных средств.
Реализация подобного подхода позволит обеспечить и защиту покупателя от установки на своем компьютере одновременно с приобретенным программным продуктом и посторонней вредоносной программы, т.к. в этом случае она может быть внедрена в распространяемую программу только самим изготовителем коммерческого программного средства, что маловероятно.
Перейдем теперь к изложению основных элементов предлагаемого подхода. Поскольку в его основе лежат методы криптографической защиты информации, вначале напомним основные положения криптографии. Криптографический подход к защите информации основан на применении к открытому тексту произвольной природы функции шифрования, в результате которого получается так называемый шифротекст или просто шифр. Для последующего восстановления открытого текста из шифра к последнему необходимо применить функцию расшифрования. Функции шифрования и расшифрования имеют дополнительный параметр, называемый обычно ключом. Если ключ, используемый функцией шифрования, совпадает с ключом расшифрования, то подобную криптографическую систему называют симметричной. Используемый ключ в этом случае, естественно, должен быть секретным. Если функции шифрования и расшифрования используют разные ключи, то такую криптографическую систему называют асимметричной. В этом случае секретным может быть только один из двух ключей, поэтому асимметричную криптосистему иногда называют криптосистемой с открытым ключом.
Введем следующие обозначения:
Ek(T) – результат шифрования открытого текста T с помощью функции шифрования E по секретному ключу k (симметричная криптосистема);
Dk(C) – результат расшифрования шифротекста C с помощью функции расшифрования D по секретному ключу k (симметричная криптосистема);
k, k1, k2 – ключи, используемые при симметричном шифровании (расшифровании);
EA(T) – результат шифрования (расшифрования) текста (шифротекста) T по открытому ключу из пары ключей A (асимметрическая криптосистема);
DA(T) – результат шифрования (расшифрования) текста (шифротекста) T по секретному ключу из пары ключей A (асимметричная криптосистема);
As – секретный ключ из пары ключей A асимметричного шифрования;
Ap - открытый (публичный) ключ из пары ключей A асимметричного шифрования.
Поскольку шифрование и расшифрование в асимметричных криптосистемах выполняются существенно медленнее (примерно в 1000 раз), чем в симметричных, открытые тексты большого объема перед шифрованием в асимметричных системах обычно хешируются. Полученный образ (хеш-значение) и поступает на вход функции шифрования.
Введем еще одно обозначение:
H(T) – результат применения функции хеширования к тексту T.
DA(H(T)) обычно называют электронной цифровой подписью (ЭЦП) пользователя A под текстом T. ЭЦП применяется для проверки подлинности происхождения и целостности электронных документов, передаваемых по открытым сетям или хранимых на открытых носителях. Проверка ЭЦП заключается в сравнении EA(DA(H(T))) и H(T).
В дальнейшем изложении будем под S понимать продавца (отправителя) коммерческого программного продукта, а под R – его покупателя (получателя). На своем общедоступном сайте в сети Интернет S выставляет ключ Sp, который будет использоваться в дальнейшем для связи с покупателями. R считывает и сохраняет у себя этот ключ, после чего получает с сайта S служебную программу Пс и ЭЦП под ней DS(H(Пс)). Программа Пс будет использоваться покупателем для проверки (получения) ЭЦП под получаемыми (отправляемыми) файлами, получения ключей Rs и Rp, расшифрования получаемых от S данных и других вспомогательных действий.
На следующем шаге предлагаемого протокола R проверяет ЭЦП под Пс, получает с помощью этой служебной программы ключ Rp и отправляет его S. Далее для проверки подлинности полученного открытого ключа S посылает R ЭЦП DS(H(Rp)), а покупатель проверяет ЭЦП под полученным S ключом Rp с помощью открытого ключа Sp.
Далее R производит оплату приобретаемой им коммерческой программы Пк и отправляет S файл с реквизитами платежного документа M и DR(H(M)). Продавец проверяет ЭЦП под M и отправляет R группу файлов F, включающую зашифрованные на ключе k1 файлы программы Пк, программу установки Пу, программу запуска Пз, ER(k2) и Ek2(P). Ключ k1 генерируется (выводится) из выбираемой продавцом парольной фразы P, которая передается покупателю в зашифрованном на случайно выбираемом сеансовом ключе k2 виде. На этом же шаге протокола S отправляет R DS(F).
На следующем шаге R проверяет ЭЦП под F, расшифровывает ключ k2, затем парольную фразу P и запускает программу установки Пу, которая
· запрашивает у пользователя имя папки для установки программы Пк;
· копирует в нее зашифрованные файлы программы Пк, а также программу запуска Пз, и производит необходимые для работы Пк изменения в реестре;
· собирает информацию I о пользователе (покупателе программы Пк) R и компьютере, на котором производится установка;
· вычисляет ЭЦП DR(H(I)) и сохраняет ее в реестре.
Информация I включает в себя:
· имя пользователя R, под которым он зарегистрирован в операционной системе;
· имя компьютера, на котором устанавливается программа Пк;
· путь к папке, в которую была установлена операционная система;
· путь к папке с системными файлами операционной системы;
· тип и подтип клавиатуры;
· количество кнопок мыши;
· ширина и высота экрана;
· список имеющихся дисковых устройств;
· объем оперативной памяти;
· объем, метка тома, серийный номер и имя файловой системы диска, на котором выполняется установка.
Чтобы теперь начать работать с приобретенной им программой покупатель должен запустить программу Пз, в функции которой входит:
· сбор информации I о компьютере, на котором производится попытка запуска, и осуществляющем ее пользователе (состав информации I аналогичен информации, собранной при установке программы Пк);
· считывание из реестра и проверка ЭЦП под I для проверки легальности среды, в которой осуществляется попытка запуска программы;
· сохранение информации из реестра об установленных для пользователя R ограничениях в соответствии с выбранной политикой безопасности;
· редактирование реестра для задания ограничений на возможности пользователя R по запуску приложений и копированию файлов;
· редактирование реестра для обеспечения автоматического запуска программы Пз при перезагрузке операционной системы;
· программное завершение сеанса работы пользователя с операционной системой;
· после перезагрузки операционной системы запрос у пользователя R полученной им от S вместе с приобретенной программой парольной фразы P;
· генерация из P ключа шифрования k1 и расшифрование с его помощью файлов программы Пк во временную папку;
· запуск программы Пк и ожидание завершения порожденного процесса;
· после завершения работы программы Пк удаление всех расшифрованных файлов этой программы и созданной для их размещения временной папки, а также очистка буфера обмена операционной системы;
· восстановление содержимого реестра с ограничениями, наложенными на работу пользователя в соответствии с установленной политикой безопасности (на основе ранее сохраненной информации);
· удаление из реестра параметра, обеспечивающего автоматический запуск программы Пз при перезагрузке операционной системы;
· программное завершение сеанса работы пользователя R с операционной системой.
В состав ограничений, устанавливаемых программой запуска на возможности пользователя в операционной системе на период непосредственной работы с программой Пк, входят:
· разрешение на запуск только приложений Пз и Пк;
· запрет на отображение содержимого рабочего стола;
· удаление команд «Найти» и «Выполнить» из меню «Пуск»;
· запрет на изменение свойств панели задач (модификацию меню «Пуск»);
· запрет на возможность предоставления доступа к папкам компьютера, на котором выполняется запуск, по сети;
· запрет на возможность прерывания хода загрузки операционной системы с попыткой осуществить загрузку в режиме защиты от сбоев или в режиме MS-DOS (это ограничение обеспечивается редактированием не реестра, а файла msdos.sys, и касается только операционных систем .Windows 9x/ME/XP-Home Edition).
Назначением программы запуска (помимо проверки легальности среды, т.е. выполнения пользователем условий заключенного им при покупке программного продукта лицензионного соглашения) является защита установленной пользователем программы от несанкционированного копирования ее расшифрованных файлов как со стороны покупателя, так и со стороны третьих лиц, узнавших парольную фразу. Защита от перехвата файлов программы Пк при их передаче по открытой сети и их несанкционированного копирования после установки программного продукта на компьютере покупателя обеспечивается шифрованием этих файлов на ключе, генерируемом из парольной фразы.
Теперь
рассмотрим вопросы реализации предложенного подхода. Все операции, связанные с
применением методов криптографической защиты информации, могут быть реализованы
с помощью вызовов функций криптографического интерфейса операционной системы Windows (CryptoAPI). Этот интерфейс стал доступен
для программистов, начиная с версии Oem Service Release 2 операционной системы Windows 95. В версиях Windows 2000/ME/XP имеются две встроенные библиотеки
криптографических функций (в терминологии Windows два провайдера криптографического обслуживания):
стандартная (Base) и
расширенная (Enhanced)
или сильная (Strong).
По сравнению со стандартным криптопровайдером в расширенном реализовано больше
симметричных криптоалгоритмов, а также увеличена длина используемых при
шифровании ключей (в симметричных криптосистемах с 40 бит до 128 или даже 168
бит, а в асимметричных – с 512 бит до 1024 бит). Использование длинных ключей
делает шифротексты более устойчивыми к «взлому». Пользователи операционных
систем Windows 9x/NT имеют возможность работать только со
стандартным криптопровайдером, но могут бесплатно получить программу установки
расширенного криптопровайдера с общедоступного Интернет-сайта корпорации Microsoft.
Для создания пары асимметрических ключей покупателя R и получения (экспорта) открытого ключа Rp должны использоваться функции CryptoAPI CryptGenKey и CryptExportKey. Для использования в программе асимметрических ключей в криптографических операциях предназначены функции CryptGetUserKey (получение доступа к открытому ключу владельца ключевой пары) и CryptImportKey (передача криптопровайдеру открытого ключа другого пользователя). Хеширование данных выполняется при помощи функций CryptCreateHash и CryptHashData. Функции CryptSignHash и CryptVerifySignature предназначены для получения и проверки ЭЦП под хеш-значением. Генерация ключа симметричного шифрования из хешированной парольной фразы выполняется с помощью функции CryptDeriveKey. Для создания, шифрования и расшифрования случайного сеансового ключа предназначены функции CryptGenKey, CryptExportKey и CryptImportKey соответственно. Шифрование и расшифрование парольной фразы производятся с помощью функций CryptEncrypt и CryptDecrypt. Эти же функции должны использоваться для шифрования и расшифрования файлов программы Пк.
Получение доступа к криптопровайдеру из программы выполняется при помощи функции CryptAcqureContext, а для прекращения работы с криптопровайдером вызывается функция CryptReleaseContext. Разрушение сеансовых (симметрических) и копий асимметрических ключей в оперативной памяти производится вызовом функций CryptDestroyKey, а разрушение хеш-значений – вызовом функции CryptDestroyHash.
Рассмотрим теперь возможные уязвимые места предлагаемого подхода. Наибольшую опасность представляет имеющаяся у пользователя R возможность выполнить перезагрузку операционной системы в процессе работы с расшифрованной программой Пк с целью после входа в систему под другим именем получить доступ к расшифрованным файлам этой программы и попытаться скопировать их. В операционных системах Windows 9x/ME/XP-Home Edition для предотвращения этой опасности автоматический запуск программы Пз при перезагрузке операционной системы должен обеспечиваться редактированием ключа реестра HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run (а не ключа HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run). Тем самым программа запуска автоматически получит управление при входе в систему после перезагрузки под любым именем и сможет после определения факта нелегальной среды запуска уничтожить расшифрованные файлы и завершить работу.
В операционных системах Windows NT/2000/XP-Professional защита от указанной выше угрозы может быть обеспечена средствами дискреционного управления доступом к объектам файловой системы NTFS (программа Пз предоставляет права доступа к созданной ею папке с расшифрованными файлами только пользователю R). В этом случае достаточно, чтобы автоматический запуск программы Пз обеспечивался редактированием ключа реестра HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run. Наличие административных полномочий у программы Пз (и, соответственно, пользователя R) при этом не требуется.
Другой возможной угрозой является возможность подмены третьим лицом открытого ключа продавца Sp и, соответственно, служебной программы Пс на начальном шаге выполнения предложенного протокола. Простым способом устранения данной угрозы может быть подтверждение прочитанного покупателем на сайте S открытого ключа с помощью, например, обычной телефонной связи. Открытый ключ продавца может быть также продублирован на сайтах его филиалов (представительств) и коммерческих партнеров.
Наконец существует угроза раскрытия логики работы программ установки и запуска с помощью отладчиков и дизассемблеров с последующим отключением или обходом средств защиты от несанкционированного запуска и копирования программы Пк. Хотя полностью эта угроза, естественно, не может быть нейтрализована, работа привлеченного покупателем компьютерного «пирата» может быть максимально затруднена путем использования при создании программ Пу и Пз традиционных приемов изощренного программирования, «запутывающих» логику работы этих программ. Заметим также, что подобная угроза существует и при использовании традиционных каналов распространения коммерческих программных продуктов.
Все остальные возможные угрозы сводятся к вскрытию шифротекстов при их передаче по открытой сети или хранении на открытых носителях, а защита от них в предложенном подходе определяется выбором проверенных и стойких к взлому криптоалгоритмов и использованием их хорошо апробированных программных реализаций.
При выполнении программ Пс и Пз в защищенных версиях Windows им потребуются дополнительные полномочия:
· программе Пс при регистрации пользователя R в криптопровайдере (создании для него контейнера для хранения асимметрических ключей) потребуется право на запись в ключ реестра HKEY_LOCAL_MACHINE;
· программе Пз при редактировании реестра для задания (восстановления) ограничений на возможности пользователя R потребуется право на запись в ключ реестра HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies.
Это, безусловно, может создать определенные неудобства для корпоративных пользователей при применении предлагаемого похода. Однако, поскольку данный подход прежде всего рассчитан на распространение коммерческих программ среди индивидуальных пользователей (крупные корпорации, по-видимому, будут приобретать программные продукты не через Интернет), данный недостаток можно считать не очень существенным.
В заключение статьи еще раз отметим важные, на наш взгляд, преимущества заявленного подхода к распространению коммерческих программных продуктов через сеть Интернет:
· снижение торговых издержек для продавцов программных средств и возможность снижения розничной цены на эти товары;
· отсутствие необходимости в использовании посредника (например, сертификационного или удостоверяющего центра) при обмене криптографическими ключами между продавцом и покупателями;
· обеспечение подлинности и целостности передаваемых по открытой сети программных продуктов;
· защита авторских прав продавцов программных средств (защита их от несанкционированного копирования покупателями или третьими лицами).
1. А.В.Домашев, В.О.Попов, Д.И.Правиков, И.В.Прокофьев, А.Ю.Щербаков. Программирование алгоритмов защиты информации. – М.: «Нолидж», 2000.
2. П.Б.Хорев. Криптографические возможности операционной системы Windows. – «Компьютеры в учебном процессе», №4, апрель 2000, стр. 35-41.
3. Ю.В.Романец, П.А.Тимофеев, В.Ф.Шаньгин. Защита информации в компьютерных системах и сетях / Под ред. В.Ф.Шаньгина. - М.: Радио и связь, 1999.