
Всем привет!
Все чаще наши заказчики просят в качестве платформы для проведения социотехнической атаки использовать популярный мессенджер Telegram. В этой статье мы решили поделиться с комьюнити набором интересного функционала для атак на пользователей. Конечно же, только в рамках пентестиков : ) Отмечу, что эта статья — текстовая версия доклада, который я читал на OWASP MEETUP 2026.
Введение
Существует такой параметр — стоимость атаки. Его сейчас все чаще упоминают в новостях и все чаще системы защиты строятся по принципу «сделать атаку слишком дорогой и невыгодной». Поэтому появляются методы «удешевления», самый популярный и распространенный из которых — фишинг. Основной лейтмотив простой — украсть учетные данные. Но это можно сделать оригинальнее, чем просто сымитировать панельку логина и пароля. Например, можно украсть сессию или злоупотребить QR-аутентификацией — о чем и будет эта статья.
Отмечу, что Telegram в контексте фишинга интересен по одной простой причине — он давно вышел за пределы статуса личного мессенджера и стал частью рабочей инфраструктуры. В нем ведут проектные чаты, пересылают документы, согласуют доступы, обсуждают инциденты, подключают ботов, принимают заявки и иногда хранят то, что вообще не должно храниться в переписке. Так смешивается личный и рабочий контуры. В корпоративной почте и доменных учетных записях обычно есть хотя бы минимальные политики безопасности, журналы событий, контроль устройств и процедуры отзыва доступа. В Telegram же аккаунт используется для общения с друзьями, подрядчиками, коллегами, клиентами и внутренними командами. При этом доступ к нему может быть открыт сразу с нескольких устройств, а часть сотрудников годами не проверяет список активных сессий.
Компрометация аккаунта дает доступ к личной переписке и возможность попасть в рабочие коммуникации, увидеть внутренний контекст компании, собрать имена сотрудников, названия проектов, ссылки на облачные хранилища, конфигурации, токены, документы и другие артефакты, которые могут пригодиться для дальнейшей атаки. Иногда одной такой сессии достаточно, чтобы подготовить более точный spear phishing уже от лица реального сотрудника.
Во многих случаях Telegram становится источником данных для дальнейшей компрометации инфраструктуры. В переписке нередко встречаются VPN-конфигурации, ссылки на внутренние сервисы, токены доступа, резервные коды, учетные данные тестовых систем или другие технические артефакты, которые сами по себе могут показаться незначительными. Однако в совокупности они позволяют злоумышленнику перейти от компрометации одного аккаунта к атаке на корпоративную инфраструктуру.
Что уже было
Я думаю, что многим известно — Telegram никак не защищен от стиллеров. Если вы заразитесь таким ВПО, то в большинстве случаев (за редким исключением, подробности — ниже), ваша сессия будет скомпрометирована. Телеграмовские «куки» лежат по пути:
C:\Users\%username%\AppData\Roaming\Telegram Desktop
Выглядят они так:

Об этом векторе атаки давно известно многим разработчикам стиллеров, поэтому наши коллеги часто упоминали этот функционал при анализе различных вредоносов.
https://soctech.ib-bank.ru/files/materials/2023/2/antipova.pdf https://rt-solar.ru/solar-4rays/blog/4559/

После скачивания с зараженного устройства папки tdata атакующий просто вставляет ее в специальную «портативную» версию Telegram и успешно заходит в сессию!

Отдельно стоит отметить, что зачастую неопытные вайбкодеры предпочитают красть всю папку tdata — это ошибочно. Мы можем смело выбросить кеш изображений, эмоджи и прочую лишнюю информацию, которая никак не влияет на аутентификацию.

Для автоматизации симуляции атак мы написали небольшой скрипт, с помощью которого вы можете симулировать кибератаки и кражу tdata.

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

О работе
Помимо tdata, атакующие любят имитировать страницы входа в Telegram Web и таким образом крадут учетные записи.
https://habr.com/ru/articles/1032190/

Защита tdata
Как я уже говорил, при краже tdata-файлов есть некоторые особенности. При включении PIN-кода клиент изменяет схему защиты локальных данных. Информация о пользовательской сессии в каталоге tdata хранится в специальных контейнерах (TDF — Telegram Data Files), а ключ, необходимый для их расшифровки, начинает зависеть от установленного пользователем passcode. Иными словами, PIN становится частью цепочки защиты локальной сессии, а не только механизмом блокировки интерфейса.

Это означает, что злоумышленнику недостаточно просто получить файлы tdata. Для восстановления информации необходимо решить еще одну задачу — получить или подобрать локальный ключ, которым защищены контейнеры сессионных данных. PIN-код несколько повышает стоимость подобной атаки по сравнению со сценарием, когда локальная защита вообще не используется.

