Включение двухфакторной аутентификации (2FA) в Windows с помощью MultiOTP

В этой статье мы покажем, как реализовать двухфакторную аутентификацию (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 работает в автономном режиме (не требует доступа к Интернету), поэтому вы можете использовать его для настройки многофакторной аутентификации в изолированных средах. Большинство аналогичных приложений являются коммерческими или требуют прямого доступа в Интернет.

Установка 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=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

настройка сервера MultiOTP под Windowsнастройка MultiOTP-сервера в Windows

Подробное описание всех опций вы можете найти в КАК НАСТРОИТЬ MULTIOTP ДЛЯ СИНХРОНИЗАЦИИ ПОЛЬЗОВАТЕЛЕЙ ИЗ АКТИВНОЙ ДИРЕКТОРИИ раздел https://download.multiotp.net/readme_5.9.7.1.txt .

Ранее мы создали 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 ldap-users-sync multiotp ldap-users-sync

Чтобы регулярно синхронизировать новые учетные записи Active Directory, создайте задание планировщика задач с помощью следующей команды:

multiotp -debug -display-log -ldap-users-sync

Выполнить webservice_install.cmd от имени администратора. Он установит веб-интерфейс управления multiOTP.

Вход в веб-интерфейс MUltiOTP (http://127.0.0.1:8112/), используя учетные данные по умолчанию (пользователь: admin, пароль: 1234). Тогда рекомендуется изменить его.

Установка веб-консоли администратора MultiOtpMultiOtp install web administraion console

Настройка двухфакторной аутентификации MultiOTP для пользователей домена

В разделе Список пользователей разделе вы увидите список пользователей домена, синхронизированных ранее (источник AD/LDAP).

Синхронизация пользователей Active Directory через LDAP в multiOTP Синхронизация Active Directory через пользователей LDAP в multiOTP

Выберите пользователя и нажмите кнопку Печать. Вы увидите QR-код пользователя, который нужно добавить в приложение для аутентификации.

Получение QR-кода OTP для пользователя WindowsПолучить QR-код OTP для пользователя Windows

Установите Microsoft Authenticator (или Google Authenticator) из Google Play или App Store на смартфоне пользователя. Откройте его и отсканируйте QR-код пользователя.

После этого в приложении Authenticator появляется новая учетная запись пользователя, которая каждые 30 секунд генерирует новый шестизначный пароль (второй фактор).

Однозначный пароль в приложении Microsoft AuthenticatorОднотемный пароль в приложении Microsoft Authenticator

В командной строке можно убедиться, что 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"

multiotp.exe -display-log multiotp.exe -display-log

Вы также можете убедиться, что 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.

Запустите установку:

  1. Укажите IP-адрес сервера, на котором установлен multiOTP.
    Не забудьте открыть порт брандмауэра на сервере и клиенте multiOTP. Вы можете открыть порт в брандмауэре Windows на сервере с помощью PowerShell:
    New-NetFirewallRule -DisplayName "AllowMultiOTP" -Direction Inbound -Protocol TCP –LocalPort 8112 -Action Allow
  2. Введите секретный ключ из конфигурации multiOTP (server-secret) в поле Секрет, совместно используемый с сервером multiOTP; Установка multiOTP-CredentialProvider в Windows Установка multiOTP-CredentialProvider в Windows
  3. Выберите тип входа в Windows для применения OTP-аутентификации. В нашем примере мы будем использовать 2FA только для входа по RDP (OTP-аутентификация обязательна только для удаленного рабочего стола). включить: OTP-аутентификация обязательна только для удаленного рабочего столавключить: OTP-аутентификация обязательна только для удаленного рабочего стола
Вы можете включить OTP-аутентификацию как для RDP, так и для локальных входов.

MultiOTP CredentialProvider хранит свои настройки в реестре: HKEY_CLASSES_ROOT\CLSID\{FCEFDFAB-B0A1-4C4D-8B2B-4FF4E0A3D978}. Если вы хотите, вы можете изменить настройки CredentialProvider здесь без переустановки агента.

Настройки MultiOTP CredentialProvider в реестреНастройки MultiOTP CredentialProvider в реестре

Перезапустите хост Windows Server RDS и попробуйте подключиться к нему по RDP. После ввода учетных данных пользователя появится новое окно одноразового пароля. Здесь необходимо ввести одноразовый пароль из приложения Authenticator на смартфоне.

Ввод одноразового пароля для входа на хост RDS/RDP под управлением WindowsВвод одноразового пароля для входа на RDS/RDP-хост под управлением Windows

Если NLA для RDP отключено на хосте RDS, пользователь увидит только три поля (имя пользователя, пароль и OTP).

Вход в Windows с использованием учетных данных и одноразового пароляВход в Windows с помощью учетных данных и одноразового пароля

Вы можете включить ведение журнала на вашем сервере 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.

В любом случае, перед массовым внедрением 2FA на базе multiOTP в вашей сети мы рекомендуем протестировать все режимы работы и аварийные ситуации (недоступность сервера или DC multiOTP, ошибки CredentialProvider и т. д.) в течение пары недель. Если возникнут серьезные проблемы с входом в систему с помощью multiOTP, вы можете удалить CredentialProvider в безопасном режиме.

Итак, настройка двухфакторной аутентификации multiOTP в Windows Server завершена. Существуют также сценарии использования multiOTP с сервером RADIUS для аутентификации практически любого типа клиентов с помощью OTP. Вы можете использовать OTP для дополнительной защиты RDP-сервера от атак грубой силы вместе с правилами брандмауэра Windows.

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

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