Авторы: Дворник А.Н., Николаенко Д.В., Мальчева Р.В.
Источник: Информационное пространство Донбасса: проблемы и перспективы : материалы VI Респ. с
междунар. участием науч.-практ. конф., 27 окт. 2023 г. / М-во связи Донец. Нар. Респ., М-во
образования и науки Донец. Нар. Респ., Гос. орг. высш. проф. образования «Донец. нац. ун-т экономики
и торговли им. М. Туган-Барановского», Гос. образоват. учреждение высш. проф. образования «Донец.
нац. техн. ун-т» ; [коллектив авт. ; редкол.: Дрожжина С. В. и др.]. – Донецк : ГО ВПО «ДонНУЭТ»,
2023. – 184 с.
Авторы: Дворник А.Н., Николаенко Д.В.,
Мальчева Р.В.
ГОУВПО «Донецкий национальный технический университет»
ОБЕСПЕЧЕНИЕ БЕЗОПАСНОСТИ МИНИ-ПРИЛОЖЕНИЙ В TELEGRAM
Телеграмм – растущий и развивающийся мессенджер. Свою популярность в России он приобрел, в том числе, за счет широкого спектра возможностей и постоянного развития. Одной из ключевых функций платформы можно назвать использование телеграмм-ботов - специальных аккаунтов, управляемых посредством программного кода и обладающих характерными отличительными чертами. К преимуществам ботов перед их аналогами можно отнести простоту разработки и использования, а к недостаткам - ограниченные возможности, зависимость от сторонней платформы.
Дополнительные возможности принесло недавное обновление [1], в котором добавили возможность открывать полноценные javascript-приложения не покидая мессенджер. Это еще больше расширило возможности телеграмм- ботов и, следовательно, возможные сценарии применения.
Нововведение немного изменило привычный порядок разработки и использования телеграмм-ботов. Ранее управление ботом происходило посредством специального api, которое не требовало выделенного ip-адреса со стороны разработчика, а также полностью изолировало пользователя от третьих лиц. Теперь же для предоставления своего javascript-приложения необходимо проделать привычные для разработчиков веб-сайтов шаги, в т.ч. получить домен или выделенный ip-адрес. Пользователь при взаимодействии с этим приложением обращается напрямую к серверу разработчика бота и больше не имеет гарантий безопасности. Дополнительно разработчику бота необходимо проверять данные, пришедшие в мини приложение, а ведь их можно легко подделать, даже не обладая специальными инструментами. Несмотря на то, что этот нюанс упомянут в документации [2], большинство учебных материалов упускают этот важный момент, что может привести к созданию уязвимых приложений. Цель данной работы является подробное рассмотрение способа обеспечения безопасности.
Потенциальные угрозы безопасности
Чтобы выявить потенциальные угрозы, необходимо вспомнить одно из преимуществ телеграмм-ботов перед обычными веб-сайтами. Разработчику программы нет нужды реализовывать сложную систему аутентификации пользователей. Всю ответственность на себя берет мессенджер, тем самым упрощая процесс разработки и обеспечивая дополнительную безопасность для пользователя бота.
Механизм работы новых мини-приложений подобен обычному веб-сайту. В приложение мессенджера встроен веб-браузер, который открывает специальную ссылку – обычный сайт. Отличие состоит в том, что на страницу добавляется скрипт от разработчиков телеграмм, который предоставляет доступ к данным пользователя и еще некоему набору вспомогательных функций.
Используя данные, полученные от телеграмма, можно однозначно идентифицировать пользователя, что, как и раньше, упрощает разработку. Опасность заключается в том, что любой человек может открыть ту же ссылку у себя в браузере и подделать данные пользователя. Поэтому необходим механизм валидации этих данных. Помимо угрозы фальсификации пользовательских данных и возможности управления ботом от лица другого пользователя, что может привести к серьезным денежным потерям пользователя, при взаимодействии с мини-приложением возникают стандартные и распространенные угрозы для веб-сайтов. Такие угрозы не рассматриваются в данной работе.
Алгоритм валидации данных
Валидация данных пользователя опирается на факт знания секретного ключа - персонального токена бот-аккаунта, которым владеет только его создатель и сам мессенджер. Вместе с данными пользователя скрипт предоставляет хэш от массива пар «ключ-значение» и специального секрета – персонального токена бота. Т.о. получить хэш можно только обладая секретом, что исключает возможность подделки данных.
Алгоритм работы мини-приложения можно описать следующим образом:
2) В случае если поле доступно, необходимо передать все данные на веб-сервер бота, сделать это можно любым удобным способом, например с помощью параметров в адресной строке.
3) Сервер валидирует данные с помощью токена и определяет легальность полученных данных.
4) Для того, чтобы не валидировать данные при каждом запросе к серверу от мини-приложения, что может создать дополнительную нагрузку, необходимо сохранять сессию текущего пользователя. Можно использовать куки-файлы с уникальным значением для каждой сессии.
Глобально этот алгоритм очень схож с принципом работы обычного веб-сайта, за исключением того, что привычный этап аутентификации пользователя реализован посредством валидации набора данных, а не запроса от пользователя секрета, такого как пароль. Для пользователя это выглядит безопаснее и проще в использовании. Разработчик свободен в выборе в способе передачи данных на веб-сервер, а также реализации пользовательских сессий.
Рассмотрим подробнее алгоритм валидации на веб-сервере:
1) Полученный список пар ключ-значение необходимо отсортировать по алфавитному порядку.
2) Из списка необходимо убрать пару “hash=...”, так как это и есть сам хэш, полученный из набора
данных необходимый для сравнения.
3) Список данных нужно преобразовать в единую строку где каждая пара будет в формате “key=value”
с использованием разделителя “\n”.
Пример такой строки:
"auth_date=1698155033\nquery_id=YAG_jl40AgBAQL-OXjS59p0D\nuser={\"id\":5217774851,\"first_name\":\"Иван\",\"last_name\":\"\",\"username\":\"ivan_ivanov\",\"language_code\":\"ru\",\"allows_write_to_pm\":true}".
4) Необходимо получить хеш-подпись с помощью алгоритма HMAC-SHA-256 [3][4], где сообщением будет
персональный токен бота, а ключом константа “WebAppData”.
5) Полученное ранее значение нужно использовать в качестве ключа для хеширования (алгоритм
HMAC-SHA-256) строки, сформированной в п.3.
6) Результат из п.5 необходимо сравнить со значением пары с ключом “hash”, полученном из
мини-приложения. В случае совпадения можно быть уверенным в подлинности полученных данных.
На рис.1 приведен пример кода клиентского приложения. В качестве веб-сервера используется ASP.NET C# приложение.
![]() |
|
Вывод
Телеграмм-боты стали удобной и дешевой заменой полноценных веб-сайтов. Команда разработчиков телеграмм предусмотрела механизмы защиты, которые необходимы к ознакомлению и освоению любому разработчику ботов, использующему мини-приложения внутри мессенджера. Данная работа призвана уточнить способ обеспечения безопасности для мини-приложений.
Список используемых источников:
1. Telegram Mini Apps [Электронный ресурс] – Режим доступа: https://core.telegram.org/bots/webapps
2. Validating data received via the Mini App [Электронный ресурс] –
Режим доступа: https://core.telegram.org/bots/webapps#validating-data-received-via-the-mini-app
3. HMAC [Электронный ресурс] – Режим доступа: https://en.wikipedia.org/wiki/HMAC
4. Подписываем данные: HMAC на практике в API и Web-формах
[Электронный ресурс] – Режим доступа: https://habr.com/ru/articles/262341/