Esiste il rischio di tentare l'autenticazione ssh su un server canaglia?

6

Supponiamo che sto per connettermi a un nuovo server (non autenticato). In precedenza ho fornito la mia chiave pubblica ssh al proprietario del server (che lo popola nel file authorized_keys appropriato). Il proprietario del server non può fornire in modo sicuro le informazioni sulla chiave pubblica dell'ospite in anticipo e dice che fino a quando la mia chiave pubblica è nota solo a noi, la sicurezza verrà mantenuta .

A parte il caso in cui anche un server canaglia / ha già la mia chiave pubblica, c'è qualche possibilità di divulgare le mie credenziali (o altrimenti compromettere la sicurezza) se la mia sessione ssh su questo server non autenticato è (dall'inizio) diretta a un server canaglia (ad esempio, uno che agisce come MiTM)? Alcune delle risposte qui sembrano suggerire che esiste un potenziale problema, forse a seconda della versione di SSH utilizzata ?

    
posta jhfrontz 06.09.2018 - 16:55
fonte

3 risposte

5

Nei commenti OP ha separato la sua domanda originaria in due domande diverse, la prima delle quali ha già ricevuto una risposta, come indicato nei commenti.

Domanda 1:

can client public key be used to authenticate server

La risposta è no. (Vedi, git usa le chiavi utente ssh o le chiavi di distribuzione del repository per la crittografia? ).

Domanda 2:

is there any harm in being promiscuous with your authentication attempts (e.g., attempting to authenticate at a known-but-potentially-unfriendly server using the client credentials intended for another server)?

Harm può significare varie cose. Ma, penso che OP sta chiedendo se semplicemente provando ad autenticare usando le chiavi ssh su un server canaglia, in qualche modo, le informazioni sulla sua chiave privata (memorizzate solo sul suo computer client) possano fuoriuscire.

Con questa definizione di "danno" la risposta è no.

Quando si tenta di autenticare su un server canaglia, si riceverà la chiave pubblica del server (nel suo certificato). Questo ti permetterà di autenticare il server e vedrai che è canaglia e non si connette. Quindi, questo non espone la tua chiave privata in alcun modo.

Ma per quanto riguarda il caso in cui si tenta di connettersi al server canaglia? Supponiamo che il server canaglia abbia la tua chiave pubblica. In questo caso non perdi ancora la tua chiave privata tentando di connetterti, dato che è la tua (ssh) chiave pubblica che viene usata dal server canaglia per autenticare tu . Il server canaglia può inviare tu una sfida crittografata con la tua chiave pubblica. Quindi puoi decodificarlo con la tua chiave privata e dimostrare che sei chi dici di essere. Invia solo la sfida decrittografata, non invii la tua chiave privata o alcuna informazione sulla tua chiave privata. E questo non dovrebbe far trapelare alcuna informazione sulla tua chiave privata (con l'avvertenza che sto assumendo che la moderna crittografia a chiave pubblica come RSA e / o ssh sia / non sia rotta).

Vorrei anche ribadire il fatto che sto assumendo che la domanda sia diretta solo ai tentativi di connessione. Non sto considerando il fatto che un server canaglia possa spoofare un utente / passare il login e raccogliere le credenziali in quel modo, o qualche altro comportamento malevolo come la registrazione del tuo IP per un successivo attacco di ritorsione, ecc.

    
risposta data 06.09.2018 - 20:05
fonte
3

Se non si dispone della chiave host, un altro server può fingere di essere il server al quale si sta tentando di accedere. Questo potrebbe essere un problema se si inviano informazioni riservate tramite il collegamento prima che ci si accorga di essere connessi al server sbagliato.

Dovresti anche essere cauto nell'avere abilitato l'inoltro X11 o, peggio, nell'invio di ssh-agent. Con l'inoltro di ssh-agent abilitato (e un agente in esecuzione) un server canaglia può eseguire un attacco MitM completo collegandoti al server reale con la tua chiave e monitorando tutto ciò che fai lì.

Idealmente useresti qualsiasi meccanismo di cui ti fidi per ottenere la chiave per il sysadmin per ottenere anche la chiave host nei tuoi known_hosts prima di tentare una connessione.

    
risposta data 07.09.2018 - 00:04
fonte
1

Dalla tua domanda, sembra che tu stia utilizzando indipendentemente dal fatto che il server conosca la tua chiave pubblica come parte dell'autenticazione. Stai utilizzando una chiave pubblica come segreto privato . Il punto ovvio è "Che cosa succede se ti connetti a un server ssh configurato per accettare (e registrare) qualsiasi chiave pubblica?".

Più in generale, ogni volta che si utilizza un meccanismo di sicurezza in un modo diverso da quello a cui era destinato, questo dovrebbe far aumentare le bandiere rosse. Espanderò la citazione di @ AndrolGenhald da questa risposta :

Public keys are called public for a reason, you should never assume it to be private even if you just generated it to add to GitLab over HTTPS and don't use it anywhere else.

Ci sono modi in cui la tua chiave pubblica potrebbe essere trapelata:

  • Potresti connetterti per errore al server ssh sbagliato, inviando così la tua chiave pubblica.
  • Quando ci si connette al server reale, l'hardware di rete in mezzo potrebbe registrare traffico, quindi registrare la propria chiave pubblica.
  • Sul disco, le chiavi private ssh sono solitamente criptate tramite password, ma le chiavi pubbliche non lo sono, il che comporta un rischio maggiore che la tua chiave pubblica passi via.
risposta data 07.09.2018 - 00:22
fonte

Leggi altre domande sui tag