Привет! Это команда отдела защиты бренда Angara SOC. В прошлой части мы рассмотрели сценарий мошеннической схемы, разобрали связь между веб-страницами и Telegram-ботами. В этой части мы рассмотрим, как злоумышленники пытаются скрыть фишинговый контент.

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

Рассмотрим пример с доменом sort-center135523.icu, на котором содержится игра.

Рис. 1. Страница мини-приложения при просмотре через браузер
Рис. 1. Страница мини-приложения при просмотре через браузер

При первичном анализе удалось установить, что имеется Telegram-бот с названием, аналогичным доменному имени страницы, стилизованный под «официальный бот» сортировочного центра «Почты России».

Рис. 2. Интерфейс бота
Рис. 2. Интерфейс бота

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

Но при чем тут новые уловки мошенников? Давайте разбираться!

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

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

При открытии страницы с авторизацией, используя функционал initData, в запросе мы можем видеть, что отправляется строка JSON, включающая следующие данные:

1. query_id — уникальный идентификатор сессии WebApp для конкретной загрузки.

2. user — JSON‑объект с информацией о текущем пользователе:

2.1. id — ID пользователя;

2.2. first_name — имя пользователя;

2.3. last_name — фамилия пользователя (если заполнено данное поле в информации профиля);

2.4. username — юзернейм пользователя (если указан);

2.5. language_code — двухбуквенный идентификатор страны пользователя;

2.6. allows_write_to_pm — возможность писать личные сообщения;

2.7. photo_url — ссылка на аватарку пользователя.

3. auth_date — метка времени, в которое мини‑приложение было запущено.

4. signature — подпись (техническая информация).

5. hash — хэш, используемый на стороне сервера для верификации initData.

Рис. 3. Ключи в initData, отправляемые на сервер злоумышленников
Рис. 3. Ключи в initData, отправляемые на сервер злоумышленников
Рис. 4. Содержание запроса и ответа
Рис. 4. Содержание запроса и ответа

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

После того как пакет, включающий initData, будет отправлен и обработан на стороне сервера, нас встречает уже не игра, а поддельная страница входа на портал «Госуслуги».

Рис. 5. Интерфейс встроенного в бот мини-приложения
Рис. 5. Интерфейс встроенного в бот мини-приложения

Как работает сам алгоритм и почему?

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

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

  1. Преобразуйте все пары «ключ-значение» и создайте массив строковых значений в формате {key}={value}. Ключ hash следует исключить, но сохранить в памяти. Он представляет собой начальный признак данных и будет использоваться на последнем этапе проверки.

  2. Отсортируйте вычисленный массив в алфавитном порядке.

  3. Создайте HMAC-SHA256 с помощью ключа WebAppData и примените его к токену TelegramBot, привязанному к вашему мини-приложению.

  4. Создайте HMAC-SHA256, используя результат предыдущего шага в качестве ключа. Примените его к массиву пар, объединенных символом переноса строки (\n), полученному на втором шаге, и представьте результат в виде последовательности шестнадцатеричных символов.

  5. Сравните hash-значение, полученное на 1-м шаге, с результатом 4-го шага.

  6. Если эти значения равны, переданным данным init можно доверять.

Как же поступили злоумышленники, когда узнали об этом функционале? Они взяли и интегрировали данную проверку в свой мошеннический проект, и теперь, если проверка initData завершается неудачей, они возвращают в ответ на запрос так называемую игру-головоломку (рис. 1).

Если смотреть на запросы через Proxy, то выглядеть это будет следующим образом:

  • Первым делом загружается скрипт, который вычисляет initData.

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

  • В случае с переходом из Telegram выполняется тот же самый скрипт, но теперь он формирует initData и мы можем загрузить фишинговую страницу входа на портал «Госуслуги».

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

Комментарии (1)


  1. IgnatF
    31.07.2025 15:08

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