Як я можу визначити, чий SSH ключ містить порожню парольну фразу?


44

Деякі з моїх систем Linux та FreeBSD мають десятки користувачів. Персонал буде використовувати ці "ssh шлюзи" вузли для SSH на інших внутрішніх серверах.

Ми стурбовані тим, що деякі з цих людей використовують незашифрований приватний ключ SSH (Ключ без парольної фрази . Це погано , тому що якщо хакер коли-небудь отримав доступ до свого облікового запису на цій машині, він може вкрасти приватний ключ і тепер мати доступ на будь-якій машині, яка використовує цей самий ключ. З міркувань безпеки ми вимагаємо від усіх користувачів шифрувати свої приватні SSH-ключі за допомогою парольної фрази.

Як я можу дізнатися, чи приватний ключ не зашифрований (наприклад, не містить парольну фразу)? Чи є інший метод зробити це на броньованому ключі ASCII проти не броньованому ASCII?

Оновлення:

Для уточнення припустімо, що у мене на машині є доступ до суперпользователя, і я можу прочитати приватні ключі всіх.


2
grumble ssh-agent grumble На шлюзі не повинно бути приватних ключів.
дероберт

Кілька педантичних зауважень: - Користувачі часто мають погану фразу . - Користувачі можуть змінювати парольні фрази. - Користувач може зберігати свої ключі в декількох місцях. - Користувачі, ймовірно, використовуватимуть агент ssh, щоб вони могли розблокувати ключ один раз, скажімо, на своєму ноутбуці.
Бен Хайд

Відповіді:


59

Ну, приватні ключі OpenSSH з порожніми парольними фразами насправді не шифруються.

Зашифровані приватні ключі декларуються як такі у файлі приватного ключа. Наприклад:

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

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

Так щось на кшталт

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

повинен зробити трюк.


3
@ jmanning2k: Я щойно створив приватний ключ RSA без парольної фрази, і він не містить рядка "Шифрування: немає".
Стефан Ласєвський

@ jmanning2k: -Lпрапор перераховує лише імена файлів, які не відповідають шаблону. Тож ця відповідь правильна сама по собі.
Багамат

Я виправлений, коментар видалений для наочності. Для запису у мене скопійовано кілька файлів приватних ключів Putty, які читають "Шифрування: немає".
jmanning2k

2
або рядок OPENSSH: див. tedunangst.com/flak/post/…
Джек Уейсі

10

Я все це переглянув і не знайшов задовольняючої відповіді, але мені вдалося сконструювати його, так що ...

Зауважте, що це оновить файл, якщо він працює, тому якщо ви намагаєтесь не помітити користувачів, чиї ключі ви тестуєте, ви можете спершу скопіювати ключ. OTOH, оскільки ви просто спіймали свого користувача без паролем, можливо, вам все одно, якщо вони помітять. : 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
Чому б -N ''натомість не зробити так, щоб пропуск завжди залишався незмінним?
ставитесь до своїх модників добре

facepalm Це ідеально, дуже дякую.
rlpowell

+1, оскільки це рішення працює навіть із новим форматом приватного ключа SSH.
Себастьян Крисманський

8

Якщо у вас є доступ до приватного ключа, я думаю, ви можете використовувати його без парольної фрази для автентифікації проти відкритого ключа. Якщо це працює, ви знаєте, що у нього немає парольної фрази. Якби він мав, він видав би повідомлення про помилку.

Якщо у вас немає доступу до приватного ключа, я сумніваюся, ви зможете це виявити. Метою парольної фрази є "розблокувати" приватний ключ, він не має функції щодо відкритого ключа.

Насправді, якби це було, це зробило б систему менш безпечною. Можна скористатися відкритим ключем, який доступний, щоб спробувати підняти грубу силу чи інші атаки, намагаючись зламати пароль.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.