Архивы: по дате | по разделам | по авторам

Cвет в конце s-туннеля

Архив
автор : МАКСИМ СМИРНОВ    09.11.1999

Не во всех популярных программах реализованы необходимые средства защиты. Но можно загрузить из Internet отличные криптографические библиотеки, которые соответствуют международным стандартам, реализуют стойкую криптографию и распространяются бесплатно.

Не во всех популярных программах реализованы необходимые средства защиты. Но можно загрузить из Internet отличные криптографические библиотеки, которые соответствуют международным стандартам, реализуют стойкую криптографию и распространяются бесплатно. Эта статья о том, как использовать такие библиотеки для встраивания надежных механизмов защиты в привычные приложения.


Не знаю, почему раньше я не обратил внимания на эту программу. Думаю, многие из моих коллег, профессионально занимающихся защитой информации, до сих пор не подозревают о ее существовании. Мне порекомендовали программу после того, как в течение нескольких дней я безуспешно пытался заставить Outlook Express пятой версии осуществлять SSL-соединение c почтовым сервером в режиме взаимной аутентификации, и оказалось, что в текущей версии такая возможность не реализована. У меня не оставалось выбора.

Конечно, я крайне скептически отнесся к небольшой программе, претендующей на "встраивание" SSL в готовые Windows-приложения, но все же мне пришлось попробовать STunnel. Установка программы заняла всего несколько минут, и самое главное, что это решение действительно работало. Когда система уже введена в эксплуатацию, используемые в ней идеи кажутся простыми и очевидными, но перед этим можно потратить дни и даже месяцы на поиски нужных программ. STunnel стала для меня маленьким открытием, позволившим отказаться от громоздких и запутанных решений. Но обо всем по порядку.

Защита соединений и SSLeay

Защита сетевого взаимодействия программ обычно сводится к решению следующих задач: во-первых, вам необходимо обеспечить конфиденциальность и целостность данных, передаваемых между приложениями, и, во-вторых, аутентифицировать участников взаимодействия.

Задача аутентификации, то есть проверки полномочий, не так проста, как кажется на первый взгляд. Надо не только проверить полномочия удаленного приложения. На основании такой проверки приложение-сервер должно принять решение о предоставлении доступа конкретному клиентскому приложению к конкретным ресурсам. Поэтому средства аутентификации должны быть максимально тесно интегрированы с серверным приложением.

Такое решение, как виртуальные частные сети (VPN, virtual private network), здесь не подходит. Традиционно методы подтверждения полномочий определялись в спецификациях прикладных протоколов, таких как http, pop3 или imap. Как правило, эти методы ограничивались передачей от клиента к серверу имени пользователя и пароля, причем пароль передавался в открытом виде.

Под влиянием справедливой критики экспертов по компьютерной безопасности и благодаря появлению протоколов Secure Sockets Layer (SSL) и Transport Layer Security (TLS) [1] ситуация стала меняться. Все больше производителей серверных программ реализуют в приложениях возможность проверки полномочий посредством SSL и TLS.

Для реализации SSL часто используют предложенную Эриком Янгом и Тимом Хадсоном (Eric Young, Tim Hudson) библиотеку SSLeay (www.psy.uq.edu.au/~ftp/Crypto), бесплатно предоставляемую в исходных текстах. Эта библиотека успешно встроена в ряд серверных продуктов (например, в Web-сервер Apache) и хорошо себя зарекомендовала. Кроме того, она работает не только в открытых системах, но и в Windows 9x и NT. В настоящее время развитие SSLeay продолжается в проекте OpenSSL (www.openssl.org). Благодаря OpenSSL, а также коммерческим криптографическим библиотекам, предлагаемым RSA Data Security, сегодня реализация SSL в серверных приложениях не представляет серьезных проблем.

Однако ситуация с поддержкой SSL в клиентских программах существенно сложнее. С одной стороны, клиентское программное обеспечение производится в основном американскими фирмами. В силу экспортных ограничений такие программы реализуют не полноценные криптоалгоритмы, а алгоритмы с короткими ключами шифрования и цифровой подписи. Сколь-либо серьезной защиты такие средства не обеспечивают.

