miércoles, 19 de febrero de 2014

HTTPS. ¿Seguro que es seguro?

Aunque algunos de vosotros se sientan desazonados ante el título de este post, quiero  ante todo tranquilizaros. No es tan malo como parece. O sí. Todo es según el color del cristal con que se mire. Llevamos años escuchando la frase: “El protocolo HTTPS es seguro”. Pero también llevamos años escuchando que lo peor de la crisis ha pasado…

Voy a intentar destripar este “infalible” protocolo. Como siempre, primero os voy a explicar en qué consiste.

HTTPS son las siglas de HiperText Transfer Protocol Secure. Para los de “nivel medio” de inglés en sus CV, Protocolo Seguro de Transferencia de Hipertexto. Ea, ¿cómo os habéis quedado...? ¿Igual...? Pues intentaremos volver a traducirlo. 

Todos sabéis ya que las páginas web utilizan un lenguaje llamado HTML, y que se puede crear o modificar con un simple editor de texto. Navegar por Internet, de manera predeterminada, es hacerlo de manera abierta, o lo que es lo mismo, la información que va y viene desde la página web que estamos visitando y nuestro PC, se transmite en texto plano y es susceptible de ser escuchada y entendida por métodos no excesivamente complicados (incluso fáciles, diría yo). Así que para poder intercambiar datos sensibles, utilizamos el protocolo HTTPS, que no es otra cosa que aplicar cifrado a la información. Como recordaréis los que hayáis leído mis anteriores post, existen diversos métodos de cifrado, unos más seguros que otros. 

En concreto, HTTPS procede a cifrarse utilizando SSL/TLS, que son unas bonitas siglas que corresponden a Secure Sockets Layer/Transport Layer Security, diferentes sistemas de cifrado que podemos simplificar diciendo que son “razonablemente” seguros, por no decir completamente, algo que ya sabéis que es imposible. 

[Frannoe dixit]
Entonces, ¿a qué viene el título del post? ¿Para crear un flame…? 

[Jose respondere]
Je, je, je… No hombre, después de la última experiencia, no quiero volver a pasar por ello…

Vamos a ver el porqué de mis reparos a la navegación segura bajo HTTPS. La seguridad de este protocolo está basada en un proceso de cifrado robusto, difícilmente o imposible de descifrar, y una relación de confianza con el sitio web donde nos conectamos de forma segura, ya que sólo si confiamos en el sitio que estamos visitando, se generará el tráfico cifrado entre el servidor y nosotros.

Para el cifrado de la información, HTTPS utilizaba de manera predeterminada el conocidísimo RC4, desarrollado por Ron Rivest (coautor de RSA). De este mozo ya os hablé en el post de cifrado de Thunderbird. También os he hablado de RC4 en el post de Wi-Fi, ya que es el algoritmo de cifrado de WEP y WPA/WPA2. Es un algoritmo de cifrado robusto, simple y efectivo. También os comenté que, aunque su código no ha sido liberado nunca, una descripción de éste fue publicada de forma anónima en una lista de correo y después se expandió como la espuma por la web. Esto ha hecho que el certificado haya sido marcado como "DEPRECATED", aunque Ron Rivest ha insistido en que su uso sigue siendo perfectamente válido. Creo que en este caso Ron no va a ganar...

