1
CURSO
11/12
DETEC
CIÓN DE ATA
QUES EN RED
ES IN
ALÁMBRICAS
N
EFTA
LÍ RODRÍGUEZ GÁLVEZ
ESTUDIOS DE INGENIERÍA
DE TELECOMUNICACIÓN
PROYECTO DE FIN DE CARRERA
Detección de ataques en redes inalámbricas
CURSO: 2011/2012
Neftalí Rodríguez Gálvez
LOMO: PORTADA:
3
ESTUDIOS DE INGENIERÍA DE TELECOMUNICACIÓN
DETECCIÓN DE ATAQUES EN REDES INALÁMBRICAS
REALIZADO POR:
Neftalí Rodríguez Gálvez
DIRIGIDO POR:
José Camacho Páez
DEPARTAMENTO:
Teoría de la Señal, Telemática y Comunicaciones
Granada, Septiembre de 2012
5
DETECCIÓN DE ATAQUES EN REDES INALÁMBRICAS
Neftalí Rodríguez Gálvez
PALBRAS CLAVE: Red, inalámbrica, WEP, WPA, seguridad, 802.11, ataques, análisis
multivariante.
RESUMEN:
Hoy en día las redes inalámbricas han tomado gran relevancia en la vida cotidiana. Por
consiguiente, ha surgido la necesidad de ofrecer un elevado nivel de seguridad al usuario para
que la información transmitida a través de dichas redes se mantenga segura. En este proyecto,
se presenta el análisis del tráfico de una red doméstica para la detección de patrones de
distintos ataques gracias al análisis exploratorio de datos. Se busca así detectar que se está
produciendo un ataque a la red e incluso saber de qué tipo de ataque se trata.
KEYWORDS: Network, Wireless, WEP, WPA, security, 802.11, attacks, Multivariate analysis
ABSTRACT:
Nowadays, wireless networks are very used in our society. Due to this fact, we need security in
wireless transmissions. In order to offer this security, the traffic transmitted in a home network
is analyzed in this project. We should recognize that an attack against the private information
is being produced. The main objective is to capture the transmitted information in the network
and detect an attack using the exploratory data analysis.
6
ÍNDICE
CAPÍTULO I ………………………………….. 9
1. INTRODUCCIÓN Y OBJETIVOS ……………………………………… 11
2. PROTOCOLO 802.11 ……………………………………… 12
2.1. TÉCNICAS DE ACCESO AL MEDIO ………………………………………………… 13
2.2. ARQUITECTURAS DE RED ………………………………………………… 18
2.3. FUNCIONES DE COORDINACIÓN ………………………………………………… 20
2.3.1. FUNCIÓN DE COORDINACIÓN DISTRIBUIDA (DCF) ………………………. 21
2.3.2. FUNCIÓN DE COORDINACIÓN PUNTUAL (PCF) ………………………. 21
2.4. FORMATO TRAMA MAC ………………………………………………… 27
2.5. CRIPTOGRAFÍA ………………………………………………… 31
2.4.1. CÓDIGOS ……………………………………………………. 31
‐ Basados en clave simétrica ..…………………………………………………. 32
‐ Basados en clave asimétrica ..…………………………………………………. 33
2.4.2. CIFRADO ……………………………………………………. 33
2.4.3. RESUMEN DEL MENSAJE ……………………………………………………. 34
2.6. SEGURIDAD ………………………………………………… 35
2.6.1. WEP ……………………………………………………. 35
2.6.2. WPA Y WPA2 ……………………………………………………. 37
3. ATAQUES DE INTRUSIÓN ……………………………………… 41
3.1. DEBILIDADES DEL PROTOCOLO WEP ………………………………………………… 41
3.1.1. CONFIDENCIALIDAD ……………………………………………………. 42
3.1.2. INTEGRIDAD ……………………………………………………. 43
3.1.3. CONTROL DE ACCESO ……………………………………………………. 43
3.2. TIPOS DE ATAQUES …………………………………………………. 44
3.3. ATAQUES ACTIVOS …………………………………………………. 45
7
3.3.1. ATAQUE DE DEAUTENTICACIÓN …………………………………………………. 45
3.3.2. ATAQUE DE RE‐INYECCIÓN DE SOLICITUDES ARP …………………………. 45
3.3.3. HOMBRE EN EL MEDIO (MAN‐IN‐THE‐MIDDLE) …………………………… 46
3.3.4. ATAQUE DE REDIRECCIÓN IP ….…………………………………………………. 47
3.3.5. ATAQUE DE REACCIÓN ….……………………………….……………………………. 48
CAPÍTULO II …………………………………. 48
4. HERRAMIENTAS DE CAPTURA DE TRÁFICO ………………………… 51
4.1. WIRESHARK …..………………………………………………… 51
4.2. LIBPCAP …..………………………………………………… 53
4.3. SUITE AIRCRACK …..………………………………………………… 54
4.4. MDK3 …..………………………………………………… 55
4.5. WIFISLAX Y WIFIWAY …..………………………………………………… 55
4.6. MATLAB …..………………………………………………… 56
5. HERRAMIENTAS DE CLASIFICACIÓN: ANÁLISIS MULTIVARIANTE . . 57
5.1. ANÁLISIS EXPLORATORIO DE DATOS …..………………………………………………… 57
5.2. CLASIFICADORES …..………………………………………………… 59
5.2.1. ALGORITMOS DE CLASIFICACIÓN POR VECINDAD ….…………………. 60
5.2.2. ÁRBOLES DE CLASIFICACIÓN ….………………………………………………………. 62
5.2.3. ANÁLISIS DISCRIMINANTE LINEAL ….…………………………….…………. 63
5.2.4. ANÁLISIS DISCRIMINANTE POR MÍNIMOS CUADRADOS PARCIALES … 64
5.2.5. REDES BAYESIANAS ….…………………………………………………………………. 64
5.2.6. MÁQUINAS DE VECTORES SOPORTE ….……………………………………………. 66
6. DISEÑO DE LAS PRUEBAS ……………………………… 66
8
CAPÍTULO III ……………………………….. 73
7. ANÁLISIS DE RESULTADOS …………………………..…… 75
8. CONCLUSIONES Y TRABAJO FUTURO ……………………………… 106
BIBLIOGRAFÍA ……………………………… 108
ANEXO I: CAPTURA DE PAQUETES CON LIBPCAP ……………………………………………….. 109
ANEXO II: ANÁLISIS EXPLORATORIO DE DATOS ……………………………………………….. 115
ANEXO III: CÓDIGO MATLAB KNN ……………………………………………….. 121
ANEXO IV: CÓDIGO MATLAB ÁRBOLES DE CLASIFICACIÓN ……………………………………… 127
ANEXO V: CÓDIGO MATLAB PLS‐DA ……………………………………………….. 130
ANEXO VI: CÓDIGO MATLAB LDA Y QDA ……………………………………………….. 136
ANEXO VII: CÓDIGO MATLAB REDES BAYESIANAS ……………………………………………….. 141
11
1. INTRODUCCIÓN Y OBJETIVOS
Cuando se habla de sistemas de comunicación se puede diferenciar claramente entre sistemas
cableados o sistemas inalámbricos. Los sistemas cableados son más rápidos, fiables y seguros
que los inalámbricos, pero en contraposición, los sistemas inalámbricos ofrecen una
comodidad que no ofrecen los sistemas cableados.
Las redes cableadas ofrecen unas ventajas claras pero al mismo tiempo presentan unos
inconvenientes como el precio o la ausencia de movilidad. En un escenario en el que los
equipos son fijos y hay un pequeño número de componentes, el despliegue de una red
cableada no es muy costoso, pero esa no es la realidad hoy en día. En la actualidad se necesita
una libertad móvil que es impensable para una red cableada. Los ordenadores fijos se han
sustituido por ordenadores portátiles y ha aparecido una amplia gama de dispositivos móviles
que precisan de acceso a Internet o a la red correspondiente (teléfonos móviles inteligentes,
tabletas, etc.)
Para poder comenzar a desplegar redes inalámbricas el instituto europeo de estándares de
telecomunicaciones (ETSI ‐ The European Telecommunications Standards Institute) publica el
primer estándar para las redes inalámbricas de área local (WLANs ‐ Wireless Local Area
Networks) en 1995. El protocolo que realmente tiene éxito y es el que comienza a utilizarse de
forma global es el llamado 802.11. Este protocolo ha sido también la referencia para
desarrollos posteriores. El protocolo 802.11 presenta una serie de características a la hora de
modular la señal conservando la interoperabilidad, adaptando el esquema de modulación a la
estructura de red correspondiente, obteniendo así una optimización en la transmisión de
tramas. Sin embargo, el protocolo 802.11 no presenta protecciones de seguridad relativas a la
autenticación, cifrado o integridad de datos, lo que produce grandes problemas de seguridad.
Al mismo tiempo que se desarrolla el protocolo 802.11 surge la manera de acceder a la
información de forma ilícita. Para evitar este acceso no deseado aparece el protocolo de
privacidad equivalente cableada (WEP ‐ Wired Equivalent Privacy) , con el que se consigue
hacer frente a estos problemas. Este protocolo ha tenido que incorporar una serie de
algoritmos y de protecciones de clave ya que se probó su vulnerabilidad. El protocolo WEP es
actualmente utilizado en redes inalámbricas para la protección de la información, si bien es
cada vez más sustituido por protocolos más seguros como WPA, WPA2, etc.
La finalidad principal de este proyecto es comprobar que la seguridad en redes 802.11 no tiene
que restringirse a medidas preventivas de seguridad criptográfica, sino que un buen
complemento a dicha criptografía pueden ser las estrategias de detección. Para probar esto, se
selecciona un protocolo de criptografía débil, WEP, para ver la capacidad para mejorar su
seguridad sin incurrir en la complejidad y la carga computacional de un sistema de criptografía
como WPA2.
Para poder detectar ataques a este tipo de redes se utiliza el análisis exploratorio de datos,
basado en la toma de observaciones de determinadas variables. Una vez se tiene el grupo de
observaciones, se realiza un análisis para distinguir si las variables medidas tienen información
de discriminación. Una vez realizado este análisis se procede al entrenamiento de los
12
clasificadores preparándolos así para la clasificación de nuevas observaciones. El análisis
exploratorio de datos es una pieza importante en el análisis de las variables ya que si no se
realiza, obteniendo variables que realmente tengan información discriminatoria, se puede
llegar a resultados erróneos.
2. PROTOCOLO 802.11
El instituto de ingenieros eléctricos y electrónicos (IEEE ‐ Institute of Electrical and Electronic
Engineers) consiste en una gran sociedad profesional sin ánimo de lucro interesada en la
investigación y el desarrollo tecnológico. El proyecto 802 fue iniciado en 1980 con el objetivo
de fijar unos estándares para la tecnología en redes de área local LAN (Local Area Networks) al
ver el incremento en el uso de redes inalámbricas. Estos estándares están enfocados a definir
las reglas para las capas física y de enlace del modelo de interconexión de sistemas abiertos
(OSI – Open System Interconnection).
La capa física se encarga de la definición del medio físico por el que se transmite la información
(ya sea guiado o no guiado) y la forma en la que se transmite dicha información (codificación,
modulación, etc.). Por otro lado la capa de enlace se encarga del control de flujo, detección de
errores, el acceso al medio, topología de red, la distribución ordenada de las tramas y el
direccionamiento físico. El protocolo 802 hace una subdivisión de la capa de enlace en otras
dos que son la de control de enlace lógico (LLC – Logical Link Control) y la del control de acceso
al medio (MAC – Medium Access Control). Por un lado LLC funciona como interfaz entre la
capa MAC y el resto de capas superiores, realizando control de flujo de errores. Por otro lado,
la subcapa MAC está más orientada a la gestión de la capa física. A cada uno de los dispositivos
de la red se le asigna una dirección física (MAC) con la que pueden ser identificados de forma
unívoca dentro de la red.
Cuando más de un equipo comparte un mismo medio para realizar las transmisiones, se puede
producir el efecto de colisión. Una colisión se produce cuando se encuentran dos paquetes en
el medio y la información se pierde o deteriora. Para evitar este efecto indeseable aparecen los
protocolos multi‐acceso que básicamente se dividen en dos técnicas principales: basadas en
contención y libres de colisión o planificadas. Las técnicas planificadas se basan en un
controlador central que permite el acceso a la comunicación basándose en una serie de
turnos. En el caso de las tecnologías basadas en contención, los usuarios pueden transmitir
siempre que tengan algo que enviar usando una serie de métodos para evitar colisiones.
En primer lugar se presentan las técnicas de acceso al medio por contención y más tarde se
presentan las funciones de coordinación utilizadas dentro de una red inalámbrica.
El objetivo principal es el establecimiento de un orden o control para la transmisión de
información en una red. De esta forma a lo largo del tiempo se han sucedido nuevas técnicas.
El propio desarrollo de las redes ha producido que vayan apareciendo nuevas técnicas de
forma que sean ajustables a las necesidades presentadas.
13
2.1. TÉCNICAS DE ACCESO AL MEDIO
La primera técnica de contención que apareció fue llamada ALOHA y fue desarrollada por la
universidad de Hawaii en 1970. Esta técnica consiste en la transmisión de información cuando
haya algo que enviar. Cada nodo transmite cuando tiene algo que transmitir sin tener en
cuenta la información que ya esté en la red. Al haber colisiones, se produce un
desaprovechamiento del ancho de banda del canal debido a que la información transmitida no
es correcta y debe retransmitirse.
Para poder analizar lo que ocurre en una red que hace uso de ALOHA puro se utiliza una
distribución de Poisson para representar el número de intentos de transmisión. Se define el
intervalo de vulnerabilidad como el tiempo que garantiza que una trama no colisiona con otra.
De esta forma la expresión para la probabilidad de que se produzca colisión es:
!
Teniendo en cuenta que k es el número de colisiones y que μ es el número medio de intentos
de transmisión durante el intervalo de vulnerabilidad. Si se asigna k=0 (lo que se
correspondería con la ausencia de colisiones), se obtiene una expresión para la eficiencia del
sistema (S), expresada como el número de tramas transmitidas por unidad de tiempo de
trama.
0
Observando que G es el número de intentos de transmisión por parte de todas las estaciones
por unidad de tiempo de trama. En el caso de ALOHA, el intervalo de vulnerabilidad es 2X,
siendo X el tiempo de trama. En la figura 1 se puede observar de dónde se obtiene el máximo
de 2X. Si se supone que una trama se transmite en un tiempo X, en el caso de que dos tramas
colisionen, el medio queda desaprovechado el tiempo desde que se inicia la transmisión de
una de las tramas hasta que termina la transmisión de la otra de las tramas involucrada en la
colisión. Pueden colisionar en instantes anteriores o posteriores pero el caso más desfavorable
sería que colisionasen cuando se está terminando de transmitir una de las tramas, de forma
que el tiempo de desaprovechamiento del canal será el tiempo de transmisión de una de las
tramas más el tiempo de transmisión de la otra: X + X = 2X. Éste es el intervalo de
vulnerabilidad. Gracias a esto, se puede aproximar μ=2G, ya que será el número medio de
intentos en 2X. Por lo tanto:
Como mejora a esta técnica aparece ALOHA ranurado, que se basa en que las estaciones no
pueden transmitir siempre que tengan algo que transmitir, sino en instantes determinados de
tiempo. De esta forma, una estación no podrá transmitir cuando otra lo esté haciendo. Las
colisiones serán producidas cuando dos estaciones comiencen a transmitir al mismo tiempo. El
intervalo de vulnerabilidad se reduce a la mitad: X, y en este caso la eficiencia viene dada por
la siguiente expresión:
14
Figura 1: Comparación entre el intervalo de vulnerabilidad para aloha puro y ranurado.
Con la técnica ALOHA ranurado se mejora la eficiencia del sistema pero ésta sigue siendo
reducida.
Una mejora tanto para aloha puro como ranurado sería que las estaciones estuvieran dotadas
de la capacidad necesaria para detectar la existencia de transmisiones en el medio. Esta nueva
idea es lo que se introduce con las técnicas de acceso múltiple con sondeo de portadora
(CSMA: Carrier Sense Multiple Acces). De esta forma, una estación procederá a transmitir si
detecta que no hay otra estación que ha comenzado antes a transmitir.
Las técnicas CSMA tienen tres variantes principales que son:
‐ 1‐persistente.
‐ no‐persistente.
‐ p‐persistente.
CSMA 1‐persistente consiste en la transmisión por parte de la estación en caso de que detecte
que el canal se encuentra libre. Si el canal se encuentra ocupado, se mantiene a la escucha
hasta que encuentra el canal libre.
Por otro lado, en la variante no‐persistente si el canal se encuentra ocupado, la estación
espera un tiempo aleatorio antes de volver a escuchar el canal.
15
Finalmente, CSMA p‐persistente consiste en transmitir con una probabilidad p si el canal se
encuentra libre. De esta forma decide transmitir en la siguiente ranura temporal con una
probabilidad de 1‐p. Si el canal se encuentra ocupado se queda a la escucha hasta que éste
esté libre.
Gracias a la capacidad de las estaciones de escuchar el canal, la eficiencia de las técnicas CSMA
es superior a las técnicas aloha. Aun así se sigue desaprovechando el canal debido a que al
producirse una colisión, las estaciones no detectan que se ha producido y siguen
transmitiendo. De esta forma se desaprovecha todo ese tiempo.
La eficiencia de la técnica 1‐persistente es la más baja ya que se producirán mucha cantidad de
colisiones al transmitir todas cuando ven el canal libre. Con no‐persistente se logra repartir
estos intentos de transmisión a lo largo del tiempo lo que produce una mejora en la eficiencia.
Finalmente la eficiencia del método p‐persistente dependerá del valor de p, pero permite que
realizando una buena elección del valor p se consiga una mayor distribución temporal de los
intentos de transmisión con lo que se consigue que haya menos colisiones.
Con el objetivo de solventar el problema del desaprovechamiento de tiempo al no poder
detectar colisiones cuando son producidas aparece la técnica CSMA con detección de colisión
(CSMA/CD, CSMA with Collision Detection). De esta forma, las estaciones son dotadas de la
capacidad de detectar colisiones y poder parar la transmisión en cuanto una colisión se
produzca.
Para el análisis de la eficiencia de esta técnica es necesario definir el concepto intervalo de
contención (τ) que será el tiempo máximo que tarda una estación en darse cuenta de que se
ha producido una colisión. Este tiempo será 2∙tp, siendo tp el tiempo de propagación que
tardan las señales en viajar entre las dos estaciones más alejadas. Suponiendo el peor de los
casos con dos estaciones A y B que desean transmitir. La estación A comienza la transmisión
pero esta tarda un tiempo tp en llegar a B, por lo que B no sabe que A ha comenzado a
transmitir y comienza también a transmitir.
De esta forma, al pasar un tiempo tp detecta la colisión y detiene la transmisión, sin embargo,
A no sabe que se ha producido la colisión y continuará transmitiendo hasta que vuelve a pasar
un tiempo tp. De esta forma tenemos una cota superior para ese intervalo de contención.
16
Figura 2: Transmisión en CSMA/CD.
En la figura 2 se puede observar un esquema de los eventos principales producidos con
CSMA/CD. Gracias a este esquema aclaratorio la eficiencia se puede estimar como sigue:
2
Donde R es el número medio de intervalos de contención antes de conseguir transmitir con
éxito la trama, ttrama el tiempo de transmisión y tp el tiempo de propagación del medio.
Para poder calcular esto será necesaria una expresión para R por lo que se define la
probabilidad de una transmisión con éxito como Pexito. Teniendo en cuenta que N es el número
de estaciones en el medio y que P es la probabilidad de transmisión de una estación en un
momento dado:
é 11
Teniendo la probabilidad Péxito ya se puede estimar el valor esperado del número de intervalos
de contención:
é 1 é
1 é
é
Con esto se simplifica la expresión de la eficiencia:
1
1 21 é
é
Definiendo a como tp/ttrama.
17
CSMA/CD presenta unas mejoras evidentes frente a CSMA. No obstante, su aplicación a
medios de comunicación inalámbricos no es adecuada debido a una serie de problemas a
tener en cuenta que pueden provocar un desaprovechamiento del medio: el problema del
nodo oculto y el del nodo expuesto.
Problema del nodo oculto: Para analizar este efecto se toma como referencia una red formada
por un punto de acceso y dos estaciones inalámbricas (figura 3). En la imagen se observan las
estaciones, el punto de acceso y el rango de cobertura que tiene cada dispositivo. En este caso
la estación A puede intercambiar información con el punto de acceso y la estación C puede
hacer lo mismo. El problema se produce cuando la estación A y C escuchan el canal al mismo
tiempo y lo detectan libre. Las dos estaciones comienzan a transmitir pero no pueden detectar
las colisiones debido a la cobertura de cada una de ellas. Este efecto es el llamado problema
del nodo oculto ya que las estaciones A y C no se pueden detectar entre ellas. Esto produce en
muchos casos un desaprovechamiento indeseable del canal.
Figura 3: Problema del nodo oculto.
Problema del nodo expuesto: En este caso se utiliza el escenario mostrado en la figura 4. En
este caso se presentan las estaciones A, B y C y por otro lado dos puntos de acceso (PA1 y
PA2). Dentro de la cobertura de la estación B se encuentran tanto PA1 como PA2, de esta
forma, si B quiere transmitir información a PA1, PA2 detectará el medio ocupado y si desea
transmitir información a C no lo hará. Este efecto es indeseable ya que no habría problemas en
la comunicación si se enviaran ambas informaciones.
18
Figura 4: Problema del nodo expuesto.
Para combatir estos problemas, surge la técnica que finalmente es la utilizada por el protocolo
802.11 llamada “acceso múltiple por detección de portadora con evasión de colisiones”
(CSMA/CA – Collision Avoidance). En este caso las estaciones que deseen transmitir tienen
primero que avisar su intención y recibir por parte del punto de acceso el permiso de
realizarlo. En caso contrario tienen que esperar.
2.2. ARQUITECTURAS DE RED
El estándar 802.11 define tres tipos de arquitecturas de red que se presentan a continuación:
BSS – Basic Service Set Conjunto de servicio básico: Consiste en el establecimiento
de un punto central en la red llamado punto de acceso a través del cual se comunican
los distintos dispositivos inalámbricos de la red (Figura 5).
Figura 5: BSS.
19
IBSS – Independent Basic Service Set Conjunto de servicios básico independiente:
En este caso los equipos de la red se comunican entre sí sin necesidad de
intermediario, en forma de ad‐hoc (Figura 6).
Figura 6: IBSS / ad‐hoc.
ESS – Extended Service Set Conjunto de servicios extendido: Está formado por un
conjunto de BSS interconectados entre sí con un sistema de distribución.
Figura 7: ESS.
El estándar 802.11 trabaja con el modo ad‐hoc (IBSS) o en modo infraestructura (BSS/ESS). O
bien se transmitirá la información directamente entre estaciones, o bien a través de un punto
de acceso. En caso de realizarlo a través de un punto de acceso (BSS/ESS) será necesario llevar
a cabo un proceso de asociación con el punto de acceso para un intercambio posterior de
información. Este proceso se divide en dos: uno de autenticación y otro de asociación. Debido
a estos dos subprocesos, se crean tres estados posibles para una estación dentro de una red
inalámbrica:
Estado 1: Sin autenticación y sin asociación: La estación no está conectada a la red
inalámbrica.
Estado 2: Con autenticación pero sin asociación: La estación desea hacer uso de la red
pero todavía no ha terminado el proceso de asociación por completo.
20
Estado 3: Con autenticación y con asociación: El cliente ha sido autenticado utilizando
una clave correcta, ha sido asociado y puede hacer uso de la red.
En primer lugar la estación se encuentra en el estado 1. Para salir de este estado tiene que
realizar el proceso de autenticación con el punto de acceso, pasando así al estado 2. Si en el
estado 2 se produce una notificación de de‐autenticación, la estación vuelve al estado 1. Sin
embargo, si se produce un proceso de asociación o de re‐asociación, la estación pasa al estado
3 en el que puede comunicarse con el punto de acceso intercambiando la información
necesaria. Una vez la estación está en el estado 3, si se produce una notificación de des‐
asociación, se pasa al estado 2 y si lo que se produce es una notificación de des‐autenticación,
se pasa al estado 1. Esta estructura es de gran relevancia a la hora de realizar el estudio de los
ataques posteriores, teniendo claro que no es lo mismo la autenticación que la asociación. Un
diagrama de bloques aclarativo se presenta en la figura 8.
Figura 8: Estados de una estación para comunicación en una red infraestructura.
2.3. FUNCIONES DE COORDINACIÓN
En el estándar 802.11 se establecen las siguientes funciones de coordinación para la gestión de
una red:
DCF – Distributed Coordination Function. Función de coordinación distribuida.
PCF – Point Coordination Function. Función de coordinación puntual.
21
2.3.1 FUNCIÓN DE COORDINACIÓN DISTRIBUIDA (DCF)
Esta función es un componente indispensable en el protocolo 802.11 ya que no es opcional a
diferencia de la función PCF. Establece el envío de mensajes para la coordinación de los envíos
de información dentro de la red. Con la función de coordinación distribuida no existe una
garantía de calidad de servicio ya que no existe una pre‐asignación de recursos, ni plazos
conocidos ni garantía de recepción correcta de la información.
Esta función puede ser dividida en cuatro partes principales que se abordarán a continuación
que son:
Detección de portadora: ¿Cómo se detecta que se está produciendo una transmisión
de información?
Métodos de transmisión: ¿Qué hacer cuando se pretende transmitir? ¿Qué mensajes
enviar?
Espaciado entre tramas: ¿Tengo que respetar algún tiempo de espera?
Fragmentación.
DETECCIÓN DE PORTADORA
Lo primero que tiene que ser especificado es cómo llevar a cabo la detección de la portadora.
802.11 presenta dos tipos distintos de detección de portadora:
Detección de portadora física (PCS – Physical Carrier Sensing).
Detección de portadora virtual (VCS – Virtual Carrier Sensing).
La detección de portadora física se realiza escuchando el canal durante todo el tiempo para ver
si éste se encuentra ocupado o libre. Esto se conoce como “evaluación de la libertad del canal”
(CCA – Clear Channel Assessment ). La CCA establece que la estación no puede transmitir hasta
que el canal se encuentre libre. Una vez especificada la forma de detección física, será
necesario establecer de forma virtual que el medio se encuentra ocupado, y esto se lleva a
cabo gracias a un nuevo concepto llamado “vector de asignación de red” (NAV – Network
Allocation Vector) que contiene el tiempo estimado que durará la transmisión por parte de la
estación emisora, por lo que será el tiempo que estará ocupado el medio. De esta forma las
estaciones no intentarán transmitir durante este tiempo (aunque perciban libre el medio).
Sería una forma de “reservar” el medio durante un tiempo determinado.
Hay que tener en cuenta que tanto la detección de portadora física como la virtual se
encuentran en funcionamiento de forma simultánea. Cada una trabaja en una capa de defensa
por lo que si una falla, se espera que la otra lleve a cabo la detección con éxito. Gracias a esta
doble defensa se refuerza la protección contra colisiones.
22
MÉTODOS DE TRANSMISIÓN
Una vez queda definido cómo realizar la detección de portadora, aparece el problema de cómo
transmitir y qué transmitir. 802.11 establece dos métodos de transmisión: básico y método
basado en intercambio de mensajes RTS/CTS.
En el caso del método básico se considera una estación que tiene la intención de transmitir
información al punto de acceso. Al detectar el medio libre, envía una trama de datos
conteniendo el temporizador NAV para reservar la ocupación del canal. A este mensaje
responde el punto de acceso con un mensaje ACK (Acknowledgement) con el que confirma la
correcta recepción del mensaje. Este intercambio de mensajes se muestra en la figura 9.
Figura 9: Entorno DCF.
El segundo método de transmisión consiste en el esquema llamado “4‐handshake”, que
consiste en un método de evasión de colisiones y está basado en realizar primero un
intercambio de mensajes RTS/CTS con el temporizador NAV. Este procedimiento consiste en el
cálculo del tiempo previsto de ocupación del canal por parte de una estación y la siguiente
solicitud mediante un mensaje RTS (Request To Send) de la intención de transmitir. Los
mensajes RTS son cortos con el objetivo de que si se produce una colisión, no esté el medio
ocupado de forma no efectiva mucho tiempo. Si el punto de acceso está disponible para recibir
los datos, responde con un mensaje CTS (Clear To Send). Ese mensaje es recibido por todas las
estaciones, de esta forma el resto de estaciones sabrán que el medio está ocupado y esperarán
a que termine la transmisión. Un esquema del intercambio de mensajes se muestra en la figura
10.
23
Figura 10: Entorno DCF.
ESPACIO ENTRE TRAMAS
En una red en la que se intercambia información como puede ser una red inalámbrica como la
tratada en este trabajo, las tramas enviadas serán de distintos tamaños y distinto nivel de
importancia. Para poder establecer un orden de envíos y prioridades, aparece un tiempo entre
tramas llamado “Espacio entre tramas” (IFS – InterFrame Space). Se utilizan cuatro tipos
diferentes de IFS que se especifican a continuación:
SIFS – Short InterFrame Space “Espacio corto entre tramas”. Este tiempo es
utilizado cuando se quiere llevar a cabo la transmisión de paquetes cortos y de alta
prioridad, como por ejemplo, paquetes ACK o CTS.
PIFS – Pcf InterFrame Space “Espacio entre tramas PCF”. Establece el tiempo entre
tramas correspondientes a la función de coordinación puntual (PCF).
DIFS – Dcf InterFrame Space “Espacio entre tramas DCF”. Este tiempo es el utilizado
en el caso de tener la intención de transmitir tramas de datos utilizando la función de
coordinación distribuida (DCF).
EIFS – Extended InterFrame Space “Espacio ampliado entre tramas”. Este tiempo es
el utilizado tras errores de transmisión.
Los IFSs se ordenan de menor a mayor prioridad: SIFS < PIFS < DIFS < EIFS. Los valores de estos
tiempos son fijos y utilizados según el caso del que se trate la transmisión. La duración de éstos
depende de la velocidad de la red utilizada. De esta forma ocurrirá que habrá paquetes que
serán transmitidos antes que otros dependiendo de su prioridad. Aparece también un tiempo
de contención llamado “Backoff time” junto con una ventana de contención. Este tiempo de
contención selecciona de forma aleatoria su valor entre los valores mínimo y máximo para la
ventana de contención. Las estaciones a transmitir deberán esperar ese tiempo aleatorio de
Backoff después de esperar el temporizador DIFS.
24
De esta forma, el diagrama de un intercambio de mensajes con dos estaciones y el punto de
acceso sobre la línea del tiempo quedaría como se muestra en la figura 11:
Figura 11: Intercambio DCF, 4‐handshake con temporizadores.
En el momento que una estación detecta el medio libre, se selecciona un valor para el
intervalo de Backoff entre 0 y el valor máximo de la ventana de contención y comienza la
cuenta atrás. La cuenta atrás se suspende en caso de ocuparse el medio de forma que la
estación volverá a quedarse en espera, reanudando la cuenta atrás en ese punto cuando el
canal vuelve a quedar vacío. Cuando la cuenta llega a 0, se envía el paquete. Si se produce una
colisión, se duplica el tamaño máximo de la ventana de contención y se repite el proceso. De
esta forma si dos estaciones detectan al mismo tiempo el medio libre, esperarán un tiempo de
Backoff distinto, por lo que en cuanto una de ellas comience la transmisión la otra parará su
tiempo de Backoff evitando así la colisión de paquetes RTS/CTS como se muestra en la figura
12:
25
Figura 12: Intervalos de Backoff.
FRAGMENTACIÓN
Como ya se ha mostrado anteriormente, las transmisiones inalámbricas son poco fiables, por
lo que un error en la transmisión de un contenido demasiado extenso conllevaría una pérdida
de tiempo inadecuada para la red. En el caso de tener la intención de transmitir una unidad de
datos de servicios MAC (MSDU – MAC Service Data Unit) de excesivo tamaño, será necesario
proceder a una fragmentación en unidades de datos de protocolo MAC (MPDU – MAC
Protocolo Data Unit).
El contenido de una MSDU se divide en fragmentos. A cada fragmento se le añade una
cabecera MAC y el CRC con lo que está listo para ser enviado (MPDU). Una MSDU se ha
enviado correctamente cuando todos los fragmentos correspondientes hayan sido enviados y
confirmados. De esta forma se envía un paquete ACK para la confirmación de recepción de un
fragmento. También se añade un temporizador para los envíos de los fragmentos, de forma
que se esperará un tiempo para recibir el ACK, en caso de no recibirlo se reenvía el fragmento.
También existe un límite para retransmisiones, que al ser superado, se cancela el envío de la
MSDU dejando el medio libre.
Para ejemplificar todas las partes de la función coordinada distribuida presentadas en este
documento, se muestra en la figura 13 un diagrama en el que se muestran el intercambio de
información entre una estación y el punto de acceso. En este ejemplo la estación fragmenta la
MSDU en dos fragmentos que envía (recibiendo el correspondiente ACK). Se hace uso de el
método de transmisión basado en el intercambio de paquetes RTS/CTS.
26
Figura 13: Intercambio de mensajes con fragmentación.
2.3.2. FUNCIÓN DE COORDINACIÓN PUNTUAL (PCF)
Además de la función DCF, el estándar para redes inalámbricas define adicionalmente un
método de acceso al medio opcional conocido como “función de coordinación puntual” (PCF –
Point Coordination Function). Este método es implementado sobre la arquitectura DCF y está
basado en el funcionamiento de ésta. La diferencia principal reside en que la DCF está basada
en contención y la PCF es una técnica de acceso al medio planificada.
La función PCF se basa en centralizar las comunicaciones dentro de la red definiendo un punto
como el punto de coordinación (PC – Point Coordinator), que se encarga de coordinar el
acceso al medio inalámbrico. Este modo de gestión tiene una prioridad más alta que el DCF, ya
que no será necesario esperar el tiempo DIFS para realizar una transmisión. Existe un
protocolo llamado “MAC inalámbrico de fundamento distribuido” (DFWMAC – Distributed
Foundation Wireless Media Access Control) que está basado en la división del tiempo en
períodos llamados supertramas, donde se produce alternancia de períodos de contención (CP
– Contention Period) y períodos libres de contención (CFP – Contention Free Period). Una
super‐trama está formada por un período CFP seguido de un período CP y la gestión es la
siguiente: En los períodos libres de contención se hace uso de PCF mientras que en los
períodos de contención se utiliza DCF.
El principio de una super‐trama se indica con una trama de alerta (beacon) que consisten en
un mensaje cuyo objetivo es la sincronización de los relojes locales de las estaciones. De esta
forma, el punto de coordinación es el encargado de enviar los mensajes “beacon” con los que
inicia un período CFP en el que el punto de coordinación pregunta a una estación si tiene
intención de transmitir.
En caso de que, pasado un tiempo PIFS no se haya recibido respuesta, se pregunta a otra
estación o se finaliza el período CFP. De esta forma se consigue que el canal no se mantenga
desocupado durante un tiempo superior a PIFS, pero aún así se pueden producir colisiones si,
por ejemplo, una estación no recibe la señal de alerta. En este caso no sabrá que se está
trabajando en modo PCF y creerá que se está trabajando en modo DCF, con lo que enviará
información en intervalos de tiempo que no le corresponden.
27
2.4. FORMATO TRAMA MAC:
Uno de los aspectos más importantes de este estudio consiste en conocer la estructura real de
los paquetes que van a ser capturados en una red inalámbrica para su posterior
procesamiento. Con este objetivo se muestra a continuación el formato de las tramas MAC con
una explicación de sus campos con la meta de entender cuándo y cómo son utilizados.
Las tramas que pueden aparecer en una red inalámbrica pueden ser de 3 tipos distintos:
Tramas de administración: Tramas relacionadas con el proceso de asociación y
autenticación de las estaciones y cualquier tipo de señalización necesaria en la red
(beacons).
Tramas de datos.
Tramas de control: Son las generadas por las funciones de coordinación y por las
confirmaciones (RTS, CTS, ACK, etc.).
Las tramas MAC están formadas por 3 campos principales que son: la cabecera, el cuerpo y un
campo llamado FCS, obteniendo así la trama mostrada en la figura 14. El campo FCS consiste
en 4 bytes para suma de comprobación (checksum). El cuerpo del mensaje consiste en la
información procedente de capas superiores correspondiente con el contenido de la
comunicación y podrá estar protegido con seguridad o no. En caso de que no lo esté se puede
analizar su contenido en texto plano y en caso de que lo esté, será necesario descifrarlo para
poder ver su contenido. El campo que va a ser analizado a fondo será la cabecera MAC, ya que
su información es visible sin necesidad de descifrarlo y se puede extraer información de gran
relevancia de dicha cabecera.
Figura 14: Estructura principal de una trama MAC.
La cabecera MAC está formada por una serie de campos que se muestran en la figura 15. El
campo de control de trama se detalla a continuación bit a bit. El resto de campos de la
cabecera son los siguientes:
Duración: Tiempo para transmitir la trama y recibir la confirmación (ACK). Este tiempo
es el que define el NAV especificado anteriormente.
Direcciones 1, 2, 3 y 4: Están formadas por direcciones físicas de 48 bits. El valor de
éstas depende del origen y destino del paquete. Las asignaciones específicas se
explican a continuación.
El campo de control de secuencia se utiliza para la identificación y orden de los
fragmentos MPDUs correspondientes a una MSDU.
28
Figura 15: Cabecera de trama MAC.
El campo de control de trama se divide en los campos mostrados en la figura 16, distinguiendo
entre:
V 2 bits de versión, que serán generalmente 0. En caso de no serlo, no se está
siguiendo el estándar, por lo que se podría estar utilizando un estándar de un
fabricante concreto.
Tipo Se indica el tipo de trama que es distinguiendo entre los tres presentados
anteriormente: administración, datos o control. El significado de los campos de tipo se
encuentra en la tabla 1.
Subtipo Concreta dentro del tipo, cuál es la función concreta de la trama. El
significado de los valores de los subtipos más importantes se muestra en la tabla 1.
toDs Si tiene valor 1 indica que la trama viene del sistema de distribución (caso
contrario 0). Los valores con más detalle se encuentran en la tabla 2.
FromDs Si tiene valor 1 indica que la trama va destinada al sistema de distribución
(caso contrario 0). Los valores con más detalle se encuentran en la tabla 2.
MF Más fragmentos: En caso de que el paquete haya sido fragmentado, todos los
fragmentos llevan este campo a 1 excepto el último.
Re Se pone a 1 para indicar que se está produciendo una retransmisión, en caso
contrario su valor es 0.
Pot Con el valor 1 indica que el dispositivo que envía la trama se encuentra
trabajando en un modo de ahorro de energía (en caso contrario 0).
MD Más datos: En caso de estar trabajando en modo de ahorro de energía, este bit
a 1 indica que el punto de acceso tiene tramas almacenadas para ser enviadas.
W WEP: Si este bit se encuentra a 1, indica que el contenido del cuerpo de la trama
está cifrado.
O Orden: En caso de estar a 1, las tramas siguen un orden estricto.
Figura 16: Campo control de trama.
29
TIPO Bits (3‐2)
Descripción Subtipo Bits (7‐6‐5‐4)
Descripción
00 Administración 0000 Solicitud de asociación
00 Administración 0001 Respuesta asociación
00 Administración 0010 Solicitud re‐asociación
00 Administración 1010 Disociación
00 Administración 1011 Autenticación
00 Administración 1100 Des‐autenticación
01 Control 1011 RTS
01 Control 1100 CTS
01 Control 1101 ACK
10 Datos 0000 Datos
Tabla 1: Tipos y subtipos de trama MAC.
Valor del campo “toDs”
Valor del campo “fromDs”
Descripción
0 0 Comunicación directa entre estaciones: Entorno ad‐hoc.
0 1 Comunicación desde el punto de acceso a las estaciones (desde el sistema de distribución).
1 0 Comunicación desde las estaciones al punto de acceso (hacia el sistema de distribución).
1 1 Comunicación entre puntos de acceso.
Tabla 2: Interpretación de los valores de los campos “toDs” y “fromDs”.
Un punto importante a tener en cuenta a la hora de interpretar la información recibida es que
la lectura se debe de hacer de derecha a izquierda y por parejas. Los valores se representan
como números hexadecimales, un ejemplo podría ser “40 42”. La interpretación se obtendría
como se muestra en la figura 17.
30
Figura 17: Interpretación de valores hexadecimales.
Según se muestra en la figura 17, la interpretación sería la siguiente: Se trata de una trama de
administración, concretamente una solicitud de re‐asociación. Es una solicitud enviada por
parte de una estación hacia un punto de acceso. O bien es el último fragmento de una serie de
envíos, o bien no está fragmentado. No se trata de una re‐transmisión ni se trabaja en modo
ahorro de potencia. Finalmente el contenido se encuentra cifrado y no sigue un orden estricto.
Finalmente, los campos de direcciones MAC necesitan una especial atención, ya que
dependiendo de la trama las direcciones se corresponden con unos dispositivos u otros. En
primer lugar, el campo de dirección 4 es opcional y habrá casos que no contendrá nada. Los
casos posibles son los siguientes:
En una comunicación modo ad‐hoc (IBSS) , la comunicación se realiza directamente
entre estaciones sin tener que pasar por el punto de acceso, se indica con los bits
“toDS = 0” y “FromDS=0”. En este caso el orden es el siguiente:
o Dirección 1: Dirección MAC destino a donde tiene que llegar la información.
o Dirección 2: Dirección MAC origen de donde sale la información.
o Dirección 3: BSSID (Número identificativo de la red).
o Dirección 4: No se usa.
En el caso de realizar la comunicación en modo infraestructura desde una estación
(toDS = 1, fromDS = 0) el orden es el siguiente:
o Dirección 1: BSSID.
o Dirección 2: Origen.
o Dirección 3: Destino.
o Dirección 4: No se usa.
31
Para una comunicación en modo infraestructura desde un punto de acceso (toDS = 0,
fromDS = 1) el orden es el siguiente:
o Dirección 1: Destino.
o Dirección 2: BSSID.
o Dirección 3: Origen.
o Dirección 4: No se usa.
Cuando la comunicación se realiza entre estaciones móviles correspondientes a
distintas BSS (toDS = 1, fromDS = 1):
o Dirección 1: BSSID origen.
o Dirección 2: BSSID destino.
o Dirección 3: Destino.
o Dirección 4: Origen.
2.5. CRIPTOGRAFÍA
En las redes cableadas la información se transmite a través de enlaces cableados y no es
necesario prestar tanta atención a la criptografía. Sin embargo, las redes inalámbricas se basan
en difusión a través del aire, por lo que será necesario prestar especial atención a la integridad,
confidencialidad y autenticación del mensaje. En esta sección se va a presentar en primer lugar
los tipos de códigos existentes, cómo se realiza el cifrado y, finalmente, se presentan métodos
de comprobación de integridad de los mensajes.
Dos importantes términos en este ámbito son: “texto plano” y “texto cifrado”. Los mensajes
que pueden ser entendidos al ser leídos son los llamados “texto plano”. El cifrado consiste en
un método en el que el texto plano es convertido en una correspondiente forma ininteligible
llamada texto cifrado, que podrá ser enviado a través de un medio inseguro. El proceso de
conversión del texto cifrado de nuevo a texto plano es llamado descifrado.
2.5.1. CÓDIGOS
Los códigos se pueden clasificar en dos grandes categorías que son los códigos de clave
simétrica y los de clave asimétrica. La diferencia principal entre estos dos tipos se basa en las
claves utilizadas a la hora de realizar el cifrado y el descifrado de datos.
En el caso de códigos de clave simétrica se utiliza una única clave compartida secreta tanto
para el cifrado como para el descifrado. Sin embargo los códigos de clave asimétrica hacen uso
de dos claves: una de ellas es para el cifrado y otra para el descifrado de la información. Las
dos claves están matemáticamente relacionadas y una de ellas se define como la clave pública
y la otra como la clave privada. En la figura 18 se muestra de forma gráfica la división de
códigos.
32
Figura 18: Criptografía.
BASADOS EN CLAVE SIMÉTRICA
Los códigos basados en clave simétrica pueden ser de dos tipos distintos: basados en cifrado
de flujo o en cifrado de bloques.
En el cifrado de flujo, los datos son cifrados dígito a dígito. En este caso se hace uso de una
clave de longitud menor que el tamaño del mensaje de texto plano. Con esta clave se obtiene
un flujo de clave pseudo‐aleatorio que es utilizado posteriormente junto con el texto plano
aplicando una operación lógica XOR. Como resultado se obtiene el texto cifrado.
Por otro lado, el cifrado de bloques procesa grupos de bits de tamaño fijo. Un bloque de
símbolos de texto plano con tamaño m>1 se cifran para crear un bloque de texto cifrado del
mismo tamaño. Como consecuencia, al estar trabajando con bloques de tamaño fijo m, la clave
tendrá también tamaño m. En el caso de ser necesario el cifrado de mensajes de tamaño
superior a m, se puede hacer uso de varios modos de operación desarrollados . El modo de
operación más simple es el llamado “Libro de código electrónico” (ECB ‐ Electronic CodeBook).
El mensaje de texto plano se divide en bloques de n bits y se cifran con una clave de ese
tamaño. El problema de este método aparece cuando se hace uso de bloques repetidos de
texto plano de n bits a lo largo del mensaje. De esta forma habrá réplicas de bloques de texto
cifrado. La ventaja del cifrado de flujo frente al de bloque reside en que el de flujo puede cifrar
datos de varios tamaños mientras que el de bloque está limitado a un tamaño fijo.
El principal problema de la criptografía con uso de clave simétrica es que el intercambio de la
clave compartida tiene que realizarse a través de un modo seguro de transmisión. Pero no
siempre se puede asegurar la confidencialidad cuando se realizan envíos de la clave, por lo que
la seguridad de la transmisión se vuelve vulnerable a ataques. Para evitar este problema
aparece la criptografía basada en clave asimétrica.
33
BASADOS EN CLAVE ASIMÉTRICA
En este caso, como ya se ha comentado anteriormente, se hace uso de un par de claves: una
pública (que suele estar disponible) y otra privada (que se mantiene secreta). Si se hace uso de
este tipo de códigos con fines de confidencialidad, la clave pública es usada para cifrar el
mensaje y la privada para descifrarlo. En el caso de autentificación, la clave privada es usada
para cifrar el mensaje y la pública para descifrarlo, lo que quiere decir que cualquiera que
tenga la clave pública puede descifrar el mensaje.
Una de las primeras aplicaciones para los códigos basados en clave asimétrica es la utilización
conjunta de éstos con códigos de clave simétrica. Las claves simétricas se cifran con una clave
pública de manera que pueden ser transmitidas de forma segura a la parte con la clave privada
asociada.
Otra aplicación para las claves asimétricas es las firmas y certificados digitales. En el caso de las
firmas digitales se hace uso de tres algoritmos. Uno de ellos realiza la generación de una clave
pública y una correspondiente clave privada de forma aleatoria. Un segundo algoritmo se
encarga de “firmar” los mensajes haciendo uso de la clave privada. Finalmente un algoritmo
verificador de firma será el encargado de recibir los mensajes, y con la firma y la clave pública
decidir si son aceptados o rechazados.
Por otro lado se encuentran los certificados digitales, que son creados a partir de una clave
privada dada y pueden ser verificados con la correspondiente clave pública. Esto simplemente
establece que hay un mismo poseedor que conserva la clave pública y la privada.
Principalmente los certificados digitales aparecen para ofrecer seguridad en el entorno de una
red a grande escala, ya que en estos casos es difícil distribuir claves públicas de forma segura.
Un certificado digital es un mecanismo que tiene el objetivo de unir una identidad a una clave
pública (y a su clave privada asociada). El poseedor (con la correspondiente identidad) de la
llave pública puede ser un individuo, una organización o un dispositivo.
Estos certificados se gestionan y mantienen por medio de la confianza en una tercera parte: el
certificado de autoridad (CA – Certificate Authority). El CA establece la unión de firma digital, la
identidad de los datos del poseedor y la clave pública. La firma digital, los datos de identidad y
la clave pública forman el certificado digital.
2.5.2. CIFRADO
Hay varios métodos de llevar a cabo el cifrado pero algunos de los más utilizados son los
siguientes:
RC4: El algoritmo RC4 es el utilizado en el protocolo WEP (especificado más adelante) y
está basado en códigos de clave simétrica, específicamente códigos de flujo. Su rapidez
y simplicidad hace que su uso sea muy extendido. Se divide en dos fases principales: La
fase de generación del flujo de clave y la fase de cifrado. La generación de flujo de
clave consiste en una serie de estados y operaciones de mezclado que resultan en un
flujo de bits pseudo‐aleatorios. La semilla de estas operaciones es la clave simétrica
34
que se genera utilizando un vector de inicialización de 24 bits y una clave de 40 bits (en
total 64 bits). Posteriormente se posibilitó el uso de una clave de 104 bits, obteniendo
un tamaño total de 128 bits. Una vez la tabla de estados ha sido inicializada, los valores
se utilizan para generar el flujo de clave. La segunda fase se basa en realizar una
operación lógica XOR del texto plano con el flujo de clave generado.
DES: Estándar de cifrado de datos (Data Encryption Standard). Consiste en un código
basado en clave simétrica de bloques y es vulnerable a ataques de fuerza bruta debido
a que la longitud de la clave está limitada a 64bits. Para fortalecer este código apareció
el triple‐DES que consiste en 3 códigos DES repetidos en el que se hace uso de 3 claves
de 56 bits.
AES: Estándar de cifrado avanzado (Advanced Encryption Standard). Se trata de un
código basado también en clave simétrica de bloques que fue el sucesor de DES. En
este caso el tamaño de bloque es de 128 bits y la longitud de las claves es de 128, 192
ó 256 bits. Cuanto más larga sea la clave, más difícil será descifrarla por lo que más
seguridad se proporciona.
2.5.3. RESUMEN DEL MENSAJE:
El resumen del mensaje consiste en una transformación de un mensaje de cualquier longitud a
un valor numérico. Existen dos formas típicas de comprobación de la integridad de un
mensaje: suma de comprobación (checksum) y comprobación de redundancia cíclica (CRC –
Cyclic Redundancy Checks).
La suma de comprobación se lleva a cabo enviando los datos y la suma de comprobación. Si se
ha producido un cambio en el mensaje, al calcular la suma de comprobación no coincidirá con
la que transporta el mensaje con lo que se detectará dicha modificación. Por otro lado la
comprobación de redundancia cíclica sigue un procedimiento similar al de la suma de
comprobación pero la diferencia es que el valor se obtiene realizando una larga división en
lugar de una suma. No obstante, la seguridad proporcionada por los citados métodos no
siempre asegura la integridad de los mensajes por lo que existen algoritmos adicionales más
seguros como se muestra a continuación:
MD5 – Message Digest 5 (Resumen de mensaje): En este algoritmo se utiliza una clave
que no es enviada a través de la red. La clave es utilizada para obtener el resumen del
mensaje llamado el “valor hash”. En la “función de hash” se utiliza información sobre
el punto de acceso (como la dirección IP) produciendo un resultado de longitud fija. El
receptor utiliza la misma clave teniéndola almacenada y realiza la “función de hash”. El
“valor de Hash” consiste en una representación basada en un número de 32 dígitos
hexadecimal. Aunque haya sido diseñado para seguridad, se ha demostrado que tiene
importantes vulnerabilidades, ya que puede presentar dos resúmenes de mensaje
iguales provenientes de dos mensajes distintos.
35
SHA – Secure Hash Algoritm (Algoritmo de Hash seguro): Se considera que es el
sucesor de MD5. El estándar de procesado de información presenta cuatro algoritmos
de seguridad SHA: SHA‐1, SHA‐256, SHA‐384 y SHA‐512. Los cuatro algoritmos son
iterativos con funciones de hash en una dirección que pueden procesar un mensaje
con una longitud máxima de 264 ‐ 2128 bits para producir una representación
condensada como resumen del mensaje de 160 – 512 bits. El mensaje de entrada se
procesa en bloques de 512 – 1024 bits. Cada algoritmo SHA procesa el mensaje en dos
estados: pre‐procesamiento y el cálculo de valor de hash.
2.6. SEGURIDAD
Una de las cuestiones más importantes en las redes inalámbricas es que la información
transmitida a través de una red inalámbrica llegue a su destinatario y no pueda ser utilizada
por dispositivos no autorizados. El estándar 802.11 no establece reglas específicas de
seguridad por lo que éstas han tenido que ir siendo desarrolladas de forma posterior y
gradualmente por medio de actualizaciones 802.11a, 802.11b, etc.
En un primer momento los fabricantes comenzaron a crear listas de direcciones MAC en los
puntos de acceso de forma que sólo podían acceder a la información de la red los equipos cuya
dirección MAC estuviese incluida en la lista. Con el estándar 802.11b aparece la “Privacidad
equivalente a cableado” (WEP – Wired Equivalent Privacy) con el que se establece una serie de
reglas para mantener la seguridad en la red. Al demostrar la vulnerabilidad de dicho estándar
se comienza a trabajar en el desarrollo del estándar que supliría los defectos de WEP que
posteriormente recibe el nombre de “acceso protegido Wi‐Fi 2” (WPA2 – Wi‐Fi Protected
Access) en la actualización del estándar 802.11i. Mientras se desarrolla dicha actualización,
aparece el llamado “acceso protegido Wi‐fi” (WPA) que está basado en WEP pero que cubre
las vulnerabilidades de éste. A continuación se especifican los detalles de dichos estándares.
2.6.1. WEP
En cuanto a la autenticación WEP presenta dos modos de operación: sistema abierto o clave
compartida.
Con el sistema abierto, la autentificación se establece mediante la transmisión de dos
mensajes. Si se consideran dos dispositivos inalámbricos A y B, el dispositivo A envía una
petición de autenticación y B responde a esta petición mediante “success” (éxito) o “failure”
(fallo). Al ser abierto por la respuesta será siempre éxito a no ser que se cree una lista de
direcciones MAC en el punto de acceso como se comentó anteriormente. En ese caso que el
dispositivo se encuentre en la lista recibirá el mensaje de éxito y en caso contrario el de fallo.
En el caso de autenticación con clave compartida, sólo los dispositivos que conocen la clave
compartida pueden autentificarse. El proceso de autentificación se lleva a cabo por medio de
“four‐way handshake”. El dispositivo A envía una petición de autentificación al dispositivo B. El
dispositivo B genera un texto aleatorio de 128 octetos y se lo envía a A. A cifra el texto usando
36
RC4 y envía el resultado a B. Una vez recibido en B, éste comprueba el “valor de
comprobación de integridad” (ICV – Integrity Check Value ) y, en caso de ser correcto, B envía
un código de estado indicando éxito. En caso contrario, indicará error.
Aunque parezca más robusto el método de clave compartida, se ha demostrado que es más
débil. Esto se debe a que si se capturan los mensajes del “four‐way handshake” se puede
obtener la clave, con lo que la red queda vulnerable.
Para calcular el ICV se utiliza un código CRC de 32 bits. Con esto se busca que se pueda
detectar si se ha producido una modificación del mensaje durante la transmisión, ya sea una
modificación debido a algún error en la transmisión o una modificación debido a un ataque.
Suponiendo un mensaje M, se calcula el código CRC de 32 bits, que se concatena con dicho
mensaje obteniendo el texto plano:
| , "|" ó .
Para el proceso de cifrado se utiliza la clave WEP (K) y un vector de inicialización (IV). El cifrado
RC4 genera una secuencia pseudo‐aleatoria (flujo de clave) que es función de la clave y del
vector de inicialización. El texto cifrado (C) se obtiene realizando la operación lógica XOR al
flujo de clave y al texto plano (figura 19):
⊕ 4 ,
Figura 19: Cifrado WEP.
El receptor del texto cifrado lo único que tendrá que hacer será realizar la operación inversa
para obtener el texto plano:
⊕ 4 , ⊕ 4 , ⊕ 4 ,
Ahora se separa el mensaje del código CRC para realizar la comprobación de integridad del
mensaje. Se calcula en el receptor el código CRC de 32 bits del mensaje y se comprueba con el
37
código CRC recibido. Si estos códigos coinciden, el mensaje no ha sido modificado. En caso
contrario, el mensaje se descarta al ser erróneo.
Finalmente hace falta resaltar que el principal problema que aparece con WEP es el efecto
llamado “reutilización del IV” que se explica en detalle más adelante.
Las claves WEP originales tenían una longitud de 40 bits (WEP‐40). Se consideró que eran
demasiado cortas para algunos propósitos más serios. Se incrementó la longitud hasta 104 bits
pero esto no hizo tampoco mucho para incrementar la seguridad. El tiempo necesario para
averiguar la clave de una longitud de 40 bits ronda los 3‐5 minutos y para una clave de 104 bits
unos 10‐15 minutos.
2.6.2. WPA y WPA2
Demostrada la vulnerabilidad de WEP en todos los aspectos, aparece WPA2 para ofrecer la
seguridad necesaria en una red inalámbrica. Presenta mejoras tanto en autenticación como en
integridad y cifrado del mensaje como se muestra a continuación.
En este caso también se establecen dos modos de autenticación: “clave pre‐compartida” ( Pre‐
Shared Key ‐ PSK) y 802.1X. En el modo PSK se utiliza una clave secreta común para la estación
y el punto de acceso que es introducida de forma manual en cada equipo antes de realizar la
conexión. Una vez las dos partes conocen la clave se lleva a cabo un proceso de “four‐way
handshake”. El hecho de tener que establecer estas contraseñas de forma manual en los
dispositivos hace que este modo sea ideal para redes de tamaño reducido.
Por otro lado se encuentra 802.1X que es un protocolo de la capa 2 que proporciona control
de acceso en redes basadas en puertos. Es más complejo que el modo PSK y está pensado para
redes más grandes que necesiten mayor seguridad. El protocolo utilizado para llevar a cabo el
proceso de autentificación es el protocolo de autentificación extensible (Extensible
Authentification Protocol ‐ EAP). EAP consiste en un estándar de internet para autentificación
de cliente de red. EAP fue inicialmente una extensión del protocolo punto‐a‐punto (PPP –
Point‐to‐Point Protocol). El objetivo de desarrollo de EAP fue poder realizar una negociación en
los puntos finales de la comunicación para poder seleccionar el mecanismo de autentificación
adecuado. Esto significa que es posible adoptar un nuevo mecanismo de autentificación sin ser
necesaria la extensión de PPP. 802.1X define cómo se encapsulan los paquetes EAP en tramas
de capa 2 y establece tres entidades envueltas en el proceso de autentificación (figura 20):
Solicitante: Es el software incorporado en el cliente inalámbrico.
Autenticador: Punto de acceso, donde se ejecuta el software del Servidor de
autenticación de red (NAS – Network Authentication Server). El NAS se utiliza ya que el
servidor de autenticación no tiene por qué residir en la capa 2. El NAS bloquea los
paquetes de capa 3 del cliente hasta que está completamente autenticado.
Servidor de autentificación: Normalmente suele ser RADIUS.
38
Figura 20: Componentes 802.1X
Un punto de acceso anuncia sus capacidades de seguridad en tramas de señalización o como
respuesta a peticiones de prueba. El solicitante selecciona el punto de acceso deseado y se
autentica con el punto de acceso por medio del sistema abierto. Una vez en este punto,
comienza el intercambio de paquetes EAP (el resto de comunicación se mantiene bloqueada
hasta que la comunicación EAP termine). El suplicante y el servidor de autenticación llevan a
cabo la autenticación usando uno de los métodos disponibles por EAP.
Tras la autentificación con éxito, el cliente y el servidor de autentificación generan una clave
secreta común llamada la clave de sesión maestro (MSK – Master Session Key). El solicitante
deriva la llave maestra por parejas (PMK – Pairwise Master Key) de la MSK. El servidor de
autentificación transfiere la clave al Autentificador, habilitándolo para derivar también la PMK.
El solicitante y el autenticador llevan a cabo un intercambio “handshake de 4 caminos” que
establece el código y la clave de transición por parejas (PTK – Pairwise Transient Key). Otras
claves se derivan de la PTK. Una vez realizado este procedimiento, 802.1X desbloquea el
puerto y admite paquetes de datos de la red. El solicitante y el autenticador ya pueden
intercambiar tramas de forma segura.
Los mensajes que viajan en la red inalámbrica son encapsulados en paquetes EAPOL (EAP Over
LAN). Los que son transmitidos en la red de cable se encapsulan en paquetes RADIUS (sobre
TCP/IP). El autenticador es el responsable del encapsulado y de‐encapsulado de los paquetes
EAPOL y RADIUS. La relación entre EAP y 802.1X está resumida en la figura 21.
39
Figura 21: EAP sobre LAN.
Algunos métodos EAP actuales se describen a continuación:
EAP‐PSK: Autentificación basada en clave pre‐compartida.
EAP‐MD5: Un método de autentificación mínima basado a partir de la función MD5. La
autentificación no es mutua, esto significa, que solo la autentificación del cliente es
llevada a cabo. Es vulnerable a ataques.
EAP‐MSCHAPv2: La versión 2 de Mircrosoft CHAP consiste en un protocolo de
autentificación de handshake con retos. Mientras que la versión 1 consistía en un
mecanismo de autentificación solo para el cliente, la versión 2 permite la
autentificación tanto del cliente como del servidor.
EAP‐LEAP: El EAP ligero es una propiedad del protocolo EAP de Cisco. EAP ligero
provee autentificación mutua basada en la contraseña de una respuesta al reto.
EAP‐PEAP: El protocolo EAP protegido es un protocolo de propiedad co‐desarrollado
por Microsoft, Cisco y seguridad RSA. PEAP provee la autentificación segura mutua del
cliente y del servidor.
EAP‐TLS: Seguridad en la capa de transporte (TLS – Transport Layer Security) está
basada a partir de un certificado de autentificación mutua. Los certificados tanto del
cliente como del servidor se intercambian.
EAP‐TTLS: Seguridad de la capa de transporte tunelado (TTLS – Tunneled Transport
Layer Security) es una extensión de TLS. Los cliente son autentificados
En cuanto al cifrado e integridad aparecen dos tipos distintos. Una vez se descubren las
vulnerabilidades de WEP quedan las redes desprotegidas en contra de ataques, por lo que se
necesita fortalecer esta seguridad hasta que aparezca la actualización WPA2. De esta forma
surge el protocolo de integridad de clave temporal (TKIP – Temporal Key Integrity Protocol).
40
Después aparece el protocolo de código en modo cifrado contador con autenticación de
mensajes enlazados por bloques (CCMP):
TKIP: Aparece con WPA y está basado en WEP pero mejorando la seguridad en los
aspectos que WEP era más vulnerable: generación de clave, colisiones de IV y
falsificación de mensajes. De esta forma se utiliza un cifrado RC4 de 128 bits por trama
que se obtiene como función de una clave temporal, la dirección MAC del cliente y el
IV. Para mantener la integridad del mensaje se incluye un mensaje de comprobación
de integridad (MIC – Message Integrity Check) en cada trama. El algoritmo utilizado
para obtener este valor es el llamado algoritmo “Michael” y se aplica a la dirección
origen, destino, el campo de prioridad, tres octetos reservados y el texto plano del
mensaje. De esta forma ofrece mucha más seguridad a la hora de detectar
modificaciones en el mensaje. También se incluye un campo para evitar los ataques
simples de retransmisiones que se llama el contador de secuencia TKIP (TSC – TKIP
Sequence Counter), desechando todas las tramas en las que no se incremente este
valor.
CCMP: Este protocolo está basado en el modo contador del estándar de cifrado
avanzado (AES – Advanced Encryption Standard) para confidencialidad y en el CBC‐
MAC (CCM) para integridad. En la figura 22 se muestra de forma visual la
transformación de la trama pasando de una original a una trama CCMP. El valor MIC se
obtiene con el texto plano del mensaje, se añade una cabecera CCMP y se añade una
secuencia de comprobación de trama (FCS – Frame Check Sequence). La cabecera
CCMP contiene un IV, un identificador de clave y un número de paquete. Para cada
sesión se genera una clave temporal. El proceso de encapsulación CCMP comienza con
la construcción del campo de datos de autenticación adicional (AAD – Additional
Aunthentication Data). El número de paquete, el segundo campo de dirección y el
campo de prioridad de la cabecera MAC se usan para construir el bloque CCM nonce.
Figura 22: Trama CCMP.
41
3. ATAQUES DE INTRUSIÓN
Una vez estudiado y analizado el funcionamiento principal de las redes inalámbricas 802.11 y
la protección de éstas, se procede al análisis de los ataques de intrusión que se pueden llevar a
cabo en dichas redes inalámbricas. Para el estudio de estos ataques de intrusión se comienza
con el análisis de los principales objetivos de seguridad del protocolo WEP y la posterior
comprobación de las vulnerabilidades del protocolo relacionadas con dichos objetivos de
seguridad.
También se realiza una diferenciación en los tipos de ataques entre pasivo y activo. Esta
diferenciación se realiza en base al tráfico de la red, con lo que se designará ataque activo al
que introduzca un tráfico adicional al normal de la red y ataque pasivo al que no introduzca
tráfico, sino que se limite a escuchar e interpretar la información recibida.
De esta forma se presenta una amplia variedad de ataques que pueden ser llevados a cabo
para conseguir tanto la clave secreta de una red como información privada.
3.1. DEBILIDADES DEL PROTOCOLO WEP
Con el desarrollo del protocolo WEP se busca ofrecer robustez en los siguientes aspectos de las
transmisiones:
Confidencialidad: El principal objetivo del protocolo WEP es evitar el espionaje.
Control de acceso: Proporciona un acceso protegido a la infraestructura de red
inalámbrica.
Integridad de los datos: Se pretende evitar la manipulación de los mensajes
transmitidos. Éste es el objetivo principal del campo de suma de comprobación.
La longitud de las claves también está establecida en el estándar WEP. Se da lugar a dos
versiones:
Una versión clásica formada por claves de 40 bits que son vulnerables a ataques de
“fuerza bruta”.
Una versión de 104 bits que evita el éxito de los ataques por “fuerza bruta” pero que
también es vulnerable. Esta versión, aunque haga uso de 104 bits, se llama la versión
de 128 bits.
A continuación se presentan las vulnerabilidades relacionadas con los objetivos de seguridad
WEP.
42
3.1.1. CONFIDENCIALIDAD
La primera vulnerabilidad presentada y una de las más importantes del protocolo WEP está
relacionada con la confidencialidad y con la reutilización del valor IV. A continuación se
muestra que en contraposición al objetivo de conseguir confidencialidad en las transmisiones,
se han desarrollado técnicas que se aprovechan de esta vulnerabilidad.
Cuando dos paquetes se cifran usando el mismo IV ocurre lo siguiente:
1 → ⨁ 4 ,
2 → ⨁ 4 ,
Si estos dos textos cifrados se le aplica la operación lógica XOR ocurre lo siguiente:
⨁ ⨁ 4 , ⨁ ⨁ 4 , ⨁
Esto se produce ya que RC4 depende sólo del valor IV y de la clave, de forma que cuando se
aplica XOR, se obtiene la operación XOR de los textos planos de ambos paquetes. Esto facilita
el descifrado de uno de ellos teniendo conocimiento del otro.
También es importante que, como se ha explicado anteriormente, el IV no sólo se usa para
elaborar el texto cifrado, sino que se añade de forma visible al paquete sin ser cifrado, lo cual
produce que pueda ser leído por cualquier equipo conozca o no la clave secreta, permitiendo
así que un atacante detecte rápidamente dos mensajes con el mismo IV. La mayoría de las
redes que usan WEP varían el valor IV para cada paquete transmitido, de forma que no ocurra
esto. Pero hay que tener en cuenta que WEP no obliga a realizar esta variación sino que es
voluntaria. Depende de la forma en la que la tarjeta inalámbrica lleve a cabo las variaciones de
IV el que sea más o menos vulnerable la red.
Otro factor a tener en cuenta es que el campo IV tiene un número limitado de posibles valores
ya que hay 24 bits destinados a dicho campo. Exactamente hay 224 IV´s posibles, por lo que en
algún momento comienzan a repetirse. Además hay algunas tarjetas inalámbricas que cuando
la wifi es reiniciada comienzan a numerar desde el principio, por lo que los iniciales se
repetirán más.
Existen varios métodos para descubrir el contenido de los mensajes una vez se han obtenido
dos mensajes con el mismo IV. Por ejemplo, el atacante se puede aprovechar de la estructura
de un paquete IP, ya que su contenido, al menos en la parte de las cabeceras, será predecible
con lo que podrá obtener el texto plano de los mensajes en tratamiento.
Una vez el atacante ha descubierto el contenido de los textos planos con su IV correspondiente
puede crear su propio diccionario de correspondencias con el objetivo de obtener la clave. De
esta forma, registrará los flujos de clave almacenándolos con su correspondiente valor IV.
Cuantos más datos formen la tabla, más posibilidades tendrá el atacante de descifrar la clave
secreta. El tamaño del diccionario no dependerá del tamaño de la clave, sino del tamaño del IV
que por el estándar se encuentra fijado a 24 bits. Con este tipo de ataque se demuestra que el
protocolo WEP es vulnerable en el aspecto de la confidencialidad (el objetivo principal para el
43
que fue desarrollado). Para evitar estos tipos de ataques, las redes deben procurar no repetir
el valor IV de los paquetes o repetirlo lo menos posible.
3.1.2. INTEGRIDAD
En este apartado se muestra que se pueden realizar modificaciones en el mensaje sin que sea
detectable a través de la suma de comprobación. Para demostrar esto, se supone que se
intercepta un mensaje cifrado C (correspondiente al mensaje sin cifrar M) que se envía de una
estación a otra dentro de una red inalámbrica.
⊕ 4 ,
, ⨁ 4 ,
Debido a las propiedades de la operación XOR se puede encontrar un texto cifrado C’ que
descifra el mensaje ⨁ , siendo el valor Δ elegido aleatoriamente por el atacante. El
atacante intercepta el mensaje enviado por el cliente y lo modifica sin que se vea afectado el
CRC. De esta forma la víctima recibe un mensaje modificado por parte del atacante. El texto
cifrado C’ se obtiene de la siguiente forma:
⨁ ⟨Δ, Δ ⟩ 4 , ⨁ ⟨ , ⟩ ⨁ ⟨Δ, Δ ⟩
4 , ⨁ ⟨ ⨁ Δ, ⨁ Δ ⟩ 4 , ⨁ ⟨ , ⨁ Δ ⟩
4 , ⨁ ⟨ , ′ ⟩
De esta forma se obtiene un texto cifrado para ⨁ Δ. El atacante sólo necesita conocer el
texto cifrado original y la diferencia de texto plano deseada (Δ). Se puede realizar una
modificación de los datos transmitidos sin que ésta pueda ser percibida y, además, no es
necesario el conocimiento completo de M.
3.1.3. CONTROL DE ACCESO
Finalmente se muestra otra forma de atacar pero en este caso a la seguridad del control de
acceso (el último de los propósitos para los que se diseñó el protocolo WEP). En este caso lo
que se hace es elaborar un paquete y cifrarlo de forma que pueda ser aceptado en la red sin
ocasionar alarma.
Como se ha mostrado en el primer caso, se puede obtener el flujo de clave de un mensaje si se
produce la reutilización del valor IV. Si un atacante averigua el texto plano de un texto cifrado,
el flujo de clave lo puede obtener de la siguiente forma:
⨁ ⨁ ⨁ 4 , 4 ,
Una vez consigue el flujo de clave, ya puede crear un texto cifrado para un mensaje M’ que
será enviado a la víctima haciéndole pensar que proviene de un usuario legítimo de la red:
44
⟨ , ′ ⟩ ⨁ 4 ,
Este nuevo texto cifrado tendrá que utilizar el mismo valor de IV con el que se ha obtenido el
flujo de clave. Además al no levantar sospecha por reutilizar un valor IV, ya que esto es posible
en el protocolo WEP, el atacante no será descubierto. Así se puede burlar el mecanismo de
control de acceso del protocolo WEP.
3.2. TIPOS DE ATAQUES
Una buena forma de clasificar los ataques realizados a redes que utilizan seguridad WEP es
según el tráfico que inyectan a la red. De esta forma los ataques se dividen en pasivos y
activos.
En un ataque pasivo el atacante escucha el tráfico de la red a escondidas desde la distancia con
una antena direccional y una aplicación como un analizador de protocolo o un olfateador
(sniffer). De esta forma se puede capturar tráfico de la red usado posteriormente para realizar
estudios. Este tipo de ataques son muy difíciles de detectar en una red, ya que no introducen
tráfico adicional. Para llevar a cabo un ataque pasivo, el atacante no necesita conectarse a la
red inalámbrica, ni asociarse ni autenticarse. Existen aplicaciones de propósito específico que
permitirán obtener, por ejemplo, el número de usuario y contraseña a páginas de internet, FTP
o sesiones Telnet. Al obtener esta información de acceso, el atacante puede dañar la red o
acceder a información privada.
En el caso del ataque activo, el atacante no se dedica sólo a escuchar el tráfico de la red, sino
que lleva a cabo una función en la red. Principalmente hay dos tipos de ataques activos: La
denegación del servicio y “forzar la entrada”.
En el caso de ataques por denegación de servicio, lo que se realiza es una denegación de la
conexión por parte de usuarios legítimos al punto de acceso. En este ámbito se puede desde
bloquear el acceso de un usuario a los servicios proporcionados a la red inalámbrica hasta
deshabilitar una cuenta de forma que el usuario no pueda acceder a la red. Este tipo de
ataques son muy comunes y fáciles de realizar. En el momento que un equipo se conecta a la
red es vulnerable a ataques de este tipo. Por otro lado se encuentran los ataques basados en
forzar la entrada. En este caso lo que se busca es causar un daño a la red o adquirir
información privada.
En muchos casos el procedimiento llevado a cabo a la hora de realizar un ataque de intrusión
consiste en realizar primero un ataque activo para posicionarse adecuadamente, y luego
efectuar un ataque pasivo para recopilar la información que se está buscando. Por ejemplo, un
atacante podría irrumpir en un equipo de forma que recopile contraseñas de una red en la que
los usuarios entran cada mañana. Los ataques pasivos también se usan para conseguir
información necesaria para poder llevar a cabo un ataque activo. Los ataques pasivos y activos
pueden ser combinados para la obtención de resultados exitosos en casos concretos,
dependiendo de la situación.
45
3.3. ATAQUES ACTIVOS
A continuación se presentan algunos ataques activos de distinta naturaleza y procedimiento,
de forma que puedan ser comparadas distintas estrategias de ataque de cara a poder
caracterizar ataques comunes llevados a cabo en redes inalámbricas.
3.3.1. ATAQUE DE DEAUTENTICACIÓN
El proceso de autenticación de un equipo a un punto de acceso protegido por WEP se lleva a
cabo por medio del envío de 6 paquetes:
Envío de la petición de sondeo a la dirección de difusión. Esta petición contiene un
número identificador de conjunto de servicio extendido (ESSID – Extended Service Set
IDentifier).
Respuesta por parte del punto de acceso con la dirección MAC del punto de acceso y
otras opciones.
ACK por parte del cliente como respuesta de sondeo.
El punto de acceso envía el texto de desafío al cliente.
El cliente lo decodifica y lo cifra usando la clave compartida, enviándolo como
respuesta al punto de acceso.
El punto de acceso verifica que el texto de desafío es correcto y envía una respuesta
exitosa de autentificación. En caso de que no sea correcto, se lo indica al cliente.
En este tipo de ataques, se presta especial atención a los paquetes intercambiados con el texto
del desafío, ya que lo que se realiza es un cifrado haciendo uso de la clave compartida, de
forma que si se realiza un ataque adecuado, esta clave podrá ser obtenida.
En este ataque se obtiene la dirección MAC del blanco y se le envía un paquete de
deautenticación al cliente como si fuera de parte del punto de acceso. Esto produce una
pérdida del servicio por parte del cliente que comenzará un proceso de autenticación que
aprovecha el atacante para obtener la información deseada. Por lo general se produce un
elevado tráfico adicional en la red producido por las solicitudes de deautenticación alterando
así el tráfico normal, provocando que el usuario se vuelva a asociar al punto de acceso. No
obstante, este ataque se puede llevar a cabo también con un número reducido de paquetes
como se mostrará en las pruebas. Esta técnica es también muy utilizada en redes protegidas
por los protocolos WPA y WPA2 haciendo uso de diccionarios.
3.3.2. ATAQUE RE‐INYECCIÓN DE SOLICITUDES ARP
Otro ataque muy común consiste en escuchar de forma pasiva esperando el envío de un
paquete ARP. A este paquete se responde y se captura la respuesta cifrada por parte del
punto de acceso, obteniendo así el valor IV. Lo más característico de este tipo de ataque es
46
que no provoca la condición de negación del servicio a los clientes asociados al punto de
acceso, lo que hace que sea muy comúnmente utilizado. Normalmente se lleva a cabo de
forma exitosa en redes inalámbricas pequeñas o lentas porque sólo es necesario un equipo y
no necesita ser muy activo. Si no hay ningún cliente detectado no se puede llevar a cabo este
ataque.
Básicamente lo que hace es buscar paquetes ARP encriptados enviados a la dirección de
difusión por parte de clientes asociados. Una vez se obtiene dicho paquete, se envía miles de
veces una copia de dicho paquete ARP (todas con el mismo IV) desde el equipo atacante al
punto de acceso obteniendo por parte de éste una respuesta con un nuevo IV. Cada vez que se
envía el paquete se genera una respuesta por parte del punto de acceso con un paquete
cifrado. El tiempo estimado que será necesario para obtener una clave será entre 10 y 15
minutos.
Al enviar tantas veces un mismo paquete lo que se hace es duplicar el dato IV en todos los
paquetes. Para detectar este tipo de ataques será necesario observar un incremento en los IVs
duplicados, una cantidad elevada de recepción de tramas duplicadas y un incremento radical
en la cantidad de paquetes ARP o de difusión. Una buena forma de hacer frente a este tipo de
ataque es limitando la cantidad de respuestas que se envían a tramas duplicadas.
3.3.3. ATAQUE HOMBRE EN EL MEDIO (MIM – Man In the Middle)
El principio básico de este ataque consiste en el establecimiento de un punto de acceso falso
que se interpone entre la comunicación del cliente con el punto de acceso real. El punto de
acceso falso lo que hace es imitar al punto de acceso real para que los clientes se puedan
comunicar con él sin sospechar que se está produciendo una intrusión.
Lo que buscará el punto de acceso falso será que los clientes se desconecten del punto de
acceso original y se conecten al falso. Esto se consigue produciendo una denegación del
servicio (provocando la nueva autenticación del cliente) o emitiendo la señal con una fuerza
superior al punto de acceso original.
Lo normal es que los clientes de una red inalámbrica se conecten al punto de acceso que les
conceda la señal con mayor potencia. Para que no se detecte que se está realizando una
intrusión, el punto de acceso falso crea un puente a otra conexión de red. Así, el atacante
toma el control de la conexión del cliente de la red inalámbrica llevando a cabo las acciones
que desee como miembro de dicha red.
El procedimiento se basa en poner en funcionamiento el punto de acceso falso en un canal que
se encuentre a una distancia mínima de 5 canales del punto de acceso original. Una vez
colocado, se configura en modo máster y con una dirección ESSID igual a la del punto de
acceso que se pretende atacar. Cuando ya está configurado, se añade ruido al canal donde
transmite el punto de acceso original. Esto se puede ejecutar usando la herramienta “Void11”
o “Mdk3”. Ambas herramientas consisten en añadir ruido a un canal produciendo
inundaciones de paquetes de deautenticación, autenticación o asociación, tanto en los clientes
como en los puntos de acceso. Más adelante se habla de forma más detenida de Mdk3 que
47
será el empleado en las pruebas. Otra forma de añadir ruido a la red consiste en producir
colisiones:
Capa física: Produciendo ruido físico en el canal de transmisión de los mensajes,
consiguiendo así un descenso en la calidad del servicio.
Capa de enlace: Produciendo confusiones gracias al campo NAV
La idea es conseguir que el cliente se desconecte de la red. Al ser desconectado, el cliente
vuelve a conectarse a la red pero en este caso lo hará con la señal que le ofrezca mayor
calidad, que en este caso será la del punto de acceso falso. El punto de acceso falso se
introduce en la comunicación y toma el control de la red adquiriendo la información que desee
como contraseñas y nombres de usuarios.
Este tipo de ataques se pueden prevenir si se crea una lista estática de puntos de acceso y de
direcciones ESSID y BSSID autorizadas con los correspondientes canales de transmisión.
Primero se comprueba si la dirección ESSID o BSSID es correcta y en el caso que lo sea, se
comprueba si el canal de transmisión es correcto.
También se puede realizar el almacenamiento de las direcciones BSSID / ESSID con la fuerza de
transmisión y el canal por el que transmiten, para detectar cualquier anormalidad en las
transmisiones. Una última opción sería la detección del incremento radical de solicitudes de
deautenticación, asociación o de autenticación.
3.3.4. ATAQUE DE REDIRECCIÓN IP
Como se ha comentado, para descifrar los paquetes de una red protegida por el protocolo
WEP es necesario tener conocimiento de la clave secreta. En un principio el atacante no
conoce la clave por lo que no puede descifrarlos, pero puede aprovecharse de que el punto de
acceso sí puede. La idea principal entonces es conseguir que el punto de acceso descifre los
mensajes para el atacante. Para el ataque que se presenta en este apartado se necesita que el
punto de acceso trabaje como router con acceso a internet, escenario muy común en las redes
domésticas de hoy en día.
Este ataque es el llamado “redirección IP” y a rasgos generales consiste en realizar una
modificación en la dirección destino del paquete sin que se detecte dicha modificación.
Consiguiendo así que el paquete sea recibido por un servidor de internet controlado por el
atacante. El punto de acceso descifrará el paquete y lo enviará a dicho servidor sin accionar
ningún tipo de alarma y sin desecharlo. Para que no sea detectada la modificación, será
necesario realizar la modificación no sólo al campo de la dirección IP destino, sino también al
CRC.
Como el único cambio que se realiza es el de la dirección IP de destino, y si la dirección antigua
es conocida, se puede calcular la diferencia del valor de la suma de comprobación que hay que
introducir para que el paquete no sea desechado por el punto de acceso. Se define X como el
código CRC del paquete original, DS como la palabra superior de 16 bits de la dirección IP
destino original, Di la inferior y DS’ Di’ las correspondientes a la nueva dirección IP destino. La
48
nueva suma de comprobación que deberá sustituir a X (teniendo en cuenta que tanto la suma
como la resta son en complemento a 1)será:
′ ′
A continuación se presentan tres posibilidades distintas basadas en el conocimiento de la suma
de comprobación del paquete. Dependiendo del caso a tratar se actuará de una manera u otra:
En el caso de que la suma de comprobación del paquete original sea conocida será
necesario simplemente calcular X’ como se indica en la expresión anterior y realizar la
operación XOR al campo de suma de comprobación del paquete: ⊕ ′.
Si por el contrario no se dispone de dicho valor, la tarea se dificulta un poco. Se define
σ = X’ – X y ∆ = ′ ⊕ . No es suficiente el conocimiento de σ para calcular ∆. Hay
varios valores de X y X’ cuya resta es σ que producirán distintos ∆. La idea en este caso
es probar varias posibilidades hasta dar con la correcta. En caso de error, no hay
ningún problema ya que lo único que sucede es que el punto de acceso desecha el
paquete.
Buscar que el CRC final sea igual al original compensando el cambio de dirección IP
destino con otros campos del paquete. Esta compensación se busca en los campos de
la cabecera IP que no afecten a la emisión correcta del paquete IP como por ejemplo,
la dirección IP origen. En el caso de modificar la dirección IP origen lo que se hace es
restar σ a la palabra inferior de 16 bits de la original, compensando así la modificación
realizada. Otra opción sería que el atacante disponga de un rango de direcciones IP
destino en internet. En este caso se buscará:
′ ′
3.3.5. ATAQUE DE REACCIÓN
El ataque de reacción es válido sólo para redes que hacen uso del protocolo TCP/IP. No es
necesario que tengan acceso a internet por lo que podrán ser utilizados incluso en los casos
que no sea posible utilizar el ataque de redirección IP. La idea de este ataque es aprovechar
las respuestas del receptor del mensaje para descifrar el texto plano P desconocido
correspondiente a un texto cifrado C. En una red TCP, cuando el receptor recibe el paquete y
comprueba que la suma de comprobación es correcta, envía una confirmación (ACK). El ACK es
característico por su tamaño, por lo que no será necesario descifrar el mensaje para detectar
que se trata de un paquete ACK.
Resaltar que la suma de comprobación TCP consiste en la suma en complemento a 1 de las
palabras de 16 bits del mensaje. El nuevo texto cifrado se obtendrá realizando: ,
siendo ∆ todo ceros excepto en la posición i e “i+16” que será 1 (eligiendo arbitrariamente i).
Al recibir un ACK después de haber enviado el nuevo texto cifrado, se obtiene un bit del texto
plano. Lo único que será necesario hacer es repetir el procedimiento para muchas
posibilidades de i obteniendo así el texto plano.
51
Una vez presentados los principios teóricos en los que se basa la seguridad en una red
inalámbrica y los tipos de ataques existentes, se procede al análisis de los materiales y
métodos utilizados en las pruebas del presente proyecto. En un primer lugar se presentan las
herramientas de captura de tráfico en red utilizadas. También se procederá a la explicación
detallada del software necesario para llevar a cabo los ataques. Después se presenta el análisis
multivariante utilizado para poder interpretar los datos correspondientes al tráfico de la red a
tratar y las herramientas de clasificación de tráfico. Finalmente se presenta la explicación
detallada del diseño de las pruebas realizadas.
4. HERRAMIENTAS DE CAPTURA DE TRÁFICO EN RED
Para poder obtener datos relevantes en una red inalámbrica con los que trabajar será
necesaria alguna herramienta de captura de tráfico. En la actualidad existen varias
herramientas de este tipo entre las que destacan: Wireshark, la librería libpcap y airodump
(de aircrack). Para añadir ruido a un canal determinado se hace uso de la herramienta Mdk3.
También es necesario un sistema operativo que soporte dichas herramientas. En el presente
proyecto se utiliza el sistema Wifiway, pero también se presenta Wifislax ya que se suele
utilizar para auditoría de redes inalámbricas. Finalmente se realiza una descripción de la
herramienta Matlab utilizada para el análisis de datos y clasificación.
4.1. WIRESHARK
Wireshark (http://www.wireshark.org/) es un analizador de paquetes de red basado en la
librería libpcap cuyo objetivo es capturar los paquetes de la red y mostrar los datos de la forma
más detallada posible. Hoy en día es posiblemente el mejor analizador de paquetes de
software libre. Puede ser utilizado para solucionar problemas en una red, examinar problemas
de seguridad, aprender sobre protocolos, etc. Además puede ser utilizado tanto en redes
cableadas como en inalámbricas y en sistemas operativos UNIX o Windows. Su antecesor fue
“Ethereal” que apareció en una primera versión de prueba que fue perfeccionada hasta que se
desarrolló finalmente la primera versión de Wireshark. Algunas de las características
principales son:
Captura paquetes de datos de forma directa de una interfaz de red.
Muestra mucha información de los protocolos utilizados en el encapsulado del
paquete.
Las capturas pueden ser almacenadas en formato .cap.
Permite realizar un filtrado de recepción de paquetes. Por ejemplo, si lo que se
pretende es sólo analizar los paquetes IP en una red, permite crear un filtro de tal
manera que sólo se muestren los paquetes IP.
Puede descifrar mensajes cifrados utilizando la clave conocida por el usuario.
No realiza ningún tipo de alteración ni modificación en la red. Simplemente muestra
por pantalla los paquetes que están en movimiento.
52
Para poner el programa en funcionamiento será necesario instalarlo e iniciarlo. Una vez
iniciado se selecciona la interfaz de la que obtener los paquetes y se comienza con la captura
mostrando por pantalla todos los paquetes recibidos. En la figura 23 se observa la interfaz de
Wireshark donde se muestran tanto los paquetes como la información más relevante de cada
paquete como las direcciones de origen y destino, el protocolo utilizado, la información, etc.
Figura 23: Wireshark.
Si se selecciona uno de los paquetes, en la parte inferior del programa se muestra la
información desplegable de cada uno de los protocolos utilizados en la elaboración del
paquete. Por ejemplo, en la figura 24 se muestra el contenido de un paquete TCP/IP con los
campos de la cabecera IP como la versión, el tamaño de cabecera, el número de identificación,
etc.
Figura 24: Contenido del paquete con wireshark.
En el caso concreto de este proyecto, el uso de Wireshark no será para la captura y análisis
exhaustivo e individual de los paquetes de la red inalámbrica, sino para tener una idea general
de lo que está sucediendo en la red. También para observar de forma clara la estructura de los
paquetes bit a bit aclarando así la estructura a seguir a la hora de elaborar el código de
programación con la librería libpcap. Para capturar todos los paquetes que están siendo
intercambiados en la zona de cobertura inalámbrica, será necesario poner la tarjeta
inalámbrica en modo monitor, lo que se corresponde con modo promiscuo en las redes
cableadas. La forma de llevar a cabo esto se explica más adelante con el conjunto de
herramientas “Aircrack”.
53
4.2. LIBRERÍA LIBPCAP
La librería libpcap (http://www.tcpdump.org/) consiste en una serie de funciones escritas en
determinados lenguajes de programación que proporcionan una gestión de una red a alto
nivel realizando la captura de paquetes a nivel de usuario. Es software libre y permite la
elaboración de programas capaces de realizar la captura de paquetes en una red permitiendo
el análisis de estos. En el presente proyecto la herramienta de captura de paquetes en la red
inalámbrica y de caracterización de dichos paquetes ha sido la librería libpcap. Wireshark ha
sido utilizado de forma complementaria para obtener información específica, pero el trabajo
ha sido realizado directamente en C con esta librería. Este mecanismo se utiliza incluso para
capturar paquetes que no van destinados al dispositivo desde el que se está realizando el
estudio. De esta forma se puede “olfatear” la información transmitida en la red inalámbrica.
Los programas elaborados con la librería libpcap suelen tener una estructura para que se
pueda obtener la información adecuada. Esta esquematización está basada en los siguientes
pasos:
Inicialización: En esta primera etapa del programa se hacen uso de funciones
especiales para poder detectar las tarjetas inalámbricas disponibles y obtener
información relevante de la red, como puede ser la dirección de red, máscara de red,
etc.
Filtrado: Una característica importante de esta librería consiste en la definición de
filtros para el procesado sólo de paquetes que sean relevantes al estudio indicado. En
el proyecto aquí estudiado no se ha hecho uso de filtros ya que lo que interesa es
observar todo el tráfico de la red, pero es interesante el conocimiento de esta
posibilidad que ofrece libpcap. De esta forma se pueden filtrar los paquetes por el
protocolo utilizado, por ejemplo, TCP.
Bucle de captura de paquetes: En este bucle los aspectos más relevantes a definir
serán el número máximo de paquetes a capturar, el modo de captura o el tiempo
máximo de captura de paquetes. De esta forma se captura el paquete y se le aplica
una función definida por el usuario en el código C.
Salida: Finalmente se termina la captura de paquetes y se procede a la interpretación
de los datos obtenidos. Esta librería ofrece la posibilidad de realizar un volcado
completo de la información obtenida de los paquetes para la posterior lectura del
fichero.
54
4.3. SUITE AIRCRACK
La suite Aircrack (http://www.aircrack‐ng.org/) es un conjunto de herramientas utilizadas para
la inyección de paquetes en una red inalámbrica, la captura de paquetes y la realización de
ataques cuyo objetivo es la obtención de las claves secretas de redes inalámbricas. A
continuación se muestran las rutinas principales de la suite:
Airmon: Se utiliza para poner en modo monitor la interfaz deseada de la siguiente
forma:
“airmon‐ng start interfaz”
Siendo interfaz la que se quiere poner en modo monitor.
Airodump: Programa de captura de paquetes 802.11. Se utiliza para observar la
información de los paquetes que se mueven en la red, pero también se utiliza para
recibir los paquetes junto con los IV mientras se está realizando un ataque con alguna
otra herramienta de la suite Aircrack. Se ejecuta de forma paralela al ataque pudiendo
así almacenar tantos IV como sea posible para proceder más tarde al descifrado de la
clave. El uso es el siguiente:
“Airodump opciones interfaz”
Las opciones más importantes disponibles son las siguientes:
o ‐‐ivs: Almacenar solo los IVs capturados.
o ‐‐write <Prefijo> = ‐w <Prefijo>: Fichero en el que se hace el volcado de los
datos.
o ‐‐ netmask <máscara>: Filtrado de puntos de acceso por la máscara.
o ‐‐ bssid <bssid>: Filtrado de puntos de acceso por bssid.
o ‐c <canal>: Realiza la captura de paquetes en un canal determinado.
Aircrack: Descifrador de claves WEP y WPA utilizando las capturas obtenidas por
airodump como entrada:
“aircrack ‐q ‐n [longitud clave WEP] ‐b [BSSID] [fichero].cap”
Activando el modo silencioso con “‐q”, especificando la longitud de la clave WEP con “‐
n [longitud clave WEP]”, el BSSID y el fichero obtenido de las capturas de airodump.
Aireplay: Es un programa de inyección de paquetes 802.11. Se utiliza para generar
tráfico que es capturado al mismo tiempo por airodump obteniendo el fichero usado
posteriormente por aircrack para obtener la clave. Las opciones que hay que añadir a
la hora de utilizar esta herramienta dependen del ataque que se quiera realizar. El
comando general es el siguiente:
“aireplay‐ng <opciones> <interfaz>”
Las opciones específicas se explican en el diseño de las pruebas.
55
4.4. MDK3
MDK3 es un programa que permite añadir ruido a un canal inalámbrico. Las opciones
disponibles son las siguientes:
Inundación de peticiones de deautenticación a los clientes inalámbricos.
Mdk3 <interfaz> d
Inundación de peticiones de autenticación a los puntos de acceso, de forma que se
saturen produciendo una denegación de servicio a los clientes legítimos. El
procedimiento se lleva a cabo creando una gran cantidad de clientes virtuales que
solicitan autenticación.
Mdk3 <interfaz> a –a <BSSID punto de acceso>
Inundación de puntos de acceso falsos, creando confusión a los clientes dentro del
mismo canal.
Cualquiera de estas opciones producirá un descenso en la calidad de la señal recibida, incluso
la denegación de servicio.
4.5. WIFISLAX Y WIFIWAY
Tanto Wifislax (http://www.wifislax.com/) como Wifiway (http://www.wifiway.org/) son
configuraciones específicas (imágenes) de un sistema operativo Linux cuya principal aplicación
es la auditoría de redes inalámbricas. Están dotados de un conjunto de herramientas
instaladas por defecto de fácil manejo para el usuario en varios idiomas, con el objetivo de que
un usuario sin muchos conocimientos informáticos pueda probar la seguridad de su propia red
inalámbrica ante los ataques más comunes que se producen hoy en día. Dispone de programas
con los que no será necesario ni siquiera escribir todos los comandos arriba descritos, sino que
proporciona interfaces de usuario mucho más simples con las que se puede llevar a cabo un
ataque simplemente pulsando botones del programa. Son sistemas operativos en continuo
desarrollo ya que las tecnologías inalámbricas están en continuo progreso y se trata de
software libre.
También tiene soporte para la mayoría de las tarjetas inalámbricas presentes en el mercado
internacional actual, actualizándose a aquellas que van apareciendo a lo largo del tiempo.
Básicamente las dos herramientas pueden ser utilizadas con los mismos fines pero en el caso
de este proyecto se ha optado por Wifiway 3.0.1. Estas herramientas se pueden instalar
directamente en el disco duro de un ordenador o pueden ser utilizados como live CD o incluso
desde dispositivos de almacenamiento. Otra opción es utilizarlos a través de una máquina
virtual. El único problema de este caso es que no se puede utilizar la tarjeta inalámbrica de un
ordenador portátil normal, sino que será necesario utilizar una tarjeta inalámbrica conectada
mediante el puerto USB. En la figura 25 se muestra la máquina virtual trabajando con el
sistema operativo Wifiway (escritorio).
56
Figura 25: Escritorio de Wifiway con la máquina virtual VMware.
4.6. MATLAB
Matlab (http://www.mathworks.es/) es un entorno de programación muy utilizado en la
actualidad. La esencia de los cálculos de MATALAB se basa en el uso de matrices. De esta
forma se consigue que los cálculos requieran menos esfuerzo computacional usando
propiedades algebraicas. No sólo resulta útil por la sencillez de los cálculos, sino también por la
interfaz intuitiva con la que se trabaja. Permite la programación de funciones y archivos
ejecutables obteniendo los resultados por pantalla de una forma rápida y sencilla. Tiene gran
aplicación en el análisis de señales y para la representación de gráficos. Al permitir la
elaboración de programas por parte del usuario, se han ido incorporando a lo largo de su
desarrollo una gran variedad de funcionalidades conforme se han ido desarrollando nuevas
versiones. Además, dispone de una página web oficial en la que los usuarios pueden compartir
programas elaborados por ellos mismos para un uso específico. También se pone a disposición
del usuario una serie de “Toolbox” para la ampliación de las funciones básicas de la
herramienta a campos específicos, por ejemplo, relacionados con el análisis exploratorio de
datos.
57
5. HERRAMIENTAS DE CLASIFICACIÓN: ANÁLISIS
MULTIVARIANTE
El análisis multi‐variante comprende un conjunto de técnicas para el análisis de conjuntos de
datos de más de una variable. La mayoría de estas técnicas son de desarrollo muy reciente
debido a las necesidades computacionales para ser llevadas a cabo. Estas técnicas aparecen al
tener la necesidad de analizar o investigar conjuntos de datos de tamaño muy amplio con la
dificultad computacional que conlleva. Con este objetivo se presenta el análisis exploratorio de
datos que comprende una serie de técnicas descritas a continuación.
5.1. ANÁLISIS EXPLORATORIO DE DATOS.
La idea es realizar una serie de observaciones a las variables de un experimento generando así
amplios conjuntos de datos que luego son analizados y clasificados. De esta forma, se obtiene
una matriz en la que las filas contienen las observaciones realizadas a esas variables y las
columnas a las distintas variables como se muestra en la siguiente matriz (2 dimensiones):
1 …⋮ ⋮ ⋮ ⋮ …
… ⋮ … ⋮
⋮ ⋮ …⋮ ⋮
…
… ⋮ ⋮ …
En el caso de ser de más de dos dimensiones habría que añadir varias matrices de forma que la
matriz sería de dimensión T, siendo T la cantidad total de dimensiones. Para poder
comprender este tipo de análisis se puede pensar en la medida de una serie de variables en la
población de distintos países de Europa. De esta forma se podría obtener información sobre el
por qué de la esperanza de vida en algunos países es mayor que en otra. Las observaciones se
podrían ir tomando en un número de personas de cada país y las variables pues podrían ser
componentes alimenticios, bebidas, actividad laboral y actividad física. Teniendo un número
suficiente de observaciones se podría generalizar el comportamiento en dichas poblaciones
dependiendo de esas variables. También se podrían separar las variables por dimensiones. Por
ejemplo en una dimensión se encontrarían las correspondientes a las características
personales de cada persona (edad, peso, estatura, etc.). Una segunda dimensión podrían ser
características alimenticias como pueden ser la cantidad de hidratos de carbono que ingiere,
de proteínas, verduras, etc. La tercera dimensión serían variables correspondientes a las
actividades físicas llevadas a cabo por la persona y así sucesivamente.
Este proyecto se centra en el estudio de dichas matrices en dos dimensiones ya que lo que se
busca es la caracterización del tráfico normal y el tráfico producido mientras se produce un
ataque. En este enfoque se aplicarán técnicas basadas en estructuras latentes como es el
análisis por componentes principales (PCA – Principal Component Analysis). La función
principal de la técnica PCA es la compresión o reducción de datos, con lo que se busca la
58
eliminación de las variables que no son de gran relevancia para el objetivo del estudio. En una
segunda fase se utilizan una serie de técnicas de clasificación que se explican más adelante.
Con la técnica PCA, se puede conseguir la reducción de un número elevado de variables a un
número más reducido y conceptualmente más coherente de variables. La base para realizar el
cambio de variables es la variabilidad de los datos, para esto se hace uso de conceptos como
media, varianza (suma de los cuadrados de las desviaciones con la media) y covarianza
(permite detectar similitudes entre variables). Las nuevas variables serán las llamadas
“componentes principales” (PC – Principal Components) que se trata de una combinación
lineal de las variables originales. Gracias a esta reducción se puede realizar un análisis con
menos carga computacional y de una manera más sencilla pero eficiente. Suponiendo un
conjunto de datos X de dimensiones NxM, la idea es descomponerlo en una matriz de
puntuaciones P, una matriz de carga C y una de residuos E:
Las dimensiones de la matriz P serán NxA, las de C serán MxA y finalmente las de E serán NxM,
designando A como el número de componentes principales en el conjunto de datos a analizar.
P indica la distribución de los datos observados, C indica las relaciones entre variables y E
indica aquellas observaciones o variables que no siguen en el modelo PCA. Se busca encontrar
las direcciones que maximizan la varianza.
Un detalle importante en el análisis exploratorio de datos es el estudio de los gráficos de
dispersión que lo que hacen es presentar la distribución de las observaciones. En estos gráficos
se puede observar las nubes correspondientes a datos relacionados entre sí dependiendo de
las variables tratadas. Esta especie de nubes dará lugar a la identificación clara de dichas
clases, pudiendo caracterizar así un perfil en el experimento. La idea es representar en un
gráfico bidimensional dos componentes principales, una iría en el eje x y otra en el eje y.
Además de permitir la detección de clases dentro de los datos en estudio, permite también
comprender de forma clara la estructura de los datos para poder utilizar más adelante otras
herramientas como MEDA u oMEDA.
Una vez realizado el estudio con PCA y de los gráficos de dispersión se presenta una
herramienta llamada MEDA (métodos de datos faltantes para el análisis exploratorio de datos
– Missing‐data methods for Exploratory Data Analysis). Esta herramienta se utiliza para la
relación de los factores comunes con las componentes principales del experimento. Esta
herramienta permite la representación de las dependencias entre variables por medio de una
representación como la de la figura 26. En dicha figura se presenta un estudio realizado en
distintas partes de España en cuanto a la alimentación de los habitantes y los ataques al
corazón producidos. De esta forma el gráfico meda representa las dependencias entre las
variables con distintas tonalidades de gris, de menor a mayor oscuridad en orden creciente de
dependencia.
59
Cerdo Ternera Pollo Pavo Conejo Ataques al
corazón
Cerdo
Ternera
Pollo
Pavo
Conejo
Ataques al corazón
Figura 26: Gráfico MEDA.
Gracias a este gráfico el analizador del estudio se puede hacer una idea de las relaciones que
existen entre los consumos de algunos tipos de carnes y otros según la región y también el
riesgo de sufrir un paro cardíaco dependiendo de los tipos de carnes ingeridos. No obstante,
en todo caso se detectan relaciones entre variables sin causalidad, aunque el dominio del
problema puede indicar dicha causalidad, que sería confirmada con las pruebas adecuadas.
Finalmente, para complementar todas estas herramientas se presenta oMEDA que consiste en
un algoritmo MEDA basado en observaciones al que se le añade una variable diseñada por el
analizador de forma que se pueda asignar una serie de pesos direccionables dependiendo de
las observaciones que se pretendan analizar de forma individual. De esta forma si se quieren
comparar dos agrupaciones detectadas con el diagrama de dispersión se le asigna a la variable
añadida por ejemplo 1 a los datos correspondientes a una agrupación, ‐1 a los datos
correspondientes a otra agrupación y 0 en el resto de posiciones. El resultado es un diagrama
de bandas que muestra las variaciones entre ambas agrupaciones.
5.2. CLASIFICADORES
Una vez hecho el análisis multivariable es momento de hablar de clasificadores ya que será
una parte importante también en este proyecto. Una vez caracterizado el experimento, el
clasificador debe ser capaz de recibir una nueva muestra y poder clasificarlo en la clase
correspondiente de forma que el error producido en la clasificación sea lo menor posible. Hay
muchos tipos de clasificadores pero básicamente se dividen en dos grupos principales:
clasificación supervisada y clasificación no supervisada.
En la clasificación supervisada se cuenta con clases bien definidas gracias a agrupaciones
realizadas con anterioridad utilizando muestras y las herramientas propuestas. Este tipo de
60
clasificación se divide en dos fases principales. En una primera fase se utiliza un conjunto de
entrenamiento o aprendizaje (para el diseño del clasificador) y otro conjunto que será utilizado
para test o clasificación. De esta forma se obtiene el modelo de regla general para la
clasificación. En la segunda fase se procede a la clasificación de las muestras de las que no se
conoce la clase a la que pertenecen. En el caso de la clasificación no supervisada no existe el
conocimiento anterior a la clasificación por lo que no se puede realizar el entrenamiento
comentado. La idea aquí es poder distinguir las agrupaciones o modelos de forma que se
puedan separar distintas clases sin conocimiento previo. El proyecto aquí presentado se centra
en las técnicas de clasificación supervisada ya que proporcionará resultados de forma más
precisa al tener la capacidad de crear un grupo de entrenamiento.
Hay muchos tipos de clasificadores pero a continuación se presentan los más importantes.
Cada uno tiene una metodología distinta a la hora de resolver el problema de clasificación y la
variación en la efectividad depende de los problemas que se traten.
5.2.1. ALGORITMOS DE CLASIFICACIÓN POR VECINDAD
Esta técnica es una de las más conocidas y está basada en criterios de vecindad. Una de las
ventajas principales de este tipo de clasificación es la simplicidad conceptual ya que la idea es
realizar la clasificación de una muestra basándose en la clase a la que pertenecen los vecinos
más próximos. En muchas ocasiones, es razonable estimar que si las observaciones más
cercanas pertenecen a una clase determinada, la nueva observación pertenecerá a esa misma
clase. En este apartado se presenta tanto la regla del vecino más próximo como la de los K
vecinos más próximos, prosiguiendo con algunas variaciones existentes.
La regla del vecino más próximo (NN – Nearest Neighbour) se basa simplemente en asignar a
una nueva observación la clase de la observación más cercana a ésta. Esta forma de
clasificación puede producir errores en el caso de que, por ejemplo, la nueva observación se
posicione en la zona de transición entre dos agrupaciones. Lo que ocurrirá entonces es que
puede ser clasificada de forma correcta o incorrecta, lo que no da mucha seguridad a la hora
de realizar la clasificación.
Como mejora a esta técnica aparece la regla de los K vecinos más cercanos (KNN – K Nearest
Neighbors) que no se limita al más cercano, sino a realizar un sondeo de los K vecinos más
cercanos y asignar la clase por mayoría. El número K se establece a partir de un grupo de
observaciones de entrenamiento de forma que se haga uso del valor óptimo. En caso de no
seleccionar un buen valor de K se puede obtener una efectividad inferior que con el método
NN. Una vez se obtiene una nueva observación, se detectan las K observaciones más cercanas
a éstas y se someten a un proceso de votación. La clase ganadora será a la que corresponderá
la nueva observación. En caso de empate se definen una serie de métodos de resolución de
empates como puede ser asignar la clase de la observación más cercana o seleccionar la clase
cuyas observaciones se encuentren en media más cercanas a la nueva observación. En la figura
27 se muestra un ejemplo de clasificación KNN con K = 5. En este caso se obtiene una nueva
observación y realizando el recuento de los 5 vecinos más próximos se le asigna la clase 2 ya
que es la que obtiene más votos.
61
Figura 27: Clasificador KNN, K=5.
Además de estos métodos también se presentan 3 variedades del KNN:
Regla K‐NN con rechazo: En esta variante, cuando se obtiene una nueva observación,
se realiza la votación de los K vecinos más próximos como antes pero en este caso si el
número máximo obtenido en la votación no supera un umbral, la nueva observación
queda sin clasificación. De esta forma hay una alta probabilidad de que las
observaciones que finalmente sean clasificadas, queden clasificadas de forma correcta.
Las observaciones que quedan sin clasificación se corresponden con zonas de
fronteras de decisión y son asignadas a la clase de rechazo R. Llamando T al número
total de clases del experimento, el umbral se selecciona entre los valores K/T y K. Este
método se puede utilizar en casos en los que se necesite una alta precisión en la
clasificación, estudiando de forma individual las observaciones no clasificadas.
Regla K‐NN por distancia media: Esta variación se basa simplemente en asignar al
nuevo caso la clase que se encuentre en media a menor distancia entre los K vecinos.
De esta forma tendrá más relevancia la distancia de las observaciones que la propia
votación de las clases. Puede llevar a error en el caso de que una observación nueva
quede demasiado cerca de una observación de una clase que no le corresponde, ya
que se le asignará esa aunque haya un grupo de observaciones más numeroso de su
clase que estén más lejanas.
62
Clasificador de la distancia mínima: Este tipo de clasificador no se basa en los K
vecinos más próximos, sino que selecciona un representante de cada clase con el que
se va a asignar la clase a las nuevas observaciones. A la nueva observación se le
asignará la clase cuyo representante se encuentre más cercano a dicha observación. La
efectividad en la clasificación de este método dependerá radicalmente de la selección
del representante de cada clase, ya que si no está bien elegido puede suponer un error
muy elevado.
K‐NCN – K Nearest Centroid Neighbourhood (Vecino centroide más cercano):
Dependiente de la distribución espacial de los prototipos de su alrededor. No sólo
tiene en cuenta los vecinos más próximos sino que se tiene en cuenta cómo se
encuentran distribuidos (vecindad envolvente).
Estos son los casos más generales de clasificación por vecindad, pero en este entorno se han
desarrollado también métodos de asignación de pesos a los casos ya que no todas las
observaciones tienen la misma importancia a la hora de influenciar a la clasificación de una
nueva observación. Un tipo de peso muy común consiste en multiplicar el voto por la inversa
de la distancia a la nueva observación. De esta forma los casos que se encuentren más
cercanos tendrán más influencia en la decisión que los más lejanos, pero todos afectarán de
una manera u otra.
5.2.2. ÁRBOLES DE CLASIFICACIÓN:
Los métodos basados en árboles de clasificación son ampliamente conocidos gracias a su
simplicidad y sus buenos resultados. El árbol de clasificación se elabora a partir de un nodo raíz
y se desarrolla de la parte superior a la inferior por medio de los nodos intermedios
terminando con los nodos hoja que son los finales (donde se asigna la clase). Los nodos que
salen de otro nodo son sus nodos hijos y para los nodos hijos dicho nodo será el nodo padre.
Cada rama que sale de un nodo a los hijos tiene una variable de decisión correspondiente con
una variable del problema que se esté tratando que queda sometida a un umbral. El árbol se
construye utilizando los datos de entrenamiento (al ser un sistema de clasificación
supervisada). Una vez terminada la elaboración del árbol se puede llevar a cabo un proceso de
clasificación de una nueva observación, que comienza en el nodo raíz y se va moviendo desde
arriba hacia abajo dependiendo de los valores de las variables involucradas en el experimento
llegando finalmente a un nodo hoja donde se le asigna la clase correspondiente.
Esta estructura en árbol se muestra en la figura 28, donde se supone un experimento simple
de selección de enfermedades dependiendo de componentes en la sangre. La persona a tratar
se encuentra enferma y lo que se busca con este experimento es detectar de forma rápida en
una primera prueba de sangre si se trata de anemia o diabetes. Si no es ninguna de las dos
pues se considera que es otra enfermedad para la que habrá que realizar pruebas concretas
posteriores. De esta forma las tres clases serán diabetes, anemia y otras enfermedades. El
nodo raíz es persona enferma y las variables involucradas son g (nivel de glucosa en sangre)
con su correspondiente umbral x, y la variable h (nivel de hierro en sangre) con su
63
correspondiente umbral y. Se comienza desde persona enferma y se desciende con el nivel de
glucosa, que en caso de estar por encima del umbral se detecta que la persona sufre de
diabetes (nodo hoja). En caso de estar por debajo se llega al nodo intermedio y se continúa
con el proceso de clasificación observando el nivel de hierro en sangre. En caso de ser superior
al umbral se detecta que la persona sufre de anemia y en caso de estar por debajo se clasifica
como “otras enfermedades”.
Figura 28: Árbol de clasificación.
El caso mostrado en la figura 28 es muy simple para comprender el funcionamiento de los
árboles de clasificación pero en un experimento más complejo se pueden dar muchas más
clases y varios nodos hoja pueden estar etiquetados con el mismo nombre de clase. La
complejidad del árbol de clasificación es el número de clases involucrados en el experimento.
En el ejemplo de la figura 28 la complejidad sería de 3. Una característica importante de los
árboles de clasificación es que viendo el camino recorrido desde el nodo raíz hasta el nodo
hoja se puede conocer información de relevancia para el experimento. En el ejemplo anterior
se podría conocer que la persona sufre de anemia, pero además si se analiza el camino
recorrido se sabe que su nivel de glucosa se mantiene por debajo de un umbral.
También presenta algunos problemas ya que si por ejemplo en la primera variable de decisión
del nodo raíz los valores límite se encuentran cercanos, podría ocurrir que una nueva
observación fuera mal clasificada desde el principio condicionando su recorrido a lo largo del
árbol de forma errónea.
5.2.3. ANÁLISIS DISCRIMINANTE LINEAL
El análisis discriminante se basa en la utilización de las llamadas funciones discriminantes que
son funciones matemáticas obtenidas gracias al grupo de observaciones de entrenamiento. La
variable dependiente (bloque Y) está etiquetada con las clases del experimento y las variables
independientes (bloque X) son las tomadas en el experimento para cada observación. Se basa
en encontrar relaciones lineales entre estas últimas variables de forma que puedan ser
64
clasificadas nuevas observaciones por medio de la discriminación de dichas funciones. Ninguna
variable discriminante puede ser combinación lineal de otras variables discriminantes. Para
encontrar las combinaciones lineales de las variables que más discriminen entre los grupos se
utilizan expresiones como la siguiente (funciones discriminantes):
… , , … , , .
En particular, en el Análisis Discriminante de Ficher, la función debe maximizar el criterio:
11∑ ̅
11∑ ∑ ̅
∈
Siendo di = u’xi; i=1, …, n, que se corresponde con los valores de la función discriminante.
5.2.4. ANÁLISIS DISCRIMINANTE POR MÍNIMOS CUADRADOS PARCIALES
En un primer lugar se diseñó la técnica de mínimos cuadrados parciales (PLS – Partial Least
Squares) como herramienta de regresión estadística. Hoy en día es una de las técnicas de
regresión más utilizadas. La modificación de dicho método con propósitos de clasificación es la
llamada análisis discriminante por mínimos cuadrados parciales (PLS‐DA – Partial Least Squares
‐ Discriminant Analysis).
Como en el Análisis Discriminante Lineal, en PLS‐DA el bloque Y describe las clases a las que
pertenecen las observaciones. En un problema de clasificación de más de dos clases será
necesario crear una matriz Y con tantas columnas como clases.
5.2.5. REDES BAYESIANAS
Se basan en el estudio de las relaciones de dependencia entre un conjunto de variables.
Antiguamente los cálculos se realizaban a mano pero en la actualidad existen una serie de
técnicas útiles para el aprendizaje de la estructura como de parámetros correspondientes a
una clase determinada. Las redes bayesianas trabajan básicamente con probabilidades
obtenidas de un estudio de dependencias entre variables. De esta forma, se representa con
una forma similar al árbol pero con implicaciones distintas como se muestra en la figura 29. En
dicha figura se observa un experimento psicológico en el que se distinguen los nodos padres
que son los situados más arriba que no están apuntados por ninguna flecha, los nodos hijos
que son los apuntados por las flechas y las razones de dependencia. Las relaciones entre
variables en este tipo de redes quedan descritas por la posición de la flecha utilizada. La
variable apuntada por una flecha es dependiente de la variable donde se sitúa el origen de la
flecha. De esta forma, una variable puede ser dependiente de una o varias variables pudiendo
tener así más de un nodo padre.
65
Figura 29: Red Bayesiana.
En las redes Bayesianas se distingue entre 3 tipos principales de nodos:
Nodos en secuencia: suponiendo que el nodo es B, y otros nodos A y C: “ ABC “
Nodos divergentes: “A B C”
Nodos convergentes: “A B C”
Al realizar la representación de dependencias que muestra la figura 29, se puede hablar
también de probabilidades condicionales. De esta forma se puede hablar de la probabilidad de
un nodo hijo habiéndose dado el caso del nodo padre. A la probabilidad del padre de un nodo
de la red se le llama Pa ( ). Por ejemplo, en la red de la figura 29, Pa(salud) = Alimentación,
Ejercicio físico. La generalización de probabilidades de un nodo dependerá de la probabilidad
de su nodo padre. De esta forma la probabilidad conjunta está compuesta por una serie de
productos de probabilidades como se muestra a continuación:
1, 2, … , , .
Uno de los clasificadores Bayesianos más utilizados es el llamado clasificador Bayesiano simple.
Este clasificador lo que hace es utilizar la regla de Bayes para la obtención de la probabilidad
posterior de cada clase (Ci), suponiendo que A es la probabilidad a priori de las variables:
| |
Si se suponen las variables como independientes, lo único que se hace es multiplicar dicha
expresión para todos los valores de A.
66
5.2.6. MÁQUINAS DE VECTORES SOPORTE
La mayoría de herramientas de clasificación buscan principalmente obtener el mínimo error
posible. En este ámbito las SVM realizan un enfoque distinto ya que su objetivo no es obtener
el mínimo error, sino que lo que se busca es que los resultados sean lo más fiables posibles,
asumiendo el posible error producido. Para ello, un concepto característico de las SVM es el de
margen, que es el espacio de separación entre las clases. Se busca que el margen sea lo mayor
posible.
Las SVM son clasificadores lineales. No obstante, por medio de la introducción de funciones
kernel, pueden convertirse en clasificadores no lineales. Se parte de funciones sencillas con el
objetivo de encontrar una solución óptima. El siguiente paso es la ampliación del tipo de
funciones sin apenas aumentar la complejidad del proceso.
6. DISEÑO DE LAS PRUEBAS
La red disponible para la realización de las pruebas es una red doméstica inalámbrica con un
punto de acceso (router). Los equipos que se conectan a la red son 3 ordenadores portátiles y
1 dispositivo móvil (figura 30). La seguridad de dicha red es una clave WEP de 128 bits que
protege la información privada de la red. Se busca realizar una serie de observaciones de
duración determinada en las que se captura las siguientes variables para la caracterización del
tráfico de la red: nº de paquetes de difusión, nº de solicitudes de autenticación, nº de
solicitudes de deautenticación,nº de CTS y nº total de paquetes capturados. Durante la captura
de paquetes se trabaja con tráfico normal de la red y se aplican 3 ataques distintos
produciendo así alteraciones en el tráfico. Con esas variables se utilizan las técnicas de
clasificación multivariante explicadas anteriormente caracterizando así distintos tipos de
tráfico siendo capaces posteriormente de clasificar nuevas observaciones en el tráfico
correspondiente, ya sea tráfico normal o tráfico producido por uno de los ataques.
Figura 30: Red para la realización de las pruebas.
67
A continuación se presenta el diseño de las pruebas desde la captura de los paquetes y toma
de observaciones hasta la clasificación. En el siguiente capítulo se presentan los resultados de
dichas pruebas y su correspondiente análisis.
6.1. CAPTURA DE PAQUETES
La captura de paquetes se realiza por medio de la ejecución de un fichero de programación en
C con la librería libpcap escrito y compilado bajo el sistema operativo Linux. En el anexoI se
presenta el código utilizado debidamente comentado. Con este programa, se obtienen una
serie de observaciones de los paquetes transmitidos en la red. Las capturas duran 30 segundos
durante los cuales se capturan todos los paquetes realizando un reconocimiento del tipo de
paquete que es. En el análisis subsiguiente, cada intervalo de 30 segundos se corresponde con
una observación.
El código principal del fichero comienza abriendo el dispositivo inalámbrico en modo
promiscuo y se extrae la dirección de red y la máscara de red. Se inicia la captura en el
dispositivo controlada por tiempo (30 segundos) y se captura paquete a paquete. A cada
paquete se le aplica una función que analiza en primer lugar el campo de control de trama
distinguiendo entre trama de administración, control o datos y dentro de esos tipos se
distinguen los subtipos:
Administración: Solicitud y respuesta de asociación.
Administración: Solicitud de autenticación y de deautenticación.
Control: RTS, CTS y ACK.
Datos.
También es necesario analizar si se trata de un paquete difusión, por lo que primero se
observan los bits “toDs” y “FromDs” del campo control de trama para ver si la comunicación se
está realizando entre estaciones, de una estación a un punto de acceso, de un punto de acceso
a una estación o entre puntos de acceso, ya que dependerá de esto la posición de la dirección
MAC destino del paquete. Una vez se detecta la posición de esta información simplemente se
extrae y se analiza incrementando así la variable correspondiente. Una vez se conoce toda la
información correspondiente a los paquetes capturados durante 30 segundos, se realiza un
volcado de los datos a un fichero de texto. Este fichero de texto está inicialmente vacío y se va
rellenando de valores numéricos con una estructura determinada. Los valores de las variables
correspondientes a una observación se almacenan en forma de fila separados por un espacio.
De esta forma en el fichero de texto se observan una cantidad de filas numéricas formadas por
valores separados por un espacio, lo que es similar a la matriz explicada en el apartado
anterior para realizar el estudio PCA. Se ha elegido esta estructura de almacenamiento debido
al posterior análisis con la herramienta Matlab. Al estar los datos con dicha configuración,
68
pueden ser utilizados de forma rápida y sencilla por dicha herramienta sin causar problemas
adicionales de compatibilidades.
Una vez elaborado el código C se crea un ejecutable y se lleva al sistema operativo Wifiway.
Wifiway se va a utilizar a través de la máquina virtual VMware. Se crea una nueva partición en
el equipo con el sistema operativo Wifiway 3.0.1 con las configuraciones correspondientes de
forma que se pueda utilizar Windows 7 al mismo tiempo que se trabaja desde la máquina
virtual con Wifiway. El mayor problema de la máquina virtual es que no reconoce la tarjeta
inalámbrica del ordenador portátil por lo que se trabaja con una tarjeta inalámbrica externa
cuya comunicación se realiza por medio del puerto USB. Una vez se arranca Wifiway se pone la
interfaz wlan0 en modo monitor y se ejecuta el programa de captura. Para poner la interfaz en
modo monitor se usa el siguiente comando:
" 0"
Será necesario disponer de un fichero de texto vacío en el mismo directorio con el nombre
indicado en el programa de captura para el almacenamiento de los datos obtenidos. Una vez
en este punto se procede a la distinción de 4 tipos de tráfico en función de los ataques a
analizar. Estos ataques se realizan durante la captura de paquetes.
6.2. EJECUCIÓN DE ATAQUES
Como se ha comentado, se va a hacer distinción entre 4 tipos distintos de tráfico en la red
inalámbrica. El primer tipo de tráfico es el tráfico normal en el que no se realiza ningún tipo de
alteración. Los otros tres restantes se presentan a continuación mostrando los comandos
utilizados para llevarlos a cabo: Ataque de deautenticación, de inyección y hombre en el medio
(Man in the middle). Como la información correspondiente a la estructura de dichos ataques
ya ha sido comentada, se procede a la presentación de la ejecución de los ataques. Paralelo a
la ejecución del programa de captura y a la realización de cualquiera de los ataques, se
necesitará un terminal abierto en el que se estén capturando las respuestas ya que se trabaja
con la herramienta Aircrack. El comando utilizado es:
“airodump‐ng –c 12 ‐‐bssid 14:D6:4D:93:E4:4C –w out mon0”
En el commando airodump se especifica el canal por el que se transmite la información de la
red (12) el bssid del punto de acceso (14:D6:4D:93:E4:4C), el fichero de salida (out) y la interfaz
con la que se captura el tráfico (mon0).
Para el ataque de inundaciones de solicitudes de deautenticación se utiliza el comando:
“aireplay‐ng ‐0 0 –a 14:D6:4D:93:E4:4C mon0”
La opción “‐0” indica ataque de deautenticación de la suite Aircrack y el siguiente 0 indica que
se estén mandando solicitudes de deautenticación continuamente. Este número puede ser
cambiado por un número específico pero para que sea más efectivo se realiza la inundación de
69
tantas solicitudes como sea posible. Con la opción “‐a” se indica la dirección MAC del punto de
acceso y finalmente se añade la interfaz a través de la que se realizan las comunicaciones. Al
ejecutar el comando se comienza a producir una inundación de desautenticaciones hasta que
el ataque es parado por el atacante. Para la detección de este ataque será muy interesante la
variable “solicitud de deautenticación” de las obtenidas en las observaciones, ya que se
debería producir un incremento radical en su valor.
De forma adicional se presenta una modificación en la ejecución en este ataque para que no
pueda ser detectado por el total de paquetes de la red. Esta opción permite el envío de un
número determinado de paquetes de deatenticación a baja tasa en lugar de estar en envío
continuo. De esta forma se necesita más tiempo para obtener la clave de la red pero no
levantará tantas alarmas. En este caso el comando es:
“aireplay‐ng ‐0 3 –a 14:D6:4D:93:E4:4C mon0”
En el caso del ataque por inyección el comando es el siguiente:
“aireplay‐ng ‐3 –b 14:D6:4D:93:E4:4C –h 5C:AC:4C:24:17:4B mon0”
Con la opción “‐3” se indica el reenvío estándar de peticiones ARP, luego con “‐b” se indica la
dirección MAC del punto de acceso y con “‐h” la dirección MAC de un cliente asociado a la red
terminando con la interfaz utilizada. La variable interesante que podría alertar que se está
produciendo un ataque de estas características sería “paquete ARP”. El problema que surge
con esta variable es que hace falta desencriptar el mensaje WEP para ver si se trata de un
paquete ARP ya que esa información no se encuentra disponible en la cabecera 802.11. Dado
que las solicitudes ARP son de difusión y suelen producir un ACK al ser recibidas, una
alternativa indirecta y menos costosa sería observar estas variables ya que esta información si
puede ser obtenida sin necesidad de realizar el descifre del mensaje.
Finalmente se presenta el ataque man in the middle. Como se comentó anteriormente, la
forma de detectar este ataque es analizando la producción anormal de ruido en el canal de
transmisión de la red inalámbrica. Esto puede ser producido de varias maneras. En este caso
concreto se lleva a cabo un ataque man in the middle introduciendo ruido a través de
colisiones producidas por una inundación de solicitudes de asociación al punto de acceso. Se
realiza una sucesión de creación de clientes inalámbricos falsos que van mandando peticiones
de asociación al punto de acceso produciendo así un incremento de tráfico recibido por el
punto de acceso que provoca colisiones por las que la calidad de las comunicaciones en ese
canal se verá afectada. Como ya se comentó la herramienta es Mdk3 y el comando:
“mdk3 a –a 14:D6:4D:93:E4:4C”
Indicando como en el resto de ataques la dirección MAC del punto de acceso. La variable
relevante en este caso será la de “solicitud de asociación”.
70
6.3. ANÁLISIS MULTIVARIANTE
Una vez se obtienen las observaciones de las distintas variables, es momento de analizar el
gráfico de dispersión, y realizar un estudio de las dependencias con PCA, MEDA y oMEDA. Este
análisis se lleva a cabo con la herramienta Matlab y con una serie de códigos que se presentan
en el anexo x.
Para poder realizar el estudio con PCA primero se hace un pre‐procesamiento a los datos para
que queden centrados en la media, para lo que se usa el código “preprocess2D.m”. De la
ejecución de dicho código se obtienen los datos pre‐procesados con los que se puede realizar
el estudio de dependencias. En primer lugar se observan los gráficos de dispersión con el
código “plot_scores_pca.m” que muestra un gráfico como el que se ha explicado
anteriormente. Si no hay una diferenciación clara en el gráfico de los distintos grupos de
tráficos quiere decir que las variables utilizadas no tienen poder discriminativo, por lo que
habrá que rediseñar el conjunto de variables capturadas. Si se obtienen los tráficos bien
diferenciados se puede proceder con el estudio de MEDA. Para obtener el diagrama MEDA se
usa el código “meda_pca.m” al que hay que introducirle como argumento los datos pre‐
procesados, las componentes principales a tener en cuenta, el tipo de pre‐procesamiento
utilizado, un umbral para la discretización de la matriz MEDA, el tipo de gráfico a mostrar y las
variables. El tipo de gráfico a mostrar podrá ser en niveles de grises dependiendo si existe
mayor o menor dependencia o también puede ser directamente discretizado de forma que
aparezca blanco donde no hay dependencia y negro donde sí la hay. En el gráfico obtenido con
este código se pueden obtener resultados para la compresión del experimento
Finalmente, una vez se ha caracterizado el experimento, se puede continuar con oMEDA, cuyo
código es “omeda_pca.m”, de forma que se realice un estudio concreto de algún aspecto de
relevancia para el experimento. En el caso de este proyecto será interesante observar qué
variables se incrementan desde el tráfico normal al producido con un ataque, de forma que
quede bien claro la variable a tener en cuenta. También se puede ver la tendencia general de
alguna agrupación en concreto o la comparación entre dos tipos de tráficos de ataques. Para la
ejecución de oMEDA, se introduce por argumento un vector con el que se dan distintos pesos
a las observaciones dependiendo desde donde hacia dónde se quiere ver la variación en las
variables. Por ejemplo, si se quiere ver lo que cambia del tráfico normal al tráfico del ataque 1,
se asignaría ‐1 a las observaciones de tráfico normal, 1 a las observaciones de tráfico de ataque
1 y 0 al resto de observaciones. Al ejecutarlo se obtiene el diagrama de bandas aclaratorio.
Todos los códigos correspondientes tanto al análisis PCA, MEDA y oMEDA pertenecen a la
“Exploratory Data Analysis Toolbox” de Matlab [9]”.
6.4. CLASIFICADORES
Una vez hemos explorado los datos y considerado que las variables capturadas tienen
información discriminativa, se hace uso de una serie de códigos de Matlab para la aplicación
de los clasificadores explicados anteriormente en este documento. A continuación se muestra
el procedimiento a seguir en cada caso dependiendo del clasificador a utilizar. Primero se
71
realiza un entrenamiento del clasificador procediendo después a clasificar nuevas
observaciones de la red. Una vez clasificadas las nuevas observaciones se realiza un estudio del
error producido por cada uno de los clasificadores pudiendo así comparar la efectividad de
unos y otros. La métrica del error es bastante sencilla pero efectiva y consiste en realizar una
comparación entre la clase asignada por el clasificador a la nueva observación y la clase que
debería haber sido asignada. Se suman todos los casos en los que el clasificador haya hecho
bien su trabajo y se divide por el número total de nuevas observaciones clasificadas,
obteniendo así un porcentaje de error del total. Siendo M el número total de nuevas
observaciones a clasificar y C el número de nuevas observaciones bien clasificadas, el cálculo
del error se realiza con la siguiente expresión:
% 100
Para el algoritmo del vecino más próximo y para el del K vecinos más próximos se utiliza el
mismo código Matlab “knnclassify.m” (códigos correspondientes a los algoritmos basados en
vecindad en el anexo III). A este código hay que introducir por argumento tanto los datos para
la calibración (observaciones y etiquetas indicando la clase a la que pertenecen) como el
número K y las nuevas observaciones a ser clasificadas con lo que se obtiene un vector que
contiene las clases correspondientes a las nuevas observaciones clasificadas. Para la distinción
de clases se va a utilizar el valor 1 para el tráfico normal, 2 para el tráfico correspondiente al
ataque de deautenticación, 3 para el de re‐inyección de peticiones ARP y 4 para el de man‐in‐
the‐middle. Con este mismo código se puede realizar un estudio y comparación de los dos
algoritmos simplemente cambiando los valores de K. Para K=1 se estará trabajando con el
algoritmo del vecino más próximo y con un valor de K superior se estará trabajando con el
algoritmo de los K vecinos más próximos por votación. Para el caso de los K vecinos más
próximos se debería dividir las observaciones en dos grupos, uno para comprobar qué K es el
más adecuado para este experimento y otro para el entrenamiento del clasificador. La
importancia de ver qué valor de K es el óptimo para este experimento es fundamental porque
la efectividad de la clasificación va a depender directamente de la elección de dicho valor y no
hay un valor generalizado, ya que dependerá de la distribución de las observaciones. Se
utilizará un conjunto de observaciones para el entrenamiento del clasificador. A continuación
se tomará otro conjunto de observaciones con las que se evaluará el valor óptimo de K al
realizar la clasificación gracias al estudio del error. Finalmente se procederá a la clasificación de
una tercera tanda de observaciones, con las que, usando el valor óptimo obtenido de K se
llegará al cálculo final del error.
En el caso del árbol de clasificación (códigos correspondientes en el anexo IV) primero se
utiliza un comando para el entrenamiento del clasificador obteniendo así el árbol y después se
hace uso de otro para la clasificación. El código para el entrenamiento es “classregtree.m” y el
de clasificación “eval.m”, que usa el árbol obtenido por el anterior código para la clasificación
de las nuevas observaciones.
Para el análisis discriminante lineal (códigos correspondientes en el anexo VI) se usa
“classify.m” indicando “linear” entre los argumentos, y para el cuadrático simplemente se
cambia “linear” por “quadratic”. Si el clasificador a utilizar es el bayesiano, la función es
“NaiveBayes.fit.m” obteniendo así la red de Bayes (anexo VII) y evaluándola posteriormente
72
para las nuevas observaciones con la función “predict.m”. Si el clasificador a utilizar es pls‐da,
se utiliza más de un código Matlab. El código para la creación del modelo pls‐da se encuentra
bajo el nombre de “clasiPlsda.m” (anexo V) y de ese código se obtiene el modelo pls‐da de los
datos de entrenamiento. Para poder evaluar las nuevas observaciones obteniendo la
clasificación se usa el código “plspred.m” (perteneciente a la toolbox PLS‐DA [11])al que hay
que introducir por argumento las nuevas observaciones y el modelo pls‐da obtenido con la
función anterior. A la clasificación obtenida se le puede calcular el error pero de forma
adicional se puede introducir como argumento a la función “plspred.m” las clases
correspondientes de las nuevas observaciones y el código calcula el porcentaje de éxito, por lo
que el de error será 100‐% (éxito).
75
Una vez realizadas todas las pruebas explicadas en el capítulo anterior se procede a la
presentación de los resultados y conclusiones obtenidas con las correspondientes correcciones
a lo largo del proceso.
7. ANÁLISIS DE RESULTADOS
En cuanto a la captura de paquetes de la red se han tomado medidas finalmente de las
variables: ACK, paquetes de difusión, solicitud de autenticación, solicitud de deautenticación,
CTS y número total de paquetes capturados durante el período. Se han realizado en total 350
observaciones de las 7 variables. La duración de las observaciones ha sido de 30 segundos y se
han realizado en tandas de 10 observaciones con 60 segundos entre tandas. Se ha esperado
60 segundos entre tandas para que no se mezclen las observaciones correspondientes a
tráficos distintos. El tiempo de parada entre una observación y la siguiente dentro de las 10 ha
sido de 5 segundos (figura 31). Cada tanda de 10 observaciones se corresponde con un tipo de
tráfico distinto. Así se ha ido rotando entre tráfico normal, ejecución del ataque 1, ejecución
del ataque 2 y ejecución del ataque 3. La figura 32 muestra una captura durante la toma de
datos realizando el ataque 1:
Figura 31: Estructura de las observaciones.
76
Figura 32: Ataque de deautenticación.
En la pantalla superior en negro se está ejecutando el código, en la intermedia se está
produciendo las solicitudes de deautenticación al punto de acceso y en la más baja se está
utilizando airodump para la captura de respuestas. Las observaciones obtenidas se presentan
en la tabla 3:
Tipo de tráfico
Nº ACK
Nº paq Broad.
Solicitud autentic.
Solicitud deaunt.
CTS Total paquetes
TN (1) 4142 154 0 1 10 8347
TN (1) 4138 157 0 0 10 8097
TN (1) 4327 151 0 0 10 8494
TN (1) 5943 163 0 0 14 11811
TN (1) 4619 153 0 0 10 9183
TN (1) 4866 158 0 0 15 9423
TN (1) 4457 150 0 0 8 8677
TN (1) 6224 152 0 0 11 11655
TN (1) 7802 148 0 0 9 14910
TN (1) 4415 154 0 0 15 8549
A1 (2) 4367 8061 0 7905 12 16356
A1 (2) 4271 8131 2 7971 11 16357
A1 (2) 4292 8129 0 7976 13 16205
A1 (2) 3924 8099 0 7946 9 15444
A1 (2) 4299 8170 2 8015 10 16286
A1 (2) 3904 8210 0 8053 12 15581
A1 (2) 4299 8089 0 7936 13 16233
A1 (2) 4115 7948 0 7799 12 15771
A1 (2) 3736 8097 0 7946 12 15161
A1 (2) 4358 6488 0 6337 10 14936
A2 (3) 3693 5341 0 0 11 12385
A2 (3) 3493 13046 0 0 9 19749
77
A2 (3) 3703 13368 0 0 13 20361
A2 (3) 3397 12663 0 0 7 19047
A2 (3) 3813 13453 0 0 12 20562
A2 (3) 3628 13020 0 0 13 19998
A2 (3) 3739 14122 0 0 11 21293
A2 (3) 3495 13398 0 0 9 20109
A2 (3) 3783 13258 0 0 12 20485
A2 (3) 3286 11226 0 0 9 17592
A3 (4) 4228 317 786 0 13 9161
A3 (4) 4425 152 848 0 13 9526
A3 (4) 4348 156 843 0 12 9421
A3 (4) 3739 150 726 0 11 8108
A3 (4) 4256 157 836 0 10 9286
A3 (4) 4239 153 825 0 13 9195
A3 (4) 4688 154 879 0 13 9979
A3 (4) 3937 147 770 0 12 8569
A3 (4) 4171 156 808 0 11 9034
A3 (4) 4147 150 780 0 13 8843
TN (1) 3591 152 23 0 12 7229
TN (1) 3294 151 0 0 9 6622
TN (1) 3883 151 0 0 11 7816
TN (1) 3436 155 0 0 13 6858
TN (1) 3375 153 0 0 14 6701
TN (1) 3542 161 0 0 13 6986
TN (1) 3644 151 0 0 9 7251
TN (1) 3656 152 0 0 15 7224
TN (1) 3926 168 0 0 13 7844
TN (1) 3791 150 0 0 14 7636
A1 (2) 3631 7963 0 7812 12 15140
A1 (2) 3515 8135 0 7984 11 14999
A1 (2) 3955 8078 0 7932 14 15673
A1 (2) 3835 8097 0 7943 8 15477
A1 (2) 3425 8150 0 8001 9 14894
A1 (2) 3873 8157 0 8003 12 15696
A1 (2) 3627 8087 0 7931 12 15217
A1 (2) 3402 8104 0 7923 11 14876
A1 (2) 3508 8147 0 7967 12 15062
A1 (2) 3836 5833 0 5683 11 13410
A2 (3) 3444 161 0 0 14 6895
A2 (3) 3668 152 0 0 12 7391
A2 (3) 3436 158 0 0 14 6935
A2 (3) 3603 505 0 0 14 7549
A2 (3) 2061 9886 0 0 8 13907
A2 (3) 1942 9920 0 0 8 13700
A2 (3) 2362 9358 0 0 7 14043
A2 (3) 1926 8958 0 0 9 12735
A2 (3) 2009 9685 0 0 6 13635
A2 (3) 2011 9009 0 0 9 12958
78
A3 (4) 3643 324 689 0 14 8005
A3 (4) 3647 152 703 0 16 7885
A3 (4) 3947 154 757 0 13 8500
A3 (4) 4457 155 800 0 13 9270
A3 (4) 3824 152 725 0 12 8188
A3 (4) 3869 151 759 0 11 8434
A3 (4) 4197 156 818 0 12 9115
A3 (4) 4126 150 812 0 12 9009
A3 (4) 3938 160 800 0 13 8749
A3 (4) 4706 151 895 0 16 10092
TN (1) 3866 156 23 0 8 7632
TN (1) 4302 150 0 0 12 8545
TN (1) 3745 153 0 0 10 7442
TN (1) 3765 156 0 0 13 7507
TN (1) 3562 156 0 0 11 7120
TN (1) 3662 155 0 0 13 7330
TN (1) 3269 157 0 0 14 6513
TN (1) 3659 158 0 0 10 7184
TN (1) 3265 155 0 0 11 6509
TN (1) 3306 161 0 0 14 6711
A1 (2) 3358 7934 0 7774 17 14502
A1 (2) 3246 8124 0 7973 9 14473
A1 (2) 3561 8074 0 7921 14 15083
A1 (2) 3601 8072 0 7922 13 15243
A1 (2) 3687 8088 0 7936 12 15347
A1 (2) 3679 8112 0 7951 13 15361
A1 (2) 3757 8089 0 7936 13 15508
A1 (2) 3503 8102 0 7944 13 14949
A1 (2) 3317 8097 0 7946 11 14657
A1 (2) 3673 8190 0 7995 12 15384
A2 (3) 3845 276 0 119 13 7813
A2 (3) 3676 149 0 0 11 7294
A2 (3) 3843 166 0 0 12 7555
A2 (3) 2870 6170 0 0 11 11689
A2 (3) 1875 9772 0 0 10 13444
A2 (3) 2166 9468 0 0 8 13613
A2 (3) 2050 9188 0 0 8 13136
A2 (3) 2224 9532 0 0 8 13803
A2 (3) 1955 9124 0 0 7 12992
A2 (3) 2172 9139 0 0 8 13362
A3 (4) 3744 343 734 0 11 8380
A3 (4) 3989 183 794 0 14 8782
A3 (4) 3279 152 646 0 14 7169
A3 (4) 3818 162 744 0 15 8297
A3 (4) 3417 154 670 0 13 7448
A3 (4) 3322 154 623 0 11 7073
A3 (4) 3672 160 694 0 13 7839
A3 (4) 3807 153 692 0 13 7981
79
A3 (4) 3798 154 712 0 15 8088
A3 (4) 3712 157 701 0 9 7934
TN (1) 3941 153 24 0 10 7768
TN (1) 3594 162 2 0 11 7024
TN (1) 3562 151 0 0 14 7218
TN (1) 4241 150 0 0 12 8584
TN (1) 3953 152 0 0 10 7996
TN (1) 3617 157 0 0 14 7163
TN (1) 4200 154 0 0 13 8309
TN (1) 4762 166 0 0 14 9292
TN (1) 3332 158 0 0 10 6582
TN (1) 3903 154 0 0 15 7587
A1 (2) 3919 7965 0 7808 13 15639
A1 (2) 3578 8089 0 7936 10 14917
A1 (2) 3506 8093 0 7937 11 14858
A1 (2) 3243 8108 0 7960 14 14503
A1 (2) 3575 8103 0 7946 12 15003
A1 (2) 3280 8151 0 7998 11 14338
A1 (2) 3442 8078 0 7925 12 14644
A1 (2) 3694 8130 0 7980 15 15226
A1 (2) 3418 8146 0 7988 14 14699
A1 (2) 3292 8102 0 7950 11 14383
A2 (3) 3644 537 2 129 14 7576
A2 (3) 2338 9631 0 1 10 14167
A2 (3) 2263 9410 0 0 6 13808
A2 (3) 2230 9359 0 0 7 13678
A2 (3) 2134 9384 0 0 9 13471
A2 (3) 2163 9897 0 0 10 14012
A2 (3) 2153 9493 0 0 8 13641
A2 (3) 2495 9943 0 0 6 14700
A2 (3) 2004 8046 0 0 4 11953
A2 (3) 2186 9652 0 0 9 13814
A3 (4) 4313 328 822 0 15 9482
A3 (4) 3592 158 701 0 11 7807
A3 (4) 4162 150 809 0 14 9031
A3 (4) 4293 164 792 0 15 9060
A3 (4) 4224 161 786 0 10 8951
A3 (4) 4063 160 760 0 11 8633
A3 (4) 4184 157 768 0 14 8803
A3 (4) 3852 153 714 0 11 8148
A3 (4) 4068 154 753 0 6 8591
A3 (4) 3835 152 714 0 12 8127
TN (1) 4201 158 17 0 10 8202
TN (1) 4012 151 0 0 10 7695
TN (1) 3868 153 0 0 13 7518
TN (1) 3964 155 0 0 12 7754
TN (1) 4330 151 0 0 12 8370
TN (1) 4525 151 0 0 14 8676
80
TN (1) 5054 159 1 0 13 9454
TN (1) 4786 147 0 0 11 9078
TN (1) 4660 157 2 0 12 9127
TN (1) 4571 150 0 0 10 8902
A1 (2) 5173 7834 0 7685 10 17920
A1 (2) 4989 8061 0 7907 11 17668
A1 (2) 4479 8087 0 7934 11 16792
A1 (2) 4438 8019 0 7870 11 16520
A1 (2) 4618 7980 0 7829 14 17109
A1 (2) 3648 8093 0 7944 12 15229
A1 (2) 4055 8147 0 7993 12 16199
A1 (2) 4151 8065 0 7915 9 17009
A1 (2) 4339 8025 0 7877 11 17495
A1 (2) 4049 6091 0 5943 15 14183
A2 (3) 4196 156 0 0 11 8385
A2 (3) 4182 155 0 0 12 8285
A2 (3) 2446 7077 0 0 8 11869
A2 (3) 2267 8860 0 0 7 13214
A2 (3) 2134 8064 0 0 4 12483
A2 (3) 2277 9083 0 0 8 13594
A2 (3) 2161 9002 0 0 10 13410
A2 (3) 2188 9088 0 0 9 13412
A2 (3) 2390 9203 0 0 5 13918
A2 (3) 2446 8639 0 0 6 13539
A2 (3) 2374 8433 0 0 6 13103
A2 (3) 2419 9077 0 0 7 13669
A2 (3) 2510 8690 0 0 9 13504
A2 (3) 2204 8457 0 0 7 12717
A2 (3) 2333 7665 0 0 7 12114
A2 (3) 2374 7938 0 0 5 12471
A2 (3) 2119 8053 0 0 8 12166
A2 (3) 2036 8303 0 0 7 12239
A2 (3) 1973 7959 0 1 7 11768
A2 (3) 1723 9224 0 0 8 12651
A3 (4) 3831 356 815 0 14 8961
A3 (4) 3704 155 558 0 12 7062
A3 (4) 3666 150 582 0 13 7177
A3 (4) 3612 160 757 0 12 8158
A3 (4) 3508 178 736 0 13 7937
A3 (4) 4548 147 889 0 12 9903
A3 (4) 3579 180 731 0 9 7974
A3 (4) 3787 151 746 0 12 8278
A3 (4) 3701 173 731 0 10 8104
A3 (4) 3377 152 518 0 14 7435
TN (1) 3322 165 0 0 12 6619
TN (1) 3717 165 0 0 10 7545
TN (1) 3795 151 0 0 11 7624
TN (1) 3834 160 0 0 10 7592
81
TN (1) 3817 152 0 0 15 7651
TN (1) 3740 168 0 0 11 7343
TN (1) 3641 153 0 0 13 7202
TN (1) 3448 155 0 0 13 6947
TN (1) 4066 156 0 0 14 8023
TN (1) 3968 154 0 0 13 7716
A1 (2) 3988 7963 0 7806 10 15745
A1 (2) 4104 8072 0 7926 14 15910
A1 (2) 3523 8157 0 7994 15 14489
A1 (2) 3869 8089 0 7941 11 15589
A1 (2) 3947 8127 0 7954 13 15865
A1 (2) 3912 8084 0 7938 12 15723
A1 (2) 3867 8086 0 7935 14 15715
A1 (2) 3717 8124 0 7959 15 15359
A1 (2) 3667 8143 0 7982 13 15561
A1 (2) 3812 6540 0 6382 14 14034
A3 (4) 3991 154 809 0 13 8978
A3 (4) 3466 151 686 0 12 7594
A3 (4) 3553 156 665 0 13 7557
A3 (4) 3424 151 630 0 14 7220
A3 (4) 3336 159 640 0 11 7189
A3 (4) 3671 158 724 0 12 8025
A3 (4) 3756 156 748 0 13 8263
A3 (4) 3698 151 677 0 13 7774
A3 (4) 3948 156 754 0 11 8479
A3 (4) 3663 155 739 0 15 8112
TN (1) 3619 159 23 0 12 7250
TN (1) 4039 153 0 0 13 7955
TN (1) 4016 151 0 0 10 7972
TN (1) 3730 152 0 0 13 7409
TN (1) 3712 160 2 0 10 7443
TN (1) 4096 158 0 0 14 8355
TN (1) 3597 151 0 0 12 7559
TN (1) 3618 152 0 0 12 7200
TN (1) 3799 154 0 0 8 7662
TN (1) 3792 166 0 0 11 7530
A1 (2) 3467 7919 0 7760 10 14613
A1 (2) 3448 8084 0 7943 13 14498
A1 (2) 3597 8092 2 7936 9 14971
A1 (2) 3581 8086 0 7937 9 15197
A1 (2) 3788 8108 0 7960 14 14939
A1 (2) 3433 8111 0 7963 12 14584
A1 (2) 3675 8100 0 7936 10 14734
A1 (2) 3409 8095 0 7936 9 14443
A1 (2) 3399 8056 0 7902 9 14496
A1 (2) 3710 8027 0 7868 12 15327
A2 (3) 3678 292 0 140 9 7369
A2 (3) 2297 8730 0 0 8 13226
82
A2 (3) 2091 9170 0 0 10 13342
A2 (3) 1959 9095 0 0 8 12870
A2 (3) 2035 9433 0 0 10 13429
A2 (3) 2270 8851 0 0 7 13291
A2 (3) 2461 9528 0 0 11 14326
A2 (3) 2071 9346 0 0 8 13431
A2 (3) 2280 9733 0 0 10 14240
A2 (3) 2211 8619 0 0 5 13014
A3 (4) 3436 301 693 0 13 7821
A3 (4) 3764 172 764 0 10 8355
A3 (4) 3815 143 794 0 14 8599
A3 (4) 3643 167 754 0 14 8183
A3 (4) 3404 150 685 0 12 7531
A3 (4) 3424 160 705 0 15 7670
A3 (4) 3513 145 762 0 14 8100
A3 (4) 3423 158 693 0 13 7595
A3 (4) 3427 155 699 0 10 7632
A3 (4) 3350 158 684 0 13 7499
TN (1) 3847 171 0 0 15 7710
TN (1) 4149 163 0 0 14 8310
TN (1) 4535 152 0 0 10 9032
TN (1) 4380 152 0 0 13 8716
TN (1) 4502 157 0 0 11 9111
TN (1) 4174 153 0 0 12 8363
TN (1) 3743 158 0 0 11 7405
TN (1) 3586 154 0 0 15 7204
TN (1) 3507 146 0 0 10 6871
TN (1) 4171 159 0 0 9 7885
A1 (2) 4383 7739 0 7591 11 16154
A1 (2) 3784 8086 0 7936 13 15544
A1 (2) 4122 7983 0 7815 14 16029
A1 (2) 3424 8082 0 7933 13 14584
A1 (2) 4065 8023 0 7863 12 15907
A1 (2) 3739 8075 0 7936 13 15365
A1 (2) 4435 7982 0 7827 11 16756
A1 (2) 4832 8020 0 7872 13 17435
A1 (2) 3889 8043 0 7894 9 15601
A1 (2) 4242 8000 0 7856 13 16219
A2 (3) 4022 4372 0 115 9 12144
A2 (3) 2447 8741 0 0 10 13413
A2 (3) 2011 10404 0 0 6 14298
A2 (3) 2345 10011 0 0 7 14638
A2 (3) 2147 9868 0 0 9 14120
A2 (3) 2338 10594 0 0 8 15185
A2 (3) 2345 9718 0 0 11 14323
A2 (3) 2526 10188 0 0 6 15119
A2 (3) 2287 9891 0 0 9 14377
A2 (3) 2438 10012 0 0 6 14844
83
A3 (4) 4442 340 888 0 11 9989
A3 (4) 4756 174 999 0 12 10767
A3 (4) 3921 161 785 0 12 8645
A3 (4) 4066 157 838 0 16 9107
A3 (4) 3755 149 767 0 11 8365
A3 (4) 3687 154 746 0 11 8177
A3 (4) 4006 161 816 0 14 8921
A3 (4) 3695 163 748 1 13 8193
A3 (4) 3453 151 689 0 11 7596
A3 (4) 3987 156 667 0 12 8627
TN (1) 4132 155 0 0 14 8076
TN (1) 3850 154 0 0 16 7760
TN (1) 3619 158 0 0 11 7414
TN (1) 4128 151 0 0 12 8365
TN (1) 3761 157 0 0 14 7583
TN (1) 3428 154 0 0 13 6962
TN (1) 3750 156 0 0 12 7652
TN (1) 5224 148 0 0 12 10427
TN (1) 4248 134 0 0 11 8552
TN (1) 3893 155 0 0 15 8173
A1 (2) 4115 7869 0 7721 9 15931
A1 (2) 3786 8033 0 7878 15 15454
A1 (2) 4566 7864 0 7716 9 16902
A1 (2) 3875 8067 0 7916 13 15668
A1 (2) 3572 8113 0 7960 14 15319
A1 (2) 3707 8114 0 7967 10 15710
A1 (2) 3988 8145 0 7994 11 16201
A1 (2) 3993 8096 0 7952 14 16064
A1 (2) 4558 7970 0 7817 12 17187
A1 (2) 4043 8062 0 7909 13 16116
A2 (3) 2106 9536 0 128 12 13691
A2 (3) 2030 10430 0 0 9 14559
A2 (3) 2183 9953 0 0 3 14319
A2 (3) 2249 10873 0 1 7 14818
A2 (3) 1958 9190 0 0 5 13080
A2 (3) 1930 10683 0 0 9 14522
A2 (3) 1866 10759 0 0 7 14348
A2 (3) 2009 10846 0 0 10 14748
A2 (3) 2026 10279 0 0 8 13833
A2 (3) 1782 9128 0 0 8 12322 Tabla 3: Observaciones obtenidas analizando el tráfico.
En la primera columna de la tabla 3 se denominan los siguientes tipos de tráfico:
TN – Tráfico normal, cuyo valor numérico de identificación en Matlab será 1.
A1 – Ataque de deautenticación, valor numérico 2.
A2 – Ataque de inyección, valor numérico 3.
A3 – Ataque de hombre en el medio, valor numérico 4.
84
Analizar esta tabla a simple vista para comprobar la capacidad discriminativa de las variables y
la existencia de observaciones anómalas puede ser un trabajo bastante duro además de poco
preciso por lo que a continuación se transportan los datos a Matlab para comenzar el análisis
exploratorio de datos. En primer lugar se va a observar el gráfico de dispersión
correspondiente a los datos de la tabla para poder observar si las agrupaciones de tráfico son
distinguibles. Para la obtención de dicho gráfico se utiliza el código del anexo II “aed.m”. En la
figura 31 se muestra el gráfico de dispersión correspondiente a las observaciones de la tabla.
En este gráfico se ha puesto a cada observación la etiqueta numerando de 1 a 4 el tipo de
tráfico al que pertenece para que puedan ser reconocibles en el gráfico. Se pueden distinguir
claramente cuatro agrupaciones distintas y casi todas las observaciones se han agrupado en
función del tráfico al que pertenecen. Se puede decir que las variables escogidas tienen
información discriminativa ya que producen una clara diferenciación de tráficos que va a
permitir el estudio concreto de las variables cuyo valor varía de un tráfico a otro. También se
va a poder definir generalizaciones para poder levantar alarmas cuando se produzca un ataque
u otro.
Figura 33: Agrupaciones PCA.
No obstante hay algunas observaciones que no están del todo bien agrupadas como muestra
la figura 33. Por ejemplo, hay una muestra del tráfico correspondiente al ataque de re‐
inyección de paquetes ARP dentro de la agrupación correspondiente al tráfico normal. Esto se
corresponde a algún valor de transición entre tráficos atacantes, ya que puede suceder que en
ese momento concreto todavía queden paquetes correspondientes a otro ataque o que no
haya dado tiempo a contabilizar los del ataque actual. En la tabla 4 se muestra un momento
transitorio de valores entre el ataque 1 y el ataque 2. Se observa que por ejemplo, en las
solicitudes de deautenticación en la observación intermedia sigue habiendo una cantidad que
no se corresponde con la ausencia de ellas característica del siguiente ataque. También se
85
observa un valor intermedio de paquetes de difusión y de ACK. Estos valores son los que
producen esas observaciones intermedias que será interesante eliminar para no provocar
confusiones en el modelo presentado.
Tipo de tráfico
Nº ACK
Nº paq Broad.
Solicitud autentic.
Solicitud deautent
CTS Total paquetes
A1 (2) 4043 8062 0 7909 13 16116
A2 (3) 2106 9536 0 128 12 13691
A2 (3) 2030 10430 0 0 9 14559 Tabla 4: Valores correspondientes a momentos transitorios entre ataques.
Una vez se ha confirmado el uso de las variables y de las observaciones, se puede continuar
con el estudio MEDA y oMEDA pero en este caso se hace de forma individual de los distintos
tráficos producidos por ataques y el tráfico normal de la red. Así, se va a ir analizando los tres
ataques por separado con los gráficos MEDA y oMEDA para seguir obteniendo resultados
relevantes.
En primer lugar se comienza con el ataque de deautenticación que, recordando, de forma
teórica debería producir un incremento en el número de solicitudes de deautenticación de la
red inalámbrica. En la figura 34 se muestra tanto el gráfico MEDA discretizado (a) como el
oMEDA (b). En el gráfico MEDA se muestra la dependencia en las variaciones tanto de los
paquetes de difusión (BROAD) con los de deautenticación (DEAUTH) y con el total de paquetes.
Se ha producido un incremento en los paquetes de deautenticación lo cual está muy
relacionado con el incremento de paquetes de difusión y por consiguiente, con el total de
paquetes que se mueven en la red. Esto revela que la mayoría de los paquetes son de
deautenticación y de difusión. La inundación de paquetes de deautenticación enviados en el
ataque son de difusión por lo que es normal que se produzca un incremento en ambas
variables.
El gráfico oMEDA comparando las observaciones del ataque 1 con las de tráfico normal
muestra incluso más información ya que se ve de forma clara de cuánto incremento es el
cambio en las variables y además se aprecia una nueva variable a tener en cuenta que es el
incremento en las solicitudes de autenticación. Aunque no aparecían en el gráfico MEDA
también tienen relevancia ya que han sido producidas por las deautenticaciones enviadas. Una
vez los clientes se deautentican, necesitan re‐autenticarse de nuevo lo que produce este
incremento en las solicitudes de autenticación. Observando estos datos se puede detectar un
ataque de deautenticación simplemente observando la cantidad de solicitudes de
deautenticación producidas. Otra opción más robusta sería observar ese incremento pero que
fuera acompañado tanto de incremento de los paquetes de difusión, de las solicitudes de
asociación y del total de paquetes en la red. El problema de observar sólo el total de paquetes
en la red es que no se podría saber si es de deautenticación o se trata de otro ataque. Si se
observa el cambio en el resto de variables sí que se puede concluir no sólo que se esté
produciendo un ataque, sino que el ataque es de deautenticación.
86
(a) (b)
Figura 34: Ataque 1 a) Gráfico MEDA, b) Gráfico oMEDA.
Una vez caracterizado este ataque se continúa con el ataque de re‐inyección de paquetes ARP
observando también los gráficos MEDA y oMEDA. De forma teórica se proponía la idea de
observar los paquetes de difusión para ya que se va a realizar una gran cantidad de tráfico de
peticiones ARP que son de difusión. En la figura 35 se muestran estos gráficos, el de la
izquierda (a) es el gráfico MEDA y el de la derecha (b) el oMEDA. El gráfico MEDA muestra
variaciones en los paquetes de difusión relacionadas con las variaciones producidas en los
paquetes ACK, los CTS y el total de paquetes de la red. En el gráfico oMEDA se puede observar
las diferencias en las variables entre el tráfico normal y el ataque 2. Como era de esperar, se
produce un incremento tanto en los paquetes de difusión como en el total de paquetes, esto
está producido por la gran cantidad de paquetes ARP de la red. Pero hay otras dos variables en
las que se produce variación que quizás es un poco inesperada, que son los ACK y los CTS.
Tanto los paquetes ACK como los CTS disminuyen durante la ejecución del segundo ataque.
Esto viene producido porque el punto de acceso va a estar ocupado con las peticiones ARP y
las respuestas. Este ataque se podría detectar fijándose en un decremento significativo de
paquetes ACK acompañado de un aumento significativo de los paquetes de difusión. También
podría ser detectado con el total de paquetes en tránsito en la red pero como se ha
comentado en el caso anterior, si se detecta observando sólo esa variable, se podrá identificar
que se está produciendo un ataque pero no se sabrá cuál.
(a) (b)
Figura 35: Ataque 2 a) Gráfico MEDA, b) Gráfico oMEDA.
87
Finalmente se muestra el ataque correspondiente a man‐in‐the‐middle, donde la observación
principal se iba a realizar en las solicitudes de autenticación. En la figura 36 se muestra los
gráficos MEDA (a) y oMEDA (b) utilizados para el análisis. En este caso es el gráfico oMEDA el
que ofrece información de mayor relevancia ya que muestra un incremento considerable en
las solicitudes de autenticación. En este caso el incremento o decremento en el resto de
variables no es suficiente como para poder generalizar una regla. De esta forma, se puede
detectar este ataque observando un incremento importante en los paquetes de solicitudes de
autenticación acompañado del incremento en el total de paquetes.
(a) (b)
Figura 36: Ataque 3 a) Gráfico MEDA, b) Gráfico oMEDA.
Al haber realizado el análisis de los tres ataques se pueden observar las diferencias en los
incrementos y decrementos de variables que caracterizan un tráfico concreto. No obstante,
hay una variable con la que se puede identificar que se está produciendo un ataque en los tres
casos y dicha variable es el total de paquetes. Al estar trabajando con ataques activos que
inyectan tráfico adicional a la red, todos son detectables por la cantidad total de paquetes de
forma que se podrá detectar que se está produciendo un ataque sin la necesidad de observar
el resto de variables. No obstante, éste no será el caso en todos los ataques. Para poder
trabajar también con un ataque que no produzca este incremento, se ha pensado en ejecutar
el ataque de deautenticación a baja tasa. De esta forma se pretende realizar el ataque pero de
una forma mucho más lenta para no levantar sospechas en cuanto al total de paquetes. El
atacante va recopilando la información obtenida necesitando más tiempo para descifrar la
clave. El comando utilizado para este ataque es el mismo que antes pero en la opción “‐0”
seguida de un “0” que era para indicar envíos continuos de solicitudes de deautenticación, se
propone cambiar el “0” por “3” con la idea de enviar cantidades limitadas de solicitudes de
deautenticación. El comando queda como sigue:
“aireplay‐ng ‐0 3 –a 14:D6:4D:93:E4:4C mon0”
Se toma así una nueva tanda de observaciones de 30 segundos separadas por 5 segundos en
los que no se captura tráfico. A este nuevo tráfico se le asigna el valor numérico 5 para la
identificación con Matlab. Se ha intercalado la toma de observaciones con tráfico normal y
tráfico correspondiente al ataque a baja tasa como se muestra en la tabla 5:
88
Tipo de tráfico ACK Difusión Autenticación Deaut. CTS Nº total de paquetes
TN 4142 154 0 1 10 8347
TN 4138 157 0 0 10 8097
TN 4327 151 0 0 10 8494
TN 5943 163 0 0 14 11811
TN 4619 153 0 0 10 9183
TN 4866 158 0 0 15 9423
TN 4457 150 0 0 8 8677
TN 6224 152 0 0 11 11655
TN 7802 148 0 0 9 14910
TN 4415 154 0 0 15 8549
TN 3591 152 23 0 12 7229
TN 3294 151 0 0 9 6622
TN 3883 151 0 0 11 7816
TN 3436 155 0 0 13 6858
TN 3375 153 0 0 14 6701
TN 3542 161 0 0 13 6986
TN 3644 151 0 0 9 7251
TN 3656 152 0 0 15 7224
TN 3926 168 0 0 13 7844
TN 3791 150 0 0 14 7636
TN 3866 156 23 0 8 7632
TN 4302 150 0 0 12 8545
TN 3745 153 0 0 10 7442
TN 3765 156 0 0 13 7507
TN 3562 156 0 0 11 7120
TN 3662 155 0 0 13 7330
TN 3269 157 0 0 14 6513
TN 3659 158 0 0 10 7184
TN 3265 155 0 0 11 6509
TN 3306 161 0 0 14 6711
TN 3941 153 24 0 10 7768
TN 3594 162 2 0 11 7024
TN 3562 151 0 0 14 7218
TN 4241 150 0 0 12 8584
TN 3953 152 0 0 10 7996
TN 3617 157 0 0 14 7163
TN 4200 154 0 0 13 8309
TN 4762 166 0 0 14 9292
TN 3332 158 0 0 10 6582
TN 3903 154 0 0 15 7587
A. baja tasa (A5) 4723 259 0 128 9 8978
A. baja tasa (A5) 4837 258 0 128 10 9731
A. baja tasa (A5) 4660 269 0 128 12 9245
A. baja tasa (A5) 5088 276 0 128 14 10025
A. baja tasa (A5) 4571 262 0 128 11 9073
A. baja tasa (A5) 4429 265 0 128 10 8736
A. baja tasa (A5) 5424 258 0 128 8 10694
89
A. baja tasa (A5) 4931 277 0 128 14 9758
A. baja tasa (A5) 5925 268 0 134 11 11622
A. baja tasa (A5) 5289 280 0 128 11 10566
A. baja tasa (A5) 5280 221 0 71 13 10093
A. baja tasa (A5) 5331 176 0 38 13 10457
A. baja tasa (A5) 6080 217 0 89 9 11721
A. baja tasa (A5) 7047 265 0 128 11 13672
A. baja tasa (A5) 5464 268 0 128 8 10790
A. baja tasa (A5) 4914 270 0 128 12 9576
A. baja tasa (A5) 5395 274 0 128 13 10533
A. baja tasa (A5) 3491 292 2 128 8 7059
A. baja tasa (A5) 1553 298 0 128 11 3364
A. baja tasa (A5) 1440 291 0 128 9 3135
A. baja tasa (A5) 1408 294 0 128 9 3095
A. baja tasa (A5) 1348 291 0 128 13 2962
A. baja tasa (A5) 1360 294 0 128 12 3009
A. baja tasa (A5) 1354 291 0 128 16 2950
A. baja tasa (A5) 2270 299 0 128 14 4764
A. baja tasa (A5) 2665 307 0 128 10 5558
A. baja tasa (A5) 3016 292 0 128 11 6191
A. baja tasa (A5) 2663 289 0 128 10 5390
A. baja tasa (A5) 2819 294 0 128 12 5693
A. baja tasa (A5) 9781 205 0 128 12 18964
A. baja tasa (A5) 9046 141 0 54 7 17823
A. baja tasa (A5) 9794 107 0 23 8 19181
A. baja tasa (A5) 7891 177 0 76 8 15235
A. baja tasa (A5) 4009 191 0 48 14 7935
A. baja tasa (A5) 4463 276 0 128 11 8852
A. baja tasa (A5) 4374 273 0 128 9 8547
A. baja tasa (A5) 4631 259 0 128 13 9259
A. baja tasa (A5) 3901 266 0 128 12 7734
A. baja tasa (A5) 4937 270 0 128 8 9732
A. baja tasa (A5) 3985 271 0 128 12 7970
TN 4201 158 17 0 10 8202
TN 4012 151 0 0 10 7695
TN 3868 153 0 0 13 7518
TN 3964 155 0 0 12 7754
TN 4330 151 0 0 12 8370
TN 4525 151 0 0 14 8676
TN 5054 159 1 0 13 9454
TN 4786 147 0 0 11 9078
TN 4660 157 2 0 12 9127
TN 4571 150 0 0 10 8902
TN 3322 165 0 0 12 6619
TN 3717 165 0 0 10 7545
TN 3795 151 0 0 11 7624
TN 3834 160 0 0 10 7592
TN 3817 152 0 0 15 7651
90
TN 3740 168 0 0 11 7343
TN 3641 153 0 0 13 7202
TN 3448 155 0 0 13 6947
TN 4066 156 0 0 14 8023
TN 3968 154 0 0 13 7716
TN 3619 159 23 0 12 7250
TN 4039 153 0 0 13 7955
TN 4016 151 0 0 10 7972
TN 3730 152 0 0 13 7409
TN 3712 160 2 0 10 7443
A. baja tasa (A5) 5007 277 0 128 12 9981
A. baja tasa (A5) 4414 263 0 128 10 8797
A. baja tasa (A5) 4326 262 0 128 7 8536
A. baja tasa (A5) 4364 273 0 128 10 8704
A. baja tasa (A5) 4221 258 0 128 9 8382
A. baja tasa (A5) 4382 277 0 128 10 8785
A. baja tasa (A5) 4132 278 0 128 10 8260
A. baja tasa (A5) 4420 270 0 128 15 8756
A. baja tasa (A5) 4567 159 0 37 8 8914
A. baja tasa (A5) 4115 268 0 128 11 8141
A. baja tasa (A5) 3974 263 0 128 11 7863
A. baja tasa (A5) 5056 276 0 128 8 9953
A. baja tasa (A5) 4115 211 0 62 10 8090
A. baja tasa (A5) 4847 275 0 128 10 8926
A. baja tasa (A5) 6846 266 0 128 10 13132
A. baja tasa (A5) 5113 259 0 128 10 10049
A. baja tasa (A5) 4473 261 0 128 7 8723
A. baja tasa (A5) 4406 273 0 128 13 8663
A. baja tasa (A5) 4292 278 0 128 10 8557
A. baja tasa (A5) 4233 194 0 44 11 8412
A. baja tasa (A5) 4729 258 0 128 12 9518
A. baja tasa (A5) 3865 188 0 53 11 7673
A. baja tasa (A5) 4519 276 0 128 10 9088
A. baja tasa (A5) 4291 268 0 128 12 8584
A. baja tasa (A5) 4566 271 0 128 10 9152
TN 4096 158 0 0 14 8355
TN 3597 151 0 0 12 7559
TN 3618 152 0 0 12 7200
TN 3799 154 0 0 8 7662
TN 3792 166 0 0 11 7530
TN 3847 171 0 0 15 7710
TN 4149 163 0 0 14 8310
TN 4535 152 0 0 10 9032
TN 4380 152 0 0 13 8716
TN 4502 157 0 0 11 9111
TN 4174 153 0 0 12 8363
TN 3743 158 0 0 11 7405
TN 3586 154 0 0 15 7204
91
TN 3507 146 0 0 10 6871
TN 4171 159 0 0 9 7885
TN 4132 155 0 0 14 8076
TN 3850 154 0 0 16 7760
TN 3619 158 0 0 11 7414
TN 4128 151 0 0 12 8365
TN 3761 157 0 0 14 7583
TN 3428 154 0 0 13 6962
TN 3750 156 0 0 12 7652
TN 5224 148 0 0 12 10427
TN 4248 134 0 0 11 8552
TN 3893 155 0 0 15 8173
A. baja tasa (A5) 3717 274 0 128 13 7464
A. baja tasa (A5) 5019 256 0 128 9 10063
A. baja tasa (A5) 4384 260 0 128 13 8707
A. baja tasa (A5) 4282 278 0 128 8 8549
A. baja tasa (A5) 3985 278 0 128 9 7933
A. baja tasa (A5) 3724 287 0 128 13 7434
A. baja tasa (A5) 3952 268 0 128 9 7849
A. baja tasa (A5) 4615 271 0 128 13 9050
A. baja tasa (A5) 3442 275 0 128 11 6877
A. baja tasa (A5) 3517 285 0 128 14 7148
A. baja tasa (A5) 4048 177 0 35 11 8110
A. baja tasa (A5) 4821 274 0 128 8 9741
A. baja tasa (A5) 3938 277 0 128 13 7983
A. baja tasa (A5) 4270 263 0 128 12 8609
A. baja tasa (A5) 4458 260 0 128 13 8961
A. baja tasa (A5) 4333 267 0 128 12 8732
A. baja tasa (A5) 4089 270 0 128 11 8259
A. baja tasa (A5) 4833 277 0 128 13 9727
A. baja tasa (A5) 4078 216 0 82 10 8204
A. baja tasa (A5) 4077 264 0 128 11 8197
A. baja tasa (A5) 4243 178 0 37 13 8384
A. baja tasa (A5) 4483 192 0 57 13 8952
A. baja tasa (A5) 3946 288 0 128 8 7927
A. baja tasa (A5) 4341 276 0 128 11 8710
A. baja tasa (A5) 4636 270 2 128 9 9344
A. baja tasa (A5) 4271 268 0 128 7 8571
A. baja tasa (A5) 4506 257 0 128 14 9034
A. baja tasa (A5) 5242 227 0 96 11 10213
A. baja tasa (A5) 4138 282 0 128 12 8287
A. baja tasa (A5) 4647 279 0 128 11 9065
A. baja tasa (A5) 4791 274 0 128 13 9633
A. baja tasa (A5) 5334 277 0 128 8 10610
A. baja tasa (A5) 4497 276 0 128 9 8845
A. baja tasa (A5) 4659 263 0 128 9 9325
Tabla 5: Observaciones correspondientes al tráfico producido por el ataque de deautenticación a baja tasa.
92
En la figura 37 se muestra el gráfico de dispersión incluyendo en el conjunto de observaciones
aquellas que se corresponden al tráfico del ataque de deautenticación pero con baja tasa
(añadiendo las observaciones correspondientes al ataque de baja tasa al fichero donde se
encontraban las observaciones del resto de ataques). Ocurre un fenómeno llamativo ya que las
observaciones etiquetadas como 5 y las observaciones etiquetadas como 1 se agrupan
creando un mismo grupo, sin embargo no aparecen mezcladas con las observaciones
etiquetadas por 2 que correspondía al tráfico del ataque de deautenticación a alta tasa. A
simple vista no se distingue el tráfico del nuevo ataque del tráfico normal de la red lo cual lleva
a un análisis más exhaustivo que permita la diferenciación y detección de ataques a baja tasa.
Figura 37: Gráfico de dispersión con las nuevas observaciones producidas por el ataque a baja tasa.
Se trabaja entonces sólo con las observaciones de tráfico normal y con las del nuevo ataque
para observar las diferencias y poder establecer reglas de generalización de detección. El
nuevo gráfico de dispersión se muestra en la figura 38. En este caso el análisis de las
componentes principales sí que muestra dos agrupaciones claramente diferenciadas entre el
tráfico normal (1) y el tráfico producido por el nuevo ataque (5). Ya se puede proseguir con los
gráficos MEDA y oMEDA para obtener más información de lo que está ocurriendo.
93
Figura 38: Gráfico de dispersión con tráfico normal (1) frente a nuevo ataque (5).
En la figura 39 se muestran los gráficos MEDA (a) y oMEDA (b). De forma teórica se supone que
no se debería obtener gran cambio en el total de paquetes pero se debe observar una
diferencia en las solicitudes de deautenticación o en otras variables para que el ataque pueda
ser detectado. El gráfico MEDA ya hace ver algo interesante, ya que sólo muestra
dependencias entre las solicitudes de deautenticación y los paquetes de difusión. El punto
clave se encuentra en el gráfico oMEDA en el que se puede observar un incremento de en total
de paquetes prácticamente despreciable y no detectable. Sin embargo, se mantiene la
diferencia radical tanto en solicitudes de deautenticación como en los paquetes de difusión lo
cual muestra que será necesario observar en una red inalámbrica estas variables y no el total
de paquetes en la red, ya que un ataque a baja tasa es igualmente efectivo pero no activa
alarmas en cuanto al tráfico total de la red.
(a) (b)
Figura 39: Ataque 1 baja tasa a) Gráfico MEDA, b) Gráfico oMEDA.
94
Como última etapa del proyecto se muestran los resultados correspondientes al trabajo con
los clasificadores ya mencionados realizando una comparación de efectividad para el caso
concreto de los tráficos aquí analizados. Para el entrenamiento de los clasificadores se han
utilizado las observaciones mostradas con anterioridad pero para la clasificación de nuevas
observaciones se han vuelto a realizar observaciones en la red con el mismo procedimiento
seguido inicialmente para que las condiciones sean lo más similares posible. En este caso se
han obtenido un total de 138 observaciones siendo 40 de tráfico normal, 38 de tráfico
correspondiente al ataque 1, 30 al ataque 2 y otras 30 al ataque 3. Las nuevas observaciones
se presentan en la tabla 6:
Tipo de tráfico
Nº ACK Nº paq Broad.
Solicitud autentic.
Solicitud deaunt.
CTS Total paquetes
TN (1) 3405 148 0 0 12 6746
TN (1) 3835 149 0 0 11 7699
TN (1) 3792 159 0 0 12 7667
TN (1) 3668 146 0 0 13 7461
TN (1) 3608 173 0 0 11 7343
TN (1) 3777 146 0 0 10 7619
TN (1) 4014 148 0 0 10 8117
TN (1) 3462 180 0 0 14 7067
TN (1) 3738 155 0 0 12 7458
TN (1) 3463 152 0 0 13 6949
A1 (2) 4162 7964 0 7820 15 15835
A1 (2) 3830 8296 0 8142 10 15135
A1 (2) 4006 8213 0 8056 14 15722
A1 (2) 4018 8300 0 8135 11 15805
A1 (2) 3630 8319 0 8144 14 14989
A1 (2) 3922 8242 0 8064 11 15595
A1 (2) 3740 8285 0 8118 11 15355
A1 (2) 3944 8172 0 8009 14 15872
A1 (2) 3922 8270 0 8109 11 15829
A1 (2) 3758 8108 0 7966 11 15424
A2 (3) 3705 333 0 187 10 6724
A2 (3) 3119 14156 0 0 13 20273
A2 (3) 3290 14445 0 0 14 20755
A2 (3) 2762 14406 0 0 11 19826
A2 (3) 3161 14344 0 0 12 20601
A2 (3) 1916 14872 0 0 12 18678
A2 (3) 2034 14753 0 0 13 18804
A2 (3) 1781 14949 0 0 12 18463
A2 (3) 1658 14926 0 0 16 18235
A2 (3) 1959 14435 0 0 11 18315
A3 (4) 3107 369 627 0 12 7160
A3 (4) 2309 159 480 0 10 5218
A3 (4) 2439 161 509 0 15 5511
A3 (4) 2896 153 592 0 11 6509
A3 (4) 2043 160 444 0 15 4726
A3 (4) 2567 150 540 0 13 5825
95
A3 (4) 5330 164 1075 0 12 11802
A3 (4) 4184 143 838 0 9 9232
A3 (4) 6513 143 1275 0 11 14319
A3 (4) 4187 145 853 0 9 9318
TN (1) 3879 196 23 0 13 7954
TN (1) 5389 164 0 0 9 10782
TN (1) 3544 155 0 0 12 7232
TN (1) 7050 131 0 0 9 14416
TN (1) 4107 150 0 0 13 8262
TN (1) 3734 181 0 0 14 7672
TN (1) 4010 149 0 0 12 7918
TN (1) 3994 157 0 0 12 7842
TN (1) 4063 148 0 0 13 8077
TN (1) 2788 158 0 0 12 5662
A1 (2) 1680 8096 0 7936 15 11454
A1 (2) 1654 8218 0 8069 13 11443
A1 (2) 1569 8243 0 8088 12 11368
A1 (2) 1487 8309 0 8150 12 11377
A1 (2) 1673 8317 0 8163 15 11707
A1 (2) 1327 8278 0 8122 13 10978
A1 (2) 1332 8299 0 8133 15 11018
A1 (2) 1255 8311 0 8155 10 10836
A1 (2) 1523 8298 0 8145 13 11306
A1 (2) 1358 8255 0 8099 11 10986
A2 (3) 1300 352 0 203 10 2858
A2 (3) 1292 176 0 0 13 2856
A2 (3) 1313 203 0 0 17 2999
A2 (3) 1399 231 0 0 12 3146
A2 (3) 1351 179 0 0 13 2959
A2 (3) 1306 13392 0 0 10 16151
A2 (3) 1219 14877 0 0 14 17447
A2 (3) 1238 15004 0 0 14 17665
A2 (3) 1331 15018 0 0 14 17889
A2 (3) 1293 14992 0 0 12 17698
A3 (4) 1370 405 322 0 9 3567
A3 (4) 1427 168 355 0 14 3577
A3 (4) 1354 173 326 0 15 3328
A3 (4) 1414 189 354 0 14 3536
A3 (4) 1451 206 346 0 13 3540
A3 (4) 1958 157 434 0 12 4576
A3 (4) 1341 153 335 0 15 3365
A3 (4) 1574 170 379 0 13 3845
A3 (4) 1693 167 428 0 14 4276
A3 (4) 1303 165 226 0 12 3089
TN (1) 1345 167 0 0 15 2903
TN (1) 1533 231 7 1 12 3412
TN (1) 2832 192 0 0 16 5540
TN (1) 3759 156 0 0 13 7163
96
TN (1) 3535 170 0 0 16 7001
TN (1) 2162 172 0 0 13 4459
TN (1) 1394 176 0 0 14 3034
TN (1) 1408 167 0 0 13 3004
TN (1) 1738 216 0 0 16 3642
TN (1) 1636 171 0 0 16 3439
A1 (2) 1467 8117 0 7977 17 11122
A1 (2) 1550 8287 0 8168 15 11360
A1 (2) 1496 8277 0 8150 15 11270
A1 (2) 1466 8302 0 8186 15 11288
A1 (2) 1434 8268 0 8163 16 11176
A1 (2) 1312 8249 0 8122 16 10963
A1 (2) 1561 8313 0 8171 12 11443
A1 (2) 1471 8294 0 8165 13 11375
A1 (2) 1532 8358 0 8198 13 11502
A1 (2) 1346 6835 0 6703 10 9535
A2 (3) 1448 9492 0 0 16 12437
A2 (3) 1397 15033 0 0 10 17876
A2 (3) 1303 14997 0 0 14 17644
A2 (3) 2048 14535 0 0 14 18391
A2 (3) 6372 12175 0 0 12 23542
A2 (3) 6103 10935 0 0 9 22943
A2 (3) 6700 11048 0 0 9 23697
A2 (3) 6114 10069 0 0 524 22300
A2 (3) 7023 11308 0 0 6 23577
A2 (3) 6350 11183 0 0 12 21608
A3 (4) 9734 241 1581 0 13 19481
A3 (4) 9769 140 1581 0 11 19316
A3 (4) 9797 145 1342 0 12 17866
A3 (4) 9938 148 1532 0 10 19139
A3 (4) 9880 157 1916 0 13 21391
A3 (4) 9727 141 2080 0 10 22221
A3 (4) 9972 150 1632 0 13 19779
A3 (4) 10826 173 1798 0 184 21966
A3 (4) 11680 133 1810 0 473 23487
A3 (4) 11151 139 2117 0 404 24698
TN (1) 11733 150 19 0 700 22442
TN (1) 11613 132 0 0 134 20437
TN (1) 11784 148 0 0 158 21387
TN (1) 11963 148 0 0 13 21472
TN (1) 11636 162 0 0 13 23109
TN (1) 11723 142 0 0 168 21636
TN (1) 11288 137 0 0 9 20958
TN (1) 11677 150 0 0 79 21997
TN (1) 11634 158 0 0 12 22937
TN (1) 11730 148 0 0 10 20735
A1 (2) 10861 7940 0 7799 12 29423
A1 (2) 11437 7975 0 7831 106 29908
97
A1 (2) 11163 7981 0 7842 12 29463
A1 (2) 11191 7894 0 7755 483 30543
A1 (2) 11336 7998 0 7847 13 29040
A1 (2) 11387 7994 0 7848 11 28795
A1 (2) 11565 7715 0 7565 12 27787
Tabla 6: Nuevas observaciones a clasificar.
En primer lugar se comienza con los algoritmos basados en vecindad. Si se asigna el valor 1 a K
y se ejecuta el código del anexo III, se obtiene un vector formado por los números
correspondientes a las clases asignadas por el clasificador. En la tabla 7 se muestra la clase a la
que deberían pertenecer las observaciones y la clase a la que pertenecen finalmente. En rojo
se indican las observaciones mal clasificadas:
Clase a la que deberían pertenecer Clase asignada por el clasificador
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
3 1
3 3
3 3
3 3
3 3
3 3
3 3
3 3
3 3
98
3 3
4 4
4 1
4 1
4 1
4 1
4 1
4 4
4 4
4 1
4 4
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
3 1
3 1
3 1
3 1
3 1
3 3
3 3
3 3
3 3
3 3
4 1
4 1
4 1
4 1
4 1
4 1
4 1
99
4 1
4 1
4 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
3 3
3 3
3 3
3 3
3 3
3 3
3 3
3 3
3 3
3 3
4 1
4 1
4 1
4 1
4 1
4 1
4 1
4 1
4 1
4 1
1 1
1 1
1 1
1 1
1 1
100
1 1
1 1
1 1
1 1
1 1
2 2
2 2
2 2
2 2
2 2
2 2
2 2 Tabla 7: Clasificación realizada por el clasificador NN.
Se observa que principalmente las confusiones se producen entre el tráfico normal y el tráfico
producido por el ataque man‐in‐the‐middle. En cuanto al error, se obtiene un error del
23.3577% que es un error bastante alto por lo que no se recomienda el uso de este
clasificador. Ahora se varía el valor de K y se procede a una calibración inicial del método para
obtener el valor de K óptimo para este experimento. Se toman las 350 observaciones utilizadas
para el análisis multivariante anterior y se dividen en: 200 observaciones para el
entrenamiento y 150 para la clasificación con distintos valores de K. El valor usado para la
clasificación de las nuevas observaciones (u observaciones futuras) será el óptimo obtenido en
el proceso de calibración. Los valores de K obtenidos con sus correspondientes valores de error
se muestran en la tabla 8, cuya gráfica correspondiente se muestra en la figura 40:
Valor de K Error (%)
2 4
3 3
4 3
5 0,6667
6 0,6667
7 2
8 2
9 2,6667
10 2,6667
11 3,333
12 3,333
13 3,333 Tabla 8: Estudio del valor óptimo de K.
101
Figura 40: Error frente a valores de K.
En función a los valores de error, se selecciona el valor K=5, que aplicándolo al conjunto de
nuevas observaciones se obtiene un error del 24.0876%, lo que es superior al valor obtenido
con K=1. En este caso el clasificador KNN no ofrece resultados mejores que en NN. Una vez
realizado el cálculo con los algoritmos basados en vecindad, se prosigue con el resto de
algoritmos. Para el algoritmo PLS‐DA será necesario seguir un procedimiento similar al seguido
con los basados en vecindad. En este caso, uno de los argumentos de la función es determinar
las variables latentes del modelo. Se toman de nuevo las 350 observaciones utilizadas para el
análisis multivariante inicial y divididas en 200 observaciones para el entrenamiento y 150 para
la clasificación con distintos valores de variables latentes. En función de las 350 observaciones
se obtienen los valores de error mostrados en la tabla 9 dependiendo del valor de variables
latentes.
Valor de variables latentes Error (%)
1 60,58
2 56,9343
3 47,4453
4 43,0657
5 40,8759
6 38,6861
7 38,6861
8 38,6861
9 38,6861 Tabla 9: Error obtenido dependiendo del valor de variables latentes asignado.
El error producido en la clasificación es decreciente conforme aumenta el valor de variables
latentes hasta que llega a un punto en el que se estabiliza. El valor óptimo se selecciona como
6 y se realiza la clasificación de las nuevas observaciones obteniendo un error del 17,5182%.
0
0,5
1
1,5
2
2,5
3
3,5
4
4,5
0 2 4 6 8 10 12 14
error (%)
K
Error frente a K
102
En la tabla 10 se muestra los resultados de error obtenidos para los diferentes tipos de
clasificadores.
Tipo de clasificador Error (%)
NN 23,3577
KNN (K=5) 24,0876
Árbol de clasificación 5,1095
LDA 6,5693
QDA 6,5693
PLS‐DA 17,5182
Red bayesiana 10,9489 Tabla 10: Comparación de errores obtenidos con los distintos clasificadores.
Como se observa en la tabla, el algoritmo que mejor ha respondido en la clasificación de las
observaciones ha sido el de “árbol de clasificación”, si bien su rendimiento es muy cercano al
de LDA y QDA. A continuación se muestra una tabla donde se presentan la clase en la que
deberían haber sido clasificadas las observaciones y la clase que ha sido asignada por el
clasificador. Las clasificaciones erróneas se muestran en rojo:
Clase a la que deberían pertenecer Clase asignada por el clasificador
1 2
1 1
1 1
1 2
1 1
1 1
1 1
1 1
1 1
1 1
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
3 3
3 3
3 3
3 3
3 3
3 3
3 3
103
3 3
3 3
3 3
4 4
4 4
4 4
4 4
4 4
4 4
4 4
4 4
4 4
4 4
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
3 3
3 1
3 1
3 3
3 1
3 3
3 3
3 3
3 3
3 3
4 4
4 4
4 4
4 4
4 4
104
4 4
4 4
4 4
4 4
4 1
1 1
1 3
1 1
1 1
1 1
1 1
1 1
1 1
1 1
1 1
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
2 2
3 3
3 3
3 3
3 3
3 3
3 3
3 3
3 3
3 3
3 3
4 4
4 4
4 4
4 4
4 4
4 4
4 4
4 4
4 4
4 4
1 1
1 1
1 1
105
1 1
1 1
1 1
1 1
1 1
1 1
1 1
2 2
2 2
2 2
2 2
2 2
2 2
2 2 Tabla 11: Clasificación realizada por el clasificador “árbol de clasificación”.
El mejor método de clasificación para el caso concreto mostrado en este proyecto es la
utilización de un clasificador basado en “árbol de clasificación”, seguido de cerca por las
técnicas de análisis discriminante. Consiguiendo que la gran mayoría de las nuevas
observaciones sean clasificadas de forma correcta.
También hay que evaluar las observaciones obtenidas en el caso de ataque de baja tasa. Se
aplican los distintos clasificadores para la diferenciación de tráfico normal y tráfico producido
por ataque de deautenticación a baja tasa. En primer lugar se repite el procedimiento seguido
anteriormente para los algoritmos basados en vecindad. En este caso se utiliza un conjunto de
observaciones correspondientes al tráfico normal y la ataque de baja tasa. En total se disponen
de 189 observaciones divididas en: 80 observaciones (40 tráfico normal + 40 ataque de baja
tasa) para el entrenamiento del clasificador, 50 observaciones (25 tráfico normal + 25 ataque
de baja tasa) para la selección del valor óptimo de K y finalmente 59 observaciones (25 tráfico
normal + 34 ataque de baja tasa) para la nueva clasificación. En la tabla 12 se muestran los
resultados de error obtenidos dependiendo del valor de K:
K Error (%)
1 16
2 16
3 18
4 20
5 26
6 26
7 38
8 36 Tabla 12: Error en función de K.
Para K=2 se clasifican las nuevas observaciones obteniendo un error del 18,6441%, obteniendo
también para el caso NN (K=1) un error del mismo valor. Se repite el proceso también para el
106
caso del clasificador PLS‐DA en función de las variables latentes obteniendo los resultados de
error en función de L (número de variables latentes del modelo) de la tabla 13:
L Error (%)
1 24
2 8
3 10
4 4
5 4
6 4 Tabla 13: Error en función de las variables latentes del modelo.
Seleccionando el valor L=4 se obtiene un error en la clasificación del nuevo grupo de
observaciones del 3,3898%. En la tabla 14 se muestran los resultados comparativos
correspondientes a los errores de clasificación producidos al hacer uso de los distintos
clasificadores en el caso del ataque de baja tasa:
Tipo de clasificador Baja tasaError (%)
3 ataques anteriores Error (%)
NN 18,6441 23,3577
KNN (K=2) 18,6441 24,0876
Árbol de clasificación 0 5,1095
LDA 3,3898 6,5693
QDA 0 6,5693
PLS‐DA 3,3898 17,5182
Red bayesiana 0 10,9489 Tabla 14: Comparación de errores obtenidos con los distintos clasificadores para el ataque a baja tasa y para los
cálculos obtenidos en el caso de los 3 ataques.
En esta última tabla se observa que los datos de exactitud en la clasificación son muy
superiores a los obtenidos anteriormente. Se vuelven a obtener datos mejores en árbol de
clasificación y QDA y los peores datos se obtienen para los algoritmos basados en vecindad.
8. CONCLUSIONES Y TRABAJO FUTURO
Al haber llevado a cabo el diseño y ejecución de las pruebas mostradas en este documento se
pueden sacar una serie de conclusiones a continuación expuestas. En primer lugar es posible
caracterizar el tráfico producido por un ataque contra la seguridad de una red inalámbrica.
Esto va a permitir poder activar alarmas dentro de la red si esto se produce. Además, es
posible identificar el tipo de ataque que se está produciendo. Esto puede ser útil para llevar a
cabo una acción en contra de un ataque concreto.
107
Se ha podido comprobar la efectividad del análisis multivariante con los métodos explicados
“PCA”, “MEDA” y “oMEDA” tanto para la detección de agrupaciones en los tipos de tráfico
como para la detección de variables importantes y de observaciones y variables irrelevantes.
Se han podido detectar las variables de mayor relevancia centrando así la atención en esas
variables y no en las que no ofrecen información decisiva, lo cual aumenta la eficiencia del
estudio. También se ha comprobado la efectividad de los clasificadores estudiados, capaces de
aprender de un conjunto de datos de entrenamiento, pudiendo así realizar una clasificación de
nuevas observaciones.
Para el trabajo futuro se propone la elaboración de las respuestas por parte del punto de
acceso a los ataques aquí analizados, de forma que si se produce un ataque, el propio punto de
acceso cambie la contraseña de la red y la distribuya entre los equipos conectados o active una
alarma indicando al administrador de la red que se ha intentado acceder a la información
personal. También se puede extender este estudio a tantos ataques como se desee, ya que se
disponen de las herramientas de análisis adecuadas para ser llevado a cabo, por ejemplo la
caracterización del ataque de redirección IP o el de reacción.
También se puede trabajar con los ataques utilizados en redes protegidas con seguridad WPA y
WPA2 ya que cada vez se va utilizando de forma más generalizada este tipo de seguridad en
redes inalámbricas. Se propone el uso del análisis exploratorio de datos y los clasificadores
para poder realizar un estudio similar al aquí presentado pero con seguridad WPA/WPA2.
La información transmitida en una red inalámbrica ofrece una serie de facilidades como la
movilidad y la comodidad que no ofrecen las redes cableadas. Sin embargo, la información va
a estar en peligro si no se toman las medidas de seguridad y protección oportunas, lo cuál va a
llevar a una actualización continua de las tecnologías de protección de las redes inalámbricas al
mismo tiempo que surgen ataques en contra de los protocolos de seguridad.
108
BIBLIOGRAFÍA
[1] Alan Holt y Chi‐yu Huang, 802.11 Wireless networks: security and analysis, Springer.ISBN
978‐1‐84996‐274‐2.
[2] http://www.wi‐foo.com/
[3] “Wireless attacks from an intrusion detection perspective”, SANS Institute, November
2006.
[4] “Break WEP Faster with Statistical Analysis”, École Polytechnique Fédérale de Lausanne,
June 2006.
[5] Kim H. Esbensen. Multivariate Data Analysis: in practice. Camo. ISBN: 82‐993330‐3‐2.
[6] Izaskun Pellejero. Fundamentos y aplicaciones de seguridad en redes WLAN. Marcombo.
ISBN 84‐267‐1405‐6
[7] Pedro García Teodoro. Transmisión de datos y redes de computadores. Pearson Educación,
2007. ISBN: 9788420539195 8420539198.
[8] Krishna Sankar. Cisco Wireless LAN Security. Cisco Press. ISBN: 1‐58705‐154‐0
[9] Exploratory Data Analysis Toolbox. Descargable desde la url
http://wdb.ugr.es/~josecamacho/downloads.php
[11] Toolbox PLS‐DA, programas descargables desde la url
http://www.mathworks.com/matlabcentral/fileexchange/30685‐pls‐regression‐or‐
discriminant‐analysis‐with‐leave‐one‐out‐cross‐validation‐and‐
prediction/content/PLS/plspred.m
[12] Basilio Sierra Araujo. Aprendizaje automático: Conceptos básicos y avanzados. Pearson.
ISBN 10: 84‐8322‐318‐X. ISBN 13: 978‐84‐8322‐815‐5.
109
ANEXO I: CAPTURA DE PAQUETES CON LIBPCAP
Código C basado en librería libpcap para la captura de paquetes:
“capturaPaquetes.c”
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <pcap.h> #include <netinet/if_ether.h> #include <netinet/ip.h> #include <netinet/tcp.h> #include <time.h> // Variables static int count = 1; static int paqArp = 0; static int paqAck = 0; static int paqBroad = 0; static int paqSolAso = 0; // Contabilidad de los paquetes de solicitud de asociación. static int paqResAso = 0; // Contabilidad de los paquetes de respuesta de asociación. static int paqAut = 0; // Contabilidad de los paquetes de autenticación. static int paqDeauth = 0; // Contabilidad de los paquetes de deautenticación. static int paqRts = 0; // Contabilidad de los paquetes RTS. static int paqCts = 0; // Contabilidad de los paquetes CTS. static int registroDatos = 0; // Función para el volcado de datos a un fichero de texto de forma que puedan ser introducidos como variable en matlab. void volcado(void) { FILE *pf; // Se abre el fichero. En caso de devolver 0 es que se ha producido error. if((pf = fopen("2606.txt", "a"))==0) {printf("Error abriendo el fichero....");exit(0);} else { // En caso contrario se añaden todos los datos numericos separados por un espacio terminando con un salto de línea para que la siguiente vez se escriba en otra fila. fprintf(pf, "%u %u %u %u %u %u %u\n", paqAck, paqBroad, paqAut, paqDeauth, paqRts, paqCts, count); // Se cierra el fichero. fclose(pf); } } // Función ejecutada cada vez que se capture un paquete. Lo que hace es analizar las cabeceras para indicar el tipo de paquete que es.
110
void examenPaquete(u_char *useless, const struct pcap_pkthdr* pkthdr, const u_char* packet) { int i; char *aux1, *aux2, *aux3; char *puntero; // (1 byte) /* Usamos este puntero para ir llevando la cuenta. */ char *auxiliar; int tipo, subtipo, punteroAux, valor, deauth, radioTapHeader; // Se incrementa el contador para saber cuántos paquetes van. count++; // Se inicializan las variables valor=0; deauth=0; radioTapHeader=0; // Se hace que el puntero apunte a la dirección donde se encuentra el valor de la longitud de la cabecera Tap. puntero = packet + 2; // Se extrae el valor de la longitud radioTapHeader = *puntero; // Los archivos tienen una cabecera radiotap que sumandola a la dirección de comienzo del paquete se puede continuar analizando el contenido. puntero = packet + radioTapHeader; // Ahora puntero apunta al principio de la cabecera 802.11 en el que se mira en primer lugar el tipo y subtipo: punteroAux = *puntero; // se guarda en punteroAux lo que hay en la zona de memoria apuntada por puntero. tipo = punteroAux & 0x0F; // 4 bits correspondientes al tipo subtipo = punteroAux & 0xF0; // 4 bits correspondientes al subtipo // Para hacer la clasificación, hay tres tipos dependiendo del valor de tipo: 0 (Admin), 4 (control), 8 ó 12 (datos). if (tipo==0) // Bits 3 y 2 del campo "control de trama" a 00 ‐‐> 0000 ‐‐> Administración // Una vez se conoce el tipo, se analizan los subtipos relacionados con este proyecto: switch(subtipo) { case 0: // En este caso 0 ‐‐> 0000 0000 ‐‐> Solicitud de asociación paqSolAso++;break; case 16: // En este caso 16 ‐‐> 0001 0000 ‐‐> Respuesta de asociación paqResAso++;break; case 176: // En este caso 176 ‐‐> 1011 0000 ‐‐> Solicitud de autenticación paqAut++;break; case 192:
111
// En este caso 192 ‐‐> 1100 0000 ‐‐> Solicitud de deautenticación paqDeauth++;break; } } else { if (tipo==4) {// Bits 3 y 2 del campo "control de trama" a 01 ‐‐> 0100 ‐‐> control switch(subtipo) { case 176: // En este caso 176 ‐‐> 1011 0000 ‐‐> campo control de trama: 1011 0100 ‐‐> RTS paqRts++;break; case 192: // En este caso 192 ‐‐> 1100 0000 ‐‐> campo control de trama: 1100 0100 ‐‐> RTS paqCts++;break; case 208: // En este caso 208 ‐‐> 1101 0000 ‐‐> campo control de trama: 1101 0100 ‐‐> ACK paqAck++;break; } } else // Bits 3 y 2 del campo "control de trama" a 10 ó 11 ‐‐> 1000 / 1100 ‐‐> datos {// Paquete de datos, no se hace nada } } // Para saber si el paquete es broadcast o no hay que mirar si están activos los bits "toDs o FromDs", detectar la posición mac destino y ver si es broadcast // En primer lugar el puntero apunta a la cabecera 802.11 puntero = packet + radioTapHeader + 1; // Se selecciona el valor de los campos "toDs y FromDs" punteroAux = *puntero & 0x03; // Ahora dependiendo del valor obtenido se analiza la dirección mac destino switch(punteroAux) { case 0: // En este caso tenemos fromDs 0 toDs 0, Sta‐>Sta // Tendremos entoces la siguiente asignacion de direcciones MAC // MAC1 ‐> Destino. // MAC2 ‐> Origen. // MAC3 ‐> BSSID. // La dirección a la que hay que acceder de la cabecera 802.11 está a 4 bytes de diferencia de la incial: saltando el campo control de trama y nav. aux1 = packet + radioTapHeader + 4; // Con un bucle for se recorren los 6 valores numéricos de la dirección MAC destino y si todos tienen el valor 255 es que el destino es broadcast. for ( i = 1; i <=6 ; i++) {
112
valor = *aux1; valor = valor & 0xff; if(valor!=255) {// No es broadcast, por lo que se sale del bucle for break;} // En el caso de estar en la última posición y es 255 sí que es un paquete broadcast por lo que se incrementa el contador if(i==6 && valor==255) {paqBroad++;} aux1 = aux1 + 1; } break; case 1: // En este caso tenemos fromDs 0 toDs 1, Sta‐>AP // Tendremos entoces la siguiente asignacion de direcciones MAC // MAC1 ‐> BSSID. // MAC2 ‐> Origen. // MAC3 ‐> Destino. // Al ser la dirección MAC 3 la de destino, hay que desplazarse 2 (control de trama) + 2 (NAV) + 6 (direcc. mac 1) + 6 (direcc. mac 2) = 16 aux1 = packet + radioTapHeader + 16; // Con un bucle for se recorren los 6 valores numéricos de la dirección MAC destino y si todos tienen el valor 255 es que el destino es broadcast. for ( i = 1; i <=6 ; i++) { valor = *aux1; valor = valor & 0xff; if(valor!=255) {// No es broadcast, por lo que se sale del bucle for break;} // En el caso de estar en la última posición y es 255 sí que es un paquete broadcast por lo que se incrementa el contador if(i==6 && valor==255) {paqBroad++;} aux1 = aux1 + 1; } break; case 2: // En este caso tenemos fromDs 1 toDs 0, AP‐> Sta // Tendremos entoces la siguiente asignacion de direcciones MAC // MAC1 ‐> Destino. // MAC2 ‐> BSSID. // MAC3 ‐> Origen // La dirección se encuentra en la misma posición que en el primer caso. aux1 = packet + radioTapHeader + 4; // Con un bucle for se recorren los 6 valores numéricos de la dirección MAC destino y si todos tienen el valor 255 es que el destino es broadcast. for ( i = 1; i <=6 ; i++) { valor = *aux1; valor = valor & 0xff; if(valor!=255) {// No es broadcast, por lo que se sale del bucle for
113
break;} // En el caso de estar en la última posición y es 255 sí que es un paquete broadcast por lo que se incrementa el contador if(i==6 && valor==255) {paqBroad++;} aux1 = aux1 + 1; } break; case 3: // En este caso tenemos fromDs 1 toDs 1, AP‐> AP // Comunicación entre puntos de acceso return; } } int main(int argc, char **argv) { // Se indica el nombre de la interfaz de la que se capturan los paquetes, en este caso será wlan0 en modo monitor ‐‐> mon0 char *dev="mon0"; char errbuf[PCAP_ERRBUF_SIZE]; pcap_t* descr; bpf_u_int32 maskp; // Máscara de subred bpf_u_int32 netp; // Dirección de red int aux; int contador = 0; time_t t1,t2; int tiempo = 0; // Si el dispositivo no se encuentra se muestra por pantalla el error y se sale del programa if (dev == NULL) {fprintf(stderr," %s\n",errbuf); exit(1);} else { // Si el dispositivo se encuentra se continua con el programa printf("Abriendo %s en modo promiscuo\n",dev);} // Se extrae la direccion de red y la mascara pcap_lookupnet(dev,&netp,&maskp,errbuf); // Se inicia la captura para lo que se necesita especificar el dispositivo y // además hay que ver si se produce error. En caso de error, éste se muestra // por pantalla y el programa termina. if((descr=pcap_open_live(dev, BUFSIZ, 1, ‐1, errbuf))==NULL) {printf("pcap_open_live(): %s \n", errbuf);exit(‐1);} // Si no hay error se inicia el programa de captura pero en primer lugar // hay que tomar medida de los tiempos ya que será necesario tenerlos en // cuenta para que se estén capturando paquetes durante un tiempo determinado. (void) time(&t1); (void) time(&t2); // Se utiliza un bucle while con el que controlar el número máximo de períodos // de toma de muestras que se quieren llevar a cabo. while(contador<100) {
114
// Contador será quien llevará un control del bucle while contador++; // Se ponen todas las variables a 0 que serán modificadas en las capturas de los paquetes. count = 0; paqArp = 0; paqAck = 0; paqBroad = 0; paqSolAso = 0; paqResAso = 0; paqAut = 0; paqDeauth = 0; paqRts = 0; paqCts = 0; // Se toman los tiempos antes de entrar al bucle de control de tiempo. (void) time(&t1); (void) time(&t2); tiempo = (int) t2‐t1; // Se capturan los paquetes durante un periodo de 30 segundos. while (tiempo < 30) { // Se captura un paquete aplicándole la función definida más arriba "examenPaquete" pcap_loop(descr, 1, examenPaquete, NULL); // Se toma el tiempo 2 para la comprobación temporal (void) time(&t2); // Se resta el tiempo actual con el incial para ver si han pasado 30 segundos. tiempo = (int) t2‐t1; } // Una vez se han capturado todos los paquetes durante los 30 segundos se realiza el volcado de los datos. volcado(); // Se para el programa 5 segundos y se continúa con el bucle. sleep(5); } return 0; }
115
ANEXO II: ANÁLISIS EXPLORATORIO DE DATOS
“aed.m”
% Datos con baja tasa incluida muestras = load('observacionesTresAtaques.txt'); % Etiquetas incluido baja tasa (5) observaciones5 = { 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3}; variables = {'ACK', 'BROAD', 'AUT', 'DEAUTH', 'RTS', 'CTS', 'TOTALPAQ'}; [muestrasp,average,scale] = preprocess2D(muestras , 2); %% Análisis de variables con PCA fig_h = plot_scores_pca(muestrasp, 1:2, 2, observaciones5); %% Análisis MEDA medaTNA1(); %medaTNA2(); %medaTNA3(); % Muestra la gráfica meda en tonos de grises
116
[meda_map,meda_dis] = meda_pca(datosp,1:2,2, 0.1, 1, variables'); % Muestra la gráfica meda discretizada [meda_map,meda_dis] = meda_pca(datosp,1:2,2, 0.1, 2, variables'); %% Análisis oMEDA % Dummy para ver la evaluación de las variables dummyTotal = [ -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; -0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; 0.3; ]; % Dummy para ver la variación de variables entre tráfico normal y ataque 1 dummyTNaA1 = [ -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1;
117
0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0]; % Dummy para ver la variación de variables entre tráfico normal y ataque 2 dummyTNaA2 = [ -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 0;0;0;0;0;0;0;0;0;0; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1 ];
118
% Dummy para ver la variación de variables entre tráfico normal y ataque 3 dummyTNaA3 = [ -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; ]; % Quitar comentario al tráfico que se quiera analizar omeda_vec = omeda_pca(muestrasp, 1:2, muestrasp, dummyTNaA1, 2, 1, variables'); %omeda_vec = omeda_pca(muestrasp, 1:2, muestrasp, dummyTNaA2, 2, 1, variables'); %omeda_vec = omeda_pca(muestrasp, 1:2, muestrasp, dummyTNaA3, 2, 1, variables'); %% AHORA COMPARACIÓN DEL TRÁFICO NORMAL Y EL ATAQUE 5 % Datos con baja tasa incluida muestras = load('2606 bajaTasa.txt'); % Etiquetas incluido baja tasa (5) observaciones5 = { 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1;
119
2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5}; variables = {'ACK', 'BROAD', 'AUT', 'DEAUTH', 'RTS', 'CTS', 'TOTALPAQ'}; %% Análisis PCA [muestrasp,average,scale] = preprocess2D(muestras , 2); fig_h = plot_scores_pca(muestrasp, 1:2, 2, observaciones5); % Ahora se seleccionan sólo las observaciones del tráfico normal y las % correspondientes al ataque de baja tasa. datosComp = load('TN-A1bajaTasa.txt'); observaciones = { 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1;
120
1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5}; % Análisis PCA [datosp,average,scale] = preprocess2D(datosComp , 2); fig_h = plot_scores_pca(datosp, 1:2, 2, observaciones); % Análisis MEDA [meda_map,meda_dis] = meda_pca(datosp,1:2,2, 0.1, 1, variables'); [meda_map,meda_dis] = meda_pca(datosp,1:2,2, 0.1, 2, variables'); dummy = [ -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; -1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1]; % Análisis oMEDA omeda_vec = omeda_pca(datosp, 1:2, datosp, dummy, 2, 1, variables');
121
ANEXO III: CÓDIGO MATLAB KNN
“knn.m”
% Se cargan los datos correspondientes a las observaciones de tráfico % normal y los tres ataques datos = load('observacionesTresAtaques.txt'); datos = datos(:, [1:4 6:7]); % Se crean también las etiquetas que indican a qué grupo corresponde cada % observación distinguiendo de forma numérica entre: % 1 -> Tráfico normal % 2 -> Ataque 1 % 3 -> Ataque 2 % 4 -> Ataque 3 etiquetas = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3]; % Se cargan también las nuevas observaciones que el clasificador debe % clasificar clasificar = load('nuevasObservaciones.txt'); clasificar = clasificar(:, [1:4 6:7]); % Clases a las que corresponden dichas observaciones para comprobar si el % clasificiador ha obtenido la clase real a la que pertenece la
122
% observación. grupos = [1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2]; % Valor de K para el la clasificación basada en los k vecinos más cercanos k = 1; % Obtención de las clases asignadas por el clasificador resultado = knnclassify (clasificar, datos, etiquetas, k); % Variable para la obtención del error error = 0; contador = 0; % Bucle que recorre el vector de clases obtenidas por el clasificador % comprobando si coincide con la clase a la que realmente pertenece la % observación for i=1:length(resultado) contador = contador + 1; if(resultado (i) ~= grupos (i)) % En el caso de que el clasificador falle, se incrementa la % variable error error = error + 1; end end % Cálculo del error (%) dividiendo el número de fallos producidos por el % clasificador entre el número total de observaciones. error = (error / contador) * 100 %% Parte correspondiente a la clasificación con ataque de baja tasa. datos = load('datosTN-A1bajatasa.txt'); % Conjunto de datos para el entrenamiento del clasificador entrenamiento = datos(1:80, [1:4 6:7]); % Conjunto de datos para la selección del valor óptimo de K selK = datos(81:130, [1:4 6:7]); % Conjunto de datos para la selección del valor óptimo de K clasif = datos(131:189, [1:4 6:7]); % Clases a las que corresponden las observaciones para el grupo de % entrenamiento:
123
et1 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; % Clases a las que corresponden las observaciones para el grupo de % seleccion de k et2 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; % Clases a las que corresponden las observaciones para el grupo de nuevas % observaciones a clasificar et3 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; % Valor de K para el la clasificación basada en los k vecinos más cercanos k = 1; % Obtención de las clases asignadas por el clasificador resultado = knnclassify (clasif, entrenamiento, et1, k); % Variable para la obtención del error error = 0; contador = 0; % Bucle que recorre el vector de clases obtenidas por el clasificador % comprobando si coincide con la clase a la que realmente pertenece la % observación for i=1:length(resultado) contador = contador + 1; if(resultado (i) ~= et3 (i)) % En el caso de que el clasificador falle, se incrementa la % variable error error = error + 1; end end % Cálculo del error (%) dividiendo el número de fallos producidos por el % clasificador entre el número total de observaciones. error = (error / contador) * 100
124
“seleccionK.m”
% Se cargan los datos correspondientes a las observaciones de tráfico % normal y los tres ataques datos = load('observacionesTresAtaques.txt'); datos = datos(:, [1:4 6:7]); % Se separa el conjunto de datos en 2 grupos para poder realizar el % entrenamiento del clasificador y la obtención del valor óptimo de K con % el que posteriormente se clasifican las nuevas muestras. entre = datos(1:200, :); clasi = datos(201:350, :); % Etiquetas de las clases a las que corresponden las observaciones que % serán usadas para el entrenamiento del clasificador etiquetasEntre = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3]; % Etiquetas de las clases a las que corresponden las observaciones que % serán usadas para la obtención del valor óptimo de K etiquetasClasi = [ 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3]; % Valor variable del que depende la eficiencia en la clasificación % realizada por el clasificador k = 21;
125
% Obtención de las clases asignadas por el clasificador prueba = knnclassify (clasi, entre, etiquetasEntre, k); % Variable para la obtención del error error = 0; contador = 0; % Bucle que recorre el vector de clases obtenidas por el clasificador % comprobando si coincide con la clase a la que realmente pertenece la % observación for i=1:length(prueba) contador = contador + 1; if(prueba (i) ~= etiquetasClasi (i)) % En el caso de que el clasificador falle, se incrementa la % variable error error = error + 1; end end % Cálculo del error (%) dividiendo el número de fallos producidos por el % clasificador entre el número total de observaciones. error = (error / contador) * 100
“seleccionKbajaTasa.m”
datos = load('datosTN-A1bajatasa.txt'); % Conjunto de datos para el entrenamiento del clasificador entrenamiento = datos(1:80, [1:4 6:7]); % Conjunto de datos para la selección del valor óptimo de K selK = datos(81:130, [1:4 6:7]); % Clases a las que corresponden las observaciones para el grupo de % entrenamiento: et1 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; % Clases a las que corresponden las observaciones para el grupo de % seleccion de k et2 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ];
126
% Valor variable del que depende la eficiencia en la clasificación % realizada por el clasificador k = 8; % Variable para la obtención del error error = 0; contador = 0; % Bucle que recorre el vector de clases obtenidas por el clasificador % comprobando si coincide con la clase a la que realmente pertenece la % observación prueba = knnclassify (selK, entrenamiento, et1, k); error = 0; contador = 0; for i=1:length(prueba) contador = contador + 1; if(prueba (i) ~= et2 (i)) % En el caso de que el clasificador falle, se incrementa la % variable error error = error + 1; end end % Cálculo del error (%) dividiendo el número de fallos producidos por el % clasificador entre el número total de observaciones. error = (error / contador) * 100
127
ANEXO IV: CÓDIGO MATLAB ÁRBOLES DE CLASIFICACIÓN
“arbol.m”
% Se cargan los datos correspondientes a las observaciones de tráfico % normal y los tres ataques datos = load('observacionesTresAtaques.txt'); datos = datos(:, [1:4 6:7]); % Se crean también las etiquetas que indican a qué grupo corresponde cada % observación distinguiendo de forma numérica entre: % 1 -> Tráfico normal % 2 -> Ataque 1 % 3 -> Ataque 2 % 4 -> Ataque 3 etiquetas = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3]; % Se cargan también las nuevas observaciones que el clasificador debe % clasificar clasificar = load('nuevasObservaciones.txt'); clasificar = clasificar(:, [1:4 6:7]); % Clases a las que corresponden dichas observaciones para comprobar si el
128
% clasificiador ha obtenido la clase real a la que pertenece la % observación. grupos = [1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2]; % Se usan los datos de entrenamiento para obtener el árbol que % posteriormente se usa para la clasificación arb = classregtree(datos, etiquetas); % Clasificación de las nuevas variables yfit = eval(arb, clasificar); resultado = round (yfit); % Variable para la obtención del error error = 0; contador = 0; % Bucle que recorre el vector de clases obtenidas por el clasificador % comprobando si coincide con la clase a la que realmente pertenece la % observación for i=1:length(resultado) contador = contador + 1; if(resultado (i) ~= grupos (i)) % En el caso de que el clasificador falle, se incrementa la % variable error error = error + 1; end end % Cálculo del error (%) dividiendo el número de fallos producidos por el % clasificador entre el número total de observaciones. error = (error / contador) * 100 %% Parte correspondiente a la clasificación con ataque de baja tasa. datos = load('datosTN-A1bajatasa.txt'); % Conjunto de datos para el entrenamiento del clasificador entrenamiento = datos(1:130, [1:4 6:7]); % Conjunto de datos para la clasificación de las nuevas observaciones clasif = datos(131:189, [1:4 6:7]); % Clases a las que corresponden las observaciones para el grupo de % entrenamiento: et1 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1;
129
1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; % Clases a las que corresponden las observaciones para el grupo de nuevas % observaciones a clasificar et3 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; arb = classregtree(entrenamiento, et1); yfit = eval(arb, clasif); resultado = round (yfit); % Variable para la obtención del error error = 0; contador = 0; % Bucle que recorre el vector de clases obtenidas por el clasificador % comprobando si coincide con la clase a la que realmente pertenece la % observación for i=1:length(resultado) contador = contador + 1; if(resultado (i) ~= et3 (i)) % En el caso de que el clasificador falle, se incrementa la % variable error error = error + 1; end end % Cálculo del error (%) dividiendo el número de fallos producidos por el % clasificador entre el número total de observaciones. error = (error / contador) * 100
130
ANEXO V: CÓDIGO MATLAB PLS‐DA
“clasiPlsda.m”
% Se cargan los datos correspondientes a las observaciones de tráfico % normal y los tres ataques datos = load('observacionesTresAtaques.txt'); datos = datos(:, [1:4 6:7]); % Se crean también las etiquetas que indican a qué grupo corresponde cada % observación distinguiendo de forma numérica entre: % 1 -> Tráfico normal % 2 -> Ataque 1 % 3 -> Ataque 2 % 4 -> Ataque 3 etiquetas = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3]; % Se cargan también las nuevas observaciones que el clasificador debe % clasificar clasificar = load('nuevasObservaciones.txt'); clasificar = clasificar(:, [1:4 6:7]);
131
% Clases a las que corresponden dichas observaciones para comprobar si el % clasificiador ha obtenido la clase real a la que pertenece la % observación. grupos = [1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2]; % Metaparámetro L con el que se determina el número de variables latentes % del modelo. L = 6; % Obtención del modelo PLS-DA a partir de los datos de entrenamiento. pls_model = plsda(datos, etiquetas, L, 'da'); yfit = plspred(clasificar, pls_model, grupos); % Variable para la obtención del error error = 0; contador = 0; % Bucle que recorre el vector de clases obtenidas por el clasificador % comprobando si coincide con la clase a la que realmente pertenece la % observación for i=1:length(yfit.Yp) contador = contador + 1; if(yfit.Yp (i) ~= grupos (i)) % En el caso de que el clasificador falle, se incrementa la % variable error error = error + 1; end end % Cálculo del error (%) dividiendo el número de fallos producidos por el % clasificador entre el número total de observaciones. error = (error / contador) * 100 %% Parte correspondiente a la clasificación con ataque de baja tasa. datos = load('datosTN-A1bajatasa.txt'); % Conjunto de datos para el entrenamiento del clasificador entrenamiento = datos(1:80, [1:4 6:7]); % Conjunto de datos para la selección del valor óptimo de L selK = datos(81:130, [1:4 6:7]);
132
% Conjunto de datos para la clasificación de las nuevas observaciones clasif = datos(131:189, [1:4 6:7]); % Clases a las que corresponden las observaciones para el grupo de % entrenamiento: et1 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; % Clases a las que corresponden las observaciones para el grupo de % seleccion de L et2 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; % Clases a las que corresponden las observaciones para el grupo de nuevas % observaciones a clasificar et3 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; pls_model = plsda(entrenamiento, et1, 4, 'da'); yfit = plspred(clasif, pls_model, et3); error = 0; contador = 0; for i=1:length(yfit.Yp) contador = contador + 1; if(yfit.Yp (i) ~= et3 (i)) error = error + 1; end end error = (error / contador) * 100
133
“seleccionL.m”
% Se cargan los datos correspondientes a las observaciones de tráfico % normal y los tres ataques datos = load('observacionesTresAtaques.txt'); datos = datos(:, [1:4 6:7]); % Se separa el conjunto de datos en 2 grupos para poder realizar el % entrenamiento del clasificador y la obtención del valor óptimo de L con % el que posteriormente se clasifican las nuevas muestras. entre = datos(1:200, :); clasi = datos(201:350, :); % Etiquetas de las clases a las que corresponden las observaciones que % serán usadas para el entrenamiento del clasificador etiquetasEntre = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3]; % Etiquetas de las clases a las que corresponden las observaciones que % serán usadas para la obtención del valor óptimo de L etiquetasClasi = [ 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3]; % Metaparámetro L con el que se determina el número de variables latentes % del modelo. L=10;
134
% Obtención del modelo PLS-DA a partir de los datos de entrenamiento. pls_model = plsda(datos, etiquetas, L, 'da'); yfit = plspred(clasificar, pls_model, grupos) % Variable para la obtención del error error = 0; contador = 0; % Bucle que recorre el vector de clases obtenidas por el clasificador % comprobando si coincide con la clase a la que realmente pertenece la % observación for i=1:length(yfit.Yp) contador = contador + 1; if(yfit.Yp (i) ~= etiquetasClasi (i)) % En el caso de que el clasificador falle, se incrementa la % variable error error = error + 1; end end % Cálculo del error (%) dividiendo el número de fallos producidos por el % clasificador entre el número total de observaciones. error = (error / contador) * 100
“seleccionLbajatasa.m”
% Conjunto de datos para el entrenamiento del clasificador entrenamiento = datos(1:80, [1:4 6:7]); % Conjunto de datos para la selección del valor óptimo de L selL = datos(81:130, [1:4 6:7]); % Clases a las que corresponden las observaciones para el grupo de % entrenamiento: et1 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; % Clases a las que corresponden las observaciones para el grupo de % seleccion de L et2 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5
135
]; L=10; pls_model = plsda(entrenamiento, et1, L, 'da'); yfit = plspred(selL, pls_model, et2); error = 0; contador = 0; for i=1:length(yfit.Yp) contador = contador + 1; if(yfit.Yp (i) ~= et2 (i)) error = error + 1; end end error = (error / contador) * 100
136
ANEXO VI: CÓDIGO MATLAB LDA Y QDA
“lda.m”
% Se cargan los datos correspondientes a las observaciones de tráfico % normal y los tres ataques datos = load('observacionesTresAtaques.txt'); datos = datos(:, [1:4 6:7]); % Se crean también las etiquetas que indican a qué grupo corresponde cada % observación distinguiendo de forma numérica entre: % 1 -> Tráfico normal % 2 -> Ataque 1 % 3 -> Ataque 2 % 4 -> Ataque 3 etiquetas = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3]; % Se cargan también las nuevas observaciones que el clasificador debe % clasificar clasificar = load('nuevasObservaciones.txt'); clasificar = clasificar(:, [1:4 6:7]); % Clases a las que corresponden dichas observaciones para comprobar si el
137
% clasificiador ha obtenido la clase real a la que pertenece la % observación. grupos = [1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2]; % Se aplica el clasificador LDA a las nuevas muestras clase = classify(clasificar, datos, etiquetas, 'linear'); error = 0; contador = 0; for i=1:length(clase) contador = contador + 1; if(clase (i) ~= grupos (i)) error = error + 1; end end error = (error / contador) * 100 %% Parte correspondiente a la clasificación con ataque de baja tasa. datos = load('datosTN-A1bajatasa.txt'); % Conjunto de datos para el entrenamiento del clasificador entrenamiento = datos(1:130, [1:4 6:7]); % Conjunto de datos para la clasificación de las nuevas observaciones clasif = datos(131:189, [1:4 6:7]); % Clases a las que corresponden las observaciones para el grupo de % entrenamiento: et1 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ];
138
% Clases a las que corresponden las observaciones para el grupo de nuevas % observaciones a clasificar et3 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; clase = classify(clasif, entrenamiento, et1, 'linear'); error = 0; contador = 0; for i=1:length(clase) contador = contador + 1; if(clase (i) ~= et3 (i)) error = error + 1; end end error = (error / contador) * 100
“qda.m”
% Se cargan los datos correspondientes a las observaciones de tráfico % normal y los tres ataques datos = load('observacionesTresAtaques.txt'); datos = datos(:, [1:4 6:7]); % Se crean también las etiquetas que indican a qué grupo corresponde cada % observación distinguiendo de forma numérica entre: % 1 -> Tráfico normal % 2 -> Ataque 1 % 3 -> Ataque 2 % 4 -> Ataque 3 etiquetas = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4;
139
1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3]; % Se cargan también las nuevas observaciones que el clasificador debe % clasificar clasificar = load('nuevasObservaciones.txt'); clasificar = clasificar(:, [1:4 6:7]); % Clases a las que corresponden dichas observaciones para comprobar si el % clasificiador ha obtenido la clase real a la que pertenece la % observación. grupos = [1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2]; % Se aplica el clasificador QDA a las nuevas muestras clase = classify(clasificar1, datos1, etiquetas, 'quadratic'); error = 0; contador = 0; for i=1:length(clase) contador = contador + 1; if(clase (i) ~= grupos (i)) error = error + 1; end end error = (error / contador) * 100 %% Parte correspondiente a la clasificación con ataque de baja tasa. datos = load('datosTN-A1bajatasa.txt');
140
% Conjunto de datos para el entrenamiento del clasificador entrenamiento = datos(1:130, [1:4 6:7]); % Conjunto de datos para la clasificación de las nuevas observaciones clasif = datos(131:189, [1:4 6:7]); % Clases a las que corresponden las observaciones para el grupo de % entrenamiento: et1 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; % Clases a las que corresponden las observaciones para el grupo de nuevas % observaciones a clasificar et3 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; clase = classify(clasif, entrenamiento, et1, 'quadratic'); error = 0; contador = 0; for i=1:length(clase) contador = contador + 1; if(clase (i) ~= et3 (i)) error = error + 1; end end error = (error / contador) * 100
141
ANEXO VII: CÓDIGO MATLAB REDES BAYESIANAS
“baye.m”
% Se cargan los datos correspondientes a las observaciones de tráfico % normal y los tres ataques datos = load('observacionesTresAtaques.txt'); datos = datos(:, [1:4 6:7]); % Se crean también las etiquetas que indican a qué grupo corresponde cada % observación distinguiendo de forma numérica entre: % 1 -> Tráfico normal % 2 -> Ataque 1 % 3 -> Ataque 2 % 4 -> Ataque 3 etiquetas = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 4; 4; 4; 4; 4; 4; 4; 4; 4; 4; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3]; % Se cargan también las nuevas observaciones que el clasificador debe % clasificar clasificar = load('nuevasObservaciones.txt'); clasificar = clasificar(:, [1:4 6:7]);
142
% Clases a las que corresponden dichas observaciones para comprobar si el % clasificiador ha obtenido la clase real a la que pertenece la % observación. grupos = [1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2;2;2;2; 3;3;3;3;3;3;3;3;3;3; 4;4;4;4;4;4;4;4;4;4; 1;1;1;1;1;1;1;1;1;1; 2;2;2;2;2;2;2]; % Se crea la red bayesiana aplicada posteriormente a las observaciones a % clasificar nb = NaiveBayes.fit(datos, etiquetas); % Clasificación de las nuevas observaciones cpre = predict(nb, clasificar); error = 0; contador = 0; for i=1:length(cpre) contador = contador + 1; if(cpre (i) ~= grupos (i)) error = error + 1; end end error = (error / contador) * 100 %% Parte correspondiente a la clasificación con ataque de baja tasa. datos = load('datosTN-A1bajatasa.txt'); % Conjunto de datos para el entrenamiento del clasificador entrenamiento = datos(1:130, [1:4 6:7]); % Conjunto de datos para la clasificación de las nuevas observaciones clasif = datos(131:189, [1:4 6:7]); % Clases a las que corresponden las observaciones para el grupo de % entrenamiento: et1 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1;
143
1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; % Clases a las que corresponden las observaciones para el grupo de nuevas % observaciones a clasificar et3 = [ 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5; 5 ]; nb = NaiveBayes.fit(entrenamiento, et1); cpre = predict(nb, clasif); error = 0; contador = 0; for i=1:length(cpre) contador = contador + 1; if(cpre (i) ~= et3 (i)) error = error + 1; end end error = (error / contador) * 100