Force tcp telegram что это
Маскировка Telegram
В мессенджере Telegram появилась возможность маскировки трафика под протокол HTTPS. Информация об этом появилась на ресурсе GitHub. Для маскировки под HTTPS разработчики добавили в код клиента префикс секрета "ee". Кроме того, помимо метода кодирования base16 была реализована возможность шифровать секрет в адресе прокси-сервера с помощью base64.
Как было до этого
В мессенджере уже есть прокси, который работает по собственному протоколу Telegram под названием MTProto, его начали применять в 2018 г. Изначально он позволял обнаружить прокси-серверы, результатом чего стали блокировки мессенджера со стороны крупных провайдеров.
Идентификации MTProto мешает отсутствие служебных заголовков, но его выдает длина пакетов. Когда клиент подключается к прокси-серверу, они обмениваются пакетами определенной длины. А в ходе работы мессенджера происходит передача пакетов одинаковой длины. Все это и дает возможность провайдерам засечь трафик Telegram.
Впоследствии протокол был модифицирован разработчиками таким образом, что блокировки стало можно избежать. Его замаскировали путем добавления случайных байтов в каждый пакет. В секрет пришлось добавить префикс dd, чтобы избежать проблем с совместимостью. Но данная модификация станет неэффективной после вступления в силу закона об автономном рунете — уже сейчас MTProto позволяет заблокировать Telegram в Иране и Китая путем атак повторного воспроизведения.
В ответ разработчики добавили частичную защиту от атак повторного воспроизведения в альтернативных вариантах прокси-серверов на Python, Erlang и Go. С этой целью был введен механизм запоминания сервером данных, передающихся в самом начале подключения. Это помогает избежать повторного соединения с такими же данными. Метод проблематично применять для крупных серверов, так как он требует большого расхода оперативной памяти.
Запрет Telegram в России
Напомним, с апреля 2018 г. Telegram находится под блокировкой Роскомнадзора. Запрет мессенджера в России связан с неисполнением требований, которые российское законодательство накладывает на организаторов распространения информации (ОРИ), в частности, с отказом предоставить правоохранителям ключи шифрования переписки пользователей. Согласиться внести Telegram в реестр ОРИ создателя мессенджера Павла Дурова уговорил глава Роскомнадзора Александр Жаров.
В итоге блокировку Telegram удалось оттянуть на год, после чего она все-таки началась. Но Дуров не собирался сдаваться: Telegram стал «перескакивать» с одного IP-адреса на другой, используя обширные возможности зарубежных облачных хостингов. Со своей стороны, корпорации Apple и Google отказались удалять приложение Telegram из своих магазинов мобильных приложений, благодаря чему приложение продолжило иметь возможность обновляться и получать данные о новых IP-адресах.
Роскомнадзор пошел на радикальную меру и стал блокировать подсети (группы IP-адресов), принадлежащие крупным хостинг-провайдерам: Amazon Web Services, Google, Microsoft Azure, Digital Ocean и др. В результате в апреле 2018 г. число заблокированных в России IP-адресов достигало 20 млн. Также Роскомнадзор стал пытаться блокировать VPN-сервисы, использующиеся для обхода блокировки Telegram.
Более года Роскомнадзор пытается заблокировать работу кроссплатформенного мессенджера Telegram на территории России. Пока это не удалось, однако российскими службами отслеживаются и блокируются адреса серверов, используемых Телеграммом.
Чтобы в самый неподходящий момент не остаться без связи, чтобы иметь возможность играть в игры в Telegram, просматривать каналы и вести свой канал, можно обойти блокировку, используя Telegram порты – специальные proxy-адреса, через которые можно беспроблемно подключаться к ресурсам и возможностям мессенджера.
Telegram порты: персональный список
Добавить в персональный список прокси Telegram порты можно различными способами, среди них проверенные:
• Использовать каталог телеграмма каналов по соответствующему поисковому запросу. Владельцы многих каналов предоставляют рабочие свежие прокси-адреса, чтобы их подписчики всегда могли следить за обновлениями (неплохим вариантом станут каналы, предлагающие игры в Telegram – они очень популярны, а привлечь на канал еще большую аудиторию и поднять его в ТОП поможет сервис раскрутки Втопе). Адрес нужно подключить добавить в коллекцию.
• Адреса MTProxy поможет также добыть телеграмм-бот @BestMTProxyBot. Он в предоставит список из нескольких проверенных адресов.
• С помощью бота @Proxy_Socks5_bot.
Telegram порты подключены – как найти игры в Telegram?
Как найти и выбрать игры в Telegram? Довольно просто. Помогут боты, примеры которых можно найти в интернете или же воспользоваться внутренними поисковыми ресурсами (каталогом ботов) в самом мессенджере. При настроенных прокси, даже, если какой-то адрес будет заблокирован Роскомнадзором, пользователь будет автоматически переподключен к наиболее быстрому серверу. Это позволит с комфортом играть в игры в Telegram, общаться, постить на канал, настраивать автопостинг из других соцсетей и многое другое.
В этой статье мы рассмотрим Telegram в целом, поговорим об используемом протоколе и проведем сравнение с другими аналогичными продуктами.
Авторы: Hayk Saribekyan ([email protected]), Akaki Margvelashvili ([email protected])
Аннотация
Введение
В этом разделе мы поговорим об истории Telegram и пользовательском интерфейсе. В разделе 2 будет описана архитектура Telegram. В разделе 3 описываются предыдущие проблемы, найденные в Telegram. В разделах 4 и 5 рассматриваются раскрытые уязвимости, связанные с безопасностью в Telegram. В разделе 6 мы рассмотрим текущие проблемы в Telegram и сделаем выводы.
История появления Telegram
Среди других технологических стартапов Telegram занимает особое место, вследствие чего получил повышенное внимание и доверие со стороны пользователей, и мы считаем, что полезно будет затронуть историю появления этого мессенджера.
Благодаря популярности Павла Дурова в России, Telegram быстро завоевал популярность среди русскоязычной аудитории. Кроме того, по факту Telegram предоставляет наиболее удобное средство по сравнению с аналогичными продуктами за счет своей скорости и функциональности.
Telegram – уникальное явление среди технологических стартапов, в том числе благодаря тому, что Павел Дуров является единственным спонсором этого проекта. Кроме того, в Telegram отсутствует реклама, а сам клиент – не только бесплатный, но и с открытым исходным кодом.
Функциональность Telegram
Клиенты Telegram
У Telegram есть клиенты под все популярные платформы, включая веб-приложения. На Рисунке 1 показана Desktop- и Android-версия. Официальные клиенты идут с открытым исходным кодом, хотя есть и бинарные блобы (то есть исполняемые бинарные файлы без доступных исходных текстов).
Рисунок 1: Официальные клиенты Telegram. Слева: мобильная версия, справа: desktop-клиент. Все официальные клиенты имеют открытый исходный код. Пользовательский интерфейс Telegram довольно быстрый и удобный
У Telegram также есть возможность работать с командной строкой [6], обладающей практически полным функционалом платформы, хотя и не очень удобной для использования. Например, для добавления контакта нужно ввести следующую команду:
tg> add contact <phone number> <name> <lastname>
Во время исследования безопасности Telegram мы часто пользовались командной строкой.
2. Архитектура Telegram
3. Известные и исправленные проблемы
Как все компании с технологическим уклоном, у Telegram были, есть и будут уязвимости, связанные с безопасностью, и нестандартные проблемы, которые имеют косвенное отношение к безопасности. Мы расскажем о некоторых из этих проблем, а в последствии рассмотри более подробно один из таких случаев.
3.1 Проблемы нетехнического характера
На концептуальном уровне у Telegram есть несколько нестандартных решений, которые, как мы полагаем, не должны быть частью протокола безопасности. А конкретно:
3.2 Проблемы, связанные с технической безопасностью
Как показывают предыдущие примеры, во многих случаях пользователи Telegram должны полностью доверять безопасности сервера, что немного иронично, поскольку изначальной целью основателей Telegram было создание продукта, защищенного от слежки. Даже несмотря на то, что многие уязвимости, связанные с безопасностью, были устранены, некоторых найденных проблем не должно было быть изначально.
4. Эксплоит для обнаружения доступности пользователей
Как было упомянуто в предыдущих разделах, Telegram передает информацию о доступности каждому, у кого есть телефонный номер нужного пользователя. Предположим, Ева добавила Алису в список контактов. В этом случае протокол Telegram не оповещает Алису об этом событии. В свою очередь Ева начинает регулярно получать информацию о том, когда Алиса использует Telegram, а Алиса все также не получает никаких оповещений.
Рисунок 2: В командной строке выводится имя пользователя, если тот использует Telegram. В противном случае ничего не выводится
Проблема, связанная с утечкой, легко обнаруживается в командной строке Telegram, как показано на Рисунке 2.
Более того, на Рисунке 3 показано, что Ева может видеть, что Акакий и Хайк выходят в онлайн и уходят в оффлайн. Затем Ева может сопоставить временные интервалы и сделать вывод, что Акакий и Хайк общаются между собой. В следующих разделах будет рассказано, как можно использовать эксплоит для обнаружения того, что два пользователя разговаривают друг с другом.
4.1 Постановка эксперимента
Для отслеживания использования Telegram и коммуникаций мы выбрали 15 активных пользователей среди международных студентов Массачусетского технологического института. Таким образом, мы знали, что студенты общались между собой на ежедневной/еженедельной основе.
Для подключения к пользователям мы использовали командную строку Telegram. Для отслеживания и сбора метаданных был выделен специальный сервер. В итоге было собрано несколько мегабайт необработанных метаданных для последующего анализа.
4.2 Алгоритм корреляции
Мы создали алгоритм корреляции, которые анализирует информацию об использовании Telegram двумя пользователя и выводит последовательность совпадений, где каждое совпадение представляет собой временной интервал с вероятностью того, что пользователи общаются между собой (вероятность всегда не менее 0.5).
Рисунок 3: Ева отслеживает активность Хайк и Акакия и может сказать, когда каждая персона появлялась в онлайне. Обратите внимание на проблему: разница между появлением в онлайне и уходом в оффлайн составляет примерно 5 минут
На базе полученных метаданных на каждого пользователя была создана последовательность временных интервалов активности отсортированных по времени. Алгоритм находит совпадения по двум пользователям, общающихся между собой, на базе последовательностей временных интервалов.
Рисунок 4: Диаграмма, иллюстрирующая основные концепции алгоритма корреляции
Мы ввели коэффициент вероятности (likelihood coefficient), который определяет, насколько вероятно связанный компонент представляет собой коммуникацию между пользователями. Обратите внимание, ребро внутри связанного компонента, принадлежащее активному временному интервалу, которое соединено со многими другими вершинами, рассматривается как менее значимое по сравнению с ребром, концы которого не соединены с другими интервалами. По этой причине, вместо подсчета количества ребер в связанном компоненте, мы определили коэффициент вероятности как половину всех соединенных вершин внутри компонента. Таким образом, очень длинный активный временной интервал, который пересекает множество других интервалов не особо влияет на увеличение коэффициента вероятности.
Как только коэффициент вероятности рассчитан, вычисляем вероятность общения двух пользователей в течение промежутка времени внутри связанного компонента по следующей формуле:
Рисунок 5: Формула расчета вероятности общения двух пользователей
Идея заключается в том, что если коэффициент вероятности равен 0, то и вероятность общения тоже равна нулю. С другой стороны, каждая единица коэффициента вероятности увеличивает вероятность общения на половину. Альфа-множитель определяет степень влияния коэффициента вероятности на итоговую вероятность.
5. Результаты использования эксплоита
После реализации алгоритма, описанного выше, мы проанализировали метаданные, полученные сервером. Поскольку мы использовали Telegram во время работы сервера, то подстроили параметры на базе частоты нашей коммуникации и внесли некоторые коррективы.
Наиболее приемлемые значения: gap_time = 30 секунд, альфа-множитель = 1. При таких значения нам удалось отследить все коммуникации и не обрезать лишнего. Результаты показали, что количество ошибочных совпадений колеблется в районе 15%. Другими словами, иногда, когда два пользователя одновременно используют приложение, алгоритм работает некорректно.
Рисунок 6: Совпадения, найденные алгоритмом корреляции
6. Заключение
В этом проекте мы провели исследование мессенджера Telegram. Когда Telegram оформился как самостоятельная компания, то приобрел популярность, благодаря заявлениям создателей, доверием и удачным временем выхода (в то же время произошли утечки с подачи Сноудена). Если верить заявлениям создателей Telegram, можно подумать, что этот мессенджер обладает высоким уровнем безопасности. Однако наше исследование показывает, что у Telegram были серьезные и в тоже время простые проблемы в протоколе (например, модифицированный и уязвимый алгоритм обмена ключами по методу Диффи-Хеллмана), которые может обнаружить любой знающий эксперт по безопасности.
При помощи командной строки мы смогли подключиться к некоторым нашим друзьям, и обнаружить интервалы общения. Мы полагаем, что это серьезная проблема, связанная с утечкой персональной информации, которая может, например, помочь обнаружить, у кого из группы более тесные взаимоотношения.
Из всего вышесказанного можно сделать вывод, что Telegram, как и все другие продукты, имеет уязвимости, о которых пользователи должны знать. Однако, к сожалению, заявления компаний заставляют пользователей верить в то, что переписка защищена от прочтения третьей стороной.
Тип Язык
Telegram API основан на RPC, поэтому взаимодействие с API включает отправку полезной нагрузки, представляющей вызов функции, и получение результата. Например, чтение содержимого разговора включает вызов messages.getMessage функция с необходимыми параметрами и получения messages.Messages в ответ.
Пример TL-схемы (сначала объявляются типы, за которыми следуют функции с разделителем):
Вызов функции TL и результат с использованием функций и типов из вышеуказанной схемы TL, а также эквивалентное двоичное представление (изофициальная документация):
Слои TL-схемы
Или, похоже, получается, что хотя последний уровень TL-схемы на веб-сайте Telegram - это уровень 23, на момент написания последнего уровня фактически уже был уровень 71. Вы можете найти последнюю версию TL-схемыВотвместо.
Создание приложения Telegram
Кроме того, в тех же инструкциях упоминается, что вы можете использовать образцы учетных данных, которые можно найти в исходных кодах Telegram для тестирования. Для удобства я буду использовать учетные данные, которые я нашел вИсходный код Telegram Desktop на GitHubв примере кода здесь.
Установка Telethon
Мы будем использовать Telethon для связи с Telegram API. Telethon - это клиентская библиотека Python 3 (что означает, что вам придется использовать Python 3) для API Telegram, который будет обрабатывать все специфичные для протокола задачи для нас, поэтому нам нужно только знать, какие типы использовать и какие функции выполнять вызов.
Вы можете установить Telethon с pip :
Использовать pip соответствует вашему интерпретатору Python 3; это может быть pip3 вместо. (Случайно: недавно была выпущена Ubuntu 17.10, и она использует Python 3 в качестве установки Python по умолчанию.)
Создание клиента
Прежде чем вы сможете начать взаимодействовать с Telegram API, вам нужно создать клиентский объект с вашим api_id а также api_hash и подтвердите его с вашим номером телефона. Это похоже на вход в Telegram на новом устройстве; вы можете представить этого клиента как еще одно приложение Telegram
Ниже приведен код для создания и аутентификации объекта клиента, модифицированный из документации Telethon:
Как упоминалось ранее, api_id а также api_hash выше взяты из исходного кода Telegram Desktop. Введите свой номер телефона в phone переменная.
Telethon создаст .session сохраните сведения о сеансе в своем рабочем каталоге, точно так же, как вам не нужно повторно проходить аутентификацию в приложениях Telegram каждый раз, когда вы закрываете и снова открываете их. Имя файла начинается с username переменная. Это зависит от вас, если вы хотите изменить его, если вы хотите работать с несколькими сессиями.
Если предыдущей сессии не было, выполнение этого кода приведет к отправке вам кода авторизации через Telegram. Если вы включили двухэтапное подтверждение в своей учетной записи Telegram, вам также потребуется ввести пароль Telegram. После того, как вы аутентифицировались один раз и .session файл сохранен, вам не придется повторно проходить аутентификацию, пока не истечет время сеанса, даже если вы снова запустите скрипт.
Если клиент был создан и аутентифицирован успешно, объект, представляющий себя, должен быть напечатан на консоли. Это будет похоже на (эллипсы … означает, что какой-то контент был пропущен)
Теперь вы можете использовать этот клиентский объект, чтобы начать делать запросы к Telegram API.
Проверка TL-схемы
Как упоминалось ранее, использование Telegram API включает вызов доступных функций в TL-схеме. В этом случае мы заинтересованы в messages.GetDialogs функция. Мы также должны принять к сведению соответствующие типы в аргументах функции. Вот подмножество TL-схемы, которую мы будем использовать для выполнения этого запроса:
Это не легко читать, но учтите, что messages.getDialogs функция вернет messages.Dialogs , который является абстрактным типом для messages.dialogs или messages.dialogsSlice объект, который оба содержат векторы Dialog , Message , Chat а также User ,
Использование документации Telethon
Документация для GetDialogsRequest указывает тип возвращаемого значения для метода, а также чуть более подробную информацию о параметрах. Кнопка «Копировать импорт в буфер обмена» особенно полезна, когда мы хотим использовать этот объект, как сейчас.
messages.getDialogs функция, а также конструктор для GetDialogsRequest занимает offset_peer аргумент типа InputPeer , В документации для GetDialogsRequest, нажмите через InputPeer ссылка, чтобы увидеть страницу с описанием конструкторов и методов, принимающих и возвращающих этот тип.
Так как мы хотим создать InputPeer объект для использования в качестве аргумента для нашего GetDialogsRequest нас интересуют конструкторы для InputPeer , В этом случае мы будем использовать InputPeerEmpty конструктор. Нажмите еще раз на страницу для InputPeerEmpty и скопируйте его путь импорта, чтобы использовать его. InputPeerEmpty Конструктор не принимает аргументов.
Сделать запрос
Вот наш законченный GetDialogsRequest и как получить его результат, передав его нашему авторизованному клиентскому объекту:
Получение DialogsSlice вместо того Dialogs означает, что не все мои диалоги были возвращены, но count Атрибут говорит мне, сколько диалогов у меня всего. Если у вас меньше определенного количества разговоров, вы можете получить Dialogs вместо объекта, и в этом случае все ваши диалоги были возвращены, а количество диалогов у вас есть только длина векторов.
терминология
Например, если моя история чата была этим скриншотом, я взял изПриложение Telegram в магазине Play:
dialogs будет содержать разговоры на скриншоте: Старые Пираты, Пресс-центр, Моника, Джайна…
chats будет содержать записи для Old Pirates, Press Room и Meme Factory.
(Я еще не работал с секретными чатами через Telegram API, поэтому я не уверен, как они обрабатываются.)
Управление данными ответа
Все соответствующие InputPeer конструкторы принимают то же самое id а также access_hash параметров, но в зависимости от того, является ли разговор индивидуальным чатом, группой или каналом, эти значения находятся в разных местах GetDialogsRequest ответ:
В псевдокоде имеем:
Преобразование в код Python (обратите внимание, что dialogs , chats а также users выше являются членами результата нашего GetDialogsRequest который также называется dialogs ):
Библиотека магии
Telethon имеет несколько вспомогательных функций для упрощения общих операций. На самом деле мы могли бы сделать вышеупомянутое с двумя из этих вспомогательных методов, client.get_dialogs() а также client.get_message_history() вместо:
Однако я чувствовал, что лучше сначала изучать методы API-интерфейса Telegram напрямую, тем более что не существует вспомогательного метода для всего. Тем не менее, есть некоторые вещи, которые намного проще с помощью вспомогательных методов, например, как мы аутентифицировали нашего клиента в начале, или такие действия, как загрузка файлов, которые в противном случае были бы утомительными.
Используя регулярные выражения для анализа истории чата в виде простого текста, я мог создать диаграмму, аналогичную графику хранилища перфокарт GitHub, показывающую, в какое время недели чат был наиболее активным:
Благодаря программному доступу к истории чатов, с чатами Telegram можно сделать гораздо больше. Методы, такие как messages.search может мне исключительно полезно. Возможно, динамически генерировать статистику по разговорам, которые достигают максимума или затухают, или которые постоянно активны, или находят ваши любимые смайлики или самые распространенные н-граммы? Предел неба (или ограничение скорости API, в зависимости от того, что ниже).
Обновления
Читайте также: