Разработка подсистемы защиты информации для Microsoft Office 2000
© Панасенко Сергей, 2002.
В статье "Защита информации в Microsoft Word" ("Банки и технологии" № 3/2002) были приведены результаты анализа встроенной подсистемы защиты информации популярного текстового редактора Microsoft Word 2000. Предлагаемая статья продолжает данную тему и содержит описание процесса разработки собственной подсистемы защиты информации и ее внедрения в программы пакета Microsoft Office 2000.
Итак, встроенная подсистема защиты информации Microsoft Word 2000 вполне хороша для 90% пользователей, но, на мой взгляд, недостаточна для защиты информации с повышенными требованиями к ее конфиденциальности. Рассмотрим этапы разработки альтернативной подсистемы защиты информации и ее внедрения, расширив область ее применения до нескольких наиболее популярных продуктов пакета программ Microsoft Office 2000: Microsoft Word, Microsoft Excel и Microsoft Outlook.
Постановка задачи
Прежде всего, уточним объект защиты. Ограничимся защитой конфиденциальности электронных документов по следующим причинам:
Подсистема защиты должна удовлетворять следующим характеристикам:
Структурная схема подсистемы защиты
[см. рис. 1]
Как было сказано выше, Microsoft Office имеет встроенный язык программирования VBA. Этот язык специально адаптирован для разработки какой-либо дополнительной функциональности приложений Microsoft Office – VBA содержит большую библиотеку классов, объектами которых являются различные элементы управления (например, меню и панели инструментов Microsoft Word) или фрагменты редактируемых документов (например, параграфы, слова, таблицы, да и собственно документы целиком). Однако, реализация на VBA криптографической системы целиком была бы нецелесообразна по следующим причинам:
Таким образом, VBA-код должен быть минимизирован и содержать только следующие компоненты:
Помимо криптобиблиотеки и VBA-модулей, необходимо наличие интерфейсного модуля, выполняющего следующие функции:
Функционирование подсистемы защиты
Начнем с Microsoft Outlook, где все более ясно и понятно. Наиболее логичной точкой наложения защиты, на мой взгляд, является перехват попытки пользователя отправить какое-либо письмо. Microsoft Outlook предоставляет эту возможность – в момент нажатия пользователем кнопки "Send" ("Отправить") в окне редактирования сообщения электронной почты Microsoft Outlook вызывает VBA-макрос со стандартным именем Application_ItemSend (если такой макрос существует). Такой макрос может содержать любой код VBA, в том числе и отменяющий отправку сообщения. В нашем случае задача макроса Application_ItemSend заключается в наложении защиты на сообщение, а именно, на собственно текст письма и все прикрепленные к нему файлы. Упрощенный фрагмент VBA-программы, выполняющей данные действия, может выглядеть так (строки пронумерованы для удобства комментирования):
Приведенный фрагмент выполняет следующее:
Такое сообщение электронной почты можно смело отсылать адресату – никто другой его не прочитает (при условии корректного указания криптографических ключей). Организовать же расшифрование сообщения по получении так же просто – Microsoft Outlook при получении новых сообщений автоматически вызывает макрос со стандартным именем Application_NewMail, в который можно поместить код, выполняющий расшифрование и проверку ЭЦП, а также восстанавливающий первоначальный вид сообщения.
Microsoft Word и Excel также вызывают макросы со стандартными именами при наступлении определенных событий (что было кратко описано в [1], а подробно, например, в [4]). Однако, здесь можно пойти и другим путем, например, предоставив пользователю возможность самому управлять защитой электронных документов. Это возможно при внедрении дополнительной панели инструментов (см. рис. 3), содержащей кнопки зашифрования редактируемого документа и открытия зашифрованного документа. Упрощенный фрагмент макроса-обработчика нажатия на кнопку "Подписать и зашифровать" приведен ниже:
Здесь все существенно проще, чем в Microsoft Outlook – после сохранения и закрытия текущего документа Microsoft Word вызывается функция интерфейсного модуля OGBCloseFile, в которую передается в качестве параметра имя файла документа. Данная функция вызывает окно, показанное на рис. 2, после чего выполняет все необходимые вызовы функций криптографической библиотеки для защиты данного документа.
Внедрение VBA-кода
Внедрить VBA-модуль также намного проще в Microsoft Outlook. При каждом запуске Microsoft Outlook автоматически открывает VBA-проект ThisOutlookSession, находящийся в файле VBAProject.otm. Поэтому для внедрения нужного VBA-кода достаточно заменить данный файл (который изначально содержит пустой проект) своим. Это легко сделать как вручную, так и каким-либо инсталлятором при необходимости распространения подсистемы защиты.
С Microsoft Word и Excel несколько сложнее. Применительно к Microsoft Word можно поступить так же, как и с Outlook – заменить своим стандартный шаблон документов Normal.dot. Но это существенно хуже по той причине, что многие пользователи сохраняют в этом шаблоне свои индивидуальные настройки, которые при замене будут попросту потеряны.
К счастью, программы пакета Microsoft Office поддерживают механизм Automation, с помощью которого можно добраться до их функциональности и управлять ими из своей программы (в данном случае – из программы инсталляции подсистемы защиты). В поставку Microsoft Office входят библиотеки классов, аналогичных классам VBA. Для использования механизма Automation необходимо создать объект нужного класса (например, для манипуляций с Microsoft Word создается объект класса _Application, который инкапсулирует функциональность Microsoft Word), после чего с помощью функций-членов класса выполнять все требуемые действия, например, следующим образом (упрощенный фрагмент на С++):
Приведенный код выполняет следующие действия:
Из приведенных выше примеров кода видно, что использование Automation все же несколько сложнее, чем применение VBA. Поэтому собственно создание элементов ползовательского интерфейса проще выполнить из VBA-макроса, активизируемого через Automation, как показано выше. Приведу пример создания панели управления с одной кнопкой "Подписать и зашифровать" (здесь и выше приведены примеры кода разработанного автором данной статьи комплекса "Защищенный офис" для Microsoft Office 2000):
В строке 1 приведенного фрагмента добавляется новая панель инструментов, которая выводится на экран в строке 7. Предварительно создается кнопка "Подписать и зашифровать" (строки 3-6), в строке 4 ей назначается макрос-обработчик нажатия (который, в числе прочих, был скопирован в Normal.dot с помощью Automation). Аналогично создаются и остальные кнопки, показанные на рис. 3. Завершающий шаг – сохранение шаблона Normal.dot с новой панелью инструментов (строка 8).
Аналогичным образом выполняется инсталляция VBA-модуля в Microsoft Excel. Разница лишь в том, что вместо копирования макросов в Normal.dot, на компьютер целиком копируется xls-файл, содержащий VBA-модуль, после чего кнопки дополнительной панели инструментов связываются с макросами в этом файле.
Заключение
Описанная в данной статье методика встраивания дополнительных функций защиты документов в программы пакета Microsoft Office, в принципе, может быть распространена и на любую другую функциональность. Огромные возможности языка VBA и механизма Automation позволяют программисту или опытному пользователю сделать использование Microsoft Office максимально удобным для себя и максимально эффективным для выполнения конкретных задач.
Названия рисунков:
1. Модули подсистемы защиты.
2. Диалоговое окно выбора параметров защиты документа Microsoft Word / Excel.
3. Дополнительная панель инструментов подсистемы защиты в Microsoft Word.