OpenSSH voegt ondersteuning toe voor universele tweefactorauthenticatie

Naar de OpenSSH-codebase toegevoegd experimentele ondersteuning voor tweefactorauthenticatie met behulp van apparaten die het protocol ondersteunen U2F, ontwikkeld door de alliantie FIDO. Met U2F kunnen goedkope hardwaretokens worden gemaakt om de fysieke aanwezigheid van de gebruiker te verifiëren en ermee te communiceren via USB, Bluetooth of NFC. Dergelijke apparaten worden gepromoot als middel voor tweefactorauthenticatie op websites, worden al ondersteund door grote browsers en worden geproduceerd door verschillende fabrikanten, waaronder Yubico, Feitian, Thetis en Kensington.

Om te communiceren met apparaten die de aanwezigheid van de gebruiker bevestigen, is een nieuw type sleutels toegevoegd aan OpenSSH "[e-mail beveiligd]” (“ecdsa-sk”), dat gebruik maakt van het digitale handtekeningalgoritme ECDSA (Elliptic Curve Digital Signature Algorithm) met NIST P-256 elliptische curve en SHA-256 hash. Procedures voor interactie met tokens worden in een tussenliggende bibliotheek geplaatst, die op een vergelijkbare manier wordt geladen als de bibliotheek voor PKCS#11-ondersteuning en een wrapper bovenop de bibliotheek is libfido2, dat hulpmiddelen biedt voor communicatie met tokens via USB (FIDO U2F/CTAP 1- en FIDO 2.0/CTAP 2-protocollen worden ondersteund). Tussenliggende bibliotheek libsk-libfido2 opgesteld door OpenSSH-ontwikkelaars inbegrepen in de kern libfido2, evenals HID-stuurprogramma voor OpenBSD.

Om U2F in te schakelen, kunt u een nieuw deel van de codebase gebruiken opslagplaats OpenSSH en de HEAD-tak van de bibliotheek libfido2, die al de laag bevat die nodig is voor OpenSSH.
Libfido2 ondersteunt OpenBSD, Linux, macOS en Windows.

Om een ​​sleutel te authenticeren en te genereren, moet u de omgevingsvariabele SSH_SK_PROVIDER instellen en daarin het pad naar libsk-libfido2.so aangeven (export SSH_SK_PROVIDER=/path/to/libsk-libfido2.so), of de bibliotheek definiëren via de SecurityKeyProvider en voer vervolgens “ssh-keygen-t ecdsa-sk" uit of, als de sleutels al zijn gemaakt en geconfigureerd, maak verbinding met de server met behulp van "ssh". Wanneer u ssh-keygen uitvoert, wordt het gegenereerde sleutelpaar opgeslagen in “~/.ssh/id_ecdsa_sk” en kan het op dezelfde manier worden gebruikt als andere sleutels.

De openbare sleutel (id_ecdsa_sk.pub) moet naar de server worden gekopieerd in het bestand geautoriseerde_sleutels. Aan de serverzijde wordt alleen de digitale handtekening geverifieerd en wordt interactie met tokens uitgevoerd aan de clientzijde (u hoeft libsk-libfido2 niet op de server te installeren, maar de server moet het sleuteltype “ecdsa-sk” ondersteunen) . De gegenereerde privésleutel (id_ecdsa_sk) is in wezen een sleutelhandvat en vormt alleen een echte sleutel in combinatie met de geheime reeks die is opgeslagen op de U2F-tokenzijde.

Als de id_ecdsa_sk-sleutel in handen van een aanvaller valt, zal hij, om de authenticatie door te geven, ook toegang moeten krijgen tot het hardwaretoken, zonder welke de privésleutel die is opgeslagen in het id_ecdsa_sk-bestand nutteloos is. Bovendien is bij het uitvoeren van handelingen met sleutels (zowel tijdens het genereren als tijdens authenticatie) standaard lokale bevestiging van de fysieke aanwezigheid van de gebruiker vereist. Er wordt bijvoorbeeld voorgesteld om de sensor op het token aan te raken, wat het moeilijk maakt om aanvallen op afstand uitvoeren op systemen met een aangesloten token. Als extra verdedigingslinie kan tijdens de opstartfase van ssh-keygen ook een wachtwoord worden opgegeven om toegang te krijgen tot het sleutelbestand.

De U2F-sleutel kan aan ssh-agent worden toegevoegd via "ssh-add ~/.ssh/id_ecdsa_sk", maar ssh-agent moet worden gebouwd met ondersteuning voor "ecdsa-sk"-sleutels, de libsk-libfido2-laag moet aanwezig zijn en de agent moet draaien op het systeem waarmee het token is verbonden.
Er is een nieuw sleuteltype “ecdsa-sk” toegevoegd omdat het formaat van OpenSSH ecdsa-sleutels verschilt van het U2F-formaat voor digitale ECDSA-handtekeningen in de aanwezigheid van extra velden.

Bron: opennet.ru

Voeg een reactie