Исходный сценарий ForEncode.vbs приведен в листинге 4.3, зашифрованный сценарий Encoded.vbe — в листинге 4.4.
'*******************************************************************
' Имя: ForEncode.vbs
' Язык: VBScript
' Описание: Исходный текст сценария
'*******************************************************************
WScript.Echo "Привет!"
'************* Конец **********************************************
#@~^xQEAAA==vCeMCeCeeCeCMeCeMeCeMMCeeCMeCeeCMMeCeCeMeMMCeMeCMeCeMMCeeMMCeMeCMCeM@#@&EPИмя),sK.2 mGNR-8kPP,~P,PP,~~P,P,P~P~~,P~P,~P,P~~,PP~~,P~P,~,P~,@#@&BPЯзык=Pj$?1DrwDP~~,PP,~P,PP,~~P,P,P~P~~,P~P,~P,P~~,PP~~,P~P,~,P~,P@#@&B,Описание),Исходный~текстPсценария,P~P,P~~,PP,~P,PP,~~P,P,P~P~~,P@#@&EMeCeMMCeeMMCeMeCMCeMCeCeeCeCMeCeMeCeMMCeeCMeCeeCMMeCeCeMeMMCeMeCMeC@#@& UmDr2DR3m4G,JПриветZr@#@&BeCeCMeCeMeCeM~,КонецPeCMeCeeCMMeCeCeMeMMCeMeCMeCeMMCeeMMCeMeCMCeMCe@#@&PEAAAA==^#~@
Как видно из листингов 4.3 и 4.4, символы кириллицы остаются в зашифрованных сценариях без изменения.
Зашифрованные файлы Encoded.jse и Encoded.vbe можно запускать с помощью cscript.exe или wscript.exe, выполняться они будут точно так же, как и исходные сценарии (рис. 4.1).
Рис. 4.1. Результат выполнения зашифрованного сценария Encoded.jse
Еще одной весьма полезной особенностью сценариев, зашифрованных с помощью Script Encoder, является то, что при запуске такого сценария автоматически производится контроль целостности файла. Например, если в файле Encoded.jse убрать или добавить букву в слово "Привет", то при запуске будет выведено сообщение об ошибке (рис. 4.2) и сценарий выполняться не будет.
Рис. 4.2. Сообщение об ошибке, выводимое при запуске модифицированного файла Encoded.jse
Содержимое зашифрованных сценариев с расширениями jse и vbe можно вставлять в WS-файлы внутрь элементов , при этом в качестве значения аргумента language должно быть указано "JScript.Encode" (зашифрованный сценарий на языке JScript) или "VBScript.Encode" (зашифрованный сценарий на языке VBScript). Пример такого WS-файла Encoded.wsf приведен в листинге 4.5, исходный файл ForEncode.wsf — в листинге 4.6.
Имя: Encoded.wsf
Описание: WS-файл с зашифрованными сценариями
#@~^FgAAAA== Um.bwDR21tK~JПриветeJ/gQAAA==^#~@
#@~^FgAAAA== Um.bwDR21tKcJПокаeJbiagUAAA==^#~@
Имя: Encoded.wsf
Описание: WS-файл с зашифрованными сценариями
WScript.Echo "Привет!"
WScript.Echo("Пока!");
Однако если попытаться зашифровать исходный файл ForEncode.wsf с помощью команды
screnc ForEncode.wsf Encoded.wsf
то возникнет ошибка, т.к. Script Encoder "не понимает" расширения wsf. Поэтому для шифрования WS-файлов нужно при вызове screnc.exe в командной строке использовать дополнительный ключ:
screnc /е htm ForEncode.wsf Encoded.wsf
Параметр /е htm здесь указывает на то, что исходный файл ForEncode.wsf является файлом с HTML-разметкой (расширение htm), при этом Script Encoder шифрует только содержимое элементов , оставляя весь остальной текст файла без изменения.
Описание других ключей программы Script Encoder, которые могут применяться при шифровании сценариев WSH, приведено в табл. 4.1.
| Параметр | Описание |
|---|---|
/s | Подавляет все сообщения программы. Если этот ключ не указан, то по умолчанию сообщения программы выводятся на экран |
/f | Перезаписывает исходный файл (зашифрованный файл будет иметь то же самое имя, что и исходный сценарий) |
/l | Явно указывает язык сценария в шифруемом файле. Например, /l Jscript |
Цифровая подпись для сценариев WSH
Сценарии WSH можно защищать с помощью
Таким образом, разработчик должен идентифицировать свои сценарии цифровой подписью, чтобы пользователи, получающие такие сценарии, знали, откуда они к ним попали и кто их создал. После добавления цифровой подписи к сценарию он может свободно запускаться (но не модифицироваться!) всеми, кто указал автора программы как надежного источника сценариев.
Цифровая подпись в Windows создается с помощью цифровых сертификатов, поэтому сначала кратко рассмотрим, каким образом можно получить цифровой сертификат и установить доверие к нему.
Использование цифровых сертификатов в Windows
Цифровой сертификат — это электронный документ, который однозначно идентифицирует его владельца. Сертификаты различных типов широко используются во многих службах безопасности Windows для разных целей, например:
□ проверка подлинности пользователей Интернета или Web-сервера (пользователи должны иметь возможность доказать свою подлинность тем, с кем они соединяются в компьютерной сети, и должны иметь возможность проверить подлинность других пользователей);
□ шифрование и защита от искажений данных, которые передаются по локальной сети или при помощи электронной почты (при обмене зашифрованными сообщениями электронной почты никто не сможет прочитать сообщение в процессе его доставки, а расшифровать и прочитать сообщение сможет только получатель, которому оно предназначено);
□ подписание электронных писем (получатель сообщения может проверить, что сообщение не было изменено в процессе доставки и что сообщение пришло именно от отправителя);
□ проверка подлинности программного обеспечения, которое загружается из Интернета, устанавливается из локальной сети организации или с компакт-диска (неподписанное программное обеспечение, т.е. не имеющее действительного сертификата издателя, может представлять опасность для компьютера и сохраняемой на нем информации).
Способы получения цифрового сертификата
Различаются цифровые сертификаты трех типов: созданные разработчиком, выданные разработчику организацией и полученные от центра сертификации.
Цифровой сертификат, созданный разработчиком, обычно используют те пользователи, которые доверяют этому разработчику. Например, администратор локальной сети может создать свой собственный сертификат для подписи сценариев WSH, которые он создает и распространяет внутри своей организации.
В организации может быть организован свой сервер выдачи цифровых сертификатов (соответствующая служба имеется, например, в операционной системе Windows 2000 Server). Таким образом, организация распространяет сертификаты среди собственных разработчиков, не прибегая к услугам коммерческих центров сертификации.
В Интернете имеются сайты коммерческих центров сертификации, которые выдают сертификаты как организациям, так и частным лицам; одним из самых известных таких центров является VeriSign (http://www.verisign.com). Естественно, большинство услуг центров сертификации являются платными, причем цена на сертификат зависит от цели его приобретения (личный цифровой сертификат для индивидуального распространения программ стоит намного дешевле, чем сертификат для организаций, занимающихся разработкой и продажей программного обеспечения).
Понятно, что для того, чтобы попрактиковаться в применении сертификатов для подписания сценариев WSH, проще всего создать цифровой сертификат самостоятельно, поэтому в дальнейшем мы будем рассматривать только такие сертификаты.
Создание собственного сертификата
Наиболее быстрым способом создания собственного цифрового сертификата является использование программы SelfCert.exe, входящей в состав Microsoft Office 2000/ХР. Запустив эту утилиту, мы получим диалоговое окно, позволяющее задать имя создаваемого сертификата (рис. 4.3). В качестве этого имени можно использовать, например, свое имя или название организации.
Рис. 4.3. Создание нового личного сертификата с помощью SelfCert.exe
Рис. 4.4. Успешное создание личного сертификата "Попов надежный"
Для дальнейших экспериментов нам понадобится создать два сертификата с именами "Попов надежный" и "Попов ненадежный". После нажатия кнопки OK в случае успешного создания сертификата на экран выводится диалоговое окно с информацией об этом (рис. 4.4).
Управление сертификатами с помощью ММС
Для того чтобы посмотреть свойства созданных сертификатов, нам потребуется запустить mmc либо в командной строке, либо с помощью пункта Выполнить (Run) меню Пуск (Start). В результате на экране появится окно новой консоли (рис. 4.5).
Рис. 4.5. Новая консоль ММС
Теперь добавим в консоль оснастку Сертификаты (Certificates). Для этого нужно в меню Консоль (Console) выбрать пункт Добавить/удалить оснастку (Add/Remove Snap-in), после чего появится диалоговое окно, показанное на рис. 4.6.
Рис. 4.6. Диалоговое окно добавления/удаления оснасток для консоли ММС
После нажатия кнопки Добавить (Add) выводится список всех имеющихся оснасток (рис. 4.7).
Из этого списка нужно выбрать Сертификаты (Certificates) и нажать кнопку Добавить (Add). После этого в новом диалоговом окне отмечаем, что добавляемая оснастка будет управлять сертификатами для своей учетной записи (рис. 4.8) и нажимаем кнопку Готово (Finish).
Никаких других оснасток в окно консоли мы добавлять не будем, поэтому нажимаем кнопку Закрыть (Close) в списке оснасток и кнопку OK в окне добавления/удаления оснасток. Созданные нами сертификаты будут находиться в разделе Личные\Сертификаты (Personal\Sertificates) (рис. 4.9).
Выделив нужный сертификат в списке и нажав клавишу
Рис. 4.7. Список всех оснасток
Рис. 4.8. Выбор типа сертификатов, которым будет управлять добавляемая оснастка Сертификаты
Рис. 4.9. Расположение личных сертификатов
Рис. 4.10. Свойства сертификата "Попов надежный"
Как мы видим, для обоих новых сертификатов не установлено доверие. Для того чтобы установить доверие к одному из сертификатов ("Попов надежный"), достаточно просто перетащить при помощи мыши этот сертификат в раздел Доверенные корневые центры сертификации | Сертификаты (Trusted Root Certification Authorities) (рис. 4.11).
Если при перетаскивании сертификата в новое место держать нажатой клавишу
Рис. 4.11. Сертификаты, к которым установлено доверие
Свойства сертификата "Попов надежный" после установки доверия к нему показаны на рис. 4.12.
Выполним теперь экспорт в файл сертификата "Попов ненадежный" (это понадобится нам в дальнейшем при построении политики ограниченного использования программ). Для этого следует выделить нужный сертификат и выбрать в меню Действие | Все задачи (Action | All Tasks) пункт Экспорт (Export), после чего запустится мастер экспорта сертификатов, в котором нужно согласиться со всеми настройками, предлагаемыми по умолчанию, а в качестве имени экспортируемого файла указать "C:\Script\Попов.cer".
Рис. 4.12. Новые свойства сертификата "Попов надежный"
Добавление к сценарию цифровой подписи
Подписать файл со сценарием WSH можно двумя способами. Во-первых, можно использовать программу SignCode.exe, с помощью которой производится подпись любого исполняемого кода. Однако эта программа не является стандартной частью операционной системы Windows, ее нужно устанавливать отдельно. Поэтому далее мы будем рассматривать второй способ подписи сценариев — с помощью метода SignFile объекта Scripting.Signer, который регистрируется в системе при установке WSH 5.6.
В листинге 4.7 приведен сценарий SignScript.wsf, с помощью которого мы будем подписывать файлы сценариев различных типов, используя личные сертификаты "Попов надежный" и "Попов ненадежный". При запуске этого сценария нужно указать два именных параметра командной строки: /file для задания пути к подписываемому файлу и /cert, содержащий название цифрового сертификата, на основе которого будет создаваться подпись. Эти параметры в сценарии подставляются в качестве аргументов метода SignFile объекта Scripting.Signer:
//Создаем объект Scripting.Signer
Signer = WScript.CreateObject("Scripting.Signer");
File = WScript.Arguments.Named("file"); //Имя файла
Cert = WScript.Arguments.Named("cert"); //Название сертификата
Signer.SignFile(File, Cert); //Подписываем файл
В методе SignFile может быть указан третий необязательный параметр, задающий путь к хранилищу сертификатов. В сценарии SignScript.wsf этот параметр не используется, т.к. для создания подписи применяются личные сертификаты, находящиеся на локальной машине.
Имя: SignScript.wsf
Описание: Добавление цифровой подписи к файлам
со сценариями WSH
Пример:
SignScript.wsf /file:Signed.wsf /cert:"Попов надежный"
var Signer, File, Cert, Store;
if (!(WScript.Arguments.Named.Exists("cert") && WScript.Arguments.Named.Exists("file"))) {
WScript.Arguments.ShowUsage();
WScript.Quit();
}
Signer = WScript.CreateObject("Scripting.Signer");
File = WScript.Arguments.Named("file");
Cert = WScript.Arguments.Named("cert");
Store = "";
Signer.SignFile(File, Cert);
Цифровые подписи добавляются в конец файлов, содержащих сценарии, причем в обычных JScript- и VBScript-файлах подпись находится в блоке комментария, а в WS-файлах — внутри элемента . Это делает возможным запуск подписанных сценариев в предыдущих версиях WSH, т.к. здесь закомментированные или находящиеся внутри части сценариев будут при выполнении проигнорированы.
В листингах 4.8–4.10 приведены примеры сценариев различных типов, которые были подписаны с использованием сертификата "Попов надежный".
/*******************************************************************/
/* Имя: Signed.js */
/* Язык: JScript */
/* Описание: Сценарий с цифровой подписью */
/*******************************************************************/
WScript.Echo("Привет!");
// SIG // Begin signature block
// SIG // MIIEMAYJKoZIhvcNAQcCoIIEITCCBB0CAQExDjAMBggq
// SIG // hkiG9w0CBQUAMGYGCisGAQQBgjcCAQSgWDBWMDIGCisG