google translator

lunes, 19 de septiembre de 2011

Claves WPA para WLAN_XXXX y JAZZTEL_XXXX

El siguiente script no es nada especial, solo me he dedicado a escribir en Python los datos que he ido recopilando de la red. No he descubierto nada nuevo, si no que he 'mejorado?' lo que ya habia.

Hace tiempo, estuve buscando informacion sobre la seguridad en las redes wireless y especialmente me centre en investigar las redes WLAN.
Movistar (antigua Telefonica) siempre ha estado en el punto de mira de los investigadores de seguridad. Una compañia sin piedad que llena titulares tan escandalosos como el ERE de 8500 empleados habiendo obtenido unos beneficios records de un 31% sobre el ejercicio anterior durante un periodo de crisis economica brutal.

Pero, como diria Francisco Umbral, yo he venido aqui a hablar de mi libro y mas exactamente de como se puede romper la seguridad en las redes WLAN_XXXX y JAZZTEL_XXXX y su clave WPA.

La gente de SeguridadWireless fueron los primeros en dar la primicia que acababan de descubrir el algoritmo de encriptacion para las claves por defecto de los router Comtrend. Optaron por no liberar el codigo e intentar sacar beneficio a traves de AdSense posteando en su web un formulario. Algo que personalmente me parece muy feo.

La comunidad, ante esta agresión, trabajó para descubrirlo y demostraron el método de encriptacion, basado en cifrar a MD5 una cadena generada mediante el ESSID y el BSSID del router. Esta proeza la consiguio elvecinoo dumpeando la memoria del router y buscando cadenas. Simplemente estaba ahi escrita, esperando a ser encontrada.
El hilo se siguió de cerca desde lampiweb.

Dejando a un lado la historia, voy a la parte tecnica que es la que nos gusta a todos.

Primero hay que quitar los : al BSSID. Solo estorban ;-)
El ESSID normalmente se genera restando 3 a el ultimo bloque del BSSID, pero hay que tener en mente que el usuario ha podido cambiar el ESSID a su router.

Coge papel y boli que empezamos.

La clave se obtiene de la cadena compuesta por:
bcgbghgg + 8 primeros caracteres del BSSID + 4 ultimos caracteres del ESSID + BSSID completo
La cadena resultante, se encripta a MD5 y se acorta a los 20 primeros caracteres.

En el caso de que se haya cambiado el ESSID la clave se sacaria de esta manera:
bcgbghgg + los 10 primeros caracteres del BSSID + resta 3 a los dos ultimos caracteres del BSSID + BSSID
Igual que antes, solo nos quedamos con los 20 primeros caracteres del MD5.

Esto queda mas claro con este ejemplo:
Mi red es WLAN_B2B0 y el BSSID es 64:68:0C:B1:B2:B3
La cadena que me resulta es:
bcgbghgg + 8 primeros caracteres del BSSID + 4 ultimos caracteres del ESSID + BSSID completo
bcgbghgg + 64680CB1 + B2B0 + 64680CB1B2B3 = bcgbghgg64680CB1B2B064680CB1B2B3

Convertido a MD5 es 20fbc01c79ee84a8bdde311e15aebb91 y me quedo con los 20 primeros caracteres.
El pass de la red es 20fbc01c79ee84a8bdde

Bonus:
La clave de los router Zyxel es mas sencilla. Estos router tienen como BSSID 00:1f:a4:XX:YY:ZZ.
Se crea una cadena con los 8 primeros digitos del BSSID + 4 ultimos digitos del ESSID
Al igual que con los Comtrend se convierte a MD5 y se acorta ese MD5 a los 20 primeros caracteres.

De nuevo lo explico con un ejemplo:
Mi red tiene como BSSID 00:1f:a4:b1:b2:b3 y esta identificada mediante el ESSID WLAN_B2B0
Creo la cadena:
8 primeros digitos del BSSID + 4 ultimos digitos del ESSID
001fa4b1 + b2b0 = 001fa4b1b2b0

Lo convierto a MD5 y queda 9689bde42d0f3aec317fc7d1a70a4bee
Me quedo solo con los 20 caracteres y el resultado es la contraseña
El password de la red es 9689BDE42D0F3AEC317F

URL SVN:
https://www.assembla.com/code/PynTester/subversion/nodes/trunk/WJ4x/WJ4x_BBDD.py

5 comentarios:

  1. Nuestra intencion es divulgar de la manera mas sencilla.
    Gracias Mario!!

    ResponderEliminar
  2. para ESSID con solo dos letras, vease JAZZTEL_Ba, se rellenaria con 0?

    ResponderEliminar
  3. Y si es personalizada la clave? Como lo averiguan?

    ResponderEliminar
  4. hola David , tu me podrias descifrar lo mismo si yo te doy los datos de mi red , por favor?

    ResponderEliminar