Обзор сетевых туннелей SSTP

Дмитрий Аверин
22 июля 2020
access_time3 минуты
remove_red_eye2188
Компания «Ланкрафт»
Компания «Ланкрафт»

Людям, которые всерьез увлечены сетевыми технологиями, наверняка будет интересно познакомиться с устройством протокола туннелирования SSTP (Secure Socket Tunneling Protocol). SSTP представляет собой протокол VPN, разработанный компанией Microsoft, в основе которого лежит SSL. Американская корпорация включает SSTP в состав своих операционных систем Windows, начиная с версии Vista SP1 и серверной 2008. Для установления соединения используется HTTPS, данные по умолчанию передаются через порт TCP/443. За шифрование отвечает протокол SSL, для аутентификации применяются SSL и PPP.

SSTP имеет серверную часть, которая внедрена в линейку ОС Windows Server, начиная с 2008-й редакции. Ниже будет рассказано о версии протокола 1.0. Можно считать ее единственной, так как за прошедшие годы она не получила какого-либо развития. 

Кратко об особенностях криптографии

SSTP имеет сравнительно простое устройство, однако выделяется наличием уникальной криптографической функции, пусть и только одной. Речь идет об опции Cryptographic Binding, и о ней будет сказано подробнее дальше по тексту.

Данные шифрует протокол SSL. При авторизации используются SSL, PPP и, непосредственно, SSTP.

На уровне PPP клиентский узел авторизуется сервером. Попутно в некоторых случаях идет процесс аутентификации сервера. Если применяется PPP, то для выполнения процедуры аутентификации клиента, серверная ОС от Microsoft использует:

  • протокол проверки подлинности MS-CHAPv2;
  • фреймворк аутентификации EAP-TLS;
  • Protocol PEAP-MSCHAPv2, усиливающий стойкость EAP;
  • PEAP-TLS.

Технология также предусматривает поддержку CHAP и протокола PAP, в котором применяется пароль, не прошедший шифрование. Оба варианта не рекомендованы к применению, так как при их использовании узлы не обмениваются ключевой информацией, а, значит, функция Cryptographic Binding становится недоступной.

Здесь применимы в основном те же способы аутентификации, какие характерны и для PPTP. Но есть и важное отличие: в PPP узлы обмениваются данными внутри защищенного канала SSL, который зашифрован.

Теперь к сути Cryptographic Binding. Вследствие того, что аутентификацию сервер и клиент проходят на не одинаковых уровнях, открывается возможность для злоумышленников организовать так называемую «атаку человека посередине» (man-in-the-middle). В этом случае взломщик соединяется с сервером по SSL. Для связи же с клиентом выбирается PPP, а это соединение, как известно, не защищено.

Чтобы защититься от таких атак, применяется подпись ключом сообщения уровня SSTP о том, что соединение установлено (Call Connected Message). При этом есть одна важная особенность. Ключ вырабатывается во время процедуры аутентификации на PPP-уровне, благодаря чему у сервера появляется возможность определить, что тот, кто организовал SSL-сеанс и тот, кто смог пройти авторизацию по PPP, является одним и тем же клиентом. Вышеописанная процедура и лежит в основе функции Cryptographic Binding.

Как происходит установление соединения

  1. Клиент отправляет TCP-пакет на порт 443 сервера SSTP.
  2. Устанавливается соединение SSL/TLS поверх TCP. На этом этапе клиент выполняет проверку серверного сертификата.
  3. Дальше следует приветствие на уровне HTTPS.
  4. Для последующего обмена данными применяется SSTP. Все пакеты при пользовании этим протоколом передаются внутри HTTPS. Клиентской машиной отправляется запрос, чтобы установить соединение (Call Connect Request Message). Сообщение содержит Protocol Number. Этот протокол будет применен внутри Secure Socket Tunneling Protocol.
  5. Осуществляется проверка запроса на стороне сервера. В случае положительного исхода он дает подтверждение (Call Connect Acknowledge Message). Это сообщение включает 32-битное число, выбранное случайным образом. Оно будет использовано в клиентском ответе, чтобы защититься от повторений. Здесь также содержится перечень хэш-функций, которые необходимы, чтобы подписать следующий ответ (SHA256 либо SHA1, возможны оба варианта).
  6. Производится авторизация посредством PPP. Каждый пакет этого протокола инкапсулируется в соответствующий блок данных SSTP, выполняется шифрование с помощью технологии SSL.
  7. Клиент отправляет Call Connected Message. Сообщение содержит Client Nonce и хэш серверного сертификата, который удалось получить в момент, когда устанавливался SSL-сеанс.
  8. На этом этапе сервер производит проверку Call Connected Message, после чего SSTP можно считать установленным.
  9. Завершается определение параметров протокола Point-to-Point.

Разрыв соединения

Во время работы канал может простаивать. Это может выглядеть как разрыв соединения, но узлам необходимо уметь отличать одно от другого. Для этого стороны используют стандартный Ping. Если за 1 минуту узлы ни разу не обменялись данными, то производится отправка Echo Request (пакет с управляющей информацией уровня SSTP). При отсутствии отклика в течение 60 секунд производится разрыв связи.

Завершение сеанса

Узлы направляют друг другу пакеты SSTP, сообщающие о завершении сессии, после чего обе стороны независимо друг от друга разрывают соединение.