Quanto è male avere più dispositivi con le stesse chiavi del server SSH?


21

Sto lavorando su un dispositivo incorporato che esegue FreeBSD e SSH.

Come sai, a sshd piace generare casualmente un set di chiavi del server al primo avvio. Il problema è che spediremo il prodotto con un file system sd-card di sola lettura (non negoziabile).

Le mie due opzioni come le vedo sono:

  • Spedisci le stesse chiavi del server sshd su tutti i dispositivi
  • Montare un file system di memoria e generare le chiavi del server ad ogni avvio (lento ...)

È un grave problema di sicurezza spedire le stesse chiavi del server su tutti i dispositivi? Questi articoli non saranno direttamente su Internet. Occasionalmente ci saranno più dispositivi di proprietà della stessa persona e sulla stessa rete.

Il più delle volte il dispositivo non sarà connesso a Internet.

L'accesso con SSH non fa parte del normale funzionamento. È principalmente per comodità di programmatori e tecnici. I clienti non accederanno al dispositivo con SSH.

Quali sono le conseguenze dell'utilizzo delle stesse chiavi del server su più dispositivi hardware?

PS qualcuno potrebbe creare un tag per l'internet delle cose?

EDIT : sto parlando di installare le stesse chiavi private host su tutti i server (dispositivi). Per quanto riguarda le chiavi pubbliche / private degli utenti, al momento non è in programma l'utilizzo di un accesso basato su chiavi: sarebbe un accesso con password. Ancora una volta, la stessa password su tutti i server (dispositivi).

So che questa è probabilmente una cattiva idea. Mi piacerebbe sapere perché è una cattiva idea, quindi posso capire i compromessi.


Se intendi le chiavi host, gli utenti con più di un dispositivo potrebbero ricevere avvisi a seconda della configurazione del loro client ssh. le maggiori preoccupazioni riguarderebbero le chiavi di autenticazione SSH effettive. Spero che tu non stia installando alcuna chiave privata e si spera che le tue chiavi pubbliche siano limitate a reti di origine specifiche e, si spera, che le tue chiavi private di proprietà dei tuoi tecnici abbiano una passphrase forte su di loro e speriamo che quelle chiavi non vengano mai registrate in un repository per errore. Gli IoT stanno ottenendo un nome davvero brutto a causa di queste cose. Non dire che lo faresti, solo dire che è un grosso problema.
Aaron,

Sto parlando dell'installazione della stessa chiave privata host su tutti i server, se è questo che intendi.
NXT

2
L'uso dello stesso nome utente / password su tutti i dispositivi è una pessima idea. Questi sono molto più facili da forzare rispetto alla chiave privata utilizzata per l'autenticazione con chiave pubblica. Anche se questi devoti non dovrebbero essere direttamente collegati a Internet, qualcuno lo farà comunque. E se "non direttamente connesso" significa NAT, sono abbastanza connessi ...
Tero Kilkanen,

7
Condividere la chiave SSH significa che qualcuno che può accedere alla chiave privata su un dispositivo può impersonare tutti questi dispositivi.
user253751

3
Sebbene questa sia una domanda interessante, non vedo nulla al riguardo relativo all'amministrazione del sistema ed è quindi fuori tema per Server Fault. Stai chiedendo di progettare un'interfaccia di debug / diagnostica per un dispositivo incorporato che stai spedendo e non un'interfaccia che sarebbe rilevante per gli amministratori di sistema. Questa domanda potrebbe essere migrata alla sicurezza delle informazioni .
200_successo

Risposte:


27

Invece di archiviare dati specifici dell'host come chiavi host ssh sulla scheda SD o altri supporti di sola lettura, è possibile archiviarli in NVRAM, che è ciò che serve per un sistema incorporato. Dovrai eseguire alcuni script personalizzati per archiviare e recuperare le chiavi all'avvio, ma gli script saranno esattamente gli stessi per ogni dispositivo.


12

L'impatto della spedizione della stessa coppia di chiavi con tutti i tuoi dispositivi è direttamente correlato alla sicurezza dei client che si collegano ad essi, in quanto significa che non esiste alcun modo (da un client SSH) di identificare in modo univoco il dispositivo a cui potrebbe connettersi. Se la tua coppia di chiavi dovesse trapelare, potrebbe essere utilizzata per gli attacchi MITM.

D'altra parte, rigenerando le chiavi ad ogni avvio, si attiverà anche un avviso sui client.

Per riferimento, da man ssh(1):

sshmantiene e controlla automaticamente un database contenente l'identificazione per tutti gli host con cui è mai stato utilizzato. Le chiavi host sono archiviate nella ~/.ssh/known_hostshome directory dell'utente. Inoltre, il file /etc/ssh/ssh_known_hostsviene automaticamente verificato per host noti. Eventuali nuovi host vengono aggiunti automaticamente al file dell'utente. Se l'identificazione di un host cambia, sshavvisa e disabilita l'autenticazione con password per impedire lo spoofing del server o attacchi man-in-the-middle, che potrebbero altrimenti essere utilizzati per aggirare la crittografia. L' StrictHostKeyCheckingopzione può essere utilizzata per controllare gli accessi ai computer la cui chiave host non è nota o è cambiata.


2
Non capisco perché non possano semplicemente generare una volta (su ciascun dispositivo, al primo avvio) e quindi non generare mai più (a meno che non vengano rimossi)?
djsmiley2k - CoW

Perfettamente fattibile. Ma l'OP afferma che vuole: "Montare un file system di memoria e generare le chiavi del server ad ogni avvio". Quindi la mia risposta lo presuppone.
Dawud,

ah sì, l'ho perso la prima volta che l'ho letto.
djsmiley2k - CoW

5

