Cuando un cliente desea enviar datos a un servidor utilizando SSL / TLS, primero debe pasar por un protocolo de enlace para autenticarse con el servidor. Este handshake comienza con el "ClientHello", donde el cliente envía al servidor una versión de SSL o TLS que admite, los cifrados admitidos y otros datos de la sesión. En versiones anteriores de SSL (versión 2), fue posible interceptar este paquete de intercambio y modificar la lista de cifrados admitidos para que solo contenga cifrados débiles. Esto ya no es posible ya que SSLv3 utiliza un hash en la parte final del protocolo de enlace, donde el hash del cliente y del servidor compara los mensajes enviados y recibidos.
Todos los navegadores modernos admiten SSLv3 hasta TLSv1.2, pero utilizarán la versión más alta admitida por un servidor. Un intermediario no puede modificar directamente los paquetes enviados en el apretón de manos, pero un intermediario puede interceptar y eliminar ciertos paquetes. Al engañar al navegador para que piense que el servidor no admite una versión dada de SSL / TLS, un atacante puede degradar la versión negociada. Puede ver cómo se hace visitando la publicación reciente de Praetorian : Ataque de downgrade del protocolo TLS del hombre en el medio
¿Por qué alejarse de SSLv3 ahora?
Si bien SSLv3 incluyó mitigaciones especiales para evitar ataques de degradación del protocolo, no es necesariamente el protocolo ideal para usar. SSLv3 tiene diferencias criptográficas significativas, lo que podría dar lugar a debilidades que demuestren aún más por qué TLSv1.2 debería ser el estándar actual. Los cifrados y los cifrados de autenticación acordados, así como los mecanismos de intercambio de claves, difirieron significativamente en nuestras pruebas de degradación de protocolo. En el ejemplo anterior, TLSv1.2 usa criptografía de curva elíptica (ECC) junto con el modo de contador para AES, mientras que SSLv3 usa el cifrado RC4 más antiguo y RSA.
Algunos pueden preguntar por qué esto es necesario. En su charla de Black Hat de 2013, Alex Stamos habló sobre el estado actual y el futuro de la criptografía. Argumentó que uno de los peligros radica en la posibilidad de romper claves antiguas o mecanismos de intercambio de claves en algún momento en el futuro. En el caso de RSA, los criptógrafos y matemáticos han logrado avances significativos en el problema de la factorización. Diffie-Hellman (DH) se basa en el problema del logaritmo discreto para la seguridad criptográfica, y aunque no existe un algoritmo eficiente utilizado para calcular registros discretos, el tiempo de ejecución de los algoritmos de logaritmo discreto ha disminuido significativamente en el último año. Como comentó Stamos, una vez que RSA o DH falla, la firma del código se interrumpirá y los ataques a SSL / TLS serán muy frecuentes.
En resumen, un ataque activo en una conexión puede resultar en una menor seguridad criptográfica. Los clientes y servidores pueden evitar que esto suceda si solo se admiten versiones más recientes de TLS. Además, los clientes deben responder correctamente a los apretones de manos fallidos. Actualmente, muchos navegadores optan por la interoperabilidad sobre la seguridad, lo que hace factibles los ataques de degradación del protocolo. Estos cambios requerirán tiempo y esfuerzo significativos. Los navegadores tendrían que volver a implementar aspectos de cómo manejan los apretones de manos. La compatibilidad hacia atrás puede romperse en algunos casos. Sin embargo, eventualmente tendremos que requerir el uso de versiones más recientes de TLS compatibles con ECC. ¿Por qué no hacer el empuje ahora y prevenir futuros ataques?