¿Es STARTTLS menos seguro que TLS / SSL?


45

En Thunderbird (y supongo que en muchos otros clientes también) tengo la opción de elegir entre "SSL / TLS" y "STARTTLS".

Según tengo entendido, "STARTTLS" significa en palabras simples "cifrar si ambos extremos admiten TLS, de lo contrario no cifre la transferencia" . Y "SSL / TLS" significa en palabras simples "siempre encriptar o no conectarse en absoluto" . ¿Es esto correcto?

O en otras palabras:

¿Es STARTTLS menos seguro que SSL / TLS, porque puede recurrir a texto plano sin notificarme?

Respuestas:


46

La respuesta, basada en el STARTTLS RFC para SMTP ( RFC 3207 ) es:

STARTTLS es menos seguro que TLS.

En lugar de hablar por mí mismo, permitiré que el RFC hable por sí mismo, con los cuatro bits relevantes resaltados en NEGRITA :

Se puede lanzar un ataque de hombre en el medio eliminando la respuesta "250 STARTTLS" del servidor. Esto provocaría que el cliente no intente iniciar una sesión TLS. Otro ataque de hombre en el medio es permitir que el servidor anuncie su capacidad STARTTLS, pero alterar la solicitud del cliente para iniciar TLS y la respuesta del servidor. Para defenderse de tales ataques, tanto los clientes como los servidores DEBEN poder configurarse para requerir una negociación TLS exitosa de un conjunto de cifrado apropiado para los hosts seleccionados antes de que los mensajes puedan transferirse con éxito. También se DEBE proporcionar la opción adicional de usar TLS cuando sea posible. Una implementación MAYO proporciona la capacidad de registrar que TLS se usó para comunicarse con un par dado y generar una advertencia si no se usa en una sesión posterior.

Si la negociación de TLS falla o si el cliente recibe una respuesta 454, el cliente debe decidir qué hacer a continuación. Hay tres opciones principales: continuar con el resto de la sesión SMTP , [...]

Como puede ver, el RFC en sí mismo establece (no muy claramente, pero lo suficientemente claro) que NADA requiere que los clientes establezcan una conexión segura e informen a los usuarios si falla una conexión segura. Se explícitamente da a los clientes la opción de establecer silencio de texto plano conexiones.


55
Su punto es ciertamente válido, pero por falta de RFC o especificación oficial con respecto a SMTPS (es decir, SMTP + "SSL / TLS implícito" donde SSL / TLS se establece primero), los clientes SMTP / SMTPS también podrían decidir recurrir a una conexión simple si no pueden iniciar una conexión SSL / TLS en el puerto 465. Eso sigue siendo una opción de implementación.
Bruno

2
Hay muchas RFC para establecer conexiones TLS. En ninguna parte existe "permitir la conexión de texto sin formato" como una opción para cumplir con el RFC (al menos eso sería una novedad para muchas personas). Por lo tanto, SMTPS no requiere un RFC separado para ser más seguro que STARTTLS.
Greg

1
Hay RFC sobre TLS (RFC 5246 y predecesores), PKI (RFC 5280), verificación de nombre (RFC 6125), pero nada para describir la interacción entre SMTP y SSL / TLS en SMTPS oficialmente AFAIK, no de la misma manera que usted obtiene una especificación para HTTPS: RFC 2818. Uno puede decir "es obvio, simplemente establezca primero la conexión SSL / TLS", pero no todo es tan obvio (en particular el aspecto de verificación de identidad, que se formalizó recientemente en RFC 6125).
Bruno

23

No hay diferencia en la seguridad entre las dos opciones.

  • SSL / TLS abre primero una conexión SSL / TLS, luego comienza la transacción SMTP. Esto debe ocurrir en un puerto que no tiene un servidor SMTP no SSL / TLS que ya se está ejecutando; Es imposible configurar un solo puerto para manejar tanto texto sin formato como conexiones encriptadas debido a la naturaleza de los protocolos.

  • STARTTLS inicia la transacción SMTP y busca soporte del otro extremo para TLS en la respuesta a EHLO. Si el cliente ve STARTTLS en la lista de comandos admitidos, envía STARTTLS y comienza la negociación para el cifrado. Todo esto puede (y generalmente ocurre) en el puerto SMTP estándar de 25, en parte por compatibilidad con versiones anteriores, pero también para permitir el cifrado oportunista entre puntos finales que ambos lo admiten pero no necesariamente lo requieren.

En general, SSL / TLS solo se usa entre clientes finales y servidores. STARTTLS se usa más comúnmente entre MTA para asegurar el transporte entre servidores.