El protocolo funciona aplicando dos protocolos más sencillos, que generan unos arrays de números en los que los valores son colocados de manera aleatoria. El caso es que el año pasado se descubrió que esa aleatoriedad no era lo bastante aleatoria, valga la redundancia. Y eso no es bueno, nada bueno. RC4 continúa usándose, aunque cada vez menos, debido a su velocidad. Claro, a los administradores de páginas HTTPS les interesa un protocolo rápido, que no haga que la navegación sea lenta y que no sobrecargue al servidor. Así que a pesar de la vulnerabilidad, continuó usándose durante todo el año pasado. Hoy en día, en las páginas seguras que yo uso habitualmente, ya está sustituido, pero lo podreis comprobar cada uno en sus propios accesos, como os explicaré más adelante. ¡Ojo! No estoy declarando con esto que sea fácil romper este protocolo. Sólo que existe una probabilidad más alta que con otro. Probabilidad no es igual a posibilidad. La mecánica cuántica establece que existe una probabilidad de que corras contra un muro y lo atravieses, sin que ninguno de tus átomos colisione contra cualquiera de los átomos del muro, apareciendo al otro lado con las narices intactas…. ¿Queréis probar vosotros? A mí es que da la risa floja sólo de pensarlo…

Pasamos a estudiar el otro parámetro de la ecuación. La relación de confianza.  Ésta se establece mediante el uso de certificados de autenticación. Los más antiguos del Blog, recordarán que en la serie que publiqué para montar nuestro propio servidor, creamos nuestro certificado de autenticidad. Claro, servía para nuestros propósitos, ya que no íbamos a autenticarnos ante nadie, excepto ante nosotros mismos. Comentaba entonces, que la única diferencia entre nuestro certificado y el de Google, por poner un ejemplo, era que el nuestro no estaba validado por ninguna entidad validadora de certificación (CA o Certificate Authority). Así, si llegamos a una página web https, y su certificado no es válido, nuestro explorador nos avisará del error del mismo. 

¿Y qué es lo que hace que salten las alarmas en nuestro navegador? Pues que dicho certificado no esté reconocido por una de las entidades en las que confiamos. Y aquí viene el problema. ¿En cuales confiamos? Porque la lista, lamentablemente, se está volviendo infinita. 

Veréis, en el caso de Firefox, Mozilla mantiene una lista de entidades de confianza seguras. A éstas se las denomina Entidades de Certificación Raíz de Confianza.
Podemos verlas accediendo a las preferencias de Firefox->Avanzado->Certificados->Ver Certificados:


Bien, vamos a dar por válidas las Entidades Raíz que nos indica Mozilla. El problemas es que estas Entidades pueden emitir certificaciones para que otras Certificadoras emitan a su vez certificados válidos (parece un trabalenguas, ¿verdad?). Éstas se llaman Entidades Certificadoras Intermedias, y son tan válidas como las Entidades Raiz. Estas Certificadoras intermedias, pueden, a su vez, emitir certificados para otras Entidades Certificadoras, y suma y sigue. Mientras dependan, en el origen, de una Entidad Raíz, nuestro navegador confía en ellas.

Ahora imaginemos una situación que puede llegar a ser real. Imaginar que una persona de dudosa moral, monta una tienda en Internet para la venta de portátiles a mitad de precio. Un chollo, ¿no? Bien, como no nos fiamos un pelo, no vamos a comprar en una página en donde tengamos que poner los datos de nuestra tarjeta de crédito, si ésta no empieza por https, que llevamos años escuchando que es lo que hay que hacer para estar seguros. Pero, ¿qué necesita nuestro chorizo de turno para crear una página https que no haga saltar todas las alarmas en nuestro navegador? Eso que estáis pensando, un certificado validado.

Y, ¿cuánto cuesta obtener un certificado validado? Pues depende del tipo, porque lo puedes obtener desde poco más de 10 €. E incluso menos si nos buscamos una Entidad dos o tres pasos por debajo de una Entidad Raíz. Y si está en un país de esos que tienen “mucho control”, pues mejor que mejor. ¿Por qué no nos vamos a fiar de una Entidad Certificadora China, eh? Ya, para rizar el rizo, podemos incluso conseguir un certificado totalmente válido gratuitamente, por un periodo de prueba de 90 días. 

Así que por poco más de 10 €, alguien puede montar una página donde dejaremos tranquilamente el número de nuestra tarjeta bancaria, CVC incluído. ¿A que mola? Ah!, se me olvidaba… todo esto de forma totalmente segura, encriptada y tal, ¿eh?. No seais mal pensados…

