Двухфакторный логон в Windows (MultiOTP)

by, Yevgeniy Goncharov, 21-Apr-2020
  • otp
  • windows
  • вход
  • фактор

На днях озадачился вопросом в отношении одноразового пароля, мультифакторной / двухфакторной аутентификацией в Windows. Что по факту - нужно при входе в Windows помимо пароля пользователя вводить дополнительный пароль из Google Authenticator. Итак, что нужно:

Установка 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\`
  1. Первый ключ - нужен для MuliOTP в момент создания пользователя
  2. Второй - для 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

multiotp provider install

Указать путь к папке MupliOTP

multiotp windows provider install2

Установка / Использование 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 скрипт, который сводит все действия на нет, при этом пишет лог по создаваемым пользователям. Результат работы скрипта выглядит примерно так:

multiotp provider install4

В результате:

  • System key (наш HEX)
  • GA (Google Auth)
  • Подсказка, как создать юзера в Windows + сгенерированный пароль
  • Подсказка, как сбросить пароль Windows (на случай если тебе пароль покажется слишком сложным)
  • Команда создания MultiOTP юзера, достаточно скопи-пастить
  • Команда проверки
  • Команда генерации QR
  • Сам скрипт на GitHub

Доп. ссылки