Dadas esas dos implementaciones, STARTTLS podría interpretarse como inseguro si el usuario o el administrador están asumiendo que la conexión está encriptada pero no la han configurado para requerir encriptación. Sin embargo, el cifrado utilizado es exactamente el mismo que SSL / TLS y, por lo tanto, no es más o menos vulnerable a un ataque Man-in-the-Middle más allá de este tipo de error de configuración.


2
Si la conexión está encriptada, tanto SSL / TLS como STARTTLS son iguales, sí. Pero eso no es lo que pregunté. Quise decir: si uso STARTTLS, ¿cómo sé (como usuario) si mi conexión está realmente segura? Si intento usar SSL / TLS, simplemente no puedo conectarme si el servidor no lo admite, pero al menos no se envía nada como texto sin formato. Pero si STARTTLS vuelve al texto sin formato, entonces mi correo se envía en texto sin que yo sepa que se envió en texto sin formato (haciéndome pensar que estoy a salvo cuando en realidad no lo estoy).
Foo Bar

66
No sé por qué esta respuesta fue elegida como correcta. Está incorrecto. Como Christopher señala, STARTTLS es menos seguro que TLS porque brinda una falsa sensación de seguridad a los clientes.
Greg

44
@greg no hay nada malo con el protocolo. La falla son los clientes que no siguen el rfc y no advierten al usuario cuando la conexión no está encriptada.
cuello largo

1
@longneck así que ... tal vez esto sea una cuestión semántica, pero los clientes no pueden "no seguir" el protocolo TLS y recibir un correo electrónico, punto. Entonces esa es una diferencia significativa.
Greg

2
@Bruno "Solo es menos seguro si el cliente está mal implementado" <= solo estás haciendo mi punto por mí. Si hay algo que el cliente puede hacer para hacer que la conexión sea insegura y al mismo tiempo establecer una conexión que funcione, entonces STARTTLS es menos seguro que TLS explícito (donde eso no es posible).
Greg

8

Para el correo electrónico en particular, en enero de 2018 se lanzó RFC 8314 , que recomienda explícitamente que se use "TLS implícito" en lugar del mecanismo STARTTLS para envíos IMAP, POP3 y SMTP.

En resumen, este memo ahora recomienda que:

  • La versión 1.2 o superior de TLS se utilizará para todo el tráfico entre MUA y servidores de envío de correo, y también entre MUA y servidores de acceso a correo.
  • Los MUA y los proveedores de servicios de correo (MSP) (a) desalientan el uso de protocolos de texto sin cifrar para el acceso y el envío de correo y (b) desprecian el uso de protocolos de texto sin cifrar para estos fines tan pronto como sea posible.
  • Las conexiones a los servidores de envío de correo y servidores de acceso a correo se deben hacer usando "TLS implícito" (como se define a continuación), en lugar de conectarse al puerto de "texto claro" y negociar TLS usando el comando STARTTLS o un comando similar.

(énfasis añadido)


4

La respuesta depende en cierto grado de lo que quiere decir con "seguro".

Primero, su resumen no captura la diferencia entre SSL / TLS y STARTTLS.

  • Con SSL / TLS, el cliente abre una conexión TCP al "puerto SSL" asignado al protocolo de aplicación que desea usar, y comienza a hablar TLS de inmediato.
  • Con STARTTLS, el cliente abre una conexión TCP al "puerto de texto sin formato" asociado con el protocolo de aplicación que quiere usar, luego le pregunta al servidor "¿qué extensiones de protocolo admite?". El servidor luego responde con una lista de extensiones. Si una de esas extensiones es "STARTTLS", el cliente puede decir "está bien, usemos TLS" y los dos comienzan a hablar TLS.

Si el cliente está configurado para requerir TLS, los dos enfoques son más o menos igualmente seguros. Pero hay algunas sutilezas sobre cómo se debe usar STARTTLS para que sea seguro, y es un poco más difícil para la implementación de STARTTLS obtener esos detalles correctamente.

Por otro lado, si el cliente está configurado para usar TLS solo cuando TLS está disponible, y usa texto sin formato cuando TLS no está disponible, lo que el cliente podría hacer es primero intentar conectarse al puerto SSL utilizado por el protocolo, y si eso falla, luego conéctese al puerto de texto sin formato e intente usar STARTTLS, y finalmente retroceda a texto sin formato si TLS no está disponible en ninguno de los casos. Es bastante fácil para un atacante hacer que falle la conexión del puerto SSL (todo lo que se necesita son algunos paquetes TCP RST oportunos o el bloqueo del puerto SSL). Es un poco más difícil, pero solo un poco, que un atacante derrote la negociación de STARTTLS y haga que el tráfico permanezca en texto sin cifrar. Y luego el atacante no solo puede leer su correo electrónico, sino que también puede capturar su nombre de usuario / contraseña para su uso futuro.

