Бюджетный второй фактор на Телеграм для Windows — ServiceLogonMultiFactor (SLMF)

Предисловие

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

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

Имплементация:

Писать несколько клиентов (мобильный, веб, десктоп) было бы довольно затратно и избыточно, поэтому выбор был сделан в пользу Телеграмм мессенджера, особенно учитывая его serverless подход у ботов. Также из-за соображений безопасности и стабильности не использовать WinAPI, а ограничиться только информацией, получаемой из команды quser, чтения EventLog и выполнения
команд msg.exe и tsdiscon.exe (получение IP из EventLog оказалось не стабильным и пришлось использовать WinAPI, но только для чтения.)

ServiceLogonMultiFactor (SLMF)

ServiceLogonMultiFactor (SLMF) — бесплатный софт с отрытым кодом, позволяющий подключить второй фактор аутентификации пользователей заходящих на компьютер как локально, так и по протоколу RDP. В качестве второго фактора используется мессенджер Telegram, путем посылки удобного сообщения с кнопками разрешить/запретить и действия в соответствии с нажатой кнопкой.

Демонстрация работы сервиса доступна по ссылке

Исходный код доступен по ссылке

Подробная документация доступна по ссылке

Обсуждение статьи доступно здесь

SLMF был написанный на С#, .Net 4.0 из-за его распространённости по умолчанию.

Сервис, по событию входа или разблокировки получает ИД сессии, далее через вызов команды quser и WinAPI имя пользователя и IP адрес, если подключение не локально.

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

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

За несколько секунд до отключения (параметр задается в конфиге) пользователю на экране начинает выводиться сообщение с помощью msg.exe.

Дополнительно, при наличии прав, пользователь может получить следующую информацию

  1. Список текущих пользователей;
  2. Список задач (топ 10 задач по потреблению памяти для каждого пользователя);
  3. Текущие настройки сервиса;
  4. Информацию из команды systeminfo: аптайм машины и количество свободной памяти;
  5. Информацию о сервисе: версия, аптайм и количество ошибок чтения Телеграм;

Так же (при наличии прав) можно выполнять команду tsdiscon.

Сценарии использования и безопасность

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

Если данный сервис используется для защиты персонального компьютера, на котором пользователь работает с правами локального администратора, то тут все сложнее. Пользователь всегда может выполнить команду net stop servicelogonmultifactor и остановить этот сервис. Как дополнительная защита возможна установка сервиса с нестандартным именем и описанием, а также запуск из нестандартного каталога. В этом случае поиск этого сервиса займет очень значительное время, а с учетом отключения сессии каждые 10-15 секунд будет практически невозможным.

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

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

И естественно, если клиент телеграмма стоит на том-же компьютере что и сервис, то задача сильно усложняется, хотя, конечно, можно выполнить команду <имя компьютера> tsdiscon <номер сессии> и отменить авторизацию десктоп клиента.

Добавить комментарий

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.