Seberapa buruk memiliki beberapa perangkat dengan kunci server SSH yang sama?

21

Saya bekerja pada perangkat tertanam yang menjalankan FreeBSD dan SSH.

Seperti yang Anda ketahui, sshd suka secara acak membuat satu set kunci server saat boot pertama kali. Masalahnya adalah bahwa kita akan mengirimkan produk dengan sistem file sd-card read-only (tidak dapat dinegosiasikan).

Dua opsi saya seperti yang saya lihat adalah:

  • Kirim kunci server sshd yang sama di semua perangkat
  • Pasang sistem file memori dan buat kunci server pada setiap boot (lambat ...)

Apakah ini masalah keamanan utama untuk mengirim kunci server yang sama pada semua perangkat? Barang-barang ini tidak akan langsung di internet. Terkadang akan ada beberapa perangkat yang dimiliki oleh orang yang sama dan pada jaringan yang sama.

Sebagian besar waktu perangkat tidak akan terhubung ke internet.

Masuk dengan SSH bukan bagian dari operasi normal. Sebagian besar untuk kenyamanan para programmer dan teknisi. Pelanggan tidak akan masuk ke perangkat dengan SSH.

Apa konsekuensi menggunakan kunci server yang sama pada beberapa perangkat perangkat keras?

PS bisakah seseorang membuat tag internet-of-things?

EDIT : Saya berbicara tentang menginstal kunci privat host yang sama di semua server (perangkat). Sejauh kunci publik / pribadi pengguna, saat ini tidak ada rencana untuk menggunakan login berbasis kunci - itu akan menjadi login kata sandi. Sekali lagi, kata sandi yang sama di semua server (perangkat).

Saya tahu ini mungkin ide yang buruk. Saya ingin tahu mengapa tepatnya itu adalah ide yang buruk sehingga saya bisa mengerti pengorbanannya.

NXT
sumber
Jika maksud Anda adalah kunci host, maka pengguna dengan lebih dari satu perangkat Anda mungkin mendapatkan peringatan tergantung pada konfigurasi klien ssh mereka. masalah yang lebih besar adalah sekitar kunci otentikasi ssh yang sebenarnya. Mudah-mudahan Anda tidak menginstal kunci privat dan mudah-mudahan kunci publik Anda terbatas pada jaringan sumber tertentu dan mudah-mudahan kunci pribadi Anda yang dimiliki oleh teknisi Anda memiliki kata sandi yang kuat dan semoga kunci-kunci itu tidak pernah diperiksa secara repo secara tidak sengaja. IOT mendapatkan nama yang sangat buruk karena hal-hal itu. Tidak mengatakan Anda mau, hanya mengatakan itu adalah masalah besar.
Aaron
Saya berbicara tentang menginstal kunci privat host yang sama di semua server, jika itu yang Anda maksud.
NXT
2
Menggunakan nama pengguna / kata sandi yang sama di semua perangkat adalah ide yang sangat buruk. Itu jauh lebih mudah untuk memaksa daripada kunci pribadi yang digunakan untuk otentikasi kunci publik. Bahkan jika ini menyimpang tidak seharusnya terhubung langsung ke internet, seseorang akan tetap melakukannya. Dan jika "tidak terhubung langsung" berarti NAT, mereka terhubung cukup ...
Tero Kilkanen
7
Membagikan kunci SSH berarti bahwa seseorang yang dapat mengakses kunci pribadi pada satu perangkat dapat menyamar sebagai semua perangkat ini.
user253751
3
Meskipun ini adalah pertanyaan yang menarik, saya tidak melihat apa pun tentang hal itu yang berkaitan dengan administrasi sistem, dan dengan demikian di luar topik untuk Kesalahan Server. Anda bertanya tentang merancang antarmuka debugging / diagnostik untuk perangkat tertanam yang Anda kirim, dan bukan antarmuka yang relevan dengan sysadmin. Pertanyaan ini dapat dimigrasikan ke Keamanan Informasi .
200_success

Jawaban:

27

Daripada menyimpan data khusus host seperti kunci host ssh pada kartu SD atau media hanya baca lainnya, Anda dapat menyimpan ini dalam NVRAM, yang digunakan untuk sistem embedded. Anda harus melakukan beberapa skrip khusus untuk menyimpan dan mengambil kunci pada saat boot, tetapi skrip akan persis sama untuk setiap perangkat.

Michael Hampton
sumber
12

