Hacking Ético Tema 4 - Fuerza Bruta

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 10

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.1. Casos de uso para las técnicas de Fuerza Bruta


En seguridad informática, a veces es necesario llevar a cabo fuerza bruta para evitar el trabajo
de probar a mano o generar combinaciones, algo que nos llevaría mucho tiempo de trabajo.
Por ejemplo en estos siete casos:

1. Si necesitamos descubrir determinado usuario o password de un servicio de


autentificación como FTP, SSH o POP3 de manera remota a través de una red.
2. Obtener el password de archivos del paquete Office u otras aplicaciones del tipo
compresores (.rar, .zip, .mdb, .xls, .doc) de modo local.
3. En el caso de formularios web de autentificación que solicitan que ingresemos usuario
y clave (validación online, .htaccess, intranets con logins).
4. Para romper los cifrados típicos de los archivos shadow en Linux, Solaris y Unix, o
los archivos hasheados SAM de la familia Windows.
5. Para descifrar strings de datos cifrados, como las claves almacenadas en md5 de los
foros, o passwords como los que están presentes en routers Cisco.
6. Para calcular sesiones ID válidas de URLs en páginas de comercio electrónico u otro
tipo de sitio web.
7. Para aplicar fuerza bruta a una aplicación que cuenta con una interfaz gráfica. Esto
puede ser hecho tanto de manera local, con autentificación de usuario, o remotamente,
utilizando un cliente para ese servicio y haciendo que éste automatice su intento por
lograr un login válido en el servidor.

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.

Se utilizan principalmente para proteger las contraseñas y no guardarlas en texto claro en


una base de datos. Para comprobar que hemos introducido correctamente una contraseña, lo
que se hace es aplicar el algoritmo hash a la contraseña introducida y compararla con la
almacenada, y si es igual entonces la clave es correcta. Este procedimiento se utiliza en todos
los sistemas operativos, webs con autenticación de usuario/clave etc.

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.

Ahora, veamos algunas de las funciones hash más utilizadas actualmente.


1.2.1. MD5
MD5, también llamado Message-Digest Algorithm es una función de hash cuyo principal
objetivo es verificar que un archivo no ha sido alterado.

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.

IES Puertas del Campo ↔ df342279ba12ee8c5db1886fc346d992

Hacking Ético ↔ d7ee1de9091e95d8570b840389e2fede

1.2.2. Familia SHA


Del inglés Secure Hashing Algorithm, SHA es una familia de funciones hash publicadas por
el Instituto Nacional de Estándares y Tecnología como un estándar federal de procesamiento
de información de EE. UU. Los más utilizados son SHA-1, SHA-256 y SHA-512.

Una característica principal de las funciones SHA es la capacidad de no reflexividad, es


decir, dado una cadena de bits del buffer de salida resulta prácticamente imposible intentar
hallar una cadena origen que devuelva el mismo contenido.

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.

IES Puertas del Campo ↔ 1334d494bc2fbb2f8a6b5602586947abd814d7935b99bc4007b7f6faa956ac79

Hacking Ético ↔ 05e0e7e35f0c4436dfe59f4fc8f962784431b0a3c6611080c225fe05881c84bc


1.2.3. Salt encoding
La “codificación sazonada” o salt encoding consiste en añadir bits extra a los algoritmos de
codificación estándar como segunda entrada, alterando así el resultado almacenado en las
bases de datos de los distintos servicios, y dificultando enormemente posibles intentos de
fuerza bruta utilizando las codificaciones hash descritas anteriormente.

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.

2. Marco teórico de los algoritmos de Fuerza Bruta


2.1. Ejemplo básico
Imaginemos que tenemos un sistema que requiere para su ingreso una clave de 2 caracteres
numéricos. Dado que los números van del 0 al 9, entonces tenemos 10 caracteres posibles
que podrían utilizarse para conformar la clave. Aplicando la fórmula de permutación
estadística, obtenemos:

𝑥
𝑃 =𝑛

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.

