agradecimientos - ua

85

Upload: others

Post on 11-Jul-2022

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Agradecimientos - ua
Page 2: Agradecimientos - ua

1

Agradecimientos

A mis padres y a mi pareja. Simplemente gracias.

Page 3: Agradecimientos - ua

2

Índice

Agradecimientos .............................................................................................. 1

Índice ................................................................................................................. 2

Índice de figuras ............................................................................................... 4

Índice de tablas ................................................................................................ 6

1. Introducción .................................................................................................. 7

2. Estado del arte .............................................................................................. 9

2.1. IDS ...................................................................................................... 9

2.1.1. Tipos de IDS ................................................................................. 9

2.1.2. Modo de detección ..................................................................... 10

2.1.3. Origen de los datos .................................................................... 12

2.1.4. Comportamiento ......................................................................... 14

2.1.5. IDS basados en red más usados. .............................................. 14

2.2. Deep learning aplicado en los IDS .................................................... 15

2.2.1. Historia de la inteligencia artificial .............................................. 15

2.2.2. Deep Learning ............................................................................ 17

2.2.3. Redes neuronales ...................................................................... 17

2.3. Redes Neuronales aplicadas a un IDS ............................................. 23

2.4. Datasets en la actualidad .................................................................. 24

3. Motivación y objetivos ............................................................................... 26

4. Metodología ................................................................................................ 27

4.1. Metodología de trabajo ..................................................................... 27

4.1.1. Desarrollo en cascada ................................................................ 27

4.1.2. Desarrollo iterativo ..................................................................... 27

5. Desarrollo del proyecto ............................................................................. 29

5.1. Entorno de trabajo y tecnologías a utilizar ........................................ 29

Page 4: Agradecimientos - ua

3

5.1.1. Software ..................................................................................... 29

5.1.2. Hardware .................................................................................... 32

5.2. Dataset.............................................................................................. 32

5.3. Pre-procesamiento del Dataset ......................................................... 33

5.4. División del dataset y Métricas a utilizar ........................................... 38

5.5. Arquitectura de la red ........................................................................ 40

5.6. Resultados obtenidos ....................................................................... 42

5.6.1. Resultados obtenidos mediante Talos........................................ 42

5.6.2. Experimentación con los mejores modelos. ............................... 45

5.6.3. Análisis de los resultados obtenidos .......................................... 55

5.7. Experimentando en un entorno real .................................................. 65

5.7.1. SSH ............................................................................................ 67

5.7.2. FTP............................................................................................. 70

6. Conclusión .................................................................................................. 73

7. Posibles mejoras y trabajo futuro ............................................................. 74

8. Bibliografía y referencias ........................................................................... 75

Anexo A ........................................................................................................... 79

Anexo B ........................................................................................................... 81

Anexo C ........................................................................................................... 83

Page 5: Agradecimientos - ua

4

Índice de figuras

Ilustración 1: Defensa en profundidad ................................................................ 8

Ilustración 2: Tipos de IDS ............................................................................... 10

Ilustración 3: Logo Snort .................................................................................. 14

Ilustración 4: Logo Suricata .............................................................................. 15

Ilustración 5: Test de Turing ............................................................................. 16

Ilustración 6: Relación Inteligencia artificial, Machine learning y Deep Learning

......................................................................................................................... 17

Ilustración 7: Comparativa neurona biológica e artificial .................................. 19

Ilustración 8: Función de activación Sigmoid.................................................... 19

Ilustración 9: Función de activación Tanh ........................................................ 20

Ilustración 10: Función de activación ReLu ...................................................... 20

Ilustración 11: Red neuronal densa .................................................................. 20

Ilustración 12: Red neuronal convolucional ...................................................... 21

Ilustración 13: Red neuronal recurrente ........................................................... 22

Ilustración 14: Fórmula error cuadrático medio ................................................ 22

Ilustración 15: Fórmula entropía cruzada ......................................................... 22

Ilustración 16: Tablero Trello ............................................................................ 27

Ilustración 17: Logo TensorFlow ...................................................................... 29

Ilustración 18: Logo Keras ................................................................................ 30

Ilustración 19: Logo Scikit-Learn ...................................................................... 30

Ilustración 20: Logo Talos ................................................................................ 31

Ilustración 21: Logo Anaconda ......................................................................... 32

Ilustración 22: Información contenida en el fichero csv .................................... 34

Ilustración 23: Mezcla de datos ........................................................................ 35

Ilustración 24: Fórmula normalización de datos ............................................... 36

Ilustración 25: Código para la normalización .................................................... 36

Ilustración 26: Esquema red neuronal ejemplo ................................................ 38

Ilustración 27: Código para la codificación ....................................................... 38

Ilustración 28: Diccionario hiperparametros Talos I .......................................... 41

Ilustración 29: Modelo sin utilizar Talos ............................................................ 41

Ilustración 30: Modelo utilizando Talos ............................................................ 42

Ilustración 31:Gráfica de resultados generales ................................................ 43

Page 6: Agradecimientos - ua

5

Ilustración 32: Mejor arquitectura del modelo ................................................... 45

Ilustración 33: Gráfica tasa de acierto con 50 épocas ...................................... 46

Ilustración 34: Gráfica tasa de acierto con 50 épocas ampliada ...................... 46

Ilustración 35: Diccionario hiperparametros Talos II ......................................... 47

Ilustración 36: Comparativa funciones de activación ........................................ 49

Ilustración 37: Resultados funciones de activación entrenamiento I ................ 49

Ilustración 38: Resultados funciones de activación validación I ....................... 49

Ilustración 39: Resultados funciones de activación entrenamiento II ............... 50

Ilustración 40: Resultados funciones de activación validación II ...................... 50

Ilustración 41: Diccionario hiperparametros Talos ............................................ 51

Ilustración 42: Comparativa optimizadores ...................................................... 53

Ilustración 43: Resultados optimizadores entrenamiento I ............................... 53

Ilustración 44: Resultados optimizadores validación I ...................................... 54

Ilustración 45: Resultados optimizadores entrenamiento II .............................. 54

Ilustración 46: Resultados optimizadores validación II ..................................... 54

Ilustración 47: Comparativa matrizes de confusión .......................................... 57

Ilustración 48: Cálculos mediante matriz de confusión ..................................... 58

Ilustración 49: Código cálculos matriz de confusión ......................................... 58

Ilustración 50: Matriz de confisión Adam .......................................................... 65

Ilustración 51: Entorno virtual a utilizar ............................................................. 66

Ilustración 52: Escenario ataque servicio SSH ................................................. 67

Ilustración 53: Interfaz gráfica herramienta CICFlowMeter .............................. 68

Ilustración 54: Resultado del IDS ante un flujo maligno ................................... 68

Ilustración 55: Resultado función predict, sobre tráfico inyectado .................... 69

Ilustración 56: Resultados obtenidos ante tráfico maligno SSH ....................... 69

Ilustración 57: Comparación características tráfico inyectado y real ................ 70

Ilustración 58: Escenario ataque servicio FTP ................................................. 71

Ilustración 59: Flujo de tráfico FTP utilizando Wireshark .................................. 72

Ilustración 60: Flujo de tráfico FTP generado ................................................... 72

Ilustración 61: Flujo de tráfico FTP dado .......................................................... 72

Page 7: Agradecimientos - ua

6

Índice de tablas

Tabla 1: Comparación IDS basados en firmas y anomalías ............................. 11

Tabla 2: Comparación IDS basados en host y red ........................................... 13

Tabla 3: Información ataques a la red .............................................................. 33

Tabla 4: Tráfico contenido en el fichero csv ..................................................... 34

Tabla 5: Ejemplo normalización ....................................................................... 36

Tabla 6: Datos sin codificar .............................................................................. 37

Tabla 7: Datos codificados mediante la codificación a entero .......................... 37

Tabla 8: Datos codificadoes mediante One-Hot ............................................... 37

Tabla 9: Matriz de confusión ............................................................................ 40

Tabla 10: Valores ordenados por val_accuracy de mejor a peor ..................... 43

Tabla 11: Valores obtenidos ordenados por accuracy de mejor a peor ........... 43

Tabla 12: Valores ordenados por val_accuracy de peor a mejor ..................... 44

Tabla 13: Valores obtenidos ordenados por la accuracy de peor a mejor ........ 44

Tabla 14: Resultados respecto a las funciones de activación .......................... 50

Tabla 15: Resultados respecto a los optimizadores ......................................... 55

Tabla 16: Valores dataset entrenamiento en función del tráfico benigno ......... 59

Tabla 17: Valores dataset entrenamiento en función del tráfico FTP ............... 59

Tabla 18: Valores dataset entrenamiento en función del tráfico SSH .............. 60

Tabla 19: Valores dataset validación en función del tráfico benigno ................ 60

Tabla 20: Valores dataset validación en función del tráfico FTP ...................... 60

Tabla 21: Valores dataset validación en función del tráfico SSH ..................... 61

Tabla 22: Valores dataset test en función del tráfico benigno .......................... 61

Tabla 23: Valores dataset test en función del tráfico FTP ................................ 61

Tabla 24: Valores dataset test en función del tráfico SSH ............................... 62

Tabla 25: Valores optimizador SGD ................................................................. 63

Tabla 26: Valores optimizadores Adadelta, Adagrad y RMSProp .................... 64

Tabla 27: Valores optimizadores Adam, Nadam, Adamax ............................... 64

Page 8: Agradecimientos - ua

7

1. Introducción

En la actualidad, es indiscutible que las tecnologías de la información se han

convertido en parte imprescindible de cualquier entorno, ya sea una empresa, una

administración pública, una organización del sector social o incluso a título particular.

Las empresas han tenido que asumir que, para mantener su posición estratégica, es

imprescindible la utilización de tecnologías de la información en su cadena de generación

de valor. Actualmente la tecnología no es una mera herramienta sin la cual las empresas

reducirían sus márgenes de beneficios porque ciertos procesos serían más lentos, sino que

son en realidad el corazón diferenciador y el motor económico de éstas.

Sin embargo, no todas ellas son conscientes de las limitaciones y peligros que las

tecnologías de la información pueden tener en la empresa. Es por ello, que paralelamente

a la aparición de estas nuevas herramientas, aparece otro concepto el cual, cada día, toma

más relevancia, la seguridad de estas tecnologías de la información.

Podemos entender como seguridad una característica de cualquier sistema que nos

indica que ese sistema está libre de todo peligro, daño o riesgo, y que es, en cierta manera,

infalible. Pero como esta característica, es muy difícil de conseguir podemos suavizar esta

definición de seguridad y hablar de fiabilidad, que sería la probabilidad de que un sistema

se comporte tal y como se espera de él. A grandes rasgos para mantener un sistema seguro

(o fiable) hablamos de garantizar tres aspectos básicos:

1. La confidencialidad exige que los objetos de un sistema han de ser accedidos

únicamente por elementos autorizados a ello.

2. La disponibilidad indica que los objetos del sistema tienen que permanecer

accesibles a elementos autorizados; es el contrario de la negación de servicio

3. La integridad significa que los objetos sólo pueden ser creados o modificados

por elementos autorizados, y de una manera controlada y por tanto no han sido

modificados por terceros no autorizados

Junto con la fiabilidad o grado de seguridad de un sistema, entra, el concepto de

defensa en profundidad el cual se basa en la premisa asumida anteriormente, de que todo

componente de un sistema puede ser vulnerado, y por tanto no se debe delegar la

seguridad de un sistema en un único método o componente de protección. Por tanto, la

idea principal de la defensa en profundidad consiste en dividir la seguridad en diversas

Page 9: Agradecimientos - ua

8

capas, de forma que, para acceder a la última de estas, donde reside la información más

importante de la empresa, por ejemplo, los datos, sea necesario previamente haber roto

todas las capas previas.

Ilustración 1: Defensa en profundidad

Los elementos que componen un sistema de defensa en profundidad pueden variar

según la necesidad y recursos de los que disponga una compañía, pero uno de los

principales, y el que vamos a desarrollar en este proyecto, son los sistemas de detección

de intrusos, también conocidos como IDS por sus siglas en inglés (Intrusion Detection

System), los cuales serán colocados en la capa de red, para poder detectar un

funcionamiento anómalo del sistema.

Page 10: Agradecimientos - ua

9

2. Estado del arte

Para comprender de una forma más clara los conceptos a cubrir en este proyecto,

vamos a ver por separado cada uno de los elementos sobre los que vamos a trabajar.

2.1. IDS

A grandes rasgos, podríamos definir a un IDS [1] como un dispositivo o aplicación

de software que monitoriza una red o sistemas en busca de actividad maliciosa o

violaciones de políticas. Cualquier actividad de intrusión o violación generalmente se

informa a un administrador o se recopila de forma centralizada utilizando un sistema de

información de seguridad y gestión de eventos. Por tanto, es capaz de identificar posibles

