Alters

Mostrando entradas con la etiqueta Teoría. Mostrar todas las entradas
Mostrando entradas con la etiqueta Teoría. Mostrar todas las entradas

La potencia de las potencias

Buenas!

Vaya, este año parece que estoy algo más presente por el blog, y yo que me alegro... resulta que estoy haciendo algunos avances en una librería que cree para mi TFG, y hoy os voy a compartir una cosilla un tanto curiosa que seguro os gustará

¡Vamos allá!

Remote tools: Presentación (III)

Buenas!

Hoy toca hablar de las claves wifi...

Seguramente, todos aquellos que tengáis inquietudes informáticas os habéis planteado la típica pregunta de "¿Cómo consigue la gente la contraseña de mi wifi?"

Bien, para ello hay varios métodos; el más conocido, quizás, sea usando alguna suite (como BT), generalmente con programas como aircrack-ng.

Eso está bien (sobretodo si conoces los fundamentos de la arquitectura OSI y - aunque no sea del todo - puedes empezar a comprender lo que hacen estos programas) para casi cualquier red, incluyendo las WPA, siempre que tengamos un buen diccionario.

Sin embargo, si somos descuidados con nuestro router, podemos caer en la "trampa" de tener nuestra clave sin cambiar, y eso es una metedura de pata SERIA.

¿Porqué?

Vamos a explicarlo:

La clave wifi "por defecto" (esto es, la inicial, y la que se "settea" cuando hacemos un full-reset a nuestro router - full-reset se hace pulsando el botón de reset durante aprox. 20 segundos) no es algo aleatorio.

Y no es aleatorio porque implementar un sistema que hiciera claves aleatorias complicaría la existencia a mucha gente; así que, en vez de eso, las claves son calculadas.

Es decir, supongamos que nuestra red es (su nombre "por defecto") red_1234 y, su MAC es 00:11:22:33:44:55

Entonces, usando estos datos (quizás alguno más), hacemos una función matemática que calcula un valor clave, por ejemplo el siguiente:

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

donde:

x: numero de red (red_1234 => x = 1234)
y: MAC (en este caso 73588229205, al pasar a decimal)
z: un valor "salt", fijo; pondremos como ejemplo 100

ent(x): valor entero de x
enc(x): encriptado (mediante SHA1) de x
subs(x, y): primeros "y" números de "x"

Así, según nuestro ejemplo y nuestra función:

f(x, y, z) = subs(enc(100 + 2*73588229205 + ent(1234/100)), 20);
f(x, y, z) = subs(enc(100 + 147176458410 + 12), 20);
f(x, y, z) = subs(6496f6f662009a89f4401f322de32386e3de4a53);
f(x, y, z) = 6496f6f662009a89f440

Siendo 6496f6f662009a89f440 la clave calculada.

Bien, ahora imaginad que, por cosas de la vida, alguien descubre mi función de cálculo para mis routers "red_XXXX".

Se podría, en una fracción de segundo, tener la contraseña por defecto de todos mis routers, ¿no?

Pues la cosa no anda más lejos de ahí... muchos algoritmos han sido descubiertos, siendo, muchas veces, innecesario acceder a plataformas como BT; ya que con un simple teléfono podemos adquirir las contraseñas.

Ésta puede ser una herramienta digna para cualquier auditor informático, ¿cierto?

Y con esta explicación acabamos esta entrada; la próxima será la cuarta, en la que explicaremos la fuerza bruta.

Como en la anterior entrada, me guardo un tema completo de "hacking wifi", para un futuro.

Saludos, y... ¡Hasta la próxima!

Remote Tools: Presentación (V)

Buenas!

En esta entrada terminamos la presentación de la herramienta "Remote Tools".

Después de esta, habrá un breve interludio en el que os pondré al día de todo (hay varias cosas que tratar que no he expuesto por no alterar el ritmo de las publicaciones), y seguidamente a éste volveremos a las matemáticas (tema II).

Y bien, ahora toca hablar de la herramienta nmap.

Quizás alguno de mis lectores (aunque no comentéis se que estáis ahí, y me alegro de que me leáis - y sobretodo si os ayuda en algo :-) ) ya conoce de la existencia de esta herramienta; no obstante, vamos a hacer un repaso rápido.

Nmap es una herramienta de diagnóstico de redes. Nos permite ejecutar varias "operaciones" sobre un trozo de la red.

