Подписчик поделился интересной реализацией OTP (One Time Password) для подключений по RDP.
Ничего особенного в этом нет, подобных систем много. Но обычно это отдельный сервис, который надо разворачивать, настраивать, и это не всегда просто и быстро сделать. А описанный ниже способ очень простой. Всё устанавливается локально на ОС Windows как серверных, так и десктопных редакций. Разницы в настройке нет.
Для реализации 2FA через OTP на Windows нам понадобится open source продукт под названием multiOTP, а точнее его отдельный компонент multiOTPCredentialProvider. Покажу сразу полную настройку. Я у себя всё проверил. Долго провозился, потому что разбирался, как всё это работает, собирал нужные команды, читал help. Повторить можно будет намного быстрее. ИИ не помог, тупо выдумал все команды. Вообще все.
Со страницы загрузки скачиваете свежую версию multiOTP Credential Provider. Это обычный .msi пакет. Устанавливаете в системе. Во время установки ставите галочку, что не используете никакой сервис, а только локальную версию. Не запомнил, как точно настройка называлась. А на втором экране отмечаете галочками, для каких процессов будет запрашиваться одноразовый пароль. Это могут быть:
- локальные и удалённые входы
- локальные или удалённые разблокировки сеансов
- локальный или удалённый запуск приложений в режиме "Запустить от администратора (Run as Administrator)"
Я выбрал только один случай - remote logon, то есть удалённое подключение, в данном случае по RDP.
После установки запускаем cmd от администратора и переходим в каталог с программой:
> cd C:\Program Files\multiOTP
Выбираем любого системного пользователя и задаём ему вход через TOTP:
> multiotp.exe -debug -display-log -create totp_user TOTP 34443E4948A3C06A1CFB 6
◽️totp_user - имя пользователя
◽️34443E4948A3C06A1CFB - любой 160 битный ключ (Hexadecimal, Шестнадцатеричный ключ, 20 символов), можно создать в онлайн генераторе.
◽️6 - количество символов в одноразовом пароле
И сразу же создадим пользователю qr код для добавления в аутентификатор:
> multiotp.exe -qrcode totp_user c:\multiotp\totp_user.png
❗️Теперь важный момент. После установки multiOTP Credential Provider для всех удалённых подключений будет требоваться TOTP, даже если вы их не добавили в базу multiotp. Я попался на этом. Пришлось подключаться локально и добавлять TOTP для остальных учёток.
Только после того, как вы выполнили создание пользователя через multiotp, вы сможете отключить для отдельных пользователей использование TOTP:
> multiotp -iswithout2fa zerox
Для пользователя zerox отключили одноразовые пароли. Он заходит как обычно.
Собственно, на этом настройка и окончена. Приведу список команд, которыми пользовался во время настройки.
Список пользователей в базе multiotp:
> multiotp -userslist
Информация о пользователе:
> multiotp -user-info totp_user
Настроить длину пароля по умолчанию:
> multiotp -config default-2fa-digits 6
Выпустить список одноразовых паролей. Могут пригодиться, если пользователь потерял смартфон или не может воспользоваться аутентификатором:
> multiotp.exe -scratchlist totp_user
Я проверил одноразовые пароли. По ним нормально заходит.
Пользователю нужно установить на смартфон или компьютер какой-то аутентификатор. Их очень много. Я проверял Google Authenticator и FreeOTP. Последний можно через RuStore установить.
В самой программе достаточно отсканировать qr код пользователя и генератор одноразовых паролей для multiotp будет добавлен. Если нет возможности отсканировать qr код, то можно hexadecimal ключ сконвертировать в base32 и добавить вручную.
multiOTP - масштабный сервис. Может быть развёрнут в связке с AD, или по аналогии настроен в Linux для SSH