violaciones de seguridad que incluyen tanto intrusiones, (ataque desde fuera de la

organización) como mal uso (ataque desde dentro de la organización).

Es importante contextualizar un IDS dentro de un sistema de red, donde tenemos

otros elementos que trabajan al mismo nivel realizando funciones similares. Uno de estos

elementos son los firewalls, que realiza funciones de prevención, por tanto, aunque ambos

se relacionan [2] con la seguridad de la red, un sistema de detección de intrusos (IDS)

difiere de un firewall en que un IDS busca intrusiones para evitar que sucedan mientras

que los firewalls limitan el acceso entre redes para evitar intrusiones sin poder identificar,

por ejemplo, un ataque desde el interior de la red.

Un IDS evalúa una posible intrusión una vez que ha tenido lugar y señala una

alarma. Esto se logra tradicionalmente examinando las comunicaciones de red,

identificando heurísticas y patrones (a menudo conocidos como firmas) de ataques

informáticos comunes, y tomando medidas para alertar a los operadores. Por otra parte,

un sistema que termina las conexiones se denomina sistema de prevención de intrusiones

el cual analizaremos en los siguientes apartados.

2.1.1. Tipos de IDS

En la actualidad existe una gran variedad de IDS según sus funciones como

podemos ver en la siguiente imagen:

Page 11: Agradecimientos - ua

10

Ilustración 2: Tipos de IDS

2.1.2. Modo de detección

• IDS basado en firmas

Este tipo de IDS [3] se centra en la búsqueda de una "firma", patrones, o una

identidad conocida, de una intrusión o evento de intrusión específico. Necesita

actualizaciones periódicas de qué firmas o identidades son comunes en este momento

para garantizar que su base de datos de intrusos esté actualizada. Se podría decir, por

tanto, que los IDS basados en firmas son tan buenos como la actualización de su base de

datos en un momento dado.

Los atacantes pueden sortear los IDS basados en firmas cambiando frecuentemente

pequeñas cosas sobre cómo se produce el ataque, por lo que las bases de datos no pueden

seguir el ritmo. Además, significa que un tipo de ataque completamente nuevo puede no

ser detectado en absoluto por IDS basados en firmas porque la firma no existe en la base

de datos. Este podría ser el principal punto débil de este tipo de IDS que, sin embargo, un

IDS basado en anomalías como el que vamos a desarrollar en este proyecto si podría

detectar. Además, cuanto más grande sea la base de datos, mayor será la carga de

procesamiento para que el sistema analice cada conexión y la compare con la base de

datos.

• IDS basados en anomalías

Page 12: Agradecimientos - ua

11

A diferencia de los IDS basados en firmas, como se ha mencionado anteriormente,

los IDS basados en anomalías buscan los tipos de ataques desconocidos que los IDS

basados en firmas encuentran difíciles de detectar. Debido al rápido crecimiento del

malware y los tipos de ataque, los IDS basados en anomalías utilizan enfoques de

aprendizaje automático para comparar modelos de comportamiento confiable con

comportamiento nuevo. Como resultado, se marcarán anomalías o comportamientos de

aspecto extraño o inusual. Sin embargo, el comportamiento previamente desconocido

pero legítimo también puede marcarse accidentalmente, también conocido como falsos

positivos, lo que puede causar algunos problemas, sobre todo a los administradores de

sistemas al tener que estar revisando este tipo de alarmas.

Por otro lado, uno de los puntos fuertes de los IDS basados en anomalías, es su

capacidad para determinar cuándo alguien está sondeando o barriendo lo que suele

preceder al ataque de una red.

Las principales diferencias entre los dos modos las podemos ver en la siguiente

tabla:

Basados en firmas Basados en anomalías

Rendimientos de

detección

Baja tasa de falsas alarmas; Alta

tasa de alarmas perdidas

Baja tasa de alarmas perdidas;

Alta tasa de alarmas falsas.

Eficiencia de

detección

Alto, disminuye con la escala de

base de datos de firmas

Depende de la complejidad del

modelo.

Dependencia del

dominio de

conocimiento

Casi todas las detecciones

dependen de

conocimiento del dominio

Bajo, solo el diseño de la

característica

depende del conocimiento del

dominio

Interpretación Diseño basado en dominio

conocimiento, fuerte

interpretativo

capacidad

Solo emite resultados de

detección,

habilidad interpretativa débil

Detección de ataques

desconocidos

Solo detecta ataques conocidos Detecta ataques conocidos y

desconocidos

Tabla 1: Comparación IDS basados en firmas y anomalías

Page 13: Agradecimientos - ua

12

2.1.3. Origen de los datos

• Sistema de detección de intrusos basado en host (HIDS)

Consiste en un agente en un host que identifica intrusiones mediante el análisis de

llamadas al sistema, registros de aplicaciones, modificaciones del sistema de archivos

(binarios, archivos de contraseña, bases de datos, listas de control de acceso, etc.) y

estados del host. En un HIDS, los sensores generalmente consisten en un agente de

software. Algunos IDS basados en aplicaciones también forman parte de esta categoría.

Los sistemas de detección de intrusos también pueden ser específicos del sistema

utilizando herramientas personalizadas y honeypots[4]. En el caso de la seguridad física

del edificio, IDS se define como un sistema de alarma diseñado para detectar la entrada

no autorizada.

• Sistema de detección de intrusos basado en red (NIDS)

Es una plataforma independiente que identifica intrusiones al examinar el tráfico de

red pudiendo monitorizar al mismo tiempo múltiples hosts. Los sistemas de detección de

intrusos en red obtienen acceso al tráfico de la red conectándose a un concentrador de red,

a un conmutador de red configurado para la duplicación de puertos o una toma de red. En

un NIDS, los sensores se colocan en los puntos de estrangulamiento de la red para

monitorizar, a menudo en la zona desmilitarizada (DMZ) o en los límites de la red. Los

sensores capturan todo el tráfico y analizan el contenido de paquetes individuales para

detectar tráfico malicioso. Un ejemplo de un NIDS como veremos es Snort.

Finalmente, junto con lo visto en el apartado de IDS basado en anomalías,

llegaríamos a la principal cuestión de los NIDS basados en anomalías, ¿Cómo podríamos

distinguir un tráfico anómalo de uno benigno? debido a que la respuesta a esta pregunta

depende de muchos parámetros, como, por ejemplo, la cantidad de tráfico a la que

estamos habituados, porque para para lo que una empresa es una cantidad normal, para

otra podría suponer una denegación de servicio. Sin embargo, alguno de los

comportamientos que podríamos analizar son los siguientes [5]:

- ¿Se completó el three-way handshake [6] entre dos anfitriones? Si fue así, esto

significa que el servidor escucha en el puerto en el que el cliente solicitó y el servidor

aceptó la conexión. Esto está bien si el comportamiento esperado es que el servidor

escucha en el puerto solicitado. Sin embargo, ¿qué sucede si el puerto del servidor no es

Page 14: Agradecimientos - ua

13

el que espera escuchar? Esto podría indicar que se está ejecutando algún servicio, solo

conocido por el administrador del sistema. Sin embargo, también podría significar que

alguien instaló maliciosamente alguna aplicación de puerta trasera en el servidor sin

ningún consentimiento.

- ¿Se transmitieron los datos? Mediante herramientas de análisis de tráfico

podemos ver, el número de bytes de datos que se enviaron en una conexión. Si vemos

datos transmitidos, esto significa que los dos hosts están hablando entre sí. Cuando

realizamos algún tipo de análisis retrospectivo de actividad inesperada entre dos hosts,

observar la cantidad de bytes intercambiados puede ser útil para evaluar la gravedad de

lo que podría haber ocurrido. Es posible que no podamos ver los bytes de datos reales o

la carga útil, pero los números pueden ser reveladores. Los largos intercambios

individuales y el número de intercambios en conjunto pueden indicar fácilmente un daño

potencial por parte de un intruso.

- ¿Quién comenzó y/o terminó la conexión? Al determinar qué host inició y

finalizó la conexión, podemos tener una idea de quién tiene el control. Por lo general, el

cliente solicita la conexión y el servidor responde. Cualquiera de los hosts puede finalizar

la conversación, así que observaremos quien inicia la terminación con un RESET o FIN.

Por último, en la siguiente tabla podemos ver las principales diferencias entre los

IDS basados en host y los IDS basados en red:

IDS basado en host IDS basado en red

Origen de los datos Registros del sistema operativo o

programas de aplicación

Tráfico de red

Despliegue En cada anfitrión; Depende del

sistema operativo; Difícil de

implementar

En los nodos de la red clave; Fácil

de implementar

Eficiencia de

detección

Baja, debe procesar muchos logs Alta, puede detectar ataques en

tiempo real

Trazabilidad de la

intrusión

Rastree el proceso de intrusión

de acuerdo con las rutas de

llamadas del sistema

Rastrea la posición y el tiempo de

intrusión de acuerdo con las

direcciones IP y marcas de tiempo

Limitación No se puede analizar el

comportamiento de la red.

Monitoriza solo el tráfico que pasa

en un segmento de red

Tabla 2: Comparación IDS basados en host y red

Page 15: Agradecimientos - ua

14

2.1.4. Comportamiento

Respecto al comportamiento tenemos dos tipos de sistemas de detección:

• Pasivos

Los sistemas de detección de intrusos pasivos son aquellos que no están diseñados

para responder ante un ataque, simplemente lo detectan avisando de que alguna anomalía

se ha producido

• Activos

Los sistemas de detección activos también conocidos como IPS por sus siglas en

inglés (Intrusion Prevention System) combinan el funcionamiento de un IDS junto con

una respuesta ante la detección de un ataque

2.1.5. IDS basados en red más usados.

Debido a que en este proyecto vamos a desarrollar un IDS basado en red, vamos a

ver resumidamente los NIDS más utilizados en la actualidad.

• Snort

Snort [7] es un sistema de prevención de intrusiones basado en red de código

abierto, capaz de realizar análisis de tráfico en tiempo real y registro de paquetes en redes

IP. Puede realizar análisis de protocolos, búsqueda o coincidencia de contenido, y puede

usarse para detectar una variedad de ataques y sondeos, como por ejemplo

desbordamientos de buffer, escaneos de puertos furtivos, o ataques CGI.

Ilustración 3: Logo Snort

• Suricata

Page 16: Agradecimientos - ua

15

Suricata [8] es un motor de detección de amenazas basado en red de código abierto.

El motor Suricata es capaz de detección de intrusos en tiempo real (IDS), prevención de

intrusos en línea (IPS), monitoreo de seguridad de red (NSM) y procesamiento pcap fuera

de línea.

Suricata utiliza un lenguaje de firma completo para determinar las amenazas

conocidas y qué tipo de comportamiento es probable que provenga de un intruso. Una

instancia de Suricata puede inspeccionar el tráfico de varios gigabits, y el motor se basa

en una base de código moderna y escalable diseñada para funcionar a un alto nivel.

Detecta automáticamente protocolos en cualquier puerto y puede aplicar la lógica

de detección a cada paquete y protocolo a medida que pasa. Como parte de esto, puede

registrar solicitudes HTTP, que pueden ayudar a detectar ataques de escaneo o inundación

utilizando grandes cantidades de solicitudes de protocolo "normales" para abrumar una

red.

Ilustración 4: Logo Suricata

2.2. Deep learning aplicado en los IDS

2.2.1. Historia de la inteligencia artificial

No hay duda de que, en la actualidad, la inteligencia artificial es uno de los campos

con mayor inversión y visión de futuro que empieza a ser aplicada prácticamente en todos

los campos de la informática, incluyendo el de la ciberseguridad.

El origen de la inteligencia artificial empezó a formar sus bases en los 50 gracias a

Alan Turing [9], el que es considerado por muchos el padre de la IA (Inteligencia

artificial), por su publicación “Computing Machinery and Intelligence” [10], donde se

Page 17: Agradecimientos - ua

16

introdujeron los primeros conceptos sobre la inteligencia de las máquinas mediante el

Test de Turing, el cual afirma que:

«Una computadora puede ser llamada inteligente si logra engañar a una persona

haciéndole creer que es un humano» - Alan Turing

Ilustración 5: Test de Turing

Desde entonces, la inteligencia artificial ha pasado por diferentes etapas de menos

afluencia como el invierno de la IA [11], o de más afluencia como en el año 1996 cuando

un ordenador llamado Deep Blue derrotó al mejor jugador de ajedrez por aquellos

momentos Gary Kasparov [12], hasta encontrarse en el punto actual, donde dentro de la

propia IA han aparecido otras ramas como son el aprendizaje automático (Machine

learning) el cual desarrolla técnicas que permiten a las máquinas aprender por sí mismas

mediante algoritmos a partir de datos suministrado y el aprendizaje profundo (Deep

learning) la idea principal del cual es la resolución de problemas a partir de redes

neuronales profundas que pretenden imitar la forma en la que nuestro cerebro toma

