Skip to content

Flowseal/telegaru-mitm-PoC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Caution

ДИСКЛЕЙМЕР

Данный проект и сопровождающие его исходные коды предоставлены исключительно в образовательных и исследовательских целях для демонстрации работы атаки “Man‑in‑the‑Middle” (MITM) проектом Telega.

Telega - Proof of Concept MITM attack

Предыстория

Telega 18 марта включила в работу своего приложения собственные DC-прокси, отказавшись от использования стандартных прокси MTProto. Самое главное в этом событии то, что разработчики заменили в клиенте пару RSA ключей. Данные, которые передаются от клиента на сервера Telega теперь шифруются другим публичным ключом, отличным от стандартного ключа Telegram. На серверах Telega данные расшифровываются приватным ключом из этой новой пары RSA (который знают только они), а затем уже обратно шифруются публичным ключом настоящего Telegram, чтобы конечный сервер смог их распознать и расшифровать.

24 марта Telega предоставила ответы на вопросы безопасности:

Telega: переписка пользователей передаётся по протоколу MTProto и остаётся зашифрованной на всём протяжении соединения. Наличие дополнительных ключей или различий в параметрах соединения не даёт доступа к содержимому сообщений.

Их ответ - наглая ложь. Именно это и будет здесь доказано.

Более подробно можете прочитать тут - https://dontusetelega.lol/analysis
А также посмотреть посты с ресерчем тут - https://t.me/bruhcollective

0. Подготовка

Необходимо собрать свое приложение Telegram, изменив части исходного кода, как это сделала Telega

  1. Изменение айпи DC серверов на прокси. 127.0.0.1 - локальный прокси, который мы запустим. Telega их подгружает через эндпоинт, но тут позволим себе захардкодить.
const BuiltInDc kBuiltInDcs[] = {
-	{ 1, "149.154.175.50" , 443 },
-	{ 2, "149.154.167.51" , 443 },
-	{ 2, "95.161.76.100"  , 443 },
-	{ 3, "149.154.175.100", 443 },
-	{ 4, "149.154.167.91" , 443 },
-	{ 5, "149.154.171.5"  , 443 },
+   { 1, "127.0.0.1" , 443 },
+	{ 2, "127.0.0.1" , 443 },
+	{ 3, "127.0.0.1", 443 },
+	{ 4, "127.0.0.1" , 443 },
+	{ 5, "127.0.0.1"  , 443 },
};
  1. Изменяем публичный RSA ключ. Генерируем пару с помощью python mitm_dc.py generate-keys (скрипт сразу выведет, чем нужно подменить)
