В последние месяцы армия пользователей VPN значительно увеличилась. И речь не о любителях обходить блокировки и посещать запрещенные сайты, а о тех, кто использует VPN для безопасной работы (да-да, удаленной работы). Это повод еще раз посмотреть на арсенал доступных протоколов и сравнить их с точки зрения безопасности.
Для начала — немного общих положений о VPN. Сценарии использования VPN могут быть разными, самые популярные их них:
- построение защищенного канала между двумя или более удаленными сегментами сети (например, между офисами в Москве и Нижнем Новгороде);
- подключение удаленного работника к корпоративной сети (теперь об этом знает почти каждый офисный сотрудник);
- виртуальное изменение местоположения с помощью услуг VPN Providers (требует наименьших телодвижений для настройки, однако весь ваш трафик будет проходить через чужой сервер).
Для реализации этих сценариев существуют различные виды VPN протоколов — для связи, для шифрования трафика и другие. И уже на основании подходящего протокола можно "строить" свое решение. Два самых известных и широко используемых протокола — OpenVPN и IPSec, а сравнительно недавно появился WireGuard, вызвавший некоторые разногласия. Есть и другие альтернативы, уже устаревшие, но вполне способные решать определенные задачи.
Преимущество того или иного протокола VPN зависит от ряда факторов и условий использования:
Устройства — разные устройства поддерживают разные протоколы.
Сеть — если определенные сервисы не доступны в вашей локации, некоторые протоколы могут не подойти. Например, есть VPN Providers, которые работают в Китае, тогда как большинство существующих провайдеров заблокированы.
Производительность — некоторые протоколы обладают бОльшей производительностью, особенно на мобильных устройствах. Другие — более удобны для использования в больших сетях.
Модель угроз — некоторые протоколы менее безопасны, чем другие, поэтому и злоумышленники могут воздействовать на них по-разному.
Итак, с общей частью закончили, теперь переходим к подробному описанию и сравнению протоколов.
PPTP
Point-to-Point Tunneling Protocol (PPTP) — один из старейших VPN протоколов, используемых до сих пор, изначально был разработан компанией Microsoft.
PPTP использует два соединения — одно для управления, другое для инкапсуляции данных. Первое работает с использованием TCP, в котором порт сервера 1723. Второе работает с помощью протокола GRE, который является транспортным протоколом (то есть заменой TCP/UDP). Этот факт мешает клиентам, находящимся за NAT, установить подключение с сервером, так как для них установление подключения точка-точка не представляется возможным по умолчанию. Однако, поскольку в протоколе GRE, что использует PPTP (а именно enhanced GRE), есть заголовок Call ID, маршрутизаторы, выполняющие натирование, могут идентифицировать и сопоставить GRE трафик, идущий от клиента локальной сети к внешнему серверу и наоборот. Это дает возможность клиентам за NAT установить подключение point-to-point и пользоваться протоколом GRE. Данная технология называется VPN PassTrough. Она поддерживается большим количеством современного клиентского сетевого оборудования.
PPTP поддерживается нативно на всех версиях Windows и большинстве других операционных систем. Несмотря на относительно высокую скорость, PPTP не слишком надежен: после обрыва соединения он не восстанавливается так же быстро, как, например, OpenVPN.
В настоящее время PPTP по существу устарел и Microsoft советует пользоваться другими VPN решениями. Мы также не советуем выбирать PPTP, если для вас важна безопасность и конфиденциальность.
Конечно, если вы просто используете VPN для разблокировки контента, PPTP имеет место быть, однако, повторимся: есть более безопасные варианты, на которые стоит обратить внимание.
SSTP
Secure Socket Tunneling Protocol (SSTP) — проприетарный продукт от Microsoft. Как и PPTP, SSTP не очень широко используется в индустрии VPN, но, в отличие от PPTP, у него не диагностированы серьезные проблемы с безопасностью.
SSTP отправляет трафик по SSL через TCP-порт 443. Это делает его полезным для использования в ограниченных сетевых ситуациях, например, если вам нужен VPN для Китая. Несмотря на то, что SSTP также доступен и на Linux, RouterOS и SEIL, по большей части он все равно используется Windows-системами.
С точки зрения производительности SSTP работает быстро, стабильно и безопасно. К сожалению, очень немногие VPN провайдеры поддерживают SSTP.
SSTP может выручить, если блокируются другие VPN протоколы, но опять-таки OpenVPN будет лучшим выбором (если он доступен).
IPsec
Internet Protocol Security (IPsec) — это набор протоколов для обеспечения защиты данных, передаваемых по IP-сети. В отличие от SSL, который работает на прикладном уровне, IPsec работает на сетевом уровне и может использоваться нативно со многими операционными системами, что позволяет использовать его без сторонних приложений (в отличие от OpenVPN).
IPsec стал очень популярным протоколом для использования в паре с L2TP или IKEv2, о чем мы поговорим ниже.
IPsec шифрует весь IP-пакет, используя:
- Authentication Header (AH), который ставит цифровую подпись на каждом пакете;
- Encapsulating Security Protocol (ESP), который обеспечивает конфиденциальность, целостность и аутентификацию пакета при передаче.
Обсуждение IPsec было бы неполным без упоминания утечки презентации Агентства Национальной Безопасности США, в которой обсуждаются протоколы IPsec (L2TP и IKE). Трудно прийти к однозначным выводам на основании расплывчатых ссылок в этой презентации, но если модель угроз для вашей системы включает целевое наблюдение со стороны любопытных зарубежных коллег, это повод рассмотреть другие варианты. И все же протоколы IPsec еще считаются безопасными, если они реализованы должным образом.
Теперь мы рассмотрим, как IPsec используется в паре с L2TP и IKEv2.
L2TP/IPsec
Layer 2 Tunneling Protocol (L2TP) был впервые предложен в 1999 году в качестве обновления протоколов L2F (Cisco) и PPTP (Microsoft). Поскольку L2TP сам по себе не обеспечивает шифрование или аутентификацию, часто с ним используется IPsec. L2TP в паре с IPsec поддерживается многими операционными системами, стандартизирован в RFC 3193.
L2TP/IPsec считается безопасным и не имеет серьезных выявленных проблем (гораздо безопаснее, чем PPTP). L2TP/IPsec может использовать шифрование 3DES или AES, хотя, учитывая, что 3DES в настоящее время считается слабым шифром, он используется редко.
У протокола L2TP иногда возникают проблемы из-за использования по умолчанию UDP-порта 500, который, как известно, блокируется некоторыми брандмауэрами.
Протокол L2TP/IPsec позволяет обеспечить высокую безопасность передаваемых данных, прост в настройке и поддерживается всеми современными операционными системами. Однако L2TP/IPsec инкапсулирует передаваемые данные дважды, что делает его менее эффективным и более медленным, чем другие VPN-протоколы.
IKEv2/IPsec
Internet Key Exchange version 2 (IKEv2) является протоколом IPsec, используемым для выполнения взаимной аутентификации, создания и обслуживания Security Associations (SA), стандартизован в RFC 7296. Так же защищен IPsec, как и L2TP, что может говорить об их одинаковом уровне безопасности. Хотя IKEv2 был разработан Microsoft совместно с Cisco, существуют реализации протокола с открытым исходным кодом (например, OpenIKEv2, Openswan и strongSwan).
Благодаря поддержке Mobility and Multi-homing Protocol (MOBIKE) IKEv2 очень устойчив к смене сетей. Это делает IKEv2 отличным выбором для пользователей смартфонов, которые регулярно переключаются между домашним Wi-Fi и мобильным соединением или перемещаются между точками доступа.
IKEv2/IPsec может использовать ряд различных криптографических алгоритмов, включая AES, Blowfish и Camellia, в том числе с 256-битными ключами.
IKEv2 поддерживает Perfect Forward Secrecy.
Во многих случаях IKEv2 быстрее OpenVPN, так как он менее ресурсоемкий. С точки зрения производительности IKEv2 может быть лучшим вариантом для мобильных пользователей, потому как он хорошо переустанавливает соединения. IKEv2 нативно поддерживается на Windows 7+, Mac OS 10.11+, iOS, а также на некоторых Android-устройствах.
OpenVPN
OpenVPN — это универсальный протокол VPN с открытым исходным кодом, разработанный компанией OpenVPN Technologies. На сегодняшний день это, пожалуй, самый популярный протокол VPN. Будучи открытым стандартом, он прошел не одну независимую экспертизу безопасности.
В большинстве ситуаций, когда нужно подключение через VPN, скорее всего подойдет OpenVPN. Он стабилен и предлагает хорошую скорость передачи данных. OpenVPN использует стандартные протоколы TCP и UDP и это позволяет ему стать альтернативой IPsec тогда, когда провайдер блокирует некоторые протоколы VPN.
Для работы OpenVPN нужно специальное клиентское программное обеспечение, а не то, которое работает из коробки. Большинство VPN-сервисов создают свои приложения для работы с OpenVPN, которые можно использовать в разных операционных системах и устройствах. Протокол может работать на любом из портов TCP и UPD и может использоваться на всех основных платформах через сторонние клиенты: Windows, Mac OS, Linux, Apple iOS, Android.
Но если он не подходит для вашей ситуации, стоит обратить внимание на альтернативные решения.
WireGuard
Самый новый и неизведанный протокол VPN — WireGuard. Позиционируется разработчиками как замена IPsec и OpenVPN для большинства случаев их использования, будучи при этом более безопасным, более производительным и простым в использовании.
Все IP-пакеты, приходящие на WireGuard интерфейс, инкапсулируются в UDP и безопасно доставляются другим пирам. WireGuard использует современную криптографию:
- Curve25519 для обмена ключами,
- ChaCha20 для шифрования,
- Poly1305 для аутентификации данных,
- SipHash для ключей хеш-таблицы,
- BLAKE2 для хеширования.
Код WireGuard выглядит куда скромнее и проще, чем код OpenVPN, в результате чего его проще исследовать на уязвимости (4 тысячи строк кода против нескольких сотен тысяч). Также многие отмечают, что его гораздо легче развернуть и настроить.
Результаты тестов производительности можно увидеть на официальном сайте (как не сложно догадаться, они хороши). Стоит отметить, что лучшие результаты WireGuard покажет на Linux системах, т.к. там он реализован в виде модуля ядра.
Совсем недавно был представлен WireGuard 1.0.0, который отметил собой поставку компонентов WireGuard в основном составе ядра Linux 5.6. Включенный в состав ядра Linux код прошел дополнительный аудит безопасности, выполненный независимой фирмой, который не выявил каких-либо проблем. Для многих это отличные новости, но сможет ли WireGuard стать достойной заменой IPsec и OpenVPN покажет время и независимые исследования безопасности.
Мы постарались охарактеризовать самые популярные VPN протоколы, надеемся, обзор был для вас полезен. В качестве резюме приводим сравнительную таблицу, где еще раз обозначены важные, на наш взгляд, показатели.
PPTP | SSTP | L2TP/IPsec | IKEv2/IPsec | OpenVPN | WireGuard | |
---|---|---|---|---|---|---|
Компания-разработчик | Microsoft | Microsoft | L2TP — совместная разработка Cisco и Microsoft, IPsec — The Internet Engineering Task Force | IKEv2 — совместная разработка Cisco и Microsoft, IPsec — The Internet Engineering Task Force | OpenVPN Technologies | Jason A. Donenfeld |
Лицензия | Proprietary | Proprietary | Proprietary | Proprietary, но существуют реализации протокола с открытым исходным кодом | GNU GPL | GNU GPL |
Развертывание | Windows, macOS, iOS, некоторое время GNU/Linux. Работает “из коробки”, не требуя установки дополнительного ПО | Windows. Работает “из коробки”, не требуя установки дополнительного ПО | Windows,Mac OS X, Linux, iOS, Android. Многие ОС (включая Windows 2000/XP +, Mac OS 10.3+) имеют встроенную поддержку, нет необходимости ставить дополнительное ПО | Windows 7+, macOS 10.11+ и большинство мобильных ОС имеют встроенную поддержку | Windows, Mac OS, GNU/Linux, Apple iOS, Android и маршрутизаторы. Необходима установка специализированного ПО, поддерживающего работу с данным протоколом | Windows, Mac OS, GNU/Linux, Apple iOS, Android. Установить сам WireGuard, а затем настроить по руководству |
Шифрование | Использует Microsoft Point-to-Point Encryption (MPPE), который реализует RSA RC4 с максимум 128-битными сеансовыми ключами | SSL (шифруются все части, кроме TCP- и SSL-заголовков) | 3DES или AES | Реализует большое количество криптографических алгоритмов, включая AES, Blowfish, Camellia | Использует библиотеку OpenSSL (реализует большинство популярных криптографических стандартов) | Обмен ключами по 1-RTT, Curve25519 для ECDH, RFC7539 для ChaCha20 и Poly1305 для аутентификационного шифрования, и BLAKE2s для хеширования |
Порты | TCP-порт 1723 | TCP-порт 443 | UDP-порт 500 для первонач. обмена ключами и UDP-порт 1701 для начальной конфигурации L2TP, UDP-порт 5500 для обхода NAT | UDP-порт 500 для первоначального обмена ключами, а UDP-порт 4500 — для обхода NAT | Любой UDP- или TCP-порт | Любой UDP-порт |
Недостатки безопасности | Обладает серьезными уязвимостями. MSCHAP-v2 уязвим для атаки по словарю, а алгоритм RC4 подвергается атаке Bit-flipping | Серьезных недостатков безопасности не было выявлено | 3DES уязвим для Meet-in-the-middle и Sweet32, но AES не имеет известных уязвимостей. Однако есть мнение, что стандарт IPsec скомпрометирован АНБ США | Не удалось найти информации об имеющихся недостатках безопасности, кроме инцидента с утечкой докладов АНБ касательно IPsec | Серьезных недостатков безопасности не было выявлено | Серьезных недостатков безопасности не было выявлено |
Материал подготовлен совместно с veneramuholovka
homya4ok
PPTP использует порт 1723 для управляющего соединения; данные инкапсулируются в GRE тоннель. Из-за этого раньше необходимо было дополнительно настраивать фаерволлы. Как сейчас обстоят дела, не знаю.
DaemonGloom
Ничего не изменилось, это же его основа. Во многих местах его не настроить из-за этого, кстати. Например, не получится это сделать в Google Cloud Engine.
maxzhurkin
Нет, как раз «не настроить» не из-за «основы» (1723 TCP), через которую передаются только служебные данные, а из-за GRE, который находится на том же уровне TCP/IP, что и TCP, UDP или ICMP, и через который как раз идут передаваемые данные и та часть служебных, по передаче которых PPP (PPTP это, фактически, модифицированный PPP) производит самодиагностику (незаменимая часть протокола времён Dial-Up)
Резюмирую: без GRE, который не упомянут в статье, PPTP работать не будет и скорее именно эту часть следует называть основой.
Справедливости ради, без 1723 TCP PPTP тоже не будет работать
DaemonGloom
Я имел ввиду, что основа PPTP в том, что он состоит из двух частей всегда. GRE и control.
В том же Google Cloud Engine как раз gre невозможно настроить (режется самим гуглом), с управляющим соединением нет проблем. Но PPTP в итоге не заработает.