В OpenSSH додано підтримку універсальної двофакторної аутентифікації

У кодову базу OpenSSH додано експериментальна підтримка двофакторної аутентифікації з використанням пристроїв, що підтримують протокол U2F, що розвивається альянсом FIDO. U2F дозволяє створювати недорогі апаратні токени для підтвердження фізичної присутності користувача, взаємодія з якими здійснюється через USB, Bluetooth чи NFC. Подібні пристрої просуваються як засіб двофакторної аутентифікації на сайтах, вже підтримуються основними браузерами і випускаються різними виробниками, включаючи Yubico, Feitian, Thetis і Kensington.

Для взаємодії з пристроями, що підтверджують присутність користувача, до OpenSSH додано новий тип ключів «[захищено електронною поштою]»(«ecdsa-sk»), в якому використовується алгоритм цифрового підпису ECDSA (Elliptic Curve Digital Signature Algorithm) з еліптичною кривою NIST P-256 та хеш SHA-256. Процедури взаємодії з токенами винесені до проміжної бібліотеки, яка завантажується за аналогією з бібліотекою для підтримки PKCS#11 та є обв'язкою над бібліотекою libfido2, що надає засоби для комунікації з токенами поверх USB (підтримується протоколи FIDO U2F/CTAP 1 та FIDO 2.0/CTAP 2). Підготовлена ​​розробниками OpenSSH проміжна бібліотека libsk-libfido2 включено в основний склад libfido2, як і HID-драйвер для OpenBSD.

Для включення U2F можна використовувати свіжий зріз кодової бази репозиторія OpenSSH та HEAD-гілка бібліотеки libfido2, в яку вже входить необхідний для OpenSSH прошарок.
Libfido2 підтримує роботу в OpenBSD, Linux, MacOS і Windows.

Для аутентифікації та генерації ключа необхідно виставити змінну оточення SSH_SK_PROVIDER, вказавши в ній шлях до libsk-libfido2.so (export SSH_SK_PROVIDER=/path/to/libsk-libfido2.so), або визначити бібліотеку через настойку SecurityKeyProvider, після чого запустити keygen -t ecdsa-sk» або, якщо ключі вже створені та налаштовані, підключитися до сервера за допомогою «ssh». При запуску ssh-keygen створена пара ключів буде збережена в ~/.ssh/id_ecdsa_sk і може використовуватися аналогічно іншим ключам.

Відкритий ключ (id_ecdsa_sk.pub) слід скопіювати на сервер файл authorized_keys. На стороні сервера лише перевіряється цифровий підпис, а взаємодія з токенами виробляється за клієнта (на сервері не потрібно встановлювати libsk-libfido2, але сервер повинен підтримувати тип ключів «ecdsa-sk»). Згенерований закритий ключ (id_ecdsa_sk) по суті є дескриптором ключа, що створює реальний ключ тільки в поєднанні з секретною послідовністю, що зберігається на стороні токена U2F.

У разі попадання ключа id_ecdsa_sk в руки атакуючого, для проходження аутентифікації йому також потрібно отримати доступ до апаратного токену, без якого закритий ключ непотрібний у файлі id_ecdsa_sk. Крім того, за умовчанням при виконанні будь-яких операцій з ключами (як при генерації, так і при аутентифікації) потрібно локальне підтвердження фізичної присутності користувача, наприклад, пропонується торкнутися сенсора на токені, що ускладнює проведення віддалених атак на системи з підключеним токеном. Як ще один рубеж захисту на етапі запуску ssh-keygen також може бути заданий пароль для доступу до файлу з ключем.

Ключ U2F може бути доданий до ssh-agent через «ssh-add ~/.ssh/id_ecdsa_sk», але ssh-agent має бути зібраний з підтримкою ключів «ecdsa-sk», має бути прошарок libsk-libfido2 і агент повинен виконуватися на системі , До якої підключається токен.
Новий тип ключів «ecdsa-sk» доданий, оскільки формат ecdsa-ключів OpenSSH відрізняється від формату U2F для цифрових підписів ECDSA наявністю додаткових полів.

Джерело: opennet.ru

Додати коментар або відгук