Para autenticarse en un sitio web, debe proporcionar un nombre de usuario y una contraseña. Luego, el sitio verifica los detalles de autenticación que ha proporcionado comparándolos con los detalles que ha almacenado en su base de datos. Si los detalles coinciden, se concede el acceso. Si los detalles no coinciden, se deniega el acceso.
Desafortunadamente, las violaciones de datos son una ocurrencia relativamente común. Las violaciones de datos pueden ser un gran problema porque uno de los bits de datos más comúnmente atacados son los datos del usuario, específicamente la lista de nombres de usuario y contraseñas. Si las contraseñas se almacenan tal cual, en texto sin formato, cualquier persona con acceso a la base de datos puede acceder a la cuenta de cualquier otro usuario. Es como si les dieran un llavero con la llave de todas las puertas de un edificio de apartamentos.
Si bien se dedica mucho esfuerzo a prevenir violaciones de datos en primer lugar, se recomienda una estrategia de defensa en profundidad. Específicamente, los consejos de seguridad sostienen que las contraseñas deben codificarse, y solo se debe almacenar el hash de la contraseña. Una función hash es una función unidireccional que siempre convierte la misma entrada en la misma salida. Sin embargo, incluso un cambio menor en la entrada produce una salida completamente diferente. Críticamente, no hay forma de revertir la función y convertir el hash de salida en la entrada original. Lo que puede hacer, sin embargo, es codificar una nueva entrada y ver si la salida coincide con el hash almacenado en la base de datos. Si lo hace, conoce la contraseña coincidente, sin saber nunca la contraseña real.
Afortunadamente, esto también significa que si un atacante viola la base de datos, no obtiene una lista de contraseñas útiles de inmediato, sino que obtiene hashes en su lugar. Para poder utilizar estos hashes, es necesario descifrarlos.
Descifrar hashes de contraseñas con inteligencia
Descifrar un hash de contraseña es el proceso de averiguar cuál es la contraseña original que representa el hash. Porque no hay forma de revertir la función hash y convertir el hash en la contraseña. La única forma de descifrar un hash es adivinar la contraseña. Un método es utilizar un ataque de fuerza bruta. Esto implica literalmente probar todas las contraseñas posibles. Eso significa empezar desde la “a”, probando cada letra, en ambos casos, y cada número y símbolo. Luego, el atacante debe probar todas las combinaciones de dos caracteres, combinaciones de tres caracteres, etc. El aumento de posibles combinaciones de caracteres es exponencial cada vez que añades un carácter. Esto hace que sea difícil adivinar contraseñas largas de manera eficiente, incluso cuando se utilizan algoritmos de hash rápidos con potentes plataformas de craqueo de GPU.
Se puede ahorrar algo de esfuerzo mirando los requisitos de contraseña del sitio y no probando contraseñas que serían demasiado cortas para permitirlas o que no tienen un número, por ejemplo. Esto ahorraría algo de tiempo y aún encaja en la clase de un ataque de fuerza bruta que intenta todas las contraseñas permitidas. Los ataques de fuerza bruta mientras son lentos, si se dejan lo suficiente con mucha potencia de procesamiento, eventualmente descifrarán cualquier contraseña ya que se probarán todas las combinaciones posibles.
El problema con los ataques de fuerza bruta es que no son muy inteligentes. Un ataque de diccionario es una variante que está mucho más dirigida. En lugar de simplemente probar cualquier contraseña posible, prueba una lista de contraseñas especificadas. El éxito de este tipo de ataque depende de la lista de contraseñas y del diccionario en cuestión.
Hacer conjeturas informadas
Los diccionarios de contraseñas generalmente se crean a partir de contraseñas previamente descifradas de otras violaciones de datos. Estos diccionarios pueden contener miles o millones de entradas. Esto se basa en el concepto de que las personas son malas para crear contraseñas únicas. Desafortunadamente, la evidencia de las violaciones de datos también muestra que este es el caso. La gente todavía usa variaciones de la palabra "contraseña". Otros temas comunes son los equipos deportivos, nombres de mascotas, nombres de lugares, nombres de empresas, odiar tu trabajo y contraseñas basadas en la fecha. Esto último tiende específicamente a ocurrir cuando las personas se ven obligadas a cambiar sus contraseñas con regularidad.
El uso de un diccionario de contraseñas reduce enormemente la cantidad de conjeturas que deben realizarse en comparación con un ataque de fuerza bruta. Los diccionarios de contraseñas también tienden a contener contraseñas cortas y más largas, lo que significa que algunas contraseñas podrían probarse y no se alcanzarían incluso con años o adivinando por fuerza bruta. El enfoque también resulta exitoso. Las estadísticas varían según la violación de datos y el tamaño y la calidad del diccionario utilizado, pero las tasas de éxito pueden superar el 70 %.
Las tasas de éxito se pueden aumentar aún más con algoritmos de manipulación de palabras. Estos algoritmos toman cada palabra en el diccionario de contraseñas y luego la modifican un poco. Estas modificaciones tienden a ser reemplazos de caracteres estándar y agregan números o símbolos finales. Por ejemplo, es común que las personas reemplacen la letra "e" con un "3", una "s" con un "$" o agreguen un signo de exclamación al final. Los algoritmos de manipulación de palabras crean duplicados de cada entrada en el diccionario de contraseñas. Cada duplicado tiene una variación diferente de estos reemplazos de caracteres. Esto aumenta significativamente la cantidad de contraseñas para adivinar y también aumenta la tasa de éxito, en algunos casos por encima del 90%.
Conclusión
Un ataque de diccionario es una variación dirigida de un ataque de fuerza bruta. En lugar de intentar todas las combinaciones de caracteres posibles, se prueba un subconjunto de combinaciones de caracteres. Este subconjunto es una lista de contraseñas que se han encontrado previamente y, si es necesario, se han descifrado en filtraciones de datos pasadas. Esto reduce enormemente la cantidad de conjeturas que se deben realizar al tiempo que cubre las contraseñas que se han usado antes y, en algunos casos, se han visto con frecuencia. Un ataque de diccionario no tiene una tasa de éxito tan alta como un ataque de fuerza bruta. Eso, sin embargo, supone que tiene tiempo y poder de procesamiento ilimitados. Un ataque de diccionario tiende a obtener una tasa de éxito decentemente alta mucho más rápido que un ataque de fuerza bruta. Esto se debe a que no pierde el tiempo en combinaciones de caracteres extremadamente improbables.
Una de las principales cosas que debe hacer al crear una contraseña es asegurarse de que no aparezca en una lista de palabras. Una forma de hacerlo es crear una contraseña compleja, otra es crear una contraseña larga. Generalmente, la mejor opción es crear una contraseña larga compuesta de unas pocas palabras. Es importante que esas palabras no formen una frase real, ya que podría adivinarse. Deben ser completamente independientes. Se recomienda que elija una contraseña de más de 10 caracteres con 8 como mínimo absoluto.