Реализация IPsec в свободно распространяемых UNIX
В этой статье я продолжу разговор, начатый в предыдущем материале [1]. Коротко напомню основные идеи той статьи. Виртуальные частные сети (VPN) являются более дешевой, а иногда и единственно возможной альтернативой связи нескольких офисов по телефонным и выделенным линиям. Виртуальные частные сети дают возможность соединить офисы по сети Интернет, обеспечив сохранение конфиденциальности и неизменности передающейся информации. Это достигается благодаря применению средств шифрования и электронной подписи к каждому передающемуся пакету. Хотя в России использование криптографических средств, закрывающих данные (обеспечивающих секретность данных), ограничено законом, существенное усиление защищенности может быть достигнуто за счет использования средств электронной подписи, обеспечивающих подтверждение личности пославшего сообщение и неизменность самого сообщения. Построить VPN можно множеством разных способов, но в этой статье я рассмотрю только стандартные методы, которые позволяют строить системы на базе продуктов разных производителей. Одним из таких методов является использование IPsec (Inernet Protocol Security).
Современные требования безопасности таковы, что новый стандарт IP — IPv6 требует обязательной поддержки IPsec от любого продукта, работающего с этой версией. Есть возможность использования IPsec и для современной (IPv4) версии протокола. Все ведущие производители сетевых систем предлагают свои продукты, поддерживающие IPsec. Не являются исключением и свободно распространяемые UNIX-системы, такие как Linux, FreeBSD, OpenBSD и NetBSD. Несмотря на то что эти системы являются бесплатными, по качеству они зачастую превосходят коммерческие разработки. А это немаловажно для продуктов, назначение которых — обеспечение безопасности. Более того, многие современные специалисты считают, что доверять можно только тому продукту, который поставляется вместе с исходными текстами, чтобы каждый желающий мог их проанализировать.
Что же предлагает нам мир свободного UNIX? Существовало несколько проектов по реализации IPsec для свободно распространяемых UNIX, но только некоторые из них оказались достаточно успешными для использования их в реальной работе. В этой статье я рассмотрю три самых распространенных из них — KAME (FreeBSD, NetBSD, OpenBSD), FreeS/WAN (Linux) и IPsec, встроенный в OpenBSD. Таким образом, для OpenBSD существует две реализации IPsec — собственной разработки и KAME.
Проект KAME [2] поддерживает три свободно распространяемых UNIX — FreeBSD, OpenBSD и NetBSD. Все эти три системы являются развитием одного и того же продукта — BSD4.4, поэтому имеют большое количество общих свойств и исходных текстов, что делает одновременную их поддержку относительно простой задачей. Целью проекта KAME является улучшение существующего стека протоколов IP и разработка стека, поддерживающего новую версию IP — IPv6 (напомню, что сейчас действует стандарт IPv4). Так как для IPv6 поддержка IPsec является обязательной, в рамках проекта ведутся работы над его реализацией. Но этот же IPsec работает и с IPv4. Кроме поддержки IPv6 и Ipsec, в пакет KAME входит улучшенный менеджер очередей для маршрутизаторов — ALTQ и средства работы с ATM. Пакет поставки содержит весь этот софт «в одном флаконе», что мне лично показалось не очень удобным: мне не хотелось компилировать и устанавливать весь пакет, когда большая часть его свойств мне не нужна. Тем не менее, возможно, через какое-то время эти свойства могут понадобиться. Другим недостатком этого пакета является его привязка к определенной версии системы. Так, пакет для FreeBSD поставляется для версии FreeBSD-3.4-RELEASE. Многие пользователи и системные администраторы пользуются FreeBSD-3.4-STABLE, которая является обновлением для FreeBSD-3.4-RELEASE, включающим последние исправления ошибок, и закрывает возможные «дырки» в безопасности. Гарантии, что KAME будет компилироваться и работать в этой версии, нет.
По мере развития программного обеспечения в рамках проекта KAME произведенное ими программное обеспечение встраивается в официальные поставки операционных систем. Так, KAME уже встроен в NetBSD-current [3], во FreeBSD-current [4] и в OpenBSD-current [5]. Пока это — версии разработчиков, что является препятствием тому, чтобы рекомендовать ее для ежедневного использования. Включение пакета KAME в базовые поставки систем снимает упомянутые мною неудобства его использования. В настоящее время этот пакет находится в стадии активной разработки и, возможно, через какое-то время станет одним из самых популярных пакетов, реализующих IPseс.
Как уже говорилось, OpenBSD имеет реализацию IPsec собственной разработки. То, что эта реализация интегрирована с системой, делает ее использование чрезвычайно удобным. Вы просто устанавливаете OpenBSD на свой компьютер и можете сразу настраивать VPN, в то время как в других системах необходимыми являются стадии установки изменений (patches) и перекомпиляции, которая не всегда проходит гладко. Кроме того, OpenBSD — в настоящее время одна из самых безопасных систем. Это определяется тем, что сам проект был начат и продолжается сейчас как проект для создания защищенной системы. Иными словами, защищенность ставится выше любых других свойств. И это приносит свои плоды — чтобы в этом убедиться, достаточно посмотреть архив листа рассылки bugtraq [8], специально созданного для обсуждения возможных уязвимых мест систем и признаваемого одним из самых авторитетных источников этого направления. Скорее всего, в дальнейшем в OpenBSD будет также использована реализация IPsec из KAME, так как KAME содержит гораздо больше свойств, чем просто IPsec (мы уже говорили о IPv6, ALQ, ATM). Возможно, это будет объединение двух пакетов, включающее лучшие свойства того и другого.
Реализация IPsec для Linux осуществляется в рамках проекта FreeS/WAN (Free Secure Wide Area Network) [6]. Текущая версия базируется на RedHat Linux и разработана для RedHat 5.2 с ядром 2.0.38 и RedHat 6.1 с ядром 2.2.14. Возможно, оно будет работать и в других системах с другими ядрами, но, очевидно, что никаких обещаний разработчики не дают, поэтому лучше не рисковать. Это программное обеспечение встроено также в европейскую версию SuSE 6.3 и поэтому обеспечивает то же удобство использования, что и IPsec, встроенный в OpenBSD. Существует также пакет IPsec для Linux, разработанный в США. Но для нас эта реализация недоступна, так как правительство США приравнивает программное обеспечение, осуществляющее шифрацию данных, к оружию и, следовательно, жестко следит за нераспространением этих программ.
Все три пакета являются полноценными реализациями IPsec. Они достаточно полно реализуют свойства, являющиеся обязательными согласно стандарту, и поэтому вполне могут быть использованы для построения реальных VPN. Различие пакетов заключается в поддержке рекомендуемых или разрешаемых стандартом свойств, таких как поддержка дополнительных алгоритмов шифрования, электронных подписей и протоколов распределения ключей.
В качестве алгоритмов шифрования все три пакета поддерживают DES и 3DES (только DES соответствует требованиям старого стандарта, но в настоящее время он считается недостаточно сильным, и новые стандарты будут требовать 3DES). Исключение составляет FreeS/WAN. Меня удивил подход авторов к этому вопросу. Они пишут, что поскольку DES считается недостаточно безопасным, они исключили возможность его использования вообще. Поскольку поддержка DES является требованием стандарта, получается, что авторы его нарушают. Это может привести к ситуации, когда вы не сможете связаться с какой-либо из старых реализаций IPsec. Кроме того, существует достаточно много случаев, когда DES вполне достаточен для обеспечения необходимого уровня секретности и использование 3DES только замедляет работу системы втрое. FreeS/WAN не поддерживает никаких других алгоритмов шифрования, и это ограничивает гибкость системы по сравнению с другими пакетами.
Два других пакета, кроме стандартных алгоритмов шифрования (DES и 3DES), поддерживают и некоторые дополнительные. Так, KAME поддерживает Blowfish, RC5, CAST, IDEA, OpenBSD поддерживает Blowfish, CAST и SKIPJACK. Больший выбор алгоритмов шифрования дает большую гибкость и позволяет более тонко выбирать между требуемой секретностью и производительностью системы. На выбор протокола шифрования оказывают влияние многие факторы: уровень секретности, производительность, требования закона. DES и 3DES являются стандартами на шифрование данных в США. Считается, что DES в настоящее время не обеспечивает необходимого уровня безопасности из-за малой длины ключа (64 бита), что делает возможным простой подбор ключа методом перебора. Тем не менее DES вполне подходит для решения простейших задач. 3DES использует шифрование DES три раза (два раза с одним ключом и один раз с другим), что дает вполне достаточную по современным требованиям длину ключа — 128 бит. Однако 3DES в три раза медленнее, чем DES. С точки зрения производительности очень привлекательным выглядит использование алгоритма Blowfish, разработанного Брюсом Шнейером (Bruce Schneier), автором книги Applied Cryptography и весьма уважаемым криптографом. И хотя алгоритм исследован не так хорошо как, например, DES, многие верят, что он обеспечивает хорошую секретность. В настоящее время, насколько мне известно, это — самый быстрый алгоритм шифрования, обеспечивающий достаточную для большинства приложений защиту.
В качестве алгоритма аутентификации все три пакета поддерживают MD5 и SHA, требуемые стандартом. Кроме того, OpenBSD поддерживает RIPEMD. Считается, что SHA обеспечивает более высокий уровень защищенности, но некоторые не особенно доверяют ему, так как он был разработан Агентством Национальной Безопасности США (NSA). Те, кто не доверяет SHA, считают, что NSA могло разработать алгоритм с заранее заложенной и хорошо скрытой слабостью, чтобы потом ее использовать. Насколько это важно для вашего приложения — решать вам.
Хотя в этой и предыдущей статьях мы говорим о VPN, стоит упомянуть и про другой режим работы IPsec. Все три пакета поддерживают как режим туннелирования, который используется для построения VPN, так и транспортный режим, использующийся для построения защищенных каналов между конечными компьютерами. Как я уже упоминал в предыдущей статье, в режиме туннелирования пакет, предназначенный для пересылки через Интернет, шифруется и упаковывается в другой IP-пакет — «конверт», что и обеспечивает безопасную его пересылку. Расшифровку пакета обеспечивает другой маршрутизатор; конечные компьютеры могут ничего «не знать» о том, что пакеты пересылаются через Интернет в шифрованном виде. В транспортном режиме пакет шифруется и расшифровывается конечными компьютерами. Этот режим позволяет скрывать данные и в пределах учреждения на всем его пути. Какой режим использовать, зависит, конечно, от политики безопасности фирмы.
И, наконец, все три пакета поддерживают стандартные способы распределения ключей. Поскольку распределение ключей является одной из важнейших проблем, остановимся на ней подробнее.
Простейшим способом, предусмотренным стандартом, является ручное распределение ключей. К сожалению, стандарт не определяет интерфейса с системой, реализующей IPsec, и потому в каждом пакете реализованы свои команды, с разными названиями, получающие разные аргументы. В пакете KAME утилита, позволяющая настроить VPN с ручным распределением ключей, называется setkey, в OpenBSD — ipsecadm, в FreeS/WAN ipsec. К счастью, разобравшись в работе одной утилиты, достаточно просто разобраться в работе всех остальных, так как все они реализуют примерно одинаковые возможности.
Ручное распределение ключей допускается в очень ограниченном числе случаев, когда к системе не предъявляется серьезных требований. Дело в том, что, чем дольше существует ключ и чем больше данных, зашифрованных или подписанных с использованием одного и того же ключа, тем легче злоумышленнику взломать шифр. Поэтому ключи необходимо менять достаточно часто, то есть настолько часто, насколько этого требует количество передаваемых данных и важность этих данных. Чем важнее данные, тем чаще следует менять ключ. Вообще, обмен ключами — не настолько сложная задача, и он не настолько загружает сеть, чтобы от него отказываться. Видимо, следует пользоваться ручным распределением ключей только на начальном этапе при отладке соединений, когда надо отделить работу программ обмена ключами от шифрования и электронной подписи пакета, исполняемых ядром во всех трех системах. Другим случаем, когда невозможно избежать ручного распределения ключей, является ситуация несовместимости программ обмена ключами с двух сторон, которая может возникнуть при использовании с двух сторон систем разных производителей. В любом же другом случае, когда есть возможность наладить автоматический обмен ключами, имеет смысл это сделать.
Для динамического обмена ключами стандартом определено, что любая реализация должна поддерживать как минимум один способ распределения — протокол IKE (Internet Key Exchange). Согласно протоколу, перед тем как начать обмениваться сообщениями с помощью IPsec, обе стороны должны «договориться» о параметрах передачи — протоколах (шифрование, аутентификация или и то и другое), алгоритмах, ключах. Поддерживая постоянную связь, оба конца обязаны время от времени договариваться о новых ключах. Обмен происходит в двух фазах. В начальной фазе обе программы обмена с двух сторон посылают сообщения для идентифицикации друг друга и договариваются о ключах, которыми они будут пользоваться для связи между собой. Данные ключи используются только для «разговора» между этими программами «диалога» и нигде больше: программы устанавливают отдельную шифрованную связь вне зависимости от других соединений, которые не могут быть установлены, так как именно для их установления мы должны получить ключи. Аутентификация в рамках начального обмена может быть проведена по-разному. Все три пакета поддерживают разделяемые ключи (каждая пара соединений имеет свой ключ) и использование публичной криптографии — алгоритма RSA (каждый компьютер имеет два ключа — секретный и публичный). Оба метода обеспечивают примерно одинаковое качество безопасности. Но метод с публичными ключами удобнее в случае, когда необходимо связываться с большим количеством соседей. Для всех трех пакетов планируется поддержка инфраструктуры защищенного распространения публичных ключей. Это даст возможность компьютеру, желающему установить соединение с другим компьютером, выяснить, поддерживает ли удаленный компьютер IPsec (точно так же, как мы сейчас выясняем IP-адрес компьютера по его имени), и получить его публичный ключ, подписанный кем-то, чей ключ мы знаем и можем проверить его подпись. Это, в свою очередь, позволит гарантировать необходимое соединение и его секретность. Для построения собственной VPN это свойство не важно, но для повышения общей безопасности использования Интернета оно желательно. Разработчики какого из пакетов прореагируют быстрее на возникновение этой инфраструктуры и когда она возникнет, сейчас предсказать очень сложно.
К сожалению, все три пакета содержат разные программы, реализующие IKE. В KAME утилита называется racoon, OpenBSD — isakmpd, FreeS/WAN — pluto. Эти реализации различаются не только названиями, но и возможностями, конфигурационными файлами. Как и сам протокол, конфигурационные файлы достаточно сложны. Для их понимания необходимы хотя бы начальные знания самого протокола. В Интернете сейчас можно найти его описания в форме введения. Файл конфигурации программы isakmpd (OpenBSD), на мой взгляд, имеет менее понятный формат, чем pluto и racoon. Пакет FreeS/WAN имеет лучшую документацию с достаточным количеством примеров. Есть и довольно подробное описание процедуры настройки виртуальной сети, в том числе с использованием демона (daemon) IKE — pluto. В описании же настройки IPsec для OpenBSD и KAME есть только примеры настройки с использованием ручного (статического) распределения ключей. Правда, в страничках документации (manual pages) для соответствующих демонов приводятся примеры конфигураций, которые можно использовать для разработки собственных сетей. Наличие хорошей документации, конечно, существенно облегчает использование FreeS/WAN.
Так как стандарт разрешает иметь поддержку не только IKE, но и других протоколов, в OpenBSD реализован еще один протокол обмена ключами — photuris [7]. Данный протокол проще, чем IKE, и программа, его реализующая (photurisd), имеет конфигурационный файл, существенно более простой, чем isakmpd. Photuris является экспериментальным протоколом, наличия которого стандарт не требует, и немногие реализации IPsec его поддерживают, поэтому сейчас, скорее всего, вы сможете использовать его только в случае использования OpenBSD с обеих сторон.
Возможность установления соединений с другими реализациями IPsec является важным свойством любого пакета. На сайте фирмы Herve Schauer Consultants [9] приведена информация о возможности взаимодействия данных трех пакетов и реализаций других фирм и групп между собой. Из этой страницы следует, что все три пакета достаточно хорошо взаимодействуют как между собой, так и с реализацией IPsec фирмы Cisco. Взаимодействие обеспечивается при использовании как статического распределения ключей, так и демона IKE. Такая возможность взаимодействия, говорящая о достаточном соответствии стандартам, — немалый плюс всем трем реализациям.
Итак, подведем итоги. После ознакомления со всеми тремя пакетами можно сделать вывод, что наиболее хорошо документированная и самая простая в освоении реализация — FreeS/WAN. Реализации KAME и OpenBSD привлекают своей гибкостью. Так как, на мой взгляд, OpenBSD является наиболее защищенной системой, возможно, наилучшим выбором для создания VPN является KAME на OpenBSD (особенно спустя некоторое время, когда KAME будет включен в базовую поставку OpenBSD). Тем не менее реализации не слишком отличаются друг от друга, и на выбор одной из них скорее могут оказывать влияние не технические детали. Поэтому, наверно, стоит выбирать ту реализацию, которая работает в привычной вам системе. Общепризнанно, что безопасность определяется не только качеством самой системы или отдельно взятого пакета, но и качеством настройки. Работая со знакомой системой, проще избежать ошибок, которые могут свести на нет самые лучшие качества используемого пакета.
Использованные материалы:
- Геннадий Махметов. Виртуальные частные сети // КомпьютерПресс 2'2000, стр. 64
- http://www.kame.net/
- http://www.netbsd.org/
- http://www.freebsd.org/
- http://www.openbsd.org/
- http://www.freeswan.org/
- RFC2522, RFC2523
- http://securityfocus.com/
- http://www.hsc.fr/ressources/veille/ipsec/implementations/survey_results.free.html
КомпьютерПресс 5'2000