decisiones. En la siguiente imagen, podemos ver a alto nivel a los principales

componentes del mundo de la IA.

Page 18: Agradecimientos - ua

17

Ilustración 6: Relación Inteligencia artificial, Machine learning y Deep Learning

2.2.2. Deep Learning

Podemos definir al aprendizaje profundo como una clase de algoritmos de

aprendizaje automático que usa varias capas para extraer progresivamente características

de nivel superior de la entrada sin formato. Por ejemplo, en el procesamiento de imágenes,

las capas inferiores pueden identificar bordes, mientras que las capas superiores pueden

identificar los conceptos relevantes para un ser humano, como dígitos, letras o caras.

Debido a que vamos a utilizar el aprendizaje profundo empleando la arquitectura

de redes neuronales artificiales para la implementación de nuestro IDS de red basado en

anomalías, vamos a ver el funcionamiento de estas redes neuronales.

2.2.3. Redes neuronales

Las redes neuronales artificiales (ANN) por sus siglas en ingles Artificial Neural

Network, son sistemas informáticos vagamente inspirados en las redes neuronales

biológicas que constituyen los cerebros de los animales. Dichos sistemas "aprenden" a

realizar tareas considerando ejemplos, generalmente sin ser programados con reglas

específicas de la tarea. Uno de los campos donde más son utilizadas las redes neuronales

artificiales es en el reconocimiento de imágenes, debido a que pueden aprender a

identificar imágenes que contienen, por ejemplo, gatos, analizando imágenes de ejemplo

que se han etiquetado manualmente como "gato" o "no gato" y utilizando los resultados

para identificar gatos en otras imágenes. Lo hacen sin ningún conocimiento previo, en

Page 19: Agradecimientos - ua

18

cambio, generan automáticamente características de identificación a partir de los

ejemplos que procesan.

Para entender con más detalle como las redes neuronales consiguen llevar a cabo la

función para la cual son desarrolladas vamos a ver con más detalle los elementos por los

cuales están formadas y diferentes parámetros y opciones que más tarde modificaremos

para conseguir distinguir entre tráfico normal y el anómalo.

• Neuronas artificiales

Las neuronas artificiales son la base de las redes neuronales, ya que se basan en una

colección de estas, las cuales pretenden modelar el funcionamiento de las neuronas en un

cerebro biológico. La primera neurona artificial apareció en 1958 gracias al trabajo

realizado por F. Rosenblatt [13] la cual denominó como perceptrón simple. Podemos ver

las partes de una neurona artificial mediante la siguiente analogía respecto a una

biológica.

Dendritas: la cantidad de entradas que acepta la neurona o número de dimensiones

de los datos de entrada.

Sinapsis: pesos asociados con las dendritas. Estos son los valores que cambian

durante la fase de entrenamiento.

Baias o sesgo. Le permite aprender sobre un límite de decisión que no está centrado

en el origen del espacio D-dimensional.

Núcleo (célula del cuerpo): esta es una función que une los valores provenientes de

las sinapsis, definiendo así el comportamiento de la neurona. Para simular la acción de la

neurona biológica, es decir, disparando (activando) solo cuando hay ciertos estímulos en

la entrada. El funcionamiento del núcleo viene dado por la siguiente función:

Axón: este es el valor de salida de la neurona. Puede ser utilizado como entrada por

otras neuronas.

En la siguiente imagen podemos ver un resumen de los expuesto anteriormente:

Page 20: Agradecimientos - ua

19

Ilustración 7: Comparativa neurona biológica e artificial

• Función de activación

La función de activación [14] es importante para que una red neuronal aprenda. Su

propósito principal es convertir una señal de entrada de un nodo en una señal de salida,

la cual será usada como entrada a la siguiente capa en la pila. La función de activación

decide, por tanto, si una neurona debe activarse o no mediante el cálculo de la suma

ponderada y añadiéndole un sesgo adicional. El motivo es introducir la no linealidad en

la salida de una neurona. Hay varios tipos de funciones de activación, pero las principales

son:

Sigmoid. Proporciona una salida en el rango [0,1] permitiendo interpretar la

predicción como una probabilidad:

Ilustración 8: Función de activación Sigmoid

Tanh. Es similar a Sigmoid pero mejora el rendimiento. La función oscila entre (-

1,1). La principal ventaja de esta función es que las entradas negativas fuertes se asignarán

a la salida negativa y solo las entradas de valor cero se asignarán a las salidas cercanas a

cero. Por lo tanto, es menos probable que se bloqueen durante el entrenamiento.

Page 21: Agradecimientos - ua

20

Ilustración 9: Función de activación Tanh

ReLu. Es la función de activación más utilizada y que varía de cero a infinito. [0,

∞) dando una salida de "x" si x es positivo y 0 en caso contrario.

Ilustración 10: Función de activación ReLu

• Tipo de capas

Una vez hemos visto como está compuesta una única neurona o perceptrón, vamos

a ver como estas pueden formar una red neuronal para así añadir un mayor grado de

abstracción en función del tipo de capas que pueden formar, lo cual nos indica como se

relacionan las neuronas de cada capa entre sí. Los principales tipos que podemos

encontrar en la actualidad son los siguientes:

Red neuronal densa: Es una topología de red particular en la que las neuronas entre

dos capas adyacentes están completamente conectadas por pares, pero las neuronas dentro

de una sola capa no comparten conexiones. En la siguiente imagen podemos ver un

esquema de cuál sería su arquitectura:

Ilustración 11: Red neuronal densa

Como podemos ver, está formada por diversas capas, entre las que podemos

distinguir la capa de entrada formada por las neuronas que introducen los valores a la red.

Page 22: Agradecimientos - ua

21

Las capas ocultas cuyo diseño no es tan simple como en la capa de entrada y de salida,

por el simple hecho de que no hay reglas, es decir, modificando el número de capas

ocultas y neuronas en cada una de ellas podremos modelar la realidad de una forma

distinta. Y por último la capa de salida que realiza la clasificación y tiene tantas neuronas

como posibles clases presente el problema.

Este tipo de red será la que vamos a utilizar en este proyecto por las propiedades

que nos ofrece, ya que como vamos a ver a continuación los otros dos tipos de redes

neuronales son utilizadas en otro tipo de problemas.

Red neuronal convolucional. La principal diferencia de la red neuronal

convolucional con el modelo visto anteriormente es que cada neurona no se une con todas

y cada una de las capas siguientes, sino que solo con un subgrupo de ellas para poder

especializarse en una tarea en concreto, es por ello que son muy utilizadas en los campos

de visión artificial.

Ilustración 12: Red neuronal convolucional

Red neuronal recurrente: Las redes neuronales recurrentes no tienen una estructura

de capas, sino que permiten conexiones arbitrarias entre las neuronas, incluso pudiendo

crear ciclos, con esto se consigue crear la temporalidad, permitiendo que la red tenga

memoria, es por ello que son más utilizadas para trabajar con data sets con variables

temporales.

Page 23: Agradecimientos - ua

22

Ilustración 13: Red neuronal recurrente

• Funciones de coste

Una vez tenemos claro los elementos que forman una red neuronal y como se

conectan estos elementos entre sí, nos queda ver cómo funcionan o aprenden estas redes.

Para ello deberemos definir la relación entre la salida del modelo y los datos reales. Para

ello, definiremos una función de pérdida o coste. Esta función se utilizará para evaluar

cómo debemos ajustar un modelo en función de la diferencia entre el valor real y el valor

predicho. Las principales funciones de coste que tenemos son:

Error cuadrático medio: Como bien indica su nombre, calcula el error de la red

mediante la diferencia al cuadrado entre las predicciones y los resultados esperados. Su

función de coste sería la siguiente:

Ilustración 14: Fórmula error cuadrático medio

Entropía cruzada [15]: Mide el rendimiento de un modelo de clasificación cuyo

resultado es un valor de probabilidad entre 0 y 1. La pérdida de entropía cruzada aumenta

a medida que la probabilidad pronosticada difiere de la etiqueta real. Por lo tanto, por

ejemplo, predecir una probabilidad de 0.012 cuando la etiqueta de observación real es 1

sería malo y daría como resultado un alto valor de pérdida.

Definimos la función de costo de entropía cruzada como:

Ilustración 15: Fórmula entropía cruzada

Donde n es el número total de elementos de datos de entrenamiento, la suma es

sobre todas las entradas de entrenamiento, x, e y es el resultado deseado correspondiente.

• Propagación hacia atrás.

La propagación hacia atrás es un algoritmo que utiliza el error en la salida obtenido

anteriormente para reducir el error y propagar ese error hacia las capas ocultas y de

Page 24: Agradecimientos - ua

23

entrada con el objetivo de que, en las siguientes iteraciones, la salida obtenida se aproxime

a la salida esperada. El algoritmo busca el mínimo de la función de error y ajustará los

pesos con respecto a ese error. Para ello se utilizan algoritmos como:

El descenso del gradiente: Es un algoritmo de optimización utilizado para

minimizar algunas funciones moviéndose iterativamente en la dirección del descenso más

pronunciado según lo definido por el negativo del gradiente. Por tanto, utilizaremos el

descenso de gradiente para actualizar los parámetros de nuestro modelo.

El descenso del gradiente estocástico: [16] es una modificación del algoritmo del

descenso del gradiente para mejorar algunas de las debilidades que este tiene, como su

velocidad antes grandes cargas de datos, introduciendo el descenso del gradiente

estocástico aleatoriedad al seleccionar los puntos de datos en cada paso para calcular las

derivadas, por tanto este último elige aleatoriamente un punto de datos del conjunto de

datos completo en cada iteración para reducir enormemente los cálculos.

Por tanto, estos serían los elementos principales que necesitamos para crear una red

neuronal artificial que, como veremos a lo largo del desarrollo del proyecto vamos a

modelar según nuestras necesidades.

2.3. Redes Neuronales aplicadas a un IDS

Una vez hemos definido los pilares básicos sobre los que se basa este proyecto,

vamos a ver como relacionarlos, es decir, como se utiliza la inteligencia artificial para la

detección de intrusos.

Como hemos visto anteriormente existen dos tipos de IDS, los basados en host y

los basados en red, pero en este proyecto nos vamos a centrar en los basados en red, por

consiguiente, hemos visto los principales IDS basados en red que hay en la actualidad,

Snort y Suricata. Sin embargo, respecto al modo de detección, ambos se basan en la

detección mediante firmas, lo cual es una gran solución para detectar ataques conocidos,

pero no lo es para detectar nuevos ataques o previamente no reconocidos.

Es por ello, que en los últimos años se ha visto un aumento en el uso del aprendizaje

automático para estas tareas. Muchas compañías están descubriendo los beneficios de

incorporar el aprendizaje automático sobre sus productos o servicios. Por ejemplo,

PayPal, utiliza aprendizaje profundo para reconocer patrones de fraude y Google usa

Page 25: Agradecimientos - ua

24

varias implementaciones de aprendizaje profundo para potenciar el reconocimiento visual

o de voz [17].

El problema de algunas aplicaciones es que son demasiado difíciles de codificar

con algoritmos para buscar patrones en enormes dimensiones. Dado que los NIDS

basados en anomalías utilizan modelos de redes neuronales profundas, serán capaces de

detectar ataques aunque estos no hayan sido previamente registrados por el hecho de

analizar y abstraer un comportamiento, en vez de seguir un patrón en concreto, sin

embargo, pese a esta gran ventaja respecto a los basados en firmas, el funcionamiento o

la tasa de acierto queda limitada (como todas las aplicaciones de aprendizaje automático)

por el conjunto de datos utilizado para entrenar al modelo como podremos comprobar al

final de este proyecto.

2.4. Datasets en la actualidad

Para que la red neuronal sea capaz de distinguir entre un tráfico correcto y uno

anómalo le será necesario un conjunto de valores de entrada categorizados. Para ello se

pueden utilizar dos métodos. Por una parte, podemos crear este dataset, a mano, es decir,

para este caso en concreto tendríamos que recolectar nosotros mismos el tráfico benigno

y maligno, para así pasárselo a la red neuronal como entrada, lo cual conlleva un gran

esfuerzo, por lo que no suele ser un método recomendado a no ser que no exista ya un

dataset creado. Por otra parte, podemos utilizar un dataset que ya ha sido creado y

probado para la tarea que vayamos a realizar.

Existen una gran variedad de estos entre los que destacan, por ejemplo, el dataset

del MNIST con una base de datos de los números del cero al nueve escritos a mano[18],

utilizada como ejemplo básico de introducción a las redes neuronales.

Para este trabajo vamos a utilizar un dataset ya creado, entre los que podemos

destacar.

1. DARPA1998

El conjunto de datos DARPA1998 [19] fue construido por el laboratorio Lincoln

del MIT y es ampliamente utilizado en estudios IDS. Para compilarlo, los investigadores

recolectaron tráfico de Internet en más de nueve semanas. El conjunto de datos contiene

