INTRODUCCIÓN
Introducción
Dado que nuestras conversaciones en el Black Hat Vegas y DEFCON, Jon Ellch y yo hemos sido bombardeados con preguntas sobre cómo encontrar vulnerabilidades en los controladores de dispositivos inalámbricos y las técnicas específicas que se emplearon. En lugar de responder a estas uno se pregunta a la vez, un artículo parecido un mejor curso de acción. En este primer artículo, vamos a discutir cómo construir un entorno de auditoría, cómo construir fuzzing herramientas y, finalmente, cómo interpretar los resultados.
A pesar de nuestras conversaciones anteriores se han centrado principalmente en protocolos 802.11 basados en estos métodos de auditoría estos se pueden aplicar a casi cualquier tipo de dispositivo, incluyendo Bluetooth y de infrarrojos, con resultados exitosos. Este artículo está diseñado como una guía del principiante a fuzzing controladores de dispositivos inalámbricos. Para sacar el máximo provecho de ella, ya debe estar familiarizado con la explotación del desarrollo y la depuración, ya que el artículo no incluye ninguno de estos temas en profundidad.

Figura 1. Como el póker, pero con un tipo diferente de comida chatarra!
Construcción de un entorno de la auditoría Wifi
Nuestra presentación en el Black Hat fue titulado "Controladores de dispositivos: No construir una casa sobre una base inestable." Este concepto es válido para algo más que los controladores de dispositivo, es cierto para las plataformas de auditoría inalámbrica. La parte más importante de la auditoría es el primer edificio en una buena y sólida plataforma para lanzar ataques. El sistema operativo subyacente es de usted, pero opté por usar Fedora Core 3 (mientras FC5 ahora está hacia fuera, realmente no es necesario hacer algo más que la auditoría wifi). He instalado una imagen de FC3. Los únicos paquetes adicionales que se instalaron fueron hechas usando yum. Estos participan en actualizar el núcleo a la última versión y la instalación de un paquete llamado sharutils. Esto se logró mediante la emisión de los siguientes comandos:
[root:~]$yum upgrade kernel
[root:~]$yum install sharutils
Aunque esto fue hecho en una Dell Latitude D610, la tarjeta inalámbrica interna de la máquina no se utilizó con el fin de hacer la inyección de paquetes WiFi primas necesarias para fuzzing, una combinación de terceros se utilizó el código y hardware. El componente principal de esto es una biblioteca llamada LORCON (pérdida de la Radio de conectividad).
LORCON es una biblioteca que da a un programador de la embarcación la capacidad de un paquete de Wi-Fi a partir de cero. LORCON es construido por un parche en el tercer partido, con controlador madwifi para las tarjetas basadas en el chipset Atheros con el fin de tener los mejores resultados, usted debe elegir una tarjeta que está bien soportado por madwifi. A los efectos de este artículo, elegí el Netgear WPN511. Es una buena tarjeta que soporta casi todas las características necesarias y está bien soportado por madwifi. Tampoco es difícil de encontrar.

