Импортозамещение, которое мы заслужили: Большой разбор клиента «Телега»

в 6:30, , рубрики: android, reverse engineering, telegram

Снова привет!

Недавно у меня в инфополе появился молодежный клиент для Telegram с молодежным названием «Телега». Разработчики обещают многое: и блокировки он обходит, и работает стабильнее, и вообще - зачем вам муж, если есть телега!

Вижу я о нем слишком много полярных мнений

Скриншот переписки

Скриншот переписки

Сначала я относился к этому скептически - мало ли альтернативных клиентов? Но потом сработал профессиональный триггер. Я же реверс-инженер (и вообще Java учу!), почему бы не попрактиковаться? Тем более, гордо заявлено: Open Source.

Скриншот заявления что клиент опен сурс

Скриншот заявления что клиент опен сурс

Акт 1. В поисках... исходного кода

Раз заявлен Open Source, значит, идем на сайт искать репозиторий.
Захожу... хм, пусто. Ни ссылок на GitHub, ни GitLab, ни даже архива с кодом.

curl ... | grep "исходники, вы тут?"

curl ... | grep "исходники, вы тут?"

Ладно, думаю, спрошу в чате канала. Пишу вежливое: "А где исходники? Можно ссылочку?".
Спустя мгновение сообщение исчезает. Удалили.

скриншот удаленного сообщения

скриншот удаленного сообщения

Окей, может, там злой бот-автомодератор триггерится на ссылки? Иду в официальную поддержку.

скриншот как меня игнорят

скриншот как меня игнорят

Молчат, Возможно. ночь по МСК, люди спят, а сообщение наврное бот удалил, по ошибке. Решил не ждать и скачать сам APK. Вдруг ссылка зашита внутри, в разделе "О приложении"?

Там... там приложение, на гугл диске хостится, профессионально

скриншот с ссылкой на гугл диск при наведении на кнопку загрузки
скриншот с ссылкой на гугл диск при наведении на кнопку загрузки

Запускаю, захожу в настройки. Вижу надпись: «Работает под открытой лицензией».

Импортозамещение, которое мы заслужили: Большой разбор клиента «Телега» - 7

Стоп «Открытая лицензия» это как? Тут у меня случился флешбэк - Помните мой пост про NiceOS? Там ребята взяли ядро Linux (GPL) и запретили его декомпилировать, вот бы тут был не NiceOS 2.0.


Акт 2. Лицензионные мемы

Полез читать EULA (Пользовательское соглашение), И там такой шедевр:

«Исключительное право на Мессенджер принадлежит Лицензиару... Лицензиару не принадлежат в том числе, но не ограничиваясь, функции сервиса обмена мгновенными сообщениями...»

«Исключительное право на Мессенджер принадлежит Лицензиару... Лицензиару не принадлежат в том числе, но не ограничиваясь, функции сервиса обмена мгновенными сообщениями...»

Перевод: они взяли официальный клиент Telegram (GPL v2), поменяли пару сотен строчек, и говорят что весь код теперь принадлежит им, по крайней мере звучит это так.

Мессенджер разработан на базе открытого исходного кода...

Мессенджер разработан на базе открытого исходного кода...

Чувак говорит что мессенджер разработан на базе открытого кода, и дает ссылку... на лицензию TDLib (Boost Software License 1.0)

Серьезно? Вы форкнули Telegram for Android (который под GPL v2), но ссылаетесь на лицензию библиотеки TDLib? Это... это просто некомпетентность.

Читаем дальше их соглашение:

4.4 Лицензиар вправе в одностороннем порядке... модифицировать... функциональные возможности без уведомления.

4.4 Лицензиар вправе в одностороннем порядке... модифицировать... функциональные возможности без уведомления.
4.10.5 [Запрещается] продавать, тиражировать, копировать Мессенджер...

4.10.5 [Запрещается] продавать, тиражировать, копировать Мессенджер...

Это прямое нарушение GPL v2.
Главная суть GPL: вы обязаны предоставлять исходный код и вы не можете запрещать пользователям копировать или распространять свободное ПО.

Ну и вишенка на торте:

