Ataques de diccionario
Si bien es exhaustivo, el método de fuerza bruta puede requerir mucho tiempo y recursos, especialmente al trabajar con contraseñas complejas. Aquí es donde entran en juego los ataques de diccionario.
El poder de las palabras
La eficacia de un ataque de diccionario reside en su capacidad para explotar la tendencia humana a priorizar las contraseñas fáciles de recordar sobre las seguras. A pesar de las reiteradas advertencias, muchas personas siguen optando por contraseñas basadas en información fácilmente accesible, como palabras de diccionario, frases comunes, nombres o patrones fáciles de adivinar. Esta previsibilidad las hace vulnerables a los ataques de diccionario, en los que los atacantes prueban sistemáticamente una lista predefinida de posibles contraseñas en el sistema objetivo.
El éxito de un ataque de diccionario depende de la calidad y la especificidad de la lista de palabras utilizada. Una lista de palabras bien diseñada y adaptada al público o sistema objetivo puede aumentar significativamente la probabilidad de una vulneración exitosa. Por ejemplo, si el objetivo es un sistema frecuentado por jugadores, una lista de palabras enriquecida con terminología y jerga relacionada con los videojuegos resultaría más eficaz que un diccionario genérico. Cuanto más fielmente refleje la lista de palabras las probables contraseñas del objetivo, mayores serán las probabilidades de éxito del ataque.
En esencia, el concepto de ataque de diccionario se basa en la comprensión de la psicología humana y las prácticas comunes de contraseñas. Al aprovechar este conocimiento, los atacantes pueden descifrar eficazmente contraseñas que, de otro modo, requerirían un ataque de fuerza bruta de una duración impráctica. En este contexto, el poder de las palabras reside en su capacidad para explotar la previsibilidad humana y comprometer medidas de seguridad que, de otro modo, serían robustas.
Fuerza bruta vs. ataque de diccionario
La distinción fundamental entre un ataque de fuerza bruta y un ataque de diccionario radica en su metodología para generar posibles candidatos a contraseñas:
Brute Force
: Un ataque de fuerza bruta puro prueba sistemáticamente todas las combinaciones posibles de caracteres dentro de un conjunto y una longitud predeterminados. Si bien este enfoque garantiza el éxito con el tiempo suficiente, puede ser extremadamente lento, especialmente con contraseñas largas o complejas.Dictionary Attack
: En marcado contraste, un ataque de diccionario emplea una lista precompilada de palabras y frases, lo que reduce drásticamente el espacio de búsqueda. Esta metodología específica resulta en un ataque mucho más eficiente y rápido, especialmente cuando se sospecha que la contraseña objetivo es una palabra o frase común.
Característica
Ataque de diccionario
Ataque de fuerza bruta
Explicación
Eficiencia
Considerablemente más rápido y más eficiente en el uso de recursos.
Puede demandar muchísimo tiempo y recursos.
Los ataques de diccionario aprovechan una lista predefinida, lo que reduce significativamente el espacio de búsqueda en comparación con la fuerza bruta.
Targeting
Altamente adaptable y puede adaptarse a objetivos o sistemas específicos.
Sin capacidad de orientación inherente.
Las listas de palabras pueden incorporar información relevante para el objetivo (por ejemplo, nombre de la empresa, nombres de los empleados), lo que aumenta la tasa de éxito.
Efectividad
Excepcionalmente eficaz contra contraseñas débiles o de uso común.
Eficaz contra todas las contraseñas si se dispone de tiempo y recursos suficientes.
Si la contraseña objetivo está en el diccionario, se descubrirá rápidamente. La fuerza bruta, aunque universal, puede resultar poco práctica para contraseñas complejas debido al gran volumen de combinaciones.
Limitaciones
Ineficaz contra contraseñas complejas generadas aleatoriamente.
A menudo no resulta práctico para contraseñas largas o muy complejas.
Es improbable que una contraseña verdaderamente aleatoria aparezca en ningún diccionario, lo que hace que este ataque sea inútil. La enorme cantidad de combinaciones posibles para contraseñas largas puede hacer inviables los ataques de fuerza bruta.
Imaginemos un escenario hipotético en el que un atacante ataca el portal de inicio de sesión de empleados de una empresa. El atacante podría crear una lista de palabras especializada que incluya lo siguiente:
Contraseñas débiles de uso común (por ejemplo, "
password123
", "qwerty
")El nombre de la empresa y sus variaciones
Nombres de empleados o departamentos
Jerga específica de la industria
Al implementar esta lista de palabras específica en un ataque de diccionario, el atacante aumenta significativamente sus probabilidades de descifrar con éxito las contraseñas de los empleados en comparación con un intento de fuerza bruta puramente aleatorio.
Creación y utilización de listas de palabras
Las listas de palabras se pueden obtener de varias fuentes, entre ellas:
Custom Wordlists
: Los pentesters pueden crear sus listas de palabras aprovechando la información obtenida durante la fase de reconocimiento. Esta podría incluir detalles sobre los intereses, aficiones, información personal o cualquier otro dato del objetivo para la creación de contraseñas.Wordlists especializadas
: Las listas de palabras se pueden refinar para centrarse en industrias, aplicaciones o incluso empresas específicas. Estas listas especializadas aumentan la probabilidad de éxito al centrarse en las contraseñas con mayor probabilidad de uso en un contexto específico.Pre-existing Lists
Ciertas herramientas y frameworks vienen preconfigurados con listas de palabras de uso común. Por ejemplo, las distribuciones de pruebas de penetración como Kali Linux o Parrot suelen incluir listas de palabras comorockyou.txt
, una enorme colección de contraseñas filtradas, fácilmente disponibles.
A continuación se muestra una tabla con algunas de las listas de palabras más útiles para el inicio de sesión por fuerza bruta:
Lista de palabras
Descripción
Uso típico
Fuente
rockyou.txt
Una popular lista de palabras clave que contiene millones de contraseñas se filtró durante la violación de RockYou.
Se utiliza comúnmente para ataques de fuerza bruta sobre contraseñas.
top-usernames-shortlist.txt
Una lista concisa de los nombres de usuario más comunes.
Adecuado para intentos rápidos de fuerza bruta de nombre de usuario.
xato-net-10-million-usernames.txt
Una lista más extensa de 10 millones de nombres de usuarios.
Se utiliza para realizar un ataque de fuerza bruta exhaustivo al nombre de usuario.
2023-200_most_used_passwords.txt
Una lista de las 200 contraseñas más utilizadas a partir de 2023.
Eficaz para identificar contraseñas comúnmente reutilizadas.
Default-Credentials/default-passwords.txt
Una lista de nombres de usuario y contraseñas predeterminados que se utilizan comúnmente en enrutadores, software y otros dispositivos.
Ideal para probar credenciales predeterminadas.
Ataque de diccionario a endpoint
Para finalizar veremos un ejemplo de ataque de diccionario a una aplicación Flask con un endpoint /dictionary
.
La aplicación de instancia crea una ruta (/dictionary
) que gestiona las solicitudes POST y espera un parámetro `password
` en los datos del formulario de la solicitud. Al recibir una solicitud, compara la contraseña enviada con el valor esperado. Si coincide, responde con un objeto JSON que contiene un mensaje de éxito y la flag. De lo contrario, devuelve un mensaje de error con un código de estado 401 (No autorizado).
Copia y pega este script de Python dictionary-solver.py
a continuación en tu equipo. Solo necesitas modificar las variables de IP y puerto para que coincidan con la información de tu sistema de destino.
El script de Python orquesta el ataque de diccionario. Realiza los siguientes pasos:
Descarga la wordlist
: En primer lugar, el script obtiene una lista de palabras de 500 contraseñas comúnmente utilizadas (y, por lo tanto, débiles) de SecLists usando larequests
biblioteca.Itera y envía la contraseña
: A continuación, itera cada contraseña de la lista de palabras descargada. Para cada contraseña, envía una solicitud POST al endpoint/dictionary
de la aplicación Flask, incluyendo la contraseña en los datos del formulario de la solicitud.Analiza las respuestas
: El script verifica el código de estado de la respuesta después de cada solicitud. Si es 200 (OK), examina el contenido de la respuesta con más detalle. Si la respuesta contiene la clave "flag", significa que el inicio de sesión se realizó correctamente. El script imprime la contraseña descubierta y la flag capturada.Continua o termina
: Si la respuesta no es correcta, el script pasa a la siguiente contraseña de la lista de palabras. Este proceso continúa hasta encontrar la contraseña correcta o hasta agotar la lista de palabras.
Última actualización
¿Te fue útil?