Время на прочтение5 мин
Количество просмотров57K
На хабре уже давно знают об одноразовых паролях и технологиях OTP (One Time Password). Даже Яндекс придумал собственное решение. Я же хочу поведать вам о том как прикрутил интересную реализацию OTP к окну входа в сервер терминалов Windows.
Как все это работает
Весь функционал решения держится на замечательном проекте multiotp, опенсорсовом PHP софте, умеющим работать как с TOTP так и c HOTP , и даже с OCRA. Причем запустить эту красоту можно и в *nix и в Windows. Есть даже веб-интерфейс и релизы для систем виртуализации, но это уже вы сами копайтесь, мы размеберем минимально необходимый для старта набор действий.
Привязка mutltiotp к окну входа в винду осуществляется при помощи плагина MultiOneTimePassword-CredentialProvider.
Пользователь будет генерировать одноразовые пароли у себя на компьютере или мобильном устройстве.
Порядок действий указан на странице плагина, но в последней версии multiotp изменился синтаксис, поэтому я пробегусь по всем действиям для вас еще раз.
Установка сервиса multiotp
Скачиваем multiotp и располагаем его где-нибудь на сервере. Я брошу в корень системного диска C:\multiotp.
Генерация ключей
Затем нужно создать ключ для каждого пользователя, заведенного на сервере. Подчеркну — мы говорим именно о локальных пользователях. У multiotp есть возможность привязки к ldap, но это слишком большая тема для одной статьи.
Для создания пользователей потребуются 160-битные ключи HEX (т.е. 20 символов в шестнадцатеричной системе счисления). Вы можете (и должны) генерировать их у себя сами в защищенное среде, в лабораторных же целях я вам предложу этот генератор. Указываете ему длину ключа (20) и количество пользователей в вашей системе, он все сделает сам. Сохраните куда-нибудь эти ключи, они нам дальше пригодятся.
Создание пользовательских ключей
Команда создания пользователей выглядит так (само собой в cmd перейдите в директорию с распакованным multiotp):
multiotp.exe -debug -create %USERNAME% %TOTP% %KEY% %PIN% %LENGTH% %LIVETIME%
где
%USERNAME% — имя учетки пользователя в Windows;
%TOTP% — создание ключей для технологии TOTP (основанной на метке времени);
%KEY% — ключ созданный на предыдущем шаге;
%PIN% — дополнительный постоянный пин, который пользователь будет дописывать перед своим временным паролем (его можно не использовать, но команда требует указать какой-нибудь ключ);
%LENGTH% — длина одноразовых паролей (рекомендуются 6-ти символьные, так как большинство приложений генерируют именно их);
%LIVETIME% — срок действия одноразовых паролей (рекомендуется указать 30 секунд, так как большинство приложений генерируют именно их).
Пример:
multiotp.exe -debug -display-log -create rdpclient1 TOTP 6696f39315f4c6388216 1234 6 30
т.е. создал ключ для пользователя rdpclient1 с пином 1234 (синтаксис команды требует указывать пин, даже если мы планируем его не использовать);
multiotp.exe -debug -display-log -set user pin=
т.е. сказал что пин на самом деле не нужен.
Конвертация ключей для пользователей
Теперь нам нужно как-то передать пользователям их ключ, чтоб они могли у себя генерировать одноразовые пароли. Полноценный функционал multiotp позволяет через веб-интерфейс создать QR-код, который мы снимаем на наши телефоны и дальше работаем с ними. Я показываю минимальный функционал без интерфейса, так что придется работать руками.
Нужно будет ключи, созданные на втором шаге переконвертировать из 160-битного HEX в Base32. Опять же лучше это делать у себя в защищенной среде, кому лень, вот вам онлайн конвертер. Он даже не https, так что осторожней с ним. Он вроде бы понятно работает, обращайте внимание на регистр при вводе ключей.
Приложения для создания ключей
Переконвертированные ключи нужно дать пользователю. Есть куча приложений для мобильных ОС, которые могут генерировать одноразовые пароли. Я люблю Google Authenticator, он работает на большинстве ОС. Кому хочется побаловаться и не засорять мобильное устройство — можете поставить плагин в браузер.
Приложению или плагину нужно указать ключ, созданный на четвертом шаге. Там ничего сложного, думаю разберетесь сами.
Проверка работы сервиса
Чтобы проверить корректную работу сервиса multiotp следует потестировать создаваемые ключи в командной строке следующим образом:
multiotp.exe -display-log user %GENERATED_TOKEN%
где user — имя пользователя в винде;
%GENERATED_TOKEN% — ключ генерируемый приложением на мобильном устройстве (следите за временем, у вас всего 30 сек с момента генерации пароля)
Ответ в командной строке выглядеть должен так:
0 OK: Token accepted
Подключение плагина авторизации в Windows
Осталось малое — скачать и установить плагин для Windows. Вопросов установщик задает мало. Нужно установить компонент «Default Provider» (иначе он ничего делать не будет), указать путь к multiotp и написать сообщение для окна входа в систему Windows.
Готово. Можно проверять работу.
Нюансы:
1) Обязательно создайте пароли для всех, в том числе для администратора, иначе его не пустит в систему.
2) Обязательно настройте точное время на серваке и на устройствах пользователей, иначе ваши ключи не будут работать. Дело не именно в точности, а в том что время там и там должно совпадать.
3) Иногда не показывает в командной строке результат, но вы всегда можете почитать лог.
4) Если вам интересно как прикрутить это красоту к домену — скажите, я попробую и отпишусь.
5) Функционал огромный, все есть на вики multiotp: смс, QR, синхронизация, резервное копирование, привязка к чему угодно.
Тем, кто информацию любит воспринимать наглядно может быть полезен этот ролик.
UPD:
Получил невероятно хорошие комментарии и уточнения от пожелавшего остаться неизвестным товарища:
1) В самом начале настройки сервера, вводите команду:
multiotp.exe -debug -config default-request-prefix-pin=0 display-log=1
после неё не требуется вводить пин-код при настройке пользователя и включается отображение лога каждой операции в консоль.
2) С помощью этой команды можно регулировать bantime, для пользователей, которые ошиблись с паролем (по умолчанию 30 сек):
multiotp.exe -debug -config failure-delayed-time=60
3) То, что будет написано в приложении google Authenticator над 6 цифрами, называется issuer, можно поменять с дефолтного MultiOTP на что-то другое:
multiotp.exe -debug -config issuer=other
4) После проделанных операций, команда по созданию пользователя становится чуть проще:
multiotp.exe -debug -create user TOTP 12312312312312312321 6
(время обновления цифр, равное 30 секундам, я не задаю, кажется оно по умолчанию равно 30).
5) Каждому пользователю можно изменить description (текст под цифрами в приложении Google Auth):
multiotp.exe -set username description=2
6)
QR-коды можно создавать сразу в приложении:
multiotp.exe -qrcode username c:\multiotp\qrcode\user.png:\multiotp\qrcode\user.png
7) Можно использовать не только TOTP, но и HOTP (на вход функции хэширования подаётся не текущее время, а значение инкрементального счетчика):
multiotp.exe -debug -create username HOTP 12312312312312312321 6
Пример
HOTP можно использовать в ситуациях, когда начальство любит железные решения, а не софт: к примеру, Yubikey программируется для использования HOTP и подходит для этого. Мы впоследствии отказались полностью от Yubikey+HOTP, поскольку если пользователь нажал на Yubikey не в том окне, где надо, то его последующие коды будут неподходящими (счетчик yubikey будет впереди на единицу) и придётся их с сервером синхронизировать:
multiotp.exe -resync user 061735 729371
Если пользователь забыл/потерял телефон, можно сгенерировать десяток одноразовых кодов с помощью команды:
multiotp.exe -scratchlist username
9) И хорошие пояснения
по поводу стабильности решения:
Работает уже больше года на нескольких серверах, никогда проблем с ним не было. Если и возникнет какая-то проблема с multiotp (мы к этому готовились и тестировали возможные варианты) — то достаточно сервер загрузить в безопасном режиме: в таком случае он загрузится с дефолтным credential provider (без участия multi-otp) и после этого нужно будет либо отключить в реестре провайдер multiotp, либо временно его деинсталлировать, сделав предварительно резервную копию папки c:\multitop
В этой статье мы покажем, как внедрить двухфакторную аутентификацию пользователей в домене Windows с помощью open source продукта multiOTP. MultiOTP эта набор php скриптов и утилит, который реализует протокол OATH для HOTP/TOTP (Time-based One Time Password). Возможно использовать как в Windows, так и через RADIUS для реализации 2FA практически в чем угодно.
После внедрения multiOTP для входа пользователя Windows будет запрашивать дополнительный одноразовый пароль (OTP – one time password), который пользователь должен получить со своего мобильного устройства (приложение Microsoft или Google Authenticator, или другого генератора OTP). Вы можете настроить двухфакторную аутенфтикацию для входа на рабочие станции Windows, или для удаленного RDP доступа к хостам RDS на Windows Server.
Основные преимущества multiOTP — ему не нужен доступ в интернет, и можно использовать для внедрения двухфакторной аутентификации пользователей в изолированных сетях. Большинство аналогов платные или требуют прямого доступа к интернету.
Содержание:
- Установка и настройка MultiOTP в домене Active Directory
- Настройка двухфакторной аутентификации MultiOTP для пользователя домена
- Установка multiOTP CredentialProvider в Windows
Установка и настройка MultiOTP в домене Active Directory
В этом разделе мы покажем, как установить MultiOTP в Windows Server 2019 и настроить синхронизацию пользователей из Active Directory.
Также вы можете развернуть MultiOTP с помощью готового образа OVA для VMware, виртуальной машины Hyper-V или Docker контейнера.
Начнем с настройки сервера MultiOTP, который будет получать пользователей из Active Directory, генерировать уникальные QR коды для пользователей и проверять правильность второго фактора.
Создадим в Active Directory отдельную группу и добавим в нее пользователей, для которых мы будет требовать проверку второго фактора при входе в Windows. Создадим группу с помощью PowerShell:
New-ADGroup 2FAVPNUsers -path 'OU=Groups,OU=Moscow,dc=winitpro,DC=ru' -GroupScope Global -PassThru –Verbose
Добавьте пользователей в группу:
Add-AdGroupMember -Identity 2FAVPNUsers -Members kbuldogov, user1, user2
Создайте в AD нового пользователя multiotp_srv, который будет использоваться multiotp для доступа к AD (с минимальными привилегиями).
$passwd = ConvertTo-SecureString -String "P@ssw0rd!" -AsPlainText -Force
New-ADUser -Name "multiotp_srv" -SamAccountName "multiotp_srv" -UserPrincipalName "[email protected]" -Path "OU=ServiceAccounts,OU=Moscow,DC=winitpro,DC=ru" –AccountPassword $passwd -Enabled $true
Скачайте архив с файлами MultiOTP с сайта разработчиков https://download.multiotp.net/.
Откройте архив multiotp_5.8.2.9.zip и извлеките из него каталог windows в папку на локальном диске (C:\MultiOTP).
Откройте командную строку и перейдите в каталог с утилитой multiotp.exe:
CD C:\MultiOTP\windows
Следующими командами мы настроим MultiOTP для получения пользователей из LDAP каталога Active Directory.
multiotp -config default-request-prefix-pin=0
multiotp -config default-request-ldap-pwd=0
multiotp -config ldap-server-type=1
multiotp -config ldap-cn-identifier="sAMAccountName"
multiotp -config ldap-group-cn-identifier="sAMAccountName"
multiotp -config ldap-group-attribute="memberOf"
multiotp -config ldap-ssl=0
multiotp -config ldap-port=389
REM Адрес контроллера домена
multiotp -config ldap-domain-controllers=msk-dc03.winitpro.ru,ldap://192.168.13.10:389
multiotp -config ldap-base-dn="DC=winitpro,DC=ru"
REM Учетная запись для аутентификации multiotp в AD:
multiotp -config ldap-bind-dn="CN=multiotp_srv,OU=ServiceAccounts,OU=Moscow,DC=winitpro,DC=ru"
multiotp -config ldap-server-password="P@ssw0rd!"
REM группа пользователей, для которых нужно включить OTP
multiotp -config ldap-in-group="2FAVPNUsers"
multiotp -config ldap-network-timeout=10
multiotp -config ldap-time-limit=30
multiotp -config ldap-activated=1
REM ключ для доступа к MultiOTP серверу
multiotp -config server-secret=secretOTP
Ранее мы создали группу 2FAVPNUsers и добавили в нее 3 пользователей. Выполните синхронизацию пользователей AD в MultiOTP.
multiotp -debug -display-log -ldap-users-sync
OG 2022-01-17 14:36:44 info LDAP Info: 3 users created, based on 3 LDAP entries (processed in 00:00:00) LOG 2022-01-17 14:36:44 debug System Info: *File created: c:\MultiOTP\windows\.\users\a.ivanov.db
В данном случае MultiOTP обнаружила трех пользователей и синхронизировала их.
Для регулярной синхронизации новых учетных записей в Active Directory, нужно создать задание планировщика с командой:
multiotp -debug -display-log -ldap-users-sync
Запустите с правами администратора файл webservice_install.cmd. Это установит веб интерфейс управления MultiOTP.
Зайдите на веб-интерфейс
_http://127.0.0.1:8112/
под учётной запись admin с паролем 1234 (желательно сменить при входе).
Настройка двухфакторной аутентификации MultiOTP для пользователя домена
В разделе List of users будет доступен список пользователей домена, которые были синхронизированы ранее (источник AD/LDAP).
Выберите пользователя и нажмите Print. Перед вами появится QR код пользователя, который нужно добавить в приложение-аутентфикатор.
Установите на смартфон пользователя приложение Microsoft Authenticator (или Google Authenticator) из Google Play или App Store. Запустите его и отсканируйте QR код пользователя.
В результате в приложении появится учетная запись пользователя, в которой каждые 30 секунд генерируется новый шестизначный цифровой пароль (тот самый второй фактор).
Из командной строки можно проверить, что MultiOTP позволяет аутентифицировать данного пользователя с помощью OTP:
multiotp.exe -display-log kbuldogov 719854
где
719854
– одноразовый пароль, полученный из приложения.
LOG 2022-01-17 15:13:11 notice (user kbuldogov) User OK: User kbuldogov successfully logged in with TOTP token Filter-Id += "2FAVPNUsers"
Также можно проверить корректность работы OTP из веб-интерфейса. Перейдите в раздел Check a user, введите имя пользователя и одноразовый пароль.
Установка multiOTP CredentialProvider в Windows
Следующий этап – установка multiOTP-CredentialProvider на компьютеры Windows, на которых вы хотите внедрить двухфакторную аутентификацию пользователей с помощью MultiOTP. CredentialProvider можно установить на все версии Windows 7/8/8.1/10/11 и Windows Server 2012(R2)/2016/2019/2022.
В это примере мы настроим двухфакторную аутентификацию для RDP входа пользователей на RDSH сервер на Windows Server 2019.
Скачайте и установите multiOTP CredentialProvider с GitHub https://github.com/multiOTP/multiOTPCredentialProvider/releases. На момент написания статьи эта версия
5.8.4.0
.
Запустите установку:
- Укажите IP сервера, на котором был установлен multiOTP
- В нижнее поле укажите секретное слово из конфигурации multiOTP (
в нашем конфиге);
- Выберите тип входа в Windows, для которых нужно применять аутентфикацию через OTP. В нашем примере мы ограничимся 2FA только для RDP входов (OTP authentication mandatory for remote desktop only).
Можно включить использование OTP аутенфтикации как для RDP так и для локальных входов.
MultiOTP CredentialProvider хранит настройки в реестре HKEY_CLASSES_ROOT\CLSID\{FCEFDFAB-B0A1-4C4D-8B2B-4FF4E0A3D978}. Если нужно, вы здесь можете изменить настройки CredentialProvider без переустановки.
Перезагрузите Windows Server RDS и попробуйте через RDP подключиться к нему. Теперь после отправки имени и пароля пользователя появляется дополнительное окно one-time password. Здесь пользователь должен ввести одноразовый пароль из приложения Authenticator на своем смартфоне.
Если на RDS хосте отключен NLA для RDP, пользователь просто увидит три поля для ввода (имя учетной записи, пароль и OTP).
На севере MultiOTP можно включить ведение логов, это полезно при отладке:
multiotp -config debug=1
multiotp -config display-log=1
Your script is running from C:\MultiOTP\windows\ 2022-01-17 15:21:07 debug CredentialProviderRequest Info: *Value for IsCredentialProviderRequest: 1 0 SPB-SRV01 2022-01-17 15:21:07 debug Server-Client Info: *CheckUserToken server request. 0 SPB-SRV01 2022-01-17 15:21:07 notice kbuldogov User OK: User kbuldogov successfully logged in (using Credential Provider) with TOTP token 0 SPB-SRV01 2022-01-17 15:21:07 debug Server-Client Info: *Cache level is set to 1 0 SPB-SRV01 2022-01-17 15:21:07 debug Server-Client Info: *Server secret used for command CheckUserToken with error code result 0: secretOTP 0 SPB-SRV01
Не забудьте убедиться, что ваш домен синхронизирует время с тайм-серверами в интернете и время на клиентах не разбегается. Эти критично для работы OTP.
В любом случае перед массовым внедрением 2FA на базе MultiOTP в вашей сети рекомендуем в течении пары недель протестировать все режимы работы и нештатные ситуации (недоступность сервера MultiOTP, DC, ошибки в CredentialProvider и т.д.). Если возникли существенные проблемы со входом через MultiOTP, вы можете удалить CredentialProvider в безопасном режиме.
На этом настройка двухфакторной аутентификации в Windows Server с помощью MultiOTP закончена. Доступны сценарии использования MultiOTP с RADIUS сервером, для аутентификации практически любых типов клиентов через OTP. Также вы можете использовать OTP для дополнительной зашиты RDP серверов в интернете от брутфорса в дополнении к https://winitpro.ru/index.php/2019/10/02/blokirovka-rdp-atak-firewall-powershell/.
На днях озадачился вопросом в отношении одноразового пароля, мультифакторной / двухфакторной аутентификацией в Windows. Что по факту — нужно при входе в Windows помимо пароля пользователя вводить дополнительный пароль из Google Authenticator. Итак, что нужно:
- Загрузить со страницы проекта MultiOTP последнюю версию MultiOTP
- Загрузить со страницы MultiOneTimePassword-CredentialProvider собственно провайдер
- В Windows настроить NTP синхронизацию (синхронизацию с интернет тайм-сервером)
Установка MultiOTP
- Необходимо создать папку (например с именем MultiOTP или просто OTP) в любом удобном месте, например на диске
c:\
или в%programfiles%
- Скопировать папку
windows
из содержимого архиваmultiotp_***
в созданную папку - Открыть командную строку от имени администратора, перейти в папку, для примера запустить
help
:
cd c:\MultiOTP multiotp.exe -help
Предварительные настройки, отключение пина, включение вывода:
multiotp.exe -debug -config default-request-prefix-pin=0 display-log=1
Изменение имени провайдера (можно указать например имя своей компании или компьютера):
multiotp.exe -debug -config issuer="Sys-Adm.in"
Генерация ключей MultiOTP
Так как я работаю на Linux, то и ключи буду генерировать в Linux, для начала нужно создать 160-битный hex ключ, я создаю ключ в 20 символов так:
for i in $(seq 1 20); do echo -n $(echo "obase=16; $(($RANDOM % 16))" | bc); done; echo
После конвертнуть его в base32
:
echo \`echo MYKEY | xxd -r -p | base32\`
- Первый ключ — нужен для MuliOTP в момент создания пользователя
- Второй — для Google Auth
Создание пользователя MultiOTP
Далее создаем пользователя Windows:
net user /add testuser user-password
Создаем пользователя MultiOTP:
multiotp.exe -debug -create testuser TOTP HEX-KEY 6
Создаем QR картинку для пользователя:
multiotp -qrcode testuser > c:\MultiOTP\users\testuser.png
Установка OTP провайдера
Устанавливаем MultiOneTimePasswordCredentialProviderSetup-***
в процессе установки необходимо включить параметр Default Provider
Указать путь к папке MupliOTP
Установка / Использование Google Auth
- Установить Google Authenticator из Google Play / Иного репозитория
- Добавить ключ, который конвертили в base32 или отсканировать QR код
Проверка OTP перед выходорм из системы
Перед выходом из системы, обязательно проверяем работоспособность:
multiotp.exe -display-log testuser GOOGLE-AUTH-KEY
В результате должно появиться сообщение об успешной проверке:
LOG 2018-02-08 notice (user testuser) User OK: User testuser successfully logged in with TOTP token
Совершаем выход из системы, проверяем. Done!
Решение проблем
- Если OTP сломался, грузимся в безопасный режим (F4 > F8 в момент загрузки ОС)
- В безопасном режиме функционал OTP отключается, там же решаем проблемы
Если OTP был создан только для одного пользователя, то вход можно осуществить только под ним, поэтому либо он должен быть админом на компе, либо нужно для Администора создать OTP
Облегчение жизни Linux админу
После всех манипуляций написал bash скрипт, который сводит все действия на нет, при этом пишет лог по создаваемым пользователям. Результат работы скрипта выглядит примерно так:
В результате:
- System key (наш HEX)
- GA (Google Auth)
- Подсказка, как создать юзера в Windows + сгенерированный пароль
- Подсказка, как сбросить пароль Windows (на случай если тебе пароль покажется слишком сложным)
- Команда создания MultiOTP юзера, достаточно скопи-пастить
- Команда проверки
- Команда генерации QR
- Сам скрипт на GitHub
Доп. ссылки
- Еще одна статья на эту тему — 2FA логон в Windows Server
- Подключение
- Windows Logon
- Общие сведения
MULTIFACTOR Logon — программный компонент, экран входа в операционную систему Windows. Работает как при локальном входе в операционную систему, так и при подключении через удалённый рабочий стол.
Компонент в виде установочного файла (ver. 1.4.1) распространяется бесплатно.
Все версии
-
25.08.2023 — MultifactorLogonSetup.exe (ver. 1.4.1)
- Добавлена поддержка 32 битных операционных систем.
- При установке новой версии поверх старой настройки будут сохраняться.
- По умолчанию включен режим Bypass.
- В конфигураторе в allow-списки можно добавлять PLAP провайдеров.
-
18.05.2023 — MultifactorLogonSetup.exe (ver. 1.3.1)
В случае использования параметра
IncludeDomain
, имя пользователя и домен будут передаваться на сервер в формате Pre-Windows 2000. -
19.04.2023 — MultifactorLogonSetup.exe (ver. 1.3.0.3)
Новый параметр
ConsoleMode
(/consolemode=true), данный флаг отключает дополнительные окна, рекомендуется использовать на системах типа CORE. -
04.04.2023 — MultifactorLogonSetup.exe (ver. 1.3.0.2)
Добавлена возможность смены пароля в случае, если пароль просрочен.
-
22.02.2023 — MultifactorLogonSetup.exe (ver. 1.3.0.1)
Исправлена ошибка в работе параметра Network Bypass List.
-
13.02.2023 — MultifactorLogonSetup.exe (ver. 1.3.0)
Добавлена возможность смены пароля при возникновении соответствующего требования.
-
08.02.2023 — MultifactorLogonSetup.exe (ver. 1.2.9)
Новый параметр
Use DOMAIN\user format
(/includedomain=true). Если включен, то логин доменных пользователей передается на сервер в формате DOMAIN\username. -
11.11.2022 — MultifactorLogonSetup.exe (ver. 1.2.8.1)
Исправлена ошибка с работой параметра
SkipUsers
для доменных пользователей. -
27.10.2022 — MultifactorLogonSetup.exe (ver. 1.2.8.0)
Обновление инсталлятора. Исправлена некорректная обработка последних символов закрывающей фигурной скобки
}
в параметрах/whitelist
и/rdpwhitelist
при установке через CLI. -
16.09.2022 — MultifactorLogonSetup.exe (ver. 1.2.8.0)
Новый параметр SkipUsers (/skipusers) — список пользователей, для которых проверка второго фактора будет пропускаться.
-
05.09.2022 — MultifactorLogonSetup.exe (ver. 1.2.7.1)
- Теперь конфигуратор можно запустить только от имени администратора, иначе выводится предупреждение и конфигуратор закрывается;
- Добавлен параметр инсталлятора /debuglog=true.
- 01.08.2022 — MultifactorLogonSetup.exe (ver. 1.2.7)
- 26.07.2022 — MultifactorLogonSetup.exe (ver. 1.2.6.4)
- 21.07.2022 — MultifactorLogonSetup.exe (ver. 1.2.6.3)
- 20.07.2022 — MultifactorLogonSetup.exe (ver. 1.2.6.2)
- 13.07.2022 — MultifactorLogonSetup.exe (ver. 1.2.5.2)
- 11.07.2022 — MultifactorLogonSetup.exe (ver. 1.2.5.1)
- 06.07.2022 — MultifactorLogonSetup.exe (ver. 1.2.5)
- 06.07.2022 — MultifactorLogonSetup.exe (ver. 1.2.4)
- 07.06.2022 — MultifactorLogonSetup.exe (ver. 1.2.3)
- 25.05.2022 — MultifactorLogonSetup.exe (ver. 1.2.2)
- 13.05.2022 — MultifactorLogonSetup.exe (ver. 1.2.1)
- 25.04.2022 — MultifactorLogonSetup.exe (ver. 1.2.0)
- 21.04.2022 — MultifactorLogonSetup.exe (ver. 1.1.5)
- 09.03.2022 — MultifactorLogonSetup.exe (ver. 1.1.0)
Данная статья описывает настройку входа на рабочую станцию или сервер на основе операционной системы Windows с логином и паролем и вторым фактором с использованием установленного в вашей сети RADIUS адаптера, либо через облачный сервер radius.multifactor.ru.
Как правило, локальный и удалённый вход на рабочую станцию защищён только логином и паролем. В современных операционных системах добавляются новые методы аутентификации, такие как сочетание логина с PIN-кодом, графическим ключом, хранилищем сертификата или биометрическим датчиком. Такая конфигурация реализует только один фактор проверки подлинности и уязвима настолько, насколько надежно защищён первый фактор на клиентском устройстве. Перехват аутентификационных данных можно осуществить, например, при их передаче по незащищённым каналам связи или путём наблюдения за оператором в момент их ввода.
Использование второго фактора не усложняет процесс подключения для пользователя, значительно сокращая риск неправомерного доступа.
Возможные способы аутентификации:
Мобильное приложение Multifactor
Telegram
Аппаратные OTP токены
Приложения OTP: Google Authenticator или Яндекс.Ключ
СМС
Может быть полезно
Доступна настройка второго фактора в режиме диалога с пользователем.
Требования для установки компонента
- Десктопная ОС Windows 7 или выше;
- Серверная ОС Windows Server 2012 или выше;
- Открытый исходящий порт 1812 UDP для отправки запросов по RADIUS протоколу;
- Сетевой доступ к radius.multifactor.ru или RADIUS адаптеру, установленному в локальной сети;
- Свежая версия Microsoft Visual C++ Redistributable x64 или x86.
Принцип работы
- Компонент устанавливается на целевую операционную систему, заменяя стандартный метод входа;
- Проверка логина-пароля пользователя происходит стандартными методами операционной системы;
- Проверка второго фактора происходит по RADIUS протоколу либо через установленный в вашей сети RADIUS адаптер, либо через облачный сервер radius.multifactor.ru;
- Пользователь подтверждает полученный запрос на подключение или вводит сгенерированный одноразовый код в форму входа и подключается к рабочему месту.
Поддерживаемые типы учётных записей
Вход с локальной учетной записью на локальном экране входа или экране блокировки Windows может осуществляться в одном форматов:
<computername>\<username>
.\<username>
При входе с локальной учётной записью логин пользователя будет передан на RADIUS сервер в формате <username>@<pcname>
.
Вход с доменной учётной записью на локальном экране входа или экране блокировки Windows может осуществляться в одном форматов:
<username>
<domain>\<username>
<username>@<upnsuffix>
Вход с учётной записью Microsoft на локальном экране входа или экране блокировки Windows может осуществляться в формате:
microsoftaccount\<username>
Дополнительные возможности и ограничения
- Поддерживает аутентификацию через несколько RADIUS серверов, используя Status-Server (12) запрос для мониторинга доступности;
- Позволяет конфигурировать доступные для пользователя методы аутентификации;
Ограничения при работе через radius.multifactor.ru
- Не принимает кириллические имена учётных записей при работе через radius.multifactor.ru;
- Настройка второго фактора в режиме диалога с пользователем не работает при использовании radius.multifactor.ru.
Важно помнить
Не завершайте сессию текущего пользователя до тех пор, пока не убедитесь, что всё корректно настроено и работает.
Настройка MULTIFACTOR
- Зайдите в административную панель, далее в раздел «Ресурсы» и создайте новый ресурс типа «ОС / Сервер» — «Windows»;
- Заполните «Название», «Адрес» и «Язык» по вашему усмотрению, установите переключатель в «Запретить доступ» в разделе «При подключении без настроенного второго фактора»;
- После создания вам будут доступны два параметра: NAS Identifier и Shared Secret, они потребуются для следующего шага.
- Если планируете размещать сервер RADIUS в локальной сети, установите и настройте RADIUS адаптер. Переименуйте файл шаблона
Clients/winlogon.config.template
вClients/winlogon.config
и настройте его следующим образом:
<!-- Идентифицировать клиентов по заданному RADIUS артибуту NAS-Identifier --> <add key="radius-client-nas-identifier" value="windows"/> <!-- Shared secret общий для WinLogon и адаптера --> <add key="radius-shared-secret" value="SHARED_SECRET"/> <!-- Где проверять первый фактор: None (не проверять) --> <add key="first-factor-authentication-source" value="None"/> <!-- Multifactor API --> <add key="multifactor-nas-identifier" value="NAS Identifier из личного кабинета MULTIFACTOR"/> <add key="multifactor-shared-secret" value="Shared Secret из личного кабинета MULTIFACTOR"/> <!-- Дополнительные настройки для Windows-версии RADIUS адаптера --> <!-- Active Directory domain --> <!-- <add key="active-directory-domain" value="domain.local"/> --> <!-- Разрешить доступ только пользователям группы AD --> <!-- <add key="active-directory-group" value="VPN Users"/> --> <!-- Проверять второй фактор только у пользователей из группы AD --> <!-- <add key="active-directory-2fa-group" value="2FA Users"/> -->
Если вы планируете использовать облачный сервер radius.multifactor.ru, пропустите этот шаг.
- На рабочей станции установите приложение
MultifactorLogonSetup.exe
. После завершения установки будет запущен конфигуратор. Если вы сняли галочку «Run Config» во время завершения установки, запустите конфигураторmfLogonConfig.exe
от имени администратора в папке с установленным компонентом.
На вкладке General:
- Hosts — укажите ip или имена хостов с настроенными адаптерами;
- Port — порт настроенного адаптера, должен быть одинаковых для всех хостов;
- Timeout(sec.) — таймаут запроса доступа (30);
- Retransmit count — количество попыток запроса доступа (2);
- Shared Secret — Указывайте значение в зависимости от типа развертывания:
- Локальный RADIUS адаптер c настроенной идентификацией клиентов: укажите значение, заданное в параметре radius-shared-secret в клиентском файле конфигурации.
<add key="radius-shared-secret" value="SHARED_SECRET"/>
- Локальный RADIUS адаптер без идентификации клиентов: укажите значение, заданное в параметре radius-shared-secret в корневом файле конфигурации.
<add key="radius-shared-secret" value="SHARED_SECRET"/>
- Облачный radius.multifactor.ru: укажите Shared Secret (п.3) из ресурса WinLogon в панели администратора Multifactor.
- Nas Identifier — используется для идентификации клиента. Указанное значение передается в запросе доступа на RADIUS сервер в RADIUS-атрибуте NAS-Identifier. Указывайте значение в зависимости от типа развертывания:
- Локальный RADIUS адаптер c настроенной идентификацией клиентов: укажите значение, заданное в параметре radius-client-nas-identifier в клиентском файле конфигурации.
<add key="radius-client-nas-identifier" value="windows"/>
- Локальный RADIUS адаптер без идентификации клиентов: оставьте пустым;
- Облачный radius.multifactor.ru: укажите NAS Identifier (п.3) из ресурса WinLogon в панели администратора Multifactor.
- Network Bypass List — подключения по RDP из указанных подсетей будут осуществляться без запроса второго фактора. Пример значения:
10.10.*,192.168.1.0/24,127.0.0.1-127.0.0.5
- Domain — укажите домен ActiveDirectory для его автоподстановки в поле «Логин» на экране блокировки и на локальном экране входа;
- Use Host as StationId — если включено – передавать имя хоста клиента вместо IP клиента при подключении через RDP (влияет также на текст в запросе доступа в мобильном приложении и Telegram-боте MULTIFACTOR);
- Sign In Filter — если включено, в качестве методов входа разрешены только методы из белого списка (вкладка White Lists);
- Bypass — если включено, проверка второго фактора будет пропущена при недоступности всех RADIUS серверов. Доступность определяется отправкой RADIUS запроса
Status-Server
в момент подключения. Запрос осуществляется последовательно на каждый RADIUS сервер из списка Hosts с таймаутом 2 секунды и количеством ретрансмитов запроса – 2; - Debug Log — если включено, в папке с установленным компонентом создается файл
debuglog.txt
с отладочной информацией; - SkipUsers — список пользователей, для которых проверка второго фактора будет пропускаться:
- Пользователей необходимо указывать через запятую без пробелов;
- Локальные пользователи указываются в формате:
.\username
; - Доменные пользователи указываются без домена в формате:
username
; - Microsoft-пользователи указываются с полным названием аккаунта.
Поддерживаются служебные имена:
local_users
— все локальные пользователи;domain_users
— все доменные пользователи;microsoft_users
— все Microsoft пользователи.
- Use DOMAIN\user format — если опция включена, то логин доменных пользователей будет передаваться на сервер в формате DOMAIN\username.
На вкладке WhiteLists:
- Если включен параметр Sign In Filter, задайте разрешенные методы для локального входа и подключения через RDP.
- Протестируйте конфигурацию, нажав на кнопку Check Settings на вкладке General. Если связность с RADIUS серверами настроена корректно, тест должен вернуть OK для каждого сервера в списке Hosts.
- В Административной панели создайте пользователя, с которым будете использовать второй фактор, и вышлите ему ссылку на настройку второго фактора на почту.
- Настройте второй фактор для пользователя.
- Система готова к использованию.
Проверка
Важно
Не блокируя и не выходя из текущей сессии пользователя, подключитесь под пользователем, которому настроили второй фактор.
-
Если выбран способ подтверждения с одноразовым кодом, пользователь введет его в отдельном поле.
-
Если выбран способ подтверждения с пушем, MULTIFACTOR пришлёт пуш выбранным методом, а компонент будет ожидать подтверждения или отказа от пользователя.
Загрузка в безопасном режиме
По умолчанию, компонент Windows Logon не блокирует вход при загрузке системы в безопасном режиме. Вы можете настроить принудительный запрос второго фактора при загрузке в безопасном режиме, внеся изменения в системный реестр:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers] "ProhibitFallbacks"=dword:1
Убедитесь, что:
- Машина подключена к сети через LAN (WiFi не подключится в безопасном режиме);
- RADIUS Адаптер не установлен локально на одной машине с Windows Logon. В безопасном режиме служба адаптера не будет запущена.
Внимание
Протестируйте конфигурацию в режиме Bypass, чтобы не потерять доступ к системе в случае неверной настройки.
Если что-то не работает
Последовательно проверьте, что вы ничего не упустили:
- Установлена свежая версия Microsoft Visual C++ Redistributable x64 или x86;
- С рабочей станции открыт доступ по UDP порту 1812 на адреса вашего RADIUS адаптера или radius.multifactor.ru;
- Операционная система имеет 64 битную разрядность (рекомендуется);
- Параметры Nas Identifier и Shared Secret указаны корректно;
- Пользователю настроен хотя бы один второй фактор;
- Проверьте журнал «Запросы доступа» в Личном кабинете;
- Проверьте события в системном журнале Windows от источника MultifactorLogon и LogonUI;
- Доступ без второго фактора доступен при загрузке в безопасном режиме.
Обновление
Удалите «MULTIFACTOR Logon» из списка установленного в операционной системе ПО. Установите компонент заново.
Удаление компонента
Удалите «MULTIFACTOR Logon» из списка установленного в операционной системе ПО.
Последнее обновление 17 февраля 2025 г.
С момента написания прошлой заметки Двухфакторная аутентификация на Windows Server 2012 процедуру установки и настройки упростили, теперь все можно делать быстрее и проще.
Открывать RDP для всего мира довольно чревато — какая-нибудь зараза вполне может подобрать пароль. С другой стороны, использовать VPN тоже далеко не всегда удобно или возможно по разным причинам.
Одно из решений — двухфакторная аутентификация.
Мне нравится multiOTP — это крайне мощная штука, много чего умеет — Windows, Hyper-V, VMWare, RADIUS и совместима практически со всем.
Настройки времени
Время на сервере и вашем устройстве (телефон, компьютер) должно совпадать, иначе ключи будут генерироваться неверно!
Внимание
При установке необходимо все сделать аккуратно и внимательно, в противном случае придется подключаться локально консолью или загружаться в безопасный режим!
Примечание: продукт очень быстро допиливают, в более новых версиях процедура установки может немного различаться
На этом установка закончена. На это этапе желательно НЕ ПЕРЕЗАГРУЖАТЬ сервер, требуется добавить хотя бы одного пользователя с административными правами.
Далее добавляем ВСЕХ пользователей, которым нужен доступ по RDP по описанной выше процедуре. Если пользователь присутствует в системе но не добавлен в multiOTP — он не сможет удаленно подключиться. При настройке OTP authentication mandarity for remote desktop only пользователи могут входит в систему локально с консоли.
При добавлении пользователя создается персональный файл настроек (в моем случае это C:\Program Files (x86)\multiOTP\users\) с расширением db, представляющий обычный текстовый файл в формате «ключ/значение». Если пользователь многократно неверно вводит пароль и ключ авторизации, то блокируется не windows-пользователь, а именно аккаунт multiOTP (параметр locked). Вручную его можно разблокировать изменив locked=1 на locked=0
multiotp -[des]activate user
multiotp -[un]lock user
multiotp -delete user
multiotp -user-info user
Для генерации OTP-паролей необходимо установить аутентификатор — это может быть плагин для браузера (Google Chrome: Authenticator) или отдельное приложение на Android (приложение «Google Authenticator») или iOS.
Запускаем аутентикатор, создаем новый аккаунт: нажимаем «Добавить», выбраем QR-код, сканируем полученный код
Тестируем вход под добавленными пользователями, все должно быть Ок.
Примечание: если компьютер не в домене, указывайте имя пользователя в формате SERVER\Username
Для логотипа используется файл loginLogo.bmp в папке с multiOTP (в моем случае это C:\Program Files (x86)\multiOTP)
Разрешение: 128х128, формат bmp