paquetes sin etiquetas y con etiquetas. Como los paquetes sin etiquetas no se pueden

Page 26: Agradecimientos - ua

25

aplicar directamente a modelos tradicionales de aprendizaje automático, el conjunto de

datos KDD99 fue construido para superar este inconveniente

2. KDD99

El conjunto de datos KDD99 [20] es uno de los conjuntos de datos de referencia

IDS más extendidos en la actualidad. Sus compiladores extrajeron características de 41

dimensiones de los datos en DARPA1998. Las etiquetas en KDD99 son las mismas que

las DARPA1998. Hay cuatro tipos de características en KDD99, es decir, características

básicas, características de contenido, basadas en host características estadísticas y

características estadísticas basadas en el tiempo. Desafortunadamente, el conjunto de

datos KDD99 incluye muchos defectos. Primero, los datos están gravemente

desequilibrados, lo que hace que los resultados de la clasificación estén sesgados hacia

clases mayoritarias, y, además, hay muchos registros duplicados y existen registros

redundantes. Por último, pero no menos importante, los datos de KDD son demasiado

antiguos para representar el entorno de red actual por lo que este Dataset tampoco será

utilizado en este proyecto.

3. CSE-CIC-IDS2018

Este conjunto de datos [21] es el resultado de un proyecto colaborativo entre el

Communications Security Establishment (CSE) y el Instituto Canadiense de

Ciberseguridad (CIC) que utiliza la noción de perfiles para generar un conjunto de datos

de ciberseguridad de manera sistemática. Incluye una descripción detallada de las

intrusiones junto con modelos de distribución abstractos para aplicaciones, protocolos o

entidades de red de nivel inferior. El conjunto de datos incluye siete escenarios de ataque

diferentes, como son, fuerza bruta, Heartbleed, Botnet, DoS, DDoS, ataques web e

infiltración de la red desde el interior. La infraestructura de ataque incluye 50 máquinas

y la organización víctima tiene 5 departamentos que incluyen 420 ordenadores y 30

servidores. Este conjunto de datos incluye el tráfico de red y los archivos de registro de

cada máquina desde el lado de la víctima, junto con 80 características de tráfico de red

extraídas del tráfico capturado usando CICFlowMeter-V3.

Debido a las características que nos ofrece este Dataset y al ser el más actual, vamos

a utilizarlo como conjunto de datos de entrada para el entrenamiento. En el desarrollo del

proyecto veremos con más detalle su estructura y que datos vamos o no a utilizar.

Page 27: Agradecimientos - ua

26

3. Motivación y objetivos

La motivación para el desarrollo de este proyecto es por una parte el aprendizaje de

uno de los principales campos de investigación actual, como es la inteligencia artificial,

y su aplicabilidad en nuevos ámbitos de la ingeniería informática, como puede ser la

ciberseguridad, y, por otra parte, como se mejora la seguridad de los servicios ofrecidos

sobre internet, mediante herramientas especializadas para esta función como son los

sistemas de detección de intrusos. Es por ello que, este proyecto me parecía ideal para

juntar estas dos inquietudes y comprobar posteriormente si los resultados de este trabajo

son en cierta medida aplicables a un entorno real.

El principal objetivo de este proyecto de fin de master será el de analizar, diseñar,

e implementar un sistema de detección de intrusos basado en la inteligencia artificial,

debido a que los IDS existentes aún enfrentan desafíos en la mejora de la precisión de

detección, principalmente en dos campos, el primero reduciendo la tasa de falsas alarmas

y el segundo en detectar ataques desconocidos. Es por ello que están apareciendo los IDS

que aprovechen los métodos de aprendizaje automático de modo que pueden descubrir

automáticamente las diferencias esenciales entre datos normales y datos anormales con

alta exactitud y en los cuales me gustaría indagar realizando para ello los siguientes

objetivos:

• Investigar y contextualizar los sistemas de detección de intrusos en la

actualidad.

• Investigar cómo podemos aplicar las diferentes técnicas de Deep Learning

aplicadas a un sistema de detección de intrusos.

• Experimentar con las diferentes opciones que nos ofrecen las redes

neuronales para resolver de la forma más optima el problema.

• Análisis, evaluación y conclusiones que podemos extraer de los resultados

obtenidos.

• Aplicar y analizar los resultados del modelo en un entorno real para su

posible posterior usabilidad en este entorno.

Page 28: Agradecimientos - ua

27

4. Metodología

4.1. Metodología de trabajo

Como metodología de trabajo para este proyecto hemos utilizado el desarrollo en

cascada, durante los primeros pasos de investigación, y a la hora de desarrollar la red

neuronal en sí hemos utilizado una metodología iterativa

4.1.1. Desarrollo en cascada

Para el desarrollo del proyecto hemos utilizado una metodología en cascada, ya que,

al inicio de este, hemos especificado unos procesos u objetivos que deberíamos ir

consiguiendo, y a medida que tuviéramos los primeros terminados y bien definidos

podríamos seguir con los siguientes. Para ello, tras un conjunto de objetivos realizado, ha

sido necesaria una reunión, para ver si el desarrollo había sido el adecuado en cada

proceso, y de esta forma poder seguir con el siguiente, o por el contrario modificarlo hasta

que cumpliera con los requisitos establecidos.

Para identificar los procesos de una forma clara y ordenada he utilizado la

herramienta Trello. Un ejemplo de un tablero de Trello durante las primeras semanas de

trabajo es el siguiente:

Ilustración 16: Tablero Trello

4.1.2. Desarrollo iterativo

Por otra parte, una vez tenemos una idea clara de que queremos hacer y cómo,

empezamos con el desarrollo de la red neuronal de una forma iterativa, ya que primero

cumplimos unos requisitos básicos como por ejemplo que aprendiera con cierto grado de

Page 29: Agradecimientos - ua

28

acierto, y posteriormente en cada ciclo hemos ido mejorando esta tasa de acierto ya se

mediante, por ejemplo, el modelado de la arquitectura de la red, o mediante la

modificación de alguno de los parámetros de entrada en el Dataset.

Page 30: Agradecimientos - ua

29

5. Desarrollo del proyecto

5.1. Entorno de trabajo y tecnologías a utilizar

En este proyecto vamos a utilizar distintos entornos de trabajo y diferentes

tecnologías las cuales vamos a analizar brevemente.

5.1.1. Software

• Python

Python [22] es un lenguaje de programación interpretado, multiplataforma y

multiparadigma. Es de código abierto y de escritura rápida y robusta cuya filosofía hace

hincapié en la legibilidad de su código.

He elegido Python como lenguaje ya que este proporciona un entorno bien

estructurado y probado para la implementación de algoritmos de inteligencia artificial.

Para ello Python cuenta con numerosas librerías para trabajar con el análisis de datos que

facilita el procesamiento de grandes volúmenes de datos. Algunas de las que vamos a

utilizar son:

• TensorFlow

TensorFlow [23] es una biblioteca de código abierto para aprendizaje automático a

través de un rango de tareas, y desarrollado por Google para satisfacer sus necesidades de

sistemas capaces de construir y entrenar redes neuronales para detectar y descifrar

patrones y correlaciones, análogos al aprendizaje y razonamiento usados por los

humanos.

Tensorflow trabaja a un nivel más bajo, por lo que para interactuar con esta

biblioteca utilizaremos una API de alto nivel llamada Keras.

Ilustración 17: Logo TensorFlow

Page 31: Agradecimientos - ua

30

• Keras

Keras [24] es una API de redes neuronales de alto nivel, escrita en Python y capaz

de ejecutarse sobre TensorFlow, CNTK o Theano. Las principales funciones que nos

ofrece Keras son:

-La facilidad de uso ya que Keras es una API diseñada para seres humanos, no para

máquinas, ofreciendo una API consistente y simple, que minimiza la cantidad de acciones

del usuario requeridas para casos de uso comunes.

-Modularidad. Un modelo se entiende como una secuencia o un gráfico de módulos

independientes totalmente configurables que se pueden conectar con la menor cantidad

de restricciones posible. En particular, las capas neurales, las funciones de costo, los

optimizadores, los esquemas de inicialización, las funciones de activación y los esquemas

de regularización son módulos independientes que puede combinar para crear nuevos

modelos.

-Fácil extensibilidad. Los nuevos módulos son fáciles de agregar (como nuevas

clases y funciones), y los módulos existentes proporcionan amplios ejemplos. Poder crear

fácilmente nuevos módulos permite una expresividad total, lo que hace que Keras sea

adecuado para la investigación avanzada.

Ilustración 18: Logo Keras

• Sklearn

Scikit-learn [25] es una librería utilizada para el Machine Learning. Proporciona

una gran variedad de algoritmos de aprendizaje tanto supervisados como no supervisados.

Ilustración 19: Logo Scikit-Learn

Page 32: Agradecimientos - ua

31

• Pandas

Pandas [26] es una biblioteca de software escrita para el lenguaje de programación

Python para la manipulación y análisis de datos. En particular, ofrece estructuras de datos

y operaciones para manipular tablas numéricas y series de tiempo.

• Numpy

Numpy [27] es una librería para el lenguaje de programación Python, que agrega

soporte para matrices y matrices multidimensionales grandes, junto con una gran

colección de funciones matemáticas de alto nivel para operar en estas matrices.

• Pickle

El módulo Python Pickle [28] se usa para serializar y deserializar una estructura de

objeto Python. Mediante esta librería podremos almacenar e importar los Datasets de una

forma más eficiente.

• Talos

Talos [29] es una librería que nos permite configurar, realizar y evaluar

experimentos de optimización de hiperparámetros en una red neuronal de una forma más

clara e intuitiva.

Ilustración 20: Logo Talos

• Matplotlib

Matplotlib [30] es una librería para la generación de gráficos.

• Anaconda

Anaconda [31] es una distribución libre y abierta de los lenguajes Python y R, para

trabajar en entornos de ciencia de datos, y aprendizaje automático. Esto incluye

procesamiento de grandes volúmenes de información, análisis predictivo y cómputos

Page 33: Agradecimientos - ua

32

científicos. Está orientado a simplificar el despliegue y la administración de los paquetes

de software

Ilustración 21: Logo Anaconda

• Jupyter

JupyterLab [32] es un entorno de desarrollo interactivo basado en la web para

código y datos. Jupyter nos permite configurar y organizar la interfaz de usuario para

admitir una amplia gama de flujos de trabajo en ciencia de datos, y aprendizaje

automático. Además, es extensible y modular, lo que nos permite escribir complementos

que agreguen nuevos componentes y se integren con los existentes.

5.1.2. Hardware

Como hardware utilizaré una máquina virtual proporcionada por la Escuela

Politécnica Superior de la universidad con los siguientes recursos:

-Procesador: AMD Opteron 63xx 3,72 GHz (2 procesadores)

-Memoria RAM: 4 GB

-Sistemas Operativo: Windows 10 (64 bits)

Como podemos ver, los recursos de la máquina no son los idóneos para trabajar en

un entorno de alto procesamiento, pero aprovecharemos el hecho de no ser una máquina

de uso propio, para la ejecución continua del algoritmo de aprendizaje, sobre todo

mediante la herramienta Talos como veremos en el próximo apartado.

5.2. Dataset.

El dataset a utilizar será el creado por la Communications Security Establishment

(CSE) y el Instituto Canadiense de Ciberseguridad (CIC) datado en el 2018. En los

datasets proporcionados se recoge el tráfico generado durante varios días sobre el mismo

escenario, pero con distintitos tipos de ataques, es por ello, que nos vamos a centrar en el

Page 34: Agradecimientos - ua

33

tráfico generado el día 14-02-2018 ya que este se corresponde con los ataques de fuerza

bruta sobre los protocolos SSH y FTP.

Ambos ataques de fuerza bruta son realizados sobre la misma máquina víctima, un

Ubuntu 16.4 con IP 172.31.69.25. Por otra parte, el atacante utilizará dos máquinas con

Kali Linux, como podemos ver en la siguiente tabla:

Atacante Víctima Nombre del

ataque

Fecha Inicio

del

ataque

Finalización

del ataque

IP privada:

172.31.70.4

IP pública:

18.221.219.4

IP privada:

172.31.69.25

IP pública:

18.217.21.148

Fuerza bruta

sobre FTP

14-02-

2018

10:32 12:09

IP privada:

172.31.70.6

IP pública:

18.219.211.138

IP privada:

172.31.69.25

IP pública:

18.217.21.148

Fuerza bruta

sobre SSH

14-02-

2018

14:01 15:31

Tabla 3: Información ataques a la red

Para la realización del ataque se utiliza la herramienta Patator. Patator es [33] es

una herramienta multihilo bastante completa y flexible para la realización de ataques de

fuerza bruta escrita en Python. También puede guardar cada respuesta en un archivo de

registro separado para su posterior revisión. Para el ataque se usan los módulos de FTP y

