StartTLS

Il comando StartTLS (conosciuto anche come STARTSSL o StartSSL, in inglese Opportunistic TLS) è un'estensione del protocollo Transport Layer Security (TLS) che consente di crittografare le informazioni trasmesse mediante il protocollo TLS. StartTLS viene utilizzato come estensione del protocollo principalmente nella comunicazione tramite e-mail per i protocolli SMTP, IMAP e POP. HTTP adotta un metodo proprio (specificato in RFC 2817) che somiglia molto a StartTLS. Oggigiorno è tuttavia più diffuso l'utilizzo di HTTPS (RFC 2818). StartTLS può avviare il metodo di codifica anche nei protocolli e-mail seguenti oltre che in quelli menzionati sopra:

  • LDAP (RFC 4511)
  • FTP (RFC 4217)
  • XMPP (RFC 6120)
  • NNTP (RFC 4642)

Tra i fornitori di servizi Internet, StartTLS è diventato di gran lunga il metodo di codifica delle e-mail più apprezzato, perché consente l'utilizzo di molti tipi diversi di domini e certificati su un unico server. Ciononostante, il metodo è oggetto di critiche poiché alcune informazioni private, come l'indirizzo IP, vengono inizialmente trasmesse in modo non crittografato, rendendo possibili attacchi man in the middle attraverso la possibile sovrascrittura inavvertita di StartTLS da parte del fornitore.

Come funziona StartTLS?

Come comando aggiuntivo per SSL/TLS, il grande vantaggio che offre StartTLS è il fatto che la cifratura non impedisce la comunicazione con quei client che non supportano questo metodo. StartTLS presenta dunque meno problemi di compatibilità. Se dovesse tuttavia capitare che un server non accetti TLS, il programma di posta elettronica (client) deve sapere come procedere con i dati. Un altro vantaggio è rappresentato dalla negoziazione bilaterale per la crittografia che rende, in caso di errori nella comunicazione, l'intervento dell'amministratore o dell'utente superfluo grazie a processi automatizzati.

Nel caso del metodo StartTLS, la connessione viene sempre avviata in modalità non cifrata, sulla porta che prevede testo in chiaro. Il protocollo negozia la cifratura con il client soltanto una volta eseguito il comando StartTLS, senza stabilire una nuova connessione. Grazie a StartTLS, in caso di errore nella comunicazione, non è necessario collegarsi alla porta, dal momento che il client può semplicemente risalire al metodo StartTLS presente sul server.

Gli svantaggi del metodo StartTLS emergono in relazione ai software di sicurezza. I firewall devono analizzare il metodo a livello applicativo per poter distinguere i dati cifrati da quelli non cifrati. Lo stesso vale per i proxy, che in genere lavorano con porte diverse, mentre nel caso di StartTLS non variano mai. Questo ostacola o impedisce il relativo caching.

In termini di protezione dei dati, StartTLS presenta alcuni rischi. La maggior parte dei programmi di posta elettronica utilizzano l'opzione "TLS se possibile", che rende impossibile per l'utente sapere se la connessione al server sia cifrata o meno. Aumenta, inoltre, il rischio di un attacco man in the middle, dal momento che l'operatore di rete è in grado di filtrare l'estensione StartTLS potendo così registrare a sua volta lo scambio di dati. Infatti, nel caso in cui il comando StartTLS non venga eseguito, i dati trasferiti non vengono cifrati e questo, spesso, senza che l'utente se ne accorga.

Consiglio

Scoprite nel nostro manuale sugli attacchi man in the middle come funziona questo metodo di spionaggio.

Pertanto si consiglia innanzitutto di eseguire un test approfondito per assicurarsi che il server supporti effettivamente StartTLS. Solo allora è raccomandabile includere il metodo nelle proprie procedure. Se la comunicazione cifrata non va a buon fine è a causa di un problema esterno.

Esempio: e-mail

Una e-mail deve essere cifrata mediante il metodo TLS. Viene selezionato il protocollo StartTLS per poter integrare il metodo di codifica in modo semplice nel funzionamento standard. Solitamente l'opzione è disponibile nella configurazione o nelle impostazioni dell'account del vostro client di posta elettronica. Una volta inviata l'e-mail si avvia la comunicazione:

  1. Il client chiede al server di posta elettronica con "250-STARTTLS" se il metodo di codifica viene accettato.
  2. In caso di risposta positiva ("go ahead") viene avviata la connessione criptata.
  3. Il client riavvia la connessione. Lo scambio di e-mail avviene ora in modo cifrato.

Come testare StartTLS?

I protocolli TLS utilizzano porte diverse a seconda dell'operatore. Dato che con StartTLS non è necessario effettuare cambiamenti delle porte, la sua integrazione nella connessione è molto semplice ed è sufficiente disporre di una console adeguata per poter testare il metodo di codifica. In questo modo è possibile verificare quale porta utilizza il singolo operatore per StartTLS. Con il seguente comando (ad esempio in NetCat) è possibile controllare se un server di posta elettronica accetti StartTLS come metodo di codifica nel funzionamento standard:

$ nc smtp.test.server smtp
220 Mailserver ESMTP Exim 4.69 Wed, 18 Jul 2018 12:19:15 +0200
ehlo test
250-Mailserver Hello einsundeins [10.1.2.73]
250-SIZE 78643200
250-PIPELINING
250-STARTTLS
220-go ahead
250 HELP
Quit
221 Mailserver closing connection

Questo dovrebbe includere il comando "STARTTLS" per poter attivare la cifratura. Come vedete, in questo caso dati personali come l'indirizzo IP vengono trasmessi senza cifratura.

Nel caso di OpenSSL il comando è il seguente:

$ openssl s_client -host mail.test.server-port 25 -starttls smtp
CONNECTED(00000003)
[...]
250 HELP
ehlo test
250-Mailserver Hello einsundeins [10.1.2.73]
250-SIZE 52428800
250-PIPELINING
250-AUTH PLAIN LOGIN
250 HELP

Per SMTP l'autenticazione non è così immediata. Nella maggior parte dei casi a questo problema viene posto rimedio mediante il metodo "AUTH PLAIN", per il quale è necessario che i dati di accesso siano codificati in Base64. Con il comando Perl $ perl -MMIME::Base64 -e 'print encode_base64("\000user-ju\000secret")' viene così creato un codice che viene poi trasmesso al server SMTP ("AUTH PLAIN [Code]"). Il test StartTLS è andato a buon fine se il server risponde con "Authentication succeeded" (incluso il codice). Dopo di che è possibile eseguire ulteriori comandi di posta elettronica.

Consiglio

Se desiderate testare StartTLS per server o protocolli non compatibili con OpenSSL potete utilizzare lo strumento gnuts-cli (del pacchetto gnuts-bin).