StartTLS: cifrado de correo sin puertos

El comando StartTLS, también conocido como STARTSSL o StartSSL, es una extensión al protocolo de seguridad de la capa de transporte (TLS) con el fin de encriptar la transferencia de información. StartTLS se emplea principalmente en la comunicación a través de correo electrónico para los protocolos SMTP, IMAP y POP. HTTP cuenta con un mecanismo específico (definido en RFC 2817) muy similar a StartTLS, aunque hoy está más extendido el uso de HTTPS (RFC 2818). Además de con los mencionados, StartTLS puede utilizarse con los siguientes protocolos:

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

StartTLS es, con diferencia, el mecanismo de encriptación de correo electrónico preferido por los proveedores de Internet, porque permite el uso de numerosos dominios y certificados en un solo servidor. No obstante, este mecanismo no es indiscutible: con él se transfieren algunos datos privados sin cifrar, como la dirección IP, y se pueden sufrir ataques como el de intermediario.

Certificado SSL
Protégete y compra un certificado SSL

Evita aparecer en la barra del navegador como "página no segura" y consigue la confianza de tus clientes con una página web con encriptación SSL.

¿Cómo funciona StartTLS?

El comando StartTLS brinda la gran ventaja de no impedir la comunicación con clientes no compatibles con el procedimiento, por lo que presenta pocos problemas de compatibilidad. No obstante, si un servidor no acepta TLS, el cliente de correo electrónico deberá saber cómo proceder con los datos. Otra de las ventajas reside en que el encriptado se produce por ambas partes, de modo que los procesos automatizados, hacen innecesario acudir al administrador o al usuario en caso de una comunicación fallida.

Con el método StartTLS, la conexión siempre se establece sin encriptar en el puerto en el que se proporciona el texto sin cifrar. Solo cuando se ejecuta el comando, el protocolo negocia la encriptación con el cliente de correo sin crear una conexión nueva. Gracias a este procedimiento, no se tiene que conectar con el puerto si se da un error en la comunicación, ya que el cliente podrá acudir simplemente al protocolo StartTLS en el servidor de correo.

Los inconvenientes de StartTLS están relacionados con el software de seguridad. Los cortafuegos deben analizar el procedimiento en la capa de aplicación para diferenciar los datos cifrados de los que no lo son. Algo parecido ocurre con los proxies, que prefieren funcionar con una diferenciación de puertos (con StartTLS, el puerto no cambia), lo que entorpece el funcionamiento o lo impide por completo.

En cuanto a protección de datos, StartTLS tampoco es totalmente inofensivo. La mayoría de los programas de correo emplean la opción “TLS si es posible”, con lo que el usuario no sabe si la conexión con el servidor de correo está cifrada o no. Asimismo, aumenta el riesgo de sufrir un ataque de intermediario cuando el operador de red filtra la extensión StartTLS y registra el intercambio de datos. En ese caso, no se aplicará el comando StartTLS y la información se transferirá sin cifrar y sin que el usuario sea consciente de ello.

Consejo

Descubre con nuestra guía cómo funciona un ataque de intermediario.

Por este motivo, se recomienda realizar un test minucioso que garantice la compatibilidad del servidor con StartTLS. Solo entonces debería utilizarse este procedimiento. Si, a pesar de la compatibilidad, la comunicación resulta fallida, se deberá a un problema externo.

Ejemplo: correo electrónico

Para cifrar un correo electrónico debes utilizar el procedimiento TLS. Elige el protocolo StartTLS para integrar el método de cifrado en el funcionamiento normal. La opción correspondiente la encontrarás en la configuración de la cuenta o en la configuración de la cuenta del cliente de correo. Tras enviar el correo, comenzará la conexión:

  1. El cliente solicita al servidor la aceptación del método de cifrado mediante el comando “250-STARTTLS”.
  2. Si la respuesta es positiva (“go ahead”), se establece la conexión cifrada.
  3. El cliente establece de nuevo la conexión y el correo electrónico se envía de forma cifrada.

¿Cómo puedo comprobar el funcionamiento de StartTLS?

Los protocolos TLS utilizan diferentes puertos en función del proveedor. Puesto que StartTLS se incorpora simplemente a la conexión sin necesidad de cambiar de puerto, el procedimiento de cifrado puede comprobarse desde cualquier consola adecuada. De este modo, se comprobará qué puerto utiliza el proveedor para StartTLS. Con los siguientes comandos, podrás comprobar (p. ej.: en NetCat) si un servidor de correo es compatible con el método de cifrado de StartTLS:

$ 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

Para activar la encriptación, debería aparecer aquí el comando STARTTLS. Como puedes comprobar, los datos privados, como la dirección IP, se transfieren sin cifrar.

En OpenSSL, el comando se ejecuta de la siguiente manera:

$ 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

En SMTP, la autentificación no resulta tan sencilla. Para simplificarlo suele utilizarse el procedimiento AUTH PLAIN, en el que los datos de acceso se deberán cifrar en Base64. Con el comando perl, $ perl -MMIME::Base64 -e 'print encode_base64("\000user-ju\000secret")' se genera un código que se transmite al servidor SMTP (“AUTH PLAIN [Code]”). Si el servidor responde con “Authetication succeeded”, el test habrá concluido con éxito. Aparte de estos, pueden ejecutarse otros comandos de correo.

Consejo

Si deseas comprobar StartTLS en servidores o protocolos no compatibles con OpenSSL, puede ayudarte gnuts-cli (del paquete gnuts-bin).

¿Le ha resultado útil este artículo?
Page top