it-swarm.dev

Quanto è sicuro SSL?

Se ho ottenuto un certificato SSL per il mio sito Web e utilizzo una connessione protetta SSL (HTTPS), è abbastanza sicuro per inviare i miei dati di accesso e password o devo aggiungere un po 'di crittografia o hash?

E quanto è sicuro SSL contro gli attacchi di Man In The Middle? Possono afferrare o persino modificare i dati inviati e ricevuti tramite HTTPS?

E che dire di GET e POST, sono entrambi crittografati o è solo la risposta del server crittografata o addirittura nulla?

Ho letto Wikipedia e molti risultati di Google su SSL e HTTPS, ma in realtà non lo capisco. Spero davvero che tu sia in grado di rispondere alle mie domande in modo semplice, così posso finalmente capire quanto siano sicuri SSL e HTTPS.

26
ReeCube

Principio di funzionamento HTTPS

Il protocollo HTTP è basato su TCP. TCP garantisce che i dati verranno consegnati, oppure è impossibile consegnarli (destinazione non raggiungibile, ecc.). Si apre una TCP e si invia HTTP messaggi attraverso di essa.

Ma TCP non garantisce alcun livello di sicurezza. Pertanto un livello intermedio chiamato SSL viene inserito tra TCP e HTTP e ottieni il cosiddetto HTTPS. In questo modo di lavoro si chiama tunneling: si scaricano i dati in un'estremità del tunnel (SSL) e li si raccolgono nell'altro. SSL riceve i messaggi HTTP, li crittografa, li invia su TCP e li decodifica di nuovo dall'altra parte. La crittografia ti protegge da attacchi MITM intercettativi e trasparenti (modifica dei messaggi).

Ma SSL non fornisce solo la crittografia, ma fornisce anche l'autenticazione. Il server deve avere un certificato firmato da un'autorità di certificazione ben nota (CA) che dimostri la sua identità. Senza autenticazione, la crittografia è inutile poiché è ancora possibile l'attacco MITM. L'attaccante potrebbe indurti a pensare che è il server a cui vuoi connetterti. La chat privata con il diavolo non è quella che vuoi, vuoi verificare che il server a cui ti stai connettendo sia davvero quello a cui vuoi connetterti. L'autenticazione ti protegge dal MITM.

Punti deboli

Quindi dove sono i punti deboli?

  • Endpoint di connessione sicura. Il trasferimento potrebbe essere sicuro, ma per quanto riguarda il server stesso? O il cliente? Non possono.
  • Non utilizzando HTTPS. Gli utenti possono essere indotti a non utilizzare lo schema in vari modi.
  • CA inaffidabili. Rompono la parte di autenticazione, consentendo l'attacco MITM.
  • Meccanismo di crittografia debole. Le tecnologie crittografiche invecchiano in due modi: potrebbero essere riscontrati gravi difetti nella loro progettazione, portando ad attacchi molto più efficienti della forza bruta, oppure i loro parametri e l'aumento della potenza di elaborazione a causa della legge di Moore potrebbero consentire un attacco di forza bruta fattibile.
  • Attuazione del regime. Bene, se si specifica A e si implementa B, le proprietà di A potrebbero non essere valide per B.

Risposte dirette

  • Sembra che tu abbia assicurato il trasferimento (usando SSL). Questo non è abbastanza, la sicurezza del tuo server può essere compromessa - non dovresti archiviare le password lì in testo semplice, utilizzare il loro modulo con hash, con l'aggiunta di sale, ...

  • SSL crittografa i dati sia durante l'invio che la ricezione. Gli attacchi MITM sono possibili praticamente solo quando l'attaccante ha un certificato firmato da un'autorità di cui il cliente si fida. A meno che il client non sia indotto a non utilizzare HTTPS, nessuno può leggere né modificare i messaggi inviati.

  • GET e POST sono solo due metodi per fare una richiesta HTTP. Ne esistono anche molti altri. Il metodo è solo una proprietà della richiesta HTTP. Tutti i messaggi sono protetti, sia le richieste che le risposte, indipendentemente da HTTP metodo utilizzato.

20
Palec

SSL protegge i dati in transito crittografandoli. Garantisce solo, a un client, che i dati verranno trasferiti dal proprio computer al server senza essere intercettati o alterati (i dati crittografati potrebbero essere intercettati ma non hanno alcun significato senza decrittazione). Detto questo, è responsabilità del cliente assicurarsi che SSL funzioni correttamente prima di inviare dati o fidare l'output dal server. Esistono attacchi che rimuoveranno SSL dalla connessione, ma non che intercettano o alterano i dati inviati tramite una connessione SSL protetta.

SSL non fornisce alcuna sicurezza una volta che i dati sono sul server. È ancora necessario utilizzare l'hash e la crittografia lato server se si desidera proteggere i dati inattivi dalle violazioni del server stesso.

HTTPS è HTTP inviato tramite una connessione crittografata SSL. Copre sia GET che POST e qualsiasi altra azione HTTP poiché l'intero flusso HTTP si verifica inalterato ma viene passato attraverso un tunnel SSL al browser client.

26
AJ Henderson

SSL protegge solo la connessione tra client e server. In teoria lo fa abbastanza bene (ok, ci sono alcuni problemi - ma questi sono minori rispetto a tutti gli altri problemi :) fintanto che nessuna delle circa 150 CA di cui ti fidi all'interno del tuo browser viene compromessa o collabora con alcune agenzie e dà loro una CA intermedia per fare attacchi man-in-the-middle.

E, come ho detto, protegge solo la connessione tra client e server. Quindi qualsiasi problema nella tua applicazione web come Cross-Site-Scripting, Cross-Site-Request-Forgery, SQL-Injection, Session-ID-ID non sicuri funzionerà ancora, anche se la connessione è crittografata. Inoltre, il server può essere compromesso ecc.

In breve, SSL è un po 'necessario per proteggere i dati, ma non è l'unica cosa che devi fare per proteggere i dati.

11
Steffen Ullrich

Da chi stai cercando di proteggere la comunicazione? Se è NSA o qualsiasi altra agenzia di sicurezza a livello statale, la risposta è no: hanno le risorse e la tecnologia per implementare con successo attacchi man-in-the-middle contro SSL. Se è reti criminali su larga scala, la risposta è ancora no: non possono compromettere le autorità di certificazione come il NSA et al. possono, ma possono facilmente compromettere le macchine stesse e dare un'occhiata a dati in uscita prima e dati in entrata dopo, crittografia. Se stai solo ospitando un server, questo è meno preoccupante per te, poiché è molto più probabile che il compromesso si verifichi sulla macchina dell'utente finale e quindi è il loro problema Se sono gli sniffer di pacchetti casuali che cercano di rubare e sfruttare i dati, allora sì - e nonostante quanto sopra, è ancora abbastanza una minaccia che dovresti usare SSL ogni volta che è possibile.

1
Robotman

Un dettaglio importante che le altre risposte non hanno menzionato è che SSL non crittografa l'URL della richiesta. Si noti che sotto lo schema GET, i dati sono generalmente codificati come parametri nell'URL. Ciò significa che se si invia un modulo con un campo password su GET, la password NON verrà crittografata.

0
stovetop