fido2-token как инструмент администрирования MFA токенов

6a5b569f5a822513765ddbeb75716fc6

Всем привет! Хочу рассказать о практическом применении такой утилиты как 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 (Учетные записи → Варианты входа → Ключ безопасности), есть возможность удаления конкретной УЗ и просмотр существующих записей.

© Habrahabr.ru