Wie kann ich feststellen, ob der SSH-Schlüssel einer Person eine leere Passphrase enthält?

44

Einige meiner Linux- und FreeBSD-Systeme haben Dutzende Benutzer. Die Mitarbeiter verwenden diese "ssh gateway" -Knoten, um SSH auf andere interne Server zu übertragen.

Wir sind besorgt, dass einige dieser Personen einen unverschlüsselten privaten SSH-Schlüssel verwenden (Ein Schlüssel ohne Passphrase . Dies ist schlecht , da ein Cracker, falls er jemals Zugriff auf sein Konto auf diesem Computer erhalten sollte, den privaten Schlüssel stehlen und nun Zugriff haben könnte Aus Sicherheitsgründen müssen alle Benutzer ihre privaten SSH-Schlüssel mit einer Passphrase verschlüsseln.

Wie kann ich feststellen, ob ein privater Schlüssel nicht verschlüsselt ist (z. B. enthält er keine Passphrase)? Gibt es eine andere Methode für einen ASCII-geschützten Schlüssel als für einen nicht-ASCII-geschützten Schlüssel?

Aktualisieren:

Nehmen Sie zur Verdeutlichung an, dass ich Superuser-Zugriff auf dem Computer habe und die privaten Schlüssel aller Benutzer lesen kann.

Stefan Lasiewski
quelle
2
meckern ssh-agent meckern Auf dem Gateway sollten sich keine privaten Schlüssel befinden.
Derobert
Ein paar pedantische Anmerkungen: - Benutzer haben oft eine schlechte Passphrase . - Benutzer können Passphrasen ändern. - Der Benutzer kann seine Schlüssel an mehreren Orten aufbewahren. - Benutzer verwenden wahrscheinlich ssh agent, damit sie den Schlüssel beispielsweise auf ihrem Laptop einmal entsperren können.
Ben Hyde

Antworten:

59

Nun, private OpenSSH-Schlüssel mit leeren Passphrasen werden tatsächlich nicht verschlüsselt.

Verschlüsselte private Schlüssel werden in der privaten Schlüsseldatei als solche deklariert. Zum Beispiel:

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

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

Also sowas wie

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

sollte den Trick machen.

Codehead
quelle
3
@ jmanning2k: Ich habe gerade einen privaten RSA-Schlüssel ohne Passphrase erstellt und er enthält nicht die Zeichenfolge 'Verschlüsselung: keine'.
Stefan Lasiewski
@ jmanning2k: Das -LFlag listet nur Dateinamen auf, die nicht mit dem Muster übereinstimmen. Diese Antwort ist also für sich genommen richtig.
Bahamat
Ich stehe korrigiert, Kommentar zur Klarheit entfernt. Für die Aufzeichnung habe ich ein paar private Putty-Schlüsseldateien kopiert, die "Encryption: none" lauten.
jmanning2k
2
oder string OPENSSH: siehe tedunangst.com/flak/post/…
Jack Wasey
10

Ich habe mich darum gekümmert und nie eine befriedigende Antwort gefunden, aber ich habe es geschafft, eine zu konstruieren, also ...

Beachten Sie, dass dadurch die Datei aktualisiert wird, wenn sie funktioniert. Wenn Sie also versuchen, von den Benutzern, deren Schlüssel Sie testen, nicht bemerkt zu werden, möchten Sie möglicherweise zuerst den Schlüssel kopieren. OTOH, da Sie Ihren Benutzer gerade mit einem kennwortlosen Schlüssel abgefangen haben, ist es Ihnen vielleicht egal, ob sie es bemerken. : 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
rlpowell
quelle
3
Warum nicht -N ''stattdessen, damit die Passphrase immer unverändert bleibt?
Behandle deine Mods gut
facepalm Das ist perfekt, vielen Dank.
Rlpowell
+1, da diese Lösung sogar mit dem neuen privaten Schlüsselformat von SSH funktioniert.
Sebastian Krysmanski
8

Wenn Sie Zugriff auf den privaten Schlüssel haben, können Sie ihn ohne Passphrase verwenden, um sich gegenüber dem öffentlichen Schlüssel zu authentifizieren. Wenn dies funktioniert, wissen Sie, dass es keine Passphrase hat. Wenn dies der Fall wäre, würden Sie eine Fehlermeldung erhalten.

Wenn Sie keinen Zugriff auf den privaten Schlüssel haben, können Sie dies wahrscheinlich nicht feststellen. Die Passphrase dient zum "Entsperren" des privaten Schlüssels, sie hat keine Funktion in Bezug auf den öffentlichen Schlüssel.

In der Tat würde dies das System weniger sicher machen. Man könnte den öffentlichen Schlüssel verwenden, der verfügbar ist, um Brute Force oder andere Angriffe zu starten, die versuchen, die Passphrase zu knacken.

txwikinger
quelle