Тестовый стенд
Виртуальная машина с BlissOS Go 16 (Android 13 Go). Отключены все приложения для максимально чистого дампа и упрощения анализа трафика. Используется официальная версия WhatsApp. В качестве анализатора трафика используется Wireshark. Авторизация
Виртуалка определяется не как смартфон (возможно надо править build.prop), поэтому провести авторизацию по номеру телефона не удалось. Приложение затребовало QR-код как дополнительное устройство. Во время авторизации приложение коннектится к доменам v.whatsapp.net (157.240.205.60) и g.whatsapp.net (157.240.205.61). Метаданные находятся по адресу media-hel3-1.cdn.whatsapp.net (157.240.205.60) Отправка сообщения
Сообщения отправляются по протоколу XMPP на порту 5222. При этом используется кастомная реалиция протокола, в которой сохранены только заголовки. Все сообщения отправляются в зашифрованном виде, прочтение сторонним наблюдателем невозможно. Токены авторизации приложение получает с сервера g.whatsapp.net. Звонок
Аудио и видео звонки осуществляются с использованием средств p2p. WhatsApp считывает локальные IP-адреса устройств и пробует установить прямое соединение. Если это удаётся, то звонки проходят по кастомному протоколу на основе UDP. Если установить связь напрямую невозможно, для установки соединения используется STUN. Сервера самого WhatsApp используются минимально.
Что в итоге. Служебная часть работает по протоколу TLSv1.3, QUIC не используется. Сообщеня отправляются через кастомную реализацию XMPP. Видеозвонки работают по неизвестному протоколу на основе UDP. WhatsApp.pcapng (5,7 МБ) WhatsApp.pcap (5,6 МБ) domains.txt (188 байтов) report.txt (484 байта)
Он его не знает, но возможна работа как с any protocol.
В XMPP там не одно сообщение открытым текстом, прежде чем идет переход к шифрованной фазе TLS.
Как на это DPI будет реагировать непонятно. Что именно сечь.
Если пойдет TLS Client Hello после STARTTLS отдельным tcp пакетом, то протокол будет опознан как TLS. Если сам XMPP не будут рубить, а будут смотреть в SNI, то возможна работа как с обычным TLS.
В приложенном дампе по порту 5222 нет стандартного протокола XMPP.
Там сразу идет что-то шифрованное без перехода на TLS.
Сами понимаете, подглядеть токены под https и расшифровать 5222 zapret не может, как и DPI
Вероятно будут банить либо фазу стандартного TLS на 443, либо 5222 по IP (тут может быть им сложно, если будет скакать по CDN)
Я когда-то год назад попробовал в виртуальной тестовой сети забанить Telegram и WhatsApp по ASN и подсетям, тг оказалось забанить очень просто, он сразу же перестал работать, а WhatsApp через некоторое время находил обходной путь через различные CDN (Akami, Amazon) и начинал работать снова. Приложения тестировал на Android.
“Если установить связь напрямую невозможно, для установки соединения используется STUN” И “Видеозвонки работают по неизвестному протоколу на основе UDP” - у нас на оккупирванных как раз заблочены звонки в WhatsApp и не грузятся картинки, но обмен текстовыми сообщениями происходит корректно. Такие жалобы независимо от провайдера и города. Спасибо за исследование.
“попробовал в виртуальной тестовой сети забанить Telegram” - я не пробовал по ASN, на маршрутизаторе не возможно, а только одну подсеть /24 к IP с которой обращается ТГ и он перестал работать (всего 256 IP-адресов). Я наблюдал за поведением Клиента, она постоянно продолжала обращаться к одним и тем же IP-адресам, просто меняя порты port+1. Перед исследованием ожидал, что ТГ больше посопротивляется, а не вот так вот. Впрочем, мой аргумент о том, что его так легко заблочить все равно не приняли, ведь “он неблокируемый”, “так все говорят”.