
В этой статье мы покажем, как реализовать двухфакторную аутентификацию (2FA) для пользователей в домене Windows с помощью бесплатной программы с открытым исходным кодом multiOTP пакет. MultiOTP — это набор PHP-классов и инструментов, позволяющих реализовать локальный сервер строгой аутентификации для HOTP и TOTP (Time-based One Time Password). Вы можете использовать его как в Windows, так и в любой другой операционной системе (через RADIUS) для включения 2FA с одноразовым паролем.
После установки multiOTP Windows предлагает пользователю ввести одноразовый пароль (OTP), который он получает со своего мобильного устройства/смартфона (от Microsoft или Google Authenticator, или другого генератора OTP). Можно включить двухфакторную аутентификацию для пользователей при входе на рабочие станции Windows или для доступа к узлам RDS на Windows Server по RDP.
Установка MultiOTP в домене Active Directory
В этом разделе мы покажем, как установить multiOTP на Windows Server 2019 и настроить синхронизацию пользователей из Active Directory.
Давайте начнем с настройки сервера multiOTP, который будет получать пользователей из Active Directory, генерировать уникальные QR-коды для пользователей и проверять второй фактор.
Создайте группу безопасности в Active Directory и добавьте в нее пользователей, которые должны будут проходить проверку второго фактора при входе в Windows. Создайте группу с помощью PowerShell:
New-ADGroup 2FAVPNUsers -path 'OU=Groups,OU=Munich,dc=woshub,DC=com' -GroupScope Global -PassThru –Verbose
Добавьте пользователей в группу:
Add-AdGroupMember -Identity 2FAVPNUsers -Members j.smith, k.berg, m.bakarlin
Создайте нового пользователя в AD multiOTP, который будет использоваться для доступа к каталогу AD (с минимальными привилегиями):
$passwd = ConvertTo-SecureString -String "Paa32ssw0rd!" -AsPlainText -Force
New-ADUser -Name "multiotp_srv" -SamAccountName "multiotp_srv" -UserPrincipalName "[email protected]" -Path "OU=ServiceAccounts,OU=Munich,DC=woshub,DC=com" –AccountPassword $passwd -Enabled $true
Скачайте архив multiOTP — https://download.multiotp.net/.
Откройте архив multiotp_5.9.2.1.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 Domain controller IP address:
multiotp -config ldap-domain-controllers=mun-dc1.woshub.com,ldap://192.168.15.15:389
multiotp -config ldap-base-dn="DC=woshub,DC=com"
REM Account for multiOTP authentication in AD:
multiotp -config ldap-bind-dn="CN=multiotp_srv,OU=ServiceAccounts,OU=Munich,DC=woshub,DC=com"
multiotp -config ldap-server-password="Paa32ssw0rd!"
REM Group of users you want to enable OTP for:
multiotp -config ldap-in-group="2FAVPNUsers"
multiotp -config ldap-network-timeout=10
multiotp -config ldap-time-limit=30
multiotp -config ldap-activated=1
REM Key to access a MultiOTP server:
multiotp -config server-secret=secret2OTP
Ранее мы создали 2FAVPNUsers группу и добавили в нее 3 пользователей. Синхронизируйте пользователей AD с multiOTP.
multiotp -debug -display-log -ldap-users-sync
LOG 2022-09-17 14:36:44 info LDAP Info: 3 users created, based on 3 LDAP entries (processed in 00:00:00) LOG 2022-09-17 14:36:44 debug System Info: *File created: c:\MultiOTP\windows\.\users\j.smith.db
В этом случае multiOTP нашел 3 пользователей и синхронизировал их.
multiotp -debug -display-log -ldap-users-sync
Выполнить webservice_install.cmd от имени администратора. Он установит веб-интерфейс управления multiOTP.
Вход в веб-интерфейс MUltiOTP (http://127.0.0.1:8112/
), используя учетные данные по умолчанию (пользователь: admin
, пароль: 1234
). Тогда рекомендуется изменить его.
Настройка двухфакторной аутентификации MultiOTP для пользователей домена
В разделе Список пользователей разделе вы увидите список пользователей домена, синхронизированных ранее (источник AD/LDAP).
Выберите пользователя и нажмите кнопку Печать. Вы увидите QR-код пользователя, который нужно добавить в приложение для аутентификации.
Установите Microsoft Authenticator (или Google Authenticator) из Google Play или App Store на смартфоне пользователя. Откройте его и отсканируйте QR-код пользователя.
После этого в приложении Authenticator появляется новая учетная запись пользователя, которая каждые 30 секунд генерирует новый шестизначный пароль (второй фактор).
В командной строке можно убедиться, что multiOTP позволяет аутентифицировать этого пользователя с помощью OTP:
multiotp.exe -display-log j.smith 130186
где 130186 это одноразовый пароль, который вы получаете от приложения.
LOG 2022-09-17 15:13:11 notice (user j.smith) User OK: User j.smith successfully logged in with TOTP token Filter-Id += "2FAVPNUsers"
Вы также можете убедиться, что OTP работает правильно, через веб-интерфейс. Перейдите к Проверка пользователя раздел, введите имя пользователя и одноразовый пароль.
Как установить и настроить MultiOTP CredentialProvider в Windows?
Следующим шагом будет установка multiOTP-CredentialProvider на компьютерах под управлением Windows вы хотите реализовать двухфакторную аутентификацию с помощью multiOTP. Вы можете установить CredentialProvider на любой хост Windows 7/8/8.1/10/11 или Windows Server 2012(R2)/2016/2019/2022.
В этом примере мы включим 2FA для пользователей RDP для входа на сервер RDSH под управлением Windows Server 2019.
Скачайте и установите multiOTP CredentialProvider с GitHub https://github.com/multiOTP/multiOTPCredentialProvider/releases. Последняя доступная версия — 5.9.2.1.
Запустите установку:
- Укажите IP-адрес сервера, на котором установлен multiOTP.
Не забудьте открыть порт брандмауэра на сервере и клиенте multiOTP. Вы можете открыть порт в брандмауэре Windows на сервере с помощью PowerShell:
New-NetFirewallRule -DisplayName "AllowMultiOTP" -Direction Inbound -Protocol TCP –LocalPort 8112 -Action Allow
- Введите секретный ключ из конфигурации multiOTP (server-secret) в поле Секрет, совместно используемый с сервером multiOTP;
- Выберите тип входа в Windows для применения OTP-аутентификации. В нашем примере мы будем использовать 2FA только для входа по RDP (OTP-аутентификация обязательна только для удаленного рабочего стола).
MultiOTP CredentialProvider хранит свои настройки в реестре: HKEY_CLASSES_ROOT\CLSID\{FCEFDFAB-B0A1-4C4D-8B2B-4FF4E0A3D978}
. Если вы хотите, вы можете изменить настройки CredentialProvider здесь без переустановки агента.
Перезапустите хост Windows Server RDS и попробуйте подключиться к нему по RDP. После ввода учетных данных пользователя появится новое окно одноразового пароля. Здесь необходимо ввести одноразовый пароль из приложения Authenticator на смартфоне.
Вы можете включить ведение журнала на вашем сервере multiOTP, это полезно для отладки:
multiotp -config debug=1
multiotp -config display-log=1
Your script is running from C:\MultiOTP\windows\ 2022-09-17 15:21:07 debug CredentialProviderRequest Info: *Value for IsCredentialProviderRequest: 1 0 MUN-SRVOTP1 2022-09-17 15:21:07 debug Server-Client Info: *CheckUserToken server request. 0 MUN-SRVOTP1 2022-09-17 15:21:07 notice j.smith User OK: User j.smith successfully logged in (using Credential Provider) with TOTP token 0 MUN-SRVOTP1 2022-09-17 15:21:07 debug Server-Client Info: *Cache level is set to 1 0 MUN-SRVOTP1 2022-09-17 15:21:07 debug Server-Client Info: *Server secret used for command CheckUserToken with error code result 0: secret2OTP 0 MUN-SRVOTP1
Не забудьте убедиться, что ваш домен AD синхронизирует время с надежным источником времени, а клиентские устройства имеют правильное время. Это очень важно для работы OTP.
Итак, настройка двухфакторной аутентификации multiOTP в Windows Server завершена. Существуют также сценарии использования multiOTP с сервером RADIUS для аутентификации практически любого типа клиентов с помощью OTP. Вы можете использовать OTP для дополнительной защиты RDP-сервера от атак грубой силы вместе с правилами брандмауэра Windows.