¿Entendéis ahora porqué tengo reparos a la expresión esa de “navegar bajo protocolo https es totalmente seguro”? 

[Frannoe dixit]
¿Y se puede hacer algo?

[Jose respondere]
Algo se puede hacer, si. Aunque siempre tendremos que estar con mil ojos, por si las moscas.

Empezando por el cifrado, podemos desactivar en nuestro Firefox el uso de RC4. Aclaración: Yo lo tengo desactivado. No me interesa entrar en una página https que tenga dicho cifrado. Debería ser trabajo del administrador de dicha página utilizar otro sistema de cifrado. Pero es decisión de cada uno. Quiero decir, que yo ya he comprobado que las páginas potencialmente peligrosas para mí (bancos y compras on-line) no utilizan dicho protocolo. Pero si una página de una compañía del gas o de seguros lo tiene… pues a lo mejor no es tan grave, siempre y cuando no vengan los datos de nuestra cuenta corriente o tarjeta, ¿no?

¿Y cómo sabemos si utiliza un cifrado u otro? Vamos a verlo. Vamos a conectarnos primero a un banco famoso:

 

Vemos el candado en la barra de direcciones, lo que significa que estamos navegando bajo https. Pulsamos en él y nos da cierta infomación:


Pulsando en más información vemos… más información. Paradójico, ¿verdad?  


Y aquí abajo vemos que el protocolo de cifrado no es RC4. ¿Y en esta otra página?



Vaya, pues estos siguen utilizando RC4... Pues eso, que yo paso de esta gente… Para desactivar el RC4 en nuestro Firefox es tan sencillo como acceder a about:config, y buscar RC4. Después, dejaremos en False todas las opciones que nos salgan:




¿Qué ocurrirá ahora si queremos acceder a esa página? Pues en el caso que nos ocupa, ocurre esto: 


¿No es pa matarlos? Claro, es que RC4 es más ligero y rápido que AES, así que yo, por defecto, te cuelo el RC4… No, si tontos no son...

Alguien puede pensar que lo siguiente que deberíamos hacer, es verificar la lista de las Entidades Raíz en las que confiamos. Hay que tener cuidado con esto. Si nos cargamos por ejemplo a Verisign, dejaremos de confiar en la mitad de las páginas seguras de Internet. Pero tal vez una buena idea sería eliminar aquellas entidades pertenecientes a países, digamos, oscuros. Cualquier buscador te dará información de las entidades que desees eliminar. No seré yo quien me eche encima al departamento jurídico de una Entidad Certificadora secundaria por deciros que no la aceptéis. Pero a veces me pregunto, ¿qué se me ha perdido a mí en Turquía, por poner un ejemplo?

En definitiva lo que tenemos que hacer es fijarnos en nuestro navegador, que es muy listo y nos dice más cosas de lo que pensamos.

