Nella Sezione 6 di Panoramica di Universal 2nd Factor (U2F) , dove vengono discussi gli attacchi MITM - vicino alla fine della sezione, si legge:
It is still possible to MITM a user's authentication to a site if the MITM is
a. able to get a server cert for the actual origin name issued by a valid CA, and
b. ChannelIDs are NOT supported by the browser.
But this is quite a high bar.
Non sono convinto che questa sia una battuta così alta. Abbiamo visto più di alcuni casi in cui gli hacker sono stati in grado di ottenere falso ma fidato Certificati firmati da CA . Inoltre, TLS ChannelID non è stato ampiamente adottato dalla maggior parte dei browser e server (infatti, la proposta di proposta RFC è scaduta nel 2013). Inoltre, anche se TLS ChannelID è supportato da entrambi gli endpoint, un utente malintenzionato MITM attivo potrebbe impedire l'utilizzo di TLS ChannelID tramite un attacco di downgrade durante il messaggio ClientHello.
Apprezzo il salto che FIDO ha compiuto per ridurre la dipendenza dalle password e rendere l'autenticazione più sicura e meno ingombrante per gli utenti. Ma sembra che abbia fatto ben poco per proteggersi da un attacco MITM in cui un aggressore è in grado di mettere le mani su un certificato falso ma attendibile, e dobbiamo continuare a dare piena fiducia e fiducia nelle CA, che hanno un storia di lasciarci andare. Ovviamente, anche il protocollo di autenticazione più sicuro è inutile se la connessione può essere compromessa da un aggressore MITM attivo.
Altri protocolli di autenticazione basati su chiavi (come SSH) proteggono dagli attacchi MITM tramite la chiave pubblica integrata nel protocollo. Con SSH, ad esempio, i client memorizzano le chiavi pubbliche dei server a cui sono connessi. Immediatamente dopo aver effettuato una connessione, durante lo scambio delle chiavi e prima che venga tentata qualsiasi autenticazione client, il client verifica che sia effettivamente connesso al server previsto, verificando che la chiave pubblica utilizzata dal server sia uguale a quella su file per quel server e assicurandosi che il server sia in possesso della chiave privata associata alla chiave pubblica tramite alcune operazioni di crittografia che richiedono la chiave privata.
Ovviamente, HPKP (senza FIDO) può essere usato per bloccare i certificati SSL / TLS dei siti nel browser, ma questo ha il suo propria serie di problemi .
Sono curioso di sapere perché gli architetti di FIDO UAF e U2F non abbiano portato il protocollo un ulteriore passo avanti e abbiano incorporato un metodo di blocco della chiave pubblica all'interno del protocollo (forse utilizzando diversi tipi di chiavi rispetto a quelli utilizzati per la connessione SSL / TLS ), in modo che i client possano assicurarsi di collegarsi al server legittimo prima di tentare l'autenticazione, a SSH. Qualcuno si preoccuperebbe di ipotizzare?