OpenSSH aggiunge il supporto per l'autenticazione universale a due fattori

Alla base di codice OpenSSH aggiunto supporto sperimentale per l'autenticazione a due fattori utilizzando dispositivi che supportano il protocollo U2F, sviluppato dall'alleanza FIDO. U2F consente la creazione di token hardware a basso costo per verificare la presenza fisica dell'utente, interagendo con lui tramite USB, Bluetooth o NFC. Tali dispositivi vengono promossi come mezzo di autenticazione a due fattori sui siti Web, sono già supportati dai principali browser e sono prodotti da diversi produttori, tra cui Yubico, Feitian, Thetis e Kensington.

Per interagire con i dispositivi che confermano la presenza dell'utente, in OpenSSH è stata aggiunta una nuova tipologia di chiavi"[email protected]" ("ecdsa-sk"), che utilizza l'algoritmo di firma digitale ECDSA (Elliptic Curve Digital Signature Algorithm) con curva ellittica NIST P-256 e hash SHA-256. Le procedure per interagire con i token vengono inserite in una libreria intermedia, che viene caricata in modo simile alla libreria per il supporto PKCS#11 ed è un wrapper sopra la libreria libfido2, che fornisce strumenti per la comunicazione con token tramite USB (sono supportati i protocolli FIDO U2F/CTAP 1 e FIDO 2.0/CTAP 2). Libreria intermedia libsk-libfido2 preparata dagli sviluppatori OpenSSH è incluso nel core libfido2, così come Autista NASCOSTO per OpenBSD.

Per abilitare U2F, puoi utilizzare una nuova sezione della base di codice da deposito OpenSSH e il ramo HEAD della libreria libfido2, che include già il livello necessario per OpenSSH.
Libfido2 supporta OpenBSD, Linux, macOS e Windows.

Per autenticarsi e generare una chiave, è necessario impostare la variabile d'ambiente SSH_SK_PROVIDER, indicando in essa il percorso di libsk-libfido2.so (export SSH_SK_PROVIDER=/path/to/libsk-libfido2.so), oppure definire la libreria tramite SecurityKeyProvider impostazione, quindi eseguire "ssh-keygen -t ecdsa-sk" oppure, se le chiavi sono già state create e configurate, connettersi al server utilizzando "ssh". Quando esegui ssh-keygen, la coppia di chiavi generata verrà salvata in "~/.ssh/id_ecdsa_sk" e potrà essere utilizzata in modo simile ad altre chiavi.

La chiave pubblica (id_ecdsa_sk.pub) deve essere copiata sul server nel file Authorized_keys. Lato server viene verificata solo la firma digitale e l'interazione con i token viene eseguita sul lato client (non è necessario installare libsk-libfido2 sul server, ma il server deve supportare il tipo di chiave “ecdsa-sk”) . La chiave privata generata (id_ecdsa_sk) è essenzialmente un handle di chiave, che forma una chiave reale solo in combinazione con la sequenza segreta memorizzata sul lato token U2F.

Se la chiave id_ecdsa_sk cade nelle mani di un attacker, per superare l'autenticazione dovrà anche accedere al token hardware, senza il quale la chiave privata memorizzata nel file id_ecdsa_sk è inutile. Inoltre, per impostazione predefinita, quando si eseguono operazioni con le chiavi (sia durante la generazione che durante l'autenticazione), è richiesta la conferma locale della presenza fisica dell'utente, ad esempio, si propone di toccare il sensore sul token, il che rende difficile effettuare attacchi remoti ai sistemi con un token connesso. Come ulteriore linea di difesa, è possibile specificare una password anche durante la fase di avvio di ssh-keygen per accedere al file della chiave.

La chiave U2F può essere aggiunta a ssh-agent tramite "ssh-add ~/.ssh/id_ecdsa_sk", ma ssh-agent deve essere creato con il supporto per le chiavi "ecdsa-sk", deve essere presente il livello libsk-libfido2 e l'agente deve essere in esecuzione sul sistema a cui è connesso il token.
È stato aggiunto un nuovo tipo di chiave “ecdsa-sk” poiché il formato delle chiavi ecdsa di OpenSSH differisce dal formato U2F per le firme digitali ECDSA per la presenza di campi aggiuntivi.

Fonte: opennet.ru

Aggiungi un commento