SSTP (Secure Socket Tunneling Protocol)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 12:33, 28 июня 2016.

SSTP (Secure Socket Tunneling Protocol - протокол безопасного туннелирования сокетов) – VPN протокол, основанный на SSL 3.0. Благодаря этому данные шифруются. Аутентификация осуществляется с помощью PPP. Соединение проходит с помощью HTTPS по 443 порту (настраиваемо).


Общее

Данный протокол был впервые представлен Microsoft в Windows Vista SP1, в серверных ОС включен с Windows Server 2008. Несмотря на то, что он также доступен и на Linux, RouterOS и SEIL, большей частью все равно используется только Windows-системами. Cтоит отметить, что не весь пакет шифруется с помощью SSL - HTTPS-заголовок, SSTP-заголовок, PPP-заголовок и полезная нагрузка шифруются, в то время как TCP-заголовок и SSL-заголовок - нет. При установлении SSL соединения проходит авторизация сервера клиентом по SSL сертификату. Заголовок состоит из 32 бит. Первые 8 отвечают за версию протокола, следующие 7 в резерве, 16й - управляющий бит, определяющий, идет ли пакет с данными (0) или управляющий пакет (1), затем - еще 4 резервных бита и 12 бит, показывающих длину пакета. Он достаточно безопасен, для шифрования, как правило, используется AES.

Плюсы и минусы

Плюсы
  1. очень безопасен (зависит от алгоритма шифрования, обычно используется очень стойкий AES)
  2. полностью интегрирован в Windows (начиная с Windows Vista SP1)
  3. имеет поддержку Microsoft
  4. может работать сквозь файрволлы
Минусы
  1. работает только в Windows-среде
  2. уязвимость к некоторым атакам, например MITM: из-за того, что аутентификация клиента и сервера происходит на разных уровнях, возможна атака "человек посередине", когда нарушитель устанавливает SSL соединение с сервером и незащищённое PPP соединение с клиентом.

Порядок установления соединения

  1. Клиентом устанавливается TCP соединение на 443-ий порт SSTP сервера.
  2. Проходит установление SSL/TLS соединения поверх TCP соединения. Клиент проверяет сертификат сервера.
  3. Проходит HTTPS приветствие.
  4. Начинается установление SSTP соединения. Все SSTP пакеты идут внутри HTTPS. Клиент посылает запрос на установление соединения (Call Connect Request message). В этом сообщении передаётся номер протокола, который будет использоваться внутри SSTP; в текущей версии стандарта это всегда PPP.
  5. Сервер проверяет запрос и, если всё ОК, отвечает на него подтверждением (Call Connect Acknowledge message), в котором сообщает 32-битное случайное число (ClientNonce), используемое в следующем ответе клиента для защиты от повторения, а так же список хэш-функций для подписи следующего ответа (SHA1 и/или SHA256).
  6. Происходит PPP авторизация. Все пакеты PPP вложены в SSTP пакеты и, соответственно, зашифрованы SSL.
  7. Клиент посылает Call Connected message, в которое включаются ClientNonce и Хэш сертификата сервера (ClientCertificateHash), полученного при установлении SSL соединения.

Это сообщение подписывается с помощью указанной сервером хэш-функции (точнее HMAC на её основе) и ключа, полученного в процессе PPP авторизации. Если для авторизации в PPP используется протокол, не поддерживающий генерацию ключей для MPPE (PAP или CHAP), то HMAC вычисляется с использованием ключа, равного нулю и атака "человек посередине" возможна.

  1. Сервер проверяет Call Connected message, на этом SSTP считается установленным.
  2. Заканчивается установление параметров PPP.

Дополнительно

  1. Хабр, все подробно, доступно
  2. Microsoft Support