OpenSSH добавя поддръжка за универсално двуфакторно удостоверяване

Към кодовата база на OpenSSH добави експериментална поддръжка за двуфакторно удостоверяване с помощта на устройства, които поддържат протокола U2F, разработен от алианса FIDO. U2F позволява създаването на евтини хардуерни токени за проверка на физическото присъствие на потребителя, взаимодействие с него чрез USB, Bluetooth или NFC. Такива устройства се рекламират като средство за двуфакторно удостоверяване на уебсайтове, вече се поддържат от основните браузъри и се произвеждат от различни производители, включително Yubico, Feitian, Thetis и Kensington.

За взаимодействие с устройства, които потвърждават присъствието на потребителя, към OpenSSH е добавен нов тип ключове "[имейл защитен]” („ecdsa-sk”), който използва алгоритъма за цифров подпис ECDSA (Algorithm за цифров подпис с елиптична крива) с елиптична крива NIST P-256 и хеш SHA-256. Процедурите за взаимодействие с токени се поставят в междинна библиотека, която се зарежда по подобен начин на библиотеката за поддръжка на PKCS#11 и е обвивка върху библиотеката libfido2, който предоставя инструменти за комуникация с токени през USB (поддържат се протоколи FIDO U2F/CTAP 1 и FIDO 2.0/CTAP 2). Междинна библиотека libsk-libfido2, подготвена от разработчиците на OpenSSH включени в ядрото 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 настройка и след това изпълнете „ssh- 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“, тъй като форматът на OpenSSH ecdsa ключовете се различава от формата U2F за цифрови подписи ECDSA в присъствието на допълнителни полета.

Източник: opennet.ru

Добавяне на нов коментар