Come posso determinare se la chiave SSH di qualcuno contiene una passphrase vuota?


44

Alcuni dei miei sistemi Linux e FreeBSD hanno dozzine di utenti. Il personale utilizzerà questi nodi "gateway ssh" per SSH in altri server interni.

Siamo preoccupati che alcune di queste persone utilizzino una chiave SSH privata non crittografata (una chiave senza passphrase . Ciò è negativo , perché se un cracker avesse mai accesso al proprio account su questa macchina, potrebbe rubare la chiave privata e ora avere accesso a qualsiasi macchina che utilizza la stessa chiave. Per motivi di sicurezza, richiediamo a tutti gli utenti di crittografare le loro chiavi SSH private con una passphrase.

Come posso sapere se una chiave privata non è crittografata (ad es. Non contiene una passphrase)? Esiste un metodo diverso per farlo su una chiave corazzata ASCII rispetto a una chiave corazzata non ASCII?

Aggiornare:

Per chiarire, supponiamo di avere un accesso da superutente sulla macchina e di poter leggere le chiavi private di tutti.


2
grumble ssh-agent grumble Non dovrebbero esserci chiavi private sul gateway.
derobert,

Alcune note pedanti: - Gli utenti hanno spesso una passphrase scadente . - Gli utenti possono modificare le passphrase. - L'utente può memorizzare le proprie chiavi in ​​più punti. - È probabile che gli utenti utilizzino l'agente ssh in modo da poter sbloccare la chiave una volta, per esempio sul proprio laptop.
Ben Hyde,

Risposte:


59

Bene, le chiavi private OpenSSH con passphrase vuote non sono in realtà crittografate.

Le chiavi private crittografate vengono dichiarate come tali nel file della chiave privata. Per esempio:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,7BD2F97F977F71FC

BT8CqbQa7nUrtrmMfK2okQLtspAsZJu0ql5LFMnLdTvTj5Sgow7rlGmee5wVuqCI
/clilpIuXtVDH4picQlMcR+pV5Qjkx7BztMscx4RCmcvuWhGeANYgPnav97Tn/zp
...
-----END RSA PRIVATE KEY-----

Quindi qualcosa del genere

# grep -L ENCRYPTED /home/*/.ssh/id_[rd]sa

dovrebbe fare il trucco.


3
@ jmanning2k: ho appena creato una chiave privata RSA senza passphrase e non contiene la stringa "Crittografia: nessuna".
Stefan Lasiewski,

@ jmanning2k: il -Lflag elenca solo i nomi dei file che non corrispondono al modello. Quindi questa risposta è corretta da sola.
bahamat,

Rimango corretto, commento rimosso per chiarezza. Per la cronaca, ho copiato alcuni file di chiavi private Putty, che leggono "Crittografia: nessuna".
jmanning2k,

2
o stringa OPENSSH: vedi tedunangst.com/flak/post/…
Jack Wasey,

10

Ho cercato dappertutto questo e non ho mai trovato una risposta soddisfacente, ma sono riuscito a costruirne una, quindi ...

Nota che questo aggiornerà il file se funziona, quindi se stai cercando di non essere notato dagli utenti di cui stai testando le chiavi, potresti voler prima copiare la chiave. OTOH, dato che hai appena catturato il tuo utente con una chiave senza password, forse non ti importa se lo notano. : D

$ ssh-keygen -p -P '' -N '' -f ~/.ssh/KEYTEST
Key has comment '/home/rlpowell/.ssh/KEYTEST'
Your identification has been saved with the new passphrase.
$ echo $?
0

$ ssh-keygen -p -P '' -N '' -f ~/.ssh/KEYTEST
Bad passphrase.
$ echo $?
1

3
Perché non -N ''invece in modo che la passphrase rimanga sempre invariata?
Tratta bene le tue mod dal

facepalm È perfetto, grazie mille.
rlpowell,

+1 perché questa soluzione funziona anche con il nuovo formato di chiave privata di SSH.
Sebastian Krysmanski,

8

Se hai accesso alla chiave privata, suppongo, puoi usarla senza passphrase per autenticarti con la chiave pubblica. Se funziona, sai che non ha passphrase. Se così fosse, ti darebbe un messaggio di errore.

Se non si ha accesso alla chiave privata, dubito che sia possibile rilevarlo. Lo scopo della passphrase è "sbloccare" la chiave privata, non ha alcuna funzione rispetto alla chiave pubblica.

In effetti, se così fosse, renderebbe il sistema meno sicuro. Si potrebbe usare la chiave pubblica, disponibile per provare a montare la forza bruta o altri attacchi che tentano di decifrare la passphrase.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.