Si estudias, trabajas o simplemente demuestras afición por la informática los sistemas de computación seguro te han hecho la pregunta que todos odiamos: “Me puedes ayudar a hackear la contraseña de X en Y sitio|red social|app”.

Bueno el motivo de este post es contestar esa pregunta, realmente podemos “hackear” passwords? o es solo un mito de la sociedad moderna.

Como funcionan las contraseñas?

Primero que nada vamos a entender un poco sobre como los passwords son almacenados en las diferentes aplicaciones (facebook, twitter, youtube, instagram, etc…), para explicarlo primero tenemos que tener en claro algo, y es: “ninguna aplicación web, movil o de ordenador con seguridad decente, sabe en realidad nuestro password

Espera… que!? entonces como iniciamos la sesión si ningún sistema sabe nuestro password? la respuesta es sencilla y viene dada por un concepto llamado función hash criptográfica.

Para explicar de forma ilustrativa uno de los usos de esta funcion imaginemos por un momento dos números primos cualesquiera, por ejemplo 11 y 29, y luego multipliquemos 11 x 29 = 319. Ahora bien les aseguro que ninguna otra combinación de 2 números enteros positivos en el mundo, diferente de 11 y 29 dará como resultado de multiplicarlos 319.

Ahora bien, imaginemos que su contraseña de facebook es 11; el hecho es que facebook jamas va a almacenar el 11, el 11 es su contraseña y debe vivir solo en sus mentes, facebook en realidad almacena el 319 de modo que cuando ustedes le mandan el 11 un programa lo multiplica por 29 y compara el resultado con el 319 almacenado en la base de datos. Todo esto es simbolico claro, ya que la forma de encriptar passwords por estos gigantes es mucho mas compleja, pero la idea en principio es la misma.

La función que multiplica su contraseña por un valor para generar el valor encriptado de la misma se llama hash. Para un ejemplo mas tangible vamos a imaginar un password de verdad, digamos: g33kp0w3r#3000  lo vamos a pasar por la función hash basica

Contraseña Hash
g33kp0w3r#3000 8ae8cedf6aaf692a14ea4eeabe618bb3

El valor que esta en hash es el que se almacena en la base de datos, y cada vez que se compara con lo que nosotros mandamos se hashea de la misma forma que la primera vez.

Y es básicamente por eso, que cuando elegimos la opción de “recuperar contraseña” en un sistema, este nunca nos enviara nuestra contraseña en texto plano, si no que al contrario nos pedirá que la cambiemos por una nueva, algunos sistemas (bancarios por ejemplo) incluso guardan un historial de nuestros hash pasados de modo que si intentas cambiar tu contraseña por una que ya usaste en el pasado simplemente no te dejara.

Yo personalmente no confiaria en ningún sitio web o servicio que al momento de reiniciar la contraseña me envie la misma en texto plano, en lugar de un link para re-establecerla.

Como hackean las contraseñas?

Para hackear una contraseña pueden existir varias técnicas, pero las 2 mas comunes son:

  1. Ingeniería Social
  2. Robar la base de datos

Para la segundo se necesita primero que la base de datos sea vulnerable en algún sentido y alguien con negras intenciones sepa como robarla, pero que pasa si una vez que la base de datos ha sido vulnerada y descargada los passwords están encriptados de todos modos? Claro podríamos sentirnos seguros pero… desafortunadamente si no se toman las suficiente medidas a la hora de encriptarlas (las cuales discutiremos mas adelante) el sitio es igual de vulnerable.

Lector, le presento el concepto de “tablas arco-iris” o en ingles rainbow tables Son básicamente tablas con cientos de miles de millones de hashes reducidos en 1,2 y hasta 3 niveles, de forma que si tenemos un hash y lo encontramos en la tabla rainbow el password estaría vulnerado! esta herramienta se utiliza en el hacking ético para determinar que tan seguras esta las contraseñas de nuestras aplicaciones, y pueden ser puestas a prueba con herramientas como ophcrack

 Como proteger mis contraseñas de tablas rainbow?

La respuesta es sencilla! debemos utilizar “salts” un salt es una cadena de caracteres aleatorios bastante larga (yo uso 32 caracteres) la cual se añade a la contraseña de nuestros usuarios antes de encriptarla y guardarla o compararla, de modo que la función para encriptar nuestras contraseñas quedaria asi:

hash( hash(contraseña + salt) )

Siendo hash una función de encripcion tal como MD5, SHA, LM, o NT LAN

entonces si nuestra contraseña es: “patito” y nuestro hash es “$%)=/)(/tgshjcbñfkh57625738%4&78)/)(7/%6/$76″ 

el has resultante en md5 seria asi:

hash(hash(patitopatito$%)=/)(/tgshjcbñfkh57625738%4&78)/)(7/%6/$76)) = 890fcd512348b27875496b5f90047df6

Y ese compañeros es bastante difícil que este en una rainbow table!

Después de ver todo esto podríamos contestar la interrogante de titulo de este post?

Son los passwords seguros un mito o una realidad?

Este su servidor piensa que para tener passwords seguros se necesita que la aplicación tome medidas de seguridad como las descritas aquí, pero también el usuario tome medidas y elija un password seguro y difícil de adivinar.

Como crear un password seguro y que no se me olvide?

Bien que es un password seguro? pues algunos sitios lo definen (cuando piden que lo establezcas) algunas características muy simpáticas! como estas:

  • Al menos una mayúscula
  • Al menos un numero
  • Al menos un carácter especial
  • Al menos de 6 caracteres

COMO VAMOS A RECORDAR TODO ESO?

Es fácil vean, solo sigan los siguientes pasos:

  1. Pensar en un nombre de una persona u objeto que tenga bastantes vocales (ej: zapato)
  2. Reemplazar todas las vocales con números siguiendo esta convención: (ej: z4p4t0)
    • a = 4
    • e = 3
    • i = 1
    • o = 0 (cero)
    • u = 6
  3. Luego al final agregar un carácter especial (ej: z4p4t0#)
  4. después del carácter especial agregar las iniciales en mayúsculas del sitio que va a proteger esta contraseña (ej: para facebook z4p4t0#FB)

Y así pues, tendrán una contraseña que difícilmente sera encontrada en una tabla arco iris (mas si el sitio usa salts).

Ahora digamos, que el sitio pide que cambies tu contraseña por seguridad cada cierto tiempo (como en los sitios de banca), podríamos agregar un ultimo paso:

5. Agregar después de las iniciales, el numero de mes en el que estamos.

et voila, personas y aplicaciones con passwords seguros que NO son un mito :3

Categorized in: