Определение интернет протокола прикладного уровня (принадлежность к сервисам и приложениям) без использования DPI.
Учитываются только статистические метрики потока!
Альтернативный способ решения одной из главных задач DPI (deep packet inspection – глубокий анализ пакетов): определения протокола прикладного уровня на основе всего нескольких пакетов, при этом не сверяясь со списком ip адресов и широко известных портов (well-known ports), и даже не заглядывая в полезную нагрузку.
Практически весь интернет трафик в мире уже шифруется. Тем не менее оператору связи важно знать, что именно у него происходит в канале. Например, выявить какие приложения использует абонент.
Классические методы DPI (Deep Packet Inspection) уже не справляются с этой задачей, так как им необходимо видеть полезную нагрузку пакета, что в случае использования шифрования является невозможным.
Как очередной раз показали последние события с Telegram использование сигнатур ip/порт для определения протокола также не работают. Клиент с легкостью меняет ip адреса и порты и провайдер/регулятор за ним попросту не успевает.
Мы создали систему, которая определяет интернет протокол прикладного уровня (принадлежность к сервисам и приложениям) используя только статистические метрики потока на основе машинного обучения. Для определения используются только размеры первых N пакетов (как показал эксперимент, достаточно трех!)
Для идентификации протокола не используется список известных ip-адресов и портов. Также не рассматривается полезная нагрузка пакетов.
В тестовой выборке трафик Telegram идентифицировался не смотря на разнообразие ip и портов.
Система показывает высокие результаты при анализе всего лишь первых трех пакетов потока (не считая TCP handshake).
Точность предсказаний доходит до >99%.
В прототипе модели обучаются по принципу "все-против-всех". Т.е. одна математическая модель делает мультиклассовую классификацию.
Использовались модели Support Vector Machine, Random Forest, eXtreme Gradient Boosting.
В продакшене предполагается обучить модели по принципу "один-против-всех". Т.е. на каждый тип протокола будет своя обученная модель, которая сможет определять свой тип протокола, и только его. При необходимости можно использовать другие модели, например, нейронные сети.
Прототип написан на языке R.
Для использования модели на продакшене можно ее обучить, а потом портировать в другие языки, например С++, с помощью PMML (Predictive Model Markup Language).
Естественно, для качественной работы модели ее нужно обучить на большом количестве данных - примеры разных операционных систем, программ-клиентов и т.д.