Sembra che nella prima opzione, le chiavi SSH sarebbero disponibili sulla scheda SD. Quindi qualsiasi utente potrebbe prendere la carta e leggerla. Quindi in pratica le tue chiavi private sono diventate (principalmente) pubbliche.

Ciò consentirà attacchi man-in-the-middle, come il seguente:

  1. Un utente configura un server SSH con le chiavi private ottenute dal tuo dispositivo e fornisce tale indirizzo IP al tuo tecnico.
  2. Il tecnico immette la password di root tramite la connessione SSH.
  3. L'utente ora conosce la password di root valida per tutti i tuoi dispositivi.

Tuttavia, non dovresti usare le password di root in primo luogo, usa invece le chiavi ssh per l'autenticazione. Quindi l'impatto delle chiavi del server condiviso è piuttosto piccolo se si accede solo da una LAN.

SSH fornisce anche segretezza diretta, quindi un utente malintenzionato deve essere in grado di configurare un server falso per beneficiare delle chiavi; fiutare passivamente il traffico non permetterà di decifrarlo.


È divertente come i nostri preconcetti possano accecarci (me). La scheda SD si trova all'interno dell'unità dietro un pannello e sotto un circuito, quindi non mi è mai venuto in mente che qualcuno l'avrebbe estratta. Tuttavia, hai ragione, è assolutamente accessibile a chiunque abbia un cacciavite. Grazie per il promemoria per considerare la sicurezza fisica del sistema.
NXT

WRT # 2, la password di root non deve essere inviata tramite la connessione SSH. Dovrebbe essere inserito nel client terminale e usato per la metà locale di un protocollo di autenticazione che dimostra il possesso del segreto senza trasmettere il segreto ("prova della conoscenza"). Anche i sistemi vecchi di decenni sapevano di inviare un hash della password e non la password stessa. Includi un nonce nel protocollo challenge / response e l'attaccante non conosce né la password originale né alcun token che può essere utilizzato al suo posto.
Ben Voigt,

1
@BenVoigt Penso che la maggior parte dei sistemi unix trasmettano la password al server. Il file shadow memorizza solo un hash, ma non vuoi fidarti di un hash generato dal client, perché altrimenti chiunque sarebbe in grado di accedere con un hash rubato, senza invertirlo. Quindi il server deve conoscere la password effettiva per poter eseguire bcrypt o simili su di essa.
jpa,

2

L'ho letto con orrore! Io che ho fatto più macchine nello stesso cluster con la stessa chiave host ssh non oserei mai farlo. Non consentire in nessun caso a macchine con diversi set di amministratori di condividere chiavi host ssh. In questo modo risiede la follia e l'orrore urlante quando vieni postato per la tua mancanza di sicurezza.

Ecco, io ti dico la verità, chi compromette un dispositivo li compromette tutti. Una volta ottenuto uno, aspettatevi che le persone cattive saltino l'una dall'altra a piacimento e la sicurezza sia tornata indietro come se fosse carta sottile.


1
Potresti approfondire come un utente malintenzionato userebbe una chiave privata del server rubata per compromettere altri dispositivi?
JPA

@jpa: per le chiavi host, intercettando e rubando password, ecc. Inoltre, questa configurazione sembra proporre di fare la stessa cosa con le chiavi utente.
joshudson,

1

Poiché si menziona che l'accesso SSH non è utilizzato dall'utente / cliente finale, è possibile che si desideri disattivare l'accesso SSH per impostazione predefinita e abilitarlo temporaneamente solo quando il dispositivo viene messo in modalità "debug".

Puoi quindi spedire tutti i dispositivi con la stessa chiave, supponendo che tu abbia protetto la modalità "debug" in modo che non possa essere attivata da remoto da qualcuno che cerca di hackerare il dispositivo.

Oppure hai una nuova chiave generata quando il dispositivo entra in modalità "debug", quindi non devi perdere tempo di avvio generando le chiavi ogni volta che il dispositivo viene acceso.


Mi piace questa idea.
NXT

1

Ecco uno scenario di attacco di esempio basato sui vincoli che hai:

Se i tuoi dispositivi lo sono, ad esempio un Raspberry Pi. Se mi alzo e strappo la scheda SD da una, posso attaccare la scheda SD nel mio computer, trovare la chiave sshd e copiarla dove voglio. Forse prendo il mio Raspberry Pi e una scheda Ethernet USB. Ora posso collegarlo tra un dispositivo di destinazione e ovunque vadano e monitorare le connessioni ssh. Quando vedo che il dispositivo di destinazione sta tentando di stabilire una connessione ssh, faccio questo:

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

Oh, che cos'è? La tua password è "Mi piacciono i gatti"? Ragazzo, questa è una email interessante che hai inviato a tua moglie. Scommetto che sarebbe ancora più interessante se leggesse questa e-mail che hai inviato alla moglie dei vicini della porta accanto.

Le possibilità sono infinite . E la destinazione non lo saprebbe mai, perché la chiave sshd è identica a quella trovata sul server reale. A seconda della sicurezza fisica delle strutture che stanno ricevendo il tuo dispositivo, questo potrebbe essere incredibilmente banale. Non farlo

Invece, fai quello che già proponi ma correggilo . Prima di scrivere la tua immagine esegui qualcosa del genere:

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

E ora ogni server ha una nuova chiave. Perché davvero, davvero non vuoi distribuire copie di una chiave. Voglio dire, onestamente è al minimo così male come scattare una foto delle vostre chiavi di casa e di caricarli su Internet con il vostro indirizzo di casa.


1
Se qualcuno ha accesso fisico al tuo hardware e non riesci a crittografare i dati a riposo, tutte le scommesse sono disattivate.
user9517 supporta GoFundMonica il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.