sábado, mayo 10, 2014

Tu cuenta de Facebook tiene 3 passwords y tú no lo sabes

Entre los muchos correos electrónicos que recibo hay muchos de gente que me cuenta que ha descubierto alguna cosa que tiene que ver con seguridad, lo que me ayuda a estar un poco más al día de lo que está sucediendo en el mundo de la seguridad. De todos ellos, hay algunos que suelen ser erróneos o que directamente no han hecho las pruebas. Por eso, cuando los leo, procuro intentar discernir si lo que me cuentan tiene sentido o no. Hoy os voy a hablar de uno de esos que resultó ser un misterio sin resolver.

El misterio de las passwords sin cifrar de Facebook

Uno de esos correos llegó con un asunto que decía "Contraseñas sin cifrar en Facebook". Mi primera suposición era que me iba a preguntar algo referente al artículo que escribí sobre cómo conseguir que las credenciales de Facebook se capturen por la red sin cifrado, pero no, no era eso. Cuando seguí leyendo el mensaje, me decía que se había dado cuenta de que en su cuenta de Facebook podía entrar con la contraseña escrita en mayúsculas cuando su contraseña está escrita en minúsculas, lo que  para él significaba que Facebook no hashea las passwords en MD5.

Lógicamente no me lo creí y le dije que era imposible. Tengo claro que Facebook guarda hashes de las contraseñas y por supuesto no va a ser en MD5. Ya usarán un SHA2 con algún Salt o similares. Conociendo a la gente de seguridad que hay detrás de Facebook no iba ni a perder un minuto de tiempo en comprobar algo así. Contesté que no podía ser, que algo estaría haciendo mal en sus pruebas. Lo que pasó por mi cabeza fue que seguramente tenía cacheada la sesión o la contraseña y por eso estaba teniendo acceso. Aún así, probé a escribir todas las letras de mi contraseña de Facebook primero todo en minúsculas y luego todo en mayúsculas y no funcionó, por lo que contesté que a mí no funcionaba

Sin embargo, insistió y me grabó un vídeo, por lo que después de un par de días decidí ver el vídeo y probarlo con otra cuenta que me cree desde cero y volvió a fallarme. Algo no iba bien y tenía que ser en su equipo. ¿Cómo va a funcionar una contraseña distinta cuando esto 100% seguro de que Facebook hace hashing de passwords? Y le contesté a David Guzmán - que así se llama mi interlocutor - que volví a probarlo con una password que tenía letras y números y no me funcionó.

La prueba que yo hice fue crearme una cuenta con una clave aAa777 (en el vídeo está mal) e intentar entrar con aaa777 y con AAA777 y no funcionó, por lo que le envié a David un correo diciéndolo que había intentado entrar como él me decía y no había tenido éxito. Quiso el corrector o el destino que al escribir la contraseña de la cuenta escribiera mal la password  en el mensaje y pusiera la segunda "A" en minúscula, así David me hizo este vídeo donde se podía entrar y a mí me permitió resolver el misterio y encajar las piezas.

Figura 1: El vídeo de la cuenta de Facebook con múltiples passwords

La resolución al misterio de las múltiples passwords de Facebook

En el vídeo se puede ver que con una contraseña como aaa777 se puede entrar en el sistema usando también AAA777 y Aaa777, pero yo estaba seguro que con la password aAa77 no funcionaban ni aaa777 ni AAA777. Por supuesto, seguía teniendo claro que Facebook está haciendo hashing, así que... ¿qué podría estar pasando?

Tras probar todas las combinaciones me di cuenta de que las passwords que funcionan son dos:
1.- Passwords que se pueden escribir cuando tienes el Bloq+Mays activadas. Es decir, no es que pongas la contraseña todo en mayúsculas o todo en minúsculas, es que hagas una inversión de las letras. Es decir, si tu password es aBcDeF11 entonces también es tu password AbCdEf11. Esto quiere decir que al menos tienes doss passwords. 
2.- Passwords que teniendo la primera letra en minúscula, se escribe en mayúscula. En muchos controles de tablets, cuando se pulsa sobre un campo para introducir un texto, por usabilidad se activa la tecla de Mays solo para la primera letra, lo que puede llevar a que si tu password comienza por una letra minúscula, como el ejemplo de aBcDeF11, entonces también te valga la password ABcDeF11.
Tras encajar todo, las cosas cobran sentido. Lo que Facebook hace es probar esas posibilidades, así que tu password de Facebook puede pasar de ser una a ser tres, solo porque las opciones de usabilidad han ganado una vez más la batalla a la seguridad. De esta forma se reducen problemas de soporte con los usuarios que tienen el modo de mayúsculas activado sin querer o que usan una conexión desde un control que pone la primera letra en mayúsculas de forma automática.

Actualización: Facebook reconoce este hecho y explica que este es uno de los casos que no se reconoce como fallo de seguridad. Es su forma de ayudar a la usabilidad.

Figura 2: La explicación oficial de Facebook

Actualización 2: Esta historia me inspiró una reflexión para un No Lusers al vuelo con una maligna reflexión de josemaricariño.

Figura 3: ¿Se cambia la password si solo se cambian mayúsculas por minúsculas?


Saludos Malignos!

27 comentarios:

  1. Luego, o no trabajan con hashes, o trabajan con una cantidad ingente de ellas no?

    Que gran curiosidad, supongo que para el protocolo XMPP esto no valdrá.

    ResponderEliminar
  2. @jr_lambea. No, en mi opinión cuando introduces la password para entrar generan las tres passwords, generan los tres hashes y los comparan con el tuyo.

    Saludos!

    ResponderEliminar
  3. Sinceramente, yo creo que alguna vez me ha pasado el "Ui,pero si creo que se me ha colado alguna mayuscula donde no tocaba o al revés....", y ha entrado....ahora encaja!!

    ResponderEliminar
  4. Sabiendo estas variantes de mayúsculas/minúsculas, ¿alguna idea sobre cuánto se reduce en tiempo un ataque por fuerza bruta a una cuenta de pongamos 8 letras? Parece que invertir las mayúsculas permitiría eliminar muchas combinaciones de golpe.

    ResponderEliminar
  5. Increíble detalle chema.Lo probé y me di cuenta de que es cierto, cada vez me doy cuenta que las fallas de seguridad se encuentran donde menos las esperamos...

    ResponderEliminar
  6. comprobado!

    salut!

    ResponderEliminar
  7. para el anónimo que pregunta acerca de la reducción de probabilidades por estas tres variantes:

    no hace falta ser muy observador para ver que la reducción es despreciable comparada con la ingente cantidad de permutaciones que aún te quedarian.

    quitar "muchas combinaciones" no sirve de nada cuando las que quedan siguen siendo "muchisimas, muchisimas"

    ResponderEliminar
  8. Entonces si tu contraseña empieza con una mayúscula ya solo se te queda en 2 contraseña no??? entiendo que si la contraseña origianal es Aaaa777, si pones aaa777 no funcionará

    ResponderEliminar
  9. Agustín Dall'Alba10/5/14 9:46 p. m.

    >Sabiendo estas variantes de mayúsculas/minúsculas, ¿alguna idea sobre cuánto se reduce en tiempo un ataque por fuerza bruta a una cuenta de pongamos 8 letras?

    Supongo que Facebook sólo guarda el hash de la contraseña que escribiste por primera vez en su base de datos, no las tres variantes, y saca el hash de las tres posibilidades cada vez que entras. Así que para alguien que haya conseguido la base de datos de Facebook de alguna manera le sería igual de difícil encontrar la contraseña que si no hicieran esto. Si el ataque por fuerza bruta consiste en tratar de entrar por el formulario en la página de facebook, por cada contraseña que pruebas estás descartando dos o tres, así que el ataque se reduce a la mitad o un tercio.

    ResponderEliminar
  10. Vaya Maligno muy buen artículo... Algo que no sabía he aprendido buenas cosas en tu blog aunque hay cosas que para mi son muy avanzadas me gustaría que hicieras una entrada sobre el inicio en este mundo del análisis informático y el hacking como se ´puede iniciar y bajo tu experiencia que consejos das.....

    Saludos desde Colombia,

    ResponderEliminar
  11. mas que una funcionalidad yo lo veo como un backdoor. Que se creen 3 contraseñas por la establecida por el usuario, que impide que se cree otra con un patron definido por facebook?

    ResponderEliminar
  12. "Ya usarán un SHA256 con algún Salt o similares. Conociendo a la gente de seguridad que hay detrás de Facebook no iba ni a perder un minuto de tiempo en comprobar algo así. "

    Esperemos que la gente de Facebook lo tengan un poco más claro que tu y NO usen "SHA256 con algun Salt o similar". Usar una funcion de hash (a pelo) para passwords está MAL.

    Las funciones de hash estan pensadas para ser rápidas, la recomendación es usar una Key Derivation Function como bcrypt o scrypt, con una funcion de trabajo suficientemente grande y un salt único por password.

    Si en Facebook usasen un SHA-256 con salt sería para alarmarse mucho mucho.

    ResponderEliminar
  13. Veo que has cmabiado el post y ahora pones: "Ya usarán un SHA2 con algún Salt o similares. "

    El grupo de "one way functions" SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256) no es apropiado ni recomendable para autenticación con passwords.

    - Son solo 3 veces más lentas que MD5.
    - Existe implmenetacion en hardware que generan miles de millones por segundo.
    - Son fácimente reconocibles

    Las KDF no son "smilares" a SHA-2, échle un ojo a:
    http://throwingfire.com/storing-passwords-securely/#notpasswordhashes

    ResponderEliminar
  14. @Anónimo de KBF, en el post original ponía "SHA256 o similares". Solo he puesto SHA2 para que quede más generalista porque alguno podría llegar a pensar que yo estaba diciendo o recomendando el uso de SHA256 para Facebook.

    Saludos!

    ResponderEliminar
  15. Buenísimo articulo, ¡te felicito!

    ResponderEliminar
  16. Al principio que empece a leer el articulo deduje que era un bug asociado al problema del Heartbleed y que este era una cabo suelto. Aun así me pregunto porque en el password de la primera letra mayúscula funciona afuera de android que me parece que es donde el corrector te escribe la primera letra como mayúscula (mi teléfono hace mucho eso, aunque no es android).

    Facebook es una de esas paginas que es funcional porque tiene una gran cantidad de usuarios y me parece lógico que se incline por la "usabilidad" a mi ha pasado que por alguna extraña razón el bloq mayús se invierte y al logear uno no nota como se escriben las mayúsculas.

    ResponderEliminar
  17. Este comentario ha sido eliminado por un administrador del blog.

    ResponderEliminar
  18. No se de eso pero puse todas formas y ninguna abrio

    ResponderEliminar
  19. Entonces cuál biene siendo la contraseña

    ResponderEliminar
  20. Hola presté mi celular y me cerraron el Facebook quiero saber como puedo recuperar mi cuenta

    ResponderEliminar
  21. A mí me funcionó porque la primera letra era minúscula y la puse mayúscula y si entro

    ResponderEliminar