Vamos a ver un poco su interfaz:


Se distinguen varias zonas claras:

  • Tipo de perfil: seleccionamos la acción a realizar. Hay una cantidad considerable de perfiles. En este caso tenemos seleccionado simplemente un "Ping Scan".
  • Rango de IP: rango de IP a analizar con el perfil seleccionado. Permite IP única (por ejemplo 192.168.1.1) o un rango (por ejemplo 192.168.1-2.1-255).
  • Comando a ejecutar: es la petición que se lanzará (lo veremos más adelante)
  • Lista de Host: Host/s que han respondido a la petición.
  • Output: salida de texto que lanza el programa.
  • Filtro: podemos filtrar los hosts usando esta barra de filtro.
En este caso, he realizado un ping a toda mi red local. Esto podría servir (por ejemplo) para ver si hay algún intruso, ya que al finalizar el trabajo, tendremos una lista con todos los dispositivos conectados a la red (en este caso: router, pc y mi teléfono).

Más adelante (cuando haga la sección) podremos ver como podríamos "burlar" esto, pero valga esto como ejemplo.

Aparte de esto, tiene otras herramientas, como un panel donde se muestran los puertos abiertos (si hacemos un escaneo más potente) del host seleccionado. En concreto, tiene las siguientes opciones (pestañas):
  • Nmap output: muesta el output.
  • Ports/Hosts: muesta los puertos escaneados del host seleccionado.
  • Topology: muestra la topología de los hosts (un tracert).
  • Host details: muestra detalles del host: SO, nº de puertos abiertos...
  • Scans: muestra una lista de los scans realizados.
Y bien, como podéis intuir esta herramienta es muy potente; pero no todo acaba ahí. Nmap tiene una parte "oculta"... usa un "bridge" (API, si queréis) basado en cmd.

Es decir, podemos ir a nuestro cmd, a la carpeta donde tengamos nmap (o desde donde sea si lo tenemos en PATH) y ejecutar consultas ahí mismo, usando el comando adecuado.

¿Y qué comando usamos? precisamente el que sale en nmap cuando ejecutamos los perfiles.

Entonces, podríamos hacer, por ejemplo: 

nmap -sn 192.168.1-2.1-255 > test.dat

Y tendríamos un archivo "test.dat" con la información de output de nmap.

Entonces, el objetivo de Remote Tools es hacer este tipo de llamadas para obtener información de las diferentes LAN.

Usando esto con cabeza, podemos agilizar las auditorías un poco...

Y bien, con esto acabamos el primer apartado de nuestra futura aplicación... ¡espero que os guste!

¡Hasta la próxima!

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!

Remote tools: Presentación (II)

Buenas!

Estoy teniendo serios retrasos (con todo en general); es una lástima porque realmente me gustaría avanzar lo antes posible este proyecto, ya que creo que puede llegar a ser útil para algunas personas (si bien no como herramienta en si, podría ser útil en el campo de la investigación - es decir, en el campo de la ejecución de la teoría y cómo es resuelta ésta).

Se acaba el mes de marzo, el primer trimestre anual; y esto supone que debería tener una cuarta parte de mis propósitos anuales completados... veremos qué puedo hacer.

En fin, sigamos con lo que toca: Remote Tools.

En esta entrada estaba planificado hablar de las dos primeras funciones (y las más costosas de elaborar): la encriptación y "desencriptación" tanto en MD5 como en SHA1.

Quizás os preguntáis porqué está entre comillas "desencriptar"; esto es porque - supuestamente - algo que está encriptado no se puede "desencriptar" (si se pudiera, sería un cifrado).

Entonces, para enriquecer nuestro vocabulario, podemos decir que se distinguen dos procesos similares pero distintos a su vez:

 - Cifrar: ocultar un mensaje de manera que luego puede recuperarse el mensaje original, solo por aquellos que conozcan la clave establecida o el método de cifrado.

Hay métodos clásicos de cifrado como el "Cesar" o el "Bigenere".

- Encriptar: ocultar un mensaje de manera que el original no puede ser recuperado. También es conocido como "hash".

El método estándar de encriptado es el SHA (Secure Hash Algorithm).

Pero, sin embargo, sí hay métodos que nos permiten saber el mensaje original. El método más sencillo es elaborar un gran diccionario (tal como un diccionario en si) en el que almacenamos parejas de texto - hash.

Es decir, supongamos que hacemos:

sha1("1");

