Двухфакторная аутентификация с помощью мессенджера Telegram













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

Введение

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

Финансовые потери от раскрытия конфиденциальных данных, между тем, могут быть весьма ощутимы и, если «внутри» корпоративной сети вы можете применить множество специализированных решений и/или просто правильно организовать процессы и инфраструктуру, то из сети интернет, и используя личные мобильные устройства (стихийный BYOD никто не отменял), вы открыты множеству угроз и способов получения ваших логинов и паролей. 

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

Мы, в компании «АйДи — Технологии управления», понимая, что объять необъятное нельзя (все угрозы), но проблема существует, обратили внимание на компромиссное решение —  двухфакторную аутентификацию, которая позволяет с небольшими изменениями корпоративных систем, сделать доступ к ним на порядок безопаснее.

По определению «Лаборатории Касперского» двухфакторная аутентификация — это система доступа, основанная на двух «ключах»: одним вы владеете (телефон, на который приходит SMS с кодом), другой запоминаете (обычные логин и пароль).

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

25 июня Telegram запустил Bot API (программный интерфейс) и платформу для сторонних разработчиков для создания ботов.

Боты — обычные аккаунты Telegram, управляемые программой и не требующие привязки к телефонному номеру.

Используя данный программный интерфейс специалисты нашей компании создали дополнение (модуль) для конфигураций 1С позволяющее в полной мере использовать двухфакторную аутентификацию. Данный модуль можно с легкостью встроить в существующие конфигурации 1С, построенные на управляемых формах.  Модуль содержит настройки (см. рисунок 1), позволяющие настроить использование двухфакторной аутентификации по пользователям и режимам запуска 1С (тонкий клиент, веб-клиент).

 

Рисунок 1. Настройки двухфакторной аутентификации.

 

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

Процесс аутентификации с использованием модуля выглядит следующим образом:

1. Пользователь при входе в приложение на платформе 1С вводит стандартный «Логин» и «Пароль».


Рисунок 2. Форма ввода данных для входа в приложение на платформе 1С.


2. Выводится форма для выполнения запроса на получение кода подтверждения пользователя. После выполнения запроса в мессенджер Telegram высылается сгенерированный модулем одноразовый код для аутентификации.


Рисунок 3. Форма запроса на получение кода подтверждения пользователя.


3. Пользователь на своем мобильном устройстве в чате со специализированным ботом получает сообщение с кодом подтверждения.


Рисунок 4. Код подтверждения пользователя в мессенджере Telegram.


4. Пользователь вводит полученный код в окне приложения на платформе 1С для подтверждения.


Рисунок 5. Форма ввода кода подтверждения в приложении на платформе 1С.


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

 

Встраивание модуля в конфигурацию 1С

Встраивание модуля производится обычным объединением с рабочей конфигурацией. 

1. Включите возможность изменения конфигурации.

2. Откройте конфигурацию в конфигураторе. Выберите пункт меню «Конфигурация» — «Сравнить, объединить с конфигурацией из файла». Выберите файл конфигурации с двухфакторной аутентификацией (смотри рисунок 6).

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


Рисунок 6. Объединение конфигураций.

 

4. Установите галочку напротив «ДвухфакторнаяАутентификацияТелеграм» и нажмите кнопку «Установить».


Рисунок 7. Отбор по подсистемам.


5. Нажмите кнопку «Выполнить».

 

Рисунок 8. Объединение конфигураций.


 

6. Откройте модуль управляемого приложения. Найдите процедуру «ПередНачаломРаботыСистемы» или создайте при ее отсутствии. Вставьте следующий вызов:

 

Рисунок 9. Модуль управляемого приложения.

 

7. Настройте права. Для пользователя с административными правами добавьте роль «АдминистрированиеДвухфакторнойАутентификацииТелеграм». Для остальных пользователей добавьте роль «ДвухфакторнаяАутентификацияТелеграм».

 

Настройка модуля

Создание бота и получение токена.

Для создания бота необходимо в клиенте Telegram найти бота @BotFather и с помощью команды /newbot создать своего бота, задав его имя и получив в результате токен для управления и работы с ботом через API. Пример ниже на рисунке.

 

Рисунок 10. Чат работы с BotFather.

 

 

Настройка параметров модуля

Рисунок 10. Настройки двухфакторной аутентификации.

 

Для настройки модуля необходимо включить его использование и указать ряд настроек:

  • Имя бота (используется для отображения пользователю при первом входе);
  • Токен бота;
  • Вариант использования двухфакторной аутентификации по пользователям – «Использовать для»:
    • «Всех пользователей (+исключения)»;
    • «Отмеченных пользователей».
  • Вариант указания режимов запуска – «Использовать для вариантов запуска»:
    • «Всех» – режимы запуска настраиваются в целом для всех пользователей;
    • «Задается для пользователя» – режимы запуска настраиваются индивидуально для каждого пользователя.
  • Для каждого пользователя, для которого включена двухфакторная аутентификация, должно быть указано «Имя (Телеграм)» (поле «Username» в персональных настройках мессенджера).

 

Технические аспекты реализации модуля

Рассмотрев Telegram Bot API, мы остановились на использовании двух методов, это getUpdates и sendMessage.

Для отправки сообщения пользователю с помощью метода sendMessage нам необходимо знать его идентификатор. В силу того, что пользователь не знает своего идентификатора, но знает свой «UserName» (задается в клиенте Telegram), мы задействовали второй метод getUpdates, для его определения. Для этого в настройках модуля необходимо задать имена пользователей в Telegram.

