Apakah kata sandi SSH Anda terungkap ketika Anda mencoba terhubung ke server yang salah?
192
Ketika Anda secara tidak sengaja mencoba terhubung ke server yang salah dengan kredensial kata sandi, mungkinkah administrator untuk membaca dan mencatat kata sandi yang Anda gunakan?
Di klien ssh, Anda pertama-tama mengotentikasi server dan melakukannya sehingga Anda mengatakan "Saya percaya saya dapat memberitahu kata sandi saya ke server ini". Lain kali perhatikan lebih dekat ke pesan yang Anda lihat pertama: "Keaslian X tidak dapat ditetapkan. Sidik jari kunci RSA adalah Y Apakah Anda yakin Z? (Ya / tidak)" Pertanyaan menjengkelkan ini tidak akan ditanyakan jika Anda seharusnya untuk secara otomatis menjawab ya setiap saat.
kubanczyk
6
Dimungkinkan untuk diatur PasswordAuthentication nosecara default di OpenSSH, dan hanya mengaktifkannya (jika / bila diperlukan) untuk server tepercaya. Dikombinasikan dengan ketat memeriksa tombol host, ini harus sebagian besar melindungi Anda dari mengekspos sandi Anda, dengan biaya di kenyamanan saja.
hobbs
6
@kubanczyk, jika Anda ingin SSH ke "internal-www.my-company.com" tetapi tanpa sengaja mengetik "ssh www.my-company.com", prompt itu tidak akan melindungi Anda - kemungkinan kedua server tersebut adalah di daftar tepercaya Anda, hanya saja salah satunya dijalankan oleh Anda, dan yang lainnya oleh pihak ketiga.
Markus
@ hobbs, ChallengeResponseAuthentication nosaya kira
ilkkachu
Jawaban:
215
Sederhananya: ya
Lebih detail...
Jika Anda terhubung ke mesin saya maka Anda tidak tahu apakah saya menjalankan sshserver normal , atau yang telah dimodifikasi untuk menuliskan kata sandi yang dilewatkan.
Lebih lanjut, saya tidak perlu memodifikasi sshd, tetapi dapat menulis modul PAM (misalnya menggunakan pam_script), yang akan dilewati kata sandi Anda.
Jadi iya. JANGAN PERNAH mengirim kata sandi Anda ke server yang tidak terpercaya. Pemilik mesin dapat dengan mudah mengonfigurasinya untuk mencatat semua kata sandi yang dicoba.
(Sebenarnya ini tidak biasa di dunia infosec; buat server honeypot untuk mencatat kata sandi yang dicoba)
Benar. Secara default, standar sshdtidak tidak login password. (Jika Anda memasukkan kata sandi Anda sebagai nama login maka itu akan dicatat, tetapi itu masalah lain). Standar sshdadalah alat keamanan, dan karenanya tidak akan mencatat kredensial seperti ini :-)
Stephen Harris
116
Namun alasan lain untuk menggunakan pasangan kunci publik / pribadi ...
gerrit
3
Saya telah bertanya-tanya tentang penggunaan kata sandi saya untuk sementara waktu dan baru-baru ini saya sadar bahwa upaya untuk masuk ke server yang salah akan menjadi cara yang baik untuk mengungkapkan kata sandi saya ke administrator server jahat.
vfclists
10
@ vfclists yang masuk ke server yang salah juga merupakan alasan tepat mengapa klien sshd Anda menyimpan sidik jari untuk setiap server. Saat pertama kali terhubung, Anda menerima sidik jari itu, lalu nanti jika tidak cocok, Anda mendapat peringatan raksasa yang harus Anda perhatikan.
hometoast
44
Saran yang lebih baik: jangan pernah gunakan kata sandi auth untuk ssh. Protokol ini memiliki autor kunci untuk alasan yang sangat baik; Gunakan!
R ..
52
Iya.
Kata sandi dikirim setelah koneksi terenkripsi dibuat, tetapi server jauh mendapatkan kata sandi dalam plaintext.
Jika Anda peduli tentang itu, solusi terbaik dan termudah adalah dengan menggunakan kunci SSH.
Jika Anda memiliki mesin yang tidak dapat menerima kunci, maka salah satu solusinya adalah membuat alat yang menyimpan kata sandi Anda dengan aman, dan kemudian gunakan sshpassuntuk selalu mengirim kata sandi yang benar tergantung pada server yang Anda hubungkan.
Sekarang, alasan kata sandi dikirim dalam plaintext, adalah bahwa ia meninggalkan semua keputusan penanganan dan menyimpannya ke ujung yang jauh, dan klien dapat benar-benar bodoh. Ada beberapa format hashing (penyimpanan) kata sandi yang berbeda yang digunakan dalam sistem Linux dan BSD selama sepuluh tahun terakhir ( crypt (3) ), tidak ada yang membutuhkan dukungan dari klien.
Meskipun itu sebagian karena sejarah juga (yaitu selalu seperti itu). Ada protokol otentikasi respons-respons yang lebih baik yang dapat digunakan bahkan dengan kata sandi. Misalnya SRP , yang memberikan para pihak dengan rahasia bersama selama otentikasi. Ini telah diimplementasikan untuk beberapa server SSH, tetapi patch untuk OpenSSH adalah untuk versi lama (sangat).
Masalah dengan protokol respons-tantangan untuk otentikasi kata sandi adalah bahwa beberapa di antaranya memerlukan server untuk menyimpan kata sandi dalam teks biasa. Jika protokol challenge-response memungkinkan server untuk menyimpan kata sandi hash, maka kemungkinan besar membutuhkan algoritma hashing yang sangat spesifik.
kasperd
8
Kata sandi umumnya dikirim dalam "plaintext" (yaitu tidak benar-benar jelas, tetapi hanya dengan perlindungan yang disediakan SSH | TLS | apa pun koneksi yang disediakan). Jika suatu sistem meminta kata sandi untuk di-hash sisi klien dan hash untuk dikirim, server tidak akan memiliki cara untuk memperoleh kata sandi yang sebenarnya, dan sebaliknya akan memberikan akses kepada siapa saja yang dapat memberikan hash kata sandi , membuat kata hash tersebut setara dengan kata sandi .
Blacklight Shining
1
@BlacklightShining Bukti nol-pengetahuan kata sandi memang ada, tetapi tidak digunakan dalam SSH karena tidak ada cara untuk menggunakan basis data kata sandi standar untuk mereka dan tidak ada titik nyata untuk menggunakannya daripada otentikasi berbasis kunci.
Random832
di mana saya dapat melihat kata sandi yang digunakan untuk mengotentikasi? Mereka tidak ada di /var/log/auth.log, lalu di mana?
ア レ ッ ク ス
OpenSSH tidak akan mencatat kata sandi, gagal atau sebaliknya. (Saya tidak terlalu terbiasa dengan server SSH lainnya.) Di hampir semua instalasi yang sah, nilai apa pun yang mungkin diberikan ini akan lebih besar daripada risiko yang melekat pada perekaman kata sandi secara sengaja — beberapa di antaranya mungkin disediakan oleh pengguna yang sah yang membuat kesalahan ketik. atau mencoba kata sandi yang salah-tapi-benar-untuk-sesuatu-yang lain — dalam cleartext Jika Anda memiliki alasan yang bagus untuk melakukan ini, akan lebih mudah untuk menambal OpenSSH.
musicinmybrain
10
Untuk membangun di atas jawaban Stephen Harris, berikut adalah tampilan real-time yang saya buat yang menunjukkan apa yang dapat ditangkap oleh skrip autentikasi PAM yang dimodifikasi saat menyambungkan ke kotak di atas ssh (semacam honeypot). Saya menggunakan versi modifikasi dari perpustakaan PAM lib-storepw.
Jawaban yang utamanya berupa tautan tidak disukai jika tautannya tidak tersedia (sepertinya Anda mengelola situs ini secara pribadi, tetapi tetap saja). Anda harus menjelaskan sedikit bagaimana Anda mengelola ini dengan skrip auth untuk pembaca.
Centimane
itu tidak berfungsi lagi, saya mengirim string besar sebagai kata sandi, saya pikir itu mungkin telah
merusaknya
@ skottydelta Meskipun saya belum memeriksanya, mungkin ada batas penyangga baik pada ukuran kata sandi modul PAM atau daemon SSH itu sendiri dapat menerima dalam upaya otentikasi. Situs ini masih berfungsi seperti yang saya maksudkan, meskipun akan menangani hingga batas buffer yang diterima oleh sshd atau modul PAM jika memang benar demikian.
Willie S.
Yang tidak menarik adalah sumber untuk lib-storepw Anda yang dimodifikasi tersedia untuk digunakan orang lain?
Tim Fletcher
2
SSH adalah protokol yang membutuhkan rasa saling percaya. Itulah alasan mengapa klien OpenSSH memelihara file known_hosts, untuk mengimplementasikan kepercayaannya pada skema penggunaan pertama.
Ketika Anda mencoba masuk ke server SSH, terlepas dari siapa yang memasok perangkat lunak atau data apa yang dikonfigurasikan untuk login, Anda berpartisipasi dalam beberapa prosedur otentikasi. Saat menggunakan otentikasi kata sandi, Anda mengirimkan kata sandi Anda ke server itu. Ini adalah salah satu alasan mengapa kriptografi asimetris (kunci publik, sertifikat) direkomendasikan - kriptografi kunci publik sangat mengurangi risiko pengungkapan kredensial Anda. (Meskipun itu mungkin tidak melindungi Anda dari serangan MitM jika menggunakan penerusan ssh-agent atau skema serupa.)
SSH tidak membutuhkan rasa saling percaya, atau setidaknya tidak kepercayaan simetris. Penting untuk lebih tepatnya: known_hosts adalah tentang keaslian, bukan kepercayaan. Seperti yang Anda tunjukkan, menempatkan kunci publik di host yang kurang tepercaya adalah aman. Memang, menggunakan kata sandi untuk masuk ada "aman" juga, dengan asumsi Anda tidak menggunakan kembali kata sandi itu. (Ini hanya seaman sejauh mana Anda mempercayai server, tentu saja.) Bahkan login ssh berbasis host tergantung pada kepercayaan asimetris.
PasswordAuthentication no
secara default di OpenSSH, dan hanya mengaktifkannya (jika / bila diperlukan) untuk server tepercaya. Dikombinasikan dengan ketat memeriksa tombol host, ini harus sebagian besar melindungi Anda dari mengekspos sandi Anda, dengan biaya di kenyamanan saja.ChallengeResponseAuthentication no
saya kiraJawaban:
Sederhananya: ya
Lebih detail...
Jika Anda terhubung ke mesin saya maka Anda tidak tahu apakah saya menjalankan
ssh
server normal , atau yang telah dimodifikasi untuk menuliskan kata sandi yang dilewatkan.Lebih lanjut, saya tidak perlu memodifikasi
sshd
, tetapi dapat menulis modul PAM (misalnya menggunakanpam_script
), yang akan dilewati kata sandi Anda.Jadi iya. JANGAN PERNAH mengirim kata sandi Anda ke server yang tidak terpercaya. Pemilik mesin dapat dengan mudah mengonfigurasinya untuk mencatat semua kata sandi yang dicoba.
(Sebenarnya ini tidak biasa di dunia infosec; buat server honeypot untuk mencatat kata sandi yang dicoba)
sumber
sshd
tidak tidak login password. (Jika Anda memasukkan kata sandi Anda sebagai nama login maka itu akan dicatat, tetapi itu masalah lain). Standarsshd
adalah alat keamanan, dan karenanya tidak akan mencatat kredensial seperti ini :-)Iya.
Kata sandi dikirim setelah koneksi terenkripsi dibuat, tetapi server jauh mendapatkan kata sandi dalam plaintext.
Jika Anda peduli tentang itu, solusi terbaik dan termudah adalah dengan menggunakan kunci SSH.
Jika Anda memiliki mesin yang tidak dapat menerima kunci, maka salah satu solusinya adalah membuat alat yang menyimpan kata sandi Anda dengan aman, dan kemudian gunakan
sshpass
untuk selalu mengirim kata sandi yang benar tergantung pada server yang Anda hubungkan.Sekarang, alasan kata sandi dikirim dalam plaintext, adalah bahwa ia meninggalkan semua keputusan penanganan dan menyimpannya ke ujung yang jauh, dan klien dapat benar-benar bodoh. Ada beberapa format hashing (penyimpanan) kata sandi yang berbeda yang digunakan dalam sistem Linux dan BSD selama sepuluh tahun terakhir ( crypt (3) ), tidak ada yang membutuhkan dukungan dari klien.
Meskipun itu sebagian karena sejarah juga (yaitu selalu seperti itu). Ada protokol otentikasi respons-respons yang lebih baik yang dapat digunakan bahkan dengan kata sandi. Misalnya SRP , yang memberikan para pihak dengan rahasia bersama selama otentikasi. Ini telah diimplementasikan untuk beberapa server SSH, tetapi patch untuk OpenSSH adalah untuk versi lama (sangat).
sumber
Untuk membangun di atas jawaban Stephen Harris, berikut adalah tampilan real-time yang saya buat yang menunjukkan apa yang dapat ditangkap oleh skrip autentikasi PAM yang dimodifikasi saat menyambungkan ke kotak di atas ssh (semacam honeypot). Saya menggunakan versi modifikasi dari perpustakaan PAM lib-storepw.
https://livesshattack.net
https://livesshattack.net/about
sumber
SSH adalah protokol yang membutuhkan rasa saling percaya. Itulah alasan mengapa klien OpenSSH memelihara file known_hosts, untuk mengimplementasikan kepercayaannya pada skema penggunaan pertama.
Ketika Anda mencoba masuk ke server SSH, terlepas dari siapa yang memasok perangkat lunak atau data apa yang dikonfigurasikan untuk login, Anda berpartisipasi dalam beberapa prosedur otentikasi. Saat menggunakan otentikasi kata sandi, Anda mengirimkan kata sandi Anda ke server itu. Ini adalah salah satu alasan mengapa kriptografi asimetris (kunci publik, sertifikat) direkomendasikan - kriptografi kunci publik sangat mengurangi risiko pengungkapan kredensial Anda. (Meskipun itu mungkin tidak melindungi Anda dari serangan MitM jika menggunakan penerusan ssh-agent atau skema serupa.)
sumber