Blog
Un programa fuerza bruta se trata de un código diseñado con el objetivo de adivinar contraseñas a través de la creación de grandes cantidades de combinaciones hasta dar con la correcta. Es básicamente un proceso de ensayo y error.
Este tipo de software generalmente es utilizado por hackers cuando se dificulta la obtención de información en sistemas cifrados; aunque también, es común que expertos en la materia lo utilicen con el propósito de probar la seguridad que posee una organización en específico.
El método de descifrado de este programa se ejecuta con rapidez cuando la longitud de la contraseña es corta; sin embargo, cuando las contraseñas son más largas y más seguras, suele utilizar la técnica de ataque de diccionario, el cual contiene todas las combinaciones posibles.
Información que usa el atacante
Cabe destacar que estos ataques de fuerza bruta toman su tiempo, bien podría durar días, semanas, meses e inclusive años dependiendo de la información que posea el hacker.
En otras palabras, el atacante siempre buscará información relacionada a la víctima para descifrar contraseñas; pues normalmente cuando creamos contraseñas utilizamos nuestros datos más resaltantes como la fecha de nacimiento, gustos preferidos, nombres de familiares, mascotas o pareja, entre otros. Por lo tanto, entre más sepa el hacker de la persona más rápido obtendrá su contraseña.
¿Cómo evitar los ataques?
Si bien es cierto que los programa fuerza bruta están bastante difundidos y son imperceptibles, es posible mantener nuestra seguridad si ponemos en práctica las siguientes sugerencias:
-
Crear contraseñas fuertes:
Una contraseña fuerte está compuesta de letras, números y caracteres, alterna entre mayúsculas y minúscula y tiene una longitud mayor a 10 caracteres.
También debemos evitar utilizar información pública como las que mencionamos anteriormente (fechas, nombres, gustos); ya que toda esta información fácilmente se puede hallar en las redes sociales.
Si lo hacemos de esta forma lograremos que nuestra contraseña sea difícil de adivinar.
-
Actualizar contraseña
Hay sitios de internet que exigen cambiar la contraseña cada cierto tiempo, por ejemplo, las páginas de bancos.
La intención de esto es justamente contrarrestar los ataques de estos programas invasores que quieran rastrear nuestra información.
Por tanto, incluso en páginas que no lo exigen, hacemos bien en cambiar nuestra contraseña con frecuencia, tal vez mensualmente o cada dos meses.
-
Autenticación de dos factores (2FA)
La autenticación de dos factores es un procedimiento de seguridad que proporcionan diversas plataformas en la web.
Básicamente lo que hace es añadir una capa adicional de seguridad al iniciar sesión en la cuenta online.
El proceso es sencillo, para que el usuario pueda iniciar sesión deberá cumplir con los dos factores que se solicitan; a saber, la contraseña y el segundo factor que puede variar en función al servicio, lo más común es el código enviado hacia el teléfono móvil o al correo electrónico.
Con esta autenticación se reduce el riesgo de sufrir el ataque de un programa fuerza bruta y podemos contar que nuestra información está segura.
-
Limitar intentos fallidos
Los protocolos de transferencia SSH y FTP si bien son los más populares, lo cierto es que son inseguros.
Por lo tanto, si nos encontramos ante estos servicios, lo mejor es limitar los intentos fallidos para una determinada dirección IP, pues por cada falla el atacante puede obtener información de la contraseña.
Creación de programa fuerza bruta
A continuación, mostraremos un pequeño programa en Python que simula un ataque fuerza bruta.
Dado que el ejemplo esta pensado para fines educativos, evidentemente no cuenta con un diccionario completo de combinaciones y está limitado solo a cuentas Gmail.
La idea es mostrar como funcionan y así tomar medidas con el objetivo de contrarrestar sus ataques.
El proceso que recorre el programa es el siguiente:
- Primero solicita un correo electrónico, en este caso Gmail.
- Después al ubicar el correo leerá las combinaciones del diccionario y probará una a una tratando de abrir la cuenta.
- En el momento que encuentra la clave correcta, el programa se detiene y muestra en pantalla la contraseña.
- En caso contrario, mostrará un mensaje que indica que no se ha hallado la combinación correcta.
import smtplib smtpserver = smtplib.SMTP("smtp.gmail.com", 587) smtpserver.ehlo() smtpserver.starttls() print("\n") email = input("Email: ") dic = open("./diccionario.txt", "r") for pwd in dic: try: smtpserver.login(email, pwd) print("Contraseña Correcta: %s" % pwd) break; except smtplib.SMTPAuthenticationError: print ("Contraseña Incorrecta: %s" % pwd)
Herramientas para su funcionamiento
Para que el código realice las acciones antes descritas es importante importar el módulo denominado “smtplib”; un módulo que nos permite definir un objeto de sesión de cliente SMTP.
Este protocolo de transferencia SMTP, lo invocamos para que haga conexión con el servidor “smtp.gmail.com” a través del puerto 587.
Dicha conexión la establecemos mediante el comando “ehlo()” con el cual podemos especificar el host local que se usará, y el método starttls para proporcionar seguridad de la capa de transporte.
Los siguientes pasos serán:
- Almacenar en la variable “email” el correo que ha escrito el usuario y,
- Abrir el archivo “diccionario.txt” que contiene las combinaciones posibles.
Este archivo es creado por el atacante quien escribirá línea por línea cada combinación pensada.
Luego con el bucle for recorre cada línea del archivo y el método login intentará iniciar sesión usando cada combinación.
Consideraciones
Este tipo de ataque suele resultar muy costoso para quien lo ejecuta pues el éxito está sujeto a la probabilidad.
Es decir, el espacio muestral de contraseñas posibles se define como 10n-1; siendo n la cantidad de caracteres que posee una contraseña.
No obstante, en vista de que existe una gran mayoría de usuarios que eligen contraseñas cortas o muy obvias, los ciberdelincuentes lo continúan utilizando como tipo de ataque básico para obtener beneficios.