28 febrero 2014

Ataques basados en diccionario en aplicaciones de escritorio

En una tarde de ocio dedicada al juego Guild Wars 2 observé como uno de los mapas estaba repleto de bots dando vueltas en círculos y matando todo bicho que apareciera en su camino para recolectar y generar oro virtual que intercambiar por dinero real en alguno de las muchas plataformas Web de venta de estos servicios:


Esta idea despertó mi curiosidad sobre cómo estarían desarrollados..., si repetirían un determinado flujo de paquetes en la red (lo que descarto porque debe ser una auténtica locura), o si se programaría simulando pulsaciones de teclado y capturando las respuestas de la aplicación.

En mi acercamiento a este problema opté por la segunda opción, y cuando tenía medio bot programado me di cuenta que tenía los elementos necesarios para realizar otro tipo de ataques...

Desktop Brute Forcer (DeBF)

Son habituales las herramientas de fuerza bruta como Intruder de Burp o ZAP en entornos Web, Medusa para atacar a múltiples protocolos..., pero no lo son tanto las orientadas a atacar un formulario de escritorio, aquí es donde mi medio-bot puede aportar una nueva mecánica:



El funcionamiento es sencillo:
  • En Path to dictionary file se introduce la ruta al diccionario de palabras que queréis utilizar en el ataque (podéis ayudaros con el botón examinar). La aplicación espera un diccionario donde tengáis las palabras separadas por saltos de línea y os propondrá un diccionario incluido con la aplicación.
  • En Keystrokes definimos las pulsaciones que hace falta enviar al formulario, ya sabéis, escribir la palabra, darle al ENTER para obtener el mensaje de clave incorrecta, darle otra vez al ENTER para cerrarlo, después a lo mejor tenemos que esperar unos instantes hasta que nos vuelve a mostrar el formulario de introducir contraseña..., para todo esto contáis con las siguientes palabras reservadas:
    • El símbolo $$ será reemplazado con la palabra del diccionario que se probará en esa iteración
    • El símbolo ##X##, donde X es un número, indica que se dormirá el proceso durante X milisegundos. Por ejemplo, ##100## es que dormimos 100 milisegundos
    • El símbolo {YYYY}, indica que hay que enviar una tecla especial. Por ejemplo enter sería {ENTER} y escape {ESC}. Si queréis presionar ALT+A escribiréis %(A), y si queréis presionar ALT, soltar, y después presionar A escribiréis $()A. Lo tenéis mejor documentado en este enlace de MSDN.
  • Una vez configuradas las pulsaciones hay que presionar "Smash the form!". La aplicación nos informará de que tenemos 3 segundos para establecer el foco sobre el formulario que se quiere atacar. Sólo queda dejarlo trabajar (no os perdáis los vídeos de los ejemplos de más abajo).
  • NOTA: Si se quiere cancelar el ataque sólo hay que ponerle el foco al formulario de DesktopBruteForcer durante el ataque

Algunos ejemplos de recetas de pulsaciones

Aplicación: Descompresor ZIP de Windows 7, para romper un ZIP protegido por contraseña
Vídeo: Enlace
Receta
$${ENTER}{ENTER}##100##
Descripción:
Escribe la palabra, presiona enter para comprobarla, presiona enter para cerrar el mensaje de error, espera 100 milisegundos antes de escribir la siguiente palabra.

Aplicación: Excel 2007, para romper la contraseña de un libro protegido
Vídeo: Enlace
Receta
%()AA##150##exc##100##e{DOWN}##300##{ENTER}$${ENTER}{ENTER}##100##
Descripción:
Presiona ALT, luego A (para abrir el menu), después A (para seleccionar la opción ABRIR). Espera 150ms y después escribe "exc" (porque el fichero protegido se llama Excel.xls), espera 100ms para que te sugiera el nombre, escribe otra "e" para asegurar el nombre, presiona abajo para seleccionar el nombre propuesto por el formulario, espera 150ms y le da al enter para seleccionar el nombre propuesto. En este momento salta el formulario de introducir clave, se escribe la clave, se envía con ENTER, y se cierra el mensaje de error con ENTER. Se esperan 100ms antes de volver a intentar la siguiente clave.
Nota: Para que funcione esta receta el fichero tiene que llamarse "Excel.xlsx" y estar en el directorio propuesto por la aplicación cuando se muestre el formulario de Excel.