const char *kPublicRSAKeys[] = { "\
-----BEGIN RSA PUBLIC KEY-----\n\
-MIIBCgKCAQEA6LszBcC1LGzyr992NzE0ieY+BSaOW622Aa9Bd4ZHLl+TuFQ4lo4g\n\
-5nKaMBwK/BIb9xUfg0Q29/2mgIR6Zr9krM7HjuIcCzFvDtr+L0GQjae9H0pRB2OO\n\
-62cECs5HKhT5DZ98K33vmWiLowc621dQuwKWSQKjWf50XYFw42h21P2KXUGyp2y/\n\
-+aEyZ+uVgLLQbRA1dEjSDZ2iGRy12Mk5gpYc397aYp438fsJoHIgJ2lgMv5h7WY9\n\
-t6N/byY9Nw9p21Og3AoXSL2q/2IJ1WRUhebgAdGVMlV1fkuOQoEzR7EdpqtQD9Cs\n\
-5+bfo3Nhmcyvk5ftB0WkJ9z6bNZ7yxrP8wIDAQAB\n\
+GENERATED_PUBLIC_KEY_HERE
-----END RSA PUBLIC KEY-----" };
  1. В конструкторе делаем настройку DC неизменяемой, чтобы help.getConfig не изменил айпи нашего прокси.
DcOptions::DcOptions(const DcOptions &other)
: _environment(other._environment)
, _data(other._data)
, _cdnDcIds(other._cdnDcIds)
, _publicKeys(other._publicKeys)
, _cdnPublicKeys(other._cdnPublicKeys)
-, _immutable(other._immutable) {
+, _immutable(true) {
}
  1. Собираем бинарник. Пример сборки - https://github.com/AyuGram/AyuGramDesktop/blob/dev/docs/building-win-x64.md

  2. Запускаем прокси python mitm_dc.py run

1. Дальше безопасности нет

Открываем собранный бинарник (подобный Telega) и авторизовываемся. Вы уже подверглись атаке MITM. Telega уже имеет полный доступ к сессии через перехваченный auth_key. Она может расшифровывать все данные, которые проходят через Вас.

В примере DC-прокси mitm_dc.py, который по сути минимально эмулирует работу DC-прокси серверов Telega, встроена расшифровка контактов, отправляемых и входящих сообщений в личке/чате/канале, сохранение отправляемых файлов/media. И это только минимальный набор того, что теперь можно делать.

Сразу при открытии парсятся контакты в mitm_media/contacts_**.json (все данные изменены):

"users": [
    "id=194162455, name='Юрист', @urist, phone=79279517445"
  ],

Отправляем сообщение себе в избранное:
alt text
Видим в логах:

DECODED messages.sendMessage →self: 'saving my account password to not forget:******  

Отправляем сообщение другу:
alt text
Видим в логах и айди друга, и само сообщение:

DECODED messages.sendMessage →user(526781221): 'не сегодня'

Нам приходит сообщение:
alt text
Видим все в логах:

DECODED updateShortChatMessage MSG ←chat(5067891234) from user(6123456789): 'Секрет!'

Отправляем файл/медиа:
alt text
Прокси сохраняет копию локально в mitm_media
alt text
alt text

Saved upload: ~\mitm_media\20260325_174522_123456789.jpg (7725B)  
DECODED messages.sendMedia →self [photo → 20260325_174522_123456789.jpg]

2. А как же MTProto?

Именно MTProto прикрываются Telega в своем ответе.

Безопасность MTProto строится на одном допущении: клиент доверяет только настоящему серверу Telegram. Это доверие основано на RSA-ключе, вшитом в приложение.

Если ключ подменён — всё шифрование становится бесполезным:

Этап Что происходит нормально Что происходит с Telega
Обмен ключами (DH) Клиент проверяет сервер по RSA Клиент проверяет прокси по подмененному RSA
Шифрование Ключ знают только клиент и сервер Telega имеет оба ключа
Передача Сообщение зашифровано end-to-server Telega расшифровывает клиентский трафик своим приватным ключом, читает/сохраняет его, а затем шифрует настоящим ключом Telegram и отправляет дальше

3. И что? Я же не делаю ничего противоправного!

Часто ли вы сохраняете или отправляете конфиденциальные данные в Telegram? Пароли, номера телефонов, фото паспортных данных, чеки, личные фото, секретные фразы? Вы рискуете стать частью очередного слива данных, с которыми российские проекты встречались не раз, вот лишь небольшой список:

  • 2012 год: массовая утечка паролей ВКонтакте (которую признали неактуальной в 2016 году, принудительно сменив всем пароли). Источник

  • 2021 год: слив 150.000 пользователей Совкомбанка. Источник

  • 2022 год: массовый слив базы данных заказов Яндекс, СДЭК, ГИБДД, WildBerries и других сервисов. Источник

  • 2023 год: ВКонтакте признана виновной за слив 3.5 млн записей о пользователях mail.ru. Источник

  • 2023 год: масштабная утечка исходных кодов сервисов Яндекса, объёмом около 45 ГБ. Источник

Подобные утечки возможны не только из-за внутренних "крыс", но и из-за использования сторонних сервисов для мониторинга и анализа трафика.

При анализе Telega был найден внутренний проект Cerberus, который может хранить и анализировать сообщения в реальном времени. Кто будет обслуживать и следить за этим проектом - неизвестно. alt text

4. Заключение

Подмена RSA ключей - прямой факт желания контролировать ваше нахождение в мессенджере. Их DC-прокси не принимает шифрование оригинальным публичным ключом Telegram.

Примеры из первой части - лишь верхушка айсберга. Telega не выкладывает полный исходный код, а тот что есть - неактуальный. В любой момент они могут добавить что-то ещё. Все их ответы, что они не имеют доступа к вашим сообщениям - ложь.
Пользуйтесь оригинальным клиентом с использованием прокси, не нужно подвергать себя лишним рискам.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages