- PVSM.RU - https://www.pvsm.ru -
На хабре уже давно знают [1]об одноразовых паролях и технологиях OTP (One Time Password). Даже Яндекс придумал [2]собственное решение. Я же хочу поведать вам о том как прикрутил интересную реализацию OTP к окну входа в сервер терминалов Windows.

Весь функционал решения держится на замечательном проекте multiotp [3], опенсорсовом PHP софте, умеющим работать как с TOTP [4] так и c HOTP [5], и даже с OCRA [6]. Причем запустить эту красоту можно и в *nix и в Windows. Есть даже веб-интерфейс и релизы для систем виртуализации, но это уже вы сами копайтесь, мы размеберем минимально необходимый для старта набор действий.
Привязка mutltiotp к окну входа в винду осуществляется при помощи плагина MultiOneTimePassword-CredentialProvider [7].
Пользователь будет генерировать одноразовые пароли у себя на компьютере или мобильном устройстве.
Порядок действий указан [8]на странице плагина, но в последней версии multiotp изменился синтаксис, поэтому я пробегусь по всем действиям для вас еще раз.
Скачиваем [9]multiotp и располагаем его где-нибудь на сервере. Я брошу в корень системного диска C:multiotp.
Затем нужно создать ключ для каждого пользователя, заведенного на сервере. Подчеркну — мы говорим именно о локальных пользователях. У multiotp есть возможность привязки к ldap, но это слишком большая тема для одной статьи.
Для создания пользователей потребуются 160-битные ключи HEX (т.е. 20 символов в шестнадцатеричной системе счисления). Вы можете (и должны) генерировать их у себя сами в защищенное среде, в лабораторных же целях я вам предложу этот генератор [10]. Указываете ему длину ключа (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. Опять же лучше это делать у себя в защищенной среде, кому лень, вот вам онлайн конвертер [11]. Он даже не https, так что осторожней с ним. Он вроде бы понятно работает, обращайте внимание на регистр при вводе ключей.
Переконвертированные ключи нужно дать пользователю. Есть куча приложений для мобильных ОС, которые могут генерировать одноразовые пароли. Я люблю Google Authenticator [12], он работает на большинстве ОС. Кому хочется побаловаться и не засорять мобильное устройство — можете поставить плагин [13]в браузер.
Приложению или плагину нужно указать ключ, созданный на четвертом шаге. Там ничего сложного, думаю разберетесь сами.
Чтобы проверить корректную работу сервиса multiotp следует потестировать создаваемые ключи в командной строке следующим образом:
multiotp.exe -display-log user %GENERATED_TOKEN%
где user — имя пользователя в винде;
%GENERATED_TOKEN% — ключ генерируемый приложением на мобильном устройстве (следите за временем, у вас всего 30 сек с момента генерации пароля)
Ответ в командной строке выглядеть должен так:
0 OK: Token accepted
Осталось малое — скачать [14]и установить плагин для Windows. Вопросов установщик задает мало. Нужно установить компонент «Default Provider» (иначе он ничего делать не будет), указать путь к multiotp и написать сообщение для окна входа в систему Windows.
Готово. Можно проверять работу.
1) Обязательно создайте пароли для всех, в том числе для администратора, иначе его не пустит в систему.
2) Обязательно настройте точное время на серваке и на устройствах пользователей, иначе ваши ключи не будут работать. Дело не именно в точности, а в том что время там и там должно совпадать.
3) Иногда не показывает в командной строке результат, но вы всегда можете почитать лог.
4) Если вам интересно как прикрутить это красоту к домену — скажите, я попробую и отпишусь.
5) Функционал огромный, все есть на вики [15]multiotp: смс, QR, синхронизация, резервное копирование, привязка к чему угодно.
Тем, кто информацию любит воспринимать наглядно может быть полезен этот ролик [16].
Автор: semaev
Источник [17]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/111731
Ссылки в тексте:
[1] знают : https://habrahabr.ru/post/154229/
[2] придумал : https://habrahabr.ru/company/yandex/blog/249547/
[3] multiotp: http://www.multiotp.net/
[4] TOTP: https://ru.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm
[5] HOTP : https://ru.wikipedia.org/wiki/HOTP
[6] OCRA: https://ru.wikipedia.org/wiki/OCRA
[7] MultiOneTimePassword-CredentialProvider: https://github.com/LastSquirrelIT/MultiOneTimePassword-CredentialProvider
[8] указан : https://github.com/LastSquirrelIT/MultiOneTimePassword-CredentialProvider/wiki/MultiOTP
[9] Скачиваем : http://download.multiotp.net/
[10] генератор: https://www.randomlists.com/random-hex
[11] онлайн конвертер: http://www.darkfader.net/toolbox/convert/
[12] Google Authenticator: https://support.google.com/accounts/answer/1066447?hl=ru
[13] плагин : https://chrome.google.com/webstore/detail/authenticator/bhghoamapcdpbohphigoooaddinpkbai
[14] скачать : https://github.com/LastSquirrelIT/MultiOneTimePassword-CredentialProvider/releases
[15] вики : http://www.multiotp.net/?website=multiotp&rl=2&ll=&it=101953&language=en
[16] ролик: https://www.youtube.com/watch?v=V4heLfOgXj8
[17] Источник: https://habrahabr.ru/post/276865/
Нажмите здесь для печати.