Трафик Telegram теперь может маскироваться под протокол HTTPS
13/08/19
Благодаря недавним нововведениям трафик Telegram теперь может маскироваться под протокол HTTPS (TLS + HTTP/2.0) – с этой целью в код клиента был добавлен префикс секрета «ee». Также в добавок к base16 (hex) появилась возможность шифровать секрет в адресе прокси-сервера с помощью base64.
В настоящее время в Telegram используется собственный протокол MTProto, появившийся около года назад – тогда же для него вышел официальный прокси. В MTProto отсутствуют служебные заголовки, позволяющие идентифицировать его. Однако выявить использование протокола, а заодно и самого мессенджера, все-таки можно по длине пакетов. Дело в том, что при установке соединения между клиентом и прокси-сервером происходит обмен пакетами определенной длины, а при работе – пакетами одной и той же длины. Это дало провайдерам возможность выявлять трафик Telegram по длине пакетов, передаваемых по MTProto.
Для решения вышеуказанной проблемы в целях маскировки протокола разработчики мессенджера добавили случайный байт в каждый пакет. Тем не менее, данный шаг влиял на совместимость, из-за чего разработчики добавили в секрет префикс «dd».
Поскольку использование MTProto продолжал выдавать трафик Telegram (благодаря чему его успешно блокируют в Иране и Китае с помощью атак повторного воспроизведения), разработчики решили реализовать в нем возможность маскировки под другие протоколы. В частности, был добавлен дополнительный слой инкапсуляции поверх TCP, и теперь данные словно «заворачиваются» в записи TLS. Также была реализована эмуляция TLS-рукопожатия.