Mengapa otentikasi kata sandi SSH merupakan risiko keamanan?

68

Sebagian besar panduan untuk konfigurasi OpenSSH menyarankan untuk menonaktifkan otentikasi kata sandi yang mendukung otentikasi berbasis kunci. Tetapi menurut saya otentikasi kata sandi memiliki keunggulan yang signifikan: kemampuan untuk terhubung dari mana saja tanpa kunci. Jika digunakan selalu dengan kata sandi yang kuat, ini seharusnya bukan risiko keamanan. Atau haruskah itu?

Septagram
sumber
2
Kata sandi adalah otentikasi satu faktor yang dapat diendus, ditebak, dan diputar ulang. Kunci adalah (mungkin) dua faktor. Dapat masuk dari mana saja hanya dengan satu faktor tidak dapat diterima pada beberapa sistem.
Alex Holst

Jawaban:

25

Ada pro dan kontra untuk otentikasi berbasis pw atau kunci.

Dalam beberapa kasus, misalnya, otentikasi berbasis kunci kurang aman daripada otentikasi kata sandi. Dalam kasus lain, berbasiskan-nya yang kurang aman. Dalam beberapa kasus, yang satu lebih nyaman, yang lain kurang.

Itu semua bermuara pada ini: Ketika Anda melakukan otentikasi berbasis kunci, Anda harus mengamankan kunci Anda dengan frasa sandi. Kecuali Anda menjalankan ssh-agent (ssh-agent membebaskan Anda dari memasukkan frasa sandi setiap saat), Anda tidak memperoleh apa-apa dari segi kenyamanan. Keamanan tidak dapat diperdebatkan: vektor serangan sekarang bergeser dari server ke ANDA, atau akun Anda, atau mesin pribadi Anda, (...) - yang mungkin atau mungkin tidak lebih mudah dipatahkan.

Pikirkan di luar kotak ketika memutuskan ini. Apakah Anda mendapatkan atau kehilangan dalam hal keamanan tergantung pada seluruh lingkungan Anda dan tindakan lain.

sunting: Oh, baru saja melihat bahwa Anda berbicara tentang server rumah. Saya berada dalam situasi yang sama, "kata sandi" atau "USB stick dengan kunci di atasnya" selalu bersama saya? Saya memilih yang pertama tetapi mengubah port mendengarkan SSH menjadi sesuatu yang berbeda dari 22. Itu menghentikan semua skrip kiddies brute yang memaksa seluruh rentang jaringan.

Roma
sumber
Mengubah port SSH dari 22 mungkin bukan ide yang baik sama sekali dalam banyak kasus. adayinthelifeof.nl/2012/03/12/…
Tymek
75

Menggunakan kunci ssh memang memiliki satu fitur unik dibandingkan dengan login kata sandi: Anda dapat menentukan perintah yang diizinkan. Ini dapat dilakukan dengan memodifikasi ~/.ssh/authorized_keysfile di server.

Sebagai contoh,

command="/usr/local/bin/your_backup_script.sh", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...

