Основы

Что такое глубокая инспекция пакетов?

Обычное сетевое оборудование маршрутизирует пакет по тому, куда он идёт. Глубокая инспекция пакетов смотрит, что внутри него. Эта единственная разница отделяет маршрутизатор от системы цензуры, и именно поэтому VPN может работать на одной неделе и стать недоступным на следующей.

6 мин чтенияПоследняя проверка

Поверхностная инспекция против глубокой

Каждый пакет, проходящий по сети, несёт набор вложенных заголовков. Самый внешний описывает канал, затем заголовок IP даёт адрес отправителя и получателя, затем заголовок TCP или UDP — номера портов. Обычному маршрутизатору для работы нужно только это: прочитать адрес назначения, свериться с таблицей, переслать. Он никогда не вскрывает полезную нагрузку, да ему это и не требуется.

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

  • Поверхностная фильтрация блокирует по адресу и порту: «отбрасывать всё, что идёт на 203.0.113.10» или «отбрасывать всё, что идёт на порт 1194». Это дёшево, грубо и обходится простой сменой адреса или порта.
  • Глубокая инспекция блокирует по поведению: «отбрасывать всё, что похоже на рукопожатие OpenVPN, куда бы оно ни шло и на каком бы порту ни было». Обходится это гораздо дороже в эксплуатации, и смена адреса или порта уже не помогает.

На что на самом деле смотрит движок DPI

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

Буквальные байтовые сигнатуры
Фиксированные строки или структуры, встречающиеся на известных смещениях. Первые байты записи TLS узнаваемы; так же узнаваемы баннер SSH, рукопожатие BitTorrent или раскладка кодов операций управляющего пакета OpenVPN. Сопоставить шаблон на известном смещении почти ничего не стоит.
Открытые метаданные внутри зашифрованных протоколов
Шифрование скрывает не всё. Стандартное рукопожатие TLS передаёт запрошенное имя хоста открытым текстом в поле Server Name Indication, а в старых версиях TLS виден и сертификат сервера. Эти метаданные — самый богатый источник сведений, который есть у фильтра о непрозрачном в остальном соединении.
Отпечатки рукопожатия
Даже когда содержимое зашифровано, форма переговоров — нет. Точный список шифронаборов, который предлагает клиент, порядок расширений TLS, размеры первых записей — всё это различается у браузера, мобильного приложения и VPN-клиента, и всё это можно свернуть в хеш-отпечаток.
Статистика и тайминг
Размеры пакетов, соотношение отдачи и загрузки, ритм соединения во времени. Видеозвонок, скачивание файла и туннель, несущий всё сразу, имеют различимые профили, и классификатор можно обучить на них, не прочитав ни байта полезной нагрузки.

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

Что шифрование скрывает, а что нет

Распространено мнение, что зашифрованное соединение непрозрачно для наблюдателя. Это не так. Шифрование защищает конфиденциальность полезной нагрузки. Само по себе оно не скрывает ни факта соединения, ни того, кто его участники, ни его объёма, ни длительности, ни используемого протокола.

Что видит наблюдатель в разрыве обычного HTTPS-соединения
СвойствоВидно?Примечание
Ваш IP-адресДаОн в заголовке IP; иначе ответ до вас не дойдёт.
IP-адрес назначенияДаПо той же причине. Обратный DNS часто выдаёт оператора.
Порт назначенияДаНамекает на сервис: 443 для HTTPS, 22 для SSH и так далее.
Запрошенное имя хостаОбычно даПередаётся открытым текстом в поле SNI, если не используется Encrypted Client Hello, а он пока далеко не повсеместен.
Содержимое страницыНетПосле завершения рукопожатия его защищает уровень записей.
Объём и тайминг передачиДаШифрованием не скрывается никогда. Набивка может размыть картину; полностью не убирает её ничто.
Отпечаток клиентского ПООбычно даСамо рукопожатие отправляется до согласования каких-либо ключей.