С другой стороны, коммерческие производители программ столь искусно дозируют использование криптографических средств в своих приложениях, что иногда просто невозможно понять, что же реально умеет делать программа [2].

Впрочем, есть много причин, по которым не следует отказываться от мощных и удобных клиентских программ, производимых Microsoft, Netscape и другими компаниями, но при этом крайне желательно иметь и полноценные средства обеспечения безопасности.

 
СООТВЕТСТВИЕ ПОРТОВ И НАИБОЛЕЕ ШИРОКО ИСПОЛЬЗУЕМЫХ ПРИКЛАДНЫХ ПРОТОКОЛОВ

Стандартный протокол (порт)Защищенный протокол (порт)Назначение протокола
http (80)https (443)Передача гипертекста между Web-сервером и браузером.
smtp (25)smtps (465)Передача сообщений электронной почты от клиента к серверу и обмен сообщениями между серверами.
nntp (119)nntps (563)Прием-передача сообщений конференций usenet.
ldap (389)ldaps (636)Доступ к каталогу (используется для работы с адресной книгой).
ftp-data (20)ftps-data (989)Протокол приема и передачи файлов.
ftp (21)ftps (990) 
telnet (23)telnets (992)Работа с удаленным компьютером в режиме терминала.
imap (143)imaps (993)Управление каталогами почтового ящика, прием сообщений электронной почты.
irc ircs (994)Участие в online-разговорах (chat).
pop3 (110)pop3s (995)Получение сообщений электронной почты с почтового сервера.


Основная идея STunnel

Задача интеграции приложений всегда была сложной. Одно из возможных решений состоит в распространении программ в исходных текстах, что позволяет пересобрать программу с использованием необходимых библиотек. Такое решение нравится системным администраторам, но не годится для обычных пользователей. К тому же большинство популярных Windows-программ в исходных текстах не распространяется [3]. Если ваша программа не поддерживает SSL, задача обеспечения безопасности при работе в сети кажется нерешаемой. Однако это не так.

STunnel позволит вам использовать защищенные соединения практически в любой программе. Для того чтобы "научить" программу (например, упомянутый выше Outlook Express) работать с SSL в полном объеме, просто следует запустить STunnel, и пока она запущена, вся ваша почта будет доставляться на сервер через защищенное соединение.

Это достигается при помощи следующего приема. Программы, использующие протоколы TCP/IP, могут взаимодействовать не только с программами, запущенными на других компьютерах; иногда бывает полезным запустить программу-клиент на том же компьютере, что и программу-сервер. Поэтому каждому компьютеру присваивается локальный IP-адрес 127.0.0.1, позволяющий запущенным на нем приложениям работать так, как будто взаимодействие между ними происходит по сети.

STunnel использует это свойство. Он запускает на вашем компьютере небольшой сервер-посредник (proxy) [4]. Ваш почтовый клиент реально работает не с сервером электронной почты, а с локальным сервером-посредником, который, в свою очередь, и устанавливает защищенное SSL-соединение с почтовым сервером. Таким образом, внутри вашего компьютера информация передается в открытом виде, а между компьютером и сервером - в защищенном. Примерно такой же механизм может использоваться и на сервере.

Думаю, для системных администраторов и программистов сказанного выше вполне достаточно, чтобы успешно использовать STunnel на серверах или рабочих станциях для любых сетевых приложений. Добавлю только, что официальная страница STunnel доступна на http://mike.daewoo.com.pl/computer/stunnel.

Дальнейшие советы предназначены в основном для пользователей, и в первую очередь - для пользователей Windows 95/98, NT и Windows 2000.

Практические советы

К сожалению, пока программа STunnel плохо документирована, не обладает графическим интерфейсом и в малой степени использует другие возможности Windows. Поэтому ее настройка и использование требует аккуратности.

