April 8

Фишинг «фичи» Телеграма 

HACKER+PALCE

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

Ссылка, а куда?

Форматирование в Телеграм позволяет добавлять ссылки, но не контролирует должным образом переходы по ним, если переход осуществляется внутри мессенджера. Вот смотрите.

А вы точно хотите туда перейти?

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

Но что будет, если мы захотим перейти по внутренней ссылке (https://t.me/)? Ничего. В случае перехода по внутренней ссылке никаких уведомлений о переходе по ссылке не происходит.

Вот пример. Визуально конструкция @OSINT_bot может содержать ссылку на другой бот/чат, добавленную туда ссылкой через обычное форматирование, например http://t.me/OSINT_HACKED_bot. И визуально обе эти ссылки будут выглядеть одинаково! (Рис.2). Подмену можно заметить только если задержать над ссылкой курсор или ее скопировать.

Найдите 10 отличий.

Пример. Текст @OSINT_bot может содержать ссылку на другой бот/чат, добавленную туда ссылкой через обычное форматирование, например на http://t.me/OSINT_HACKED_bot.

Обе ссылки ведут на совершенно разных ботов. Если их стилизовать друг под друга, то легкий фишинг обеспечен. Подмену же можно заметить только если задержать над ссылкой курсор или ее скопировать.

Простое повторение:

  1. Пишем сообщение с тегом контакта/чата/бота (@OSINT_bot)
  2. Жмем форматирование => Добавить ссылку => Добавляем фишинговую ссылку (@OSINT_hacked_bot)
  3. Удаляем подгружаемый предпросмотр.
  4. Отправляем ссылку жертве.
  5. ???
  6. PROFIT!

Возможностей для использования в фишинге масса, отправляя жертвам знакомые теги, мы можем перенаправлять их в иные диалоги,ботов или чаты. Но лучше всего эта "фича" раскрывает себя в связке со следующей.

Что ты еще передал?!

Многие ресурсы, например TGStat (https://tgstat.ru/), используют схему авторизации через Телеграм. Для авторизации используется передача уникального параметра собственному боту из ссылки на сайте. Работает это так:

  1. Пользователь заходит на сайт и жмет кнопку "логин".
  2. Сайт выдает пользователю получает ссылку на своего бота с уникальным ключом в параметре start, например https://t.me/tg_analytics_bot?start=wjIKCRulVabiy5z-VnYRd10NGblZaVru
  3. Бот ожидает этот уникальный параметр, после чего сайт авторизует пользователя под тем аккаунтом Телеграм, от которого был получен ключ.
Успешный вход

Однако, при переходе по ссылке параметр не отображается в клиенте Telegram. Отображается только кнопка запуска бота, после нажатия которой и в логе общения с ботом никакого параметра не видно. А он есть.

Это внутренняя "фича" Телеграма прятать передаваемые параметры при переходе в любого бота, которую разработчики сервиса адаптировали под себя. Но не особо безопасно.

Угоняем аккаунт TGstat.

Комбинация с предыдущей "фичей" маскировки внутренних ссылок, позволяет нам крайне эффективно угнать аккаунт сервиса.

Для этого:

  1. Заходим на сайт сервиса и получаем уникальный ключ авторизации нашего браузера. Но по ссылке не переходим.
  2. Отправляем под любым предлогом жерве ссылку на оригинальный бот TGstat (@tg_analytics_bot), но с добавлением через форматирование нашего параметра ключа (https://t.me/tg_analytics_bot?start=wjIKCRulVabiy5z-VnYRd10NGblZaVru).
  3. Жертва кликает на имя бота и переходит по скрытой ссылке с параметром.
  4. Жертве показывается только стандартная кнопка /start.
  5. После нажатия кнопки, мы в браузере получаем сессию жертвы на сервисе.
  6. ???
  7. PROFIT!

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

Оффтоп. Более того, посмотреть список активных сессий на сайте или в боте нельзя, также как и завершить их. То есть мы останемся в аккаунте незаметно и навсегда, но эти проблемы уже на совести создателей сервиса, а не Телеграма.

Надежная деанонимизация

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

Такую ссылку можно кидать в "предложку" телеграм-каналов для деанонимизации аккаунтов администраторов.

Выводы

Для предотвращения использования этих "фич" в фишинге, я предложил Телеграму следующее:

  • Включить механизм уведомления о переходе по скрытой ссылке не только для внешних, но и для внутренних ссылок, если ссылка была добавлена ​​посредством форматирования.
  • Отображать параметры, передаваемые при обращении к боту по умолчанию, а не только кнопку запуска бота.

Но Телеграм, к сожалению, не намерен ничего с этим делать, о чем мне сообщила их служба безопасности в рамках поданного репорта на BugBounty. Это действительно за рамками программы, но хотелось бы просто исправления.

Возможно, само наличие слова "социальная инженерия" в репорте уже повод для отклонения=)

Будьте внимательны и проверяйте ссылки!

HACKER+PLACE - Подписка