Туннелирование (компьютерные сети)

Туннелирование — это метод передачи данных между компьютерными сетями, осуществляемый с помощью специальных сетевых протоколов туннелирования. Такой протокол позволяет, например, организовать пересылку приватных данных по публичной сети (например, через Интернет), или использовать один сетевой протокол поверх несовместимой инфраструктуры, что достигается посредством инкапсуляции.

Поскольку туннелирование подразумевает перепаковку данных в иной формат (часто с применением шифрования), этот процесс может скрывать истинную природу транслируемого трафика.

Протоколы туннелирования работают, используя полезную нагрузку (полезная нагрузка) обычного сетевого пакета для передачи дополнительной информации другого протокола. При этом, несмотря на опору на эшелонированные модели взаимодействия, такие как OSI или стек TCP/IP, туннелирование нарушает принцип строгого разделения уровней, позволяя передавать сервисы, не предусмотренные базовой сетью. Обычно протокол доставки сети действует на том же или более высоком эшелоне, чем протокол, чьи данные инкапсулируются.

Применение

С помощью туннелирования возможно, например, обеспечение работы одного сетевого протокола в среде, не поддерживающей его напрямую (например, запуск IPv6 поверх IPv4).

Другой важный сценарий — организация сервисов, которые затруднительно или небезопасно предоставлять исключительно средствами базовой сети, например, предоставление корпоративного сетевого адреса удалённому пользователю, подключённому к внешней среде.

Обход политик межсетевого экрана

Туннелирование может использоваться для обхода политик межсетевых экранов, когда запрещённый для передачи протокол «упаковывается» в разрешённый, например, HTTP. Если политика брандмауэра прямо не исключает такой вариант «обёртки», обход блокируемого трафика становится возможным.

Другой вариант — применение команды HTTP CONNECT: клиент отправляет соответствующий запрос на прокси-сервер, после чего тот устанавливает TCP-соединение с целевым узлом и перенаправляет весь передаваемый трафик между ними[1]. Из соображений безопасности прокси часто ограничивают применение CONNECT только портом 443 (HTTPS)[2].

Существуют способы обхода межсетевых экранов и другими протоколами, такими как DNS[3], MQTT[4], SMS[5].

Технические особенности

Пример применения протокола сетевого уровня: Generic Routing Encapsulation (GRE, протокол IP №47) предназначен для передачи пакетов IP (в том числе с приватными адресами из RFC 1918) через Интернет, инкапсулируя их в пакеты с публичными адресами. При этом протокол доставки и полезной нагрузки совпадают, но адресация между ними различается и несовместима.

Также возможно создание туннеля на уровне канального слоя. Layer 2 Tunneling Protocol (L2TP) позволяет передавать кадры между двумя узлами. По умолчанию туннель не шифруется: уровень защищённости определяется выбранным сетевым протоколом из стека TCP/IP.

Безопасная оболочка использует порт 22 для шифрования передаваемых данных по публичной сети, что реализует функционал VPN. Протокол IPsec реализует сквозной режим передачи (Transport Mode), а также может работать в режиме туннелирования через доверенный шлюз.

Для анализа протокольного стека, формируемого в процессе туннелирования, специалисту важно разбираться как в протоколе нагрузки, так и в протоколе доставки.

Распространённые протоколы туннелирования

  • IP in IP (IP-протокол 4): IP поверх IPv4/IPv6
  • SIT/IPv6 (IP-протокол 41): IPv6 поверх IPv4/IPv6
  • GRE (IP-протокол 47): общая маршрутизирующая инкапсуляция
  • OpenVPN (UDP-порт 1194)
  • SSTP (TCP-порт 443): протокол туннелирования через защищённые сокеты
  • IPSec (IP-протоколы 50 и 51): защита протокола Интернет
  • L2TP (UDP-порт 1701): протокол туннелирования второго уровня
  • L2TPv3 (IP-протокол 115): версия 3 протокола L2TP
  • VXLAN (UDP-порт 4789): расширяемая виртуальная локальная сеть
  • PPTP (TCP-порт 1723 для управления, GRE для данных): протокол туннелирования точка-точка
  • PPPoE (EtherType 0x8863 для управления, 0x8864 для данных): PPP поверх Ethernet
  • GENEVE
  • WireGuard (UDP-динамический порт)

Проблема «TCP meltdown»

