domingo, noviembre 01, 2015

Irony: Contraseñas robadas de los gestores de contraseñas

La ironía se produce cuando algo que debería ser de una forma se comporta justo de la contraria. Como cuando el amor duele, quien más te quiere te hace más daño, o lo que debería servir para proteger tus contraseñas se convierte en el que te publica todas tus contraseñas. Es ironía en estado puro que demuestra en máxima expresión la esencia del ser humano. Este es el caso que nos ocupa hoy, para el post-Halloween. Una de miedo: Gestores de contraseñas que exponen tus passwords.

Figura 1: Contraseñas robadas de gestores de contraseñas

Los gestores de contraseñas, como muchos sabéis, son servicios que guardan en pequeñas bases de datos personales cifradas con una master key las credenciales que tienes que utilizar en tantos y tantos servicios. Lógicamente, si alguien consigue la master key o es capaz de descifrar la base de datos adiós a tus identidades. Ejemplos de estos son los populares 1Password, LastPass o KeePass de los que seguramente muchos de vosotros seáis usuarios, pero existen otras formas de tener bases de datos de credenciales similares. Desde las cacheadas en los navegadores que se pueden cifrar con una master key, el iCloud KeyChain o el servicio SCCAID que hicieron unos alumnos del Máster de Seguridad del la UEM que automatizaba el cambio de contraseñas mediante el control por Latch.


Figura 2: SCCAID controlado por Latch

Al final, todos estos gestores de contraseñas existen porque la gente se esfuerza en aplicar más caballos a los carruajes en lugar de pasar ya al motor de gasolina. Esto quiere decir que, en lugar de aplicar sistemas de segundo factor de autenticación en todas las identidades, siguen poniendo más caracteres y más raros a las passwords, haciendo que sea imposible recordarlas y por tanto que haya que apuntarlas. Lo siento, las contraseñas complejas en servicios online no valen una mucho.

Figura 3: En Content.js las passwords están sin cifrar

El asunto es que, cualquier gestor de contraseñas, llámese 1Password o Apple iCloud Keychain, necesita cifrar y descifrar la contraseña porque al final el usuario debe introducirla en el login correspondiente en texto plano, así que siempre tiene que poder descifrarse. Este el caso que el ingeniero de Microsoft Dale Myers ha puesto sobre la mesa con 1Password. En el caso concreto de este gestor de contraseñas, las passwords se almacenan cifradas en un fichero llamado 1Password.hml que debe ser descifrado, pero las claves descifradas en texto plano están en otro llamado content.js que está en otra ubicación.

Figura 4: Buscando bases de datos de 1Password

Lo más gracioso es que, como muchos sabéis, estos ficheros pueden estar almacenados en servidores web o servicios cloud, por lo que no es difícil localizar usando Google o Bing, ficheros con las claves de las personas. Con un sencillo dork buscando ficheros publicados en esas rutas es sencillo llegar a las bases de datos de 1Password y por supuesto a muchas claves en texto claro. Puedes jugar con el dork para sacar aún más ficheros. Hay muchas formas de dar con ellos.

Figura 5: Una base de datos en 1Password cifrada

Al final, muchos usuarios suben sus bases de datos a servidores web que tienen problemas con la indexación. Esto no es raro y ya os conté hace tiempo como incluso un enlace con credenciales en EverNote cacheado se podía pasar meses en la caché de Google por una mala política de indexación. Ten mucho cuidado con dónde subes tu base de datos de contraseñas.

Descifrando las bases de datos de contraseñas

Aunque no se pueda acceder a las claves en texto claro como en el caso de 1Password, si alguien accede a tu base de datos de contraseñas siempre podrá realizar un ataque de fuerza bruta en local, con lo cual tendremos lo peor de todos los casos posibles. Te han robado el gestor de contraseñas y no te has dado cuenta. 
En el caso de LastPass, durante el mes de Junio les robaron las bases de datos de sus cuentas, quedando expuestas todas las credenciales con las passwords cifradas. Por supuesto, si la contraseña era débil y no tienes un 2FA debes cambiarla cuanto antes, porque no será difícil sacar algunas de ellas. De hecho, en la próxima BlackHat dos investigadores españoles van a mostrar cómo se pueden recuperar algunas de esas credenciales desde las bases de datos de LastPass.

Figura 7: KeeFarce para descifrar bases de datos de KeePass

Por último, en el caso de KeePass existe una herramienta llamada KeeFarce que, como se recuerda en Segu-Info, permite sacar las contraseñas de una base datos incluso si está guardada en la versión 2.30. Recordad que todos los sistemas tienen que permitir descifrar las claves para que puedan ser utilizadas, al igual que los almacenes de configuración de herramientas que utilizas en tus sistemas. Donde almacenes tus credenciales, debes tener mucho cuidado.

Saludos Malignos!

7 comentarios:

Cristian dijo...

¿Seguro que es necesario mantener las claves en texto plano? Creía que la mayoría de sistemas se basarían en funciones de cifrado en una sola dirección y solo guardaban las claves cifradas. En el momento que hay que saber si la contraseña es correcta lo que habría que hacer es cifrar la contraseña introducida y comparar el cifrado de esta con la clave cifrada guardada en la base de datos. Si ambas coinciden entonces se da por buena. De esta manera no habría que guardar las claves sin cifrar.

Anónimo dijo...

Creo que hay un error en este post. Leí el artículo original y en ningún sitio dice que las claves de 1Password se almacenen en texto plano. Lo que se almacena en texto plano son los metadatos, lo que también es bastante malo por cierto, En la página de 1Password explican por qué lo hacen así (cu sitio es de eficiencia) y cómo evitarlo: usar la sincronización con ICloud ya que esta utiliza un formato de bases de datos más nuevo y seguro. Desde luego tener los metadatos en texto plano es problema ya que le permite al atacante saber dónde debe destinar sus fuerzas, pero peor sería que la clave estuviera directamente sin cifrar.

Died74 dijo...

Cristian, buenas. Eso funciona cuando vos sos el estas programando el login. Pero para acceder a los servicios de 3ros como plantean los gestores de contraseñas, estos rellenan el campo usuario y contraseña en el navegador y tienen q escribir lo mismo q escribiría el usuario. No un hash.

Para intentar dar un ejemplo, el hash se obtiene al aplicar una función al contenido del campo 'contraseña' y este tiene q conincidir con el que está guardado en facebook, (salvado todos los mecanismos y simplificando todo). Pero si en ese campo está el hash se aplica a funcion a ese hash y no va a conincidir con el q esta almacenado.

Maligno dijo...

@Anónimo, tienes el texto de la entrada del artículo original puesto en el post.

Anónimo dijo...

Ya no esta disponible el SCCAID para descargar?

Anónimo dijo...

Yo uso los gestores no para usar contraseñas complejas, sino para usar una contraseña diferente en cada servicio.

Anónimo dijo...

Cristian:

El esquema que sepalas se aplica en a los almacenes de las credenciales de los usuarios que acceden a ese sistema, como por ejemplo un banco o un servidor de correo. En estos casos no se necesita descifrar las credenciales, tan solo verificarlas.

Los gestores de contraseñas son diferentes, porque se requiere poder extraer la contraseña de su almacen para introducirla en un formulario.

Entrada destacada

Infraestructuras Críticas y Sistemas Industriales: Auditorías de Seguridad y Fortificación de @0xWord

Desde hoy está disponible a la venta un nuevo libro de 0xWord centrado en la seguridad de los Sistemas Industriales y las Infraestructuras...

Entradas populares