Что касается ключа TG, то он вычисляется на основе пользовательского passcode с использованием salt и криптографической функции PBKDF2-HMAC-SHA512. Полученный ключ применяется для расшифровки локальных контейнеров сессионных данных.
Для защитника этот вывод важен по двум причинам. Во-первых, Telegram использует современную схему хранения ключа, а не простое симметричное шифрование с заранее известным ключом. Во-вторых, становится понятно, почему качество пользовательского PIN-кода напрямую влияет на стойкость защиты локальной сессии. Если passcode отсутствует или представляет собой короткую предсказуемую комбинацию, именно он становится наиболее слабым элементом всей цепочки защиты.
Для автоматизации аудита и проверки установленного PIN-кода вы можете воспользоваться этим скриптом.

Обход защит
Есть два варианта: сбрутать пин-код и залогировать. Для брута можно воспользоваться telegram2john.py.

А для логирования взять как обычный кейлоггер, так и более интересные наработки по типу нашего Spyndicapped .

Итоговая устойчивость схемы зависит не только от криптографии, но и от самого пользовательского PIN. Если он представляет собой короткий числовой код, его можно попытаться подобрать офлайн, уже имея локальные данные tdata. В этом случае атакующему не требуется взаимодействовать с Telegram или выполнять какие-либо действия в сети — подбор происходит исключительно на основе ранее полученных локальных артефактов.
Существует и другой сценарий. Если рабочая станция уже скомпрометирована шпионским ПО, злоумышленнику вовсе не обязательно атаковать криптографическую защиту. Достаточно дождаться момента, когда пользователь самостоятельно введет локальный PIN. Кейлогеры и специализированное spyware способны перехватывать такие данные непосредственно в момент ввода, после чего использовать их для восстановления доступа к защищенной сессии.
После получения корректного PIN становится возможным расшифровать защищенные контейнеры tdata и восстановить локальные данные пользовательской сессии. Для этого мы тоже создали скрипт

QRLJacking
QR-аутентификация появилась как ответ на одну из главных проблем классических паролей — необходимости постоянно вводить секретные данные на разных устройствах. Вместо того чтобы набирать логин, пароль, код из SMS или подтверждать вход по электронной почте, пользователю достаточно открыть доверенное мобильное приложение и отсканировать QR-код. С точки зрения удобства такой сценарий практически идеален: вход занимает несколько секунд, а пароль вообще не покидает доверенное устройство.
Архитектурно механизм тоже выглядит вполне надежным. QR-код не содержит учетных данных пользователя и не является аналогом пароля. В большинстве современных сервисов он представляет собой временный идентификатор сессии или токен, связанный с конкретной попыткой входа. После сканирования мобильное приложение связывается с сервером, проверяет подлинность запроса и, если пользователь подтверждает действие, авторизует новую сессию. Никакие пароли при этом не передаются через QR-код, а сама процедура выполняется по защищенному каналу связи.
Однако безопасность механизма основана на одном критически важном предположении: пользователь точно понимает, какую именно сессию он подтверждает. Сервис исходит из того, что QR-код отображается на легитимной странице входа, а человек осознанно инициировал авторизацию. Пока это условие выполняется, схема действительно остается устойчивой.
Проблема возникает, когда злоумышленник начинает управлять контекстом, в котором пользователь принимает решение. То есть, когда атакующий сам запрашивает QR-код и показывает его на вредоносной странице ничего не подозревающей жертве, жертва аутентифицируется и…. её сессия попадает в руки злоумышленнику!

QRLJacking становится особенно убедительным, когда он переносится внутрь привычной пользователю среды. В этом смысле Telegram Mini Apps заслуживают отдельного внимания. Пользователь взаимодействует не с внешним сайтом в браузере, а с интерфейсом, который открывается прямо внутри Telegram. Психологически это снижает настороженность: кажется, что действие происходит «внутри мессенджера», а значит, оно ближе к легитимному сценарию.
Итак, для работы с QR-аутентификацией Telegram предоставляет официальный API, которым пользуются как собственные приложения компании, так и сторонние клиенты. Мы проверили его работу с помощью библиотеки Telethon и убедились, что создание новой сессии, генерация QR-кода и ожидание подтверждения полностью укладываются в штатный сценарий взаимодействия с сервером. Никаких обходов защитных механизмов или эксплуатации программных ошибок для этого не требуется.

Стоит отметить, что для использования этого функционала требуется создать приложение в телеграм. Каждое приложение использует собственные API ID и API Hash, через которые идентифицируется при работе с MTProto API. После регистрации собственного приложения исследователь получает возможность использовать все предусмотренные механизмы аутентификации, включая вход по QR-коду. После подтверждения пользователем такая сессия отображается в списке активных устройств так же, как и любой другой официальный клиент.

В открытом доступе существует большое количество сторонних Telegram-клиентов с опубликованными API ID и API Hash. Многие из них являются open source-проектами, а их идентификаторы присутствуют в публичных репозиториях и примерах кода, что позволяет атакующему мимикрировать под легитимное приложение.

Мы написали небольшой POC, который осуществляет атаку QRLJacking на Telegram. Причем поддерживаются также атаки на аккаунты, защищенные облачным паролем.