Практическое следствие в том, что фильтру не нужно ничего расшифровывать, чтобы принять решение о блокировке. Ему достаточно по тем частям, которые никогда не шифровались, решить, относится ли это соединение к категории, которую ему велено отбрасывать. Это гораздо более простая задача, и именно её решают современные системы цензуры.

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

После классификации потока система должна что-то с ним сделать. Выбранный способ многое говорит о внедрении, и обычно их можно различить со стороны клиента.

  1. Тихое отбрасывание. Пакеты выбрасываются без ответа. Соединение зависает и в конце концов отваливается по таймауту. Это самое частое поведение фильтра, который не хочет себя обнаруживать.
  2. Поддельный сброс. Система вбрасывает пакет TCP RST, подделанный так, будто он пришёл с другой стороны. Соединение обрывается резко, часто уже после того, как прошло несколько пакетов, — и это сильная примета: по-настоящему недоступный сервер вообще не отвечает.
  3. Манипуляция DNS. На запрос имени возвращается неверный адрес или не возвращается ничего — ещё до того, как соединение будет установлено. Дёшево и легко обнаруживается сравнением ответов разных резолверов.
  4. Замедление. Поток пропускают, но ограничивают до бесполезности. Приписать это фильтрации сложнее, потому что без аккуратных измерений оно неотличимо от обычной перегрузки.
  5. Активное зондирование. Вместо блокировки на месте система запоминает конечную точку, а позже сама подключается к ней, изображая клиента, чтобы проверить, что там работает. Если сервер отвечает так, как отвечал бы только прокси, адрес попадает в список блокировки.

Почему это определяет устройство туннельных протоколов

Если принять, что фильтр читает рукопожатия и метаданные, а не содержимое, цель при проектировании туннеля меняется полностью. Быть зашифрованным уже недостаточно. Соединение должно не выдавать ни одного признака, отличающего его от трафика, который фильтр решил пропускать, — а в сегодняшнем интернете это означает обычный TLS к обычному веб-серверу.

Поэтому протоколы, разобранные в других материалах этой библиотеки, сходятся к одним и тем же идеям: убрать с провода байтовые сигнатуры, специфичные для протокола; сделать отпечаток рукопожатия TLS совпадающим с настоящим браузером; не отправлять имя хоста, которое само по себе является признаком; и отвечать неавторизованному зонду ровно так, как ответил бы обычный веб-сервер. Каждая из этих мер существует, чтобы убрать один из признаков выше.

Поэтому же ни одно честное описание туннельного протокола не обещает победить DPI окончательно. Оператор фильтра всегда может расширить политику — например, блокировать категории трафика по умолчанию, а не в порядке исключения, — и никакая архитектура протокола не выживает в сети, которая попросту отвергает всё, что не смогла опознать.

Частые вопросы

Может ли DPI прочитать мой зашифрованный трафик?

Полезную нагрузку — нет, пока шифрование исправно и сеть не подсовывает собственный сертификат, которому ваше устройство заставили доверять. Прочитать она может всё, что находится вне зашифрованной нагрузки: оба IP-адреса, порт, объём и тайминг трафика, отпечаток рукопожатия и в большинстве соединений — имя хоста, который вы запросили.

Законна ли глубокая инспекция пакетов?

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

Останавливает ли VPN глубокую инспекцию пакетов?

VPN меняет то, что инспекция может увидеть, а не предотвращает саму инспекцию. Содержимое вашего трафика становится непрозрачным для локальной сети, но само соединение с VPN остаётся видимым и может быть классифицировано. Будет ли оно классифицировано верно, зависит от того, насколько туннель похож на обычный трафик.

Как понять, что меня блокирует именно DPI?

Подсказка — в характере сбоя. Соединение, которое устанавливается и затем резко обрывается, указывает на вброшенные сбросы; зависающее без всякого ответа — на тихое отбрасывание; имя, которое по-разному разрешается у разных резолверов, — на манипуляцию DNS. Как пройти это по порядку, описано в руководстве по диагностике.

Как это применяет HushTunnel

HushTunnel использует VLESS вместе с REALITY и XTLS — те самые решения, которые описаны в этих руководствах, — и не хранит записей о посещаемых вами сайтах.

Все руководства