Vamos a acceder, por ejemplo, a VeriSign (https://www.verisign.es)


Esto viene a ser una página certificada “de pata negra”, con un certificado del tipo Extended Validation (EV). Para empezar, nos describe en la propia barra de navegación el certificado. Si pulsamos de nuevo en más información, y a continuación en Ver cerfificado, pestaña Detalles, nos adentramos en las entrañas del mismo:
  

Aquí vemos quién es la Autoridad que ha ratificado como correcto dicho certificado, en concreto se trata de una Autoridad Primaria de Certificación o Certificadora Raíz. Claro que certificarse a sí mismo no debería ser ético, pero el caso que nos ocupa es ciertamente peculiar, al tratarse de una Autoridad Primaria. Veamos a nuestros amigos de Google:



Vaya, de momento no aparece en verde, ni especifica a quién pertenece…. Porque es Google, porque si tratara de una página de compraventa, ya estaría con la mosca detrás de la oreja. Además, eso de que alguien se certifique a sí mismo… Salvo que seas una Autoridad Primaria, como que no convence, ¿no?...Más información, please:



Insisto, porque se trata de Google, porque este sería un ejemplo de lo mal que está el tema de los certificados en la web. Así que GeoTrust Global CA (Autoridad Certificadora Raíz) autoriza a Google Internet Authority G2, y ésta es la que certifica a *.google.com, o sea, a sí misma…. Pues qué queréis que os diga… En las Notarías son más serios… Ya la repanocha hubiera sido que la autorizara una entidad China o Coreana… 

[Frannoe dixit]
Pero, ¿hay problema porque Google se certifique a sí mismo?

[Jose respondere]
No, Fran, con Google no hay problema… de momento. Como objeción, puedo decirte que con el dinero que gana Google, bien podía tener un certificado extendido. Eso como mínimo. Pero lo mismo te diría de los bancos. Ahora bien, siendo muy paranoicos, podemos pensar que al ser Google una empresa norteamericana, se puede doblegar ante las presiones de la NSA, por poner un ejemplo. Así, Google podría generar un nuevo certificado para ellos, y entonces no necesitarían romper ningún encriptado, sea RC4 o RSA. Teniendo el certificado original, un ataque Man-in-the-Middle desencriptaría todo el tráfico HTTPS con Google. Jodido,  ¿eh? ¿Lo estarán haciendo ya?... Qui lo sá…

¿Con esto terminamos? No, todavía queda una pequeña cosita. Hay algo que es superior a mis fuerzas. No puedo, soy incapaz de entender porqué configuran por defecto la caché de esta manera. Vamos a ver, Firefox, alma de cántaro… ¿por qué la información de las páginas https se queda cacheada en el disco? Y, ¿qué es lo que estás cacheando exactamente? Venga, hombre, mi hijo de doce años cuando trae una nota y no quiere que me entere, la esconde para que no la encuentre, no la deja guardada en el cajón…


Así que about:config de nuevo, y buscar cache.disk. De las claves que salen, cambiamos a False la clave browser.cache.disk_cache_ssl


Y como recordatorio final, hagamos caso al Firefox, que tan mal hecho no está después de todo. La información que nos da en cuanto a las páginas seguras es esta:

 

El globo terráqueo de color gris indica que el sitio no proporciona ninguna información de su identidad y la conexión a dicho sitio no está cifrado o está cifrado parcialmente, con lo que no puede garantizarse la seguridad. ¿Qué hago yo? Vade retro Satanás...

La señal de advertencia naranja indica que el sitio no proporciona ninguna información de su identidad y la conexión a dicho sitio está cifrada sólo parcialmente, con lo que tampoco está garantizada la seguridad. ¿Qué hago yo? Vade retro, Satanás…

El candado gris nos indica que el propietario del sitio ha comprado un certificado que demuestra que son los propietarios, y el sitio en sí no es falso. El cifrado el correcto, y la página segura. Sin embargo, no nos confirma quién es el propietario del sitio. ¿Qué hago yo? Bueeeno, vaaale… Hay que ser rata para no gastarse el dinero en un certificado completo… Si la página es conocida, adelante. El problema es que la inmensa mayoría de sitios seguros utiliza este tipo de certificado.

Y por último el candado verde nos indica que el sitio ha sido verificado mediante un certificado extendido (EV), que es un tipo de certificado que exige un proceso de verificación de la identidad muy riguroso. Asimismo, nos indica que el sitio está cifrado correctamente. Ojalá fueran así todas las páginas seguras.

Espero que os sirva de orientación.

1 comentario:

  1. Casino - JT Hub
    Casino-Online! Casino-Online! All you 나주 출장샵 have 구미 출장샵 to do 화성 출장안마 is follow the link. If you already have it, you can follow the link 광주 출장안마 with any 서귀포 출장안마

    ResponderEliminar