Entonces, la respuesta simple es que si se está conectando a un servidor que ya sabe que admite TLS (como debería ser el caso cuando envía o lee un correo electrónico), debe usar SSL / TLS. Si se ataca la conexión, el intento de conexión fallará, pero su contraseña y correo electrónico no se verán comprometidos.

Por otro lado, si se está conectando a algún servicio que no sabe si es compatible con TLS, STARTTLS puede ser marginalmente mejor.

Cuando se inventó STARTTLS, los ataques de "escucha pasiva" eran muy comunes, los ataques "activos" en los que el atacante inyectaba tráfico para tratar de reducir la seguridad eran menos comunes. En los 20 años más o menos desde entonces, los ataques activos se han vuelto más factibles y más comunes.

Por ejemplo, si está tratando de usar una computadora portátil en un aeropuerto u otro lugar público e intenta leer su correo a través del wifi que se proporciona allí, no tiene idea de lo que está haciendo esa red wifi con su tráfico. Es muy común que las redes wifi enruten ciertos tipos de tráfico a "servidores proxy" que se interponen entre las aplicaciones de su cliente y los servidores con los que intentan hablar. Es trivial para esos proxies deshabilitar tanto STARTTLS como "probar un puerto y luego otro" en un intento de hacer que su cliente recurra a texto sin cifrar. Sí, esto sucede, y es solo un ejemplo de cómo una red puede espiar su tráfico. Y tales ataques no se limitan a las agencias estatales de tres letras,


1

Sí, tienes lo básico correcto. Y sí, STARTTLS es definitivamente menos seguro. No solo puede regresar a texto plano sin notificación, sino porque está sujeto a ataques intermedios. Dado que la conexión comienza en claro, un MitM puede eliminar el comando STARTTLS y evitar que se produzca el cifrado. Sin embargo, creo que los servidores de correo pueden especificar que las transferencias solo ocurran después de que se haya configurado un túnel cifrado. Entonces puedes evitar esto.

Entonces, ¿por qué existe tal cosa? Por razones de compatibilidad. Si alguna de las partes no admite el cifrado, es posible que aún desee que la conexión se complete correctamente.


Entonces, un servidor capaz de STARTTLS también siempre será capaz de SSL / TLS, ¿verdad? Entonces, ¿siempre es mejor probar SSL / TLS primero y ver si funciona?
Foo Bar

2
@FooBar no, uno no implica que el otro esté disponible. de hecho, podrían configurarse con dominios de autenticación completamente diferentes.
longneck

3
STARTTLS no es vulnerable a MitM a menos que no valide certificados o use certificados débiles. El certificado todavía se presenta igual que siempre, y el cliente puede requerir que la actualización de TLS tenga éxito antes de continuar. Vale la pena señalar que esta es exactamente la misma situación que SSL / TLS.
Falcon Momot

1
No sé por qué la gente te está descalificando, esta es la respuesta correcta, STARTTLS es menos seguro que TLS y da una falsa sensación de seguridad. Los ISP pueden simplemente escribirlo: arstechnica.com/tech-policy/2014/11/…
Greg

1
En lo que respecta al protocolo en sí, STARTTLS es menos seguro que TLS porque permite explícitamente la comunicación de texto sin avisar al usuario: serverfault.com/a/648282/207987
Greg

1

De acuerdo con @Greg. Esos ataques son posibles. Sin embargo, los MTA se pueden configurar (dependiendo del MTA) para usar "TLS obligatorio", no "TLS oportunista". Lo que esto significa es que se usa TLS y solo TLS (esto también incluye STARTTLS) para las transacciones de correo electrónico. Si el MTA remoto no es compatible con STARTTLS, el correo electrónico se devuelve.


0

No, es no menos seguro, cuando la aplicación gestiona correctamente.

Hay cuatro vías para manejar TLS y muchos programas le permiten elegir:

  • No TLS
  • TLS en puerto dedicado (solo intenta TLS)
  • Use TLS si está disponible (Intenta starttls, usa una conexión sin cifrar cuando falla)
  • Siempre use TLS (usa starttlsy falla si no funciona)

La ventaja de TLS en un puerto dedicado es que puede estar seguro de que no hay respaldo cuando utiliza un programa que aún no conoce o que no expone la configuración detallada para el manejo de errores en su asistente de inicio.

Pero, en general, la seguridad depende del manejo de los errores de seguridad. Un programa podría decidir cambiar al puerto de texto sin formato cuando también falla TLS en el puerto TLS. Debe saber qué hará y elegir configuraciones seguras. Y los programas deben usar valores predeterminados seguros.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.