SSH en la máquina Kali Linux atacante. Para obtener una lista de contraseñas, utilizan un

diccionario que contiene 90 millones de palabras.

5.3. Pre-procesamiento del Dataset

Para cada día, nos ofrecen la información de tres modos distintos, por una parte,

tenemos los logs generados, un fichero pcap con todo el tráfico procesado y por último

un fichero csv con toda la información extraída por la herramienta CICFlowMeter [34].

Como dataset utilizaremos el fichero csv, ya que la herramienta CICFlowMeter ya

nos ha extraído del fichero pcap toda la información que necesitaremos en 79

características, como pueden ser puertos, longitud de los paquetes etc.

Page 35: Agradecimientos - ua

34

El conjunto de datos en el fichero csv, contiene tráfico normal (benigno) y maligno

compuesto en este caso por los dos tipos de ataques que vamos a distinguir. Para que el

dataset puede ser utilizado por el algoritmo de entrenamiento, previamente tendremos

que realizar unas tareas de procesamiento de los datos:

1. Limpieza de filas

El primer problema con el que nos encontramos en el dataset, es la aparición de

valores no numéricos, los cuales no podrán ser procesados por la red neuronal. Estos

valores que hemos podido encontrar son “Nan” e “Infinity” como podemos ver en la

siguiente captura del fichero csv:

Ilustración 22: Información contenida en el fichero csv

Por tanto, el primer paso a realizar, será generar un nuevo csv, que como datos de

entrenamiento solo contenga valores numéricos, eliminando, por tanto, todas aquellas

filas que no cumplan este requisito, obteniendo en el nuevo fichero la siguiente división

del tráfico:

Tipo de tráfico Número de filas Porcentaje del total limpio

Total 1048550

Filas eliminadas 3799

Total limpio 1044751 100%

FTP Fuerza bruta 193354 18,52%

SSH Fuerza bruta 187589 17,95%

Benigno 663808 63,53%

Tabla 4: Tráfico contenido en el fichero csv

Por último, como podemos ver en los porcentajes, el tráfico Benigno triplica al de

FTP o SSH, por lo que reduciremos este para que su porcentaje sea más o menos el mismo

que par los otros dos tipos de tráfico.

2. Extracción de columnas no necesarias

Como se ha mencionado anteriormente, la herramienta CICFlowMeter nos ha

extraído toda la información en 79 características distintas, pero algunas de estas no nos

Page 36: Agradecimientos - ua

35

serán útiles, o no pueden ser entendidas por la red neuronal para el aprendizaje, como

puede ser por ejemplo la columna del Timestamp ya que, al no utilizar una red neuronal

recurrente, este valor más tarde será normalizado y no tendrá sentido para la red. El resto

de características o columnas si serán utilizadas para entrenar a la red.

3. Mezcla de datos

Los datos en el csv, vienen ordenados como se produjeron, es decir, primero

tenemos un pequeño bloque de tráfico benigno, a continuación, el bloque del ataque de

fuerza bruta sobre FTP, luego tráfico benigno, después el otro bloque de ataque de fuerza

bruta sobre SSH y finalmente otro bloque de tráfico benigno. Esto supone un problema

para el aprendizaje de la red neuronal, ya que, al principio, al recibir un bloque de 193354

filas de ataque por fuerza bruta sobre FTP, la red se especializará en detectar solamente

este tipo de entrada, lo que producirá que más tarde, al recibir todo el tráfico benigno

siempre se equivoque prediciendo ataques sobre FTP.

Para evitar este problema utilizaré la función shuffle sobre todo el conjunto de

entrada:

Ilustración 23: Mezcla de datos

4. Normalización

En el dataset que vamos a utilizar, dependiendo del tipo de característica, los

valores que esta tiene varían respecto a los valores de otra, por ejemplo, los valores de la

característica Flow IAT MAX siempre serán mayores que los valores en Flow IAT MIN,

entonces, estas dos características están en rangos muy diferentes. Es por ello que estas

dos entradas afectaran de forma distinta a la red si no se normalizan, ya que, el ingreso o

peso atribuido influirá intrínsecamente en el resultado debido a su mayor valor sin esto

significar necesariamente que sea más importante como predictor.

Es por ello, que sobre todos los valores de entrada aplicaré la normalización cuyo

objetivo es cambiar los valores de las columnas numéricas en el conjunto de datos a una

escala común, sin distorsionar las diferencias en los rangos de valores.

Page 37: Agradecimientos - ua

36

Para la normalización utilizaré la estrategia min-max normalization, donde para

cada característica, el valor mínimo de esa característica se transforma en un 0, el valor

máximo se transforma en un 1 y cualquier otro valor se transforma en un decimal entre 0

y 1. Para ello utilizaré la siguiente fórmula:

Ilustración 24: Fórmula normalización de datos

Donde 𝑥 = (𝑥1, … 𝑥𝑛) y 𝑧𝑖 es su 𝑖𝑡ℎ información normalizada. Para ver este de una

forma más clara, podemos ver un pequeño ejemplo de cómo quedarían unos valores de

entrada tras su normalización:

Dato1 Dato2 Dato3 Dato1 Dato2 Dato3

10 2 748 0 0 1

12 13 234 0.4 1 0

15 2 543 1 0 0.60

12 2 347 0.4 0 0.22

Tabla 5: Ejemplo normalización

Para ello utilizaré el método fit_transform que nos ofrece la clase

MinMaxScaler[35] correspondiente a la librería Sklearn

Ilustración 25: Código para la normalización

5. Codificación

En el dataset con el que vamos a trabajar, tenemos tres tipos de tráfico, FTP Fuerza

bruta, SSH Fuerza bruta, Benigno, es decir, se trata de datos categóricos ya que contienen

etiquetas en vez de valores numéricos, lo cual no puede ser interpretado por nuestra red

neuronal. Para solventar este problema utilizaremos la codificación One-Hot, mediante la

cual estas variables categóricas se convierten en valores numéricos. Vamos a ver esto en

un ejemplo aplicado a nuestro dataset. Supongamos que tenemos la siguiente entrada:

Flow Duration Tot Fwd Pkts Tot Bwd Pkts Label

25 12 3 Benign

Page 38: Agradecimientos - ua

37

754 3 4 FTP-BruteForce

432 2 0 SSH-BruteForce

434 5 0 Benign

3254 12 4 Benign

Tabla 6: Datos sin codificar

Donde las tres primeras columnas son los valores de entrada a la red (la X) y la

última se corresponde con el tipo de tráfico (lo que tiene que predecir el algoritmo).

Primero realizaremos lo que se conoce como codificación a entero:

Flow Duration Tot Fwd Pkts Tot Bwd Pkts Label

25 12 3 0

754 3 4 1

432 2 0 2

434 5 0 0

3254 12 4 0

Tabla 7: Datos codificados mediante la codificación a entero

Para finalmente aplicar la codificación One-Hot:

Flow Duration Tot Fwd Pkts Tot Bwd Pkts Label

25 12 3 1, 0, 0

754 3 4 0, 1, 0

432 2 0 0, 0, 1

434 5 0 1, 0, 0

3254 12 4 1, 0, 0

Tabla 8: Datos codificadoes mediante One-Hot

De este modo, mediante esta codificación, podemos representar la salida que una

red neuronal produce, activando la neurona correspondiente dependiendo del tipo de

tráfico que supone que recibe como entrada:

Page 39: Agradecimientos - ua

38

Ilustración 26: Esquema red neuronal ejemplo

Para ello utilizaré los métodos fit y transform [36] que nos ofrece la librería Sklearn

y el método to_categorical [37] correspondiente con Keras:

Ilustración 27: Código para la codificación

Todos los pasos realizados anteriormente se ejecutarán en un programa previo al de

la red neuronal que podemos encontrar en el Apéndice A.

5.4. División del dataset y Métricas a utilizar

Para la evaluación del algoritmo dividiremos el dataset en tres partes:

• Set de entrenamiento: El conjunto de datos real que utilizamos para entrenar

el modelo (pesos y sesgos en este caso). El modelo ve y aprende de estos

datos. Para este set vamos a utilizar un 81% de los datos totales.

• Set de validación: Es el conjunto de datos utilizado para proporcionar una

evaluación imparcial de un modelo ajustado en el conjunto de datos de

entrenamiento mientras se ajustan los hiperparámetros del modelo. Para este

set vamos a utilizar un 10% de los datos totales.

• Set de test: Es el conjunto de datos utilizado para proporcionar una

evaluación imparcial de un modelo final ajustado en el conjunto de datos de

entrenamiento. Para este set vamos a utilizar un 9% de los datos totales.

Page 40: Agradecimientos - ua

39

Para evaluar el funcionamiento de la red neuronal utilizaré las siguientes métricas:

• Precisión. La precisión se define como la proporción de muestras

clasificadas correctamente con respecto a las muestras totales. La precisión

es una métrica adecuada cuando el conjunto de datos está equilibrado. En

entornos de red reales; sin embargo, las muestras normales son mucho más

abundantes que las muestras anormales; por lo tanto, la precisión no suele

ser una métrica adecuada.

𝑃𝑟𝑒𝑐𝑖𝑠𝑖ó𝑛 =𝑉𝑃 + 𝑉𝑁

𝑉𝑃 + 𝐹𝑃 + 𝐹𝑁 + 𝑉𝑁

• Tasa verdaderos negativos (TVN). Esta tasa nos indica la tasa de verdaderos

negativos que son correctamente clasificados.

𝑇𝑉𝑁 =𝑉𝑁

𝑉𝑁 + 𝐹𝑃

• Tasa verdaderos positivos (TVP): También conocida como recall. Se define

como la proporción de muestras positivas verdaderas respecto al número de

muestras positivas totales. La tasa de detección refleja la capacidad del

modelo para reconocer ataques, que es una métrica importante en los IDS.

TVP =𝑉𝑃

𝑉𝑃 + 𝐹𝑁

• La tasa de falsos negativos (TFN) se define como la relación de muestras

falsas negativas respecto al total de muestras positivas. En la detección de

ataques, el TFN también se denomina tasa de alarma perdida.

𝑇𝐹𝑁 =𝐹𝑁

𝑉𝑃 + 𝐹𝑁

• La tasa de falsos positivos (TFP) se define como la proporción de muestras

negativas clasificadas incorrectamente como positivas. En la detección de

ataques, el TFP también se denomina tasa de falsas alarmas, y se calcula del

siguiente modo:

𝑇𝐹𝑃 =𝐹𝑃

𝑉𝑁 + 𝐹𝑃

Page 41: Agradecimientos - ua

40

• Matriz de confusión [38]. Es una herramienta que nos permitirá la

visualización del desempeño de nuestro algoritmo. Cada columna de la

matriz representa el número de predicciones de cada clase, mientras que

cada fila representa a las instancias en la clase real. En la siguiente tabla

podemos ver un simple ejemplo de una matriz de confusión

Valor Predicho

Gato Perro Conejo

Valor Real

Gato 5 3 0

Perro 2 3 2

Conejo 0 2 11

Tabla 9: Matriz de confusión

5.5. Arquitectura de la red

Uno de los puntos más difíciles a la hora de implementar una red neuronal, es sin

duda, la arquitectura que esta debe tener, tanto a nivel de capas ocultas y neuronas por

cada una de estas capas, como funciones de activación, funciones de coste, sobre

entrenamiento etc.

Esto es debido, como explica Elie Burzstein [39] en una de sus conferencias [40],

a la dificultad de poder modelar el problema que estamos abordando mediante redes

neuronales, ya que no existe ninguna regla ni protocolo que ante tal tipo de problema al

que nos enfrentemos, nos indique que hiperparámetros debemos utilizar para conseguir

un resultado óptimo, además de la gran variedad de opciones entre las que podemos

elegir, es por ello, que como nos comenta Elie Burzstein, el mejor método para esta tarea,

se trata simplemente de la prueba y error, es decir, ir modificando los parámetros de la

red, según veamos que mejora o no la tasa de acierto.

Dado que este es un problema ya conocido, en la actualidad existen una gran

variedad de herramientas para agilizar este proceso [41]. En mi caso voy a utilizar la

herramienta Talos. Para ello primero en un diccionario de Python, declararé los

hiperparámetros y los límites que deseo comprobar:

Page 42: Agradecimientos - ua

41

Ilustración 28: Diccionario hiperparametros Talos I

Como podemos ver, los parámetros los cuales irán variando sus valores son el

número de neuronas de entrada (input_neuron), número de capas ocultas(hidden_layers)

número de neuronas en las capas ocultas(first_neuron), si utilizaremos dropout o

no(dropout), tamaño del lote(batch_size) y, por último, los optimizadores(optimizer).

Una vez tenemos los hiperparametros definidos, prepararemos el modelo Keras.

Para ello, simplemente remplazaré los parámetros que vamos a probar, por referencias al

diccionario de parámetros. En la siguiente imagen podemos ver el cambio del modelo

