Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Universidad Autónoma de Madrid
Escuela politécnica superior
Doble Grado en Ingeniería Informática y Matemáticas
Trabajo Fin de Grado
ESTUDIO Y ANÁLISIS DE PROPAGACIÓN DE PR OGRAMAS MALICIOSOS EN REDES DE
COMPUT ADORES
Autor: José Luis Suárez FueyoTutor: Franciscoe Borja Rodríguez Ortiz
Julio 2019
ESTUDIO Y ANÁLISIS DE
PROPAGACIÓN DE PROGRAMAS
MALICIOSOS EN REDES DE
COMPUTADORES
Autor: José Luis Suárez FueyoTutor: Francisco de Borja Rodríguez Ortiz
Grupo de Neurocomputación Biológica (GNB Dpto. de Ingeniería InformáticaEscuela Politécnica Superior
Universidad Autónoma de Madrid
Julio 2019
i
Resumen
Resumen
Tras el desarrollo de Internet a �nales del siglo XX, la llegada del siglo XXI ha traído consigouna revolución en la comunicación y mercadotécnia a nivel global. El desarrollo de tecnologíasadaptadas a internet permiten que dos personas en lugares opuestos del mundo sean capaces decomunicarse y hacer negocios en cuestión de segundos sin la necesidad de estar físicamente en elmismo lugar. Sin embargo, el desarrollo de nuevos modelos de negocio en internet ha dado lugara la aparición de nuevos tipos de criminales que usan y desarrollan herramientas tecnológicascomo los software maliciosos, o malware, para conseguir sus objetivos.
Ante la aparición de este nuevo tipo de delicuentes, surge la necesidad imperiosa de entenderbien tanto las herramientas que nosotros utilizamos, así como las que ellos utilizan, a �n de evitary defendernos ante posibles ataques. A pesar de que la concienciación sobre la importancia dela seguridad informática ha ido aumentando de forma continua durante los últimos 20 años, losexpertos siguen demandando una mayor inversión en esta área, dada la evolución y la so�sticaciónque están alcanzando los métodos de ataque.
El presente trabajo busca alcanzar un mayor entendimiento sobre la topología básica deInternet, los distintos modelos de epidemias existentes y el proceso de la propagación del malwareque permita elaborar estrategias óptimas frente a ataques que utilicen esta red como medio depropagación.
Aunque existen muchos tipos de software malicioso que utilizan Internet para propagarse, elpresente trabajo se centra solo en aquellos que presentan una serie de características:
Los ataques no son dirigidos, es decir, el software que estudiaremos no ataca un dis-positivo en concreto sino que busca infectar la mayor población de dispositivos posible.
El método de propagación son redes cuya distribución del grado de los nodos sigueuna ley potencial, al menos asintóticamente. En el presente trabajo asumiremos queesta red es Internet, pero ha de notarse que varias publicaciones muestran que existenvarias redes complejas con esta estructura.
La razón para centrarnos en este tipo de software malicioso no es otra que este tipo desoftware es el mas dependiente de la red sobre la que se propaga.
Tras una breve introducción que pretende ilustrar los conocimientos necesarios para el co-rrecto seguimiento del presente trabajo, este proyecto se centrara en la descripción y análisis deexperimentos que pretenden dar respuestas a preguntas como:
¾Es importante que la infección se inicie en un hub? ¾In�uye el tamaño de la red en la velo-cidad de propagación del malware? ¾Cuán importante es hallar de forma precisa los parámetrosreales de Internet a la hora de modelizar la propagación de estos malware? Desde el punto devista del atacante, ¾merece la pena dotar al gusano de inteligencia?
iii
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
Palabras Clave
Internet, malware, small-World, scale-free, modelos compartimentales, SIR, SIS, SEIR, hub,grafo, nodo, epidemia, igraph.
iv
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
Abstract
After the development of the Internet at the end of the 20th century, the arrival of the 21stcentury has brought about a revolution in global communication and marketing. The develop-ment of technologies adapted to the Internet allows two people in opposite places of the worldto be able to communicate and do business in a matter of seconds without the need to be phy-sically in the same place. However, the development of new business models on the Internet hasled to the emergence of new types of criminals who use and develop technological tools such asmalicious software, or malware, to achieve their objectives.
Against the emergence of this new type of criminals, there is an urgent need to understandwell both the tools that we use, as well as those that they use, in order to avoid and defendagainst possible attacks. Although awareness of the importance of computer security has beenincreasing steadily over the past 20 years, experts continue to demand greater investment in thisarea, given the evolution and sophistication that attack methods are achieving.
Present work seeks to achieve a greater understanding of the basic topology of the Internetthat allows the development of optimal strategies against attacks that use this network as ameans of propagation.
Although there are many types of malicious software that use the Internet to spread, thepresent work focuses only on those that present a series of characteristics:
The attacks are not directed, that is, the software that we will study does not attacka speci�c device but seeks to infect the largest population of possible devices.
The propagation method is networks whose distribution of the degree of the nodesfollows a potential law, at least asymptotically. In the present work we will assumethat this network is Internet, but it should be noted that several publications show that anumber of social networks also have this type of topology.
The reason to focus on this type of malicious software is not other than this type of softwareis the most dependent on the network on which it spreads.
After a brief introduction that aims to illustrate the knowledge necessary for the correctmonitoring of this work, this project will focus on the description and analysis of experimentsthat aim to answer questions such as:
Is it important that the infection starts in a hub? Does the size of the network in�uence thespeed of malware spread? How important is it to �nd the exact parameters of the Internet whenmodeling the spread of these malware? From the point of view of the attacker, is it worthwhileto endow the worm with intelligence?
v
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
Key words
Internet, malware, small-World, scale-free, compartimental models, SIR, SIS, SEIR, hub,graph, node, epidemic, igraph.
vi
Índice general
Índice de Figuras x
Índice de Tablas xii
1. Introducción 1
1.1. Motivación del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Enfoque y objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3. Estructura del documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Estado del arte 3
2.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2. Malware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3. Modelando la epidemiología en redes complejas . . . . . . . . . . . . . . . . . . . 6
2.3.1. Modelos utilizados en la epidemiología de malware . . . . . . . . . . . . . 7
2.3.2. Parámetros de los modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.3. SIS con población constante . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.4. SIR con población constante . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.5. SEIR con población constante . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4. Introducción a la teoría de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.1. Ejemplo de grafo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5. La topología de Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5.1. Small Worlds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5.2. Construcción de un grafo small-world . . . . . . . . . . . . . . . . . . . . 14
2.5.3. Redes scale-free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5.4. Construcción de un grafo scale-free . . . . . . . . . . . . . . . . . . . . . . 16
2.6. Herramientas de manejo y análisis de grafos . . . . . . . . . . . . . . . . . . . . . 16
2.6.1. Graph-tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6.2. NetworkX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.6.3. igraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
vii
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
3. Análisis y diseño 19
3.1. Etapas del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2. Requisitos de la herramienta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.1. Requisitos Funcionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.2. Requisitos No Funcionales . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3. Diseño de la infraestructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3.1. Caracterización del malware a propagarse . . . . . . . . . . . . . . . . . . 22
3.3.2. Diseño del modelo compartimental . . . . . . . . . . . . . . . . . . . . . . 23
3.3.3. Parametrización y modelización de una red análoga a Internet . . . . . . . 24
3.4. Inteligencia del gusano propuesta . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4. Desarrollo e integración del entorno 27
4.1. Entorno de desarrolo y simulación. . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.1. Sistema hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.1.2. Software necesario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2. Distribución del código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2.1. Diagramas UML de las Simulaciónes . . . . . . . . . . . . . . . . . . . . . 29
5. Simulaciones realizadas y resultados 31
5.1. Relación entre tamaño de la red y la propagación . . . . . . . . . . . . . . . . . . 32
5.2. Relevancia del paciente cero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.3. Infección dirigida a nodos de alto grado . . . . . . . . . . . . . . . . . . . . . . . 34
5.4. Visualización de una epidemia con parámetros inferidos de un caso real . . . . . . 35
5.5. Conjunto inicial de infectados junto vs disperso . . . . . . . . . . . . . . . . . . . 36
5.6. Tasa de infección β �jo, tasa de recuperación γ variable . . . . . . . . . . . . . . 37
6. Conclusiones y trabajo futuro 39
6.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.2. Trabajo futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
A. Clasi�cación de Malware 45
B. Códigos del entorno de simulación 47
B.1. Simulaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
B.1.1. Simulacion1.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
B.1.2. Simulacion2.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
B.1.3. Simulacion3.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
B.1.4. Simulacion4.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
viii ÍNDICE GENERAL
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
B.1.5. Simulacion5.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
B.1.6. Simulacion6.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
B.1.7. Simulacion7.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
B.2. Funcionalidades del núcleo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
B.2.1. FuncionesNucleo.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
B.2.2. FuncionesAuxiliares.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
B.3. Ficheros del modelo compartimental . . . . . . . . . . . . . . . . . . . . . . . . . 65
B.3.1. Compartimentos.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
B.3.2. ModeloCompartimental.py . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
B.3.3. ModeloSIS.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
B.3.4. ModeloSIR.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
B.3.5. ModeloSIRS.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
B.3.6. ModeloXSIR.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
B.4. Código de los ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
B.4.1. generaGrafoSW.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
B.4.2. generaGrafoSF.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
B.4.3. pforSW.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
B.4.4. algoritmoWatts.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
B.4.5. algoritmoBarabasi.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
ÍNDICE GENERAL ix
Índice de Figuras
2.1. Porcentaje de ataques dirigidos vs no dirigidos de acuerdo al CSI. Adaptado de [1] 5
2.2. Diagrama del proceso de Modelización . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3. Proceso de la gripe utilizando FirefoxEmoji [2] . . . . . . . . . . . . . . . . . . . 8
2.4. Distribución de �ujo del modelo SIS . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5. Distribución de �ujo del modelo SIR . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.6. Distribución de �ujo del modelo SEIR . . . . . . . . . . . . . . . . . . . . . . . . 10
2.7. Grafo de ejemplo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.8. Grafo de tipo Small-world Watts-Strogatz. N=200 . . . . . . . . . . . . . . . . . . 14
2.9. Redes small world para distintos valores de p. Se puede ver la generación en elCódigo B.4.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.10. Proceso de construcción de red small-world para p = 0,5. Grafo inicial, primeraiteración, segunda iteración. Se puede ver la generación en el Código B.4.4. . . . 15
2.11. Grafo de tipo Scale free Barabasi-Albert. N=200 . . . . . . . . . . . . . . . . . . . 16
2.12. Nacimiento de una red scale-free en distintos momentos. Se puede ver la genera-ción en el Código B.4.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.1. Diagrama de clases con la distribución del código de las simulaciones del proyecto.Se puede ver el código en la Sección B.1. . . . . . . . . . . . . . . . . . . . . . . . 29
5.1. Grá�ca correspondiente a la Simulación 1. Se puede ver la simulación en el CódigoB.1.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2. Grá�ca correspondiente a la Simulación 2. Se puede ver la simulación en el CódigoB.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.3. Grá�ca correspondiente a la Simulación 3. Se puede ver la simulación en el CódigoB.1.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.4. Estado del grafo en distintos momentos de la epidemia. Se puede ver la generaciónen el Código B.1.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.5. Grá�ca correspondiente a la Simulación 5. Se puede ver la simulación en el CódigoB.1.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.6. Grá�ca correspondiente a la Simulación 6. Se puede ver la simulación en el CódigoB.1.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
xi
Índice de Tablas
2.1. Ranking de tipos de malware más detectados en empresas. . . . . . . . . . . . . . 4
2.2. Ranking de tipos de malware más detectados en particulares . . . . . . . . . . . . 4
2.3. Grado de los nodos del grafo en la Figura 2.7 . . . . . . . . . . . . . . . . . . . . 12
3.1. Tabla de parámetros del constructor de grafos. . . . . . . . . . . . . . . . . . . . 24
4.1. Tabla con las prestaciones del equipo utilizado para el desarrollo y la simulaciónde este proyecto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.1. Tabla con los parámetros de la Simulación 1. . . . . . . . . . . . . . . . . . . . . 32
5.2. Tabla con los parámetros de la Simulación 2. . . . . . . . . . . . . . . . . . . . . 33
5.3. Tabla con los parámetros de la Simulación 3. . . . . . . . . . . . . . . . . . . . . 34
5.4. Tabla con los parámetros de la Simulación 5. . . . . . . . . . . . . . . . . . . . . 36
A.1. Clasi�cación de malware. Tabla adaptada de: [3][4] . . . . . . . . . . . . . . . . . 46
xiii
1Introducción
1.1. Motivación del proyecto
Con los avances producidos en los ultimos 30 años en términos de tecnología y sociedad, seha desarrollado una necesidad del uso de Internet en la mayoría de los ámbitos de nuestras vidas.Mucha gente utilizamos los ordenadores para guardar datos que para nosotros son importantes,desde fotos personales a material de trabajo pasando por una gran variedad de datos de distintaíndole e importancia. Además, el auge del IoT lleva la red de redes a cada vez más dispositivos.Estos avances que nos facilitan muchas tareas también han promovido el auge del desarrollode software malicioso [5][6]. Este tipo de software dañino es creado de forma cada vez másespecializada y diversa y aprovecha las nuevas redes complejas que nos enlazan para propagarsecausando grandes daños y pérdidas.
Es por esta situación que surge la necesidad de comprender mejor las herramientas queusamos de forma habitual. La investigación sobre software malicioso es cada vez más necesariae impulsada por empresas y estados [7] ante las pérdidas que causan anualmente. Uno de loscampos dentro de esta investigación es como se propagan los worms. Los worms, en españolgusanos [8], son un tipo de malware que se caracteriza por su capacidad de auto-replicación ysu independencia de otros códigos para ejecutarse.
Para poder llevar a cabo este tipo de estudio, es necesario conocer otras disciplinas matemáti-cas y entender bien el funcionamiento de todo el sistema en el que se produce la propagación. Enel caso de este trabajo, se intenta alcanzar un conocimiento que permita realizar unas simulacio-nes sobre un modelo de Internet con las que alcanzar un mayor conocimiento del funcionamientode Internet y la propagación de virus sobre ella.
1.2. Enfoque y objetivos
El objetivo principal de este trabajo es alcanzar un mejor conocimiento de cómo afecta laestructura de Internet y sus propiedades en las epidemias de malware que, eventualmente perocon cierta frecuencia, inundan los medios de noticias sobre los costes y pérdidas que suponeneste tipo de ataques.
1
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
El enfoque del documento pretende ser didáctico, recopilando primero los conocimientosnecesarios asumiendo una base matemática previa y, posteriormente, utilizar estas bases pararealizar unas simulaciones que corroboren los datos, en ocasiones contraintuitivos, que podemosesperar del funcionamiento de Internet trás conocer la teoría detrás de la red de redes.
Antes de realizar estos experimentos y cuyas conclusiones son el �n último del trabajo, sehan llevado a cabo los siguientes hitos:
Entender que es el software malicioso, la importancia que tiene en la actualidad, los dife-rentes tipos de este software que existen y sus propiedades.
Ver la similitud entre una epidemia vírica en su sentido tradicional y biológico, y unaepidemia vírica sobre las nuevas tecnologías.
Encontrar entre la aleatoridad que aparenta presentar Internet, una estructura no tanaleatoria que responde a ciertas características y que posee unas propiedades que la hacenparticular.
Aprender a utilizar igraph [9][10] para analizar redes complejas, entendiendo como redcompleja un grafo con características topológicas no triviales.
Idear una serie de simulaciones que proporcionen información sobre cómo se propaga unsoftware malicioso de tipo gusano sobre una red topológicamente análoga a Internet.
Obtener conclusiones de las simulaciones realizadas.
1.3. Estructura del documento
Con el �n de alcanzar los objetivos propuestos se ha desarrollado la siguiente memoria queestá organizada como se indica:
Estado del arte: En este capítulo se presentan una serie de nociones necesarias para elentendimiento de las simulaciones y las conclusiones posteriores. Estas nociones se dividenen tres temas: Malware, Modelización aplicada a la epidemiología y La topología y losmodelos de Internet.
Análisis y diseño: En esta sección se resumen las decisiones de análisis y diseño delproyecto. Se empieza enumerando las diferentes etapas que se han seguido para despuésenumerar una serie de decisiones teóricas sobre el marco de las simulaciones como son elmodelo compartimental a utilizar, el diseño de los grafos a utilizar y la caracterización delmalware.
Desarrollo e integración del entorno: Si en el apartado anterior se discuten las de-cisiones teóricas tomadas para la realización del presente trabajo, en este apartado seabordarán las decisiones técnicas como el lenguaje de programación utilizado, las libreríasnecesarias o la visualización de los datos.
Simulaciones realizadas y resultados: Aquí se recopilan distintas las distintas simula-ciones donde se intenta imitar el comportamiento de un gusano sobre un grafo similar alde Internet asumiendo distintas premisas con el �n de demostrar ciertas hipótesis.
Conclusiones y trabajo futuro: Finalmente, en el último capítulo del documento sediscute sobre los resultados obtenidos y las conclusiones alcanzadas, además de enunciaralgunas líneas posibles de investigación futuro y posibles retos en relación al tema deestudio del Trabajo de Fin de Grado.
2 CAPÍTULO 1. INTRODUCCIÓN
2Estado del arte
2.1. Introducción
La epidemiología de malware sobre redes complejas es una rama de estudio que necesitabases de otras disciplinas de conocimiento como son la modelización, la teoría de grafos y algunasnociones sobre topología. En este capítulo repasaremos brevemente los conceptos necesarios paraentender el desarrollo de este proyecto, siguiendo el siguiente esquema:
I. ¾Qué es el malware? ¾Qué tipos de malware existen? Durante la sección 2.2 in-tentaremos de�nir que es el software malicioso, o malware, cómo in�uye en nuestra vida ycomo clasi�carlo de acuerdo a ciertas características.
II. ¾Cómo se modela una epidemia? ¾Hay relación entre una epidemia biológica yuna virtual? En la sección 2.3 analizaremos la similitudes entre una epidemia tradicional,es decir, aquella que se produce entre seres vivos y se propaga a través de distintos vectoresbiológicos; y las epidemias que atañen a este trabajo que son las epidemias de malware.En esta sección, también se repasarán algunos modelos clásicos que involucran los si-guientes cuatro estados: Susceptibles(S), Infectados (I), Expuestos (E) y Recuperados (R).Estos cuatro estados dan lugar a distintos modelos como el modelo Susceptible-Infectado-Susceptible (SIS) o el modelo Susceptible-Infectado-Recuperado (SIR).
III. ¾Qué es un grafo? ¾Para qué son útiles los grafos en este trabajo? La mayoría delas personas no se preguntan cuál es la estructura de Internet, sin embargo, este tipo deestructura se puede estudiar como un grafo. Por esto mismo, en la sección 2.4, se presentanalgunas de�niciones básicas de la Teoría de Grafos y su aplicación en este problema enconcreto.
IV. ¾Qué grafo puede representar de forma, lo su�cientemente precisa, Internet?Una vez que sabemos que Internet puede ser representado por un grafo, en la sección 2.5,resumiremos el estado actual de la investigación sobre la representación de Internet comoun grafo y discerniremos sobre cuál es el modelo que debemos utilizar en las simulacionesposteriores.
3
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
2.2. Malware
El software malicioso o malware es, hoy en día, una de las amenazas más signi�cativas ennuestra vida cotidiana. Diferentes sistemas electrónicos que usamos día a día como los teléfonosmóviles u otros electrodomésticos son, además de los ordenadores, susceptibles de ser afectadospor software malicioso. Aunque intentaremos mostrar una clasi�cación general más adelante enel Anexo A, es necesario mencionar la amplia variedad de software malicioso tanto en su funcióncomo en su implementación o dependencias.
Uno de los tipos de malware existentes son los ransomware. Este tipo de programa es similaren su implementación a un gusano y se replica de forma similar, pero su �n es encriptar los�cheros en el dispositivo infectado y extorsionar a la víctima a cambio de la clave de descifrado.Durante el verano de 2017, el ransomware era la herramienta preferida por los cibercriminalesy solo NotPetya causó perdidas [11] de $200-$300 millones a la empresa danesa de logística, APMoller-Maersk; $150 millones a la empresa británica alimentaria Mondelez International, $220millones a la constructora francesa, Saint-Gobain; ente otras muchas empresas y particulares.Informes de algunas empresas de ciberseguridad [12][13] muestran la predilección de los crimi-nales por el ransomware, y en las Tablas 2.1 y 2.2 podemos ver un ranking de malwares másdetectados según MalwarebytesLABS[13].
2016 vs 2017Fraud Tool 1 HijackerAdware 2 AdwareHijacker 3 Riskware Tool
Riskware Tool 4 BackdoorBackdoor 5 Ransomware
Tabla 2.1: Ranking de tipos de malwaremás detectados en empresas.
2016 vs 2017Fraud Tool 1 AdwareAdware 2 Fraud Tool
Riskware Tool 3 Riskware ToolBackdoor 4 BackdoorHack Tool 5 Hack Tool
Tabla 2.2: Ranking de tipos de malwaremás detectados en particulares
No solo empresas y particulares son susceptibles de verse atacados por estos programas, ylos gobiernos también se valen de su uso y sufren sus consencuencias [14][15][16].
Una vez que hemos visto que el malware es un peligro al que casi todos estamos expuestos,habría que aclarar que es el malware. Una de�nición de malware [17] aceptada comúnmentesería la siguiente:�Un programa que, introducido en un sistema, normalmente camu�ado, conla intención de comprometer la con�dencialidad, integridad o disponibilidad de los datos de lavíctima, aplicaciones o sistema operativo, o con el propósito de molestar o perturbar a la víctima.�Sin embargo, existe un amplio abanico de programas distintos que pueden ser clasi�cados segúndistintas características como el medio que usan para propagarse o las acciones que realizan unavez dentro del sistema infectado.
A continuación, haremos una pequeña clasi�cación en distintos tipos de malware de acuerdoa las siguientes tres características del malware [3] junto a su función:
Capacidad de auto-replicación y auto-propagación. Algunos tipos de malware tie-nen la capacidad de extenderse por sí mismos mientras que otros necesitan de una inter-acción para cumplir su función.
El crecimiento de la población del malware describe la evolución de los sistemas in-fectados debido a la capacidad de auto-reproducción del malware. Un malware que no seacapaz de replicarse por sí mismo siempre tendrá un crecimiento de cero, aunque es posibleque un programa malicioso con la capacidad de replicarse también tenga un crecimientode cero.
4 CAPÍTULO 2. ESTADO DEL ARTE
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
Autosu�ciencia. Podemos diferenciar de acuerdo a esta característica entre el malwarecuyo código se encuentra en otros ejecutables de naturaleza no peligrosa y que han sidomodi�cados de forma maliciosa, o aquél que tiene su propia entidad y sus ejecutables,código y servicios no entran en contacto con otra aplicación. Cabe mencionar que no sonsolo ejecutables las aplicaciones sino que también puede ser un sector de arranque deldisco, una página de la memoria cache y cada día surgen nuevos métodos [18].
Ahora que conocemos algunas de las características que de�nen un malware resumiremos enel Anexo A, mediante la Tabla A.1, los tipos de malware más comúnmente conocidos según sufunción y características. Cabe mencionar que la mayoría de la literatura existente sobre el temaestá escrita en inglés y es por esta razón que usaremos los términos en inglés.
Antes de proceder a clasi�car el malware, vamos a justi�car por qué para este trabajo sedecidió estudiar aquellos software maliciosos que tienen capacidad de auto-replica y se propaganpor Internet. De acuerdo al Computer Security Institute (CSI) [1], el porcentaje de ataques nodirigidos, tanto en empresas como en particulares, es mucho mayor que el porcentaje de ataquesdirigidos.
Figura 2.1: Porcentaje de ataques dirigidos vs no dirigidos de acuerdo al CSI. Adaptado de [1]
Además de que este tipo de ataques son los más comunes, otro motivo para centrarnos enellos es que son los más dependientes de la red sobre la que se propagan. Como se menciona en laIntroducción, este trabajo pretende ser en parte didáctico, y al parecer del autor, y lo corroborala literatura existente sobre el tema, el estudio topológico de Internet es de gran interés. Al estarel autor cursando dos grados, uno de ellos el grado de Matemáticas, también resultó un hechodecisivo para escoger este campo de estudio, el poder utilizar conocimientos ya adquiridos sobremodelización y sobre grafos.
Podemos ver una clasi�cación del malware de acuerdo a las características mencionadasanteriormente en el Anexo A.
CAPÍTULO 2. ESTADO DEL ARTE 5
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
2.3. Modelando la epidemiología en redes complejas
La modelización matemática es una disciplina cuyo estudio se centra en expresar, en unlenguaje formal y matemático un fenómeno del mundo real. Esto nos permite teorizar sobreestos fenómenos y predecir resultados matemáticos consiguiendo un mejor entendimiento delmundo real [25][26]. Este proceso se podría simpli�car al diagrama de la Figura 2.2.
Figura 2.2: Diagrama del proceso de Modelización
La modelización nos permite, en casos donde la experimentación puede ser muy costosa oinviable, elaborar hipótesis que posteriormente podemos contrastar con datos empíricos. Es,sin duda, una herramienta muy útil en la investigación moderna y, en el caso de este texto,necesaria ante la imposibilidad de conseguir un mapa de Internet a pesar de los intentos yavances de algunas empresas como Facebook o LinkedIn [27][28][29]. De hecho, la modelizaciónes la mejor opción a la hora de intentar predecir y ganar conocimiento sobre como se va apropagar un gusano o algún otro malware que se propagué de forma indiscriminada por la redde redes, donde asumiremos algunas variables, parámetros y relaciones funcionales entre ellos,que no tenemos las capacidades de calcular pero sí de predecir. Antes de entrar a diferenciar losdistintos tipos de modelos que existen en la disciplina, y los utilizados en este tipo de problemas,me gustaría citar a un prestigioso matemático en el campo de la modelización, John L. Casti:
�What distinguishes a mathematical model from, say, a poem, a song, a portrait or any otherkind of �model�, is that the mathematical model is an image or picture of reality painted withlogical symbols instead of with words, sounds or watercolors.� - John L. Casti
En el caso de este trabajo, la Figura 2.2 no está del todo completa ya que en el proceso deobtener modelos matemáticos existen dos partes. Una primera parte donde se intenta abstraerel fenómeno real con un modelo matemático, mediante la formulación de las ecuaciones quedescriben la dinámica del proceso, y una segunda que nos permite pasar este modelo a unmodelo computacional, es decir, un modelo que podamos probar con los recursos disponibles.Este modelo será el que nos permitirá en el Capítulo 5, realizar distintas simulaciones y extraeralgunos resultados y conclusiones interesantes. Atendiendo a algunas características básicas delos modelos, existen distintas categorizaciones, entre las más comunes se encuentran:
Modelos estocásticos vs modelos deterministas [26][30]. Los modelos deterministasson aquellos cuyas variables y parámetros son conocidos y no aleatorios, es decir, no siguenuna distribución probabilística. En cambio, los modelos estocásticos, también ampliamente
6 CAPÍTULO 2. ESTADO DEL ARTE
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
utilizados sí que siguen una distribución probabilística y por tanto sus variables y pará-metros en vez de ser un valor, son un rango. Esto hace que el resultado y/o conclusionestambién sean un rango[31].
Modelos globales vs modelos individuales [30][32]. A la hora de modelar un sistemacomplejo se pueden adoptar dos posiciones. La primera consiste en pensar en el sistemacomplejo como una caja negra donde nuestro interés recae en la entrada y la salida con laque trabaja el sistema y donde los componentes de este no son objeto de estudio; o unasegunda posición que consiste en modelar el comportamiento individual de cada compo-nente del sistema, siendo este tipo de modelo, por lo general, más extenso y complejo dondecada componente cuenta con una dinámica propia y el conjunto de todas estás dinámicasterminan ofreciéndonos la dinámica general del sistema. Estos dos tipos de modelos nosdan un nivel de detalle muy distinto, y se pueden categorizar también como modelos conalto nivel de detalle vs modelos con bajo nivel de detalle Esta categorización delos modelos nos lleva directamente a la tercera mencionada en este apartado; puesto que,normalmente, los modelos globales se basan en ecuaciones diferenciales que dependen deltiempo frente a los modelos individuales que se ejecutan en unos conjuntos de espacio ytiempo discretos.
Modelos continuos vs modelos discretos [30][32]. Como deriva de la clasi�caciónanterior, podemos observar que los modelos continuos son aquellos en los que las variablespueden tomar un conjunto in�nito de valores mientras que, en los modelos discretos, comosu nombre indica, las variables solo pueden tomar cierto número de valores.
No existe un tipo de modelo mejor que el resto y la necesidad de utilizar uno u otro recaeen el fenómeno real sobre el que se modeliza, el nivel de detalle que se requiere o si necesitamosmodelarlo de forma continua o discreta. Las características mencionadas arriba son algunas delas más importantes a la hora de decidir que modelo es el que más se adecúa, y aun así, ha decontrastarse mediante la experimentación para comprobar que el modelo es el adecuado.Hay veces donde es fácil ver que característica cumple un fenómeno o no, como, por ejemplo,una partida de ajedrez tiene turnos �nitos y es modelada por un modelo determinista mientrasque una epidemia transcurre en un tiempo continuo. La producción de una serie de fábricaspuede modelarse a nivel global para cada fábrica mientras que una red neuronal necesita unnivel mayor de detalle. Incluso depende de qué parte del fenómeno, o sistema, se quiera predecir,puede que un mismo fenómeno acepte dos modelos distintos y ambos sean útiles.
Una vez que nos hemos introducido en la disciplina de la modelización, vamos a proceder enla Sección 2.3.1 a presentar algunos de los modelos habituales en la epidemiología y cuál es elque usaremos en nuestras simulaciones del Capítulo 5.
2.3.1. Modelos utilizados en la epidemiología de malware
A lo largo de la historia, el estudio de la propagación de enfermedades en las sociedades hasido de máxima importancia a la hora de plantear medidas de prevención y minimizar el impactode enfermedades. Es por razones como estas que nace una disciplina conocida como epidemiologiamatemática. Si intentamos hallar los primeros trabajos en este campo, encontramos que ya en1760 Daniel Bernoulli [33], ante una epidemia de viruela, realizó un estudio sobre qué impactotendría y como debería hacerse una campaña de vacunación. Desde entonces, muchos otrosacadémicos han planteado modelos y estudiado su adecuación a la realidad.
En este tipo de estudios, los que analizan las epidemias, los modelos más repetidos en laliteratura existente son los conocidos como modelos compartimentales [34][35][36], modelos enlos que la población se divide en distintos estados o fases conocidos como compartimentos.
CAPÍTULO 2. ESTADO DEL ARTE 7
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
Es lógico pensar que ante un virus biológico la población pasa por distintas fases. La cla-si�cación en diferentes estados y las transiciones entre ellos dan lugar a un amplio abanico demodelos distintos. Pongamos como ejemplo una enfermedad conocida por todos, la gripe. Supo-nemos que durante la época de gripe todo el mundo es susceptible de contraer esta enfermedad,por lo que primero una persona es susceptible de contraer el virus si tiene una interacción con unportador. En el caso de que se infecte, este sujeto de ejemplo ya sería portador de la enfermedady podría infectar a su vez a otras personas. Más tarde, la persona pasa de incubación a mostrarsíntomas, y está pasando por otro estado de la enfermedad distinto, donde ya no puede infectara otra gente. Finalmente, trás un período de tiempo, la persona se recupera y en el caso de lagripe estaría inmunizado pues ya ha pasado ese virus. En este ejemplo, podemos apreciar cuatroestados distintos y las funciones de transferencia entre ambos.
Figura 2.3: Proceso de la gripe utilizando FirefoxEmoji [2]
Es sencillo ver una relación entre una epidemia de un virus biológico y la propagación dealgunos tipos de malware como pueden ser los gusanos [37]. Como hemos explicado en el apar-tado anterior, los gusanos tienden, por regla general, a expandirse a través de algun tipo dered (social, telecomunicaciones, lista de contactos...) de forma indiscriminada y con el �n deinfectar al mayor número de ordenadores posibles. Los virus biológicos no son muy distintospues no atacan a una persona en concreto, sino que intentan propagarse en amplio espectro.A continuación, repasaremos brevemente algunos de los modelos compartimentales clásicos, asícomo sus diagramas de �ujo y las ecuaciones que modelizan sus evoluciones.
2.3.2. Parámetros de los modelos
Las variables utilizadas en las ecuaciones que de�nen los modelos son las siguientes:
N � Población total de dispositivos en el sistema. En estos casos tomaremos esta poblacióncomo constante.
S � Dispositivos sanos pero susceptibles a contraer la enfermedad.
E � Dispositivos en periodo de incubación.
R � Dispositivos recuperados.
β � Probabilidad de un dispositivo sano de infectarse al exponerse, es decir, tener comovecino de primer grado a un dispositivo infectado.
1 / γ � Promedio de tiempo que un dispositivo está infectado.
1 / ε � Promedio de incubación para un dispositivo.
2.3.3. SIS con población constante
Como vemos en la Figura 2.4 este modelo divide la población en dos grupos, los susceptiblesde infectarse (S) y los infectados (I). Un miembro de los susceptibles pasa a infectados al contraer
8 CAPÍTULO 2. ESTADO DEL ARTE
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
Figura 2.4: Distribución de �ujo del modelo SIS
la enfermedad, y un infectado vuelve a ser susceptible al sanarse, tomando como axioma quela inmunidad es imposible. La tasa de transferencia en cada unidad de tiempo se razona de laforma siguiente es la siguiente:
En cada unidad de tiempo existe una población de infectados que intenta propagar laepidemia a una población de susceptibles con probabilidad β. Por otra parte, parte de lapoblación de infectados se cura con probabilidad γ y vuelven a ser susceptibles.
En contraposición con el compartimento de susceptibles, el de infectados realiza la funcióninversa. Con probabilidad β los infectados aumentarán en número al entrar en contactocon los suspectibles y disminuirán en proporción γ al recuperarse.
Este proceso puede expresarse con el siguiente sistema de ecuaciones diferenciales ordinarias,asumiendo que la población(N) es constante [38]:
dSdt = −βSI + γI dI
dt = βSI − γI N = S(t) + I(t)
2.3.4. SIR con población constante
Figura 2.5: Distribución de �ujo del modelo SIR
Este modelo es la evolución natural del anterior. Sabemos que algunas enfermedades como lavaricela, cuyos síntomas solo pueden pasarse una vez, por lo que es lógico pensar que la poblaciónha de dividirse ahora en tres grupos: susceptibles de contagio(S), infectados(I) y recuperados(R).Si como en el apartado anterior, volvemos a asumir una población constante(P), las ecuacionesdiferenciales que de�nen el modelo son [39]:
dSdt = −βSI dI
dt = βSI − γI dRdt = γI N = S(t) + I(t) +R(t)
Hay que tener en cuenta, que éste modelo que será el utilizado posteriormente en las simula-ciones, tiende, asintóticamente al menos, a recuperarse entero; por lo que con el tiempo su�cientetoda la población pertenecerá al compartimento de los recuperados.
CAPÍTULO 2. ESTADO DEL ARTE 9
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
2.3.5. SEIR con población constante
Figura 2.6: Distribución de �ujo del modelo SEIR
El último modelo clásico que repasaremos en esta sección divide la población en cuatrogrupos compartimentales. En algunas enfermedades, el paciente pasa por cuatro fases distintas.Este modelo es útil en aquellos casos en los que una persona, antes de ser infecciosa pasa porun periodo de incubación. Por esto, añade un grupo de individuos infectados que aun no soncontagiosos(E). Este modelo viene dado por las siguientes ecuaciones diferenciales[40]:
dSdt = −βSI dE
dt = βSI−εE dIdt = εE−γI dR
dt = γI N = S(t)+E(t)+I(t)+R(t)
2.4. Introducción a la teoría de grafos
La teoría de grafos [41][42] es una rama de las matemáticas que estudia las propiedadesde los grafos. La teoría de grafos tiene sus fundamentos en las matemáticas discretas y en lasmatemáticas aplicadas. Parece obvio entonces, que debemos empezar de�niendo que es un grafo:
Un grafo G es un conjunto no vacío V, de vértices o nodos, y un conjunto A, de aristas,extraído de la colección de subconjuntos de dos elementos de V.
Los grafos son el objeto de estudio de la teoría de grafos, y vemos que su de�nición involucrados conceptos nuevos, vértices y aristas. Aunque existen grafos que no se pueden representar endos dimensiones, para este apartado asumiremos que sí se pueden para simpli�car las de�niciones:
Un vértice o nodo es un punto en R2.
Una arista o eje es una dupla de dos nodos, es decir, E = (U, V) con U, V ∈ R2.
Pensando en el trabajo que nos concierne, podemos entender los nodos como todos los dis-positivos conectados a la red compleja que vamos a estudiar que, como siempre a lo largo de estedocumento, suponemos Internet. Las aristas serán entonces las conexiones físicas o cables exis-tentes entre dos dispositivos. Una clasi�cación muy común y general de los grafos es dividirlosentre grafos dirigidos y grafos sin dirección:
Diremos que un grafo es dirigido cuando para dos nodos U y V, la existencia de una aristaE = (U, V) implica que U tiene un enlace con V pero no que V tenga un enlace con U. Es decir,en estos grafos las aristas son duplas ordenadas.
Aunque esta de�nición es esencial en la teoría de grafos, no es aplicable a nuestro caso puessupondremos que los enlaces de Internet son bidireccionales. Otra propiedad inherente y deinterés de estudio sobre los nodos es el número de enlaces que tiene cada nodo:
El grado de un nodo U, deg(U), es el número de aristas incidentes en ese nodo. En nuestrocaso, al tratar grafos sin dirección, el grado de nodo es el número de enlaces que tiene ese nodo.
Si un nodo tiene grado cero, diremos que es un nodo aislado. En las simulaciones realizadas,como cuando un nodo es aislado no tiene sentido considerar que pertenezca a Internet, hemos
10 CAPÍTULO 2. ESTADO DEL ARTE
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
modi�cado el modelo de Albert-Läzlö Barabasi [43] que si permite la existencia de nodos aisladospara que no existan estos nodos. Podemos ver este modelo en la sección 2.5.4. Para terminarcon esta sección, introduciremos dos nociones sobre la robustez de la red más de relevancia eneste proyecto:
Un camino entre dos vértices U y V, es una secuencia de aristas que empiezan en U yterminan en V. La longitud de un camino viene dada por el número de aristas en el camino.La longitud media de los caminos más cortos es determinante a la hora de entender lasredes complejas que analizaremos. Pese a la inmensa cantidad de nodos existentes en una redcompleja como Internet, la longitud del camino más bajo entre dos nodos cualesquiera de la red,es mucho menor de lo esperado, y esto in�uye en la propagación de un virus.
La longitud promedio del camino se calcula mediante la siguiente formula siendo n elnúmero de vértices del grafo y d(vi, vj la distancia entre los nodos i y j:
lG = 1n∗(n−1) ∗
∑i 6=j d(vi, vj)
La última noción que necesitaremos durante este trabajo sobre la teoría de grafos es el coe�-ciente de agrupamiento. Esta métrica es de gran importancia en nuestro trabajo [44] puescomo veremos, algunas redes complejas, y en particular Internet; muestra un alto coe�ciente deagrupamiento o clustering. Esta medida cuanti�ca [45] cuán agrupado esta un vértice dentro delgrafo, y un alto valor de esta medida facilita la creación de vecindarios, es decir, conjuntosde nodos muy agrupados entre si. Se puede hablar tanto de coe�ciente de agrupamiento oclustering a nivel local como global:
Clustering global. Mide la relación entre la cantidad cantidad de triángulos cerrados delnodo frente al total.
C = numerodetringuloscerradosnumerodetringulostotales
Siendo un triángulo, tres nodos conectados mediante dos (abierto) o tres (cerrado) enlacessin dirección.
Clustering local. Esta medida fue introducida por Watts [44] y calcula cómo de cercaestan un vértice y sus vecinos de ser un grafo completo. Se calcula mediante la siguientefórmula:
Ci =2|{ejk:vj ,vk∈Ni,ejk∈E}
ki(ki−1)
2.4.1. Ejemplo de grafo.
Para ejempli�car los conceptos básicos del apartado anterior, utilizaremos el grafo de laFigura 2.7:
Recordemos que un grafo es un par de conjuntos, siendo uno de estos conjuntos V con losvértices y otro E con las aristas. En el caso de la Figura 2.7, V = {A, B, C, D, E} y E = {(A,C), (A, D), (C, D), (C, E)}. En el ejemplo, al igual que en los grafos de estudio durante estedocumento, estamos ante un grafo sin dirección.
Un camino entre A y E sería l = {(A, C), (C, E)}, cuya longitud sería dos por involucrardos aristas.
CAPÍTULO 2. ESTADO DEL ARTE 11
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
Figura 2.7: Grafo de ejemplo.
Un concepto no introducido en el apartado anterior y relevante a la hora de entender Internet,son los hubs. Estos nodos diferencian las redes aleatorias de las redes scale free. La existencia dehubs en las redes libres de escala las diferencia notablemente de las redes aleatorias. Entendemoscomo un hub aquél vértice de un grafo cuyo grado es signi�cativamente superior a la media detodos los nodos del grafo.
Veamos ahora cuales en la Tabla 2.3, son los grados de los nodos. Los nodos del grafo tienendistinto color según su grado, así será más intuitivo ver el grado de cada nodo.
Nodo Grado Aislado/Hub AristasA 2 No {(A, C), (A, D)}B 0 Aislado ∅C 3 Hub {(A, C), (C, D), (C, E)}D 2 No {(A, D), (C, D)}E 1 No {(C, E)}
Tabla 2.3: Grado de los nodos del grafo en la Figura 2.7
2.5. La topología de Internet
Los grafos son un concepto muy importante a la hora de entender la realidad. Al ser losgrafos un tipo de `mapa' que describe las relaciones entre nodos, podemos hallar grafos en redesbiológicas como las redes neuronales [46], en redes sociales como la red de actores [47] y enotras redes que representan tecnologías como Internet [43][48]. Sin embargo, estas redes no sonfáciles de entender; más bien todo lo contrario. A pesar de conocer su existencia estas redes hanresultado ser, durante décadas, muy complejas para que las entendiesemos.
Podemos encontrar los primeros modelos en este campo, en los presentados por Pal Erdos yAlfred Renyi en 1959 [49]. Estos matemáticos presentaron un modelo que asumía que todas estasredes complejas se basaban en conexiones aleatorias. Esta teoría fue aceptada en disciplinas tandistintas como la informática, la biología o la sociología. Según se avanzaba en la investigacióndel campo, surgían nuevas preguntas como la hipótesis de los �Seis grados de separación�
[50], que a pesar de haber sido introducida a �nales de los años 20 del siglo pasado, no fue hasta1998 que se representó con un modelo matemático este fenómeno aparentemente sociológico [44].
Con este nuevo planteamiento, se empezaron a observar redes similares en lugares que notenían ninguna relación aparente como, por ejemplo, la red neuronal del gusano C. Elegans [51]o la red eléctrica de la costa oeste de Estados Unidos [52].
12 CAPÍTULO 2. ESTADO DEL ARTE
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
Una vez que se empezó a comprender que las estructuras de estas redes in�uían de formadirecta en algunos fenómenos observados se empezaron a adaptar los modelos de forma quepudiesen explicarlos todos. Esto permitió que la modelización de las redes pasase de ser unproblema propio de una disciplina concreta a un paradigma común entre varias ramas del co-nocimiento. Además del ya mencionado lema de los �Seis grados de separación� [50], otrofenómeno llamó la atención de los investigadores. El fenómeno en cuestión es el conocido como�rich-get-richer� [53], que hace referencia a la mayor probabilidad de recableado a un nodocon un alto grado frente a uno de menor grado. Este fenómeno observable en redes reales per-mitía explicar la existencia de los hubs, nodos de alto grado, que in�uyen de forma notable enel funcionamiento de Internet.
Trás este breve repaso de la importancia de los grafos en el funcionamiento de Internet, enlas secciones siguientes repasaremos dos de los modelos más notorios de este tipo de redes. Elprimero es el modelo Watts-Strogatz. Este modelo consigue explicar la alta resilencia de Internetademás de las comunidades que se crean en este tipo de redes, sin embargo, no consigue explicarel nacimiento de los hubs y considera estas redes complejas como redes constantes donde elnúmero de nodos no varía. Una vez explicadas las características de este modelo, procederemosa explicar el algoritmo de cosntrucción propuesto por sus autores. El otro modelo que trataremosserá el creado por Albert Laslo Barabasi en 2002 [54]. Mientras que el modelo Watts-Strogatz sepublicó en 1998, este modelo es posterior y encuentra explicaciones a algunas incógnitas presentesen el modelo de Watts. Finalmente, se mostrará el algoritmo de construcción propuesto por elautor.
2.5.1. Small Worlds
Podemos encontrar uno de los primeros trabajos donde se busca la topología de Internet enel autor D.J. Watts[48] quién inspirado en el famoso lema, Six degrees of separation, empezóa observar relaciones interesantes entre la longitud media de los caminos de un grafo y sucoe�ciente de clusterización en su tésis doctoral junto a su tutor Steven Strogatz. Partiendo deuna primera idea de que Internet es similar a un grafo aleatorio de Erdos-Renyi, Watts encuentraciertas propiedades que le permite de�nir el fenómeno small world. Si es verdad que los primerosmodelos de Internet se representaron mediante la generación de grafos con el modelo de Erdos-Renyi y que eran capaces de modelar ciertos comportamientos de Internet, D.J. Watts de�ne unanueva topología de grafos que cumple ciertas cualidades y de�ne mejor algunas redes complejascomo Internet. En concreto las redes small world se fundamentan en dos propiedades:
Alto coe�ciente de clusterización. El autor observa que Internet, como otras redessmall-world, se agrupa en una especie de barrios, es decir, pequeños subgrafos donde lamayoría de nodos pertenecientes al subgrafo están conectados entre sí. El signi�cado in-tuitivo de esta propiedad es el siguiente: Dados dos vértices cualesquiera pertenecientes ala red, si estos grafos no están conectados directamente existe una gran probabilidad deque lo estén de forma indirecta.
Media de camino más corto baja. Dos nodos cualesquiera de la red están conectadospor un camino de longitud relativamente baja. Es esta propiedad la que mas ha trascendidoa la cultura general y es el conocido fenómeno small world. Alguna vez hemos escuchadoque solo estamos a seis contactos de distancia de cualquier persona en el mundo, se hanescrito una obra y una película sobre el teorema, y existe una página para comprobar estacualidad en la red social de actores [55]. Aparentemente esta cualidad está presente enmuchas otras redes además de Internet, y es por qué la redes sociales, tanto virtuales comofísicas, tienen una topología subyacente similar a Internet.
CAPÍTULO 2. ESTADO DEL ARTE 13
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
Trás la observación y formulación del modelo, se observó que las redes de mundo pequeñocumplen lo siguiente. Si el grado medio del grafo es k, el número medio de vecinos de primer orden(vecinos inmediatos), será también k, el número medio de vecinos de segundo orden será k2, el detercer orden k3, etc. Esto da lugar a que la distribución de grado de este modelo corresponda auna distribución de Poisson. En la Figura 2.8 vemos un ejemplo de este tipo de grafos generadopor igraph [10] donde los nodos de mayor grado están coloreados de forma distinta:
Figura 2.8: Grafo de tipo Small-world Watts-Strogatz. N=200
2.5.2. Construcción de un grafo small-world
Las redes de mundo pequeño se encuentran entre un grafo regular y aleatorio. Para alcanzareste punto intermedio, el proceso de construcción de la red se detalla a continuación. Lo primeroque debemos de�nir es el tamaño del grafo tanto el número de vértices como el número de aristas.
Partimos de un grafo regular con forma de anillo, que tiene n vértices los cuales estánconectados a k vecinos en un inicio. Como hemos mencionado en secciones anteriores, los grafostratados en este trabajo no tienen dirección.
Escogemos un vértice de forma aleatoria y la arista que lo une con su vecino más próximo.El criterio para escoger este vecino, en el modelo presentado por Watts era el sentido horario.Otro parámetro que de�ne el grafo es p. Este parámetro p de�ne la probabilidad con la que unaarista es reconectada a otro vértice aleatoriamente en el grafo, con la condición de que nuncapuede haber dos enlaces entre los mismos vértices. En la Figura 2.9 podemos ver grafos paradistintos p.
(a) p = 0 (b) p = 0.25 (c) p = 1
Figura 2.9: Redes small world para distintos valores de p. Se puede ver la generación en el CódigoB.4.3.
Seguimos procediendo de la misma forma hasta que hallamos completado una vuelta enteraal anillo, rotando de vértice siempre en el sentido horario.
14 CAPÍTULO 2. ESTADO DEL ARTE
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
En la siguiente iteración del algoritmo, consideramos los enlaces entre los vértices y susvecinos de profundidad 2, es decir, los vecinos de sus vecinos. El algoritmo de recableado es elmismo que para el paso anterior. Este proceso lo repetimos hasta que hayamos considerado todoslos vétices una vez. Como el grado consta de n vértices, cuyo grado inicial es k, el número totalde ejes es |E| = nk
2 , y por tanto serán necesarias k2 iteracciones para completar el algoritmo de
construcción. Podemos ver un ejemplo en la Figura 2.10.
Figura 2.10: Proceso de construcción de red small-world para p = 0,5. Grafo inicial, primeraiteración, segunda iteración. Se puede ver la generación en el Código B.4.4.
2.5.3. Redes scale-free
Aunque la investigación de Watts y Strogatz fue sumamente importante y positiva ya queimpulsó el estudio de las redes complejas, en 2002 Albert-Laslo Barabasi presentó un nuevomodelo [56] de redes small world. Este nuevo modelo re�ejaba algunas características de lasredes complejas estudiadas por Watts que no estaban representadas en su modelo. Barabasidenominó a estas redes, redes scale free.
Una red scale free es aquella cuya función de distribución de los grados de los vértices, sigueuna ley potencial. Esto quiere decir, que la probabilidad de que un nodo tenga grado k es:
P (k) ∼ k−γ
Barabasi observó que este tipo de redes complejas presentan dos características importantes:
Red en crecimiento. Las redes scale free están continuamente en crecimiento. Estecrecimiento no tiene por qué ser periódico, pero se asume que la red varía el número denodos con el tiempo y no es constante. Si pensamos en las redes ya mencionadas en lassecciones anteriores, como la red de actores, parece obvio que cada día hay nuevos actoresy por tanto, en la red, nodos nuevos.
Conexión preferencial. Esta característica quiere decir cuando se crea una nueva co-nexión o eje entre los nodos de la red, es más probable que los nodos con un grado altoreciban este eje. Esto da lugar a la existencia de los denominados hubs, nodos con un gradomucho mayor que la media del grafo. Con este fenómeno, Barabasi consigue modelizar elfenómeno rich-get-richer mencionado en los apartados anterios. Según el dominio de lared, los hubs ganan mayor o menor importancia.
Como en la sección 2.5.1 dedicada a las redes small world, terminamos esta sección con unejemplo generado por igraph de un grafo segun el modelo Barabasi-Albert de una red scale freeen la Figura 2.11.
CAPÍTULO 2. ESTADO DEL ARTE 15
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
Figura 2.11: Grafo de tipo Scale free Barabasi-Albert. N=200
2.5.4. Construcción de un grafo scale-free
Además de de�nir las redes scale-free, Barabasi también propuso un algoritmo de construc-ción para ellas. Este algoritmo es un simple proceso estocástico basado en un modelo de tiempodiscreto en el que cada paso se añade un vértices.
Empezamos con dos vértices y un enlace entre ambos. En los siguientes pasos añadimos unvértice y añadimos ejes entre el nuevo vértice y los antiguos. La probabilidad de que cierto vérticeantiguo sea escogido para enlazar con el nuevo es:
pi =ki∑j kj
siendo pi la probabilidad de que el nuevo nodo cree un eje con el nodo i. Esta probabilidad dalugar al fenómeno preferential attachment.
Otro parámetro que de�ne la red, es el número de enlaces que se crean al añadir cada nodo.Es decir, si cada vez que se añade un vértice al grafo, este se enlaza con uno, dos u otros tresvértices por ejemplo, estas situaciones da lugar a tres redes distintas.
En la Figura 2.12 podemos ver el nacimiento de una red scale-free mediante la impresión delos grafos en distintos pasos, T, añadiendo dos aristas en cada paso:
2.6. Herramientas de manejo y análisis de grafos
Para la realización de las simulaciones es necesario la implementación de una herramienta quenos facilite la creación de grafos así como el análisis de los mismos. Existe una amplia variedadde este tipo de herramientas pero puesto que se ha decidido implementar la herramienta enPython solo hablaremos de las librerías que tengan soporte en este lenguaje:
2.6.1. Graph-tool
Graph-tool [57] es una librería de Python destinada al análisis estadístico de los grafos, esdecir, redes. Esta librería destaca porque su núcleo esta implementado en C++ aprovechando lalibrería Boost Graph. Este tipo de implementación permite una mejora notable del rendimientosimilar a la que se hubiese obtenido de tratarse de una librería propia de C/C++. Algunas desus características son:
Amplias posibilidades para obtener medidas de centralidad, variedad de algoritmos topo-lógicos, manejo I/O de grafos mediante GraphML, detención de comunidades...
16 CAPÍTULO 2. ESTADO DEL ARTE
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
(a) T = 1 (b) T = 6 (c) T = 11
(d) T = 16 (e) T = 21 (f) T = 26
Figura 2.12: Nacimiento de una red scale-free en distintos momentos. Se puede ver la generaciónen el Código B.4.5.
Potente capacidad de visualización de grafos.
Soporte de OpenMP para arquitecturas multi-núcleo.
2.6.2. NetworkX
Al igual que Graph-tool, NetworkX [58] es otro paquete de Python destinado al estudio de laestructura, las dinámicas y las funciones de redes complejas. Se trata de una herramienta opensource y algunas de sus características son las siguientes:
Cobertura del código del 90%.
Diferentes algoritmos y constructores de redes complejas.
Abstracción de los nodos, permitiendo que distintos tipos de datos como imágenes, texto,�cheros XML, o cualquier otro archivo serializable.
2.6.3. igraph
Finalmente, existe otro conjunto de herramientas de análisis que se centra en la e�ciencia yportabilidad, además de contar con una interfaz muy accesible. Esta kit de herramientas, igraph[9], es la que utilizaremos durante la elaboración de este proyecto.
Hemos escogido esta herramienta entre todas las posibles, por su amplia documentación[10] y su alta e�ciencia que nos han permitido aprender a utilizar la herramienta en un tiemporelativamente corto así como poder realizar las simulaciones en un ordenador personal cuyasmodestas prestaciones se re�ejan en la Tabla 4.1.
CAPÍTULO 2. ESTADO DEL ARTE 17
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
18 CAPÍTULO 2. ESTADO DEL ARTE
3Análisis y diseño
3.1. Etapas del proyecto
Para conseguir realizar las simulaciones que se encuentran en la Sección 5, se han seguidouna serie de etapas, que pasan desde la documentación en el campo del proyecto hasta decisionesde diseño y alcance del mismo:
I. Estudio y de�nición del proyecto. Ante la idea de entender mejor como se propaga elsoftware malicioso en Internet, fue necesario realizar una lectura de la literatura existenteen el campo que permitiése de�nir el alcance de este proyecto. Mediante la lectura denumerosos artículos centrados en esto mismo [59][60][61][62], se consiguieron de�nir lossiguientes temas que necesariamente se debían estudiar y presentar en el documento antesde la realización de las pruebas:
a) Estudio del estado actual de Malware y su categorización. Parece obvio quesi pretendemos estudiar la propagación del software malicioso, primero es necesariode�nir claramente qué es, cuáles son los tipos de software malicioso existentes, quiéneslo utilizan y con qué �nes. Por esto mismo, se repasaron algunas de las referenciasbásicas [63][4] del tema y se elaboró un breve resumen de las nociones básicas en lala Sección 2.2.
b) Estudio sobre los modelos de epidemiología actuales. El problema sobre el quese basa este trabajo es, en esencia, un problema de epidemias o, por sus proporciones,de pandemias. Es, por esto, lógico y necesario repasar los distintos enfoques a la horade plantear el estudio. Primero, se repasaron los modelos epidemiológicos en su formamás genérica [38][39][40] y después se realizaron lecturas de artículos más enfocadosal tema del presente trabajo [26][32][59]. Todo este trabajo se resume en la Sección2.3.
c) Introducción a la teoría de grafos. Internet, la WWW y otras redes existentes enel mundo real pueden ser representadas como grafos. Representar una red análoga aInternet como un grafo es indispensable para poder realizar un estudio de la propaga-ción del software malicioso sobre esta red. Por esto se repasó la Teoría de Grafos [64]y se recogieron los conceptos necesarios para el correcto entendimiento del trabajo enla la Sección 2.4.
19
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
d) Estudio sobre la topología de Internet y su parametrización. En los primerosartículos de D.J. Watts [48][44], y en la colección de escritos de Albert-László Barabási[65][56] sobre el análisis de Internet y su estructura, nos enseñan que Internet presentaunas características que podrían in�uir en la propagación del malware. Para entendercuáles son estas características y cómo in�uyen se leyó información de estos autoresentre otros que queda resumida en la Sección 2.5.
e) Estudio sobre las herramientas para el tratamiento y análisis de grafos.Finalmente necesitamos una herramienta que nos permita unir todos estos conoci-mientos para experimentar con ellos y realizar simulaciones. En el caso de este traba-jo decidimos utilizar igraph puesto que es una librería diseñada para tratar grandesgrafos que nos permitan tener una estructura modestamente análoga a Internet. Apartir del libro de los desarrolladores de la librería [10], pudimos comprender lasposibilidades que nos brindaba python junto con igraph y que posteriormente nospermitirían comprobar algunas hipótesis surgidas de la investigación.
II. Elaboración de hipótesis a contrastar. Trás tener una base de conocimientos sobre eltema, se teorizó sobre cómo se comportaría el fenómeno, la propagación del malware, antedistintos sucesos donde la inteligencia del malware, la estructura de la red sobre la que sepropaga o las funciones de transición entre los distintos estados varían.
III. Diseño de la herramienta para realizar las simulaciones. Una vez planteadas laspruebas que se pretenden realizar y establecidas las tecnologías a usar, se implementóun conjunto de clases de Python y funciones que permitiesen realizar las simulacionesdiseñadas.
IV. Desarrollo del código de las simulaciones. Con las simulaciones de�nidas y la herra-mienta implementada, se prepararón las distintas simulaciones recogidas en el el Capítulo5.
V. Análisis de los resultado y observaciones sobre estos. Finalmente, en el Capítulo 6,se resumieron las distintas simulaciones realizadas mediante los enunciados de las hipótesisque impulsaron cada simulación, las premisas de cada una y las tablas y/o grá�cas quenos permitiesen visualizar los resultados.
3.2. Requisitos de la herramienta
Para poder realizar el estudio recogido en este trabajo, se ha necesitado desarrollar, utilizandodistintas tecnologías, una herramienta que permitiese realizar las simulaciones del Capítulo 5.A continuación se presentan los requisitos funcionales y no funcionales que debe cumplir laherramienta:
3.2.1. Requisitos Funcionales
A continuación se detallan los requisitos funcionales mínimos que ha de cumplir nuestra he-rramienta de simulación para llevar acabo su propósito. Estos requisitos especi�can las funcionesque la herramienta debe ser capaz de ejecutar:
RF1. Creación de grafos. La herramienta ha de ser capaz de crear distintos tipos degrafos entre los que están incluidos los modelos Lattice, Watts-Strogatz y Barabasi-Albert.
20 CAPÍTULO 3. ANÁLISIS Y DISEÑO
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
RF2. Manejo de grandes grafos. La herramienta ha de ser capaz de manejar grafos degrandes dimensiones.
RF3. Soporte de Modelos Compartimentales. La herramienta ha de tener clases yestructuras que soporten los distintos modelos compartimentales como SIS, SIR y SEIR.
RF4. Realizar las simulaciones de propagación. Mediante el uso de los grafos y lossistemas compartimentales, la herramienta ha de ser capaz de simular una propagación demalware.
RF5. Capacidad de variar el número de infectados y susceptibles. Cómo lassimulaciones cuentan con distintos escenarios, algunos de ellos varían el porcentaje desusceptibles de la población total o el número inicial de infectados. Esta funcionalidaddebe ser soportada por el sistema.
RF6. Calibración de los parámetros de la simulación. La simulación ha de permitirmodi�car también otros parametros propios de la simulación, como las tasas de infeccióny recuperación.
RF7. Capacidad de guardar y cargar grafos. La herramienta debe manejar los grafosen un formato que permita su guardado en un �chero y, posteriormente, ha de ser capazde cargar grafos en este formato desde un �chero.
RF8. Capacidad de mostrar los grafos de forma visual. Para poder mostrar losresultados de las simulaciones, a veces es necesario dibujar el grafo. La herramienta debeser capaz de mostrarlos para un tamaño aceptable.
RF9. Personalización de la visualización. Los grafos deben tener opciones de perso-nalización como tamaño de los vértices y colores para la fácil comprensión de las imágenes.
RF10. Visualización de grá�cas con resultados. Para algunas simulaciones será ne-cesario que los datos númericos obtenidos sean re�ejados en una grá�ca. La herramientadebe proveer esta función.
3.2.2. Requisitos No Funcionales
Además de los requisitos funcionales mencionados en la sección anterior, también existenotros atributos de calidad que ha de cumplir la herramienta. A continuación, los requisitos nofuncionales principales:
RNF1. Generación rápida de grafos de tamaño considerable. La generación degrafos es una función básica de la herramienta. Por ser este un proceso repetido a lo largode todo el trabajo, es necesario que la herramienta lo haga en un tiempo aceptable.
RNF2. El código de la herramienta ha de ser intuitivo y legible. Como la he-rramienta no cuenta de una interfaz grá�ca, es necesario que el código sea accesible parapoder modi�car los parámetros necesarios para cada simulación.
RNF3. Código compatible con Ubuntu 18.04. Como el sistema operativo dónde serealizarán las simulaciones es Ubuntu 18.04, la herramienta debe ser compatible con estesistema.
RNF4. El código debe estar propiamente estructurado y comentado. Como lasmodi�caciones se realizan sobre el código, es necesario que se organice en modulos distintosy esté comentado.
CAPÍTULO 3. ANÁLISIS Y DISEÑO 21
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
3.3. Diseño de la infraestructura
Una vez que hemos de�nido las funcionalidades de nuestra herramienta, tenemos que de-�nir los diferentes agentes y estructuras que intervienen en las simulaciones. Esto pasa desdecaracterizar los malware que utilizaremos a especi�car los parámetros con los que generare-mos nuestra red análoga a Internet. Otro apartado relevante de la infraestructura, es el modelocompartimental que usaremos.
3.3.1. Caracterización del malware a propagarse
Uno de los factores clave de las simulaciones del Capítulo 5 es el malware cuya propagaciónvamos a simular.
En nuestro caso, ya hemos mencionado en la introducción, que usaremos un malware de tipogusano. Estos software maliciosos se caracterizan por extenderse de forma no dirigida, es decir,no buscan infectar un dispositivo en concreto sino el mayor número de ellos. Esto quiere decirque los límites de propagación vienen dados en gran medida por la estructura sobre la que sepropagan que especi�caremos en la Sección 3.3.3.
Para de�nir la tasa de infección y recuperación de la Simulación 5.4 nos basaremos en uncaso conocido y reciente como es la epidemia de WannaCry [66]. No nos centraremos en lasvulnerabilidades que utilizó para infectar los dispositivos, sino que nos centraremos en aquellascaracterísticas que nos permitan de�nir nuestro malware simulado. Esta epidemia comenzó el12 de Mayo de 2017 y de ella conocemos los siguientes datos:
98% de las víctimas utilizaban Windows 7.
0.07% de las víctimas pagaron el rescate que les permitía desinfectarse.
El parche que corrigió las vulnerabilidades fue lanzado el 18 de Mayo.
La infección llegó a alrededor de 400.000 dispositivos infectados.
Con estos datos y el conocimiento de que en Junio de 2017 la cuota de mercado de Windows7 era 49.04% podemos establecer unos parámetros para la simulación correspondiente. En estasimulación, procederemos de la siguiente forma:
Esta infección duró 7 días antes de ser reparada la vulnerabilidad, por lo que durante estasimulación realizaremos 14 pasos de la infección, simulando estos 7 días y los 7 posteriores.
Como hemos mencionado antes, la población principalmente afectada han sido los usuariosde Windows 7. Como la cuota de mercado de este S.O. era del 49.04% asumiremos quenuestra población susceptible inicial será el 50 por ciento del total de la red.
Durante los 7 primeros días, no existía un parche para la vulnerabilidad y solo el 0.07%pagaron el rescate. Supondremos que la tasa de recuperación, γ, es 0.0007 durante losprimeros días y a falta de datos tras el lanzamiento del parche, se recuperará con unaγ = 0,5. Suponemos una γ tan alta ya que al ser la mayoría de infectados usuarios deWindows 7 y este contar con un sistema de actualizaciones automáticas, es fácil llegar aestas cifras.
El último dato que nos falta por inferir es la velocidad de propagación, β. Como estemalware se centraba en una vulnerabilidad que compartían todos los susceptibles, podemosasumir que infecta a los susceptibles con β = 1.
22 CAPÍTULO 3. ANÁLISIS Y DISEÑO
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
3.3.2. Diseño del modelo compartimental
En este trabajo, se estudian epidemias de malware. En particular, estos malwares que seestudian en el presente documento, suelen basarse en distintas vulnerabilidades que se descubrenpuntualmente y los criminales utilizan para sus propios �nes. Es por esto que tenemos queadaptar levemente alguno de los modelos presentados en la Sección 2.3.
Si analizamos los casos existentes mencionados en la Sección 2.3, vemos que durante unaepidemia de malware se sigue el siguiente proceso:
1. Se descubre una vulnerabilidad. Las tecnologías están en continua evolución, y el cons-tante lanzamiento de nuevas versiones, nuevos sistemas operativos, nuevas herramientas,etc; provocan que existan nuevas vulnerabilidades cada poco tiempo. A veces, los crimi-nales ni si quieran han de buscar ellos mismos las vulnerabilidades, como en el caso yamencionado de Wannacry, donde la vulnerabilidad había sido destapada por un grupo deinvestigación dos meses antes.
2. Los criminales desarrollan el software malicioso. Este paso es despreciable en cuantoa tiempo se re�ere, puesto que cada vez hay mayor profesionalización del cibercriminal, sutiempo de respuesta es muy bajo.
3. Los criminales infectan al paciente cero. Con la herramienta ya preparada, los cri-minales buscan una primera víctima y esperan.
4. El software malicioso se expande. Esta parte del proceso es la que simularemos.¾Cuánto es el daño causado antes de la reparación de la vulnerabilidad? ¾Cómo lo podemosminimizar? La mayor parte de la investigación de las empresas de ciberseguridad se centraen el análisis de los distintos vectores de ataque. Sin embargo, el pensamiento del autor esque un mayor entendimiento de cómo se propaga el malware, la estructura sobre la que lohace y el proceso en sí mismo, reportaría grandes bene�cios en materia de seguridad.
5. La vulnerabilidad se repara. Finalmente, las empresas, los investigadores y organismosgubernamentales reparan la vulnerabilidad y los dispositivos se actualizan progresivamentesi fuese necesario.
Analizando los distintos pasos del proceso de propagación, podemos ver que los dispositivoso nodos de la red tienen cuatro estados posibles:
1. Nodos inmunes. Las vulnerabilidades no siempre afectan a todos los dispositivos, por lotanto habrá nodos en la red que nunca pasan por los demás estados.
2. Nodos susceptibles. En contraposición al estado anterior, ante una nueva vulnerabilidad,además de haber nodos inmunes habrá nodos que sufran la vulnerabilidad y por tanto seansusceptibles.
3. Nodos infectados. Eventualmente, algunos de los nodos susceptibles, entrarán en con-tacto con un nodo infectado y se contagiarán del software malicioso. Los efectos de lainfección son distintos según el tipo de malware pero asumiremos que esto no in�uye en lapropagación.
4. Nodos recuperados. Finalmente, ante una epidemia de malware, hay un momento en elque se repara la vulnerabilidad utilizada tanto para la propagación como para la infección.
CAPÍTULO 3. ANÁLISIS Y DISEÑO 23
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
En la mayor parte de las simulaciones seguiremos este esquema que corresponde al modeloSIR. Sin embargo, se propone la implementación de un modelo XSIR que añade un comparti-mento para los nodos que nunca han sido ni serán susceptibles de infección. A partir del modeloXSIR, podemos obtener un modelo SIR si ignoramos los vértices en el compartimento X, esdecir, el de los inmunes. Sin embargo, en ocasiones es necesario representar la totalidad de lared y estos nodos aunque inmune pueden actuar como medio de propagación o defensa frente almalware.
3.3.3. Parametrización y modelización de una red análoga a Internet
Los ordenadores, los móviles, incluso las lavadoras o neveras, son dispositivos susceptibles deser infectados por un software malicioso. Cada día son más los dispositivos que cuentan con unsoftware que los controla y que están conectados a Internet. Esto conlleva que Internet tenga ungran tamaño que nos impida modelarlo. Es más, actualmente no se ha conseguido cartogra�arla red de redes a pesar de las investigaciones e inversiones que se realizan para ello.
Sin embargo, como hemos estudiado en la Sección 2.5 se ha visto que Internet pertenecea un tipo de redes complejas y que comparte características con otras redes. Si recordamos elapartado del estado del arte donde hablabamos sobre la topología de Internet, recordaremos queInternet es una red scale free. Estas redes tenían una función de distribución del grado de susnodos del tipo:
P (k) ∼ k−γ
Varias investigaciones han demostrado que en el caso de Internet, γ = 2,2 [65][56], y este será elparámetro utilizado durante las simulaciones.
Otro aspecto importante a la hora de preparar el grafo que nos sirva de estructura, essu tamaño. Como ya hemos mencionado al principio de este apartado, el tamaño de Internetes tan colosal que no podemos representarlo. Sin embargo, como veremos en la Sección 5.1,distintas redes con mismo γ y distintos tamaño, se comportan de forma muy similar. Por esto,adaptaremos el tamaño de la red en cada simulación según las necesidades de la misma, puestoque este parámetro no es esencial a la hora de predecir cómo se comporta la propagación delmalware.
La posibilidad de crear este tipo de grafo con un cierto γ en particular, nos la ofrece lalibrería escogida para la realización de la herramienta, igraph. Esta librería cuenta con elsiguiente constructor:
Barabasi (n , m, outpre f=False , d i r e c t ed=False , power=1, zero_appeal=1,implementation="psumtree" , start_from=None )
Explicándose los signi�cados de sus parámetros en la Tabla 3.1.
Parámetro Signi�cado Valor en las simulacionesn Número de vértices Depende de la simulaciónm Número de aristas que salen de cada vértice 4.16 [67]outpref Flag para hacer depender del grado de salida la
conexión preferencialFalse
power Constante de potencia 2.2 [43]
Tabla 3.1: Tabla de parámetros del constructor de grafos.
24 CAPÍTULO 3. ANÁLISIS Y DISEÑO
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
3.4. Inteligencia del gusano propuesta
En la simulación de la Sección 5.3, se teoriza sobre un caso donde el malware no se propaguéindiscriminadamente sino que pase por dos fases:
I Primera fase: Ataque a hubs. En nuestro supuesto caso, en los primeros cinco pasos,el malware se dirige especí�camente a por los nodos de mayor grado. Este supuesto no estan descabellado puesto que dispositivos con funciones similares tienden a tener el mismosistema operativo. Si los cibercriminales encontrasen un exploit en ese sistema operativo,podrían diseñar una herramienta mixta donde primero atacase a los hubs y despuésprocediese a desplegar otro malware que explotase una vulnerabilidad más común.
II Segunda fase: Ataque no dirigido. Cómo mencionamos en el párrafo anterior, supo-nemos que este software malicioso es una herramienta mixta, que trás un cierto periodode tiempo libera otro malware que ataca de forma no discriminada.
CAPÍTULO 3. ANÁLISIS Y DISEÑO 25
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
26 CAPÍTULO 3. ANÁLISIS Y DISEÑO
4Desarrollo e integración del entorno
Durante este capítulo se resumirán las herramientas necesarias para la elaboración de estetrabajo. Desde los dispositivos utilizados para la realización de la herramienta y las simulacioneshasta las librerías que son necesarias para su correcta implementación y ejecución.
Después se resumirá la organización del código y se mostrará un diagrama de clases delmismo. Este diagrama solo corresponde al código utilizado por las simulaciones puesto que elresto de código elaborado han sido pruebas o clases independientes las cuáles no tiene sentidointroducir en el diagrama.
Todas las librerías utilizadas, así como el sistema operativo sobre el que se desarrolló eltrabajo se encuentra bajo licencia open source. La �losofía open source de�ende que los productoslicenciados bajo la misma han de ser libres y abiertas y que los productos derivados de los mismoshan de tener también licencia open source. Este tipo de productos impulsa el aprendizaje.
4.1. Entorno de desarrolo y simulación.
Para la realización de este trabajo se utilizaron dos ordenadores personales. Uno para laelaboración del documento en sí cuyas prestaciones son irrelevantes y otro para el desarrollo dela herramienta y la ejecución de las simulaciones. Las prestaciones de este segundo ordenadorquedan recogidas en la Tabla 4.1.
El código implementado durante este proyecto, ha sido integramente realizado en Python
debido a la existencia de las herramientas necesarias en este lenguaje así como la familiaridaddel autor con el mismo.
Además, en la Sección 4.1.2 se enumerarán las librerías y paquetes de Linux necesarios parala réplica de las simulaciones. Recordar al lector que el código de este proyecto esta recogido enel Anexo B.
27
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
4.1.1. Sistema hardware
OrdenadorProcesador Intel(R) Core(TM) i5 CPU [email protected], 2 Núcleos
RAM 4 GB DDR2SO Ubuntu 18.04 LTS (Bionic Beaver)
Tabla 4.1: Tabla con las prestaciones del equipo utilizado para el desarrollo y la simulación deeste proyecto.
4.1.2. Software necesario.
Como vemos en la Tabla 4.1 este proyecto se ha desarrollado utilizando la última versiónestable de Ubuntu disponible. Además de ser este el sistema operativa sobre el que realizaremosla implementación de la herramienta así como la ejecución de las simulaciones fue necesario lainstalación de algunos nuevos paquetes así como el uso de otros ya instalados previamente. Acontinuación, se enumerarán los paquetes necesarios para poder realizar las simulaciones:
1. build-essential y python2.7 . Los primeros paquetes que necesitamos son los básicospara trabajar con python. En nuestro caso trabajaremos con la versión 2.7 de python porser la que más habitualmente usa el autor. Los comandos para su instalación son los si-guientes:sudo apt-get install build-essentialsudo apt-get install python2.7
2. NumPy . NumPy es una de las librerías más usadas en la comunidad cientí�ca. Se puedeencontrar tanto de forma independiente o podemos encontrar sus funcionalidad básica enel paquete pylab. En nuestro caso, usaremos la versión independiente que se instala de lasiguiente forma:sudo apt-get install python-numpy
3. random . Aunque en la Sección 2.5 hemos visto que Internet no es una red aleatoria, si queexiste cierta componente aleatoria en su creación. Lo mismo sucede con la propagación demalware que se basa en procesos estocásticos. Para replicar esta aleatoriedad utilizaremosla librería random. Aunque hayamos enumerado esta librería puesto que es una de lasque usamos, este modulo ya viene instalado en la funcionalidad básica de Python.
4. iGraph . Finalmente necesitamos usar la librería especí�ca para el alcande de este do-cumento, que hemos decidido que sea igraph. Para ello basta con instalarla con el siguientecomando:sudo apt-get install python-igraph
4.2. Distribución del código
Para la realización de este proyecto, se han implementado una amplia variedad de clases.Algunas de estas clases no son utilizadas en las simulaciones pero fueron necesarios para seguirun proceso de aprendizaje correcto sobre la epidemiología del malware.
28 CAPÍTULO 4. DESARROLLO E INTEGRACIÓN DEL ENTORNO
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
Existen una serie de clases que no tienen dependencias con otras. estas clases son las utilizadaspara la generación de las imágenes que se pueden encontrar en la sección de construcción degrafos small world y grafos scale free.
Después existe una serie de clases relacionados de la forma mostrada en la Figura 4.1 pararealizar las simulaciones del proyecto. Aquí podemos diferenciar clases en distintos niveles: lassimulaciones, funciones del núcleo, modelos epidemiológicos y una clase para el modelo compar-timental y otra para los compartimentos.
4.2.1. Diagramas UML de las Simulaciónes
En esta sección se presenta el diagrama de clases de las simulaciones. Como podemos veren el Anexo B estas no son las únicas clases desarrolladas para el proyecto, sin embargo, losotros códigos constan de un solo archivo independiente del resto por lo que se ha decidido norepresentarlos en el diagrama de clases de la Figura 4.1.
Recordar al lector, que todo el código que se menciona durante este documento puede serencontrado en el Anexo B.
Figura 4.1: Diagrama de clases con la distribución del código de las simulaciones del proyecto.Se puede ver el código en la Sección B.1.
CAPÍTULO 4. DESARROLLO E INTEGRACIÓN DEL ENTORNO 29
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
30 CAPÍTULO 4. DESARROLLO E INTEGRACIÓN DEL ENTORNO
5Simulaciones realizadas y resultados
Durante esta sección experimentaremos con el �n de entender más de ciertas hipótesis quehan surgido durante la investigación realizada. En esta sección se realizarán simulaciones pararesponder a algunas preguntar que al autor le han parecido de interés. Estas preguntas son:
I. ¾In�uye el tamaño de la red en la velocidad relativa de propagación? Es obvioque el tamaño de la red in�uye en el número total de infectados durante una epidemiade malware. Sin embargo, algo no tan obvio es si el tamaño in�uye en la proporción depoblación infectada. A parte del interés de esta característica en sí misma, esta prueba noses necesaria para después poder interpolar los resultados de nuestra simulación sobre unmodesto grafo a una red mayor como Internet.
II. ¾Cuánta importancia tienen los paciente cero en una epidemia de malware?Las propiedades de una red libre de escala como Internet imponen que existan nodos conun grado muy superior al resto. La lógica nos hace pensar que comenzar en estos nodos dealta conectividad haría que la epidemia tuviese mayores consecuencias pero esto puede queno sea cierto. En la segunda simulación intentamos ver la importancia que tiene empezaruna epidemia en los hubs.
III. ¾Es e�ciente diseñar un malware inteligente para causar una epidemia? Parapoder entender bien como enfrentarnos en la epidemia, es necesario entender como piensanlos criminales detrás de ella. Esto nos lleva al siguiente planteamiento trás la pruebaanterior: Un ciber delincuente podría diseñar un malware que tuviese una fase inicialdonde atacaría de forma inteligente y certera a los hubs más cercanos desde el pacientecero. Aunque este tipo de programa sería muy complicado de llevar, ¾cuáles serían susconsecuencias? Este escenario es el que planteamos durante la tercera simulación.
IV. La cuarta simulación es la más visual de todos e intenta replicar el proceso seguidopor WannaCry . Esta simulación cuenta con la red más pequeña de todas a �n de quesea visual.
V. La siguiente simulación intenta evaluar la importancia de que el grupo de infectadosiniciales sean vecinos o no. Para ello se realizan dos simulaciones con tres infectadosiniciales cada uno. En la primera se fuerza a que sean vecinos y en la segunda se utilizanel algoritmo de simulación habitual.
31
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
VI. La última simulación del trabajo busca responder a cómo se comportará la propagacióndado un β �jo y un γ variable.
5.1. Relación entre tamaño de la red y la propagación
La primera simulación que se ha decidido realizar era necesaria para que el estudio realizadoen este proyecto tuviese sentido. Como no es posible representar Internet en su totalidad senecesitaba comprobar si la propagación demalware sobre redes scale free se comportaba de formasimilar para distintos tamaños de la red. Para ello, se ha decidido realizar distintas simulacionesde la propagación de malware con la misma parametrización salvo el tamaño de la red. Podemosver los parámetros de la simulación en la Tabla 5.1.
# nodos F. de propagación Modelo Ejecs. Tiempo β γ Infectados Susceptibles102 simulacion SIR 10 100 0.025 0.01 1 99103 simulacion SIR 10 100 0.025 0.01 1 999
5 ∗ 103 simulacion SIR 10 100 0.025 0.01 1 4999104 simulacion SIR 10 100 0.025 0.01 1 9999
2,5 ∗ 104 simulacion SIR 10 100 0.025 0.01 1 249995 ∗ 104 simulacion SIR 10 100 0.025 0.01 1 49999105 simulacion SIR 10 100 0.025 0.01 1 99999106 simulacion SIR 10 100 0.025 0.01 1 999999
Tabla 5.1: Tabla con los parámetros de la Simulación 1.
Como vemos en la Figura 5.1, aunque el tamaño de la red marca la proporción máxima deinfectados, las grá�cas para todas las simulaciones tienen una tendencia similar. Esta grá�capresenta la proporcion de infectados a lo largo del tiempo, siendo la proporción de infectadosel promedio de diez ejecuciones para cada simulación. Si el número de ejecuciones fuese mayor,las grá�cas se diferenciarían sin cortarse, pero por limitaciones de HW, esto no es posible. Estonos permite realizar las posteriores simulaciones y predecir como se comportaría una red mayorcomo Internet.
Figura 5.1: Grá�ca correspondiente a la Simulación 1. Se puede ver la simulación en el CódigoB.1.1.
32 CAPÍTULO 5. SIMULACIONES REALIZADAS Y RESULTADOS
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
5.2. Relevancia del paciente cero
A lo largo de este documento, hemos introducido el concepto de hub, un nodo pertenecientea una red cuyo grado es mucho mayor que el grado medio. A la hora de analizar la propagacióndel malware nos preguntamos la in�uencia de empezar en un nodo de estas característicasfrente a una infección aleatoria. Por razones obvias, estos nodos suelen tener un mayor gradode seguridad, por lo que surge la siguiente pregunta: ¾Es, desde el punto de vista del criminal,rentable tomar un hub como paciente cero?
Para responder esta pregunta nos hemos puesto en un caso extremo y hemos realizado dossimulaciones. La primera es una simulación donde la epidemia empieza en el nodo de mayorgrado de la red y la segunda es una simulación aleatoria como las del apartado anterior. En laTabla 5.2 podemos ver los parámetros de las simulaciones.
# nodos F. de propagación Modelo Ejecs. Tiempo β γ Infectados Susceptibles105 simulacionHub SIR 10 100 0.025 0.01 Hub 99999105 simulacion SIR 10 100 0.025 0.01 1 99999
Tabla 5.2: Tabla con los parámetros de la Simulación 2.
Al igual que en la simulación anterior hemos promediado diez ejecuciones en cada simulación,pues al ser la segunda aleatoria podría empezar por azar en un hub. Si observamos la Figura 5.2,podemos observar cómo empezar la infección en un hub in�uye en la velocidad de propagaciónpero no tan notablemente en la proporción de infectados. Sin embargo, para los criminales eltiempo es crítico y han de infectar a la mayor población posible antes de que se repare lavulnerabilidad.
Figura 5.2: Grá�ca correspondiente a la Simulación 2. Se puede ver la simulación en el CódigoB.1.2.
CAPÍTULO 5. SIMULACIONES REALIZADAS Y RESULTADOS 33
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
5.3. Infección dirigida a nodos de alto grado
En la simulación anterior, estudiamos como se comporta la epidemia si empieza en el nodocon mayor grado. Esta, supone que el software malicioso que se propaga tiene una inteligenciaque le permite infectar con probabilidad uno a aquel nodo con el que entra en contacto en loscinco primeros turnos y tiene grado mayor que el grado medio del grafo.
Este escenario no es imposible de imaginar, pues dispositivos con funciones similares usansoftware similar, por lo que una vulnerabilidad en un hub podría afectar al resto. No obstante,el tiempo de respuesta es bajo, por eso suponemos que este malware lleva otro encapsulado quefunciona de forma habitual.
Esto quiere decir, que el software malicioso de la primera simulación, realiza los cincoprimeros pasos de forma dirigida a por los nodos de alto grado. Después de esto, el algoritmode propagación es el mismo que en la infección aleatoria.
Como en el apartado anterior, realizaremos dos simulaciones. Una con el software malicio-so inteligente, y el otro con la función simulación básica. Podemos ver los parámetros de lassimulaciones en la Tabla 5.3.
# nodos F. de propagación Modelo Ejecs. Tiempo β γ Infectados Susceptibles105 simulacionInteligente XSIR 10 100 0.025 0.01 1 99999105 simulacion XSIR 10 100 0.025 0.01 1 99999
Tabla 5.3: Tabla con los parámetros de la Simulación 3.
En la Figura 5.3 podemos ver que esta supuesta inteligencia afectaría tanto al máximo nodode infectados como a la velocidad de propagación. Junto a los resultados de la simulación anterior,podemos entonces a�rmar que la seguridad en los nodos de mayor grado de una red debería serproporcional a su grado para disminuir el impacto de la epidemia.
Figura 5.3: Grá�ca correspondiente a la Simulación 3. Se puede ver la simulación en el CódigoB.1.3.
34 CAPÍTULO 5. SIMULACIONES REALIZADAS Y RESULTADOS
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
5.4. Visualización de una epidemia con parámetros inferidos de
un caso real
En la simulación siguiente, se intenta replicar lo sucedido el verano de 2017. Durante esteverano, una epidemia de malware azotó distintos lugares del planeta, afectando desde particula-res a grandes multinacionales. Las especi�caciones del malware, se encuentran resumidas en laSección 3.3.1 y la red es una scale free como en las demás simulaciones pero solo con 100 nodos.
Para la visualización de esta simulación, se ha decidido realizar una sola ejecución. Estadecisión se tomó para poder realizar impresiones del grafo cada dos unidades de tiempo.
Antes de imprimir o fotogra�ar el grafo en un momento concreto, se le aplica una capa de co-lores de forma que se puedan diferenciar los distintos compartimentos. Los colores correspondena la siguiente leyenda:
Gris = Nodos en el compartimento X, ajenos a la infección.
Negro = Pacientes cero
Verde = Nodos recuperados
Amarillo = Nodos susceptibles
Rojo = Nodos infectados
En la Figura 5.5, podemos observar como antes del lanzamiento del parche que repara lavulnerabilidad en T = 8, la mayoría de los nodos con posibilidad de infectarse se infectan. Estoconcuerda con la realidad puesto que la epidemia de WannaCry actúo de forma virulenta en laprimera semana desde el comienzo del estallido y después hubo una recuperación considerable-mente rápida [68].
(a) T = 1 (b) T = 3 (c) T = 5 (d) T = 7
(e) T = 9 (f) T = 11 (g) T = 13 (h) T = 15
Figura 5.4: Estado del grafo en distintos momentos de la epidemia. Se puede ver la generaciónen el Código B.1.5.
CAPÍTULO 5. SIMULACIONES REALIZADAS Y RESULTADOS 35
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
5.5. Conjunto inicial de infectados junto vs disperso
En la penúltima simulación de este documento, se busca ver la relevancia de que el grupode infectados inicial este junto o disperso. Aparentemente, parece que si los infectados inicialesestán dispersos, podrán llegar a distintos nodos cada uno y por tanto, infectar a mayor parte dela población. Bajo esta premisa realizamos la simulación.
Los parámetros de la simulación se pueden observar en la Tabla 5.4.
# nodos F. de propagación Modelo Ejecs. Tiempo β γ Infectados Susceptibles105 simulacionGrupoInicial SIR 10 100 0.025 0.01 3 99997105 simulacion SIR 10 100 0.025 0.01 3 99997
Tabla 5.4: Tabla con los parámetros de la Simulación 5.
En vez de lo esperado, la Figura 5.5 nos muestra un comportamiento antiintuitivo. El grupoque comienza unido se propaga de forma más veloz y alcanza una mayor proporción de infectados.Esto se debe al algoritmo mediante el que se escogen los infectados, que selecciona un nodoaleatorio y otros dos de sus vecinos como primeros infectados. Al �jar un nodo y seleccionar dosde sus vecinos, hay una alta probabilidad de que uno de los dos vecinos tenga un alto grado deconexión y pertenezca a otra comunidad dando lugar a los resultados obtenidos.
Otra anomalía de la grá�ca es que ambas simulaciones no comienzan en el mismo punto.Esto se debe a que el primer dato que se re�eja es el obtenido trás la primera iteración de lasimulación. Esto quiere decir que el primer punto de la grá�ca no es el estado inicial, sino elestado resultante de aplicarle el primer paso de la simulación.
Figura 5.5: Grá�ca correspondiente a la Simulación 5. Se puede ver la simulación en el CódigoB.1.6.
36 CAPÍTULO 5. SIMULACIONES REALIZADAS Y RESULTADOS
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
5.6. Tasa de infección β �jo, tasa de recuperación γ variable
Como mencionamos en la Sección 2.3, el modelo SIR de epidemiología depende de dos pará-metros, β y γ. En esta simulación vamos a ver como in�uye γ en la propagación del malware.
Recordamos que β = 0,025 era la tasa de infección y γ la tasa de recuperación. Para esteapartado hemos realizado seis simulaciones con los mismos parámetros salvo γ que toma valoresentre 0 y β.
Como vemos en la Figura 5.6 las simulaciones responden de la manera esperada, es decir, amayor tasa de recuperación menor es la velocidad de propagación así como la mayor proporciónde infectados.
Podemos observar en la grá�ca que existen algunas irregularidades como para γ = 0,015 quees inferior a los valores 0.02 y 0.025 cuando debería ser así. Esto es debido a las limitaciones dehardware y se solucionaría si en vez de usar el promedio de 10 ejecuciones, usasemos un promediode un mayor número de ejecuciones.
Otro fenómeno curioso y que merece mencionarse, es la apreciable diferencia entre las tresgrá�cas de valor superior y las tres grá�cas de valor menor. Este cambio se debe a que el puntode in�exión de la ecuación de infección se halla entre los dos valores medios [69].
Figura 5.6: Grá�ca correspondiente a la Simulación 6. Se puede ver la simulación en el CódigoB.1.7.
CAPÍTULO 5. SIMULACIONES REALIZADAS Y RESULTADOS 37
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
38 CAPÍTULO 5. SIMULACIONES REALIZADAS Y RESULTADOS
6Conclusiones y trabajo futuro
6.1. Conclusiones
Este trabajo ha sido un acercamiento al mundo de la epidemiología de malware. En él se hanestudiado las distintas disciplinas que intervienen en este proceso. Desde el estudio del malware,su clasi�cación según sus características y el impacto del mismo hasta la estructura topológicaque posee Internet y su in�uencia en el proceso. También se han estudiado los distintos modelosutilizados, tanto en la epidemiología biológica como en la de software malicioso, centrandonosen los modelos compartimentales, más comunes a la hora de representar epidemias.
Una vez adquiridos los conocimientos necesarios para entender cómo se propaga la informa-ción, y en particular el malware, en una red de tipo scale free; se ha diseñado una herramientautilizando diversas tecnologías existentes de programación y especializadas en el manejo y aná-lisis de redes.
Trás desarrollar la herramienta y contar con todo lo necesario para realizar la simulación,se pensaron una serie de preguntas sobre cómo se comporta la epidemia y la red ante distintassituaciones.
Estas simulaciones nos permitieron obtener respuestas y un mayor conocimiento sobre eltema, y señalaron distintos hechos a tener en cuenta a la hora de predecir cómo se propagaráun determinado malware en Internet.
Esto rea�rma el pensamiento del autor de la necesidad de continuar con esta líneade investigación a �n de realizar estrategias preventivas adecuadas y tomar lascontramedidas correctas en caso de epidemia.
6.2. Trabajo futuro
La línea de investigación de este trabajo, es una línea en continuo desarrollo y muchos delos retos a resolver están ya planteados o actualmente siendo investigados. Algunos de los temasque se deberían estudiar a continuación de este trabajo, son los siguientes:
Conseguir un mapa actualizado de Internet.
39
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
Parametrizar distintos malwares reales de forma adecuada.
Implementar una interfaz grá�ca para la herramienta desarrollada además de permitir laparametrización desde la misma.
Habilitar la posibilidad de realizar la simulación de propagación sobre una red en creci-miento de forma que sea más similar a Internet.
40 CAPÍTULO 6. CONCLUSIONES Y TRABAJO FUTURO
Bibliografía
[1] MAJWilliam R. Detlefsen. Cyber attacks, Attribution, and Deterrence: Three Case Studies.Technical report, Computer Security Institute, May 2011.
[2] FirefoxEmoji. http://mozilla.github.io/fxemoji/dist/FirefoxEmoji/index.html. Accedidoen 2018-06-06.
[3] John Aycock. Computer viruses and malware. Number 22 in Advances in informationsecurity. Springer, New York, NY, 2006.
[4] William Stallings and Lawrie Brown. Computer security principles and practice. Pearson,Boston, 2015.
[5] Archit Gupta, Pavan Kuppili, Aditya Akella, and Paul Barford. An empirical study ofmalware evolution. pages 1�10. IEEE, January 2009.
[6] Gunter Ollmann. The evolution of commercial malware development kits and colour-by-numbers custom malware. Computer Fraud & Security, 2008(9):4�7, September 2008.
[7] Mathematical Models for Malware Propagation.
[8] Luc Tidy, Khurram Shahzad, Muhammad Aminu Ahmad, and Steve Woodhead. An as-sessment of the contemporary threat posed by network worm malware. IARIA, Nice, France,October 2014.
[9] python-igraph. http://igraph.org/python/. Accedido en 2018-06-17.
[10] Edoardo M. Airoldi, Tamás Nepusz, and Gábor Csárdi. Statistical Network Analysis withigraph. Springer.
[11] NotPetya Attack Costs Big Companies Millions SecurityWeek.Com. Accedido en 2018-05-26.
[12] ENISA. ENISA Threat Landscape Report 2017. Technical report, January 2018.
[13] MalwarebytesLABS. Cybercrime tactics and techniques: 2017 state of malware. Technicalreport.
[14] Obama Ordered Wave of Cyberattacks Against Iran - The New York Ti-mes. https://www.nytimes.com/2012/06/01/world/middleeast/obama-ordered-wave-of-cyberattacks-against-iran.html. Accedido en 2018-06-03.
[15] Top Georgian O�cial: Moscow Cyber Attacked Us We Just Can't Prove It WIRED.https://www.wired.com/2009/03/georgia-blames/. Accedido en 2018-06-03.
[16] MAJWilliam R. Detlefsen. Cyber attacks, Attribution, and Deterrence: Three Case Studies.Technical report, U.S. Army Command and General Sta� College, May 2015.
41
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
[17] Murugiah Souppaya and Karen Scarfone. Guide to Malware Incident Prevention and Hand-ling for Desktops and Laptops. Technical Report NIST SP 800-83r1, National Institute ofStandards and Technology, July 2013.
[18] Spectre (vulnerabilidad) - Wikipedia, la enciclopedia libre.https://es.wikipedia.org/wiki/Spectre_(vulnerabilidad). Accedido en 2018-05-26.
[19] The war against mobile 'adware' isn't over yet, warns Lookout\textbackslashtextbar Technology \textbackslashtextbar The Guardian.https://www.theguardian.com/technology/2014/feb/21/mobile-adware-chargeware-lookout-2013. Accedido en 2018-06-06.
[20] Rory Cellan-Jones. Malware mastermind suspect arrested. Russian police reportedly arresta man on suspicion of masterminding two infamous hacking tools., October 2013. Accedidoen 2018-06-06.
[21] How does auto-rooting malware LevelDropper gain device root access?https://searchsecurity.techtarget.com/answer/How-does-auto-rooting-malware-LevelDropper-gain-device-root-access. Accedido en 2018-06-06.
[22] Hackers Hid Backdoor In CCleaner Security App With 2 Billion Downloads 2.3 Million In-fected. https://www.forbes.com/sites/thomasbrewster/2017/09/18/ccleaner-cybersecurity-app-infected-with-backdoor/#76a1d72a316a. Accedido en 2018-06-06.
[23] CertUtil.exe Could Allow Attackers To Download Malware While Bypassing AV.https://www.bleepingcomputer.com/news/security/certutilexe-could-allow-attackers-to-download-malware-while-bypassing-av/. Accedido en 2018-06-06.
[24] Trojan.Downloader. https://blog.malwarebytes.com/detections/trojan-downloader/. Acce-dido en 2018-06-06.
[25] Proyecto ESCEMMat UCM. http://www.mat.ucm.es/imgomezc. Accedido en 2018-05-21.
[26] Angel Martín del Rey. Mathematical modeling of the propagation of malware: a review:Mathematical modeling of the propagation of malware: a review. Security and Communi-cation Networks, 8(15):2561�2579, October 2015.
[27] CAIDA: Center for Applied Internet Data Analysis. CAIDA Interactive - Overview ofCAIDA Interactive Services. http://www.caida.org/interactive/index.xml. Accedido en2018-05-21.
[28] Socilab - LinkedIn Social Network Visualization, Analysis, and Education.http://socilab.com/#home. Accedido en 2018-05-21.
[29] The Opte Project. http://www.opte.org/. Accedido en 2018-05-21.
[30] H.T. Banks, Jared Catenacci, and Shuhua Hu. Stochastic vs. Deterministic Models forSystems with Delays. IFAC Proceedings Volumes, 46(26):61�66, 2013.
[31] Howard M. Taylor and Samuel Karlin. An introduction to stochastic modeling. AcademicPress, San Diego, 3rd ed edition, 1998.
[32] Ángel Martín Del Rey, F. K. Batista, and A. Queiruga Dios. Malware propagation inWireless Sensor Networks: global models vs Individual-based models. ADCAIJ: Advancesin Distributed Computing and Arti�cial Intelligence Journal, 6(3):5, September 2017.
42 BIBLIOGRAFÍA
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
[33] Daniel Bernoulli and Sally Blower. An attempt at a new analysis of the mortality caused bysmallpox and of the advantages of inoculation to prevent it. Reviews in Medical Virology,14(5):275�288, September 2004.
[34] K. Ramachandran and B. Sikdar. Modeling malware propagation in Gnutella type peer-to-peer networks. page 8 pp. IEEE, 2006.
[35] Jennifer T. Jackson and Sadie Creese. Virus Propagation in Heterogeneous BluetoothNetworks with Human Behaviors. IEEE Transactions on Dependable and Secure Computing,9(6):930�943, November 2012.
[36] Wanping Liu, Chao Liu, Zheng Yang, Xiaoyang Liu, Yihao Zhang, and Zuxue Wei. Modelingthe propagation of mobile malware on complex networks. Communications in NonlinearScience and Numerical Simulation, 37:249�264, August 2016.
[37] Frank L. Smith. Malware and Disease: Lessons from Cyber Intelligence for Public HealthSurveillance. Health Security, 14(5):305�314, October 2016.
[38] SI and SIS models Generic Model documentation. Accedido en 2018-05-25.
[39] SIR and SIRS models Generic Model documentation.https://institutefordiseasemodeling.github.io/Documentation/general/model-sir.html.Accedido en 2018-05-25.
[40] SEIR and SEIRS models Generic Model documentation.https://institutefordiseasemodeling.github.io/Documentation/general/model-seir.html.Accedido en 2018-05-25.
[41] Pablo Fernández Gallardo José Luis Fernández Pérez. Capítu-lo 8. Grafos. In El discreto encanto de la matemática(Sin publicar).https://www.uam.es/personal_pdi/ciencias/gallardo/capitulo8a.pdf.
[42] Satu Elisa Schae�er. Graph clustering. Computer Science Review, 1(1):27�64, August 2007.
[43] A.-L. Barabasi. Scale-Free Networks: A Decade and Beyond. Science, 325(5939):412�413,July 2009.
[44] Duncan J. Watts and Steven H. Strogatz. Collective dynamics of small-world networks.Nature, 393:440, June 1998.
[45] Coe�ciente de agrupamiento, November 2017. Accedido en 2018-06-06.
[46] F. Scarselli, M. Gori, Ah Chung Tsoi, M. Hagenbuchner, and G. Monfardini. The GraphNeural Network Model. IEEE Transactions on Neural Networks, 20(1):61�80, January 2009.
[47] James J. Collins and Carson C. Chow. It's a small world. Nature, 393(6684):409�410, June1998.
[48] Duncan J. Watts. Small worlds: the dynamics of networks between order and randomness.Princeton studies in complexity. Princeton Univ. Press, Princeton, NJ, 8. print., 1. paper-back print edition, 2004.
[49] P Erdös. P. Erdös and A. Rényi, Publ. Math.(Debrecen) 6, 290 (1959). Publ.Math.(Debrecen), 6:290, 1959.
[50] Fred Schepisi. Seis grados de separación. June 1995.
BIBLIOGRAFÍA 43
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
[51] Vito Latora and Massimo Marchiori. E�cient Behavior of Small-World Networks. PhysicalReview Letters, 87(19), October 2001.
[52] Li Fu, Wenjie Huang, Sheng Xiao, Yuan Li, and Shifan Guo. Vulnerability Assessment forPower Grid Based on Small-world Topological Model. pages 1�4. IEEE, 2010.
[53] Albert-László Barabási. Linked: the new science of networks. Perseus Pub, Cambridge,Mass, 2002.
[54] Réka Albert and Albert-László Barabási. Statistical mechanics of complex networks.Reviews of Modern Physics, 74(1):47�97, January 2002.
[55] The Oracle of Bacon.
[56] Réka Albert and Albert-László Barabási. Statistical mechanics of complex networks.Reviews of Modern Physics, 74(1):47�97, January 2002.
[57] graph-tool: E�cent network analysis with python. https://graph-tool.skewed.de/. Accedidoen 2018-06-18.
[58] NetworkX. https://networkx.github.io/. Accedido en 2018-06-18.
[59] Yi Wang, Zhen Jin, Zimo Yang, Zi-Ke Zhang, Tao Zhou, and Gui-Quan Sun. Global analysisof an SIS model with an infective vector on complex networks. Nonlinear Analysis: RealWorld Applications, 13(2):543�557, April 2012.
[60] Ranjit Kumar Upadhyay, Sangeeta Kumari, and A. K. Misra. Modeling the virus dynamicsin computer network with SVEIR model and nonlinear incident rate. Journal of AppliedMathematics and Computing, 54(1-2):485�509, June 2017.
[61] Hong Guo, Hsing Kenneth Cheng, and Ken Kelley. Impact of Network Structure on MalwarePropagation: A Growth Curve Perspective. Journal of Management Information Systems,33(1):296�325, January 2016.
[62] Sneha S and Malathi L. A Survey on Malware Propagation Analysis and Prevention Model.International Journal of Advancements in Technology, 06(02), 2015.
[63] Michael Sanford. Computer viruses and malware by John Aycock. ACM SIGACT News,41(1):44, March 2010.
[64] Graph theory. Springer Berlin Heidelberg, New York, NY, 2017.
[65] Réka Albert, Hawoong Jeong, and Albert-László Barabási. Diameter of the World-WideWeb: Internet. Nature, 401(6749):130�131, September 1999.
[66] WannaCry Ransomware Statistics: The Numbers Behind the Outbreak.https://blog.barkly.com/wannacry-ransomware-statistics-2017. Accedido en 2018-06-18.
[67] Lian-Ming Zhang, Xiao-Heng Deng, Jian-Ping Yu, and Xiang-Sheng Wu. Degree and con-nectivity of the Internet's scale-free topology. Chinese Physics B, 20(4):048902, April 2011.
[68] 'WannaCry File Restore', la herramienta de Telefónica para recuperar archivos afecta-dos por el ransomware. https://www.xataka.com/aplicaciones/wannacry-�le-restore-la-herramienta-de-telefonica-para-recuperar-archivos-afectados-por-el-ransomware. Accedidoen 2018-06-20.
[69] Aiguo Duan, Jianguo Zhang, Xiongqing Zhang, and Caiyun He. Relationship betweenModelling Accuracy and In�ection Point Attributes of Several Equations while ModellingStand Diameter Distributions. PLOS ONE, 10(5):e0126831, May 2015.
44 BIBLIOGRAFÍA
AClasi�cación de Malware
En la Tabla A.1 podemos ver una clasi�cación de los distintos tipos de malware de acuerdoa su capacidad de auto-replicación, el crecimiento de la población de infectados y la capacidaddel software malicioso de ejecutarse de forma independiente.
45
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
Nombre Auto-replicación
Crec. de Po-blación
Parásito Descripción
Adware [19] No 0 Sí Software que crea publicidad indeseada. Puederedirigir el navegador a sitios comerciales o abrirpop-ups.
Kit de ata-que [20]
No 0 No Kit de herramientas para la generación de unamplio espectro de malware.
Auto-rooter[21]
No 0 No Kit de herramientas para forzar la entrada enotro sistema.
Backdoor[22]
No 0 Sí Un mecanismo para pasar controles de seguridady acceder a otro programa o sistema.
Downloaders[23] [24]
No 0 Sí Malware parásito que suele servir para descargarotro paquete de malware.
Drive-by-download
No 0 Sí Malware encontrado normalmente en una webcomprometida que permite atacar a los visitan-tes de la página.
Exploits A veces Depende A veces Malware que ataca aprovechándose de ciertasvulnerabilidades conocidas.
Flooders A veces Depende A veces Malware que se usa para crear grandes volúme-nes de datos y realizar ataques DoS en redes.
Keyloggers No 0 Solo enla insta-lación
Malware que captura la entrada de teclado(uotros dispositivos) del sistema infectado.
Logic bomb No 0 A veces Malware instalado por un intruso que permane-ce latente hasta cumplir una condición que lodispare.
Mobile code A veces Depende A veces Malware preparado en un entorno aislado capazde ejecutarse en distintos sistemas.
Rootkit No 0 No Conjunto de herramientas que permiten al intru-so, una vez dentro del sistema, ganar acceso deroot.
Spammerprograms
No 0 No Malware encargado de enviar grandes cantidadesde spam.
Spyware No 0 No Malware que recolecta información sensible delsistema infectado.
Trojan hor-se [24]
No 0 Sí Malware que se esconde en un programa de apa-riencia útil y permite sortear controles de segu-ridad del ordenador infectado.
Worm Sí Positivo No Malware que suele ejecutarse por sí mismo y re-plicarse. Normalmente utilizando un exploit.
Zombie, bot A veces Depende No Malware que permanece en estado latente hastaser activado por el intruso, normalmente juntoa otro gran número de sistemas infectados, pararealizar un ataque.
Tabla A.1: Clasi�cación de malware. Tabla adaptada de: [3][4]
46 APÉNDICE A. CLASIFICACIÓN DE MALWARE
BCódigos del entorno de simulación
B.1. Simulaciones
B.1.1. Simulacion1.py
#!/ usr / b in /python# −∗− coding : l a t i n −1 −∗−from FuncionesNucleo import FuncionesNucleofrom ModeloSIR import ModeloSIRimport matp lo t l i b . pyplot as p l tfrom i g raph import ∗
class Simulac ion1 ( object ) :
def main ( s e l f ) :"""En es t a primera s imulac ion vamos a ver como i n f l u y e e l tamanyode l a pob l ac ion en e l porcen ta j e de pob l ac ion en cada compartimento .Para e l l o r ea l i za remos l a s imulac ion sobre un gra fo en un per iodo de100 unidades de tiempo para tamanyos desde 100 a 1000000. """
tam = [100 , 1000 , 5000 , 10000 , 25000 , 50000 , 100000 , 1000000]tiempo = 100beta = 0.025gamma = 0.01r e su l t ado s = [ ]
for s in tam :print " Simulac ion 1 Tamanyo : %d" % si f s != 1000000:
aux , aux2 = FuncionesNucleo ( ) . s imu lac ion (ModeloSIR ,"Scale_Free " ,tam_grafo=s ,
47
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
time=tiempo ,beta=beta , gamma=gamma)
## CdEmedia = [mean( items ) for i tems in i z i p (∗ aux2 ) ]while abs (mean(media ) ) − 0 .05 < 0 :
aux , aux2 = FuncionesNucleo ( ) . s imulac ion (ModeloSIR ,"Scale_Free " ,tam_grafo=s ,time=tiempo ,beta=beta ,gamma=gamma)
media = [mean( items ) for i tems in i z i p (∗ aux2 ) ]# Anyadimos e l r e s u l t a dor e s u l t ado s . append ( aux )
# La simulac ion con un mi l l on de nodos s o l o l a haremos una vez# por l im i t a c i o n e s d e l HW.
else :aux , aux2 = FuncionesNucleo ( ) . s imu lac ion (ModeloSIR ,
"Scale_Free " ,tam_grafo=s , runs=1,time=tiempo , beta=beta ,gamma=gamma)
## CdEmedia = [mean( items ) for i tems in i z i p (∗ aux2 ) ]while abs (mean(media ) ) − 0 .05 < 0 :
aux , aux2 = FuncionesNucleo ( ) . s imulac ion (ModeloSIR ,"Scale_Free " ,tam_grafo=s ,time=tiempo ,beta=beta ,gamma=gamma)
media = [mean( items ) for i tems in i z i p (∗ aux2 ) ]# Anyadimos e l r e s u l t a dor e s u l t ado s . append ( aux )
tiempo = range ( tiempo )averaged = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 0 ] ) ]averaged2 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 1 ] ) ]averaged3 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 2 ] ) ]averaged4 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 3 ] ) ]averaged5 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 4 ] ) ]averaged6 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 5 ] ) ]averaged7 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 6 ] ) ]averaged8 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 7 ] ) ]
p l t . p l o t ( tiempo , averaged , ' r ' , l a b e l='n = 100 ' )p l t . p l o t ( tiempo , averaged2 , 'b ' , l a b e l='n = 1000 ' )p l t . p l o t ( tiempo , averaged3 , ' g ' , l a b e l='n = 5000 ' )
48 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
p l t . p l o t ( tiempo , averaged4 , ' f u ch s i a ' , l a b e l='n = 10000 ' )p l t . p l o t ( tiempo , averaged5 , ' b lack ' , l a b e l='n = 25000 ' )p l t . p l o t ( tiempo , averaged6 , ' g reenye l l ow ' , l a b e l='n = 50000 ' )p l t . p l o t ( tiempo , averaged7 , ' cyan ' , l a b e l='n = 1000000 ' )p l t . p l o t ( tiempo , averaged8 , ' brown ' , l a b e l='n = 10000000 ' )p l t . l egend ( t i t l e="Numero de nodos de l g ra f o " )p l t . t i t l e ( "Proporc ion de i n f e c t ado s a l o l a r go de 100u de tiempo . " )#p l t . show ()p l t . s a v e f i g ( ' F iguras / s imulac ion1 . png ' )
e j e c = Simulacion1 ( )e j e c . main ( )
B.1.2. Simulacion2.py
#!/ usr / b in /python# −∗− coding : l a t i n −1 −∗−from FuncionesNucleo import FuncionesNucleofrom ModeloSIR import ModeloSIRimport matp lo t l i b . pyplot as p l tfrom i g raph import ∗
class Simulac ion2 ( object ) :
def main ( s e l f ) :""" En es t a segunda s imulac ión vamos a comprobar como a f e c t aen una epidemia s i e l v i r u s empieza en un hub o no . Para e l l ou t i l i z a r emo s l o s mismos parámetros que en e l apartado an t e r i o ra l a hora de r e a l i z a r l a s imulacion , s a l v o a l a hora de escoger e lprimer nodo in f e c t a do . """
tam = 100000tiempo = 100beta = 0.025gamma = 0.01r e su l t ado s = [ ]
print " Simulac ion 1"aux , aux2 = FuncionesNucleo ( ) . simulacionHub (ModeloSIR ,
"Scale_Free " ,tam_grafo=tam ,time=tiempo , beta=beta ,gamma=gamma)
## CdEmedia = [mean( items ) for i tems in i z i p (∗ aux2 ) ]while abs (mean(media ) ) − 0 .05 < 0 :
aux , aux2 = FuncionesNucleo ( ) . s imulac ion (ModeloSIR , "Scale_Free " ,tam_grafo=tam , time=tiempo ,beta=beta , gamma=gamma)
media = [mean( items ) for i tems in i z i p (∗ aux2 ) ]
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 49
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
r e s u l t ado s . append ( aux )
print " Simulac ion 2"aux , aux2 = FuncionesNucleo ( ) . s imu lac ion (ModeloSIR , "Scale_Free " ,
tam_grafo=tam ,time=tiempo , beta=beta ,gamma=gamma)
## CdEmedia = [mean( items ) for i tems in i z i p (∗ aux2 ) ]while abs (mean(media ) ) − 0 .05 < 0 :
aux , aux2 = FuncionesNucleo ( ) . s imulac ion (ModeloSIR , "Scale_Free " ,tam_grafo=tam , time=tiempo ,beta=beta , gamma=gamma)
media = [mean( items ) for i tems in i z i p (∗ aux2 ) ]
r e s u l t ado s . append ( aux )
tiempo = range ( tiempo )averaged = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 0 ] ) ]averaged2 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 1 ] ) ]
p l t . p l o t ( tiempo , averaged , ' r ' ,l a b e l=' I n f e c c i o n i n i c i a d a en un hub ' )
p l t . p l o t ( tiempo , averaged2 , 'b ' ,l a b e l=' I n f e c c i o n i n i c i a d a de forma a l e a t o r i a ' )
p l t . l egend ( t i t l e="Hubs vs nodos normales " )p l t . t i t l e ( "Proporc ion de i n f e c t ado s a l o l a r go de 100u de tiempo . " )# Plo tp l t . show ( )#p l t . s a v e f i g ( ' Figuras / s imulac ion2 . png ' )
e j e c = Simulacion2 ( )e j e c . main ( )
B.1.3. Simulacion3.py
#!/ usr / b in /python# −∗− coding : l a t i n −1 −∗−from FuncionesNucleo import ∗from ModeloXSIR import ModeloXSIRimport matp lo t l i b . pyplot as p l tfrom i g raph import ∗
class Simulac ion3 ( object ) :
def main ( s e l f ) :""" En es t a s imulac ion procederemos a ver cuanto mejoraun gusano s i l e metemos i n t e l e g e n c i a . En nues tra s imulación ,usaremos un nodo de tam 10^5 , en e l que supondremos como t r e s
50 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
cuar tas pa r t e s de l a pob l ac ion es s u s c e p t i b l e , y empieza con t r e si n f e c t a d o s . Estos t r e s i n f e c t a d o s tendrán p r o b a b i l i d a d 1 de i n f e c t a ra nodos con un grado a l t o ( perc . 90) en l o s 5 primeros contac tos , y0 en caso con t ra r i o . Después l a epidemia se e j e cu t a con l o s v a l o r e sde t r an s i c i ón de l a s s imu lac iones an t e r i o r e s . Por o t ra parte , ses imulará l a misma prueba s in contar e s t a i n t e l i g e n c i a . """
tam = 10 ∗∗ 5tiempo = 100beta = 0.025gamma = 0.01r e su l t ado s = [ ]
""" Simulacion 1 """print " Simulac ion 1"aux , aux2 = FuncionesNucleo ( ) . s imu l a c i o n I n t e l i g e n t e (ModeloXSIR ,
"Scale_Free " ,tam_grafo=tam ,s u s c e p t i b l e s=tam ,n_infectados=5,time=tiempo ,beta=beta ,gamma=gamma)
## CdEmedia = [mean( items ) for i tems in i z i p (∗ aux2 ) ]i = 2while abs (mean(media ) ) − 0 .005 < 0 :
print " Intento %d" % iprint "Media : %.3 f " % abs (mean(media ) )i += 1aux , aux2 = FuncionesNucleo ( ) . s imu l a c i o n I n t e l i g e n t e (ModeloXSIR ,
"Scale_Free " ,tam_grafo=tam ,
s u s c e p t i b l e s=tam ,n_infectados=5,time=tiempo ,beta=beta ,gamma=gamma)
media = [mean( items ) for i tems in i z i p (∗ aux2 ) ]
r e s u l t ado s . append ( aux )
t = range ( tiempo )averaged = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 0 ] ) ]p l t . p l o t ( t , averaged , ' r ' , l a b e l=' I n f e c c i o n i n t e l i g e n t e ' )
""" Simulacion 2 """print " Simulac ion 2"aux , aux2 = FuncionesNucleo ( ) . s imu lac ion (ModeloXSIR ,
"Scale_Free " , tam_grafo=tam ,s u s c e p t i b l e s=tam ,
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 51
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
n_infectados=5,time=tiempo , beta=beta ,gamma=gamma)
## CdEmedia = [mean( items ) for i tems in i z i p (∗ aux2 ) ]i = 2while abs (mean(media ) ) − 0 .005 < 0 :
print " Intento %d" % iprint "Media : %.3 f " % abs (mean(media ) )i += 1aux , aux2 = FuncionesNucleo ( ) . s imulac ion (ModeloXSIR ,
"Scale_Free " ,tam_grafo=tam ,s u s c e p t i b l e s=tam ,n_infectados=5,time=tiempo , beta=beta ,gamma=gamma)
media = [mean( items ) for i tems in i z i p (∗ aux2 ) ]
r e s u l t ado s . append ( aux )
t = range ( tiempo )averaged2 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 1 ] ) ]p l t . p l o t ( t , averaged2 , 'b ' , l a b e l=' I n f e c c i o n a l e a t o r i a ' )
""" Generar g r a f i c a """p l t . t i t l e ( "Proporc ion de i n f e c t ado s a l o l a r go de %du de tiempo . "
% tiempo )p l t . l egend ( )p l t . show ( )# p l t . s a v e f i g ( ' Figuras / s imulac ion3 . png ' )
e j e c = Simulacion3 ( )e j e c . main ( )
B.1.4. Simulacion4.py
#!/ usr / b in /python# −∗− coding : l a t i n −1 −∗−import mathfrom FuncionesNucleo import ∗from ModeloSIS import ModeloSISimport matp lo t l i b . pyplot as p l t
""" En es t a s imulac ion procederemos a ver cuanto mejoraun gusano s i l e metemos i n t e l e g e n c i a . En nues tra s imulación ,usaremos un nodo de tam 10^5 , en e l que supondremos como t r e scuar tas pa r t e s de l a pob l ac ion es s u s c e p t i b l e , y empieza con t r e si n f e c t a d o s .Estos t r e s i n f e c t a d o s tendrán p r o b a b i l i d a d 1 de i n f e c t a r a nodos con mayorgrado que l a media en l o s 5 primeros contac tos , y 0 en caso con t ra r i o .
52 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
Despuésl a epidemia se e j e cu t a con l o s v a l o r e s de t r an s i c i ón de l a s s imu lac ionesan t e r i o r e s . Por o t ra parte , se s imulará l a misma prueba s in contar e s t a i n t e l i g e n c i a . """
tam = 10 ∗∗ 5r e su l t ado s = [ ]
""" Simulacion 1 """r e s u l t ado s . append ( s imu l a c i o n I n t e l i g e n t e 2 (ModeloSIS , "Scale_Free " , tam_grafo=tam , s u s c e p t i b l e s=tam , time=100 , beta =0.025 , gamma=0.001))
tiempo = range (100)averaged = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 0 ] ) ]p l t . p l o t ( tiempo , averaged , ' r ' , l a b e l=' I n f e c c i o n i n t e l i g e n t e ' )
""" Simulacion 2 """r e s u l t ado s . append ( s imulac ion (ModeloSIS , "Scale_Free " , tam_grafo=tam , s u s c e p t i b l e s=tam , time=100 , beta =0.025 , gamma=0.001))
tiempo = range (100)averaged2 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 1 ] ) ]p l t . p l o t ( tiempo , averaged2 , 'b ' , l a b e l=' I n f e c c i o n a l e a t o r i a ' )
""" Generar g r a f i c a """p l t . t i t l e ( "Proporc ion de i n f e c t ado s a l o l a r go de 100u de tiempo . " )p l t . l egend ( )p l t . s a v e f i g ( ' s imulac ion4 . png ' )
B.1.5. Simulacion5.py
#!/ usr / b in /python# −∗− coding : l a t i n −1 −∗−import mathfrom FuncionesNucleo import FuncionesNucleofrom ModeloXSIR import ModeloXSIRimport matp lo t l i b . pyplot as p l tfrom i g raph import ∗
class Simulac ion5 ( object ) :
def main ( s e l f ) :""" En es t a s imulac ión co lorearemos l o s compartimentos d i s t i n t o spara ver de una forma v i s u a l l a propagación de l malware , en un casocon parametros ob t en ido s d e l caso 'Wannacry ' . """tam = 10 ∗∗ 2tiempo = 100beta = 1gamma = 0.07r e su l t ado s = [ ]
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 53
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
""" Simulacion 1 """r e s u l t ado s . append ( FuncionesNucleo ( ) . s imu lac i onCo lo r e s (ModeloXSIR ,
"Scale_Free " , tam_grafo=tam , s u s c e p t i b l e s=tam ∗0 . 5 ,n_infectados=3, time=tiempo , beta=beta , gamma=gamma,runs=1))
e j e c = Simulacion5 ( )e j e c . main ( )
B.1.6. Simulacion6.py
#!/ usr / b in /python# −∗− coding : l a t i n −1 −∗−import mathfrom FuncionesNucleo import FuncionesNucleofrom ModeloSIR import ModeloSIRimport matp lo t l i b . pyplot as p l tfrom i g raph import ∗
class Simulac ion6 ( object ) :
def main ( s e l f ) :""" En es t a s imulac ión comprobaremos como a f e c t a que l o s primerosi n f e c t a d o s e s t en jun to s o no . """
tam = 10 ∗∗ 5tiempo = 100beta = 0.025gamma = 0.01runs = 10r e su l t ado s = [ ]
print " Simulac ion 1"aux , aux2 = FuncionesNucleo ( ) . s imu lac i onGrupo In i c i a l (ModeloSIR ,
"Scale_Free " ,tam_grafo=tam ,n_infectados=3,time=tiempo ,beta=beta ,gamma=gamma,runs=runs )
## CdE# media = [mean( i tems ) f o r i tems in i z i p (∗ aux2 ) ]# wh i l e abs (mean(media ) ) − 0.05 < 0:# aux , aux2 = FuncionesNucleo ( ) . s imu lac ionGrupoIn i c ia l (ModeloXSIR ,# "Scale_Free " , tam_grafo=tam , s u s c e p t i b l e s=tam ∗0 .8 ,# n_infectados=3, time=tiempo , be ta=beta , gamma=gamma,# runs=runs )# media = [mean( i tems ) f o r i tems in i z i p (∗ aux2 ) ]
r e s u l t ado s . append ( aux )
54 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
print " Simulac ion 2"aux , aux2 = FuncionesNucleo ( ) . s imu lac ion (ModeloSIR ,
"Scale_Free " , tam_grafo=tam ,n_infectados=3, time=tiempo ,beta=beta , gamma=gamma,runs=runs )
## CdE# media = [mean( i tems ) f o r i tems in i z i p (∗ aux2 ) ]# wh i l e abs (mean(media ) ) − 0.05 < 0:# aux , aux2 = FuncionesNucleo ( ) . s imulac ion (ModeloSIR ,# "Scale_Free " , tam_grafo=tam , s u s c e p t i b l e s=tam ∗0 .8 ,# n_infectados=3, time=tiempo , be ta=beta , gamma=gamma,# runs=runs )# media = [mean( i tems ) f o r i tems in i z i p (∗ aux2 ) ]
r e s u l t ado s . append ( aux )
tiempo = range ( tiempo )averaged = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 0 ] ) ]averaged2 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 1 ] ) ]
p l t . p l o t ( tiempo , averaged , ' r ' ,l a b e l='Grupo i n i c i a l junto ' )
p l t . p l o t ( tiempo , averaged2 , 'b ' ,l a b e l='Grupo i n i c i a l d i s p e r s o ' )
p l t . t i t l e ( "Proporc ion de i n f e c t ado s a l o l a r go de 100u de tiempo . " )p l t . l egend ( )# Plo tp l t . show ( )# p l t . s a v e f i g ( ' Figuras / s imulac ion2 . png ' )
e j e c = Simulacion6 ( )e j e c . main ( )
B.1.7. Simulacion7.py
#!/ usr / b in /python# −∗− coding : l a t i n −1 −∗−from FuncionesNucleo import FuncionesNucleofrom ModeloSIR import ModeloSIRimport matp lo t l i b . pyplot as p l tfrom i g raph import ∗
class Simulac ion7 ( object ) :
def main ( s e l f ) :"""En es t a s imulac ion veremos l a i n f l u e n c i a de gamma en l apropagación de l malware . Fijaremos be ta y rea l i z a remos l as imulac ion para s e i s gammas d i s t i n t a s . """
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 55
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
tam = 100000tiempo = 100beta = 0.025gamma = [ 0 , 0 . 005 , 0 . 01 , 0 . 015 , 0 . 02 , 0 . 0 2 5 ]r e s u l t ado s = [ ]
i = 0for g in gamma:
print " Simulac ion %.3 f " % gaux , aux2 = FuncionesNucleo ( ) . s imulac ion (ModeloSIR , "Scale_Free " ,
tam_grafo=tam , time=tiempo ,beta=beta , gamma=g )
## CdEmedia = [mean( items ) for i tems in i z i p (∗ aux2 ) ]
i = 0# whi l e abs (mean(media ) ) − 0.05 < 0:# pr i n t "Ronda %d" % i# aux , aux2 = FuncionesNucleo ( ) . s imulac ion (ModeloSIR , "Scale_Free " ,# tam_grafo=tam , time=tiempo ,# be ta=beta , gamma=g )# media = [mean( i tems ) f o r i tems in i z i p (∗ aux2 ) ]# i += 1# # Anyadimos e l r e s u l t a dor e s u l t ado s . append ( aux )
tiempo = range ( tiempo )averaged = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 0 ] ) ]averaged2 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 1 ] ) ]averaged3 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 2 ] ) ]averaged4 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 3 ] ) ]averaged5 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 4 ] ) ]averaged6 = [mean( items ) for i tems in i z i p (∗ r e s u l t ado s [ 5 ] ) ]
p l t . p l o t ( tiempo , averaged , ' r ' , l a b e l='Gamma = 0 ' )p l t . p l o t ( tiempo , averaged2 , 'b ' , l a b e l='Gamma = 0.005 ' )p l t . p l o t ( tiempo , averaged3 , ' g ' , l a b e l='Gamma = 0 .01 ' )p l t . p l o t ( tiempo , averaged4 , ' f u ch s i a ' , l a b e l='Gamma = 0.015 ' )p l t . p l o t ( tiempo , averaged5 , ' b lack ' , l a b e l='Gamma = 0 .02 ' )p l t . p l o t ( tiempo , averaged6 , ' g reenye l l ow ' , l a b e l='Gamma = 0.025 ' )p l t . t i t l e ( "Proporc ion de i n f e c t ado s a l o l a r go de 100u de tiempo . " )p l t . l egend ( )p l t . show ( )#p l t . s a v e f i g ( ' Figuras / s imulac ion1 . png ' )
e j e c = Simulacion7 ( )e j e c . main ( )
56 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
B.2. Funcionalidades del núcleo
B.2.1. FuncionesNucleo.py
import randomfrom i g raph import ∗import pylab
class FuncionesNucleo ( ) :
def generaGrafo ( s e l f , t ipo , n=10000 , conectado=True , p=0.25) :i f t i po == "Erdos_Renyi" :
# Erdos_Renyi (n , p , m, d i r e c t e d=False , l oop s=False )# n = n v e r t i c e s , p = p ro b a b i l i d a d de a r i s t a s# ( s i hay p , no hay m)# m = numero de a r i s t a sg ra f o = Graph . Erdos_Renyi (n , m=2 ∗ n)
e l i f t i po == " La t t i c e " :# La t t i c e (dim , ne i=1, d i r e c t e d=False , mutual=True , c i r c u l a r=True )# dim = l i s t a con l a s diemnsiones d e l g ra fo ( s q r s t (n) ∗ s q r t (n)# en e s t e caso )# nei = d i s t an c i a a l a que dos v e r t i c e s es tan conectadosdim = [ int (n ∗∗ 0 . 5 ) , int (n ∗∗ 0 . 5 ) ]g ra f o = Graph . La t t i c e (dim)
e l i f t i po == "Grafo_Aleator io " :#r = 2 / ( ( n − 1) ∗ pi ) ∗∗ 0 .5g ra f o = Graph .GRG(n , r )
e l i f t i po == "Scale_Free " :# Barabasi (n , m, ou t p r e f=False , d i r e c t e d=False , power=1,# zero_appeal=1, implementat ion="psumtree " , start_from=None)# n = n ve r t i c e s , m = numero de a r i s t a s de s a l d i a en cada nodo ,# o una l i s t a con todas l a s a r i s t a s power = cons tan te de# potencia , s ino se e s p e c i f i c a l i n e a rg ra f o = Graph . Barabasi (n , 2 , power=2.2)
e l i f t i po == "Small_Worlds" :# Watts_Strogatz (dim , s i z e , nei , p , l oop s=False , mu l t i p l e=False )# Watts_Strogats par t e de un gra fo t i p o La t i c ce# dim = dimensiones d e l l a t t i c e , s i z e = tamanyo de todas# l a s dimensiones# nei = d i s t an c i a a l a que dos v e r t i c e s es tan conectados# p = rew i r ing p r o b a b i l i t yg ra f o = Graph . Watts_Strogatz (1 , n , 2 , p )
else :raise ValueError ( "No soportamos ese t ipo de g ra f o . " )
# Comprobamos que e l g ra fo e s t e conectado , s ino l o conectamos# noso t rosi f conectado and not g ra f o . i s_connected ( ) :
g ra f o = gra fo . c l u s t e r s ( ) . g i ant ( )
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 57
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
return g ra f o
def s imulac ion ( s e l f , modelo , t ipo_grafo , tam_grafo=10000 , n_infectados=1,s u s c e p t i b l e s =10000 , runs=10, time=100 , ∗ args , ∗∗kwds ) :
r e s u l t s = [ ]aux = [ ] # va r i a b l e para CdE# l o s s u s c e p t i b l e s es tan por d e f e c t o con 10000 para i g u a l a r# e l tamanyo de l g ra fo por d e f e c t o . Por tantoi f s u s c e p t i b l e s == 10000 :
s u s c e p t i b l e s = tam_grafofor i in xrange ( runs ) :
current_run = [ ]aux2 = [ ]
## In i c i a l i z amo s gra fo y modelog ra f o = s e l f . generaGrafo ( t ipo_grafo , n=tam_grafo )model = modelo ( grafo , ∗ args , ∗∗kwds )
i f s u s c e p t i b l e s != tam_grafo :s = random . sample ( range ( g ra f o . vcount ( ) ) , int ( s u s c e p t i b l e s %1))model . compartimentos . move_vertices ( s , "S" )
else :for v in g ra f o . vs :
model . compartimentos . move_vertice ( v . index , "S" )## Infectamos e l numero de nodos ind icadoi n f e c t ado s = random . sample ( range ( g ra f o . vcount ( ) ) , n_infectados )model . compartimentos . move_vertices ( i n f e c tado s , " I " )
## rea l i zamos l o s pasosfor t in xrange ( time ) :
model . s tep ( )p_infectados = model . compartimentos . tam_relat ivo ( " I " )current_run . append ( p_infectados )i f t < 10 :
aux2 . append ( p_infectados )
r e s u l t s . append ( current_run )aux . append ( aux2 )
return r e s u l t s , aux
def simulacionHub ( s e l f , modelo , t ipo_grafo , tam_grafo=10000 , num_infectados=1,s u s c e p t i b l e s =10000 , runs=10, time=100 , ∗ args , ∗∗kwds ) :
""" Simulacion """
r e s u l t s = [ ]aux = [ ] # va r i a b l e para CdE# l o s s u s c e p t i b l e s es tan por d e f e c t o con 10000 para i g u a l a r# e l tamanyo de l g ra fo por d e f e c t o . Por tantoi f s u s c e p t i b l e s == 10000 :
s u s c e p t i b l e s = tam_grafo
58 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
for i in xrange ( runs ) :current_run = [ ]aux2 = [ ]n_infectados = num_infectados
## In i c i a l i z amo s gra fo y modelog ra f o = s e l f . generaGrafo ( t ipo_grafo , n=tam_grafo )model = modelo ( grafo , ∗ args , ∗∗kwds )
i f s u s c e p t i b l e s != tam_grafo :s = random . sample ( range ( g ra f o . vcount ( ) ) , int ( s u s c e p t i b l e s %1))model . compartimentos . move_vertices ( s , "S" )
else :for v in g ra f o . vs :
model . compartimentos . move_vertice ( v . index , "S" )
# Infectamos e l numero de nodos ind icado de forma que sean# l o s de mayor grado p o s i b l ehubs = [ ]i n f e c t ado s = [ ]
j = 0while n_infectados > len ( hubs ) :
for v in g ra f o . vs . s e l e c t ( _degree=(g ra f o . maxdegree ( ) − j ) ) :hubs . append (v . index )
i f len ( hubs ) == 1 :i n f e c t ado s . append ( hubs [ 0 ] )
else :i f len ( hubs ) > n_infectados :
i n f e c t ado s = in f e c t ado s + random . sample ( hubs ,n_infectados )
else :i n f e c t ado s = in f e c t ado s + random . sample ( hubs , len ( hubs ) )
n_infectados = n_infectados − len ( hubs )j += 1
model . compartimentos . move_vertices ( i n f e c tado s , " I " )
# rea l i zamos l o s pasosfor t in xrange ( time ) :
model . s tep ( )p_infectados = model . compartimentos . tam_relat ivo ( " I " )current_run . append ( p_infectados )i f t < 20 :
aux2 . append ( p_infectados )
r e s u l t s . append ( current_run )aux . append ( aux2 )
return r e s u l t s , aux
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 59
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
def simulacionAntiHub ( s e l f , modelo , t ipo_grafo , tam_grafo=10000 ,n_infectados=1, s u s c e p t i b l e s =10000 , runs=10, time=100 ,∗ args , ∗∗kwds ) :
""" Simulacion """
r e s u l t s = [ ]# l o s s u s c e p t i b l e s es tan por d e f e c t o con 10000 para i g u a l a r# e l tamanyo de l g ra fo por d e f e c t o . Por tantoi f s u s c e p t i b l e s == 10000 :
s u s c e p t i b l e s = tam_grafo
for i in xrange ( runs ) :print "Ronda %d" % icurrent_run = [ ]
## In i c i a l i z amo s gra fo y modelog ra f o = s e l f . generaGrafo ( t ipo_grafo , n=tam_grafo )model = modelo ( grafo , ∗ args , ∗∗kwds )
i f s u s c e p t i b l e s != tam_grafo :s = random . sample ( range ( g ra f o . vcount ( ) ) , s u s c e p t i b l e s )model . compartimentos . move_vertices ( s , "S" )
else :for v in g ra f o . vs :
model . compartimentos . move_vertice ( v . index , "S" )
## Infectamos e l numero de nodos ind icadohubs = [ ]i n f e c t ado s = [ ]
j = 1while n_infectados > len ( hubs ) :
for v in g ra f o . vs . s e l e c t ( _degree=j ) :hubs . append (v . index )
i f len ( hubs ) == 1 :i n f e c t ado s . append ( hubs [ 0 ] )
else :i f len ( hubs ) > n_infectados :
i n f e c t ado s = in f e c t ado s + random . sample ( hubs ,n_infectados )
else :i n f e c t ado s = in f e c t ado s + random . sample ( hubs , len ( hubs ) )
n_infectados = n_infectados − len ( hubs )j += 1
model . compartimentos . move_vertices ( i n f e c tado s , " I " )
# rea l i zamos l o s pasosfor t in xrange ( time ) :
model . s tep ( )p_infectados = model . compartimentos . tam_relat ivo ( " I " )
60 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
current_run . append ( p_infectados )
r e s u l t s . append ( current_run )return r e s u l t s
def s imu l a c i o n I n t e l i g e n t e ( s e l f , modelo , t ipo_grafo , tam_grafo=10000 ,n_infectados=1, s u s c e p t i b l e s =10000 , runs=10,time=100 , ∗ args , ∗∗kwds ) :
r e s u l t s = [ ]aux = [ ]for i in xrange ( runs ) :
current_run = [ ]aux2 = [ ]
## In i c i a l i z amo s gra fo y modelog ra f o = s e l f . generaGrafo ( t ipo_grafo , n=tam_grafo )model = modelo ( grafo , ∗ args , ∗∗kwds )
i f s u s c e p t i b l e s != tam_grafo :s = random . sample ( range ( g ra f o . vcount ( ) ) , int ( s u s c e p t i b l e s ) )model . compartimentos . move_vertices ( s , "S" )
else :for v in g ra f o . vs :
model . compartimentos . move_vertice ( v . index , "S" )## Infectamos e l numero de nodos ind icadoi n f e c t ado s = random . sample ( range ( g ra f o . vcount ( ) ) , n_infectados )for i in i n f e c t ado s :
model . compartimentos . move_vertice ( i , " I " )
## rea l i zamos l o s pasosfor t in xrange ( time ) :
i f t <= 5 :model . s t e p I n t e l i g e n t e ( )
else :model . s tep ( )
p_infectados = model . compartimentos . tam_relat ivo ( " I " )current_run . append ( p_infectados )i f t < 20 :
aux2 . append ( p_infectados )
r e s u l t s . append ( current_run )aux . append ( aux2 )
return r e s u l t s , aux
def s imu l a c i o n I n t e l i g e n t e 2 ( s e l f , modelo , t ipo_grafo , tam_grafo=10000 ,n_infectados=1, s u s c e p t i b l e s =10000 , runs=10,time=100 , beta =0.3 , ∗ args , ∗∗kwds ) :
r e s u l t s = [ ]i f s u s c e p t i b l e s == 10000 :
s u s c e p t i b l e s = tam_grafofor i in xrange ( runs ) :
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 61
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
current_run = [ ]
## In i c i a l i z amo s gra fo y modelog ra f o = s e l f . generaGrafo ( t ipo_grafo , n=tam_grafo )model = modelo ( grafo , ∗ args , ∗∗kwds )
i f s u s c e p t i b l e s != tam_grafo :s = random . sample ( range ( g ra f o . vcount ( ) ) , s u s c e p t i b l e s )model . compartimentos . move_vertices ( s , "S" )
else :for v in g ra f o . vs :
model . compartimentos . move_vertice ( v . index , "S" )## Infectamos e l numero de nodos ind icadoi n f e c t ado s = random . sample ( range ( g ra f o . vcount ( ) ) , n_infectados )for i in i n f e c t ado s :
# Comprobamos que son s u s c e p t i b l e si f model . compartimentos . get_state ( i ) == "S" :
model . compartimentos . move_vertice ( i , " I " )
## rea l i zamos l o s pasosfor t in xrange ( time ) :
model . s t e p I n t e l i g e n t e 2 ( beta )p_infectados = model . compartimentos . tam_relat ivo ( " I " )current_run . append ( p_infectados )
r e s u l t s . append ( current_run )return r e s u l t s
def s imu lac i onCo lo r e s ( s e l f , modelo , t ipo_grafo , tam_grafo=10000 ,n_infectados=1, s u s c e p t i b l e s =10000 , runs=10,time=100 , beta =0.3 , ∗ args , ∗∗kwds ) :
r e s u l t s = [ ]i f s u s c e p t i b l e s == 10000 :
s u s c e p t i b l e s = tam_grafofor i in xrange ( runs ) :
current_run = [ ]
## In i c i a l i z amo s gra fo y modelog ra f o = s e l f . generaGrafo ( t ipo_grafo , n=tam_grafo )model = modelo ( grafo , ∗ args , ∗∗kwds )
## Infectamos e l numero de nodos ind icadoi f s u s c e p t i b l e s != tam_grafo :
s = random . sample ( range ( g ra f o . vcount ( ) ) , int ( s u s c e p t i b l e s ) )model . compartimentos . move_vertices ( s , "S" )
for id in model . compartimentos . compartimentos [ 'S ' ] :g r a f o . vs [ id ] [ ' c o l o r ' ] = ' green '
## Infectamos e l numero de nodos ind icadoi n f e c t ado s = random . sample ( range ( g ra f o . vcount ( ) ) , n_infectados )for i in i n f e c t ado s :
model . compartimentos . move_vertice ( i , " I " )
62 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
## Marcamos l o s pac i en t e s cero en negrofor id in model . compartimentos . compartimentos [ ' I ' ] :
g r a f o . vs [ id ] [ ' c o l o r ' ] = ' b lack '
p l o t ( grafo , " s imu l a c i on5_e s t ado i n i c i a l . png" )## rea l i zamos l o s pasosfor t in xrange ( 7 ) :
model . s tep ( )i f ( t % 2) == 0 :
for id in model . compartimentos . compartimentos [ 'X ' ] :i f g ra f o . vs [ id ] [ ' c o l o r ' ] != ' b lack ' :
g ra f o . vs [ id ] [ ' c o l o r ' ] = ' grey 'else :
g r a f o . vs [ id ] [ ' c o l o r ' ] = ' cyan 'for id in model . compartimentos . compartimentos [ 'S ' ] :
g r a f o . vs [ id ] [ ' c o l o r ' ] = ' ye l low 'for id in model . compartimentos . compartimentos [ ' I ' ] :
i f g ra f o . vs [ id ] [ ' c o l o r ' ] != ' b lack ' :g ra f o . vs [ id ] [ ' c o l o r ' ] = ' red '
for id in model . compartimentos . compartimentos [ 'R ' ] :g r a f o . vs [ id ] [ ' c o l o r ' ] = ' green '
f i c h e r o = "Figuras / simulacion5_" + " %d" % t + " . png"p l o t ( grafo , f i c h e r o )
model . beta = 0 .7model . gamma = 0.5
## rea l i zamos l o s pasosfor t in xrange ( 7 , 1 5 ) :
model . s tep ( )i f ( t % 2) == 0 :
for id in model . compartimentos . compartimentos [ 'X ' ] :i f g ra f o . vs [ id ] [ ' c o l o r ' ] != ' b lack ' :
g ra f o . vs [ id ] [ ' c o l o r ' ] = ' grey 'else :
g r a f o . vs [ id ] [ ' c o l o r ' ] = ' cyan 'for id in model . compartimentos . compartimentos [ 'S ' ] :
g r a f o . vs [ id ] [ ' c o l o r ' ] = ' ye l low 'for id in model . compartimentos . compartimentos [ ' I ' ] :
i f g ra f o . vs [ id ] [ ' c o l o r ' ] != ' b lack ' :g ra f o . vs [ id ] [ ' c o l o r ' ] = ' red '
for id in model . compartimentos . compartimentos [ 'R ' ] :g r a f o . vs [ id ] [ ' c o l o r ' ] = ' green '
f i c h e r o = "Figuras / simulacion5_" + " %d" % t + " . png"p l o t ( grafo , f i c h e r o )
return r e s u l t s
def s imu lac i onGrupo In i c i a l ( s e l f , modelo , t ipo_grafo , tam_grafo=10000 ,n_infectados=1, s u s c e p t i b l e s =10000 , runs=10,
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 63
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
time=100 , ∗ args , ∗∗kwds ) :""" Funcion s imulac ion adaptada , para que e l grupo i n i c i a l dei n f e c t a d o s sean vec inos . """
r e s u l t s = [ ]aux = [ ]# l o s s u s c e p t i b l e s es tan por d e f e c t o con 10000 para i g u a l a r# e l tamanyo de l g ra fo por d e f e c t o . Por tantoi f s u s c e p t i b l e s == 10000 :
s u s c e p t i b l e s = tam_grafofor i in xrange ( runs −1):
current_run = [ ]aux2 = [ ]
# In i c i a l i z amo s gra fo y modelog ra f o = s e l f . generaGrafo ( t ipo_grafo , n=tam_grafo )model = modelo ( grafo , ∗ args , ∗∗kwds )
i f s u s c e p t i b l e s != tam_grafo :s = random . sample ( range ( g ra f o . vcount ( ) ) , int ( s u s c e p t i b l e s ) )model . compartimentos . move_vertices ( s , "S" )
# Infectamos e l numero de nodos ind icadoi n f e c t ado s = [ ]pac iente_cero = random . sample ( range ( g ra f o . vcount ( ) ) , 1 ) [ 0 ]i n f e c t ado s . append ( pac iente_cero )n_infectados2 = n_infectados −1while n_infectados2 > 0 :
n e i s = gra f o . ne ighbors ( pac iente_cero )for ne i in ne i s :
i f n_infectados2 > 0 :i n f e c t ado s . append ( ne i )n_infectados2 −= 1
model . compartimentos . move_vertices ( i n f e c tado s , " I " )
## rea l i zamos l o s pasosfor t in xrange ( time ) :
model . s tep ( )p_infectados = model . compartimentos . tam_relat ivo ( " I " )current_run . append ( p_infectados )i f t < 20 :
aux2 . append ( p_infectados )
r e s u l t s . append ( current_run )aux . append ( aux2 )
return r e s u l t s , aux
def p l o t_r e su l t s ( s e l f , r e s u l t s , c o l o r ) :for r in r e s u l t s :
64 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
print r## Ca l cu l a t e the means f o r each time po in taveraged = [mean( items ) for i tems in i z i p (∗ r ) ]
## Create the argument l i s t f o r py lab . p l o targs = [ ]for row in r :
a rgs += [ row , 'k− ' ]a rgs += [ averaged , c o l o r ]
## Creathe the p l o tpylab . p l o t (∗ args )
def ha l l a rUmbra lCr i t i co ( s e l f , modelo , t ipo , betas , ∗ args , ∗∗kwds ) :for beta in betas :
r e s u l t s = s e l f . s imulac ion (modelo , t ipo , 100 , beta=beta , ∗ args ,∗∗kwds )
s e l f . p l o t_r e su l t s ( r e s u l t s , ' r−o ' )pylab . show ( )media = mean( run [−1] for run in r e s u l t s )print ( "Beta : %.2 f Media : %.4 f " % ( beta , media ) )
B.2.2. FuncionesAuxiliares.py
import random
def muestraAleator ia ( nodos , p ) :"""Funcion que permite s e l e c c i ona r unos nodos de formaa l e a t o r i o para s imular l a t r an s i c i on de e s tados en l o sd i s t i n t o s modelos , para e l l o usa l a l i b r e r i a random"""return [ nodo for nodo in nodos i f random . random ( ) < p ]
B.3. Ficheros del modelo compartimental
B.3.1. Compartimentos.py
""" I n t e r f a z para l o s compartimentos d e l modelo """class Compartimentos ( object ) :
def __init__( s e l f , gra fo , comps ) :""" Mediante un gra fo y l o s cod i gos de l o s compartimentos , comps ,crea l o s compartimentos d e l modelo . """s e l f . comps = l i s t ( comps )s e l f . n = gra fo . vcount ( )
f irst_comp = s e l f . comps [ 0 ]s e l f . s t a t e s = [ f irst_comp ] ∗ s e l f . n
s e l f . compartimentos = dict ( )for code in comps :
s e l f . compartimentos [ code ] = set ( )s e l f . compartimentos [ f irst_comp ] . update (xrange ( s e l f . n ) )
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 65
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
def __getitem__( s e l f , comp ) :"""Devuelve e l compartimento asoc iadoa l cod igo comp . """
return s e l f . compartimentos [ comp ]
def get_state ( s e l f , v e r t i c e ) :"""Devuelve e l cod igo d e l compartimentoen e l que se encuentra e l v e r t i c e . """return s e l f . s t a t e s [ v e r t i c e ]
def move_vertice ( s e l f , v e r t i c e , comp ) :"""Cambia e l v e r t i c e de compartimento """s e l f . compartimentos [ s e l f . s t a t e s [ v e r t i c e ] ] . remove ( v e r t i c e )s e l f . s t a t e s [ v e r t i c e ] = comps e l f . compartimentos [ comp ] . add ( v e r t i c e )
def move_vertices ( s e l f , v e r t i c e s , code ) :""" Llama a move_vertice para cada v e r t i c e """for ver tex in v e r t i c e s :
s e l f . move_vertice ( vertex , code )
def tam_relat ivo ( s e l f , code ) :""" Devuelve e l tamanyo r e l a t i v o d e l compartimentocode . """return len ( s e l f . compartimentos [ code ] ) / f loat ( s e l f . n )
B.3.2. ModeloCompartimental.py
from Compartimentos import Compartimentos
class ModeloCompartimental ( object ) :""" I n t e r f a z para l a c l a s e de l o s modelosep i d emio l o g i co s compart imenta les . """
def __init__( s e l f , gra fo , codes ) :""" I n i c i a l i z a un . modelo compart imental sobre ungra fo que r e c i b e como argumento y e l cod igoasoc iado a l o s compartimentos """s e l f . g ra f o = gra fos e l f . compartimentos = Compartimentos ( grafo , codes )s e l f . r e s e t ( )
def tam_relativo_compartimentos ( s e l f ) :"""Returns the r e l a t i v e s i z e s o f each comparment in themodel . """return [ s e l f . compartimentos . tam_relat ivo (cmp)
for cmp in s e l f . compartimentos . cmps ]
def r e s e t ( s e l f ) :
66 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
"""Resets the compartments to an i n i t i a l s t a t e . Thismethod must be over r iden in s u b c l a s s e s . """raise NotImplementedError
def s tep ( s e l f ) :""" Implements the l o g i c o f the epidemic model . This methodmust be overr iden by s u b c l a s s e s . """raise NotImplementedError
def step_many ( s e l f , n ) :"""Runs 'n ' s t e p s o f the epidemic model a t once byc a l l i n g ' s t ep ' mu l t i p l e t imes . """for i in xrange (n ) :
s e l f . s t ep ( )
B.3.3. ModeloSIS.py
#!/ usr / b in /python# −∗− coding : l a t i n −1 −∗−
from ModeloCompartimental import ModeloCompartimentalfrom Func ione sAux i l i a r e s import muestraAleator iafrom i g raph import meanimport random as random
class ModeloSIS (ModeloCompartimental ) :"""SIS , modelo ep i demio l og i co para redes """
def __init__( s e l f , g , beta =0.1 , gamma=0.2) :""" In i c i a l i z amo s l o s compartimentos y damos va l o r e s a l o s parametros """ModeloCompartimental . __init__( s e l f , g , "SI " )s e l f . beta = f loat ( beta )s e l f . gamma = f loat (gamma)
def r e s e t ( s e l f ) :""" In i c i a l i z amo s toda l a pob l ac ion a s u s c e p t i b l e s """vs = xrange ( s e l f . g ra f o . vcount ( ) )s e l f . compartimentos . move_vertices ( vs , "S" )
def s tep ( s e l f ) :""" Un paso de l modelo SIS"""## Se ex t i ende l a i n f e c c i ons_to_i = set ( ) # In i c i a l i z amo s un conjunto para l o s t r a spa so s
## Calculamos para cada v e r t i c e i n f e c t a do## Cuales de sus vec inos seran i n f e c t a d o sfor v in s e l f . compartimentos [ " I " ] :
n e i s = s e l f . g ra f o . ne ighbors ( v )s_to_i . update ( muestraAleator ia ( ne i s , s e l f . beta ) )## Aplicamos l o s cambios
s e l f . compartimentos . move_vertices ( s_to_i , " I " )
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 67
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
## Algunos de l o s i n f e c t a d o s se curarani_to_s = muestraAleator ia ( s e l f . compartimentos [ " I " ] , s e l f . gamma)s e l f . compartimentos . move_vertices ( i_to_s , "S" )
def s t e p I n t e l i g e n t e ( s e l f ) :""" Un paso de l modelo SIS en e l que s o l o ataca nodoscon un grado supe r i o r a l a media . """## Se ex t i ende l a i n f e c c i ons_to_i = set ( ) # In i c i a l i z amo s un conjunto para l o s t r a spa so s
## Grado medio d e l g ra fog_medio = mean( s e l f . g ra f o . degree ( ) ) // 1
## Calculamos para cada v e r t i c e i n f e c t a do## Cuales de sus vec inos seran i n f e c t a d o sfor v in s e l f . compartimentos [ " I " ] :
n e i s = s e l f . g ra f o . ne ighbors ( v )s_to_i . update ( [ nodo for nodo in ne i s i f
s e l f . g ra f o . vs [ nodo ] . degree ( ) > g_medio ] )## Aplicamos l o s cambios
s e l f . compartimentos . move_vertices ( s_to_i , " I " )
## Algunos de l o s i n f e c t a d o s se curarani_to_s = muestraAleator ia ( s e l f . compartimentos [ " I " ] , s e l f . gamma)s e l f . compartimentos . move_vertices ( i_to_s , "S" )
def s t e p I n t e l i g e n t e 2 ( s e l f , beta ) :""" Un paso de l modelo SIS en e l que s o l o ataca nodoscon un grado supe r i o r a l a media . """## Se ex t i ende l a i n f e c c i ons_to_i = set ( ) # In i c i a l i z amo s un conjunto para l o s t r a spa so s
## Grado medio d e l g ra fog_medio = mean( s e l f . g ra f o . degree ( ) ) // 1
## Calculamos para cada v e r t i c e i n f e c t a do## Cuales de sus vec inos seran i n f e c t a d o sfor v in s e l f . compartimentos [ " I " ] :
n e i s = s e l f . g ra f o . ne ighbors ( v )s_to_i . update ( [ nodo for nodo in ne i s i f
( ( s e l f . g ra f o . vs [ nodo ] . degree ( ) < g_medio ) and( random . random ( ) < beta ) ) ] )
## Aplicamos l o s cambioss e l f . compartimentos . move_vertices ( s_to_i , " I " )
## Algunos de l o s i n f e c t a d o s se curarani_to_s = muestraAleator ia ( s e l f . compartimentos [ " I " ] , s e l f . gamma)s e l f . compartimentos . move_vertices ( i_to_s , "S" )
B.3.4. ModeloSIR.py
68 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
#!/ usr / b in /python# −∗− coding : l a t i n −1 −∗−from ModeloCompartimental import ModeloCompartimentalfrom Func ione sAux i l i a r e s import muestraAleator iafrom i g raph import meanimport random as random
class ModeloSIR (ModeloCompartimental ) :""" Modelo ep i demio l og i co SIR para redes """
def __init__( s e l f , graph , beta =0.1 , gamma=0.2) :""" Construye e l modelo compartimental sobre e lg ra fo que r e c i b e como argumento , y l e as igna l o sv a l o r e s de t r an s i c i on . """ModeloCompartimental . __init__( s e l f , graph , "SIR" )s e l f . beta = f loat ( beta )s e l f . gamma = f loat (gamma)
def r e s e t ( s e l f ) :""" In i c i a l i z amo s toda l a pob l ac ion a s u s c e p t i b l e s """vs = xrange ( s e l f . g ra f o . vcount ( ) )s e l f . compartimentos . move_vertices ( vs , "S" )
def s tep ( s e l f ) :"""" Un paso de l modelo SIR"""## Extendemos l a i n f e c c i on desde l o s nodos i n f e c t a d o sfor v in s e l f . compartimentos [ " I " ] . copy ( ) :
n e i s = s e l f . g ra f o . ne ighbors ( v )## Algunos nodos se i n f e c t anfor ne i in muestraAleator ia ( ne i s , s e l f . beta ) :
i f s e l f . compartimentos . get_state ( ne i ) == "S" :s e l f . compartimentos . move_vertice ( nei , " I " )
## Algunos se recuperani_to_r = muestraAleator ia ( s e l f . compartimentos [ " I " ] , s e l f . gamma)s e l f . compartimentos . move_vertices ( i_to_r , "R" )
def s t e p I n t e l i g e n t e ( s e l f ) :""" Un paso de l modelo SIS en e l que s o l o ataca nodoscon un grado supe r i o r a l a media . """## Se ex t i ende l a i n f e c c i ons_to_i = set ( ) # In i c i a l i z amo s un conjunto para l o s t r a spa so s
## Grado medio d e l g ra fog_alto = mean( s e l f . g ra f o . degree ( ) ) ∗ 1 .8 // 1
## Calculamos para cada v e r t i c e i n f e c t a do## Cuales de sus vec inos seran i n f e c t a d o sfor v in s e l f . compartimentos [ " I " ] :
n e i s = s e l f . g ra f o . ne ighbors ( v )
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 69
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
s_to_i . update ( [ nodo for nodo in ne i s i fs e l f . g ra f o . vs [ nodo ] . degree ( ) > g_alto ] )
## Aplicamos l o s cambioss e l f . compartimentos . move_vertices ( s_to_i , " I " )
## Algunos se recuperani_to_r = muestraAleator ia ( s e l f . compartimentos [ " I " ] , s e l f . gamma)s e l f . compartimentos . move_vertices ( i_to_r , "R" )
def s t e p I n t e l i g e n t e 2 ( s e l f , beta ) :""" Un paso de l modelo SIR en e l que s o l o ataca nodoscon un grado supe r i o r a l a media . """## Se ex t i ende l a i n f e c c i ons_to_i = set ( ) # In i c i a l i z amo s un conjunto para l o s t r a spa so s
## Grado medio d e l g ra fog_alto = mean( s e l f . g ra f o . degree ( ) ) ∗ 1 .8 // 1
## Calculamos para cada v e r t i c e i n f e c t a do## Cuales de sus vec inos seran i n f e c t a d o sfor v in s e l f . compartimentos [ " I " ] :
n e i s = s e l f . g ra f o . ne ighbors ( v )s_to_i . update ( [ nodo for nodo in ne i s i f
( ( s e l f . g ra f o . vs [ nodo ] . degree ( ) < g_alto ) and( random . random ( ) < beta ) ) ] )
## Aplicamos l o s cambioss e l f . compartimentos . move_vertices ( s_to_i , " I " )
## Algunos se recuperani_to_r = muestraAleator ia ( s e l f . compartimentos [ " I " ] , s e l f . gamma)s e l f . compartimentos . move_vertices ( i_to_r , "R" )
B.3.5. ModeloSIRS.py
from ModeloSIR import ModeloSIRfrom Func ione sAux i l i a r e s import muestraAleator ia
class ModeloSIRS (ModeloSIR ) :"""Modelo ep idemio l o g i co SIRS para redes . Esta c l a s ee x t i ende l a d e l modelo SIR"""def __init__( s e l f , graph , beta =0.1 , gamma=0.2 , lambda_=0.4) :
ModeloSIR . __init__( s e l f , graph , beta , gamma)## El nuevo va l o r de t r an s i c i on ent re## recuperados y s u s c e p t i b l e ss e l f . lambda_ = f loat ( lambda_)
def s tep ( s e l f ) :"""Respecto a l SIR so l o i n c l u y e un paso mas donde l o srecuperados pueden pasar a ser s u s c e p t i b l e s . """r_to_s = muestraAleator ia ( s e l f . compartimentos [ "R" ] , s e l f . lambda_)s e l f . compartimentos . move_vertices ( r_to_s , "S" )
70 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
## Ahora llamamos a l SIRModeloSIR . s tep ( s e l f )
B.3.6. ModeloXSIR.py
#!/ usr / b in /python# −∗− coding : l a t i n −1 −∗−from ModeloCompartimental import ModeloCompartimentalfrom Func ione sAux i l i a r e s import muestraAleator iafrom i g raph import meanimport random as random
class ModeloXSIR(ModeloCompartimental ) :""" Modelo ep i demio l og i co SIR para redes , con un nuevo es tadode inmunes que l lamaremos X. """
def __init__( s e l f , graph , beta =0.1 , gamma=0.2) :""" Construye e l modelo compartimental sobre e lg ra fo que r e c i b e como argumento , y l e as igna l o sv a l o r e s de t r an s i c i on . """ModeloCompartimental . __init__( s e l f , graph , "XSIR" )s e l f . beta = f loat ( beta )s e l f . gamma = f loat (gamma)
def r e s e t ( s e l f ) :""" In i c i a l i z amo s toda l a pob l ac ion a s u s c e p t i b l e s """vs = xrange ( s e l f . g ra f o . vcount ( ) )s e l f . compartimentos . move_vertices ( vs , "X" )
def s tep ( s e l f ) :"""" Un paso de l modelo XSIR que es l o mismo que de SIR"""## Extendemos l a i n f e c c i on desde l o s nodos i n f e c t a d o sfor v in s e l f . compartimentos [ " I " ] . copy ( ) :
n e i s = s e l f . g ra f o . ne ighbors ( v )## Algunos nodos se i n f e c t anfor ne i in muestraAleator ia ( ne i s , s e l f . beta ) :
i f s e l f . compartimentos . get_state ( ne i ) == "S" :s e l f . compartimentos . move_vertice ( nei , " I " )
## Algunos se recuperani_to_r = muestraAleator ia ( s e l f . compartimentos [ " I " ] , s e l f . gamma)s e l f . compartimentos . move_vertices ( i_to_r , "R" )
def s t e p I n t e l i g e n t e ( s e l f ) :""" Un paso de l modelo SIS en e l que s o l o ataca nodoscon un grado supe r i o r a l a media . """## Se ex t i ende l a i n f e c c i ons_to_i = set ( ) # In i c i a l i z amo s un conjunto para l o s t r a spa so s
# Pe r c en t i l 90 de l a d i s t d e l grado# de l o s nodos
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 71
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
g_alto = mean( s e l f . g ra f o . degree ( ) ) // 1## Calculamos para cada v e r t i c e i n f e c t a do## Cuales de sus vec inos seran i n f e c t a d o sfor v in s e l f . compartimentos [ " I " ] :
n e i s = s e l f . g ra f o . ne ighbors ( v )for nodo in ne i s :
aux = [ ]i f ( s e l f . g ra f o . vs [
nodo ] . degree ( ) > g_alto and s e l f . compartimentos . get_state (nodo ) == 'S ' ) :
aux . append ( nodo )s_to_i . update ( aux )# Ahora ca lcu lamos l o s i n f e c t a d o s por e l proceso# normalaux = [ ]for ne i in muestraAleator ia ( ne i s , s e l f . beta ) :
i f s e l f . compartimentos . get_state ( ne i ) == "S" :aux . append ( ne i )
s_to_i . update ( aux )
# s_to_i . update ( [ nodo f o r nodo in ne i s i f# s e l f . g ra fo . vs [ nodo ] . degree ( ) > g_alto# and s e l f . compartimentos . g e t_s ta t e ( nodo ) == 'S ' ] )## Aplicamos l o s cambios
s e l f . compartimentos . move_vertices ( s_to_i , " I " )
## Algunos se recuperani_to_r = muestraAleator ia ( s e l f . compartimentos [ " I " ] , s e l f . gamma)s e l f . compartimentos . move_vertices ( i_to_r , "R" )
def s t e p I n t e l i g e n t e 2 ( s e l f , beta ) :""" Un paso de l modelo SIS en e l que s o l o ataca nodoscon un grado supe r i o r a l a media . """## Se ex t i ende l a i n f e c c i ons_to_i = set ( ) # In i c i a l i z amo s un conjunto para l o s t r a spa so s
## Grado medio d e l g ra fog_medio = mean( s e l f . g ra f o . degree ( ) ) // 1
## Calculamos para cada v e r t i c e i n f e c t a do## Cuales de sus vec inos seran i n f e c t a d o sfor v in s e l f . compartimentos [ " I " ] :
n e i s = s e l f . g ra f o . ne ighbors ( v )s_to_i . update ( [ nodo for nodo in ne i s i f
( ( s e l f . g ra f o . vs [ nodo ] . degree ( ) < g_medio ) and( random . random ( ) < beta ) ) ] )
## Aplicamos l o s cambioss e l f . compartimentos . move_vertices ( s_to_i , " I " )
## Algunos se recuperan
72 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
i_to_r = muestraAleator ia ( s e l f . compartimentos [ " I " ] , s e l f . gamma)s e l f . compartimentos . move_vertices ( i_to_r , "R" )
B.4. Código de los ejemplos
B.4.1. generaGrafoSW.py
Código correspondiente a la �gura 2.8.
# #!/usr / b in /python# # −∗− coding : l a t i n −1 −∗−import c a i r ofrom i g raph . drawing . t ex t import TextDrawerfrom i g raph import ∗from FuncionesNucleo import generaGrafo
g1 = generaGrafo ( "Small_Worlds" , n=200)
# Asignamos co l o r e sfor v in VertexSeq ( g1 ) :
i f v . degree ( ) > 9 :v [ ' c o l o r ' ] = ' cyan 'v [ ' s i z e ' ] = 50
e l i f v . degree ( ) > 8 :v [ ' c o l o r ' ] = ' ye l low 'v [ ' s i z e ' ] = 40
e l i f v . degree ( ) > 7 :v [ ' c o l o r ' ] = ' green 'v [ ' s i z e ' ] = 30
e l i f v . degree ( ) > 6 :v [ ' c o l o r ' ] = ' pink 'v [ ' s i z e ' ] = 20
# Construimos e l p l o tp lo t = Plot ( " smal lwor ld . png" , bbox=(600 , 400) , background="white " )p l o t . add ( g1 , bbox=(20 , 80 , 500 , 300))# Añadimos e l g ra fo a l p l o tp lo t . redraw ( )# Preparamos e l canvas donde e s c r i b i r emos e l g ra foctx = ca i r o . Context ( p l o t . s u r f a c e )ctx . se t_font_s ize (14)## Dibujamos l a leyendadrawer = TextDrawer ( ctx , "Cyan : Degree ( v)>9" , ha l i gn=TextDrawer .RIGHT)drawer . draw_at (0 , 20 , width=580)drawer = TextDrawer ( ctx , "Amari l lo : Degree ( v)>8" , ha l i gn=TextDrawer .RIGHT)drawer . draw_at (0 , 40 , width=580)drawer = TextDrawer ( ctx , "Verde : Degree ( v)>7" , ha l i gn=TextDrawer .RIGHT)drawer . draw_at (0 , 60 , width=580)drawer = TextDrawer ( ctx , "Rosa : Degree ( v)>6" , ha l i gn=TextDrawer .RIGHT)drawer . draw_at (0 , 80 , width=580)drawer = TextDrawer ( ctx , "Rojo : Degree ( v)<=5" , ha l i gn=TextDrawer .RIGHT)drawer . draw_at (0 , 100 , width=580)
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 73
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
# Save the p l o tp lo t . save ( )p l o t . show ( )
B.4.2. generaGrafoSF.py
Código correspondiente a la �gura 2.11.
# #!/usr / b in /python# # −∗− coding : l a t i n −1 −∗−import c a i r ofrom i g raph . drawing . t ex t import TextDrawerfrom i g raph import ∗from FuncionesNucleo import generaGrafo
g1 = generaGrafo ( "Scale_Free " , n = 200)
# Asignamos co l o r e sfor v in VertexSeq ( g1 ) :
i f v . degree ( ) > 9 :v [ ' c o l o r ' ] = ' cyan 'v [ ' s i z e ' ] = 50
e l i f v . degree ( ) > 8 :v [ ' c o l o r ' ] = ' ye l low 'v [ ' s i z e ' ] = 40
e l i f v . degree ( ) > 7 :v [ ' c o l o r ' ] = ' green 'v [ ' s i z e ' ] = 30
e l i f v . degree ( ) > 6 :v [ ' c o l o r ' ] = ' pink 'v [ ' s i z e ' ] = 20
# Construimos e l p l o tp lo t = Plot ( " s c a l e f r e e . png" , bbox=(600 , 400) , background="white " )p l o t . add ( g1 , bbox=(20 , 80 , 500 , 300))# Añadimos e l g ra fo a l p l o tp lo t . redraw ( )# Preparamos e l canvas donde e s c r i b i r emos e l g ra foctx = ca i r o . Context ( p l o t . s u r f a c e )ctx . se t_font_s ize (14)## Dibujamos l a leyendadrawer = TextDrawer ( ctx , "Cyan : Degree ( v)>9" , ha l i gn=TextDrawer .RIGHT)drawer . draw_at (0 , 20 , width=580)drawer = TextDrawer ( ctx , "Amari l lo : Degree ( v)>8" , ha l i gn=TextDrawer .RIGHT)drawer . draw_at (0 , 40 , width=580)drawer = TextDrawer ( ctx , "Verde : Degree ( v)>7" , ha l i gn=TextDrawer .RIGHT)drawer . draw_at (0 , 60 , width=580)drawer = TextDrawer ( ctx , "Rosa : Degree ( v)>6" , ha l i gn=TextDrawer .RIGHT)drawer . draw_at (0 , 80 , width=580)
74 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
drawer = TextDrawer ( ctx , "Rojo : Degree ( v)<=5" , ha l i gn=TextDrawer .RIGHT)drawer . draw_at (0 , 100 , width=580)
# Save the p l o tp lo t . save ( )p l o t . show ( )
B.4.3. pforSW.py
Código correspondiente a la �gura 2.9.
# #!/usr / b in /python# # −∗− coding : l a t i n −1 −∗−from i g raph import ∗import randomimport numpy as np
class pforSW( object ) :
def main ( s e l f ) :f i c h e r o s = [ "imagen1SW_p . png" , "imagen2SW_p . png" ,
"imagen3SW_p . png" ]probs = [ 0 , 0 . 1 , 1 ]i = 0for f in f i c h e r o s :
s e l f . generaGrafo ( f , probs [ i ] )i += 1
def rondaWatts ( s e l f , g1 , p ) :for v in VertexSeq ( g1 ) :
## Tenemos una p r o b a b i l i d a d de 0.5 de r e ca b l e a ri f random . random ( ) < p :
## Esta par te se encarga de escoger un e j e## a l e a t o r i o d e l v e r t i c e## random . cho ice ( g1 . es . s e l e c t ( v . index ) )
g1 . de lete_edges ( random . cho i c e ( g1 . es . s e l e c t ( v . index ) ) . index )## Escogemos e l v e r t i c e a l que en l a za ra l e a t o r i o = int (round( random . uniform (0 , 19) , 0 ) )while a l e a t o r i o == v . index :
a l e a t o r i o = int (round( random . uniform (0 , 20) , 0 ) )g1 . add_edge (v . index , a l e a t o r i o )
def generaGrafo ( s e l f , f i c h e r o , p ) :## Creamos gra fo de a n i l l o base .g1 = Graph . Ring (50)
## Tenemos 20 nodos , ahora pongamosle nombres para t r a b a j a r
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 75
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
## con e l l o si = 1for v in VertexSeq ( g1 ) :
v [ 'name ' ] = " %d" % ii += 1
## Ahora añadimos una a r i s t a que en lace cada v e r t i c e## con e l vec ino de su vec ino en e l s en t i do horar ioi = 1while i < 49 :
g1 . add_edge ( " %d" % i , " %d" % ( i + 2) )i += 1
## añadimos l o s dos u l t imos e j e sg1 . add_edge ( ' 49 ' , ' 1 ' )g1 . add_edge ( ' 50 ' , ' 2 ' )
## Aplicamos e l proceso de rewire con p r o b a b i l i d a d p## 3 veces .i = 0while i < 3 :
s e l f . rondaWatts ( g1 , p)i += 1
## Guardamos e l g ra fop lo t ( g1 , f i c h e r o )
e j e = pforSW ()e j e . main ( )
B.4.4. algoritmoWatts.py
Código correspondiente a la Figura 2.10.
# #!/usr / b in /python# # −∗− coding : l a t i n −1 −∗−from i g raph import ∗import randomimport numpy as np
class algoritmoWatts ( object ) :
def main ( s e l f ) :
## Creamos gra fo de a n i l l o base .g1 = Graph . Ring (50)
## Tenemos 20 nodos , ahora pongamosle nombres para t r a b a j a r## con e l l o si = 1for v in VertexSeq ( g1 ) :
76 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
v [ 'name ' ] = " %d" % ii += 1
## Ahora añadimos una a r i s t a que en lace cada v e r t i c e## con e l vec ino de su vec ino en e l s en t i do horar ioi = 1while i < 49 :
g1 . add_edge ( " %d" % i , " %d" % ( i + 2) )i += 1
## añadimos l o s dos u l t imos e j e sg1 . add_edge ( ' 49 ' , ' 1 ' )g1 . add_edge ( ' 50 ' , ' 2 ' )
layout = g1 . l a you t_c i r c l ep l o t ( g1 , " imagen1sw . png" , ver tex_labe l=g1 . degree ( ) )# p l o t . show ()
## Aplicamos e l proceso de rewire con p r o b a b i l i d a d pfor v in VertexSeq ( g1 ) :
## Tenemos una p r o b a b i l i d a d de 0.5 de r e ca b l e a ri f random . random ( ) < 0 . 5 :
## Esta par te se encarga de escoger un e j e## a l e a t o r i o d e l v e r t i c e## random . cho ice ( g1 . es . s e l e c t ( v . index ) )
g1 . de lete_edges ( random . cho i c e ( g1 . es . s e l e c t ( v . index ) ) . index )## Escogemos e l v e r t i c e a l que en l a za ra l e a t o r i o = int (round( random . uniform (0 , 19) , 0 ) )while a l e a t o r i o == v . index :
a l e a t o r i o = int (round( random . uniform (0 , 20) , 0 ) )g1 . add_edge (v . index , a l e a t o r i o )
s e l f . ajustarTamanyo ( g1 )p l o t ( g1 , " imagen2sw . png" , ver tex_labe l=g1 . degree ( ) )
## Aplicamos o t ra rondafor v in VertexSeq ( g1 ) :
## Tenemos una p r o b a b i l i d a d de 0.5 de r e ca b l e a ri f random . random ( ) < 0 . 5 :
## Esta par te se encarga de escoger un e j e## a l e a t o r i o d e l v e r t i c e## random . cho ice ( g1 . es . s e l e c t ( v . index ) )
g1 . de lete_edges ( random . cho i c e ( g1 . es . s e l e c t ( v . index ) ) . index )## Escogemos e l v e r t i c e a l que en l a za ra l e a t o r i o = int (round( random . uniform (0 , 19) , 0 ) )while a l e a t o r i o == v . index :
a l e a t o r i o = int (round( random . uniform (0 , 20) , 0 ) )g1 . add_edge (v . index , a l e a t o r i o )
s e l f . ajustarTamanyo ( g1 )
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 77
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
p lo t ( g1 , " imagen3sw . png" , ver tex_labe l=g1 . degree ( ) )
p l o t ( g1 , ve r tex_labe l=g1 . degree ( ) )
def ajustarTamanyo ( s e l f , g r a f o ) :grados = sorted ( g ra f o . degree ( ) )mayor = round(np . p e r c e n t i l e ( grados , 75) )media = round(np . p e r c e n t i l e ( grados , 50) )menor = round(np . p e r c e n t i l e ( grados , 25) )
for v in VertexSeq ( g ra f o ) :i f v . degree ( ) > mayor :
v [ ' c o l o r ' ] = ' cyan 'v [ ' s i z e ' ] = 60
e l i f v . degree ( ) > media :v [ ' c o l o r ' ] = ' ye l low 'v [ ' s i z e ' ] = 40
e l i f v . degree ( ) > menor :v [ ' c o l o r ' ] = ' green 'v [ ' s i z e ' ] = 25
else :v [ ' c o l o r ' ] = ' red 'v [ ' s i z e ' ] = 15
## Ejecutamos e l a l gor i tmoe j e c = algoritmoWatts ( )e j e c . main ( )
B.4.5. algoritmoBarabasi.py
Código correspondiente a la �gura 2.12.
# #!/usr / b in /python# # −∗− coding : l a t i n −1 −∗−from i g raph import ∗import numpy as np
class a lgor i tmoBarabas i ( object ) :
def main ( s e l f ) :## Vamos a e j emp l i f i c a r como nace una## red s c a l e f r e e . Para e l l o supondremos## que l o s nodos con grado supe r i o r a l grado## medio t i enen una p r o b a b i l i d a d dg1 = Graph ( )i = 0j = 0nombres_fichero = [ " imagen1sf . png" , " imagen2sf . png" , " imagen3sf . png" ,
" imagen4sf . png" , " imagen5sf . png" , " imagen6sf . png" ]
78 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
g1 . add_vertex ( )g1 . add_vertex ( )g1 . add_edge ( g1 . vs [ 0 ] , g1 . vs [ 1 ] )print g1 . vs [ 0 ] . degree ( )print g1 . vs [ 1 ] . degree ( )
while i < 30 :g1 . add_vertex ( )s e l f . pre fera lAttachment ( g1 , g1 . vs [ i + 2 ] )s e l f . pre fera lAttachment ( g1 , g1 . vs [ i + 2 ] )i f ( i % 5) == 0 :
i f i != 0 :s e l f . ajustarTamanyo ( g1 )
p l o t ( g1 , nombres_fichero [ j ] , ve r t ex_labe l=g1 . degree ( ) )j += 1
i += 1
p lo t ( g1 , ve r tex_labe l=g1 . degree ( ) )
def pre fera lAttachment ( s e l f , gra fo , nodo ) :f i n = 0
## Empezamos ca l cu lando l o s cuatro p e r c e n t i l e sgrados = gra f o . degree ( )sum_grados = np .sum( grados )
## Preparamos l a d i s t r i b u c i o n de p r o b a b i l i d a ddist_prob = [ ]for v in g ra f o . vs :
dist_prob . append (v . degree ( )/ f loat ( sum_grados ) )
## Escogemos un nodo a l e a t o r i o d i s t i n t o d e l nuevoa l e a t = np . random . cho i c e ( g ra f o . vs , p=dist_prob )while f i n != 1 :
## Evitamos l o s bu c l e si f nodo == a l e a t :
a l e a t = np . random . cho i c e ( g ra f o . vs )break
## Comprobamos que no hay e j e s r e p e t i d o se j e s 1 = gra f o . e s . s e l e c t ( _source=a l e a t . index )e j e s 2 = gra f o . e s . s e l e c t ( _source=a l e a t . index )f l a g = 0for e in e j e s 1 :
f l a g = e in g ra f o . e s . s e l e c t ( _source=nodo . index )i f f l a g :
breaki f f l a g :
continueelse :
APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN 79
Estudio y Análisis de propagación de programas maliciosos en redes de computadores
f i n = 1
## Añadimos e l e j eg ra f o . add_edge ( nodo , a l e a t )
def ajustarTamanyo ( s e l f , g r a f o ) :grados = sorted ( g ra f o . degree ( ) )mayor = round(np . p e r c e n t i l e ( grados , 75) )media = round(np . p e r c e n t i l e ( grados , 50) )menor = round(np . p e r c e n t i l e ( grados , 25) )
for v in VertexSeq ( g ra f o ) :i f v . degree ( ) > mayor :
v [ ' s i z e ' ] = 60e l i f v . degree ( ) > media :
v [ ' s i z e ' ] = 40e l i f v . degree ( ) > menor :
v [ ' s i z e ' ] = 25else :
v [ ' s i z e ' ] = 15
## Ejecutamos e l a l gor i tmoe j e c = algor i tmoBarabas i ( )e j e c . main ( )
80 APÉNDICE B. CÓDIGOS DEL ENTORNO DE SIMULACIÓN