Esto nos devolverá:

356a192b7913b04c54574d18c28d46e6395428ab

Podemos guardar la pareja "1 - 356a192b7913b04c54574d18c28d46e6395428ab" en un fichero o base de datos, de manera que podamos buscar más adelante el valor "356a192b7913b04c54574d18c28d46e6395428ab" y obtener como respuesta "1". Sería algo como:

h = sha1("1"); //h = 356a192b7913b04c54574d18c28d46e6395428ab
t = unsha1(h); //t = 1

Lo mismo es aplicable para el algoritmo MD5, o para cualquier función de "hash" que os venga a la cabeza.

Las mentes eruditas han logrado encontrar un método "calculable" para deshacer un hash en SHA1. Éste es un método que requiere vastos conocimientos y que en un futuro me gustaría saber...

Así, podríamos decir que crearemos un basto diccionario para encriptar y desencriptar palabras.

Si la lógica no me falla, con el tiempo podremos llegar a comprobar un valioso teorema: las colisiones.

Pero de eso ya hablaremos en el punto 3.1.1.2...

Y quizás, con el tiempo, dedico una sección entera a los temas de cifrado - descifrado y encriptado - desencriptado...

De momento es todo; que las vacaciones son cortas y servidor está agotado (malditos cambios, no huyáis!).

Para bien o para mal, os espero, como siempre.

¡Hasta la próxima!

Remote Tools: Presentación (I)

Buenas!

Empezamos con el proyecto de Remote Tools. En esta serie de entradas veremos qué se pretende con este proyecto y cómo está pensado llevarse a cabo.

En concreto (contando a partir de ésta) serán cinco entradas de explicación. Que se repartirán como sigue:

I. Intro, ¿Qué es?, ¿Para qué sirve?
II. SHA - unSHA, MD5 - unMD5
III. Claves wifi
IV. Fuerza bruta
V. nmap bridge

Así, en esta entrada responderemos dos cuestiones imprescindibles.

¿Qué es?

Es un juego de herramientas que provee de ciertas utilidades a todo aquel que le pueda servir. Desde encriptar en SHA1 o MD5 (o intentar desencriptar) hasta analizar hosts.

Está compuesto de tres partes:

- Servidor "externo": es una base de datos externa, que almacena datos de usuarios registrados en la aplicación, funciones para compartir archivos, etc.

- Servidor "interno": es el PC en el que alojamos nuestra instancia de Remote Tools. Esta instancia está a la espera de órdenes desde la parte del cliente, para, en cuanto las recibe, hacer lo correspondiente con el servidor externo.

- Cliente: nuestro dispositivo Android. Ésta es la parte que nosotros "ejecutamos", bien sea para compartir un archivo, apagar nuestro PC (servidor interno), u obtener la clave wifi de nuestro router.


¿Para qué sirve?

Podemos hacer una triple vertiente de este punto:

- Local: nos permite gestionar nuestro servidor interno (es decir, nuestro PC); bien sea para apagarlo, programar un apagado, consultar el estado del PC, ejecutar un archivo o comando... prácticamente disponemos de un control remoto

- Global: mediante funciones locales podemos interactuar con otros usuarios (esta parte ya la veremos en su momento): pedir o intercambiar archivos, o (siempre y cuando tengamos autorización expresa) controlar el servidor de un amigo.

- Herramientas: todo un complejo de herramientas que nunca viene mal tener a mano. Podemos generar diccionarios de Brute Force, hacer "hashes" de archivos o cadenas de texto, o intentar desencriptar un "hash".

Tengo pensado (con el tiempo) hacer algo así como "juegos de herramientas", o una sección donde cada usuario pueda definir sus propias funciones (e incluso definir algún tipo de "macro").

Por último, y antes de acabar esta entrada, me gustaría comentar una cosa:

Ciertos aspectos de la saga "Remote Tools" contendrán información acerca de temas tales como "hacking wifi".

Insisto (e insistiré) en que, por favor, hagáis uso de estos conocimientos solo con fines locales (podéis montar una pequeña LAN en casa y probar la seguridad de la misma), o bien dentro del marco legal vigente. Yo, durante todos los ejemplos, pondré siempre datos NO verídicos, basados en ejemplos HECHOS EN MI ROUTER.

Si aplicáis los conocimientos explicados aquí (o en cualquier otro foro/blog/web) para otros fines será siempre bajo vuestra responsabilidad...