Введение
PPTP (от англ. Point-to-Point Tunneling Protocol) — туннельный протокол типа точка-точка (узел-узел), позволяющий компьютеру устанавливать защищённое соединение с сервером за счёт создания туннеля в незащищённой сети.
PPTP помещает (инкапсулирует) кадры PPP в IP-пакеты для передачи по глобальной IP-сети, например Интернет. PPTP может также использоваться для организации туннеля между двумя локальными сетями. РРТР использует дополнительное TCP-соединение для обслуживания туннеля.
Данный протокол менее безопасен, чем IPSec. PPTP работает, устанавливая обычную PPP сессию с противоположной стороной с помощью протокола Generic Routing Encapsulation. Второе соединение на TCP-порте 1723 используется для инициации и управления GRE-соединением. PPTP сложно перенаправлять за сетевой экран, так как он требует одновременного установления двух сетевых сессий. PPTP-трафик может быть зашифрован с помощью MPPE. Для аутентификации клиентов могут использоваться различные механизмы, например — MS-CHAPv2 и EAP-TLS.
Вопрос безопасности и надежности протокола
- MSCHAP-v1 совершенно ненадёжен. Существуют утилиты для лёгкого извлечения хэшей паролей из перехваченного обмена MSCHAP-v1;
- MSCHAP-v2 уязвим к словарной атаке на перехваченные challenge-response пакеты. Существуют программы, выполняющие данный процесс;
- В 2012 году было показано, что сложность подбора ключа MSCHAP-v2 эквивалентна подбору ключа к шифрованию DES, и был представлен онлайн-сервис, который способен восстановить ключ за 23 часа;
- При использовании MSCHAP-v1, MPPE применяет одинаковый RC4 сессионный ключ для шифрования информационного потока в обоих направлениях. Поэтому стандартным методом является выполнение XOR’а потоков из разных направлений вместе, благодаря чему криптоаналитик может узнать ключ;
- MPPE использует RC4 поток для шифрования. Не существует метода для аутентификации цифробуквенного потока, и поэтому данный поток уязвим к атаке, делающей подмену битов. Злоумышленник легко может заменить некоторые биты для изменения исходящего потока без опасности своего обнаружения. Данная подмена битов может быть зафиксирована с помощью протоколов, считающих контрольные суммы.
Структура
На рисунке 1 показано строение PPTP пакета. В целом — ничего особенного, в IP пакет инкапсулируется PPP кадр и GRE заголовок.
Туннелирование подразумевает три протокола:
- пассажир — инкапсулированный протокол (IP, CLNP, IPX, Apple Talk, DECnet Phase IV, XNS, VINES и Apollo);
- протокол инкапсуляции (GRE);
- транспортный протокол (IP).
Заголовок занимает 4 байта (рис. 2) и состоит из 2х частей:
1) 1-2 байты — flags:
— ChecksumPresent – бит 0, если равен 1, то в заголовке GRE присутствует необязательное поле контрольной суммы – Checksumfield;
— Key Present – бит 2, если равен 1, то в заголовке GRE присутствует необязательное поле, содержащее ключ – Key field;
— Sequence Number Present – бит 3, если равен 1, то в заголовке GRE присутствует необязательное поле порядкового номера – SequenceNumberfield;
— Version Number – биты 13–15. Данное поле обозначает версию реализации GRE. Значение 0 обычно используется для GRE. Point-To-Point протокол (PP2P) использует версию 1.
2) 3-4 байты. Содержат тип протокола (ethertype) инкапсулированного пакета.
MTU
Не менее важный вопрос для протокола — это вопрос MTU.
Так как PPTP — это полезная нагрузка + заголовок PPP+ GRE + заголовок IP. MTU Ethernet = 1500 байт, header IP = 20 байт, GRE = 4 байта. 1500-20-4 = 1476 байт.
Управляющие сообщения
В основе обмена данными по протоколу PPTP лежит управляющее соединение PPTP — последовательность управляющих сообщений, которые устанавливают и обслуживают туннель. Полное соединение PPTP состоит только из одного соединения TCP/IP, которое требует передачи эхо-команд для поддержания его открытым, пока выполняются транзакции. Ниже, на рисунке 3, указаны управляющие сообщения и их значения.