Figura 2. Tarjeta Netgreat WPN511 utilizado para este artículo.
Una vez que haya un buen ambiente con todos los paquetes necesarios, madwifi parcheado con LORCON i a instalarlo. Después del proceso de revisión, debe ser tan simple como la expedición de la "marca" de comando para la mayoría de los sistemas. Si hay un problema aquí, consulte la documentación de madwifi disponible en el sitio del proyecto [http://www.securityfocus.com/infocus/1877#ref3"]. Después de que la construcción se complete, es necesario instalar los controladores con el comando "make install". Usted puede verificar los como los componentes se instalan mirando en / lib / modules / directorio de red para la existencia de la WLAN y los módulos del kernel ATH, como se muestra en la Figura 3.

Ahora que tiene los controladores, coloque la tarjeta en la ranura PCMCIA y debería recibir un mensaje similar al siguiente en la Figura 4:

El primer paso es llevar la tarjeta a un estado de trabajo. Esto se hace con 'ifconfig ath0 up'. La usabilidad se puede comprobar ejecutando el comando ifconfig de nuevo. La tarjeta puede ser probada mediante la emisión de unos cuantos comandos como 'iwlist ath0 scan' y así sucesivamente.

Escribí un shellscript para automatizar esta tarea. Es útil para no tener que repetir el mismo comando una y otra vez. Mine tiene este aspecto:
#!/bin/bash
ifconfig ath0 up
ifconfig ath0 192.168.1.1
iwconfig essid "wifiaudit"
iwconfig ath0 mode Master
iwpriv ath0 mode 2
iwconfig ath0 channel 1
Ahora que el ambiente es creado, es el momento para realmente construir paquetes para inyectar - lo que significa que tienes que escribir el código. Todos los fuzzers que he desarrollado están escritos en C y utiliza la API de LORCON a desarrollar y la inyección de paquetes. Si no sabes C o usted no quiere pasar mucho tiempo en el desarrollo de la mano de las estructuras de paquetes, le recomiendo echar un vistazo a una excelente herramienta llamada scapy.
Scapy es una herramienta de creación de paquetes escrito en Python por un programador llamado Philippe Biondi. La combinación de Python con la forma en que la herramienta está diseñada significa que, con muy poco conocimiento de la creación de redes, puede escribir un fuzzer muy poderoso rápidamente. Afortunadamente, scapy es consciente de WiFi. Descarga una copia y ejecutala. No se preocupe por ver los errores, ya que no afectará a la base de envío y recepción de paquetes. Ejecutar Scapy y hacer un ls (). Esto le mostrará todas las capas diferentes disponibles para usted.

Los tipos de paquetes que serán más interesantes con fuzzing WiFi será la serie Dot11 para la construcción de paquetes. Es muy fácil crear un simple script en Python que se inyecte cualquier cosa que quieras. Un script de prueba para empezar podría ser algo tan simple como lo que se muestra a continuación. Todo este pequeño script, que lo que hay que hacer es generar un marco sencillo y se lo inyecta. El guión es el siguiente:
#!/bin/env python
import sys
from scapy import *
victim=sys.argv[1]
attacker=sys.argv[2]
conf.iface="ath0raw"
frame=Dot11(subtype=1, type=0, addr1=victim, addr2=attacker, addr3=attacker)
sendp(frame)
Si ejecuta Wireshark (antes conocido como Ethereal) en la caja y sniffear ath0raw, con esto podrás ver los paquetes de inyección. El subtipo 1 establece que el paquete sea una respuesta sindical. La línea de comandos utilizados mientras se ejecuta el script de prueba es muy simple:
./wifi.py 11:22:33:44:55:66 66:55:44:33:22:11
El resultado de la secuencia de comandos que se observa en Wireshark. Wireshark es útil en la construcción y la depuración de un fuzzer, ya que ayuda al ajuste fino exactamente en los campos que desea ejercer.

En cuanto a los otros campos que apoya scapy, ahora es tan fácil como apilarlos juntos. Si no está seguro de qué argumentos se pasan a un campo, puede simplemente hacer un ls () para ello, por ejemplo, hacer un ls (Dot11) producirá el siguiente resultado:
>>> ls(Dot11)
subtype : BitField = (0)
type : BitEnumField = (0)
proto : BitField = (0)
FCfield : FlagsField = (0)
ID : ShortField = (0)
addr1 : MACField = ('00:00:00:00:00:00')
addr2 : Dot11Addr2MACField = ('00:00:00:00:00:00')
addr3 : Dot11Addr3MACField = ('00:00:00:00:00:00')
SC : Dot11SCField = (0)
addr4 : Dot11Addr4MACField = ('00:00:00:00:00:00')
>>>
Con el fin de apilar de los campos, que están separados por una barra, creará un marco de control general, seguido por un campo de un cierto subtipo. Esto se vería así:
frame=Dot11()/Dot11AssoResp()
Uno de los mejores reportajes sobre scapy es su función de pelusa. Puede ajustar cualquiera de estos elementos en fuzz () y en un bucle que vaya a generar valores para cualquier cosa que no hizo la oferta. Usted puede ver los resultados de esto con una simple modificación de la secuencia de comandos de prueba utilizado anteriormente:
#!/bin/env python
import sys
from scapy import *
victim=sys.argv[1]
attacker=sys.argv[2]
conf.iface="ath0raw"
frame=fuzz(Dot11(addr1=victim, addr2=attacker, addr3=attacker))
sendp(frame, loop=1)
Hacerlo correr con las opciones de la misma línea de comandos como ya se utilizaban producirá un paquete diferente para cada inyección. Lo único que se mantendrá estático en los paquetes es Addr1, Addr2, y addr3. Esta es una forma rápida y sencilla de generar paquetes fuzzing. Hay un par de maneras de ir sobre fuzzing para obtener mejores resultados.

La guía del principiante eficaz sobre fuzzing
Ahora que su entorno es de configuración y de trabajo, el primer paso es la pelusa de las tarjetas de destino en los diferentes estados. El Estado puede estar asociado,No-Asociado, Ad-Hoc, escaneo, y así sucesivamente. Los distintos estados son importantes porque muchas de las rutas de código que desee ejercer sólo se puede llegar en ciertos estados. La mayoría de los conductores son lo suficientemente inteligentes para rechazar los paquetes para un estado que no están actualmente dentro, un ejemplo de esto sería un ordenador portátil en un estado asociado con un punto de acceso y la generación de un fuzzer ad-hoc de los paquetes. En la mayoría de los conductores de estos paquetes sólo será ignorado.
La segunda cosa que aumentar las posibilidades de una correr un fuzzing con éxito es usar un depurador de núcleo. Cuando una máquina no responde, usted debe ser capaz de guardar los paquetes recientes enviados. Rastrear una vulnerabilidad puede ser difícil, especialmente desde el accidente puede ocurrir en una variedad de lugares diferentes. En menores de edad sobreescribir en la memoria puede conducir a una corrupción de memoria leves que pueden no ser evidentes hasta que un controlador diferente a los intentos de acceso a la memoria dañada. Seguimiento de la causa exacta de la vulnerabilidad puede ser una tarea difícil.
En Windows, las herramientas como SoftIce, o Windbg se puede utilizar para establecer puntos de interrupción en las llamadas que sería beneficioso en la búsqueda de la corrupción. En OS X de Apple es un poco más difícil de hacer esto porque la depuración del núcleo requiere de dos máquinas.
Si Windows es su objetivo, utilizando el DDK de Windows será más útil con una herramienta llamada DriverVerfier puede ayudar a localizar rápidamente cualquier corrupción de memoria. De cualquier manera, será muy importante que usted se familiarice con Windbg para su análisis de los vertederos de accidente. Después de un volcado se carga, el comando '! Analizar â € "v" es útil para generar un análisis detallado. La pila backtrace puede no ser tan fiable como hay una buena probabilidad de que las partes se han sobrescrito en ella.
Para obtener el mejor éxito, usted debe automatizar el proceso de comprobación del estado de la víctima. Por ejemplo, en OS X, no es un comando de aeropuerto que puedan ser utilizados para manipular la mayoría de las opciones de conexión inalámbrica sin necesidad de pasar por la interfaz gráfica de usuario. Dado que en el tráfico se generan malformaciones y escupe en el blanco, la máquina puede disociarse de la red y empezará la búsqueda de una mejor red. La secuencia de comandos, el comando del aeropuerto para comprobar el estado actual de modo que si no es lo que se desea, se puede cambiar de forma automática. El â € "El argumento pasado al aeropuerto le dará la situación actual. Usted puede disociarse de una red, unirse a una red o incluso obligar al aeropuerto a hacer cualquier acción en repetidas ocasiones con el â € "opción-r. El mismo tipo de acción que se puede hacer en Linux y en Windows con sus respectivas herramientas. Normalmente, correr un fuzzer puede tardar mucho tiempo en completarse y puede ser una sensación horrible cuando descubre que su destino estaba en un estado incorrecto para la mayoría de ese tiempo.
Correr fuzzers suele ser mucho más útil si se dirigen hacia las zonas que el investigador cree que puede ser débil. Esto se logra mejor a través de ingeniería inversa. Conductores en general no son muy grandes y no pasará mucho tiempo para desmontar. Lo interesante acerca de los conductores es que se encuentra el código normalmente extinguido en otras áreas del sistema operativo que aún se encuentran en abundancia en los conductores. Esto incluye memcpy sin control, las operaciones de cadena y bucles, en vez de escribir a las matrices, sin buenas condiciones de terminación. Mirando a través del código desensamblado, por lo general, puede decir lo que un segmento de código es responsable por los mensajes de depuración que generan. Si usted encuentra un uso intensivo de memcpy, sprintf y strcpy, concentre su fuzzer en esas áreas.
Vaya unos pasos más adelante
Aunque este artículo fue diseñado como una guía para principiantes a la auditoría WiFi, estos mismos tipos de técnicas pueden ser portado a otros protocolos inalámbricos como Bluetooth. Aunque en los fuzzers que hemos utilizado en el Black Hat fueron escritos en C, es difícil ignorar la utilidad de algo como el basado en Python scapy que es para fuzzing rápida y relativamente fácil. Además de los paquetes de Dot11 que puede generar, scapy también puede generar paquetes L2 para utilizar Bluetooth como así. La pelusa () la función se aplica a estos al igual que la interfaz de Dot11.
Bluetooth es un objetivo ambiente rico, incluso más que WiFi. La gama de Bluetooth es mucho menor, pero está diseñado para ser más abierta. Bluetooth soporta características como SAR (segmentación y volver a montar) y diferentes tipos de encriptación y compresión, que a menudo son maduros para los auditores para recoger de separación, cosas simples como los paquetes de gran tamaño y los servicios de interés, el evento a través de un dispositivo no está vinculado, hará que algunas pilas Bluetooth y dispositivos móviles se bloquee.
El propósito de nuestras conversaciones recientes y este artículo introductorio es mostrar lo fácil que es construir una plataforma de inspección wi-fi - y cómo estos tipos de técnicas pueden ser incorporados en un plan de Pentesting de calidad. Los Fuzzers son útiles para encontrar vulnerabilidades, en su mayoría bajadas de los frutos, pero no hay sustituto para el tiempo dedicado a los binarios de la ingeniería inversa. Tomando la ruta de ingeniería inversa, muchos más errores que se pueden encontrar que puede tener un fuzzer y capaz lleve mucho tiempo para descubrir.
Texto traducido por Darki113r.
Autor:David Maynor
Fuente:http://www.securityfocus.com/infocus/1877
0 comentarios:
Publicar un comentario