Por lo tanto, no es suficientemente seguro.


2.2. Ejemplo avanzado
Pero, ¿y si la clave no es de 2 caracteres, sino de 20 y los caracteres posibles son el alfabeto
latino tradicional (26 caracteres) más cuatro símbolos especiales (*!-_) y la clave es sensible
a mayúsculas? En ese caso tendríamos que:

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.

3.1. Ataques híbridos


Como su nombre sugiere, en este tipo de ataques se combina una lista de palabras contenida
en un diccionario con caracteres adicionales generados automáticamente.

Por ejemplo, en el diccionario está la palabra marciano, entonces el script o programa


intentará: marciano6, marciano7, marciano8, etcétera. Los caracteres que pone al final de
cada palabra estarán definidos por nosotros en su configuración, cantidad y tipo de charset.
También se pueden unir dos palabras de un mismo diccionario, como por ejemplo,
marcianoamarillo, marcianoverde, marcianolila, marcianoblanco, etcétera.

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.

La introducción de las tablas rainbow ha disminuido considerablemente el tiempo que toma


crackear una clave a partir de un hash, el punto clave aquí es tener una buena tabla rainbow.
Hay muchos sitios que venden estas tablas online y en muchos casos incluyen el software
para ejecutar el crack.

5. Factores que inciden en el tiempo


Existen una serie de factores que pueden llevar a que el procesamiento de un algoritmo de
fuerza bruta tenga éxito con mayor velocidad:

1. Complejidad de la clave. La clave por descifrar es fuerte o lo es su cifrado, debido a


la complejidad que dará el número de caracteres y la combinación de éstos.
2. Charset elegido. El charset es un juego de caracteres, como pueden ser los números
del 0 al 9, el alfabeto latino (en minúsculas o tanto mayúsculas como minúsculas). Si
se ataca un password cifrado de sólo números con un charset de muchos caracteres, la
combinación de éstos será muchísimo más elevada que si se elige sólo el charset de
números.
3. Amplitud del diccionario de palabras. El empleo de éstos contra archivos de
cuentas cifradas a través de un diccionario de palabras predefinidas da muy buenos
resultados, especialmente si el diccionario está confeccionado de manera inteligente.
4. Uso de patrones en combinación con otras técnicas. Usar un diccionario o un
ataque híbrido combinada con los datos extraídos mediante information gathering e
ingeniería social, suelen ser una técnica muy efectiva. Se basa pura y exclusivamente
en delinear una serie de palabras o de passwords sobre la base del conocimiento
previo que tenemos de la organización u objetivo.
5. Ancho de banda. Existe una gran diferencia entre hacer brute force utilizando una
conexión inalámbrica de un espacio público o compartido, a intentarlo con una
conexión cableada con una gran tasa de transferencia.
6. El microprocesador utilizado. La importancia del micro es fundamental por su
potencia debido a la cantidad de cálculos por segundo que éste será capaz de realizar.
7. La herramienta utilizada. Su algoritmo y funcionamiento, el manejo de sockets, los
tiempos de respuesta, entre otras tantas cosas. También influye la habilidad en
programación por parte del pentester, en el caso de escribir un script y utilizarlo
localmente.
8. La falta de entendimiento por parte del ejecutor. Para emplear esta técnica hay que
saber dónde, cómo, con qué y durante cuánto tiempo hacerlo. Hay que tener en cuenta
las probabilidades, los factores, conocer características del objetivo y tener algunos
conocimientos técnicos previos y la diferencia entre tipos de hashes, cifrados y
archivos
6. Bibliografía
Hacking Ético, Carlos Tori.

http://index-of.co.uk/Hackers/hacking-etico.pdf

Hacking Ético 101, Karina Astudillo B.

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

Información sobre hash, tipos y algoritmos

https://www.redeszone.net/tutoriales/seguridad/criptografia-algoritmos-hash/

Información sobre las rainbow tables

https://www.ionos.es/digitalguide/servidores/seguridad/rainbow-tables/

También podría gustarte