De nuestro amigo y forero alister de la página hermana
EDIT 6 oct 2013:
Por favor, cuando informéis de posibles errores en BULLY, deberíais incluir los siguientes datos:
marca y modelo de dispositivo wifi utilizado. si es interno de un portatil, indicad marca y modelo de portatil.
el comando exacto que se está usando para lanzar bully
versión de bully (bully -V)
si el adaptador es PCI, adjuntad la salida del siguiente comando:
lspci -vvnnk
(solo la parte referente a vuestro adaptador, si aparece)
si el adaptador es USB (tanto externo como interno), adjuntad la salida del siguiente comando:
lsusb -v
(solo la parte referente a vuestro adaptador, si aparece)
si el adaptador es USB (tanto externo como interno), adjuntad la salida del siguiente comando:
lsmod
En caso de que no aportéis todos estos datos, se hace prácticamente imposible poder ayudaros a resolver vuestros problemas de uso o encontrar errores en el código.
Gracias
alist3r
Mensaje original:
Llevo unos dias hablando con Brian Purcel, el creador de Bully.
Todo empezó porque algunos usuarios detectaron un comportamiento extraño en bully. No podían configurar bully para atacar directamente a un PIN determinado.
Empecé a modificar el código de bully, comentar con Brian, debatir ideas, comprender su manera de pensar, etc.
Brian hizo bully inicialmente con la idea de ponerlo dentro de una fonera, y se enfocó en darle al programa las máximas capacidades de "resume" posibles, dado que la fonera se bloquea con frecuencia debido al calor, y el ataque se interrumpe.
PIN Vs PIN INDEX
Para darle a bully las "resume capabilities" de las que hablo, brian ideó un concepto llamado "pin index" (índice de pin).
lo explico:
Lo que hace bully básicamente es escribir en el directorio de trabajo un archivo de texto con todos los pins posibles. Por defecto, bully escribe estos pins de forma aleatoria. Por ejemplo:
Código:
7485932x
1495904x
3952902x
...
y tambien guarda información sobre la sesión de ataque mientras lo realiza.
Aquí es donde aparece el concepto de "pin index" comentado antes.
Lo que hace bully es procesar el fichero de pins aleatorios (que se crea al principio de la sesion), y empezar a probar los pins linea por linea.
De esta manera, cada PIN escrito en el archivo de pins, tiene lo que se llama un "pin index" que se corresponde con el número de linea donde está (NO se corresponde en absoluto con el PIN propiamente dicho!!!! es importante comprender la diferencia entre PIN y PIN INDEX, porque eso es lo que ha hecho que muchos usuarios no obtuvieran el resultado esperado usando bully).
Siguiendo el ejemplo anterior:
Código:
Pin Index - Pin
1 - 7485932x
2 - 1495904x
3 - 3952902x
...
Cuando bully se interrumpe, guarda el PIN INDEX por donde iba, para poder retomar el trabajo desde donde lo dejó. En la siguiente ejecución de bully, si este detecta un archivo de PINs, retoma el trabajo desde el último PIN INDEX que comprobó.
De esta manera Brian no renuncia a su deseo de probar los PINs alateatoriamente, pero tampoco renuncia a la posibilidad del realizar un "resume", cosa que de otro modo pareceria imposible usando PINs aleatorios.
El parámetro -p es sólo para el (extraño, improbable) caso de que el usuario quiera forzar de algún modo la posición del fichero desde la que hay que recomenzar. NO PARA EMPEZAR DESDE UN DETERMINADO PIN.
Brian reconoce que la utilidad de usar -p en un fichero que tiene PINs aleatorios es, cuanto menos, limitada. Es poco probable que nos pueda servir de algo, pero ahí está la opción para quien quiera usarla.
Cuando usamos el parámetro -p en bully, NO LE ESTAMOS DICIENDO EL PIN INICIAL QUE DEBE USAR. En su lugar, le estamos diciendo PIN INDEX inicial. Siguiendo el ejemplo anterior, si ejecutamos
Código:
bully xxxx -p 0000003 xxxx
el PIN que bully comprobará será el 3952902x
(es decir, EL TERCER PIN del fichero de PINs que se escribió aleatoriamente al principio del ataque)
Cómo usar bully para probar un PIN determinado
Bully ofrece el parámetro -S para utilizar una lista de numeros secuenciales, en lugar de una lista de numeros aleatorios. Cuando se pasa este parámetro, el PIN INDEX COINCIDE CON EL PIN:
Código:
Pin Index - Pin
1 - 0000001x
2 - 0000002x
3 - 0000003x
...
1234567 - 1234567x
...
9999999 - 9999999x
de este modo, bully probará exactamente el PIN que estamos deseando que pruebe.
en esta situación (pines secuenciales), el parámetro -p cobra mucho más protagonismo y utilidad que en el caso anterior (pines aleatorios). Combinando -S y -p se puede pedir a bully que pruebe determinado PIN directamente, para usar con routers de los cuales conocemos el pin de antemano (o la primera mitad)
Por ejemplo, si sabemos que el PIN es 1234567x podemos usar:
Código:
bully -S -p 1234567
y si sabemos que el PIN empieza por 6869xxxx, podemos usar:
Código:
bully -S -p 6869000
(nótese que, de momento, bully calcula los WPS pin por nosotros y por tanto no necesita 8 digitos sino siete. Ya le he comentado a Brian que cambie eso porque hay routers violando el estandar y la única forma de crackear sus WPS PINs es dejando de calcular el checksum. En proximas versiones se intentará cambiar esto.)
Esto explica el "problema" que tenían algunos usuarios ejecutando bully, y que a pesar de mis modificaciones en el código, ha resultado ser mejor una conversación con Brian, que ha reconocido que el problema viene dado por un diseño muy diferente a lo conocido, junto con la ausencia de manuales y documentación correcta.
Brian reconoce que el acercamiento de probar los PINs aleatoriamente no tiene, necesariamente, una utilidad especifica, y que ciertamente no sirve para evitar ser detectados como atacantes por fuerza bruta. Sin embargo, quiere conservar este modo de funcionamiento como el modo por defecto, ya que aporta cierto sentido de "juego" cuando no sabes qué PIN es el válido para un determinado router.
Como ya sabemos, limitarse a probar aleatoriamente entre 9999999 combinaciones no aprovecharia uno de los mayores fallos de diseño que tiene el WPS PIN, y es que se pueden averiguar los 4 primeros dígitos sin tener que acertar el resto del pin. Esto implicaria una pérdida de rendimiento considerable frente a reaver, que sí detecta y bloquea la primera mitad del PIN cuando la consigue.
En este sentido, y a pesar de que utiliza pines aleatorios, bully tambien tiene esto en cuenta. Si encuentra la primera mitad de pin correcta, la fija.
Pensaremos en cómo rediseñar bully para que incorpore algunas de las cosas buenas que tiene reaver y otras nuevas.
iré ampliando este hilo con la informacion de nuestras charlas, que podeis ver aqui:
https://github.com/bdpurcell/bully/pull/9#issuecomment-23679393