Gli aggressori possono rubare il certificato SSL dal server e usarlo per gli attacchi MITM?

8

Sto scrivendo un'app iOS per uso privato per fungere da client per un server PHP. Per proteggere la connessione, sto utilizzando un certificato SSL autofirmato.

Poiché il server è auto-ospitato, sulla prima connessione all'interno della mia LAN potrei essere abbastanza sicuro che non si stiano verificando attacchi MITM. Così ho salvato in un file il certificato che il server ha inviato al client e poi ho inserito il certificato scaricato nella mia app per controllare ogni connessione se il certificato inviato dal server e quello in bundle nella mia app erano uguali (SSL Pinning fondamentalmente).

So molto poco degli attacchi MITM e della sicurezza in generale, quindi la mia domanda è la seguente: un attaccante può scaricare il certificato (come ho fatto io) dal mio server e usare quel certificato per fingere di essere il server ed eseguire un attacco MITM ? Oppure sto interpretando male il modo in cui le opere di man-in-the-middle?

    
posta BigLex 23.05.2013 - 02:20
fonte

3 risposte

15

Non è il certificato che conta, ma la chiave privata . Quello non lascia il server. Per impersonare il server, l'uomo nel mezzo avrebbe bisogno di ottenere quella chiave privata. Il certificato stesso è di dati pubblici e inviato dal server a tutti i client che lo richiedono semplicemente collegandosi.

(A L'attacco Man in the Middle è una doppia imitazione: l'attaccante si pone come server quando si parla al client, come client quando si parla al server. In semplice SSL, senza autenticazione client basata su certificato, il client è nominalmente anonimo, quindi il montaggio di un MitM di successo si riduce a eseguire un server falso che i client accettano come sfortuna, fatemi sapere se non avete la chiave privata del server.)

    
risposta data 23.05.2013 - 02:35
fonte
3

In realtà, a seconda di come il tuo client implementa SSL / TLS e PKI, potrebbe essere possibile per un utente malintenzionato estrarre qualcosa di vagamente simile: ad esempio, leggi questa pagina su come l'intercettazione su connessioni sicure potrebbe essere tecnicamente possibile, se non viene prestata sufficiente attenzione alla parte PKI di SSL / TLS.

In breve: l'autore dell'attacco genererebbe un certificato di origine, in qualche modo farà affidamento sull'applicazione client (che è la parte critica) e quindi agirà come un man-in-the-middle che genera certificati server al volo, quando il tuo client si connette a un (il) server.

Modifica: Raggruppando i certificati che il software è destinato a fidarsi dell'applicazione, piuttosto che estrarli da un negozio che potrebbe compromettere il man-in-the-middle, è in linea di principio sufficiente a contrastare questo vulnerabilità.

    
risposta data 23.05.2013 - 02:46
fonte
2

Raggruppamento di certificati, installazione di certificati incorporati, implementazioni NON IMPORTA di periodo. Se pensi che sia così, ti manca la gestione dei certificati sottostante.

Quando viene effettuata una connessione tramite l'infrastruttura PKI, di solito funziona come segue:

Client (with cert) --> before connection is made, let me consult CA --> Internet
Client (with cert) --> Hey CA is this cert being used valid --> Internet CA
CA --> checks cert information
CA --> Valid cert? --> Yes --> This is a valid cert --> Client
CA --> Valid cert? --> No --> This is NOT A VALID cert --> Client

Ciò che accade con gli attaccanti è a) possono sostituire il TUO certificato valido con un STOLEN - CERT SEGNATO e quanto sopra si verifica:

Client (with signed STOLEN cert) --> Let me consult CA --> Internet
Client (with signed STOLEN cert) --> Hey CA is this cert valid?
CA --> checks cert information
(cert was not revoked)
CA --> Yes --> This is a valid cert --> Client

Da quello che sto leggendo, è l'impressione che quando viene effettuata una connessione SOLO il certificato VERRÀ UTILIZZATO e un attaccante non può assolutamente sostituire quel certificato. Ci vorrà un'enorme quantità di programmazione per tirarlo fuori. In effetti, un fornitore di software dovrebbe programmare N quantità di iterazioni per ciascun cliente per eliminarlo. Altrimenti, un certificato è un certificato è un certificato ...

    
risposta data 23.05.2013 - 14:24
fonte

Leggi altre domande sui tag