Alters

Remote Tools: Presentación (IV)

Buenas!

Llegamos casi al final de la presentación del proyecto Remote Tools... los cambios siguen (como siempre) demorados; pero otro tipo de cambios han sucedido...

En parte me alegro por los cambios que ya han tenido lugar; no obstante, me gustaría que sucediera por fin el cambio que tanto ansío...

En fin... sigamos con lo que vamos.

En esta entrada toca hablar de la fuerza bruta (aplicada a la informática).

¿Habéis oído eso de "más vale maña que fuerza"? Pues está relacionado...

Siguiendo con el ejemplo de la entrada anterior, vamos a introducir el concepto de fuerza bruta, y, sobretodo, cómo aplicarla de manera correcta (es decir, aplicar fuerza con maña).

Si recordamos, hablábamos de una función para calcular claves por defecto, tal que:

f(x, y, z) = subs(enc(z + 2y + ent(x/z)), 20)

Ahora bien: obtenidos todos los datos, obteníamos una única solución, por lo que no hacía falta nada más.

Pero claro, si yo fuera un fabricante de routers, haría la cosa algo más complicada, por ejemplo:

f(x, y, z) = con(subs(enc(z + 2y + ent(x/z)), 15), k)

donde "x", "y", y "z" serían los mismos valores; "subs", "enc", y "ent" las mismas funciones. Además:

 - "con": función de concatenación de todos los ítems de la lista
 - "k": variable que (valga la redundancia) es variable para cada router, y no hay manera de saber

Entonces... ¿Cómo calculamos ahora la clave del router?

La respuesta está en la fuerza bruta.

Podríamos empezar a pensar, y podemos intuir que, si antes tenía 20 dígitos de longitud, la clave seguirá teniendo los mismos dígitos.

Si eso es cierto, sabemos que "k" es un valor de 5 dígitos de longitud.

Ahí tenemos algo acotado ya: sabemos que:

k = abcde

de manera que "a", "b", "c", "d", y "e" pueden tomar cualquier valor alfanumérico posible.

Como su nombre indica, la "fuerza bruta" consiste en acceder por la fuerza, probando todas las combinaciones posibles de manera automática hasta dar con la correcta.

Y para aplicar la fuerza tenemos dos maneras:

 - Manera óptima
 - Manera bruta

Primero, ya que es más corto, explicaremos la manera "bruta":

Consiste en probar absolutamente todo. En este caso, sabiendo que tenemos 20 caracteres, haríamos cadenas de 20 caracteres y las iríamos probando "a saco". Haciendo unos cálculos obtenemos:

 * Números del "0" al "9" => 10 caracteres
 * Letras de la "a" a la "z" (la "ñ" no cuenta en este caso) => 26 caracteres
 * Letras de la "A" a la "Z" => 26 caracteres

Por tanto, tenemos 62 posibilidades en cada posición, por 20 posiciones:

n = 62^20 = 704.423.425.546.998.022.968.330.264.616.370.176 posibilidades

Bien, a una velocidad de 5.000 posibilidades probadas por segundo, tardaríamos 1630609781358791719834097834.7601161481481481481483 días (4467424058517237588586569.4103016880771182141045159 años aprox.) en completar nuestra búsqueda.

Como se ve, ciertamente imposible...

La manera óptima, sin embargo, es más optimista, ya que haríamos lo siguiente:

 * Sabemos que "k" tendrá 5 caracteres, por lo tanto:

n = 62^5 = 916.132.832 posibilidades

Wow, hasta podemos ver que son menos de un billón (la cifra anterior cuesta de ver, incluso). Con el cómputo anterior (5.000 posibilidades/segundo) tendríamos:

t = n/(60*60*24*5000);
t = 2.1206778518518519h

Bueno, un par de horas; podríamos ir a tomar algo dejando el ataque en marcha, y al volver tendríamos nuestra clave :-)

En definitiva, aplicar la fuerza bruta es cuestión de maña...

No obstante, hay veces que simplemente no se puede. Estas situaciones son, entre otras:

 - Passwords "personales" (definidos por cada usuario)
 - Claves propias
 - Todo aquello que no sea computado

En estos casos, podemos hacer varias pruebas, como jugar con longitudes, juegos de caracteres, o usar la ingeniería social (o técnicas maliciosas como keyloggers, sniffers, phishing...).

En nuestra aplicación, empezaremos con un concepto "global" de fuerza bruta: es decir, generaremos diccionarios (conjuntos de posibilidades) acorde a los parámetros que de el usuario, y los devolveremos. Será cuestión del usuario usarlos.

Como en cada una de estas entradas, dejo un tema pendiente: obtención de datos mediante diversas técnicas (estas entradas irán con un banner más grande que un bocadillo de surimi con wasabi).

Si no ha quedado claro en el párrafo anterior, cuando abordemos (más adelante) este tema, será como contramedida; es decir, de manera informativa y para estar informados y al loro de las maneras en las que nos podrían engañar (en ningún momento recomiendo usar técnicas maliciosas para robar información, ya que puede ser delito).

La próxima entrada abordará el tema de un programa que nos puede ser útil: nmap.

Como siempre digo,

¡Hasta la próxima!