Туннелирование полезной нагрузки, реализованной с помощью TCP, через другое TCP-соединение (например, PPP по TCP с применением SSH-переадресации портов), называется TCP-over-TCP и ведёт к значительной деградации производительности передачи — данное явление известно как проблема TCP meltdown[6][7]. Поэтому программное обеспечение VPN часто использует более простой, нежели TCP, протокол для туннельного соединения. Проблема возникает, когда одно TCP-соединение вложено в другое: нижний уровень обнаруживает неполадку и пытается компенсировать её, а вышестоящий уровень предпринимает дополнительные действия по компенсации, что приводит к задержкам и снижению производительности.

Туннелирование через SSH

SSH-туннель представляет собой зашифрованный канал, устанавливаемый по протоколу SSH (Secure Shell). Такой туннель применяется для пересылки незашифрованного трафика через защищённый канал и обеспечивает программно реализуемое средство сетевой защиты с обеспечением прозрачности шифрования[8].

Например, протокол SMB позволяет обмениваться файлами на платформе Microsoft Windows без шифрования. Если подключиться к файловой системе Windows через Интернет, трафик можно перехватить. Для защищённого доступа создаётся SSH-туннель, через который весь SMB-трафик передаётся по зашифрованному каналу; несмотря на отсутствие встроенного шифрования в SMB, безопасность трафика обеспечивается SSH.

SSH может прослушивать порт на удалённом или локальном хосте; любое подключение к нему перенаправляется на указанный адрес и порт противоположной стороны (локального или удалённого хоста).

Проблема TCP meltdown часто неактуальна для переадресации портов в OpenSSH, поскольку большинство сценариев не используются для вложенного TCP-over-TCP: клиент OpenSSH обрабатывает локальное TCP-соединение, извлекает из него полезную нагрузку и передаёт её по основному подключению туннеля, где сервер OpenSSH обрабатывает пакет аналогичным образом и направляет его к точке назначения[9]. Обработка происходит в обратном направлении аналогичным образом.

Создание SSH-туннелей позволяет обходить межсетевые экраны, запрещающие определённые виды Интернет-сервисов, если разрешены исходящие соединения. Например, организация может блокировать доступ к сайтам напрямую (порт 80), принуждая использовать прокси, но при наличии внешнего SSH-сервера пользователь может через туннель перенаправлять трафик своего браузера локально на порт, который далее транслируется на порт 80 веб-сервера в Интернете (через localhost).

В ряде SSH-клиентов поддерживается динамическое перенаправление портов через создание локального прокси SOCKS 4/5. Тогда пользователь указывает этот прокси в настройках приложений, что обеспечивает большую гибкость, нежели туннелирование одного порта. Если приложение не поддерживает SOCKS, можно использовать проксификатор, некоторые из которых (например, Proxycap) обладают встроенной поддержкой SSH.

В новых версиях OpenSSH возможна организация туннелей 2 или 3 уровня, если такая поддержка включена на обеих сторонах. В результате создаются виртуальные интерфейсы tun (третий уровень, по умолчанию) или tap (второй уровень) на обеих точках. Это позволяет обычными средствами маршрутизации и управления направлять через туннель весь трафик подсети; интерфейсы tap эмулируют прямое сетевое соединение по Ethernet.

Кибератаки на основе туннелирования

На практике механизмы туннелирования и инкапсуляция данных нередко используются злоумышленниками для организации нелегитимного обмена данными с защищённой сетью.

В рамках таких атак применяются протоколы HTTP[10], SSH[11], DNS[3],[12] MQTT[4].

Примечания

Литература

  • Raman, D., Sutter, B. D., Coppens, B., Volckaert, S., Bosschere, K. D., Danhieux, P., & Buggenhout, E. V. DNS tunneling for network penetration. In International Conference on Information Security and Cryptology (pp. 65-77). Springer, Berlin, Heidelberg, 2012.
  • Vaccari, I., Narteni, S., Aiello, M., Mongelli, M., & Cambiaso, E. Exploiting Internet of Things Protocols for Malicious Data Exfiltration Activities. IEEE Access, 9, 104261-104280, 2021.
  • Narteni, S., Vaccari, I., Mongelli, M., Aiello, M., & Cambiaso, E. Evaluating the possibility to perpetrate tunnelling attacks exploiting shortmessage-service. Journal of Internet Services and Information Security, 11, 30-46, 2021.
  • Barrett, Daniel J. SSH, the Secure Shell: The Definitive Guide. O'Reilly Media, Inc., 2001. ISBN 978-0-596-00011-0.