4.5 Телега вправе в одностороннем порядке осуществлять автоматическую подписку Пользователя на официальный канал Телега в Мессенджере

4.5 Телега вправе в одностороннем порядке осуществлять автоматическую подписку Пользователя на официальный канал Телега в Мессенджере

Сегодня они подпишут вас на свой канал, завтра - на zarazaex.xyz, а послезавтра - на казино, И ответственность их (пункт 7.8) ограничена 500 рублями.

мем, 500 рублей брух

мем, 500 рублей брух

Акт 3. РЕВЕРСИХА

Ладно, Давайте посмотрим, что там внутри, Код-то может быть хорошим?

Звонки для бабушек

Смотрю трафик.

public... CALLS_BASE_URL.. calls.okcdn.ru...

public... CALLS_BASE_URL.. calls.okcdn.ru...

Звонки идут через Одноклассники? Серьезно? Через сервера социальной сети для тех, кому за 40? Интересное решение для молодежного клиента.

PFS (Perfect Forward Secrecy)

что такое PFS

что такое PFS

Если кто не знает, PFS - это технология, благодаря которой компрометация одного главного ключа не позволяет расшифровать весь записанный ранее трафик.
В Телеге PFS управляется с сервера. То есть он может и будет отключен по желанию владельца сервера, зачем? да кто знает.

Прокси и обход блокировок

Разработчики заявляют, что обходят блокировки. Как?
Обычный Telegram использует захардкоженные DC (дата-центры). Их блокируют по IP.
Телега делает хитрее:

код

код
  1. Делает HTTP-запрос на https://api.telega.info/v1/dc-proxy

  2. Получает JSON с адресами новых DC.

Вроде звучит логично?

Проблема №1: В коде нет проверки подписи ответа.
Проблема №2: Нет проверки сертификата (TrustManager заглушен).

код

код

Приложение слепо верит серверу api.telega.info, Любой MitM на пути - и злоумышленник подсовывает вам свои IP-адреса, перенаправляя весь трафик на свой поддельный сервер.

В нормальных условиях используется схема:
Пользователь -> MTProto Proxy -> Telegram DC
Прокси не знает ключей шифрования и не видит содержимое. Здесь же архитектура позволяет направить вас куда угодно.


Акт 4. Финальный босс (Вы не поверите)

Я копался в ресурсах APK и нашел файл:
resources/res/raw/rootca_ssl_rsa2022.cer

Открываю...

-----BEGIN CERTIFICATE----- MIIFwjCCA6qgAwIBAgICEA...

-----BEGIN CERTIFICATE----- MIIFwjCCA6qgAwIBAgICEA...

У меня глаз начал дергаться, Я знаю этот хеш, Я писал об этом статьи.
Это корневой сертификат Минцифры.

Импортозамещение, которое мы заслужили: Большой разбор клиента «Телега» - 19

Что это значит?
В приложение вшит сертификат Russian Trusted Root CA.
В сочетании с отсутствием проверки сертификатов (см. выше) и отсутствием Certificate Pinning (который они вырезали из оригинального клиента Telegram), это позволяет реализовать полноценную MitM-атаку

Ваш трафик может быть расшифрован на лету владельцем приватного ключа этого сертификата.
Подробнее о том, чем это грозит, читайте в моей статье: Сертификаты Минцифры 2 - вы уже в опасности.


Акт 5. Слив данных

Напоследок я посмотрел, что именно приложение отправляет на сервера telega.info:

  • phone (Номер телефона)

  • ip (IP-адрес)

  • deviceModel

  • systemVersion

  • authKeyId (ID ключа авторизации Telegram! кстати это что? )


Итоги

  1. Нарушение лицензии GPL v2 (закрытый исходный код, запрет на копирование).

  2. Звонки через Одноклассники.

  3. Принудительные подписки на каналы.

  4. Дырявая схема проксирования (нет проверки SSL, нет подписи).

  5. Сертификат Минцифры для потенциального перехвата трафика.

  6. Слив данных (включая ключи) на сторонние сервера.

  7. Отсутствие Certificate Pinning, который был в оригинале.

Пока, я спать

8 часов ночи время

8 часов ночи время

Автор: zarazaexe

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js