
Некоторые из моих систем Linux и FreeBSD имеют десятки пользователей. Сотрудники будут использовать эти узлы "ssh gateway" для SSH-подключения к другим внутренним серверам.
Мы обеспокоены тем, что некоторые из этих людей используют незашифрованный закрытый ключ SSH (ключ безпарольная фраза.Это плохо, потому что если взломщик когда-либо получит доступ к их аккаунту на этой машине, он сможет украсть закрытый ключ и теперь иметь доступ к любой машине, которая использует этот же ключ. В целях безопасности мы требуем, чтобы все пользователи шифровали свои закрытые ключи SSH с помощью парольной фразы.
Как узнать, что закрытый ключ не зашифрован (например, не содержит парольной фразы)? Есть ли другой способ сделать это для защищенного ASCII-ключей по сравнению с не защищенным ASCII-ключами?
Обновлять:
Для ясности предположим, что у меня есть права суперпользователя на машине, и я могу прочитать закрытые ключи всех пользователей.
решение1
На самом деле закрытые ключи 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
должно сработать.
решение2
Я искал этот вопрос везде и так и не нашел удовлетворительного ответа, но мне удалось его построить, так что...
Обратите внимание, что это обновит файл, если он сработает, поэтому, если вы пытаетесь остаться незамеченными пользователями, чьи ключи вы тестируете, вы можете сначала скопировать ключ. С другой стороны, поскольку вы только что поймали своего пользователя с ключом без пароля, возможно, вам все равно, заметят ли они. :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
Если у вас есть доступ к закрытому ключу, я полагаю, вы можете использовать его без парольной фразы для аутентификации по открытому ключу. Если это сработает, вы знаете, что у него нет парольной фразы. Если бы она была, он бы выдал вам сообщение об ошибке.
Если у вас нет доступа к закрытому ключу, я сомневаюсь, что вы сможете это обнаружить. Целью парольной фразы является «разблокировка» закрытого ключа, она не имеет никакой функции по отношению к открытому ключу.
На самом деле, если бы это было так, это сделало бы систему менее безопасной. Можно было бы использовать открытый ключ, который доступен, чтобы попытаться организовать грубую силу или другие атаки, пытаясь взломать парольную фразу.