tradicional utilizando Keras que hemos desarrollado en este proyecto, sin hiperparametos

frente al modelo con hiperparametros:

Ilustración 29: Modelo sin utilizar Talos

Page 43: Agradecimientos - ua

42

Ilustración 30: Modelo utilizando Talos

Como modelo de optimización utilizaré grid search mediante el cual se procesarán

todas las permutaciones de hiperparámetros en el límite de parámetros dado, lo que

producirá 384 modelos distintos. Por tanto, una vez tenemos el modelo creado podemos

ejecutarlo, en este caso en la máquina virtual proporcionada, debido al tiempo necesario

para que Talos, realice todas las permutaciones posibles.

En el apéndice B, podemos encontrar el modelo creado mediante Talos.

5.6. Resultados obtenidos

5.6.1. Resultados obtenidos mediante Talos.

Una vez Talos ha concluido su ejecución obtenemos 384 valores distintos de

precisión tanto para el subset de entrenamiento como para el de validación. La

herramienta ha guardado estos resultados tanto en gráficas mediante TensorBoard como

en un fichero csv. Como podemos ver en la siguiente imagen, al obtener unas tasas de

acierto tan parecidas y con tantos datos, mediante las gráficas nos será imposible obtener

los mejores modelos:

Page 44: Agradecimientos - ua

43

Ilustración 31:Gráfica de resultados generales

Es por ello que utilizaremos el fichero csv para extraer información que nos pueda

ser útil. Primero ordenaremos todos los valores en función de la mejor tasa de acierto en

la validación y entrenamiento.

Tabla 10: Valores ordenados por val_accuracy de mejor a peor

Tabla 11: Valores obtenidos ordenados por accuracy de mejor a peor

Mediante los valores obtenidos podemos extraer las siguientes conclusiones:

1. El modelo funciona mejor con una sola capa oculta.

Page 45: Agradecimientos - ua

44

2. No es necesario aplicar dropout.

3. La mejor cantidad de neuronas en las capas ocultas es de 256 neuronas.

4. Ambos optimizadores obtienen unos resultados similares.

5. El número de neuronas en la capa de entrada parece indiferente

Ahora ordenaremos estos valores en función de las peores tasas de acierto

obtenidas:

Tabla 12: Valores ordenados por val_accuracy de peor a mejor

Tabla 13: Valores obtenidos ordenados por la accuracy de peor a mejor

Mediante los valores obtenidos podemos extraer las siguientes conclusiones:

1. Los peores resultados se obtienen con 2 o 3 capas ocultas

Page 46: Agradecimientos - ua

45

2. Los peores resultados se obtienen con dropout

3. El optimizador nadam en este caso tiene peores resultados

4. El número de neuronas parece equitativo entre los peores resultados

Por tanto, a partir de los peores y mejores resultados, el modelo que mejor resuelve

este problema sería el siguiente.

Ilustración 32: Mejor arquitectura del modelo

5.6.2. Experimentación con los mejores modelos.

Mediante las pruebas anteriores hemos podido detectar que arquitectura, sobre todo

a nivel de neuronas y capas se adapta mejor al modelo, en este apartado, a partir del mejor

modelo obtenido anteriormente vamos a profundizar un poco más en otros parámetros y

así ver qué resultados obtenemos.

Primero vamos a ver el número de épocas o iteraciones necesarias para nuestra red

neuronal. Para ello vamos a ejecutar la red con un número elevado de épocas y mediante

unas gráficas ver cómo se comporta. Los resultados obtenidos son los siguientes:

Page 47: Agradecimientos - ua

46

Ilustración 33: Gráfica tasa de acierto con 50 épocas

Como podemos ver, a partir de las primeras iteraciones el comportamiento ya es

lineal, es decir, que ya no mejora, por lo que no sería necesario pasarle al algoritmo un

número tan elevado de iteraciones. Para ver exactamente cuantas son necesarias, vamos

a crear otro gráfico para ver esto con más detalle:

Ilustración 34: Gráfica tasa de acierto con 50 épocas ampliada

En este caso hemos ampliado la gráfica entre las iteraciones cero y ocho donde

podemos comprobar que, a partir de la iteración cuarta, el algoritmo ya ha alcanzado su

tasa máxima de acierto.

Una vez hemos visto el número de épocas óptimo para la resolución del problema,

vamos a realizar una serie de pruebas sobre los dos parámetros que menos hemos probado

Page 48: Agradecimientos - ua

47

durante la ejecución de Talos, las funciones de activación, donde solo hemos probado con

relu y los diferentes optimizadores disponibles, ya que solo hemos probado con adam y

nadam.

En ambos casos vamos a utilizar la mejor arquitectura de red que hemos obtenido.

• Funciones de activación [42]:

Para ver cómo funciona nuestro algoritmo en función de la función de activación

utilizada voy a utilizar Talos para las pruebas y TensorBoard para la visualización de los

gráficos. Para ello utilizaré el siguiente diccionario:

Ilustración 35: Diccionario hiperparametros Talos II

Los valores obtenidos por cada uno de las funciones son los siguientes:

Tasa de acierto entrenamiento Tasa de acierto validación

Función de activación ReLu

Función de activación Sigmoid

Page 49: Agradecimientos - ua

48

Función de activación Tanh

Función de activación Elu

Función de activación Selu

Page 50: Agradecimientos - ua

49

Función de activación Linear

Ilustración 36: Comparativa funciones de activación

Debido a que las tasas de acierto son muy similares entre todas las funciones, vamos

a ver los resultados mediante una misma gráfica y unas tablas para comparar los

resultados.

Ilustración 37: Resultados funciones de activación entrenamiento I

Ilustración 38: Resultados funciones de activación validación I

Page 51: Agradecimientos - ua

50

Ilustración 39: Resultados funciones de activación entrenamiento II

Ilustración 40: Resultados funciones de activación validación II

Tabla 14: Resultados respecto a las funciones de activación

Por tanto, las funciones de activación que mejores resultados nos han dado son

ReLu y Elu, con un porcentaje de 99,9942% y 99,9923% de acierto respectivamente en

el dataset de validación, mientras que los peores resultados los hemos obtenido mediante

Sigmoid con un 99,9789%, y Tanh con una tasa del 99,9722%.

• Optimizadores [43]:

Page 52: Agradecimientos - ua

51

Al igual que en las funciones de activación voy a utilizar Talos para las pruebas y

TensorBoard para la visualización de los gráficos. Para ello utilizaré el siguiente

diccionario:

Ilustración 41: Diccionario hiperparametros Talos

Los valores obtenidos por cada uno de los optimizadores son los siguientes:

Tasa de acierto entrenamiento Tasa de acierto validación

Optimizador Adam

Optimizador Nadam

Page 53: Agradecimientos - ua

52

Optimizador SGD

Optimizador RMSProp

Optimizador Adagrad

Page 54: Agradecimientos - ua

53

Optimizador Adadelta

Optimizador Adamax

Ilustración 42: Comparativa optimizadores

Debido a que las tasas de acierto son muy similares entre todos los optimizadores,

vamos a ver los resultados mediante una misma gráfica y unas tablas para comparar los

resultados.

Ilustración 43: Resultados optimizadores entrenamiento I

Page 55: Agradecimientos - ua

54

Ilustración 44: Resultados optimizadores validación I

Ilustración 45: Resultados optimizadores entrenamiento II

Ilustración 46: Resultados optimizadores validación II

Finalmente, como los valores de precisión obtenidos entre los distintos

optimizadores, son muy similares, vamos a ver mediante la siguiente tabla el orden de

mejor optimizador a peor respecto a la precisión en la val_accuracy

Page 56: Agradecimientos - ua

55

Tabla 15: Resultados respecto a los optimizadores

Los optimizadores que mejores resultados nos han dado son Adam y Nadam, con

un porcentaje de 99,9952% y 99,9942% de acierto respectivamente en el dataset de

validación, mientras que los peores resultados los hemos obtenido mediante Adagrad con

un 99,9741%, pero sobre todo con SGD con un 99,8755%.

5.6.3. Análisis de los resultados obtenidos

Mediante las pruebas realizadas anteriormente solamente obtenemos la precisión

de nuestro modelo, pero esto, como hemos visto en el apartado de métricas puede que no

sea suficiente, por tanto, mediante la matriz de confusión de cada métrica, vamos a ver

con más detalle como clasifica nuestro modelo en función del optimizador utilizado. Para

ello vamos a utilizar los tres datasets disponibles, el de entrenamiento, el de validación y

el de test, con una distribución equitativa, de los tres tipos de tráfico a analizar.

Matriz de confusión

entrenamiento 487993

muestras

Matriz de confusión

validación 60247 muestras

Matriz de confusión test

54222 muestras

Optimizador Adam

Page 57: Agradecimientos - ua

56

Optimizador Nadam

Optimizador SGD

Optimizador RMSProp

Optimizador Adagrad

Page 58: Agradecimientos - ua

57

Optimizador Adadelta

Optimizador Adamax

Ilustración 47: Comparativa matrizes de confusión

Los valores obtenidos por las matrices de confusión los utilizaré para calcular la

tasa de verdades positivos (TVP), la tasa de verdaderos negativos (TVN), la tasa de falsos

positivos (TFP) y por último la tasa de falsos negativos (TFN). Este tipo de métricas se

suelen utilizar en variables binarias, es decir, que sean de un tipo o de otro, por ejemplo,

tráfico benigno o maligno. Dado que, en este proyecto, dentro del tráfico maligno,

estamos diferenciando dos tipos de ataques un sobre SSH y el otro sobre FTP, a estas

métricas se les tendrá que añadir en función de que variable se están calculando, por

ejemplo, TVPFTP, se referirá a la tasa de verdaderos positivos en función de ataques

sobre FTP. Por tanto, para calcular estos valores, me basaré en la matriz de confusión

como podemos ver en la siguiente imagen:

Page 59: Agradecimientos - ua

58

Ilustración 48: Cálculos mediante matriz de confusión

Siendo la implementación de la imagen anterior la siguiente:

Ilustración 49: Código cálculos matriz de confusión

• Los resultados obtenidos con el subset de entrenamiento son:

Page 60: Agradecimientos - ua

59

Benigno

Entrenamiento

Optimizador TVPB TVNB TFPB TFNB

Adam 0.999983 0.999994 0.000006 0.000017

Nadam 0.999972 0.999994 0.000006 0.000028

SGD 0.997838 0.999987 0.000013 0.002162

RMSProp 0.999861 0.999984 0.000016 0.000139

Adagrad 0.999733 0.999984 0.000016 0.000267

Adadelta 0.999883 0.999971 0.000029 0.000117

Adamax 0.999966 0.999983 0.000016 0.000033

Tabla 16: Valores dataset entrenamiento en función del tráfico benigno

FTP

Entrenamiento

Optimizador TVPFTP TVNFTP TFPFTP TFNFTP

Adam 1 0.999922 0.000078 0

Nadam 1 0.999922 0.000078 0

SGD 1 0.999484 0.000516 0

RMSProp 1 0.999882 0.000118 0

Adagrad 1 0.999882 0.000118 0

Adadelta 1 0.999894 0.000106 0

Adamax 1 0.9999185 0.000082 0

Tabla 17: Valores dataset entrenamiento en función del tráfico FTP

SSH

Entrenamiento

Optimizador TVPSSH TVNSSH TFPSSH TFNSSH

Adam 0.999816 0.999991 0.000009 0.000184

Nadam 0.999816 0.999985 0.000015 0.000184

SGD 0.999802 0.999277 0.000723 0.000198

RMSProp 0.999796 0.999964 0.000036 0.000204

Adagrad 0.999796 0.999896 0.000104 0.000204

Adadelta 0.999769 0.999964 0.000036 0.000231

Page 61: Agradecimientos - ua

60

Adamax 0.999795 0.999985 0.000015 0.000204

Tabla 18: Valores dataset entrenamiento en función del tráfico SSH

• Los resultados obtenidos con el sub set de validación son:

Benigno

Validación

Optimizador TVPB TVNB TFPB TFNB

Adam 0.999865 1 0 0.000135

Nadam 0.999865 1 0 0.000135

SGD 0.998112 0.999974 0.000026 0.001888

RMSProp 0.999820 0.999974 0.000026 0.000180

Adagrad 0.999506 0.999974 0.000026 0.000494

Adadelta 0.999775 0.999974 0.000026 0.000225

Adamax 0.999865 0.999974 0.000026 0.000135

Tabla 19: Valores dataset validación en función del tráfico benigno

FTP

Validación

Optimizador TVPFTP TVNFTP TFPFTP TFNFTP

Adam 1 0.999927 0.000073 0

Nadam 1 0.999927 0.000073 0

SGD 1 0.999732 0.000268 0

RMSProp 1 0.999927 0.000073 0

Adagrad 1 0.999902 0.000098 0

Adadelta 1 0.999902 0.000098 0

Adamax 1 0.999927 0.000073 0

