Hacking Ético Tema 4 - Fuerza Bruta
Hacking Ético Tema 4 - Fuerza Bruta
Hacking Ético Tema 4 - Fuerza Bruta
1. Introducción 2
1.1. Casos de uso para las técnicas de Fuerza Bruta 2
1.2. Hashing 3
1.2.1. MD5 4
1.2.2. Familia SHA 4
1.2.3. Salt encoding 5
2. Marco teórico de los algoritmos de Fuerza Bruta 5
2.1. Ejemplo básico 5
2.2. Ejemplo avanzado 6
2.3. Conclusiones 6
3. Ataques basados en diccionarios 7
3.1. Ataques híbridos 7
4. Rainbow Tables 7
5. Factores que inciden en el tiempo 8
6. Bibliografía 10
1. Introducción
La fuerza bruta, del inglés Brute Force, es una técnica que proviene originalmente de la
criptografía, en especial del cripto-análisis (el arte de romper códigos cifrados o descifrar
textos). Es una manera de resolver problemas mediante un algoritmo simple de
programación, que se encarga de generar y de ir probando las diferentes posibilidades hasta
dar con el resultado esperado o de mejor conveniencia.
Los casos de fuerza bruta que describiremos en este capítulo están orientados a la acción de
generar claves (mediante la combinación secuencial de caracteres) y a probarlas en
determinado servicio de autentificación o archivo para verificar si coinciden con un login
válido de acceso (usuario y clave o sólo clave). Por otro lado, apuntan al proceso de romper
el cifrado de archivos que contienen passwords de sistemas operativos o cuentas de usuario
de otras aplicaciones.
Desde el punto de vista de un hacker ético, podemos utilizar estas herramientas en distintas
circunstancias:
● Desde el punto de vista de una auditoría de caja blanca o gris, podemos tantear la
seguridad de las claves que tiene el cliente para averiguar si necesitan un refuerzo.
● Desde el punto de vista de una auditoría de caja negra, nos permite saber si la
información obtenida durante el proceso de information gathering puede abrir una
puerta de forma directa al objetivo en la forma de claves de acceso al sistema.
1.2. Hashing
El hashing alude al proceso de generar un output de extensión fija, a partir de un input de
extensión variable. Esto se logra mediante el uso de unas fórmulas matemáticas denominadas
funciones hash y que se implementan como algoritmos hashing.
No todos los usos de los algoritmos hash son para contraseñas, también se utilizan funciones
criptográficas hash para detectar malware. Para ello, se hace uso de listas públicas de
malware, conocidas también como firmas de malware, que están formadas por valores hash
de partes completas o pequeñas partes de malware. Así, si un usuario o su antivirus detecta un
archivo sospechoso, puede consultar estas bases de datos de hash públicas, y de esta forma,
saber si se trata de un archivo malicioso.
Otro uso importante de las funciones hash es asegurar la integridad de los mensajes. Para
ello, se comprueban los hashes creados antes y después de la transmisión de datos y, si los
hashes son totalmente idénticos, la comunicación ha sido segura y los datos no han sido
alterados.
En lugar de confirmar que dos conjuntos de datos son idénticos comparando los datos brutos,
MD5 lo hace produciendo una suma de comprobación en ambos conjuntos, y luego
comparando las sumas de comprobación para verificar que son las mismas.
MD5 tiene ciertos defectos, por lo que no es útil para aplicaciones de cifrado avanzado, pero
es perfectamente aceptable utilizarlo para verificaciones de archivos estándar.
Los hashes MD5 tienen una longitud de 128 bits y se muestran normalmente en su
equivalente de valor hexadecimal de 32 dígitos.
Las funciones SHA permiten la creación de cadenas diferentes que facilitan seguir un registro
de cambios en la seguridad de diferentes archivos conocida como huella digital, esto sirve de
especial importancia en aplicaciones tales como la creación de cuentas asociadas a
contraseñas que solo un usuario debe conocer, claves de desencriptado de ficheros o usos en
la creación de cadenas de bloques en criptomonedas como el bitcoin.
Para mayor seguridad, el valor salt se guarda en secreto, separado de la base de datos de
contraseñas. Esto aporta una gran ventaja cuando la base de datos es robada, pues por
desencriptar el contenido utilizando solamente algoritmos hash resulta imposible, al ser
necesario también el valor salt.
𝑥
𝑃 =𝑛
Donde P son el número de permutaciones posibles, n son los posibles valores a escoger, y x
son la cantidad de dichos valores a elegir.
Por tanto para nuestra clave tenemos que n=10 y x=2, entonces P = 100. Esta clave sólo
requeriría la paciencia de probar los 100 valores posibles, asumiendo que el sistema víctima
no tiene ningún mecanismo de bloqueo de intentos fallidos.
20
𝑃 = (26 * 2 + 4)
34
𝑃 = 9. 2 * 10
En este caso, el número de posibles claves será inmenso, por lo que ya no solo será imposible
de resolver “a mano”, sino que requerirá un poder computacional considerable, y un
algoritmo que automatice el proceso de forma eficiente.
2.3. Conclusiones
● En un ataque de fuerza bruta se prueban todas las permutaciones dentro del espacio de
claves posibles hasta que eventualmente una de ellas es la clave.
● Aunque en teoría es posible probar todas las claves, en términos prácticos esto tiene
varios inconvenientes:
○ Tiempo: si el espacio de claves es muy, muy grande, aún con el poder
computacional actual podría tomarnos años encontrar la clave correcta.
○ Podríamos toparnos con un mecanismo de defensa en el sistema de
autenticación que nos bloquee luego de n intentos fallidos y alerte al
administrador de nuestra presencia.
● Debido a esto, un ataque de fuerza bruta tiene sentido cuando el tamaño de la clave no
es muy grande, o cuando se puede disminuir el tamaño del espacio a probar a partir de
cierto conocimiento sobre la clave, pero sobre todo cuando podemos hacer pruebas
offline, como por ejemplo cuando hemos obtenido un hash y deseamos obtener la
clave a partir de la cual fue generado el mismo.
3. Ataques basados en diccionarios
En este tipo de ataques en lugar de probar todas las combinaciones posibles dentro del
espacio de claves, lo que se hace es recurrir a un diccionario de claves previamente armado e
ir probando en orden las opciones contenidas en el mismo.
La ventaja de hacer esto es que los humanos tendemos a usar como claves palabras que nos
resulten familiares en algunos casos combinadas con números o símbolos, por ello es
probable que un ataque basado en diccionario tenga éxito en menor tiempo al hallar una clave
versus un ataque de fuerza bruta. Por supuesto, siempre y cuando, la clave buscada se
encuentre en el diccionario.
El hacker puede armar su propio diccionario o utilizar diccionarios provistos por terceros.
Existen muchos diccionarios de claves disponibles en Internet en diversos idiomas. Muchos
de estos diccionarios son gratuitos y pueden descargarse libremente, otros – usualmente los
de mayor número de caracteres – tienen costo y pueden comprarse online.
4. Rainbow Tables
Este ataque de claves es especial porque en lugar de usar un diccionario de claves en texto
plano, utiliza una tabla pre-computada en donde se tiene una clave X y su hash calculado
equivalente.
Se utiliza cuando deseamos romper una clave a partir de un hash. Como ya hemos visto, un
hash es un valor obtenido tras aplicar una función matemática sobre un texto de cualquier
tamaño X, que obtiene como resultado un valor único de tamaño fijo Y. Dado que el texto X
puede tener cualquier tamaño y el hash Y tiene un tamaño fijo, no es posible obtener el texto
original a partir del hash. Por eso se dice que la función hash es de “una sola vía”.
Partimos de la suposición de que la base de datos sobre la que se va a operar, guarda las
contraseñas tras haberles aplicado un algoritmo de hashing. Así, cada vez que el usuario
inicia sesión, se aplica hashing sobre la contraseña que introduce, y se comprueba si es el
mismo que el almacenado en la base de datos del servicio.
Los ataques tradicionales a hashes realizan este cálculo en tiempo real para cada clave del
diccionario provisto, lo que hace que sea un proceso lento. La innovación del ataque vía
tablas rainbow es que se usa una base de claves-hashes que fue generada con anterioridad,
de modo que ya no hay que calcular el hash a partir de la clave que se prueba; sino que
simplemente se toma cada hash en la tabla y se lo compara con el capturado por el hacker, si
coinciden entonces la clave es la que corresponde a dicho hash en la fila correspondiente.
http://index-of.co.uk/Hackers/hacking-etico.pdf
https://www.iberlibro.com/servlet/BookDetailsPL?bi=30593850711&searchurl=an%3
Dkarina%2Bastudillo%26sortby%3D17%26tn%3Dhacking%2Betico%2B101%2Bhackear&
cm_sp=snippet-_-srp1-_-title1
https://www.redeszone.net/tutoriales/seguridad/criptografia-algoritmos-hash/
https://www.ionos.es/digitalguide/servidores/seguridad/rainbow-tables/