it-swarm.it

SSL / TLS (https) nasconde gli URL a cui si accede?

Supponiamo che lo scrivo nel mio browser

https://www.mysite.com/getsecret?username=alice&password=mysecret

e un utente malintenzionato sta monitorando tutto il traffico da me al mio ISP.

Quali informazioni sono protette da HTTPS? L'URL è stato rivelato? Vengono rivelati i parametri della richiesta get?

Inoltre, HTTPS fornisce integrità per l'URL?

Ho provato a guardare vari articoli HTTPS e le specifiche TLS ma non sono riuscito a capirlo.

[EDIT:] Va bene se viene rivelato solo il nome di dominio del server. Tuttavia, nessuna parte di ?username=alice&password=mysecret dovrebbe essere rivelato.

71
Jus12

Il protocollo HTTPS è equivalente all'utilizzo di HTTP su una connessione SSL o TLS (su TCP).

Pertanto, prima viene aperto al server un connessione TCP (sulla porta 443). Questo di solito è sufficiente per rivelare il nome host del server (ovvero www.mysite.com nel tuo caso) all'attaccante. L'indirizzo IP viene osservato direttamente e:

  1. di solito hai fatto una query DNS non crittografata prima,
  2. molti server HTTPS servono solo un dominio per indirizzo IP,
  3. Il certificato del server viene inviato in chiaro e contiene il nome del server (tra più, forse),
  4. nelle versioni TLS più recenti, c'è l'indicazione del nome del server, con la quale il client indica al server quale nome host è desiderato, in modo che il server possa presentare il certificato giusto, se ne ha più. (Questo è fatto per poter andare via da 2.)

Quindi ha luogo una stretta di mano TLS. Ciò include la negoziazione di una suite di cifratura e quindi uno scambio di chiavi. Supponendo che almeno uno dei browser e del server non includesse la cifra NONE nelle suite accettate, tutto ciò che segue lo scambio di chiavi è crittografato.

E supponendo che non vi sia alcun attacco man-in-the-middle di successo (ovvero un attaccante che intercetta la connessione e presenti un certificato server forgiato che il tuo browser accetta), lo scambio di chiavi è sicuro e nessun intercettatore può decifrare qualsiasi cosa sia allora inviato tra te e il server e inoltre nessun aggressore può modificare qualsiasi parte del contenuto senza che questo venga notato. Ciò include l'URL e qualsiasi altra parte della richiesta HTTP, nonché la risposta dal server.

Certo, come D.W. menzioni, la lunghezza di entrambe le richieste (che contiene non più dati variabili rispetto all'URL, forse alcuni cookie) e la risposta possono essere viste dal flusso di dati crittografato. Questo potrebbe sovvertire il segreto, specialmente se sul server ci sono solo poche risorse diverse. Anche eventuali richieste di risorse di follow-up.

La tua password nell'URL (o in qualsiasi altra parte della richiesta) dovrebbe comunque essere sicura, al massimo è possibile conoscerne la lunghezza.

59
Paŭlo Ebermann

Come ti hanno detto @ Paŭlo Ebermann e @Jeff Ferland, la richiesta GET è crittografata sotto SSL e quindi è sicura. Tuttavia, non dimenticare che molti server Web registrano richieste e parametri GET e che eventuali credenziali o altre informazioni sensibili inviate tramite GET potrebbero essere scritte in un registro da qualche parte. Per tale motivo, è necessario utilizzare POST (che sarà anche crittografato con SSL) quando si inviano dati sensibili.

Questo rientra nella categoria di "crittografia non è una sicurezza magica che risolve tutti i tuoi problemi".

26
gowenfawr

Dovresti supporre che l'URL non sia protetto, ovvero che un intercettatore passivo potrebbe essere in grado di apprendere quale URL stai visitando.

Mi rendo conto che ciò contraddice ciò che sostengono alcune altre persone, quindi è meglio che lo spieghi.

È vero che tutto ciò che viene inviato dopo il nome di dominio viene crittografato. Ad esempio, se l'URL è https://www.example.com/foo/bar.html, poi www.example.com è visibile all'attaccante, mentre la richiesta HTTP (GET /foo/bar.html HTTP/1.0) è crittografato. Ciò impedisce a un intercettatore di vedere direttamente la parte del percorso dell'URL. Tuttavia, la lunghezza della parte del percorso dell'URL potrebbe essere visibile al intercettatore. Inoltre, altre informazioni, come la lunghezza della pagina visitata, potrebbero essere visibili anche al intercettatore. Questo è un piede nella porta dell'attaccante. C'è stato alcune ricerche che usano questo piede sulla porta per imparare quali URL stai visitando , se l'attaccante può intercettare il tuo traffico https.

Sebbene non vi sia alcuna garanzia che questi attacchi abbiano successo, suggerisco che sarebbe prudente assumere il peggio: supporre che un intercettatore possa essere in grado di imparare quali URL stai visitando. Pertanto, dovresti no supporre che SSL/TLS nasconda da un intercettatore quali pagine stai visitando.

Sì, https fornisce integrità per l'URL visitato.

Post scriptum Un'altra avvertenza: in pratica, sslstrip e altri attacchi man-in-the-middle potrebbero avere successo contro molti o la maggior parte degli utenti, se il sito Web non utilizza HSTS . Tali attacchi possono violare la riservatezza e l'integrità dell'URL. Pertanto, se gli utenti visitano siti Web che non utilizzano HSTS su una rete non sicura (ad esempio Wifi aperto), dovresti essere prudente che un utente malintenzionato potrebbe essere in grado di apprendere quali pagine stanno visitando gli utenti. Una mitigazione parziale contro la minaccia sslstrip è che gli utenti tilizzano HTTPS Everywhere e che i siti adottino l'HSTS.

25
D.W.

Le seguenti cose coleranno prima dell'inizio della sessione:

  • Indirizzo IP del server
  • Certificato del server
    • Ciò includerà il nome di dominio pubblicato sul certificato, anche se ciò non garantisce che corrisponderà a quello che hai usato.
  • Query DNS

Nessun dato o richiesta non correlato alla creazione della connessione SSL (GET ...) vengono inviati al server prima dell'inizio della sessione SSL. L'URL viene inviato come parte della richiesta di pagina e protetto allo stesso modo del traffico che fa parte della sessione.

12
Jeff Ferland

Sì e no.

L'URL è crittografato correttamente, quindi i parametri della query non devono mai essere rivelati direttamente.

Tuttavia, l'analisi del traffico può ottenere spesso la lunghezza dell'URL e conoscere il server e la lunghezza dell'URL è spesso sufficiente per intercettare le pagine a cui si accede, soprattutto se si presume che vengano cliccati i collegamenti su una pagina. Google per "analisi del traffico ssl browsing" o qualcosa di simile se l'argomento ti interessa.

Nel tuo caso d'uso questo è di importanza marginale. L'uso intelligente dell'analisi del traffico può rivelare la lunghezza del nome utente e/o la lunghezza della password, a seconda che gli altri URL recuperati contengano anche il nome utente. Se imposti il ​​nome utente/la password a una lunghezza costante, puoi evitare questi attacchi, ma potrebbe non valerne la pena.

11
Nakedible

Gli stack TLS stanno iniziando a inviare l'indicazione del nome del server (SNI, http://en.wikipedia.org/wiki/Server_Name_Indication ; http://www.ietf.org/rfc/rfc3546 .txt ). Questo viene inviato in chiaro, il che significa che gli intercettatori possono vedere il nome del server digitato nella barra degli indirizzi.

9
Steve Dispensa