Tabla 20: Valores dataset validación en función del tráfico FTP

SSH

Validación

Optimizador TVPSSH TVNSSH TFPSSH TFNSSH

Adam 0.999947 0.999976 0.000024 0.000053

Nadam 0.999947 0.999976 0.000024 0.000053

Page 62: Agradecimientos - ua

61

SGD 0.999893 0.999229 0.000771 0.000107

RMSProp 0.999893 0.999952 0.000048 0.000107

Adagrad 0.999893 0.999807 0.000193 0.000107

Adadelta 0.999893 0.999952 0.000048 0.000107

Adamax 0.999893 0.999976 0.000024 0.000107

Tabla 21: Valores dataset validación en función del tráfico SSH

• Los resultados obtenidos con el sub set de test son:

Benigno

Test

Optimizador TVPB TVNB TFPB TFNB

Adam 0.999950 1 0 0.000050

Nadam 0.999950 1 0 0.000050

SGD 0.997980 1 0 0.002020

RMSProp 0.999697 1 0 0.000303

Adagrad 0.999748 1 0 0.000252

Adadelta 0.999950 0.999971 0.000029 0.000050

Adamax 1 1 0 0

Tabla 22: Valores dataset test en función del tráfico benigno

FTP

Test

Optimizador TVPFTP TVNFTP TFPFTP TFNFTP

Adam 1 0.999919 0.000081 0

Nadam 1 0.999919 0.000081 0

SGD 1 0.999566 0.000434 0

RMSProp 1 0.999783 0.000217 0

Adagrad 1 0.999919 0.000081 0

Adadelta 1 0.999919 0.000081 0

Adamax 1 0.999919 0.000081 0

Tabla 23: Valores dataset test en función del tráfico FTP

SSH

Test

Optimizador TVPSSH TVNSSH TFPSSH TFNSSH

Page 63: Agradecimientos - ua

62

Adam 0.999824 0.999973 0.000027 0.000176

Nadam 0.999824 0.999973 0.000027 0.000176

SGD 0.999824 0.999274 0.000726 0.000176

RMSProp 0.999824 0.999973 0.000027 0.000176

Adagrad 0.999824 0.999866 0.000134 0.000176

Adadelta 0.999765 0.999973 0.000027 0.000235

Adamax 0.999824 1 0 0.000176

Tabla 24: Valores dataset test en función del tráfico SSH

Como podemos ver en los resultados obtenidos, podemos sacar algunas

conclusiones de los resultados en general independientemente del optimizador utilizado:

1. No se ha equivocado nunca, en los tres subconjuntos utilizados, a la hora de

clasificar el tráfico de ataque sobre FTP, es decir, siempre que el modelo ha

recibido una muestra de ataque FTP ha predicho que efectivamente se

correspondía con una ataque sobre FTP de ahí que la tasa de verdadero positivos

sobre FTP es uno, mientras que, siempre que ha recibido un ataque FTP, nunca

ha predicho que se tratara otro tipo de tráfico, por eso la tasa de falsos negativos

es cero.

2. Como podemos observar, en los tres subconjuntos generados, siempre hay cierto

tipo de tráfico exacto, que se corresponde con un ataque SSH, pero que el modelo,

interpreta como ataque FTP, sin importar el optimizador a utilizar. Es por ello que

en el dataset de entrenamiento siempre vemos que se ha equivocado 26 veces, en

la validación una y en el test tres.

3. Como vemos en las matrices de confusión, exceptuando el caso del optimizador

SGD, el modelo se equivoca más en dos casos concretos. Cuando recibe tráfico

maligno sobre SSH, a veces predice que es tráfico maligno FTP, como hemos

visto en el punto anterior, y cuando recibe tráfico benigno, que a veces predice

que se trata de tráfico maligno SSH

Por tanto, como visión general de todos los optimizadores, el algoritmo clasifica

perfectamente el tráfico maligno FTP, el tráfico Benigno lo confunde más con ataques

sobre SSH que sobre TFP, y por último el tráfico maligno SSH, lo confunde más con FTP

que con el tipo Benigno.

Page 64: Agradecimientos - ua

63

Respecto a los optimizadores de forma individual obtenemos las siguientes

conclusiones.

1. Como hemos visto anteriormente, todos tienen unos patrones de

comportamiento similares, excepto el optimizador SGD. Como podemos ver en

las tablas de las métricas, sus valores son más o menos iguales que el resto, pero

la tasa de falsos negativos respecto al tráfico real Benigno, es muy elevada en

comparación con los otros optimizadores, por lo que SGD, ante un tráfico

Benigno real, predecirá con más frecuencia que se trata de tráfico tanto maligno

SSH como FTP que los otros optimizadores.

Entrenamiento Validación Test

Tabla 25: Valores optimizador SGD

2. Adadelta, Adagrad y RMSProp se comportan de forma muy parecida. Respecto

a la tasa de verdaderos positivos, que es la métrica más importante en un sistema

de detección de intrusos, estos tres optimizadores, obtienen una clasificación

perfecta del tráfico maligno FTP, pero oscilan en el mismo porcentaje de acierto

en los otros dos tipos de tráfico, entre un 99,973% de mínimo y un 99,988% de

máximo, sin haber, por tanto, notables diferencias entre el acierto en el tráfico

benigno y el maligno SSH.

Page 65: Agradecimientos - ua

64

Tasa de verdaderos positivos

benignos

Tasa de verdaderos positivos

malignos SSH

Tabla 26: Valores optimizadores Adadelta, Adagrad y RMSProp

3. Por otra parte, Adam, Nadam, y Adamax, como podemos ver en la siguiente

comparativa, obtienen un porcentaje de tasa de verdaderos positivos respecto al

tráfico maligno SSH muy similar, a los tres optimizadores vistos en el punto

anterior, ya que ahora las tasas de acierto oscilan entre el 99,979% y el 99, 981%

y antes entre el 99,976% y el 99,979%, sin embargo, donde estos tres

optimizadores si se diferencian de los anteriores es en la tasa de acierto de

tráfico benigno, donde las tasas oscilan entre el 99,996% y el 99,998% mientras

que anteriormente, la tasa máxima 99,986% no alcanzaba ni la mínima actual.

Tasa de verdaderos positivos

benignos

Tasa de verdaderos positivos

malignos SSH

Tabla 27: Valores optimizadores Adam, Nadam, Adamax

4. Por tanto, de estos tres últimos optimizadores, el que mejor tasa de acierto tiene

es Adam, con un 100% sobre ataques FTP, un 99,998% sobre tráfico benigno y

un 99,981% sobre ataques SSH.

Finalmente, en este sistema de detección de intrusos, hemos tratado de separar dos

tipos de ataques y ver si también los podía distinguir, lo cual ha realizado con una tasa de

acierto muy elevada, pero la función principal de un IDS es la de detectar amenazas, es

decir, si una muestra es benigna o maligna, lo cual en nuestro mejor modelo obtenido se

realiza de una manera prácticamente perfecta, como podemos ver en la siguiente imagen:

Page 66: Agradecimientos - ua

65

Ilustración 50: Matriz de confisión Adam

Donde sobre, 602.462, solamente no ha sabido predecir que la muestra recibida era

un ataque, en 2 ocasiones.

5.7. Experimentando en un entorno real

Por último, como hemos analizado en los resultados obtenidos, la tasa de acierto

del mejor modelo obtenido es prácticamente del 100%, por lo que vamos a experimentar

con este modelo, en un entorno distinto del que ha aprendido a clasificar el tráfico, para

de este modo, poder comprobar si el IDS obtenido podría ser utilizado para la detección

de ataques de fuerza bruta en un entorno “real”.

Para la puesta en marcha del entorno de pruebas, utilizaré tres máquinas virtuales

distintas, dos de ellas serán los servidores, una para el servicio SSH, y la otra para FTP,

mientras que la última será la maquina atacante. Los sistemas operativos y herramientas

a utilizar serán los mismos que en el entorno de pruebas del dataset. En la siguiente

imagen, podemos ver el entorno utilizado:

Page 67: Agradecimientos - ua

66

Ilustración 51: Entorno virtual a utilizar

Antes de realizar las pruebas pertinentes, debemos tener en cuenta que el

aprendizaje de la red neuronal está basado en datos, donde la comprensión de estos es el

primero paso. Pero estos datos pueden ser presentados de distintas formas, lo cual puede

reflejar de distinto modo un ataque.

Por ejemplo, podemos diseñar un IDS basado en paquetes, ya que estos son las

unidades básicas de comunicación de red, representando los detalles de cada

comunicación. Para ello necesitaríamos primero analizar, por ejemplo, su encabezado

donde se especifica de forma estructurada las direcciones IP, puertos y otros campos

específicos para varios protocolos, o la porción de datos de la aplicación donde se

contiene la carga útil de los protocolos de la capa de aplicación. Este sistema permite que

los paquetes pueden procesarse instantáneamente sin almacenamiento en caché; por lo

tanto, la detección puede ocurrir en tiempo real. Sin embargo, los paquetes individuales

no reflejan el estado de comunicación completo ni el contexto información de cada

paquete, por lo que es difícil detectar algunos ataques, como DDOS.

Es por ello que en este trabajo utilizamos como datos de entrada los flujos de una

comunicación, extraídos mediante la herramienta CICFlowMeter. Los datos de flujo

Page 68: Agradecimientos - ua

67

contienen paquetes agrupados en un período, que es la fuente de datos más extendida para

IDS. Las principales ventajas de este modo son:

1. El flujo representa todo el entorno de red, pudiendo detectar la mayoría de

los ataques, especialmente DOS y fuerza bruta.

2. Sin análisis de paquetes o reestructuración de sesión, el preprocesamiento

del flujo es simple.

Sin embargo, el flujo ignora el contenido de los paquetes; por lo tanto, su efecto de

detección para U2R y R2L es insuficiente. A demás, al extraer características de flujo, los

paquetes deben ser cacheados, lo cual puede complicar su análisis en tiempo real. Otro

problema que podemos encontrar es, la fuerte heterogeneidad del flujo lo que puede

causar efectos de detección deficientes.

En este caso la herramienta CICFlowMeter terminará los flujos TCP con la

desconexión de la conexión (por paquete FIN) mientras que los flujos UDP terminarán

con un tiempo de espera de flujo.

5.7.1. SSH

Para comprobar su funcionamiento sobre SSH, lanzaremos el servicio OpenSSH-

Server [44] en la máquina víctima junto con un sniffer de tráfico como es Wireshark [45],

mientras que en la maquina atacante lanzaremos la herramienta Patator con el módulo de

ssh_login.

Ilustración 52: Escenario ataque servicio SSH

Page 69: Agradecimientos - ua

68

Una vez tenemos el tráfico capturado, utilizaremos CICFlowMeter para extraer los

flujos de comunicación y el programa import.py para el preprocesamiento de este dataset

a evaluar.

Ilustración 53: Interfaz gráfica herramienta CICFlowMeter

Con el dataset listo mediante la función predict[47] y utilizando el modelo

generado evaluaremos el tráfico generado. Los resultados obtenidos a diferencia de lo que

podíamos esperar, es que todo el tráfico generado es benigno, es decir, no ha sido capaz

de detectar el ataque por fuerza bruta. Por tanto, para intentar detectar porque se ha

comportado de ese modo, vamos a extraer un flujo de tráfico maligno del propio dataset

de entrenamiento para inyectarlo en el dataset generado en nuestro propio entorno de

pruebas, para ver si en este caso si lo detecta. Pero obtenemos el siguiente resultado.

Ilustración 54: Resultado del IDS ante un flujo maligno

Como podemos ver el resultado sigue sin ser el esperado ya que la salida [1. 0. 0.]

se corresponde con el tráfico benigno (esta salida nos está indicando que la neurona de la

Page 70: Agradecimientos - ua

69

capa de salida de la red activada es la primera. En este caso aún no hemos aplicado la

función softmax, que devolvería la neurona con el valor más alto, un 0).

El error del modelo, se debe al modo de procesar los datos de entrada, más

concretamente a la normalización utilizada, ya que, en el entorno de pruebas, el número

de flujos ha sido de 140, mientras que en el entrenamiento teníamos 487993 flujos, por

lo cual los valores máximos y mínimos de cada propiedad son muy distintos. Para

solventar este problema, vamos a utilizar la normalización L2, que no se ve afectada por

este factor, y que nos produce un modelo con una tasa de acierto cerca del 100% al igual

que nos ocurría con la normalización min-max.

En este caso al ejecutar la función predict sobre el tráfico maligno inyectado del

dataset de entrenamiento si obtenemos el resultado esperado:

Ilustración 55: Resultado función predict, sobre tráfico inyectado

Ahora al aplicar softmax sobre ese resultado nos devolvería un 2, correspondiente

con el tráfico maligno sobre SSH. Sin embargo, nuestro IDS, sigue sin detectar los ataques

