Фишинг «фичи» Телеграма
Телеграм старается быть безопасным, но как написано в их BugBounty программе, социальная инженерия - вне скоупа. В этом я с ними абсолютно согласен. Но они считают, что под это попадают и все небезопасно реализованные функции, которые могут использоваться только для социальной инженерии. В этом уже я с ними не согласен. В этой статье я расскажу вам про две "фичи", которые исправлять мессенджер не намерен, но которые могут быть легко использоваться для социальной инженерии, особенно в связке.
Ссылка, а куда?
Форматирование в Телеграм позволяет добавлять ссылки, но не контролирует должным образом переходы по ним, если переход осуществляется внутри мессенджера. Вот смотрите.
При переходе на внешний ресурс появляется уведомление с полной целевой ссылкой, что позволяет избежать использования форматирования для фишинга.
Но что будет, если мы захотим перейти по внутренней ссылке (https://t.me/)? Ничего. В случае перехода по внутренней ссылке никаких уведомлений о переходе по ссылке не происходит.
Вот пример. Визуально конструкция @OSINT_bot
может содержать ссылку на другой бот/чат, добавленную туда ссылкой через обычное форматирование, например http://t.me/OSINT_HACKED_bot
. И визуально обе эти ссылки будут выглядеть одинаково! (Рис.2). Подмену можно заметить только если задержать над ссылкой курсор или ее скопировать.
Пример. Текст @OSINT_bot
может содержать ссылку на другой бот/чат, добавленную туда ссылкой через обычное форматирование, например на http://t.me/OSINT_HACKED_bot
.
Обе ссылки ведут на совершенно разных ботов. Если их стилизовать друг под друга, то легкий фишинг обеспечен. Подмену же можно заметить только если задержать над ссылкой курсор или ее скопировать.
- Пишем сообщение с тегом контакта/чата/бота (
@OSINT_bot
) - Жмем форматирование => Добавить ссылку => Добавляем фишинговую ссылку (
@OSINT_hacked_bot
) - Удаляем подгружаемый предпросмотр.
- Отправляем ссылку жертве.
- ???
- PROFIT!
Возможностей для использования в фишинге масса, отправляя жертвам знакомые теги, мы можем перенаправлять их в иные диалоги,ботов или чаты. Но лучше всего эта "фича" раскрывает себя в связке со следующей.
Что ты еще передал?!
Многие ресурсы, например TGStat (https://tgstat.ru/), используют схему авторизации через Телеграм. Для авторизации используется передача уникального параметра собственному боту из ссылки на сайте. Работает это так:
- Пользователь заходит на сайт и жмет кнопку "логин".
- Сайт выдает пользователю получает ссылку на своего бота с уникальным ключом в параметре start, например
https://t.me/tg_analytics_bot?start=wjIKCRulVabiy5z-VnYRd10NGblZaVru
- Бот ожидает этот уникальный параметр, после чего сайт авторизует пользователя под тем аккаунтом Телеграм, от которого был получен ключ.
Однако, при переходе по ссылке параметр не отображается в клиенте Telegram. Отображается только кнопка запуска бота, после нажатия которой и в логе общения с ботом никакого параметра не видно. А он есть.
Это внутренняя "фича" Телеграма прятать передаваемые параметры при переходе в любого бота, которую разработчики сервиса адаптировали под себя. Но не особо безопасно.
Комбинация с предыдущей "фичей" маскировки внутренних ссылок, позволяет нам крайне эффективно угнать аккаунт сервиса.
- Заходим на сайт сервиса и получаем уникальный ключ авторизации нашего браузера. Но по ссылке не переходим.
- Отправляем под любым предлогом жерве ссылку на оригинальный бот TGstat (@tg_analytics_bot), но с добавлением через форматирование нашего параметра ключа (
https://t.me/tg_analytics_bot?start=wjIKCRulVabiy5z-VnYRd10NGblZaVru
). - Жертва кликает на имя бота и переходит по скрытой ссылке с параметром.
- Жертве показывается только стандартная кнопка /start.
- После нажатия кнопки, мы в браузере получаем сессию жертвы на сервисе.
- ???
- PROFIT!
Причем для жертвы ничего странного не происходит, ведь она переходит в настоящего бота сервиса, с историей взаимодействия с ним. Выводится стандартное сообщение о логине.
Оффтоп. Более того, посмотреть список активных сессий на сайте или в боте нельзя, также как и завершить их. То есть мы останемся в аккаунте незаметно и навсегда, но эти проблемы уже на совести создателей сервиса, а не Телеграма.
Надежная деанонимизация
Также благодаря комбинации этих двух "фич", мы можем создать бота-ловушку, замаскированного через сокрытие внутренней ссылки под популярные боты. Скрытый уникальный параметр позволит легко отследить переход в нашу ловушку из конкретного источника. При переходе в бота мы получим публичную информацию аккаунта и идентификатор пользователя.
Такую ссылку можно кидать в "предложку" телеграм-каналов для деанонимизации аккаунтов администраторов.
Выводы
Для предотвращения использования этих "фич" в фишинге, я предложил Телеграму следующее:
- Включить механизм уведомления о переходе по скрытой ссылке не только для внешних, но и для внутренних ссылок, если ссылка была добавлена посредством форматирования.
- Отображать параметры, передаваемые при обращении к боту по умолчанию, а не только кнопку запуска бота.
Но Телеграм, к сожалению, не намерен ничего с этим делать, о чем мне сообщила их служба безопасности в рамках поданного репорта на BugBounty. Это действительно за рамками программы, но хотелось бы просто исправления.
Возможно, само наличие слова "социальная инженерия" в репорте уже повод для отклонения=)