La semana pasada, mientras conversaba con viejos colegas de trabajo, que en su mayoría son administradores de sistemas que a veces me consultan temas de seguridad, me preguntaron por qué seguíamos insistiendo tanto con utilizar contraseñas seguras si, hoy en día, la mayoría de los sitios web y aplicaciones utilizan métodos como captchas o bloqueo de cuentas para evitar que un atacante utilice técnicas de fuerza bruta para adivinar la contraseña.
si bien la fuerza bruta no permite acceder a cuentas online, sirve para dar con contraseñas cifradas en bases filtradas
Si bien es cierto que estas técnicas ya casi no se utilizan para intentar ingresar directamente a un sistema, no significa que sean obsoletas o que no funcionen para conseguir credenciales de acceso; por el contrario, siguen siendo muy útiles.
Cuando un atacante compromete un sistema y logra tener acceso a la base de datos de usuarios, y, por ende, a las contraseñas, difícilmente las encuentre en texto plano y listas para utilizar.
Lo que en realidad obtendrá son los hashes de esas contraseñas, es decir, la contraseña cifrada a través de un algoritmo matemático. Aquí es donde las herramientas de fuerza bruta entran en acción, ya que para descubrir a qué contraseña pertenece cada hash el atacante debe “probar” con diferentes palabras hasta obtener aquella que coincide con el hash.
Herramientas como HastCat o John the Ripper se encargan de hacer este proceso, tomando palabras de una lista (diccionario) y aplicándole a cada una la función Hash hasta obtener aquellas que coinciden con los hashes previamente sustraídos. Cuanto más predecible sea la contraseña, más probable es que se encuentre en la lista de palabras y, por lo tanto, que sea encontrada.
Es por esto que la mayoría de los sistemas actuales implementan políticas de contraseñas que obligan al usuario a utilizar mayúsculas, números y caracteres especiales para tratar de evitar que estas combinaciones puedan aparecer en un diccionario.
Cuando “password” se convierte en “P@ssW0rd”
Hasta el año pasado, contraseñas como “123456”, “password” y “qwerty” encabezaban la lista de las más utilizadas. Si bien es probable que esta lista sea similar este año, también comienzan a aparecer combinaciones como “pasword01” o “Qwerty01!”. Es decir, las mismas palabras predecibles de siempre, pero con algunos cambios para que sea válida y pase las auditorías básicas de seguridad.
cuanto más predecible es la contraseña, más fácil es crackear un hash y encontrarla
Según un estudio de la compañía Praetorian Security, en el que analizaron más de 34 millones de contraseñas filtradas, existen ciertas estructuras que se repiten a la hora de elegir una clave. El 50% de las analizadas se basa en 13 estructuras diferentes (cuando hablamos de "estructuras", nos referimos específicamente a la forma en la que están armadas).
Por ejemplo, “Password1234”, tiene una estructura de letra mayúscula seguida por siete minúsculas y terminada en cuatro dígitos numéricos. De hecho, las más comunes suelen ser de este estilo, una letra mayúscula, luego entre cinco y ocho minúsculas y finalizar con dos o cuatro dígitos y algún carácter especial, mayormente “!” o “.”. Por ejemplo: “Invierno2017”, “Linkedin01!” o “Football10.”.
Basándose en estas estructuras es que aparecen diversas “listas de reglas” para utilizar junto a las técnicas de fuerza bruta. Por ejemplo, si se tomase la palabra “password” del diccionario, también se deberían agregar las formas “Password01”, “Password1!”, “P@ssW0rd” y una larga combinación de posibilidades, lo cual no solo resulta un trabajo tedioso, sino que hace interminable la lista de palabras.
La solución entonces es utilizar un conjunto de reglas, las cuales se basan en una palabra y alteran su estructura, para probar con las diferentes combinaciones posibles. Veamos algunos ejemplos de estas reglas:
- ‘c’: Capitaliza la primera letra de la palabra. Ejemplo: password → Password
- ‘TN’: Conmuta entre mayúscula y minúscula el carácter en la posición N. Ejemplo ‘T5’: password → passWord
- ‘$X’: Agrega ‘X’ caracteres luego de $ al final de la palabra. Ejemplo ‘$01’: password → pasword01
- ‘sXY’: Reemplaza los caracteres ‘X’ por ‘Y’. Ejemplo ‘so0’: password → passw0rd.
Ahora, veamos qué pasa cuando unimos esas reglas:
- ‘c $01’ : password → Password01
- ‘c $! sa@ so0’: password → P@ssw0rd!
- ‘c T5 sa@ so0’: password -> P@ssW0rd
Existe una gran cantidad de reglas que se pueden utilizar para alterar la estructura de una lista de palabras y conseguir así una gran variedad de combinaciones posibles para contraseñas.
Esta técnica es muy útil a la hora de hacer auditorías de seguridad, especialmente si se deben auditar contraseñas o se ha conseguido obtener una muestra de hashes de alguna base de datos. Habitualmente, en auditorías se cuenta con poco tiempo para analizar contraseñas, pero utilizando estas técnicas y basándose en estadísticas, se puede mejorar notablemente el tiempo que requiere y las probabilidades de crackear uno o varios hashes basándose en estos patrones.
Si, además, se utilizan herramientas como CeWL, que recopila palabras de un sitio web (como el perfil de una red social o la página de una empresa) para crear el diccionario de palabras, las posibilidades aumentan mucho más.
Hemos visto en los últimos años numerosas filtraciones de contraseñas que le han sucedido a diversas compañías y, si bien la información filtrada son los hashes de esas credenciales, podemos entender ahora que cuanto más predecible la contraseña, más fácil es crackear ese hash y encontrarla.
¿Cómo estar protegidos?
En este video te mostramos cómo crear una contraseña segura de manera simple y rápida:
Tal como hemos hablado a lo largo de este artículo, cuanto más “impredecible” sea la contraseña, más difícil resultará para un atacante encontrarla. El uso de reglas mnemotécnicas como cambiar letras por símbolos o números sigue siendo muy útil, pero será mucho más efectivo si además se utiliza en una palabra larga o, mejor aún, en una frase:
E$t4.e$.m1.C0ntr4$eñ4.$egur4!
Otro grado de seguridad que podemos añadirle es hacer cambios que no resulten tan predecibles y que por lo tanto no apliquen para la mayoría de las reglas de diccionario. Es decir, en lugar de cambiar las letras “a” de la frase por “4” o “@” que resulta lo más natural y lógico, podemos elegir otro carácter que no sea predecible, como por ejemplo: ”#”
Est#.Es.Mi.Contr#señ#.Segur#
Por último, si la información que almacena el sistema es crítica, siempre es bueno utilizar factores de doble autenticación, para evitar que un atacante pueda ingresar al sistema por más de que obtenga el usuario y la contraseña.
Además, si somos los administradores, es recomendable agregar un nivel más de seguridad a la hora de almacenar los hashes y utilizar técnicas como las ErsatzPasswords.
Sigue leyendo: Cómo crear una contraseña fuerte en un minuto y proteger tu identidad digital