Dampak pengiriman pasangan kunci yang sama dengan semua perangkat Anda secara langsung terkait dengan keamanan klien yang terhubung dengannya, karena itu berarti bahwa tidak ada cara (dari klien SSH) untuk secara unik mengidentifikasi perangkat yang mungkin terhubung ke perangkat tersebut. Jika pasangan kunci Anda bocor, itu dapat digunakan untuk serangan MITM.

Di sisi lain, regenerasi tombol pada setiap boot, juga akan memicu peringatan pada klien.

Untuk referensi, dari man ssh(1):

sshsecara otomatis memelihara dan memeriksa database yang berisi identifikasi untuk semua host yang pernah digunakan. Kunci host disimpan di ~/.ssh/known_hostsdalam direktori home pengguna. Selain itu, file /etc/ssh/ssh_known_hostssecara otomatis diperiksa untuk host yang dikenal. Setiap host baru secara otomatis ditambahkan ke file pengguna. Jika identifikasi suatu host pernah berubah, sshperingatkan tentang ini dan nonaktifkan otentikasi kata sandi untuk mencegah serangan server spoofing atau man-in-the-middle, yang dapat digunakan untuk menghindari enkripsi. The StrictHostKeyCheckingpilihan dapat digunakan untuk mengontrol login ke mesin yang tombol host tidak diketahui atau telah berubah.

dawud
sumber
2
Saya tidak mengerti mengapa mereka tidak bisa hanya menghasilkan satu kali (pada setiap perangkat, pada boot pertama) kemudian tidak pernah menghasilkan lagi (kecuali mereka dihapus)?
djsmiley2k
Dapat dilakukan dengan sempurna. Tapi OP menyatakan dia ingin: 'Pasang sistem file memori dan buat kunci server pada setiap boot'. Jadi jawaban saya mengasumsikan itu.
dawud
ah ya saya melewatkan itu ketika saya membacanya pertama kali.
djsmiley2k
5

Kedengarannya seperti pada opsi pertama, kunci SSH akan tersedia pada kartu SD. Jadi setiap pengguna dapat mengambil kartu dan membacanya. Jadi pada dasarnya kunci pribadi Anda telah menjadi (kebanyakan) publik.

Ini akan memungkinkan serangan man-in-the-middle, seperti berikut:

  1. Seorang pengguna mengatur server SSH dengan kunci privat yang diperoleh dari perangkat Anda dan memberikan alamat IP itu ke teknisi Anda.
  2. Teknisi Anda memasukkan kata sandi root melalui koneksi SSH.
  3. Pengguna sekarang tahu kata sandi root yang valid untuk semua perangkat Anda.

Namun, Anda seharusnya tidak menggunakan kata sandi root terlebih dahulu, gunakan kunci ssh untuk otentikasi. Maka dampak dari kunci server bersama cukup kecil jika Anda hanya masuk dari LAN.

SSH juga menyediakan kerahasiaan ke depan, sehingga penyerang harus dapat mengatur server palsu untuk mendapatkan manfaat dari kunci; mengendus lalu lintas secara pasif tidak akan mengizinkan mendekripsi itu.

jpa
sumber
Lucu bagaimana prasangka kita bisa membutakan kita (saya). SD-Card berada di dalam unit di belakang panel dan di bawah papan sirkuit, jadi tidak pernah terpikir oleh saya bahwa seseorang akan mengeluarkannya. Namun, Anda benar, itu benar-benar dapat diakses oleh siapa pun dengan obeng. Terima kasih atas pengingatnya untuk mempertimbangkan keamanan fisik sistem.
NXT
WRT # 2, kata sandi root tidak boleh dikirim melalui koneksi SSH. Ini harus menjadi input ke klien terminal, dan digunakan untuk setengah lokal dari protokol otentikasi yang membuktikan kepemilikan rahasia tanpa mentransmisikan rahasia ("bukti pengetahuan"). Bahkan sistem yang sudah berumur puluhan tahun tahu mengirim hash kata sandi dan bukan kata sandi itu sendiri. Sertakan nonce dalam protokol challenge / response, dan penyerang tidak mengetahui kata sandi asli atau token apa pun yang dapat digunakan sebagai gantinya.
Ben Voigt
1
@ BenVoigt Saya pikir sebagian besar sistem unix mengirimkan kata sandi ke server. File shadow hanya menyimpan hash, tetapi Anda tidak ingin memercayai hash yang dihasilkan oleh klien - karena jika tidak ada orang yang bisa login dengan hash yang dicuri, tanpa membalikkannya. Jadi server harus mengetahui kata sandi yang sebenarnya untuk menjalankan bcrypt atau sejenisnya.
jpa
2

Saya membaca ini dengan ngeri! Saya yang telah melakukan banyak mesin di cluster yang sama dengan kunci host ssh yang sama tidak akan pernah berani melakukan ini. Jangan dalam keadaan apa pun mengizinkan mesin dengan set administrator yang berbeda untuk membagikan kunci host ssh. Dengan begitu terletak kegilaan dan teriakan ngeri ketika Anda diposting karena kurangnya keamanan Anda.

Lihatlah Aku berkata kepadamu yang sebenarnya, dia yang berkompromi dengan satu perangkat mengkompromikan semuanya. Setelah mendapatkan satu, harapkan orang jahat melompat dari satu ke yang lain sesuka hati dan keamanan berguling kembali seolah itu kertas tipis.

joshudson
sumber
1
Bisakah Anda menguraikan bagaimana penyerang akan menggunakan kunci pribadi server curian untuk berkompromi dengan perangkat lain?
jpa
@ jpa: Untuk kunci host, dengan memotong dan mencuri kata sandi, dll. Selain itu, pengaturan ini tampaknya mengusulkan untuk melakukan hal yang sama dengan kunci pengguna.
joshudson
1

Karena Anda menyebutkan bahwa akses SSH tidak digunakan oleh pengguna akhir / pelanggan, Anda mungkin ingin mematikan akses SSH secara default dan hanya mengaktifkannya sementara ketika perangkat dimasukkan ke mode "debug".

Anda kemudian dapat mengirim semua perangkat dengan kunci yang sama, dengan asumsi bahwa Anda telah melindungi mode "debug" sehingga tidak dapat dipicu dari jarak jauh oleh seseorang yang mencoba meretas perangkat.

Atau Anda memiliki kunci baru yang dihasilkan ketika perangkat masuk ke mode "debug" - jadi Anda tidak perlu membuang waktu boot untuk menghasilkan kunci setiap kali perangkat dinyalakan.

Edders
sumber
Aku suka ide ini.
NXT
1

Berikut ini contoh skenario serangan berdasarkan kendala yang Anda miliki:

Jika perangkat Anda, katakanlah Raspberry Pi misalnya. Jika saya berjalan dan menarik kartu SD dari satu, saya dapat menempelkan kartu SD di komputer saya sendiri, menemukan kunci sshd dan menyalinnya ke mana pun saya inginkan. Mungkin saya ambil pi raspberry saya sendiri dan kartu ethernet USB. Sekarang saya dapat menempel di antara perangkat target dan ke mana pun mereka pergi dan memantau koneksi ssh. Ketika saya melihat bahwa perangkat target mencoba membuat koneksi ssh, saya melakukan ini:

(target) <---> (my evil sshd <--> decrypted traffic <--> ssh) <---> (real server)
                                       |
                                       V
                                    log file

Oh apa itu? Kata sandi Anda adalah "Saya suka kucing"? Wah, ini email menarik yang Anda kirim ke istri Anda. Saya yakin akan lebih menarik lagi jika dia membaca email ini yang Anda kirim ke tetangga tetangga.

Kemungkinannya tidak terbatas . Dan target tidak akan pernah tahu, karena kunci sshd identik dengan yang ditemukan di server sebenarnya. Tergantung pada keamanan fisik dari fasilitas yang menerima perangkat Anda, ini bisa sangat sepele. Jangan lakukan ini.

Alih-alih, lakukan apa yang sudah Anda usulkan tetapi perbaiki . Sebelum Anda menulis gambar, jalankan sesuatu seperti ini:

ssh-keygen -f some-new-server
cp some-new-server /path/to/the/mounted/image/sshd/key
cp some-new-server.pub /path/to/the/mounted/image/sshd/key.pub

Dan sekarang setiap server memiliki kunci baru . Karena Anda benar- benar tidak ingin membagikan salinan kunci. Maksud saya jujur ​​itu setidaknya sama buruknya dengan mengambil gambar kunci rumah Anda dan mengunggahnya ke Internet dengan alamat rumah Anda.

Wayne Werner
sumber
1
Jika seseorang memiliki akses fisik ke perangkat keras Anda dan Anda gagal mengenkripsi data saat istirahat maka semua taruhan dimatikan.
user9517 mendukung GoFundMonica