conjuntos de cifrado recomendados por JSSE

6

A raíz de POODLE, estoy revisando la configuración de varios servidores Tomcat que se ejecutan en el conector JSSE.

Para averiguar qué cifrados admitía JSSE escribí un pequeño fragmento que emitió todos los cifrados disponibles, el resultado fue:

SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA
SSL_DHE_DSS_WITH_DES_CBC_SHA
SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA
SSL_DHE_RSA_WITH_DES_CBC_SHA
SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA
SSL_DH_anon_EXPORT_WITH_RC4_40_MD5
SSL_DH_anon_WITH_3DES_EDE_CBC_SHA
SSL_DH_anon_WITH_DES_CBC_SHA
SSL_DH_anon_WITH_RC4_128_MD5
SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
SSL_RSA_EXPORT_WITH_RC4_40_MD5
SSL_RSA_WITH_3DES_EDE_CBC_SHA
SSL_RSA_WITH_DES_CBC_SHA
SSL_RSA_WITH_NULL_MD5
SSL_RSA_WITH_NULL_SHA
SSL_RSA_WITH_RC4_128_MD5
SSL_RSA_WITH_RC4_128_SHA
TLS_DHE_DSS_WITH_AES_128_CBC_SHA
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DH_anon_WITH_AES_128_CBC_SHA
TLS_DH_anon_WITH_AES_128_CBC_SHA256
TLS_DH_anon_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_NULL_SHA
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_NULL_SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHA
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDH_ECDSA_WITH_NULL_SHA
TLS_ECDH_ECDSA_WITH_RC4_128_SHA
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDH_RSA_WITH_NULL_SHA
TLS_ECDH_RSA_WITH_RC4_128_SHA
TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA
TLS_ECDH_anon_WITH_AES_128_CBC_SHA
TLS_ECDH_anon_WITH_NULL_SHA
TLS_ECDH_anon_WITH_RC4_128_SHA
TLS_EMPTY_RENEGOTIATION_INFO_SCSV
TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5
TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA
TLS_KRB5_EXPORT_WITH_RC4_40_MD5
TLS_KRB5_EXPORT_WITH_RC4_40_SHA
TLS_KRB5_WITH_3DES_EDE_CBC_MD5
TLS_KRB5_WITH_3DES_EDE_CBC_SHA
TLS_KRB5_WITH_DES_CBC_MD5
TLS_KRB5_WITH_DES_CBC_SHA
TLS_KRB5_WITH_RC4_128_MD5
TLS_KRB5_WITH_RC4_128_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_NULL_SHA256

He deshabilitado SSL completamente en el servidor, por lo que solo están disponibles TLSv1.0-2 . Quiero restringir sólo a cifrados fuertes. No me preocupa la compatibilidad con versiones anteriores.

Reduciendo la lista utilizando principalmente la recomendación de Mozilla junto con un responda en SO y este blog publicar he reducido la lista a:

TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_128_GCM_SHA256

¿Es este un conjunto sensato de cifrados? ¿He quitado algunos que no debería? ¿Hay alguno en esa lista que no tenga un alto nivel de seguridad?

    
pregunta Boris the Spider 22.10.2014 - 11:43
fuente

1 respuesta

10

Siempre es posible ser más paranoico, por lo que puedes reducir aún más la lista, dependiendo de lo preocupado que estés. Básicamente:

  • Elimine las suites de cifrado DH_anon: no autentican el servidor, por lo tanto, son débiles contra ataques MitM .
  • No utilice RC4 , ya que tiene sesgos conocidos.
  • No use 3DES porque su tamaño de bloque corto (8 bytes) hace que sea molesto más allá de los primeros gigabytes de datos.
  • No use ningún cifrado de bloque que funcione en el modo CBC porque el modo CBC en el modo MAC-luego encriptado que utiliza SSL / TLS es difícil de implementar correctamente (vea todos los ataques de BEAST y Poodle).
  • Siempre use un paquete de cifrado DHE o ECDHE para obtener secreto de envío .
  • No use SHA-1 si quiere verse bien con las multitudes en pánico que no entienden exactamente qué es una colisión basada en el análisis de ruta diferencial.

En ese momento, terminará aplicando TLS 1.2 (y rechazando las versiones anteriores), y la siguiente lista:

TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

Por supuesto, esta lista se reducirá aún más, dependiendo del tipo de clave contenida en el certificado del servidor. Si la clave tiene el tipo DSS, solo puede usar el primer conjunto de cifrado. Si tiene el tipo ECDSA, solo se aplica el segundo. Si, como el 99,3% del mundo, usa RSA para su certificado, puede elegir entre las dos últimas suites de cifrado; preferirás el ECDHE si quieres liberar tu hipster interior.

En la práctica , la elección del conjunto de cifrado SSL es extremadamente improbable que sea el punto débil a través del cual se producirá el compromiso. Cuando los atacantes secuestran su servidor, no lo harán abordando con la criptografía por adelantado. Así que no lo pienses demasiado. Tenga en cuenta que la mayoría de sus esfuerzos para eliminar la lista de conjuntos de cifrados realmente deben apaciguar a los auditores meticulosos y los gerentes preocupados, por lo que la pregunta operativa importante no es "¿qué garantizará la máxima seguridad?" pero "¿qué inducirá el sentimiento más fuerte de seguridad?".

    
respondido por el Tom Leek 22.10.2014 - 15:24
fuente

Lea otras preguntas en las etiquetas