Я экспериментировал с версией 3.4a, возможно, в других версиях некоторые детали отличаются от указанных ниже.

Состав продукта

В Пакет входят три обязательных файла: программа stunnel.exe и две динамически подключаемые библиотеки libeay32.dll и libssl32.dll, позаимствованные из пакета OpenSSL. Практически вся доступная на сегодня документация находится в файле faq.txt (на английском языке). Скорее всего, вам понадобится файл с закрытым ключом и сертификатом. Имя этого файла может быть произвольным. Создать его можно с использованием пакета OpenSSL.

Какой-либо специальной установки для STunnel не требуется. Для начала работы файлы libeay32.dll и libssl32.dll необходимо скопировать в системный каталог Windows (по умолчанию это c:\windows\system для Windows 9х или c:\winnt\system32 для NT).

Параметры запуска

Для того чтобы правильно запустить stunnel.exe, вам необходимо указать несколько параметров. Параметры начинаются со знака минус и разделяются пробелом. Полный список параметров можно получить, запустив STunnel с параметром -h. Описание параметров приведено во врезке.

Для работы в режиме клиента, то есть при использовании STunnel совместно с клиентским программным обеспечением (например, с программой электронной почты), всегда следует указывать параметр -c. Кроме этого, вам всегда придется указывать еще как минимум два параметра: протокол, который использует ваша программа (-d), и протокол, используемый сервером, с которым устанавливается защищенное соединение (-r).

Для указания протоколов могут быть использованы либо их текстовые названия, либо закрепленные за протоколами номера портов. Например, протокол передачи сообщений электронной почты называется smtp, и для него зарезервирован порт с номером 25, поэтому в качестве протокола, используемого приложением для отправки почты, надо указать параметр -d smtp или же -d 25.

Напомню, что соответствие протоколов и номеров портов задается файлом services, который располагается в каталоге c:\windows для Windows 95 или в каталоге c:\winnt\ system32\drivers\etc для NT. В этом файле могут быть не указаны протоколы, используемые сервером, ожидающим защищенное соединение. Названия таких протоколов и соответствующих стандартных портов приведены во врезке на стр. 38. STunnel нецелесообразно использовать для защиты протокола http, так как для каждого сервера, с которым вы работаете, придется запускать новую копию stunnel.exe. Впрочем, большинство браузеров реализует защиту протокола http.

Рассмотрим простой пример использования STunnel. Известно, что одним из наиболее существенных недостатков протокола получения электронной почты pop3 является передача пароля в открытом виде, то есть любой компьютер, через который вы связываетесь с сервером почты, может быть использован злоумышленником для того, чтобы узнать ваш пароль и беспрепятственно читать вашу почту. STunnel решает эту проблему. Вам достаточно запустить программу со следующими параметрами: stunnel -c -d localhost:pop3 -r сервер:995, где "сервер" - имя вашего почтового сервера, например pop3.mail.ru. А в настройках вашей почтовой программы в качестве сервера входящей почты следует указать адрес локального компьютера 127.0.0.1 или localhost (см. рис.).

 
ПАРАМЕТРЫ КОМАНДНОЙ СТРОКИ STUNNEL

Параметры запуска

STunnel [-c] [-T] [-p pemfile] [-v level] [-a directory] [-t timeout] [-u username] [-n protocol] -d [ip:]port -r [ip:]port