hanya akan mengizinkan perintah `/usr/local/bin/your_backup_script.sh" dengan kunci itu.

Anda juga dapat menentukan host yang diizinkan untuk kunci:

from="yourclient,yourotherclient", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...

Atau kombinasikan keduanya:

from="yourbackupserver", command="/usr/local/bin/your_backup_script.sh", ssh-rsa auiosfSAFfAFDFJL1234214DFAfDFa...

Dengan kunci, Anda juga dapat memberikan akses sementara ke beberapa pengguna (misalnya, seorang konsultan) ke server tanpa mengungkapkan kata sandi untuk akun tersebut. Setelah konsultan menyelesaikan pekerjaannya, kunci sementara dapat dihapus.

Janne Pikkarainen
sumber
Tip yang sangat bermanfaat.
Sachin Divekar
3
Lebih jauh lagi bahwa menggunakan Keys adalah seperti memiliki kata sandi 2000 karakter yang panjang (baik secara teknis kekuatannya bahkan lebih) dibandingkan dengan apa yang dapat Anda
masukkan
3
Dua tips yang sangat berguna tentang otentikasi SSH, tetapi benar-benar tidak menjawab pertanyaan untuk saya ...
MikeMurko
Jika Anda ingin memaksa pengguna yang diautentikasi kata sandi melalui perintah tertentu, ubah shell login-nya. Juga, "memberikan akses sementara tanpa mengungkapkan kata sandi" adalah ide yang sangat buruk. Ada ratusan cara berbeda untuk menjaga akses untuk nanti.
b0fh
Paragraf terakhir saja menjawab pertanyaan IMO - kunci yang memungkinkan pencabutan granular, sementara dengan kata sandi Anda perlu memberi tahu semua orang bahwa Anda mengubahnya.
Bersepeda
48

Anda bisa mendapatkan yang terbaik dari kedua dunia dengan hanya membolehkan otentikasi kata sandi dari dalam jaringan Anda. Tambahkan yang berikut ini ke ujung Anda sshd_config:

PasswordAuthentication no
Match Address 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
    PasswordAuthentication yes
MikeyB
sumber
7

Anda telah sebagian menjawab pertanyaan Anda - semakin banyak penyerang yang dapat terhubung, semakin banyak kemungkinan dia harus membobol server Anda dengan bruteforcing (pertimbangkan DDoS).

Bandingkan juga panjang kata sandi Anda dengan ukuran kunci (biasanya ribuan bit).

Martin Vejmelka
sumber
4
Entropi 96-bit berarti kata sandi 80-karakter, jika ditulis dalam bahasa Inggris; 15 karakter jika itu omong kosong acak dari set karakter yang dapat dicetak. apakah Anda cukup yakin bahwa kata sandi ssh Anda panjang / kuat?
MadHatter
3
Jika Anda memiliki banyak kata sandi dengan entropi 96-bit yang tidak rentan terhadap serangan Kamus, Anda mungkin perlu menggunakan beberapa jenis perangkat lunak manajemen kata sandi, sehingga Anda secara efektif kehilangan elemen di mana-mana yang dapat diakses menggunakan kata sandi .
Nick Downton
5
@SachinDivekar yaitu 96 bit entropi hanya jika menggunakan kata sandi acak dari set [a-zA-Z], bukan jika itu adalah kata-kata bahasa Inggris.
Jaap Eldering
16
@NickDownton - Anda dapat memiliki kata sandi yang panjang dan bagus tanpa menggunakan perangkat lunak tombol. Sesuatu seperti mywifesnameisangelaandshehasanicebutttidak dapat diserang serangan kamus, sangat kuat, dan sangat mudah diingat, tetapi tidak mungkin ditebak. Dan itu datang dengan bonus jika brownies menunjuk jika Anda perlu memberikan kata sandi Anda kepada istri Anda.
Mark Henderson
7
Maaf, Mark, tapi itu salah. Frasa sandi yang Anda berikan memiliki 37 karakter dan karenanya secara kasar 44 bit entropi, yang lebih lemah dari 7 karakter yang dapat dicetak acak, dan sangat dapat diserang. Baca artikel Wikipedia tentang karya Claude Shannon untuk detailnya, tetapi hasilnya adalah bahasa Inggris tertulis sangat dapat diprediksi - mis., Setelah "mywifesname", kata "is" hampir dijamin. Untuk kata sandi yang kuat yang melibatkan kata-kata, empat kata acak yang dirangkai dari kamus akan memberi Anda 10 ** 23 kemungkinan, yaitu sekitar 77 bit entropi; masih tidak bagus, tapi tidak buruk.
MadHatter
7

Ketika Anda masuk dengan kata sandi, Anda mengirimkan kata sandi Anda ke server. Ini berarti bahwa operator server dapat memodifikasi SSHD untuk mendapatkan akses ke kata sandi Anda. Dengan otentikasi kunci publik, mereka tidak dapat memperoleh kunci pribadi Anda karena hanya kunci publik Anda yang masuk ke server.

Ramon
sumber
2
Ini sangat relevan ketika Anda terhubung ke server yang salah karena kesalahan ketik. Misalnya, pada suatu saat, .cg adalah wildcard yang menunjuk ke satu mesin dengan ssh diaktifkan. Kapan saja Anda salah ketik .cg untuk .ch, Anda akan berakhir menyambung ke kotak itu dan membocorkan kata sandi Anda ...
b0fh
@ b0fh memang. Sejauh yang saya tahu, ini adalah satu-satunya kerentanan nyata yang diperkenalkan dengan menggunakan kata sandi dengan ssh. Jika seseorang sudah memiliki server yang Anda hubungkan, atau dapat mem-spoof alamat IP yang Anda hubungkan (MITM), Anda sudah kalah.
Hobs
6

ssh keys mencegah man in the middle based attack pada kata sandi Anda.

ketika Anda mencoba masuk dengan kunci, server akan membuat tantangan berdasarkan kunci publik Anda dan mengirimkannya ke klien Anda. yang akan mendekripsi dan membangun respons yang tepat untuk dikirim.

Kunci pribadi Anda tidak pernah dikirim ke server dan siapa pun yang mendengarkan tidak dapat melakukan apa pun kecuali memotong satu sesi itu.

dengan kata sandi, mereka akan memiliki kredensial Anda.

Solusi saya adalah memiliki kunci ssh portabel dalam format yang sesuai pada partisi terenkripsi pada kunci usb. ini memungkinkan saya untuk:
dengan mudah menarik kembali kunci itu jika hilang.
batasi server mana yang memungkinkan saya mengakses
dan masih membawanya

meskipun menginstal perangkat lunak mount adalah menyakitkan (truecrypt)

Tacticus
sumber
1
Ini salah. Segera setelah Anda mengetahui kunci publik server (yang Anda lakukan jika Anda menambahkannya ke cache dan tidak mendapatkan MITM pada koneksi pertama) Anda kebal terhadap serangan MITM. Otentikasi berbasis kunci / kata sandi tidak ada hubungannya dengan itu. Kata sandi tidak pernah dikirim secara jelas melalui kabel, koneksi aman di otentikasi tingkat mesin (apa kunci publik Anda / saya) selalu diatur sebelum otentikasi tingkat pengguna (apa kata sandi Anda / buktikan kepada saya kunci publik ini milik Anda) .
Thomas
3
Thomas, pada kenyataannya banyak orang mengabaikan peringatan tentang perubahan sidik jari. Pubkey auth menjamin perlindungan MITM bahkan jika kunci privat server entah bagaimana dikompromikan atau tipe manusia "ya" linglung: Penyerang harus memilih antara tidak dapat melihat lalu lintas dan mengirim kunci publik yang tidak akan masuk, yang merupakan menang.
Score_Under
5
Dan kepada penjawab: Anda tidak perlu menggunakan truecrypt, openssh private key dilengkapi dengan enkripsi berbasis kata sandi opsional mereka sendiri.
Score_Under
5

Ini adalah trade-off, seperti yang dikatakan @MartinVejmelka.

Alasan Anda menggunakan autent berbasis kunci adalah bahwa kuncinya jauh di atas memaksa saat ini atau dalam waktu dekat memaksa bahwa Anda harus berasal dari PC Anda sendiri, atau memiliki kunci pada stik USB atau sejenisnya.

Kata sandi memiliki masalah berikut:

  • Jika pendek, maka bisa dipaksakan
  • Jika panjang, mudah dilupakan
  • Itu bisa berselancar bahu

Kuncinya adalah urutan besarnya lebih lama, dan tidak ditampilkan pada titik mana pun sehingga menghindari tiga masalah ini.

Rory Alsop
sumber
tetapi menggunakan file kunci menambah masalah kehilangan pen drive, atau penyimpanan apa pun yang Anda gunakan.
João Portela
1
pada titik mana kunci yang hilang dapat dihapus, dan kunci baru ditambahkan. Dengan kata sandi (terutama kata sandi bersama) ini dapat membuat saya sakit, dan melibatkan banyak keluhan.
SplinterReality
Salah satu saya (baru-pensiunan) password: 08Forging2?seminal*^Rajas-(Posed/|. Ini dibuat secara acak tetapi saya tidak kesulitan mengingatnya. Dan semoga berhasil selancar bahu atau brute-force.
finnw
1
@finnw Staple Baterai Kuda Yang Benar :-) security.stackexchange.com/q/6095/485
Rory Alsop
2

Poin bagus sudah disebutkan di sini.

Apa yang saya anggap risiko terbesar, mengingat Anda telah menjaga dasar-dasarnya dengan kata sandi yang kuat, adalah bahwa banyak komputer yang menginstal keyloggers tanpa disadari oleh pengguna. Bahkan ada orang yang membuat seluruh situs utilitas bermanfaat yang berisi trojan, sehingga itu bisa terjadi pada yang terbaik dari kita. Seorang keylogger misalnya akan mengirim email rincian login ke peretas yang kemudian dapat dengan mudah mengakses server.

Saya baru-baru ini diperingatkan oleh Norton tentang mengunduh installer Zombee Mod (bukan toples, installer) untuk menambahkan penerbangan ke toples Minecraft. Saya melihat rinciannya dan Norton mendaftarkan banyak utilitas di situs ini yang ditandai berisi trojan. Saya tidak tahu apakah ini benar atau tidak, tapi itu cukup spesifik dengan nama file. Ini juga merupakan fakta yang diketahui bahwa trojan dimasukkan ke dalam (beberapa) warez sebelum didistribusikan.

Tedd Hansen
sumber
2

Salah satu potensi manfaat SSH daripada kata sandi adalah jika Anda tidak menentukan frasa sandi SSH, maka Anda tidak perlu mengetikkan kata sandi lagi ... komputer Anda secara intrinsik dipercaya di server karena memiliki kunci. Yang mengatakan, saya biasanya selalu menggunakan frasa sandi SSH jadi saya mengesampingkan manfaat itu.

Saya menemukan jawaban terbaik mengapa panduan pengguna sering merekomendasikan SSH atas otentikasi kata sandi berasal dari manual Ubuntu untuk SSHOpenSSHKeys. Saya mengutip,

Jika Anda merasa itu tidak penting, coba masuk semua upaya masuk berbahaya yang Anda dapatkan untuk minggu berikutnya. Komputer saya - PC desktop yang sangat biasa - memiliki lebih dari 4.000 upaya untuk menebak kata sandi dan hampir 2.500 upaya pembobolan dalam minggu terakhir saja. Menurut Anda, berapa ribu tebakan acak sebelum penyerang menemukan kata sandi Anda?

Intinya jika Anda memiliki kata sandi panjang padat yang padat dengan tanda baca, huruf besar dan kecil, dan angka ... Anda mungkin akan baik-baik saja dengan otentikasi kata sandi. Juga jika Anda berencana untuk memonitor log Anda, dan tidak melakukan hal-hal "super aman" di seluruh jaringan ... yaitu menggunakannya untuk server rumah. Kemudian dengan segala cara, kata sandi berfungsi dengan baik.

MikeMurko
sumber
1

Metode autentik Passwd benar-benar tidak aman (imho). Dengan mekanisme ini, kata sandi akan dikirimkan ke server sshd (seperti yang sudah dikatakan @ramon). Ini berarti bahwa beberapa individu dapat memodifikasi server sshd untuk mengambil kata sandi. Dengan serangan Man-In-The-Middle ini sangat mudah dilakukan di dalam jaringan lokal.

Anda bisa menambal server sshd dengan menginstal tambalan ini ( https://github.com/jtesta/ssh-mitm ). Gunakan arpspoofdan iptablesuntuk menempatkan server Anda yang telah di-patch antara klien dan server sshd asli.

Harap nonaktifkan kata sandi auth: buka file konfigurasi /etc/ssh/ssh_configdan tambahkan baris PasswordAuthentication no.

Pioz
sumber
Tidak klien SSH memeriksa server untuk sidik jari RSA? Setelah Anda sshed ke server khusus ini setidaknya sekali, sidik jari itu akan diingat, jadi dalam kasus kemungkinan serangan MITM SSH akan menyalakan peringatan, bukan?
Septagram
1
Ya. Peringatan muncul tetapi karena 99% dari waktu ini disebabkan oleh instal ulang os, konfigurasi berubah ecc, sebagian besar pengguna akan mengabaikan peringatan dan melanjutkan.
Pioz
@Septagram Banyak penyedia akun shell yang tidak terbiasa memposting sidik jari kunci server saat ini untuk pelanggan baru, untuk migrasi akun pengguna ke server baru, dll.
Damian Yerrick
-2

Anda dapat memotong -o StrictHostKeyChecking=noopsi dengan. Ini sangat berguna saat menggunakan ssh dalam skrip shell.

ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -o PasswordAuthentication=no -o ConnectionAttempts=5 xxUser@xxxHost
arganzheng
sumber