Иллюстрация была взята
здесь.
Как видно, клиент запрашивает незаблокированный домен у DNS сервера, адрес которого совпадает с адресом заблокированного ресурса. Затем TLS соединение легко устанавливается с сервером, так как для цензора виден только SNI, а HTTP Host домен зашифрован под TLS слоем.
Определять Domain Fronting без дешифрования TLS достаточно трудно. Дешифрование TLS может использоваться в продуктах информационной безопасности, но для телекомов это не осуществимо. По этой причине определение Domain Fronting для конкретных сервисов (то есть нужно заранее понимать, какие сервисы используют такую технику), лежит на стыке сбора “мусорных” доменов (которые являются прикрытием для основного домена) и выявления поведенческих паттернов, характерных для таких сессий.
Сбор доменов можно осуществить с помощью мониторинга CDN провайдеров, которые используются сервисом, отлавливанием TLS соединений, где в Client Hello был запрошен один домен, а сертификат от сервера возвращается с другим (характерным для исследуемого сервиса). Возможно прибегание к реверсу или полуавтоматическому сбору доменов, генерируемых таким приложением (например, написание сниффера для сбора доменов, к которым обращается приложение).
Domain Fronting стал неактуальным для разработчиков сервисов с большой аудиторией (вроде Telegram, WhatsApp, и прочих), так как крупные CDN провайдеры стали контролировать использование своих узлов, чтобы не допускать обхода блокировок через их серверы (Google, AWS, Cloudflare).
Tag Chain – подход в классификации, подразумевающий анализ уже классифицируемых для потока сервисов. Такой метод играет скорее оптимизационную роль, чем практическую, так как с его помощью «срезаются» недостижимые варианты, и их проверка не происходит. В качестве примера можно привести классификацию
YouTube.
YouTube принадлежит
Google и использует
Google CDN для доставки трафика. Таким образом, если по
IP Database был классифицирован
Google, а затем также по IP был классифицирован
Google CDN, то значит следующий по цепочке сервис будет либо принадлежать
Google, либо какой-то другой сервис, который использует
Google Cloud. Это значит, что можно уже не проверять сервисы Microsoft, VKontakte, Telegram и другие, которые не пользуются
Google CDN. Сокращается количество вариантов для проверки, что влияет на скорость классификации.
SPID (
Statistical Protocol Identification) – метод, основанный на анализе статистических характеристик потока, например, таких как средний размер пакета, битрейт, IAT (Inter Arrival Time) и т. д. Данный метод является не очень надежным для определения сервисов и преимущественно используется, чтобы классифицировать характер потока (
workflow), например, передачу файла, аудио/видео вызов и т. д.
ML/AI – метод, основанный на анализе различных характеристик потока (в том числе и статистических) и который классифицирует сервис с определенной вероятностью. Данный метод используется, когда однозначно вынести вердикт не представляется возможным. В отличии от
SPID, используемые для классификации значения/интервалы могут меняться в процессе обработки трафика (модель самообучается), в то время как в
SPID они всегда статические. Основная потребность в
ML/AI классификации — это адаптация к изменчивости трафика. Метод используется для классификации VPN сервисов, которые невозможно определить по IP адресам или верификации протокола, а также для определения характера потока (будет описано в следующем параграфе).
Выше описаны наиболее популярные техники для классификации трафика. Существуют и другие, которые могут базироваться на достаточно специфичных критериях, характерных для отдельных сервисов (или группы сервисов), но которые требуют более глубоко анализа, например, с помощью ИИ, анализа исходного кода или реверс-инжиниринга.