-cЗапуск производится на компьютере клиента для работы с сервером, который поддерживает SSL. Этот параметр не используется, если STunnel запускается на сервере.
-TTransparent proxy mode (используется только на хостах, которые поддерживают такой режим).
-p pemfileИмя файла сертификата в формате PEM. Если этот параметр не указан, а STunnel запущена в режиме сервера, используется файл STunnel.pem. Если же STunnel запущена в режиме клиента, и этот параметр не указан, то сертификат не используется.
-v levelУровень проверки сертификатов удаленного компьютера.
1 - корректный сертификат может быть предоставлен или не предоставлен;
2 - удаленный компьютер должен предоставить произвольный сертификат;
3 - удаленный компьютер должен предоставить сертификат такой же, как один из сертификатов в локальном каталоге.
По умолчанию сертификат удаленного компьютера не проверяется.
-a directoryЛокальный каталог сертификатов.
-t timeoutТайм-аут TCP-соединения. По умолчанию 300 секунд.
-u userИмя пользователя. Задается в том случае, если сервер использует механизм аутентификации IDENT (RFC 1413).
-n protoЗадается при использовании SSL для конкретного протокола. В настоящее время поддерживается только smtp.
-d [ip:]portIP-адрес и протокол или порт приложения. Если IP-адрес не задан, допустимы любые адреса (INADDR_ANY).
-r [ip:]portIP-адрес и протокол или порт удаленного приложения. Если IP-адрес не задан, используется локальный хост (INADDR_LOOPBACK).
-hПолучение справки по командам STunnel.
-C listЗадание списка допустимых алгоритмов шифрования.
-D levelУровень выдачи отладочной информации в диапазоне от 0 до 7. По умолчанию 5.
-VВерсия программы STunnel.


Создание ключа и получение сертификата

Как я уже говорил, мое знакомство с STunnel было вызвано безуспешными попытками заставить Outlook Express устанавливать защищенное соединение в режиме с взаимной аутентификацией. Протокол SSL допускает работу в одном из двух режимов. В первом используется только цифровой сертификат сервера. Второй предусматривает наличие сертификатов как у сервера, так и у клиента. В обоих режимах осуществляется шифрование данных, однако в первом режиме только клиент может быть уверен в аутентичности (подлинности) сервера, а во втором сервер требует обязательного наличия у клиента корректного цифрового сертификата, что позволяет строго аутентифицировать и пользователя.

Безусловно, наибольший интерес представляет второй режим SSL, режим со взаимной аутентификацией клиента и сервера. Использование клиентских цифровых сертификатов позволяет не только обеспечить конфиденциальность передаваемых данных, но и отказаться от таких неудобных и слабых механизмов аутентификации, как пароли.

Для того чтобы выработать собственный цифровой сертификат, вам понадобится пакет OpenSSL [5].

Вы можете действовать по одному из двух сценариев: 1) создать ключ и заявку на сертификат при помощи программы OpenSSL, отправить заявку для регистрации в службу заверения сертификатов (certificate authority, CA) [6] и дождаться получения сертификата, или же 2) создать при помощи OpenSSL собственный локальный certificate authority, в котором и зарегистрировать ваш ключ [7].

Для реализации первой стратегии вам следует создать файл конфигурации req.cnf (см. врезку) и вызвать программу openssl.exe с следующими параметрами:

openssl.exe req -new -config req.cnf -out stunnel.req

Полученный в результате файл stunnel.req следует отправить в certificate authority для заверения. После того как вы получите заверенный сертификат, например, в файле stunnel.crt, вам останется просто добавить его к файлу закрытого ключа stunnel.pem командой copy stunnel.pem + stunnel.crt. В дальнейшем при использовании STunnel запускайте файл с дополнительным параметром -p stunnel.pem.

 
ФАЙЛ КОНФИГУРАЦИИ OPENSSL (REQ.CNF)

[ req ]
default_bits= 1024
default_keyfile= STunnel.pem
distinguished_name= req_distinguished_name
encrypt_rsa_key= no
[ req_distinguished_name ]
countryName= страна (двухбуквенный код)
countryName_default= RU
stateOrProvinceName= штат или область (полное название)
localityName= населенный пункт (например, город)
localityName_default= Moscow
organizationName= название организации (например, фирмы)
organizationName_default=
organizationalUnitName= название подразделения (например, отдела)
commonName= имя лица (например, ВАШЕ имя)
emailAddress= адрес электронной почты


Возможные угрозы

Следует сказать несколько слов о том, какие атаки может попытаться осуществить злоумышленник. Прежде всего, любая криптозащита эффективна только в том случае, если злоумышленнику недоступен ваш закрытый ключ. Он хранится в файле stunnel.pem. Кроме того, ценность для злоумышленника представляет файл .rnd, используемый пакетом OpenSSL как "рассада" (seed file) для выработки ключей. Если вы работаете в операционной системе Windows 95/98, ни при каких обстоятельствах не храните ключи в каталоге, к которому разрешен доступ из сети. При использовании Windows NT и файловой системы NTFS обязательно запретите доступ к этому файлу всем, кроме себя.

Другой неочевидной и крайне неприятной угрозой является возможность использования сервиса STunnel с другого компьютера. Дело в том, что если вы запустите STunnel, не указав явно в параметре -d IP-адрес локального компьютера, то любой подключенный к Internet компьютер сможет воспользоваться вашей Stunnel как сервисом-посредником (proxy). К счастью, эта проблема легко решается: просто при каждом запуске STunnel следует явно указывать, что программа будет обслуживать только локальный компьютер, например, -d localhost:pop3 или -d 127.0.0.1:pop3. Остается только сожалеть о том, что это правило не предусмотрено "по умолчанию".

Как видите, использовать STunnel достаточно просто. Если все же процедуры настройки покажутся вам сложными, а интерфейс - недостаточно дружественным, можно адаптировать STunnel в соответствии со своими потребностями и вкусами. Ведь этот продукт невелик по размеру и поставляется с исходными текстами. Разработчики STunnel обещают в ближайших версиях реализовать графический интерфейс для Windows и протоколирование событий в EventLog. Я считаю, что более важным была бы реализация STunnel в виде сервиса Windows NT, разработка правил управления сертификатами и шифрование ключей на пароле, как это реализовано в OpenSSL. Возможно, вам покажется более актуальным добавить в STunnel какие-либо другие возможности.



1 (обратно к тексту) - Протокол TLS (RFC2246) разработан на базе версии 3 протокола SSL и незначительно отличается от SSL. TLS также поддерживается новейшими версиями OpenSSL. Основное отличие TLS от SSL в том, что TLS специфицирует конкретный слой сетевой модели (а именно транспортный), по отношению к которому строится механизм защиты, а SSL апеллирует не к сетевой модели, а к модели ее реализации (socket'у).

2 (обратно к тексту) - Так, например, чтобы научить MS Internet Information Server версии 4.0 аутентифицировать клиентские приложения с использованием цифровых сертификатов, в документации рекомендовано сначала добавить сертификат в браузер, устанавливаемый на том же компьютере, что и Web-сервер, а затем синхронизировать справочники сертификатов браузера и Web-сервера при помощи утилиты iisca.

3 (обратно к тексту) - Следует отметить, что Microsoft предложила способ встраивания SSL в Windows NT, однако этот способ довольно сложен и требует досконального знания сетевых средств этой операционной системы.

4 (обратно к тексту) - Существуют и другие продукты, построенные на этом принципе, например sslwrap (www.rickk.com/sslwrap), но по ряду причин я остановился именно на STunnel.

5 (обратно к тексту) - Внимание! Программы STunnel и OpenSSL могут использовать разные версии библиотек, поэтому вам лучше скопировать файлы libeay32.dll, ssleay32.dll и openssl.exe в отдельный каталог и запускать openssl.exe только из этого каталога.

6 (обратно к тексту) - Список действующих CA и их Web-адресов можно найти в окне Security|Sertificates|Signers приложения Netscape Navigator/Communicator или Start|Settings|Control Panel|Internet|Content|Certificates|Authorities|Secure Email. Обязательно обратите внимание на то, что американские CA, как правило, не подписывают сертификатов ключей достаточной длины для пользователей за пределами США/Канады.

7 (обратно к тексту) - В этом случае "корневой" самоподписанный сертификат вашего персонального CA должен быть зарегистрирован на сервере, с которым вы взаимодействуете, как пользующийся доверием. Для этого вам потребуется связаться с администрацией сервера.





© ООО "Компьютерра-Онлайн", 1997-2024
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.