it-swarm-eu.dev

Conseguenze di manomissione / etc / ssh / moduli

Quali sono le conseguenze se un attaccante è in grado di modificare il /etc/ssh/moduli file?

32
vergoglio

Il /etc/ssh/moduli Contiene i parametri di gruppo pre-generati per Diffie-Hellman . Uno scambio di chiavi DH si verifica nelle prime fasi della connessione SSH e genera la chiave condivisa segreta che verrà utilizzata per crittografare i dati. DH funziona in un dato gruppo ; tecnicamente, un modulo p (un grande numero primo) e un generatore g: il generatore è nel 1..p-1 intervallo e dovrebbe essere tale che il suo ordine sia un multiplo di un primo "abbastanza grande" q. L'ordine k è il numero intero diverso da zero più piccolo tale che pk = 1 mod p. Logaritmo discreto , e quindi DH, può essere sfondato con uno sforzo che dipende sia da p sia dal più grande fattore primo di k = (che chiameremo q):

  • Esiste una variante del Number Field Sieve che rompe il logaritmo discreto se p non è abbastanza grande; il record corrente è per un 530-bit prime e si presume che i primi 1024-bit siano ancora sicuri [ Ed. Non più, vedi vari post sul blog su Diffie-Hellman del 15-10-2015.] e i numeri primi a 2048 bit saranno al sicuro per il prossimo futuro.

  • Gli algoritmi logaritmici discreti generici si applicano con un costo proporzionale alla radice quadrata del più grande fattore primo di k; quindi è importante (e sufficiente) che k ammetta un fattore primo di almeno 200 bit se si vuole ottenere una "sicurezza a 100 bit".

Un utente malintenzionato che può modificare /etc/ssh/moduli Potrebbe tentare di sostituire i parametri del gruppo Nice DH con altri parametri del gruppo che guarda bene ma rendere più facile (o addirittura facile) l'interruzione del DH per lui. Esistono principalmente due modi per farlo:

  1. Scegli un primo p e un generatore g tale che l'ordine k di g = è un prodotto di soli numeri primi piccoli. Questo può essere fatto facilmente; per esempio, inizia generando un gruppo di piccoli numeri primi (diciamo al massimo 80 bit ciascuno); quindi prova prodotti casuali di tali numeri primi: per ogni prodotto r, calcola p = 2r + 1 e vedi se questo produce un numero primo. Se lo fa, allora p è tale che any generator g modulo che prime implicherà un debole Diffie-Hellman.

  2. Genera uno speciale primo p in modo che NFS sia più veloce per quello specifico p. Vedi questo articolo per alcuni retroscena teorici.

Il file /etc/ssh/moduli Non contiene l'ordine del generatore suggerito, quindi non puoi semplicemente verificare se quell'ordine è primo e corrisponde a g. Tuttavia, potresti prendere p-1 e applicare metodo di fattorizzazione ellittica-curva su di esso: questo troverà tutti i piccoli fattori primi in p- 1, e quindi ti permette di verificare che l'ordine di g non sia stato indebolito ( k è necessariamente un divisore o p-1). Pertanto, l'indebolimento del primo tipo può essere rilevato (anche se non nel giro di pochi secondi). Di conseguenza, gli aggressori a cui non piace il rischio di esposizione (in particolare le agenzie di spionaggio) si asterranno dall'utilizzare quel metodo.

Il secondo tipo di indebolimento, tuttavia, è difficile da rilevare. Quindi si deve presumere che un utente malintenzionato che potrebbe in qualche modo corrompere il file /etc/ssh/moduli (ad esempio modificando il file come distribuito con OpenSSH , attraverso qualche corruzione di sviluppatori OpenSSH) could, potenzialmente, hanno introdotto una backdoor che gli consente di decifrare le tue connessioni SSH a piacimento (connessioni SSH al server, poiché i parametri del gruppo sono scelti dal server). Dato che la matematica coinvolta non è semplice, quell'attaccante sarebbe almeno un attaccante competente.

L'unica buona contromisura è quella di sostituire i contenuti /etc/ssh/moduli Con valori che conosci per essere corretti e non malizioso, in virtù di averli generati voi stessi. ssh-keygen Può farlo (vedi pagina man ). Potresti anche farlo con un codice personalizzato (ad es. Con la classe BigInteger di Java, si tratta al massimo di 50 righe di codice).

In alternativa, utilizzare i parametri del gruppo DSA (funzionano anche) che sono stati generati come descritto nell'Allegato A di FIPS 186-4 : questi sono numeri nulla-in-manica perché i valori candidati per p sono ottenuti attraverso un PRNG deterministico e completamente specificato, che presumibilmente non può essere costretto a creare un "numero primo speciale" che semplifichi NFS. Sarebbe stato meglio se gli sviluppatori OpenSSH avessero usato un metodo di generazione così verificabile per cominciare.

41
Thomas Pornin