que hemos realizado en el entorno de prueba, al utilizar la función predict:

Ilustración 56: Resultados obtenidos ante tráfico maligno SSH

Esto es debido a que los valores extraídos difieren bastante de los valores del ataque

sobre el que ha aprendido en el entrenamiento, es decir, las características del flujo de

comunicación del entorno de prueba, no han sido las mismas que en el dataset de

entrenamiento, como podemos ver en la siguiente imagen, y, por tanto, el modelo no es

capaz de detectar ataques de fuerza bruta sobre SSH.:

Page 71: Agradecimientos - ua

70

Ilustración 57: Comparación características tráfico inyectado y real

5.7.2. FTP

Para comprobar su funcionamiento sobre FTP, lanzaremos el servicio Vsftpd en la

segunda máquina víctima junto con el sniffer de tráfico Wireshark, mientras que en la

maquina atacante lanzaremos la herramienta Patator con el módulo de ftp_login.

Page 72: Agradecimientos - ua

71

Ilustración 58: Escenario ataque servicio FTP

Los resultados obtenidos son exactamente los mismo que en el caso anterior, para

que detecte los ataques del dataset de entrenamiento hemos tenido que utilizar de nuevo

la normalización L2, pero los ataques que hemos generado nosotros mismos, no son

detectados por el modelo. En este caso, vamos a analizar las características de cada flujo,

mediante los ficheros csv generado por CICFlowMeter en ambos casos y la captura

obtenida mediante Wireshark.

En la siguiente imagen podemos ver el flujo de datos obtenido mediante Wireshark:

Page 73: Agradecimientos - ua

72

Ilustración 59: Flujo de tráfico FTP utilizando Wireshark

Donde podemos observar que realizamos un intento de conexión incorrecto, donde

el cliente envía un total de 4 paquetes FTP al servidor, el servidor responde con un total

de 5 paquetes, y 8 paquetes más para el establecimiento, mantenimiento y cierre de sesión,

lo que hace un total de 17 paquetes intercambiados con 192 bytes de información, que

como podemos observar en la siguiente imagen se corresponde con lo extraído mediante

el CICFlowMeter:

Ilustración 60: Flujo de tráfico FTP generado

Sin embargo, y es por ello que los resultados no sean los esperados, en el dataset

de entrenamiento, estos valores no son parecidos:

Ilustración 61: Flujo de tráfico FTP dado

Lo cual nos hace entender, porque el modelo generado, no ha sido capaz de detectar

los ataques FTP ya que al igual que en estas columnas que son las más sencilla de entender

y visualizar mediante Wireshark, ocurre con el resto, donde los valores son muy distintos.

Page 74: Agradecimientos - ua

73

6. Conclusión

Respecto a las conclusiones extraídas mediante este trabajo podemos dividirlas en

dos campos.

Por una parte, el modelo que hemos construido a partir del dataset ofrecido por el

CSE y el CIC, se comporta de una manera excelente, donde hemos podido concluir que

el mejor modelo estará compuesto por una única capa oculta de 256 neuronas, junto con

una capa de entrada con 32 neuronas.

Respecto a las funciones de optimización los resultados son muy similares entre las

distintas opciones ofrecidas, destacando entre todas ellas la función ReLu. En cuanto a

los optimizadores, también nos ofrecen unos resultados muy similares, donde destaca

Adam, con un 100% de acierto sobre ataques FTP, un 99,998% sobre tráfico benigno y

un 99,981% sobre ataques SSH.

Por tanto, los resultados obtenidos mediante el IDS utilizando algoritmos de

inteligencia artificial han sido excelentes.

Por otra parte, al aplicar el modelo obtenido mediante el dataset que nos ha sido

dado, al tráfico generado por nosotros mismos simulando los mismos ataques que estaban

presentes en el dataset, el modelo no ha sido capaz de reconocer el tipo de tráfico que

recibía, debido a las características de los flujos de comunicación que no eran las mismas

que en el caso dado, lo cual nos lleva a concluir que el modelo implementado es muy

bueno respecto al dataset mediante el cual entrena, pero no puede generalizar de un forma

correcta para enfrentare a ataques en un entorno real.

Por tanto, los resultados obtenidos mediante el IDS en un entorno diferente al de

entrenamiento no han sido los esperados.

Por último, respecto a los objetivos del trabajo, han sido todos realizados con éxito

a pesar, de que como se ha comentado antes, los resultados obtenidos en el entorno real

no han sido los deseados.

Page 75: Agradecimientos - ua

74

7. Posibles mejoras y trabajo futuro

Vistos los resultados que hemos obtenido las principales mejoras y posibles trabajos

futuros se podrían centrar en la mejora de la tasa de acierto en un entorno diferente al de

entrenamiento, ya sea mediante el uso de otro dataset ya existente, o mediante la creación

de uno mismo, el cual se acerque más al entorno real donde lo queramos aplicar.

Una posible mejora respecto a IDS, hubiera sido el uso de más tipos de datos de

entrada, para así conseguir una red neuronal más inteligente, que supiera distinguir no

solo entre un ataque de fuerza bruta al protocolo SSH o FTP y tráfico benigno, sino que

también fuera capaz de detectar otro tipo de ataques, y no solo en los protocolos que

hemos analizado. Esto podría ser posible, ya que junto al dataset que hemos utilizado, se

encontraban otros tipos de dataset los cuales contenían información sobre diferentes

ataques.

También sería interesante probar con otro tipo de red neuronal. Como hemos visto

en el estado del arte, existen otros tipos de redes neuronales a parte de la red neuronal

densa utilizada en este proyecto. Para el problema al que nos enfrentamos, en un principio

utilizar una red convolucional no sería la mejor opción debido a que el ámbito en el que

esta se aplica es muy distinto al nuestro, sin embargo, puede que el uso de una red

neuronal recurrente si sea una buena opción, ya que una de las variables de todos los

paquetes intercambiados en una red es el tiempo y este tipo de redes, es la que mejor

trabaja con esta variable.

Page 76: Agradecimientos - ua

75

8. Bibliografía y referencias

[1] Wikipedia (2020). Intrusion detection system. [En línea]. Disponible en

https://en.wikipedia.org/wiki/Intrusion_detection_system

[2] Dnsstuff (2018) What Is an Intrusion Detection System? Latest Types and Tools. [En

línea]. Disponible en https://www.dnsstuff.com/intrusion-detection-system#scanning-

attacks

[3] Ajay Yadav (2018) Network Design: Firewall, IDS/IPS. [En línea]. Disponible en

https://resources.infosecinstitute.com/network-design-firewall-idsips/#gref

[4] Wikipedia (2019). Honeypot. [En línea]. Disponible en

https://es.wikipedia.org/wiki/Honeypot

[5] Judy Novak; Stephen Northcutt (2002) Network Intrusion Detection, Third Edition

(p. 44)

[6] Geeksforgeeks (2019) TCP 3-Way Handshake Process. [En línea]. Disponible en

https://www.geeksforgeeks.org/tcp-3-way-handshake-process/

[7] Snort (2020) Snort [En línea]. Disponible en https://www.snort.org/faq/what-is-snort

[8] Suricata (2020) Suricata [En línea]. Disponible en: https://suricata-ids.org/

[9] Wikipedia (2020). Alan Turing. [En línea]. Disponible en

https://es.wikipedia.org/wiki/Alan_Turing

[10] A. M. Turing (1950) Computing Machinery and Intelligence. [En línea]. Disponible

en: https://phil415.pbworks.com/f/TuringComputing.pdf

[11] Wikipedia (2020). AI winter. [En línea]. Disponible en

https://en.wikipedia.org/wiki/AI_winter

[12] Wikipedia (2020).Deep Blue versus Gary Kasparov. [En línea]. Disponible en

https://es.wikipedia.org/wiki/Deep_Blue_versus_Gary_Kasparov

[13] Fran Ramírez (2018) Historia de la IA. [En línea]. Disponible:

https://empresas.blogthinkbig.com/historia-de-la-ia-frank-rosenblatt-y-e/

Page 77: Agradecimientos - ua

76

[14] Aurélien Géron (2018) Neural networks and deep learning (c. Introduction to

Artificial Neural Networks)

[15] Michael Nielsen (2019) Improving the way neural networks learn. [En línea].

Disponible en http://neuralnetworksanddeeplearning.com/chap3.html

[16] Aishwarya V Srinivasan (2019) Stochastic Gradient Descent — Clearly Explained

[En línea]. Disponible https://towardsdatascience.com/stochastic-gradient-descent-

clearly-explained-53d239905d31

[17] Tensorflow. (2019) All case studies and mentions [En línea]. Disponible en:

https://www.tensorflow.org/about/case-studies

[18] Yann LeCun; Corinna Cortes, Christopher J.C. Burges (2019) THE MNIST

DATABASE of handwritten digits [En línea]. Disponible en:

http://yann.lecun.com/exdb/mnist/

[19] Lincoln Laboratory (1998)1998 DARPA INTRUSION DETECTION

EVALUATION DATASET. [En línea]. Disponible en: https://www.ll.mit.edu/r-

d/datasets/1998-darpa-intrusion-detection-evaluation-dataset

[20] University of California, Irvine (1999) KDD99 Dataset. 1999. [En línea]. Disponible

en: http://kdd.ics.uci.edu/databases/kddcup99/kddcup99.html

[21] Canadian Institute for Cybersecurity (2019) CSE-CIC-IDS2018 on AWS. [En línea].

Disponible en https://www.unb.ca/cic/datasets/ids-2018.html

[22] Python (2020) Python. [En línea]. Disponible en: https://www.python.org/

[23] Tensorflow (2020) Tensorflow. [En línea]. Disponible en:

https://www.tensorflow.org/

[24] Keras (2020) Keras. [En línea]. Disponible en: https://keras.io

[25] Scikit-Learn. (2020) Scikit-Learn [En línea]. Disponible en: https://scikit-

learn.org/stable/

[26] Pandas (2020) Pandas. [En línea]. Disponible en: https://pandas.pydata.org/

[27] NumPy developers (2020) Numpy. [En línea]. Disponible en: https://numpy.org/

Page 78: Agradecimientos - ua

77

[28] Pickle. (2020) Pickle [En línea]. Disponible en:

https://docs.python.org/3/library/pickle.html#module-pickle

[29] Autonomio (2020) Talos. [En línea]. Disponible en:

https://github.com/autonomio/talos

[30] Matplotlib (2020) Matplotlib. [En línea]. Disponible en: https://matplotlib.org/

[31] Anaconda (2020). Anaconda. [En línea]. Disponible en: https://www.anaconda.com/

[32] Jupyter (2020). Jupyter. Disponible en: https://jupyter.org/

[33] Lanjelot. (2020) Patator. [En línea]. Disponible en

https://github.com/lanjelot/patator

[34] Canadian Institute for Cybersecurity (2019) CICFlowMeter. [En línea]. Diponible

en http://www.netflowmeter.ca/netflowmeter.html

[35] Scikit-learn. (2019). sklearn.preprocessing.MinMaxScaler. [En línea]. Disponible en

https://scikit-

learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html

[36] Scikit-learn. (2019). sklearn.preprocessing.LabelEncoder. [En línea]. Disponible en:

https://scikit-

learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html

[37] Keras (2020) Keras utils. [En línea]. Disponible en https://keras.io/utils/

[38] Wikipedia (2019). Matriz de confusión. [En línea]. Disponible en

https://es.wikipedia.org/wiki/Matriz_de_confusi%C3%B3n

[39] Wikipedia (2020). Elie Bursztein. [En línea]. Disponible en

https://en.wikipedia.org/wiki/Elie_Bursztein

[40] Youtube (2019) Cutting Edge TensorFlow: New Techniques (Google I/O'19). [En

línea]. Disponible en: https://www.youtube.com/watch?v=Un0JDL3i5Hg

[41] Mikko (2018) A Comprehensive List of Hyperparameter Optimization & Tuning

Solutions. [En línea]. Disponible en https://medium.com/@mikkokotila/a-

comprehensive-list-of-hyperparameter-optimization-tuning-solutions-88e067f19d9

[42] Keras (2020) Keras activations. [En línea]. Disponible en https://keras.io/activations/

Page 79: Agradecimientos - ua

78

[43] Keras (2020) Keras optimizers. [En línea]. Disponible en: https://keras.io/optimizers/

[44] OpenSSH (2020) OpenSSH. [En línea]. Disponible en: https://www.openssh.com/

[45] Wireshark (2020) Wireshark. [En línea]. Disponible en: https://www.wireshark.org/

Page 80: Agradecimientos - ua

79

Anexo A

Import.py

Page 81: Agradecimientos - ua

80

Page 82: Agradecimientos - ua

81

Anexo B

KerasTuner.py

Page 83: Agradecimientos - ua

82

Page 84: Agradecimientos - ua

83

Anexo C

bestIDS.py

Page 85: Agradecimientos - ua

84