Tus datos en Internet, ¿están realmente seguros?

Publicado el 26 septiembre 2016 por Gaspar Fernández Moreno @gaspar_fm

Vivimos en un mundo conectado. Nuestros datos de usuario están en cientos de webs repartidas por el mundo. Algunas más confiables que otras. Aunque sí que depositamos nuestra confianza en ellas. Enviamos información privada casi sin preguntarnos si los desarrolladores o personal de seguridad de dicha web está realmente preparado y han hecho sus deberes. Sin preguntarnos si la empresa trata bien a sus empleados y si alguien del personal de seguridad traicionaría a todos los usuarios por una buena suma de dinero, o si un pendrive o un falso router wifi en las oficinas centrales puede causar un desastre y una filtración importante de los datos de la compañía donde tenemos nuestros datos... o si eso pasa sólo en las películas.

Bueno, estas cosas pasan de verdad, y tal vez pensemos que nuestros datos no son importantes. Aunque en los últimos meses ha habido filtraciones de muchas páginas (famosas y muy utilizadas, por ejemplo Yahoo, LinkedIn, Slack, Badoo, MySpace), con muchos usuarios que tienen sus datos comprometidos (correos electrónicos, nombres de usuario, contraseñas, actividad en web, direcciones físicas, ciudades, teléfonos, etc). Tal vez el tema de las contraseñas es más complicado porque los desarrolladores suelen estar concienciados y ahora se almacenan hashes, con sal y protegidos con algoritmos de mezclado y seguridad eficientes, pero aunque sea la norma y confiemos en que todo el mundo almacena de forma segura nuestras contraseñas, eso no es así siempre, y no es difícil encontrar alguna web que almacene todas las contraseñas de usuario en texto plano. Y que, cuando dichas contraseñas se filtran, sí podemos decir que estamos 100% expuestos.

Y es que nuestros datos cuentan con la seguridad del sitio con la seguridad más débil en el que lo hayamos dejado. Triste pero cierto, podemos preocuparnos por la seguridad de nuestros datos en decenas de sitios, pero basta con un sitio donde hayamos dejado los datos hace 10 años que no cuente con suficiente protección como para que éstos ya sean de dominio público.

Almacenando claves con hashes

Nota: ¡Quiero resumir todo en tres párrafos! Tal vez haya alguna inexactitud en esto que digo, pero acepto comentarios constructivos

Cuando un sitio almacena las contraseñas de manera correcta (con hashes), tenemos que tener en cuenta que esto son mecanismos de cifrado de una sola vía. Es decir, sólo podremos cifrar y no descifrar (o al menos, es muy costoso). Y, supuestamente a cada dato que podamos cifrar le corresponde un único dato cifrado, es decir, no deben existir, o al menos sea muy muy difícil encontrar varios datos a los que les corresponda un único dato cifrado.
En otras palabras, mi contraseña 12345, la almacenaré como 398k745A. De forma que cuando alguien mire nuestra clave no entienda nada, y sea muy difícil llegar al 12345 inicial. Y, por supuesto, no exista otra contraseña que genere el mismo 398k745A.

Ahora bien, cifrar estos datos con algoritmos de hash es algo muy rápido, imaginad una web en la que cientos de usuarios entran cada minuto. Algo que podríamos hacer es un ataque con fuerza bruta, es decir, conocemos el usuario, pues, probemos contraseñas, ¡como cuando en una película intentan averiguar la clave de una caja fuerte! Si lo hacemos contra una web, cada intento puede suponer algunos segundos, y muchas webs suelen restringir el acceso cuando hemos intentado varias contraseñas (como siempre, las que están bien hechas). Aunque si tenemos en nuestra propiedad el hash generado, no tendremos que enviar nada por web, sólo generar hashes y compararlos, y podemos llegar a comprobar varios miles por segundo... y eso puede llegar a ser peor porque si nuestra contraseña es mala seguramente en pocos minutos puedan averiguarla.

Pero los estudiosos de la seguridad (y matemáticos) no están quietos y a menudo descubren fallos en algoritmos de hash por lo que se puede reducir drásticamente el número de intentos necesarios para averiguar una contraseña. Y para esto están los algoritmos de sazonado (sal, salt, etc), lo que hacen es complicar un poco el hash mezclando la contraseña con otra información (aleatoria, fija o fija+aleatoria), mezclando los datos y pasando varias veces el algoritmo de hash, de tal forma que sea mucho más difícil descifrar la contraseña sin los datos añadidos (que suelen estar almacenados en otro sitio).

¡Sitios que almacenan las contraseñas en texto plano!

Os propongo un juego. Hemos visto que cuando un sitio almacena la contraseña con un hash, este no puede ser descifrado fácilmente, por lo que cuando alguien se identifica con su nombre de usuario y contraseña, el sitio lo que hace es cifrar la clave que acaban de darnos para identificarse y comparar el dato cifrado obtenido con el dato cifrado que ya teníamos del usuario. Si coinciden, ¡perfecto! el usuario entra, si no... la contraseña no era correcta.
Hasta aquí bien, hay sitios en Internet que permiten recordar la contraseña, en ellos, introduces tu correo y te envían la contraseña. Sabemos que es muy cómodo que te digan cuál era tu clave y listo, pero eso quiere decir que sí que almacenan tu contraseña en texto plano y, por tanto, no utilizan un método seguro para gestionarla. Por ejemplo, un empleado, o alguien con acceso a la base de datos puede conocer tu clave, o si las claves de la empresa se filtran, tu clave estará directamente expuesta.