Aplicación: KeePass 2.25, para romper la clave maestra de un fichero
Vídeo: Enlace
Receta
%(){DOWN 3}{RIGHT}{ENTER}##150##$${ENTER}##500##{ENTER}##100##{ESC}##100##
Descripción:
Presiona ALT, luego abajo 3 veces (para ir a la opción de abrir reciente), después derecha y luego ENTER (para seleccionar el primer elemento propuesto). Espera 150ms, escribe la contraseña y luego enter para comprobarla. Espera 500ms a que nos de error, presionar ENTER para cerrar la ventana de error, espera otros 100ms, después ESC para cancelar la ventana y volver al principio y espera otros 100ms antes de volver a empezar.
Nota: Para que funcione esta receta el fichero tiene que encontrarse el primero entre los ficheros recientes.
Nota2: ¿Cuál sería el resultado de buscar en google "ext:kdbx" y pasarle el diccionario top 100 claves de Adobe a los resultados?

Conclusiones

No deja de ser una prueba de concepto porque cualquier ataque contra un algoritmo en concreto será capaz de generar muchísimas más contraseñas por segundo y será más eficiente que este método, sin embargo en determinadas circunstancias puede que no podamos atacar el algoritmo y en esos casos este sistema puede daros una oportunidad.

Descarga de la herramienta

Enlaces de descarga a la herramienta:
  • Proyecto en GitHub. Es licencia GPL así que no dudéis en hacer vuestro propio fork ;) .
  • Zip con la aplicación compilada. Requiere .NET Framework 4 .

Artículo cortesía de Miguel Ángel García
Twitter: @nodoraiz

15 comments :

53n53y dijo...

Muy interesante gracias MIGUEL y SBD

Noel_PI dijo...

Hay un proyecto del MIT encaminado a estos menesteres, Sikuli, aunque
más que para ataques de fuerza bruta o farmeo en videojuegos se empezó a
desarrollar para automatizar tareas en el escritorio
http://groups.csail.mit.edu/uid/sikuli/

thesur dijo...

Está bien pero... En aplicaciones de escritorio en vez de usar otra app que simule las combinaciones de teclado... sería mucho mas optimo y rapido hacer llamadas a las funciones de la aplicacion remota mediante hooks y/o usando la api de createremotethread... pero está bien la herramienta de todos modos, me la apunto

José María Roncero dijo...

Interesante herramienta. Como contramedidas a la aplicación, la obvia complejidad de la contraseña y en el caso concreto de Keepass utilizar un key file en conjunción con la contraseña (algo que tienes y algo que sabes)

Javier dijo...

Brillante! Y bastante claro.

carlos mata dijo...

como puedo aserle para aserle un whatsApp ami hermana que esta en jalisco con su numero de telefono des de mi compu lo que pasa que conose poco de teinologia y me pidio que si yo selo puedo aser des de baja californi mexico pero me gustaria saver si se puede que yo lo aga y ella solo lo asepte en su celular ?

ximena dijo...

como hago para registrarme en whasapp grati desde tigo

renato dijo...

Amigo el mensaje no lo puedo emviar yo soy de Perú

luscelly dijo...

como ago para rejistrarme en wasap

luscelly dijo...

me pueden desir como ago `para desargar wasap en un celu huawei con teclado

jose dijo...

si tengo dos targetas son duo con el mismo numero puedo gastar el mismo whatsapp en los dos terminale

veronica dijo...

al numero q llame no me contesta

martina dijo...

que¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿

martina dijo...

denme el numero de ustedes para twiter por fi soy solo una niña de 10 años

Sholaclark Deleivery dijo...

¿Necesita un préstamo urgente o servicios financieros? Póngase en contacto con financialdepartment.online@gmail.com / http://charitycorporation.gnbo.com.ng .