Дмитрий Рощин
В настоящее время большинство специалистов считают протокол PPTP
ненадежным с точки зрения безопасности и не рекомендуют его использование для
создания виртуальных частных сетей (VPN). Однако существует способ построения
VPN на основе этого протокола с уровнем защищенности, достаточным для
использования в корпоративной среде, и минимальными финансовыми затратами.
Нелегкая судьба протокола PPTP
Протокол PPTP (Point-to-Point Tunneling Protocol) разработан компанией
Microsoft совместно с компаниями Ascend Communications, 3Com/Primary Access,
ECI-Telematics и US Robotics. Этот протокол получил статус интернет-стандарта,
но так и не был утвержден.
Для организации туннеля в PPTP используется протокол
GRE (Generic Routing Encapsulation), а для шифрования трафика используется MPPE
(Microsoft Point-to-Point Encryption), протокол для шифрования пакетов
протокола PPP потоковым шифром RC4.
Фактически задача PPTP состоит в организации
шифрованного туннеля, внутри которого будет работать протокол PPP.
GRE не единственный протокол транспортного
(согласно модели OSI) уровня, используемый в PPTP – для организации
управляющего канала PPTP использует протокол TCP (порт 1723).
В реализации Microsoft поддерживаются следующие
методы аутентификации: PAP, CHAP, SPAP, MSCHAP v1, MSCHAP v2, EAP. Несмотря на
наличие ряда «врожденных» дефектов, о которых я еще скажу далее, данный
протокол до сих пор активно используется многими организациями благодаря тому,
что до появления L2TP/IPSEC это был единственный VPN-протокол, поддержка
которого была встроена в ОС Windows.
Итак, как настроить PPTP VPN таким образом, чтобы
обеспечить максимально возможный для данного протокола уровень безопасности?
Думаю, что предложенное решение будет интересно еще и как очередной пример
взаимодействия в рамках конкретной задачи коммерческого программного
обеспечения с программным обеспечением, имеющим открытый исходный код.
В первоначальном виде протокол PPTP представлял
собой настоящее решето. Буквально все его составляющие были уязвимы к различным
видам атак. Пароли в виде LM-хэшей; алгоритм MSHAP v1 (сплошное недоразумение);
шифрование MPPE (многократное использование ключей шифрования, атаки на шифр
RC4, генерация ключей шифрования на основе пароля пользователя); полное
отсутствие аутентификации сервера и проверки подлинности шифрованных пакетов;
отсутствие шифрования во время установления PPP-соединения; нет никакой защиты
канала управления и т. д.
Все эти уязвимости были выявлены в 1998 году
Брюсом Шнаером [1]. После чего Microsoft провела работу по усилению
безопасности и улучшению качества кода реализации PPTP. Новая версия протокола
получилась более защищенной, появилась вторая версия протокола MSCHAP.
Однако в скором времени все тот же неугомонный
Брюс Шнаер в 1999 году опять провел криптографический анализ уже обновленного
протокола [2]. Результаты снова оказались неутешительными, это и понятно, ведь
многие из уязвимостей существуют из-за недоработок в дизайне протокола.
Осталась генерация ключей шифрования на основе пароля пользователя, равно как и
отсутствие проверки подлинности шифрованных пакетов, шифрование во время
установления PPP-соединения по-прежнему отсутствует.
В 2003 году Джошуа Райт написал утилиту asleap
[3], которая за доли секунд взламывает слабые пароли, защищенные алгоритмом
MSCHAPv2, а чуть позже в нее был добавлен функционал работы с PPTP (см. рис.
1). Эта утилита изначально разрабатывалась для атак на патентованный протокол
Cisco Systems LEAP. Многие специалисты по информационной безопасности, увидев
ее в действии, начали призывать махнуть рукой на ущербный от рождения протокол,
мол, горбатого могила исправит, и переходить на L2TP/IPsec.

Рисунок 1. Демонстрация
работы asleap
Конечно, уровень безопасности протокола IPSEC на
порядок выше, чем PPTP, однако есть один нюанс, который позволяет и PPTP от
Microsoft отстоять свое право на существование. И вот в чем он заключается.