Bueno, supuestamente en el año 2016, no debe haber webs que almacenen esta contraseña en texto plano. Por lo que me gustaría hacer un listado de sitios que sí lo hacen (y podemos averiguarlo, como he dicho antes porque al recordar contraseña te envían un correo con la misma contraseña que tenías.).

  • Clickxti : Es un sitio de pago por click, te envían un correo de un patrocinador y te dan menos de un céntimo por hacer click en dicha publicidad.
  • Sumaclicks : Es un sitio parecido al anterior, la última vez que lo probé tenían este problema todavía, aunque me han quitado el usuario, será por inactividad.
  • 000webhost : Alojamiento web que hasta hace pocos meses almacenaba la clave en texto plano.

Lo dicho, si encontráis más servicios que te permitan recuperar la clave en texto plano, enviádmelos, que los meto en este pequeño Hall of Shame.

Sitios inseguros

Existen sitios, que piden contraseñas, y las almacenan bien. Internamente las gestionan de forma muy eficiente y segura, pero utilizan el protocolo HTTP para comunicarse, lo que quiere decir que el tráfico hacia y desde el servidor podría ser interceptado (incluso por un amigo al que le des la clave de tu WiFi, o si estás en un punto de acceso público ya ni te cuento), es más, el tráfico viajará en texto plano, sin seguridad ni cifrado alguno, por lo que puede resultar fatal para nosotros. Ya que, aunque el servidor gestione de la mejor forma nuestros datos, la transmisión no se produce de forma correcta y puede dar lugar a filtraciones.

Y estamos hablando de sitios web, en los que podemos ver claramente HTTP o HTTPs en la cabecera de la conexión, pero... en el terreno de las aplicaciones móviles, que todo se produce de forma transparente al usuario. Es decir, la aplicación se conecta al servicio online al que pertenece y no sabemos exactamente si es HTTP o HTTPS, o cualquier otra vía de comunicación con o sin cifrado, porque la aplicación simplemente funciona... nos sorprenderíamos al ver la cantidad de información que viaja sin cifrado. Por lo que debemos intentar hacer que nuestras comunicaciones sean seguras, y si desconfiamos de algo, dar datos falsos, irrelevantes, que no nos identifiquen directamente...

Y, ¿esto en qué me afecta?

Tal vez te has registrado en varios sitios de Internet, tengas datos en la nube y, si llevas varios años en este mundillo tal vez habrá servicios web que ya tienes olvidados, cuyos mails no lees, pero están ahí y con la misma contraseña todos, una clave que sigues utilizando hoy para algunas cosas y lleva años acompañándote en tu vida online.

Por un lado, lo malo es la fuga de datos, puede que hayas introducido tu correo personal, tu dirección y teléfono (hace unos años era muy común que cuando te registraras en un sitio te pidieran casi casi hasta el DNI, o incluso). Por otro lado, muchas páginas de concursos lo siguen haciendo para enviarte el premio (no digo que no haya concursos legítimos, pero también hay algunas de dudosa reputación y poco confiables). Bueno, y si en lugar de tu contraseña también está tu respuesta a la pregunta secreta (esa que estaba tan de moda para recuperar la contraseña y que no valía nada más que para hacer el sistema un poco más inseguro).

Así que si alguna de esas páginas no es segura, o durante estos años no se ha renovado en materia de seguridad, y se filtra la base de datos de usuarios de alguna forma, esos datos ya podrían conocerse. Por otro lado, si se filtra una contraseña, ya es otra historia, porque no sólo podrían entrar en nuestro nombre en el servicio vulnerado, que en ocasiones no tiene mucha importancia (bueno, si es el caso de Yahoo, LinkedIn, GMail, puede que nos hagan daño), pero tal vez es la clave de un foro que usábamos hace tiempo pero sigue activo. Si se descubre dicha clave, un usuario atacante, seguramente quiera intentar ver si tienes una cuenta en Facebook, LinkedIn, Amazon, eBay, etc con la misma contraseña, y cuidado con Amazon y eBay que pueden tener asociados datos de pago y nos pueden hacer mucho daño.

Por esta y algunas razones más es importante utilizar una contraseña diferente y segura para cada servicio. Y si no te da la memoria, utiliza un gestor de contraseñas, úsalo en local, porque si subes a la nube el fichero de contraseñas, se puede liar muy gorda si alguien consigue descargarlo...

Segunda parte

Se alargó mucho el post y he decidido cortarlo en dos. Por un lado está esta introducción y por otro lado mostraré algunos scripts y recursos para buscar contraseñas en filtraciones, verificar si estás, o incluso comprobar si los usuarios de tu servidor de correo o tus servicios web aparecen en alguna brecha de seguridad.

Foto principal: Yvette de Wit