При первом входе в программу с использованием двухфакторной аутентификации, мы просим отправить пользователя любое сообщение боту и подтвердить его в программе. С использованием метода «getUpdates», который возвращает список сообщений, отправленных пользователями нашему боту, мы находим данное сообщение, извлекаем идентификатор пользователя, и сохраняем его в настройках модуля. В дальнейшем данный идентификатор используется для отправки кодов подтверждений пользователю.

Данный модуль следует использовать с версией платформы 8.3.6.1977 и выше, т.к. применяются платформенные методы работы с JSON.

Изменена версия модуля на v1.1. Внесены изменения при работе с веб клиентами.

 

Заключение

Ждем ваших отзывов, критики и пожеланий под катом.

12 Comments

  1. I_G_O_R

    так 1С уже запущена, толку от телеграм-аутентификации нет, потому что клиента можно легко поломать, особенно браузер.

    Reply
  2. soltik

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

    Reply
  3. gostmair

    (1) I_G_O_R,

    Если я правильно понял вопрос относился к надежности самих клиентов для работы с приложениями 1С. Если речь идет о тонком клиенте, то можно настроить работу между кластером серверов и клиентом с уровнем безопасности «Постоянно», если речь о веб-клиенте, то и там можно работать по защищенному каналу. В случае двухфакторной аутентификации это просто вариант дополнительной защиты не от взлома клиентов для работы с 1С, а защита от различных атак вида «Фишинг» и т.д., с использованием социальной инженерии.

    Reply
  4. I_G_O_R

    (2)(3) можно написать бота, который с помощью http (GET/POST) запросов обойдет телеграм-аутентификацию.Чтобы защита реально была, права нужно ограничивать на сервере, а не на клиенте.

    Reply
  5. id-mt

    (4) I_G_O_R,

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

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

    Reply
  6. Dmitryiv
    Боты — обычные аккаунты Telegram, управляемые программой и не требующие привязки к телефонному номеру.

    Вот в этой детали дьявол и кроется. Если я, как злоумышленник, завладел паролем для входя в ситстему и узнал имя бота — я вошёл в ситему.

    Reply
  7. gostmair

    (6) Dmitryiv,

    Это вряд ли, одного имени бота не достаточно, нужен его токен. И даже если вы знаете токен, то этого тоже не достаточно, код авторизации генерируется на сервере 1С, а бот выступает лишь средством доставки (к примеру, вместо смс).

    Reply
  8. I_G_O_R

    (5) суть в том, что когда открывается окно аутентификации телеграм, пользователь фактически уже залогинен и может практически пользоваться программой, ему мешает только это самое окно, его лишь нужно закрыть без последствий, например можно каким-то образом очистить свойство формы ОписаниеОповещенияОЗакрытии. Я конечно этим никогда не занимался, но кажется, что с помощью javascript в браузере это будет не так сложно сделать. В тонкий клиент кажется тоже можно внедриться, с учетом существования всяких плагинов типа снегопат, это задача кажется вполне решаемой.

    Reply
  9. sdwggg

    тоже интегрировал 1С и Telegram (для запроса разных данных из базы и получения их на мобильное устройство).

    основной момент, который не нравится в работе с ботом Telegram — это то, что всегда должен быть запущен чат с этим ботом. Если случайно не просто очистить чат, а еще и остановить, то сообщения от бота перестанут приходить. И вот тут можно сидеть и думать, то ли 1Ска стала недоступна, то ли еще что случилось.

    и еще хотелось бы создавать секретные чаты с ботом с возможностью самоудаления. Это ведь одна из главных фишек Telegram.

    Reply
  10. METAL

    Добрый день!

    Скажите, а не приходилось ли Вам делать интеграцию с Facebook API https://developers.facebook.com/ ?

    Иными словами, можно ли то же самое прикрутить не к Телеграм, а к Фейсбуку?

    Просто в нашей компании никто Телеграм не использует, а интеграцию с каким-нибудь популярным мессенджером хотят, и несмотря на мои уговоры, даже пробовать телеграм не хотят, аргумент такой — вот есть Фейсбук, приложение у всех стоит, АПИ есть, пусть корпоративный бот работает на этой платформе…

    Но мне пока не удалось найти ни одного примера реализации бота.. Это потому что на порядок сложней, чем с телеграмом, или просто руки не дошли ни у кого?..

    Например, сложно было бы реализовать 2хфакторную идентификацию через мессенджер фейсбука? Сложней, чем через телеграм?

    Чего хочу — понять что разработка приложения для АПИ фейсбук на порядок сложнее и аргументировать в компании, чтоб всё таки ставили телеграм.. Либо если не сложнее — тогда понять как же это сделать… 🙂

    Спасибо!

    Reply
  11. Ukubaeva

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

    Reply
  12. vbuots

    Необходимо добавить проверку в Общий модуль «ДвухфакторнаяАутентификацияТелеграм.ПроверитьКодРегистрации»:

    +++ Если Сообщение.message.from.Свойство(«username») Тогда
    Если Сообщение.message.from.username = ИмяПользователяТелеграма И Сообщение.message.text = КодРегистрации Тогда
    Идентификатор      = Сообщение.message.from.id;
    ПараметрыВозврата.Статус   = «OK»;
    ПараметрыВозврата.Идентификатор = Формат(Идентификатор,»ЧГ=0″);
    УстановитьИдентификаторПользователяТелеграмма(ПараметрыВозврата.Идентификатор);
    Возврат ПараметрыВозврата;
    КонецЕсли;
    +++            КонецЕсли; 

    Показать

    без этой проверки почему-то выдавал ошибки (

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *