Общие принципы реализации виртуальных частных сетей для платформы Windows 2000
Немного об архитектуре Windows 2000
Реализация протокола IPSec фирмой Microsoft в Windows 2000
Виртуальные частные сети (Virtual Private Networks, VPN) представляют собой средства безопасности, осуществляющие защиту сетевых ресурсов. Упрощенно действие VPN можно определить как процесс передачи зашифрованных данных по открытым незащищенным каналам связи, например через Интернет.
таким системам безопасности сетевых ресурсов относятся, в частности, средства создания виртуальных частных сетей Check Point VPN-1 и протокол IPSec, реализованный фирмой Microsoft в Windows 2000.
По ряду причин обычные приложения, шифрующие данные пользователя, имеют ряд недостатков. Во-первых, разработка приложений или динамически загружаемых библиотек с функциями защиты — это самая элементарная и вместе с тем обеспечивающая наименьшую гибкость реализация. Защита на уровне приложения не является прозрачной, то есть пользователь должен сам решать, нужно ли защищать свои данные перед отправкой в сеть.
Во-вторых, в общем случае приложение может защищать только свои данные. Для того чтобы данные других приложений могли обрабатываться приложением, реализующим защиту этих данных, следует использовать специальные механизмы межпроцессной коммуникации. И лишь во взаимодействии с собственным драйвером приложение может стать мощным средством защиты, причем в некоторых случаях приложению приходится использовать недокументированные методы.
Прежде чем рассмотреть некоторые тонкости в реализации таких систем безопасности, как VPN, в общих чертах представим себе архитектуру ОС Windows 2000, на платформе которой работают рассматриваемые системы. Это необходимо в первую очередь потому, что средство защиты должно быть каким-то образом встроено в архитектуру операционной системы.
Немного об архитектуре Windows 2000
системе ввода-вывода Windows 2000 применяется послойная модель, то есть модули ОС как бы наслоены один поверх другого. Код, расположенный в некотором слое, вызывает код только нижележащего слоя. На рис. 1 схематично представлен последовательный путь, который проходят данные пользователя, прежде чем попасть в сеть.
Рис. 1
Операционная система Windows 2000 позволяет расширять свои возможности не на всех уровнях архитектуры. Это относится и к возможностям по реализации защиты сетевой информации. Наибольшие возможности по расширению функциональности эта ОС предоставляет на уровне промежуточных драйверов, располагающихся между драйверами транспортов и драйверами сетевых карт. Драйверы промежуточного уровня являются самыми мощными и эффективными способами реализации защиты. Разработка этих драйверов хорошо документирована, и ОС Windows 2000 позволяет внедрять их в стек сетевых драйверов без модификации уже существующих компонентов. Драйверы могут взаимодействовать с компонентами ОС, получая тем самым максимальные возможности для реализации функций защиты. Промежуточные драйверы способны контролировать весь сетевой трафик, поскольку через них проходят данные всех приложений, исполняющихся в системе. На выбор способа реализации системы защиты влияет множество факторов, вследствие чего выбор конкретного способа зависит от первоначально предъявляемых к этой системе требований.
Изложенное выше хорошо иллюстрирует наиболее очевидный путь реализации VPN.
Упрощенно модель этих систем защиты можно разбить на две основные группы. Первую группу представляют высокоуровневые модули, являющиеся приложениями и библиотеками и реализующие взаимодействие с пользователем, а также управление низкоуровневыми модулями, которые входят во вторую группу и являются драйверами, реализующими непосредственное шифрование сетевого трафика.
А теперь следует сказать несколько слов о криптографических алгоритмах, поскольку основное назначение систем виртуальных частных сетей — шифрование трафика.
Алгоритмы с открытым ключом, в общем-то, очень удобны для организации шифрования данных, передаваемых по локальным и глобальным вычислительным сетям, в основном из-за отсутствия необходимости передачи конфиденциальной ключевой информации. Однако чрезвычайно низкая в сравнении с классическими симметричными алгоритмами производительность не позволяет использовать их в качестве основного средства для организации шифрования потоков данных. Основной принцип использования возможностей, предоставляемых алгоритмами с открытым ключом, состоит в том, что на их базе строятся протоколы аутентификации, авторизации и обмена ключевой информацией для классического симметричного алгоритма. Именно последний алгоритм затем используется для шифрования основного потока данных. Операции аутентификации, авторизации и обмена ключевой информацией происходят редко и не требуют высокой производительности, поэтому их вполне можно реализовать в высокоуровневых компонентах: приложениях и библиотеках. А вот непосредственное зашифрование и расшифрование основного потока данных уже требуют максимальной производительности, вследствие чего за их реализацию обычно отвечают драйверы.
Как именно и в каких модулях реализованы криптографические алгоритмы, мы рассмотрим на конкретных примерах.
Реализация протокола IPSec фирмой Microsoft в Windows 2000
а рис. 2 представлена обобщенная схема основных модулей данного программного продукта защиты сетевого трафика, встроенного в Windows 2000.
Генерацию ключа для симметричного алгоритма шифрования, реализованного в драйвере IPSec, выполняют высокоуровневые компоненты, реализованные в DLL. Они передают полученный ключ в драйвер шифрования трафика.
До передачи драйверу основного секретного ключа для симметричного алгоритма шифрования, например для алгоритма DES1, происходит процесс его формирования на основе обмена начальными пакетами установления соединения между клиентом и сервером. В этом процессе участвует модуль, от которого не требуется особого быстродействия, — библиотека OAKLEY.DLL. Для выработки секретного ключа эта библиотека, в свою очередь, пользуется сервисами криптопровайдера DSSBASE.DLL (см. рис. 2). Криптопровайдеры в Windows 2000 (Microsoft Base DSS and Diffie-Hellman Cryptographic Provider, DSSBASE; Microsoft Base Cryptographic Provider, RSABASE; Protected Storage Default Provider, PSBASE) могут использоваться и для генерации случайных последовательностей.
Рис. 2
Между тем и некоторые первоначальные пакеты содержат данные, зашифрованные с помощью другого симметричного ключа DES. Этот ключ одинаков на обеих сторонах и используется ими для зашифрования и расшифрования только некоторых начальных пакетов. Формирование симметричного ключа происходит на основе алгоритма Диффи-Хеллмана. За формирование и обмен открытыми ключами для указанного алгоритма Диффи-Хеллмана отвечает все тот же высокоуровневый модуль — библиотека OAKLEY.DLL.
Согласно алгоритму Диффи-Хеллмана стороны независимо вырабатывают случайные последовательности, являющиеся секретными ключами. При генерации ключа используются различные псевдослучайные последовательности, которые могут быть собраны на компьютере. К ним относятся: seed из реестра, различные системные данные, значение регистра подсчета времени, содержимое стека и т.д.
Далее вычисляются открытые ключи по алгоритму Диффи-Хеллмана, а затем происходит обмен пакетами, содержащими открытые ключи, после получения которых каждая из сторон вычисляет общий секрет. Этот общий секрет используется вместе с другими несекретными данными (например, сookies из первоначальных пакетов) в качестве входных параметров во время многократного применения функции хэширования, часть последнего выходного значения которой и берется в качестве первого симметричного ключа DES.
Потом происходит генерация основного ключа DES, передаваемого в драйвер IPSec. Для его формирования помимо несекретных данных, передаваемых в начальных пакетах, снова используются общий секрет и расшифрованные на первом ключе DES случайные последовательности, взятые из определенного первоначального пакета, полученного от другой стороны. Из конечного результата многократного применения функции хэширования к этим секретным и несекретным данным берутся байты для ключа DES, передаваемого в драйвер IPSec.
После получения ключа драйвер IPSec начинает выполнять шифрование и расшифрование пакетов, передаваемых в сеть или из сети по симметричному алгоритму.
1 Подробнее о криптографических алгоритмах можно прочесть в нескольких статьях, размещенных на нашем CD-ROM. — Прим. ред.
Check Point VPN-1/ Firewall-1
редство создания VPN Check Point VPN-1/Firewall-1, кроме EXE- и DLL-модулей, включает драйвер, который является промежуточным NDIS-драйвером2 и располагается между протоколом TCP/IP и драйвером сетевой карты (или модема).
Как и в предыдущем примере VPN, в установление сеанса связи между удаленным клиентом SecuRemote и сервером Check Point VPN-1/Firewall-1 вовлекаются EXE- и DLL-модули, которые создают первоначальные пакеты установления сеанса, и с помощью таких пакетов осуществляется обмен открытыми ключами и аутентификационной информацией. При успешной аутентификации общий секретный ключ (сеансовый ключ) для симметричного алгоритма шифрования передается драйверу, а последующее шифрование трафика осуществляет промежуточный драйвер.
Начальные пакеты, передаваемые между клиентом и сервером, создаются EXE-модулем. К подобным пакетам относятся пакеты регистрации сервера клиентом и пакеты инициирования сеанса клиентом, в которых клиент передает свое имя, метод шифрования и т.д. Данные следующих пакетов сессии клиента и сервера идут в зашифрованном виде.
В отличие от VPN, созданной на основе IPSec, перед началом основной сессии только клиент в пакете инициирования сеанса передает серверу свой открытый ключ для алгоритма Диффи-Хеллмана, созданный автоматически во время загрузки клиента. Сервер же использует постоянный секретный и открытый ключи. Открытый ключ передается клиенту только один раз — во время регистрации сервера клиентом, а если на сервере сменили ключ — то в начале очередной сессии клиента с сервером. Этот открытый ключ сервера хранится у клиента в файле.
С помощью генератора псевдослучайных последовательностей и для формирования секретного ключа Диффи-Хеллмана, и для запроса (challenge), и для идентификатора пакета, и для выработки секретного ключа сессии (сеансового ключа) на сервере и удаленном клиенте генерируются последовательности случайных байтов. С целью генерации этих последовательностей EXE-модуль использует случайные данные, которые можно собрать на данном компьютере, такие как идентификатор процесса, значение текущего времени или часть этого значения, например тысячные доли секунды.
От вычисленного по алгоритму Диффи-Хеллмана общего секретного ключа берутся байты, которые используются клиентом и сервером в качестве общего ключа для симметричного алгоритма шифрования. Но последний не является тем ключом, с помощью которого шифруется основной поток данных драйвером. Клиент использует этот ключ для зашифрования пароля, введенного удаленным пользователем, а сервер — для зашифрования сеансового ключа. Именно этот сеансовый ключ, сгенерированный сервером, и передается в драйвер.
Для зашифрования пароля, передаваемого от клиента серверу, помимо секретного ключа, используется также одноразовый несекретный ключ, представляющий собой запрос от клиента из пакета инициирования сеанса. Зашифрованный пароль передается серверу в пакете инициирования сеанса. На сервере хранится SHA-хэш от пароля. Расшифровав пароль, полученный от клиента, сервер вычисляет его хэш и сравнивает с хэшем в своей базе.
Чтобы зашифровать сеансовый ключ, передаваемый от сервера клиенту, помимо секретного ключа также используется несекретный запрос от клиента из пакета инициирования сеанса. Зашифрованный ключ передается клиенту в пакете-ответе на пакет инициирования сеанса вместе с контрольной суммой.
В дальнейшем при шифровании пакетов основного потока данных, кроме постоянного секретного ключа сессии, используются одноразовые несекретные ключи, которые формируются из байтов заголовка шифруемых пакетов. Одноразовые несекретные ключи необходимы для того, чтобы каждый пакет был зашифрован с помощью собственного ключа.
2 Драйвером, удовлетворяющим спецификации Network Driver Interface Specification. — Прим. ред.