Автоматизация извлечения чувствительных данных из телеграм
Еще одна причина, по которой атаки на Telegram нельзя рассматривать как единичный инцидент, — возможность автоматизации дальнейших действий. Если злоумышленник получил доступ к сессии, ему необязательно вручную читать всю переписку. Гораздо эффективнее автоматически извлекать из аккаунта потенциально полезные артефакты: ссылки, документы, упоминания внутренних сервисов, конфигурации, токены, резервные коды, контакты сотрудников и подрядчиков.

Мы тоже сделали небольшой POC, который извлекает и сохраняет историю чатов пользователя.

Такой подход меняет экономику атаки. Один скомпрометированный аккаунт становится не просто источником переписки, а входной точкой для разведки. Из него можно быстро собрать данные для последующего spear phishing, выбрать наиболее доверенные контакты, понять, какие темы сейчас актуальны для команды, и подготовить сообщения, которые будут выглядеть естественно в текущем рабочем контексте.
Пару слов про MiniApps
В Telegram существует функционал MiniApps, которые работают поверх TelegramWebViewProxy. Основная особенность — они не показывают доменное имя сайта, на который отправляется пользователь. Этим активно пользуются злоумышленники.

MiniApp создается внутри зарегистрированного Telegram-бота.

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

Наиболее распространенный сценарий фишинга через MiniApps — просьба пройти аутентификацию для сохранения доступа к рабочим чатам.

Однако MiniApps еще очень перспективно соединять с QRLJacking. Вы можете создать Direct Link для MiniApp. То есть, создать ссылку, при нажатии на которую будет автоматически всплывать ваше окно с просьбой аутентификации! Так ваш QR-код фактически будет отображен внутри легитимного доверенного контура Telegram, что снизит бдительность пользователя.

Помимо того, вы можете из Telegram MiniApp «выбрасывать» пользователя на любой веб-сайт, например, с HTML Smuggling, чтобы доставить пользователю вредоносную нагрузку.

Помимо того, отправляя в TelegramWebViewProxy команды web_app_open_popup, вы можете мимикрировать под легитимные уведомления мессенджера.

Командлет web_app_request_file_download можно использовать для инфильтрации на компьютер пользователя вашего файла. Пример кода тут.

Бизнес-боты
Наконец, в Telegram есть еще один интересный функционал закрепления — бизнес-боты. Украв вашу сессию и подключив бизнес-бота, хакер может отслеживать переписки, управлять подарками и иметь практически полный доступ к вашему аккаунту.


Вот пример кода бота, который от лица вашего аккаунта будет отправлять всем слово «Hello World».

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

Вы также можете скрыть время установки аватарки, если поставите публичное фото.

А через эти папки можете сделать DLL Sideloading:
C:\Users\User\AppData\Roaming\Telegram Desktop\jengined.dll C:\Users\User\AppData\Roaming\Telegram Desktop\rendspt.dll C:\Users\User\AppData\Roaming\Telegram Desktop\aurora.dll

А если сможете заставить пользователя включить ваш MTProto Proxy, то сможете показывать ему свой телеграм-канал выше всех, даже закрепленных, чатов.

Заключение
Полностью исключить подобные сценарии атак невозможно.
В защитной модели нужно разделять два разных сценария: компрометацию через социальную инженерию и компрометацию уже существующей локальной сессии. В первом случае пользователь сам подтверждает действие злоумышленника. Во втором — атакующий забирает артефакты авторизованного клиента с рабочей станции. Эти сценарии требуют разных мер защиты. Обучение помогает против QRLJacking и классического фишинга, но почти бесполезно против стилера. PIN и EDR помогают защитить tdata, но не мешают пользователю отсканировать чужой QR-код на фишинговой странице.
Поэтому эффективная защита Telegram должна быть многослойной. Только в сочетании меры закрывают не один конкретный трюк, а всю цепочку атаки.
Ключевой момент здесь — перестать воспринимать Telegram как неформальный канал общения. К нему должны применяться те же принципы безопасности, что и к другим рабочим инструментам. Использование облачного пароля, PIN-кода в десктопном клиенте, регулярная ревизия активных сессий и отказ от хранения чувствительных данных в переписке должны стать базовой практикой, а не рекомендацией для наиболее осторожных пользователей.
Не менее важно изменить подход к обучению сотрудников. Большинство программ по-прежнему строится вокруг классического фишинга: «не открывайте вложения», «не переходите по подозрительным ссылкам», «проверяйте адрес сайта». Однако QRLJacking и аналогичные техники показывают, что этого уже недостаточно. Пользователь должен понимать саму логику современных атак.
Отдельного внимания заслуживает контроль корпоративных процессов. Если сотрудники регулярно проходят аутентификацию через сторонние сайты, используют Mini Apps без проверки их происхождения или получают инструкции по входу в сервисы через мессенджеры, организация сама создает благоприятную среду для подобных атак.