Bagaimana saya bisa menentukan apakah kunci SSH seseorang berisi frasa sandi kosong?

44

Beberapa sistem Linux & FreeBSD saya memiliki lusinan pengguna. Staf akan menggunakan node "ssh gateway" ini ke SSH ke server internal lainnya.

Kami khawatir beberapa orang ini menggunakan kunci SSH pribadi yang tidak dienkripsi (kunci tanpa frasa sandi . Ini buruk , karena jika cracker pernah mendapatkan akses ke akun mereka di mesin ini, mereka dapat mencuri kunci pribadi dan sekarang memiliki akses ke mesin apa pun yang menggunakan kunci yang sama ini. Untuk alasan keamanan, kami mengharuskan semua pengguna untuk mengenkripsi kunci SSH pribadi mereka dengan frasa sandi.

Bagaimana saya bisa tahu jika kunci pribadi tidak dienkripsi (mis. Tidak mengandung frasa sandi)? Apakah ada metode yang berbeda untuk melakukan ini pada kunci ASCII-lapis baja vs kunci non-ASCII-lapis baja?

Memperbarui:

Untuk memperjelas, anggap saya memiliki akses superuser pada mesin dan saya bisa membaca kunci pribadi semua orang.

Stefan Lasiewski
sumber
2
menggerutu ssh-agent menggerutu Seharusnya tidak ada kunci pribadi di gateway.
derobert
Beberapa catatan menarik: - Pengguna sering memiliki frasa sandi yang buruk . - Pengguna dapat mengubah frasa sandi. - Pengguna dapat menyimpan kunci mereka di banyak tempat. - Pengguna cenderung menggunakan ssh agent sehingga mereka dapat membuka kunci sekali, misalnya di laptop mereka.
Ben Hyde

Jawaban:

59

Nah, kunci privat OpenSSH dengan frasa sandi kosong sebenarnya tidak dienkripsi.

Kunci pribadi terenkripsi dinyatakan seperti itu dalam file kunci pribadi. Misalnya:

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

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

Jadi sesuatu seperti itu

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

harus melakukan trik.

kepala kode
sumber
3
@ jmanning2k: Saya baru saja membuat kunci pribadi RSA tanpa frasa sandi, dan itu tidak mengandung string 'Enkripsi: tidak ada'.
Stefan Lasiewski
@ jmanning2k: -Lflag hanya mencantumkan nama file yang tidak cocok dengan polanya. Jadi jawaban ini benar sendiri.
bahamat
Saya berdiri dikoreksi, komentar dihapus untuk kejelasan. Sebagai catatan, saya memiliki beberapa file kunci pribadi Dempul disalin, yang membaca 'Enkripsi: tidak ada'.
jmanning2k
2
atau string OPENSSH: lihat tedunangst.com/flak/post/…
Jack Wasey
10

Saya mencari-cari ini dan tidak pernah menemukan jawaban yang memuaskan, tetapi saya berhasil membangunnya, jadi ...

Perhatikan bahwa ini akan memperbarui file jika berfungsi, jadi jika Anda mencoba untuk tidak diperhatikan oleh pengguna yang kunci Anda uji, Anda mungkin ingin menyalin kunci terlebih dahulu. OTOH, karena Anda baru saja menangkap pengguna Anda dengan kunci tanpa kata sandi, mungkin Anda tidak peduli jika mereka menyadarinya. : 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
terima kasih
sumber
3
Mengapa tidak -N ''sebaliknya sehingga frasa sandi selalu tidak berubah?
perlakukan mod Anda dengan baik
facepalm Itu sempurna, terima kasih banyak.
rlpowell
+1 karena solusi ini bahkan berfungsi dengan format kunci privat baru SSH.
Sebastian Krysmanski
8

Jika Anda memiliki akses ke kunci pribadi, saya kira, Anda dapat menggunakannya tanpa frasa sandi untuk mengautentikasi terhadap kunci publik. Jika ini berhasil, Anda tahu itu tidak memiliki frasa sandi. Jika sudah, itu akan memberi Anda pesan kesalahan.

Jika Anda tidak memiliki akses ke kunci pribadi, saya ragu Anda dapat mendeteksi ini. Tujuan passphrase adalah untuk "membuka" kunci pribadi, itu tidak memiliki fungsi sehubungan dengan kunci publik.

Bahkan, jika mau, itu akan membuat sistem kurang aman. Seseorang dapat menggunakan kunci publik, yang tersedia untuk mencoba memasang brute force atau serangan lain yang mencoba memecahkan kata sandi.

txwikinger
sumber