fido2-token как инструмент администрирования MFA токенов
Всем привет! Хочу рассказать о практическом применении такой утилиты как fido2-token. Утилита создана для поиска и управления токенами работающими со стандартом FIDO2. В русскоязычном сегменте не нашел публикаций на эту тему, поэтому опишу свой опыт её использования. Не буду описывать о самом стандарте, а сразу перейду к практическому применению.
Где взять утилиту
В дистрибутивах Linux утилита присутствует в стандартных репозиториях, покажу на примере своей Ubuntu 23:
sudo apt install fido2-tools
Так-же можно скачать релиз на сайте разработчика. Утилита является кросс-платформенной и может быть установлена на Windows или mac. По вопросам установки можно почитать здесь.
Поподробнее о возможностях утилиты
Разработчиками написана неплохая документация о возможностях работы fido2-token, но мне в ней не хватило примеров использования и пришлось потратить некоторое время на изучение.
Основные команды использования
Список подключенных токенов
$ fido2-token -L
# Выводится список подключенных устройств.
/dev/hidraw5: vendor=0x0a89, product=0x0093 (Aktiv Co. FIDO)
Для выполнения всех команд, за исключением получения списка токенов и версии утилиты требуется указывать параметр device, его можно получить вызвав fido2-token -L. В моем случае, имя устройства будет /dev/hidraw5. Во всем командах описанных ниже имя устройства я указываю последним параметром.
Информация о устройстве
$ fido2-token -I /dev/hidraw5
# Выводится подробная информация о токене
proto: 0x02
major: 0x01
minor: 0x00
build: 0x01
caps: 0x05 (wink, cbor, msg)
version strings: U2F_V2, FIDO_2_0, FIDO_2_1_PRE, FIDO_2_1
extension strings: credProtect, hmac-secret
transport strings: usb
algorithms: es256 (public-key)
aaguid: aff32171f03fd048e5269324f49316a6
options: rk, up, noplat, credMgmt, clientPin, pinUvAuthToken, makeCredUvNotRqd, credentialMgmtPreview
fwversion: 0x5
maxmsgsiz: 1024
maxcredcntlst: 3
maxcredlen: 48
maxlargeblob: 0
remaining rk(s): 12
pin protocols: 1, 2
pin retries: 8
pin change required: false
uv retries: undefined
Установить пин-код на токен
$ fido2-token -S /dev/hidraw5
#Команда работает в случае отформатированного токена. Если на токене уже установлен пин, то будет выведено сообщение fido2-token: fido_dev_set_pin: FIDO_ERR_PIN_AUTH_INVALID
Enter new PIN for /dev/hidraw5:
Enter the same PIN again:
Сменить пин-код
Данный функционал доступен только в случае, если пин-код ранее был установлен. Если токен отформатирован и пин не установлен, сменить его у вас не получится.
$ fido2-token -C /dev/hidraw5
Enter current PIN for /dev/hidraw5:
Enter new PIN for /dev/hidraw5:
Enter the same PIN again:
Список записей на устройстве
$ fido2-token -L -r /dev/hidraw5
Enter PIN for /dev/hidraw5:
00: dKbqkhPJnC90siSSsyDPQCYqlMGpUKA5fyklC2CEHvA= webauthn.io
01: xGzvgq0bVGR3WR0Aiwh1nsPm0uy085R0v+ppaZJdA7c= demo.yubico.com
02: qWaDlfZfrZCqrermCG3TqVPA7xqNOvVJUT/Yc6Jw90c= demoauth.rutoken.ru
Что мне не нравится в данной команде, мы не можем определить какое количество записей на токене принадлежит конкретному сайту, далее я это покажу.
Просмотр записей по идентификатору
#В данном примере для сайта webauth.io создано 2 учетные записи, имена пользователей user1 и user2 соответственно
$ fido2-token -L -k webauthn.io /dev/hidraw5
Enter PIN for /dev/hidraw5:
00: ZZ51+SdC38OKQWC3UO+8JgHOyC87eL0j2w5nScXDJmaEIswiqpPba9I0aVM+k2hr user1 ZFhObGNqRQ== es256 uvopt+id
01: izclAxNXw7+w85WMkY8a+WQ7/Vs11jqDkzftlxJ9+eaZgEUe9yRr4+H6I+U6OcBn user2 ZFhObGNqSQ== es256 uvopt+id
Как видно, для сайта webauth.io у нас присутствует две учетные записи для пользователей user1 и user2.
Удаление учетной записи
Для удаления необходимо получить base64 идентификатор записи
#Для начала необходимо получить base64 id учетной записи интересующей нас страницы. Они находятся во втором столбце.
$ fido2-token -L -k webauthn.io /dev/hidraw5
Enter PIN for /dev/hidraw5:
00: ZZ51+SdC38OKQWC3UO+8JgHOyC87eL0j2w5nScXDJmaEIswiqpPba9I0aVM+k2hr user1 ZFhObGNqRQ== es256 uvopt+id
01: izclAxNXw7+w85WMkY8a+WQ7/Vs11jqDkzftlxJ9+eaZgEUe9yRr4+H6I+U6OcBn user2 ZFhObGNqSQ== es256 uvopt+id
$ fido2-token -D -i ZZ51+SdC38OKQWC3UO+8JgHOyC87eL0j2w5nScXDJmaEIswiqpPba9I0aVM+k2hr /dev/hidraw5
Enter PIN for /dev/hidraw5:
#Команда успешно отрабатывает. После этого УЗ успешно удалена. Проверим повторным вызовом $ fido2-token -L -k webauthn.io /dev/hidraw5
$ fido2-token -L -k webauthn.io /dev/hidraw5
Enter PIN for /dev/hidraw5:
00: izclAxNXw7+w85WMkY8a+WQ7/Vs11jqDkzftlxJ9+eaZgEUe9yRr4+H6I+U6OcBn user2 ZFhObGNqSQ== es256 uvopt+id
Форматирование токена
Данный функционал позволяет полностью уничтожить все УЗ на токене, при этом пин-код для подтверждения операции не требуется. Я бы сказал, что это ничто иное, как откат до заводских настроек.
$ fido2-token -R /dev/hidraw5
Особенности работы под Windows
Что мне не понравилось и с чем пришлось смириться — это отображаемое имя токена в системе. Покажу вывод fido2-token -L в Win10
fido2-token.exe -L
\\?\hid#vid_1050&pid_0406&mi_00#7&63fc3c9&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}: vendor=0x1050, product=0x0406 (Yubico YubiKey FIDO+CCID)
И для выполнения любой последующей команды приходится заключать строку имени устройства в кавычки »\\?\hid#vid_1050&pid_0406&mi_00#7&63fc3c9&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}»
Соответственно, любое использование в среде Windows будет выглядеть следующим образом:
fido2-token.exe -L -k webauth.io "\\?\hid#vid_1050&pid_0406&mi_00#7&63fc3c9&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
Вместо заключения
На мой взгляд утилита полностью покрывает администрирование FIDO2 устройств в различных ОС. Несомненное преимущество это кросс-платформенность и полное управление устройством. В отличии от графических инструментов, таких как браузер Chrome или в ключах безопасности Windows (Учетные записи → Варианты входа → Ключ безопасности), есть возможность удаления конкретной УЗ и просмотр существующих записей.