• No se han encontrado resultados

Detección de malware de linux con métodos de aprendizaje automático aplicados a datos de análisis estático

N/A
N/A
Protected

Academic year: 2020

Share "Detección de malware de linux con métodos de aprendizaje automático aplicados a datos de análisis estático"

Copied!
135
0
0

Texto completo

(1)Universidad Politécnica de Madrid Escuela Técnica Superior de Ingenieros de Sistemas Informáticos Grado en Ingeniería de Computadores. DETECCIÓN DE MALWARE DE LINUX CON MÉTODOS DE APRENDIZAJE AUTOMÁTICO APLICADOS A DATOS DE ANÁLISIS ESTÁTICO. Autor: Jose Antonio Quevedo Muñoz Director: Luis Miguel Pozo Coronado. Madrid, 10 de julio de 2018.

(2)

(3) DETECCIÓN DE MALWARE DE LINUX CON MÉTODOS DE APRENDIZAJE AUTOMÁTICO APLICADOS A DATOS DE ANÁLISIS ESTÁTICO. Autor: Jose Antonio Quevedo Muñoz Director: Luis Miguel Pozo Coronado. Departamento de Matemática Aplicada a las TIC Escuela Técnica Superior de Ingenieros de Sistemas Informáticos Universidad Politécnica de Madrid. 10 de julio de 2018.

(4)

(5) Dedicatoria. A mi padre, al son de las trompetas. “Si logré ver más lejos fue porque subí a hombros de gigantes”. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. C.

(6)

(7) Agradecimientos. Perdonadme porque me es imposible nombraros a todos. Os doy las gracias. A los compañeros, con los que he compartido y aprendido cada día. A los profesores que tuve, cuyo esfuerzo diario ha hecho que este camino haya valido la pena. A los profesores del Departamento de Matemática Aplicada a las TIC de esta escuela: Alfonsa, Luis Miguel, Maria Ángeles, Jose Ignacio, .. Y de otros departamentos: José Luis, Carola, Frank, Pedro Pablo, Jorge Enrique, Paco, Agustín, Marta, Paula, Pablo, .. No tengo palabras. A los amigos que son apoyo en los momentos difíciles y alegría en las victorias. A Esther, mi pareja, que parece mentira que tras tantas aventuras aún me apoye con una sonrisa. A su familia, que es la mía, juntos hacemos un gran equipo. A mi familia, que siempre me apoyó en llevar mi vocación adelante. A todos los que me apoyasteis en el camino. Este trabajo, que representa el fin de una etapa y el comienzo de otra, también es vuestro. Gracias.. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. E.

(8)

(9) Resumen. Resumen — En este proyecto se aplican técnicas de aprendizaje automático supervisado sobre dos conjuntos de ficheros binarios compuestos por goodware y malware. Partiendo de sus informes de análisis estático, se pretende de detectar si un fichero es malware o no. Se ha tomado como goodware dos conjuntos de ficheros pertenecientes a la distribución Debian GNU/Linux[1] arquitectura amd64 e i386, y como malware los 3565 ficheros binarios del dataset de malware de Linux de Virushare [2]. Estos conjuntos de datos se han unido de manera que conforman dos datasets, los mismos binarios de malware, distintos binarios de goodware, uno para cada arquitectura. Sobre estos datasets se ha realizado un análisis estático para obtener los informes, los cuales han sido parseados para elaborar una lista con todas las palabras que aparecen en cada uno de ellos junto con su número de apariciones. La selección de características se ha hecho eliminando en primer lugar las palabras con menor varianza en su número de apariciones, y luego se han escogido las k-mejores características utilizando el criterio específico de filtrado para clasificación χ2 . Estos procesos de filtrado de características se han hecho tomando las decisiones sobre el subconjunto de entrenamiento para evitar fugas de datos y obtener así un resultado fiable. Finalmente, se han entrenado varios modelos de clasificación, se han validado y medido sus resultados para, por último, compararlos. A raíz de los resultados obtenidos, se ha realizado una investigación hacia atrás para identificar las características que producen dichos resultados. Esto nos ha permitido obtener un conocimiento más profundo de los criterios basados en datos que están utilizando los algoritmos para tomar las decisiones de clasificación. Palabras clave — aprendizaje automático supervisado, detección de malware, análisis estático, Debian, Linux, selección de características. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. i.

(10)

(11) Abstract. Abstract — This project applies supervised machine learning tecniques over two binary files datasets composed by goodware and malware. Starting from their static analysis reports, the goal is to detect if a binary file is malware or not. Two sets of binary files of the Debian GNU/Linux distribution [1] based on amd64 and i386 architectures have been chosen as goodware data, as well as 3565 binary files from the Virushare Linux malware dataset [2] as the malware side. This datasets have been joined to become two datasetsOver this dataset, the same malware files with different goodware files for each architecture. Over this data a static analysis was carried out to get the static analysis reports, which were then parsed to elaborate a list containing all the words appearing in the reports along their repetitions. The feature selection was fulfilled through a two feature selection combination: in the first place the less variance features were removed, and then the K best features following the χ2 criteria have been selected. This feature selection stage took place after having splitted the dataset into training and test subsets, in order to avoid any data leakage effect. Finally, some classification models were trained and evaluated, and their results were compared between themselves and with the previously achieved ones in the academic literature. Due to the obtained results, a backward research was performed to identify which features produce the previously reached results. This provided a deeper knowledge on the data based criteria used by the algorithms to form the resolutions. Key words — supervised machine learning, malware detection, static analysis, Debian, Linux, feature selection. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. iii.

(12) iv. Trabajo de Fin de Grado.

(13) Índice general. 1. Introducción 1.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Tecnologías utilizadas 2.1. Scikit-Learn . . . . . 2.2. Git . . . . . . . . . . 2.2.1. Gitflow . . . 2.3. Python 3.6 . . . . . 2.4. Bash . . . . . . . . . 2.5. Debian GNU/Linux 2.6. Latex . . . . . . . . 2.6.1. Texstudio . . 2.7. Emacs . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. 3. Estado del Arte 3.1. Análisis de malware . . . . . . . . . 3.1.1. Análisis estático . . . . . . . 3.1.2. Análisis dinámico . . . . . . . 3.2. Malware en Linux . . . . . . . . . . 3.2.1. Antivirus . . . . . . . . . . . 3.3. Aprendizaje automático . . . . . . . 3.3.1. Tipología . . . . . . . . . . . 3.4. Librerías de aprendizaje automático 3.5. Estudios previos . . . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. 1 4. . . . . . . . . .. 5 6 7 7 8 9 10 11 11 12. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. 13 13 14 15 15 17 18 18 21 22. 4. Marco teórico 4.1. Algoritmos utilizados . . . . . . . . . . . . . 4.1.1. Algoritmo Naïve Bayes . . . . . . . 4.1.2. Algoritmo KNN - Nearest Neighbors 4.1.3. Algoritmo SVM Lineal . . . . . . . . 4.1.4. Algoritmo RBF SVM . . . . . . . . 4.1.5. Algoritmo de Árbol de Decisión . . . 4.1.6. Algoritmo de Bosques Aleatorios . . 4.1.7. Algoritmo Red Neuronal . . . . . . . 4.1.8. Algoritmo AdaBoost . . . . . . . . . 4.2. Fugas de datos . . . . . . . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . .. 23 23 24 24 25 25 26 27 27 27 28. 5. Metodología y diseño 5.1. Requisitos funcionales . . . . . . . . 5.2. Requisitos software. . . . . . . . . . 5.3. Proceso . . . . . . . . . . . . . . . . 5.4. Del dato al modelo . . . . . . . . . . 5.4.1. Fase 1: Eleccción del dataset. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. . . . . .. 29 29 30 31 32 32. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. v. . . . . . . . . .. . . . . .. . . . . . . . . .. . . . . .. . . . . . . . . .. . . . . .. . . . . ..

(14) ÍNDICE GENERAL 5.4.2. 5.4.3. 5.4.4. 5.4.5. 5.4.6.. Fase 2: Elección de las herramientas a utilizar . . . . . . . . . . . . . . . . . . . . . Fase 3: Análisis estático . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fase 4: Selección de características . . . . . . . . . . . . . . . . . . . . . . . . . . . Fase 5: Selección de las K mejores características . . . . . . . . . . . . . . . . . . . Fase 6: Entrenamiento de los modelos estadísticos, predicción y validación de resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.7. Fase 7: Análisis crítico sobre los resultados obtenidos . . . . . . . . . . . . . . . . . 5.5. Del modelo al dato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.1. Fase 8: Reiteración de las fases 5, 6 y 7 con diferente número de K-mejores características . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.2. Fase 9: Identificación de las características utilizadas. . . . . . . . . . . . . . . . . . 5.5.3. Fase 10: Conclusiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 33 33 34 36 38 40 40 40 40 40. 6. Datasets 6.1. ¿Por qué Linux? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2. ¿Por qué Debian? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3. Criterios de selección de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 41 41 43 44. 7. Desarrollo 7.1. Fases ejecutables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1.1. Fase 1: obtención de las repeticiones de palabras para cada fichero binario. 7.1.2. Fase 2: obtención del universo de palabras existente en el dataset. . . . . . 7.1.3. Fase 3: obtención de los subconjuntos de entrenamiento y test. . . . . . . . 7.1.4. Fase 4: Filtro por chi², entrenamiento y validación de los modelos. . . . . . 7.1.5. Fase 5: identificación de las características utilizadas en la fase 4. . . . . . . 7.2. Instalación del programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3. Cómo ejecutar el programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.1. Parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3.2. Ejemplos de ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . .. 47 47 47 47 48 50 51 51 51 52 52. 8. Resultados 8.1. Criterio de evaluación de los modelos en el contexto de malware . . . . . . . . . . . . . . . 8.2. Tabla comparativa - Dataset amd64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3. Tabla comparativa - Dataset i386 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 55 56 57 59. 9. Conclusiones. 61. Bibliografía. 63. Apéndices. 65. A. Anexos A.1. Fichero de Configuración . . . . . . . . . A.2. Implementación . . . . . . . . . . . . . . A.3. Fichero requirements.txt . . . . . . . . . A.3.1. Contenido . . . . . . . . . . . . . A.4. Matrices de Confusión - Dataset amd64 A.4.1. Algoritmo Naïve Bayes . . . . . A.4.2. Algoritmo Nearest Neighbors . . A.4.3. Algoritmo Árbol de decisión . . . A.4.4. Algoritmo Bosque Aleatorio . . . A.4.5. Algoritmo SVM Lineal . . . . . . A.4.6. Algoritmo RBF SVM . . . . . . vi. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. Trabajo de Fin de Grado. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. 67 67 69 99 99 100 100 101 102 103 104 105.

(15) ÍNDICE GENERAL A.4.7. Algoritmo Red Neuronal . . . A.4.8. Algoritmo AdaBoost . . . . . A.5. Matrices de Confusión - Dataset i386 A.5.1. Algoritmo Naive Bayes . . . . A.5.2. Algoritmo Nearest Neighbors A.5.3. Algoritmo Decision Tree . . . A.5.4. Algoritmo Random Forest . . A.5.5. Algoritmo Linear SVM . . . . A.5.6. Algoritmo RBF SVM . . . . A.5.7. Algoritmo Neural Net . . . . A.5.8. Algoritmo AdaBoost . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . .. 106 107 108 108 109 110 111 112 113 114 115. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. vii.

(16)

(17) Índice de figuras. 1.1. Tipos e impacto de de incidentes digitales (Allianz). . . . . . . . . . . . . . . . . . . . . . 1.2. Riesgos más preocupantes de la digitalización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . logo . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7.. Scikit-learn logo . . Git logo . . . . . . Python logo . . . . Bash logo . . . . . Debian logo . . . . The LaTeX project Emacs logo . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. . . . . . . .. 6 7 8 9 10 11 12. 3.1. 3.2. 3.3. 3.4.. Productos con mayor número de vulnerabilidades en la historia (CVEDetails.com). Productos con mayor número de vulnerabilidades en 2018 (CVEDetails.com). . . . Tabla comparativa de Antivirus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Infografía de lenguajes y librerías de aprendizaje automático . . . . . . . . . . . . .. . . . .. . . . .. . . . .. . . . .. 16 16 17 21. 4.1. Ejemplo gráfico del algoritmo SVM Lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Expansión del espacio de características del kernel para σ=1 . . . . . . . . . . . . . . . . .. 25 26. 5.1. Flujo de trabajo de aprendizaje automático supervisado . . . . . . . . . . . . . . . . . . . 5.2. Forma de una matriz de confusión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 31 38. 6.1. 6.2. 6.3. 6.4.. . . . .. 42 42 43 43. 7.1. Distribución de palabras por número de repeticiones en el dataset . . . . . . . . . . . . . .. 48. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. ix. Cuota de mercado global de Sistemas Operativos . . . . . . . . . . . . . Cuota de mercado de servidores web por sistema operativo . . . . . . . Evolución de los sistemas operativos en el top 500 de supercomputación Cuota de mercado de Servidores web Linux . . . . . . . . . . . . . . . .. . . . . . . .. . . . .. . . . . . . .. . . . .. . . . . . . .. . . . .. . . . . . . .. . . . .. . . . . . . .. 2 2. . . . .. . . . .. . . . .. . . . .. . . . ..

(18)

(19) Índice de tablas. 8.1. Comparativa de algoritmos con dataset amd64 . . . . . . . . . . . . . . . . . . . . . . . . 8.2. Comparativa de algoritmos con dataset i386 . . . . . . . . . . . . . . . . . . . . . . . . . .. 57 59. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. xi.

(20)

(21) 1 Introducción. Malware es todo aquel fichero o código informático que al ser ejecutado produce en el sistema efectos no deseados. El malware es capaz de engañar, robar datos personales y profesionales de las empresas y permite a un atacante emprender una cantidad innumerable de acciones tales como invasión de la privacidad, suplantación de identidad, fraude, robo de propiedad intelectual, extorsión, interrupción de servicios, etc. Su principal vía de transmisión es internet, utilizan ingeniería social, correos masivos e incluso interceptan datos que el usuario intercambia con una entidad de su confianza. La aparición de las redes sociales, el auge de los sistemas distribuidos y el IoT Internet of Things (IoT) son factores que hacen que la seguridad digital sea una preocupación que afecta a la sociedad a todos los niveles. Se estima que actualmente hay un 55 % de la población con posibilidad de acceso a internet, un 53 % de usuarios activos en la red y un 42 % de usuarios activos en redes sociales [3]. El Malware se ha convertido hoy en día en una de las principales amenazas, tanto para empresarios como para los usuarios individuales de la red de redes, debido a la gran penetración que tiene internet en la sociedad a nivel mundial [4] y a las consecuencias que una vulnerabilidad digital puede causar. Según avanzamos en la era digital, cada día surgen nuevas formas de malware cada vez más sofisticado [5], que hace que sea necesario aplicar nuevas políticas de seguridad capaces de anticiparse a éstas nuevas amenazas y la ciberguerra entre analistas de seguridad y desarrolladores de malware se mantiene abierta y Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 1.

(22) CAPÍTULO 1. INTRODUCCIÓN. Figura 1.1: Tipos e impacto de de incidentes digitales (Allianz). en constante evolución. Cada año se caracteriza por la aparición de, al menos, una nueva amenaza grave [6], por ejemplo, durante el año 2017 las amenazas más preocupantes que surgieron de tipo malware fueron las catalogadas como ransomware y cryptojacking. Informes como los de AV Test y CVE Details mencionan un alarmante aumento de los ataques por malware en los últimos años [7] y aunque desde el año 2014 se observa un descenso en la cantidad de malware creado por año, los ataques cada vez son más sofisticados y destructivos [8].. Figura 1.2: Riesgos más preocupantes de la digitalización Según Marketshare, compañía especializada en estadísticas de tecnologías de internet, en la historia reciente el sistema operativo más instalado en los ordenadores domésticos y corporativos de todo el mundo ha sido Microsoft Windows, razón por la cual ha sido el sistema operativo más atacado, pero ningún sistema operativo está a salvo de los ataques de malware y, en estos últimos años, se ha visto incrementado el número de ataques sobre sistemas operativos de Linux y macOS. Parece lógico este aumento de ataques, si tenemos en cuenta que el sistema operativo Linux lidera el mercado de servidores en internet y el de las supercomputadoras y a que además su presencia está teniendo un crecimiento progresivo en computadoras de escritorio, portátiles, router, videojuegos, smartphones y 2. Trabajo de Fin de Grado.

(23) CAPÍTULO 1. INTRODUCCIÓN tablets [9]. El tipo de gestión de software que ofrece Linux es altamente confiable y goza de una gran reputación, por este motivo existe una idea muy extendida de que en Linux no hay malware. Llama la atención el bajo número de estudios sobre malware de Linux comparado con otros sistemas operativos. Aunque es cierto que las características de diseño de Linux dificulta la labor de un atacante, no está libre de un descuido por parte de un usuario o de un bug de seguridad que pudiera aparecer en alguna pieza de software. Aunque los repositorios de las distribuciones Linux cuentan con una gran cantidad de software, es posible que un usuario descargue un programa fuera de los repositorios oficiales y ejecute un binario que suponga una amenaza al sistema. También puede suceder que un atacante aproveche una vulnerabilidad en los puertos abiertos a la red y le permita hacer una escalada de privilegios, lo cual puede conseguir por medio de un rootkit u otra técnica similar. Hasta la fecha, la manera más habitual de luchar contra el malware ha consistido en mantener un gran conjunto de ejemplos con los que comparar cada fichero y así identificar los ficheros maliciosos. [10] Esta estrategia, aunque útil para no ser infectado por segunda vez, es totalmente ineficaz para amenazas tipo 0-Day. Lo cual, deja como única medida de protección alternativa del sistema, la defensa por protección del perímetro. Si un atacante supera la defensa de perímetro y consigue que un malware 0-Day sea ejecutado, habrá conseguido su objetivo. Se estima que alrededor del 30 % del malware detectado en 2016 fue clasificado como 0-day porque no fue detectado por los antivirus habituales. Sin una solución de prevención de ataques que identifique proactivamente el malware por medio de técnicas modernas, casi una tercera parte del malware pasará desapercibido para las compañías [11]. Este dato confirma que la capacidad de los cibercriminales para automáticamente reempaquetar o modificar su malware ha superado la habilidad de la industria para conseguir, con suficiente velocidad, la cantidad de firmas necesarias para detectar eficazmente el malware. Este tipo de malware reempaquetado es lo que conocemos como malware polimórfico y es difícil de detectar por los antivirus, ya que cada reempaquetado del mismo malware asegura al menos un sistema infectado. Es por este motivo que se esté empezando a plantear el uso de la inteligencia artificial, tanto en sus formas de deep learning como aprendizaje automático, para resolver los complejos procesos de clasificación y encontrar así, un sistema eficaz de reconocimiento de patrones aplicado a este campo para conseguir mitigar este tipo de ataques. La idea es utilizar técnicas similares a las que ya se han utilizado con éxito sobre el correo electrónico para evitar el spam recibido por los usuarios, el cual se ha conseguido reducir en un 99,9 % [12]. En este contexto se plantea el aprendizaje automático como la técnica que puede ayudar a detectar vulnerabilidades que a día de hoy son aún desconocidas.. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 3.

(24) CAPÍTULO 1. INTRODUCCIÓN. 1.1.. Objetivo. El propósito de este proyecto es desarrollar un programa capaz de aplicar técnicas de aprendizaje automático sobre un conjunto de datos en bruto para conseguir que un ordenador adquiera la habilidad de reconocer si un fichero binario es malware o no.. 4. Trabajo de Fin de Grado.

(25) 2 Tecnologías utilizadas. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 5.

(26) CAPÍTULO 2. TECNOLOGÍAS UTILIZADAS. 2.1.. Scikit-Learn. Figura 2.1: Scikit-learn logo Scikit-learn es una librería de aprendizaje automático para el lenguaje de programación Python. Implementa varios algoritmos de clasificación, regresión y clustering incluyendo máquinas de vectores soporte, bosque de árboles aleatorios, aumento de gradiente, k-means y DBSCAN, y ha sido diseñado para interoperar con las librerías numericas y científicas de python NumPy y SciPy.. 6. Trabajo de Fin de Grado.

(27) CAPÍTULO 2. TECNOLOGÍAS UTILIZADAS. 2.2.. Git. Figura 2.2: Git logo Es un software de control de versiones distribuido diseñado por Linus Torvalds, pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando éstas tienen un gran número de archivos de código fuente. Su propósito es llevar registro de los cambios en archivos de computadora y coordinar el trabajo que varias personas realizan sobre archivos compartidos.. 2.2.1.. Gitflow. Se ha utilizado Git siguiendo el flujo de trabajo Gitflow, tanto para la gestión del código como para la redacción de la documentación de la memoria. Este flujo de trabajo consiste en crear una rama paralela a Master llamada Develop. La rama Develop se utiliza para que el equipo de trabajo mergee las ramas de cada feature de desarrollo, y una vez que esté estabilizada, se hayan resuelto los conflictos que pudiera existir y pase todos los tests, se hace merge con la rama master para, finalmente, obtener la versión release que se llevará a producción.. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 7.

(28) CAPÍTULO 2. TECNOLOGÍAS UTILIZADAS. 2.3.. Python 3.6. Figura 2.3: Python logo Python es un lenguaje de programación interpretado, multiparadigma y multiplataforma que usa tipado dinámico y conteo de referencias para la administración de memoria y cuya filosofía hace hincapié en una sintaxis que favorece la legibilidad del código. Es administrado por la Python Software Foundation. Posee una licencia de código abierto denominada Python Software Foundation License que es compatible con la Licencia pública general de GNU a partir de la versión 2.1.1, e incompatible en ciertas versiones anteriores.. 8. Trabajo de Fin de Grado.

(29) CAPÍTULO 2. TECNOLOGÍAS UTILIZADAS. 2.4.. Bash. Figura 2.4: Bash logo Bash (Bourne-again shell) es intérprete de comandos y un lenguaje de consola. Es una shell de Unix compatible con POSIX y el intérprete de comandos por defecto en la mayoría de las distribuciones GNU/Linux y macOS. También se ha portado a otros sistemas como Windows y Android. Su nombre es un acrónimo de Bourne-again shell ("shell Bourne otra vez") haciendo un juego de palabras (born-again significa "nacido de nuevo") sobre la Bourne shell (sh), que fue uno de los primeros intérpretes importantes de Unix. Hacia 1978, Bourne era el intérprete distribuido con la versión del sistema operativo Unix Versión 7. Stephen Bourne, por entonces investigador de los Laboratorios Bell, escribió la versión original. Brian Fox escribió Bash para el proyecto GNU en 1987 como sustituto libre de Bourne.12 y en 1990, Chet Ramey se convirtió en su principal desarrollador.. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 9.

(30) CAPÍTULO 2. TECNOLOGÍAS UTILIZADAS. 2.5.. Debian GNU/Linux. Figura 2.5: Debian logo El Proyecto Debian [13] es una asociación de personas que han hecho causa común para crear un Sistema Operativo (SO) libre y Debian es el sistema operativo resultante. Los sistemas Debian actualmente usan el núcleo de Linux o de FreeBSD. FreeBSD es un sistema operativo que incluye un núcleo y otro software. Aunque lo más común es utilizarlo junto con el kernel Linux, actualmente se está trabajando para ofrecer la distribución con otros núcleos, en especial Hurd. Hurd es una colección de servidores que se ejecutan sobre un micronúcleo (como Mach) para implementar las distintas funcionalidades. Hurd es software libre producido por el proyecto GNU. Una gran parte de las herramientas básicas que completan el sistema operativo, vienen del proyecto GNU; de ahí los nombres: GNU/Linux, GNU/kFreeBSD, y GNU/Hurd.. 10. Trabajo de Fin de Grado.

(31) CAPÍTULO 2. TECNOLOGÍAS UTILIZADAS. 2.6.. Latex. Figura 2.6: The LaTeX project logo LaTeX es un sistema de preparación de documentos para escritura de alta calidad. En su mayoría es utilizado para documentos científicos o técnicos de tamaño medio o grande pero puede ser utilizado par casi cualquier tipo de publicación. LaTeX no es un procesador de texto. En su lugar anima a los autores a no preocuparse demasiado de la apariencia de sus documentos sino en concentrarse en enriquecer el contenido. Se basa en la idea de que es mejor dejar el diseño a los diseñadores de documentos, y a los autores el contenido de los mismos.. 2.6.1.. Texstudio. TeXstudio es un entorno de escritura integrado de fuentes abiertas para la creación de documentos LaTeX. Su objetivo es hacer que la escritura con LaTeX sea tan fácil y cómoda como se aposible. Por lo tanto, TexStudio tiene muchas características como sintaxis resaltada, visor integrado, gestor de referencias y varios asistentes.. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 11.

(32) CAPÍTULO 2. TECNOLOGÍAS UTILIZADAS. 2.7.. Emacs. Figura 2.7: Emacs logo Emacs es un editor de texto con una gran cantidad de funciones, muy popular entre programadores y usuarios técnicos. GNU Emacs es parte del proyecto GNU y la versión más popular de Emacs con una gran actividad en su desarrollo. El manual de GNU Emacs lo describe como “un editor extensible, personalizable, auto-documentado y de tiempo real”. El EMACS original significa, Editor MACroS para el TECO, y fue escrito por Richard Stallman junto con Guy Steele en 1975.. 12. Trabajo de Fin de Grado.

(33) 3 Estado del Arte. Al revisar el estado del arte de cualquier trabajo de investigación debemos ser cuidadosos a la hora de elegir las fuentes que utilizamos ya que son estas las que fijan los conceptos sobre los que basamos el trabajo. Y es que bien sea porque el artículo de investigación se publicó fuera de fecha sin tener en cuenta los últimos resultados publicados o porque la metodología aplicada no haya sido del todo exhaustiva, el resultado puede ser que se genere literatura con conclusiones erróneas [10]. Por eso en este trabajo se ha hecho especial hincapié en explicar qué se ha hecho y por qué, para ayudar al lector a detectar este tipo de errores, en caso de haberlos, o aspectos mejorables.. 3.1.. Análisis de malware. El objetivo del análisis de malware es proporcionar la información necesaria para detectar y responder a una potencial intrusión en un sistema. Los métodos de detección de malware se pueden clasificar según el tipo de reconocimiento utilizado: Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 13.

(34) CAPÍTULO 3. ESTADO DEL ARTE. 3.1.1.. Análisis estático. El análisis estático se basa en estudiar el fichero sospechoso sin ejecutarlo. Es el tipo de detección de malware más utilizado por los programas antivirus. La detección de malware basado en firmas tiene dos métodos fundamentales: basado en extracción de características binarias y basado en características ensamblador.. Ventajas No requiere de una laboratorio especializado. Las herramientas necesarias son fácilmente accesibles. El riesgo es mínimo porque el programa no se ejecuta. Requiere poca capacidad de cómputo.. Desventajas Respecto al análisis estático en general: Los resultados pueden ser muy distintos según el fichero infectado, aún para el mismo código malicioso. Supone una alta tasa de fallo en la detección de malware polimórfico. Respecto a las soluciones de detección de malware basadas firmas: Para el malware conocido, el comportamiento de las soluciones antivirus es predecible. Poco eficaz con malware polimórfico. Ineficaz para malware de tipo 0-Day. El crecimiento de la base de datos de firmas sigue el mismo ritmo que el de la creación de malware, el cual hasta hace poco años ha sido exponencial.. 14. Trabajo de Fin de Grado.

(35) CAPÍTULO 3. ESTADO DEL ARTE. 3.1.2.. Análisis dinámico. El análisis dinámico se basa en ejecutar el fichero y ver cómo se comporta el sistema en el cual se ha ejecutado.. Ventajas Proporciona información detallada sobre el comportamiento del malware. Es un buen método para detectar malware tipo 0-day y polimórfico.. Desventajas Requiere un entorno de pruebas especializado y cuidadosamente configurado. Es computacionalmente caro. Se puede evadir por medio de técnicas de detección de máquinas virtuales, esto es debido a que en el análisis dinámico el malware se ejecuta en entornos virtuales, aislados y controlados, fácilmente replicables, por lo que, si el virus detecta que está en el entorno virtual, este puede ocultar su comportamiento dando lugar a en un falso negativo en el análisis.. 3.2.. Malware en Linux. En esta situación, ¿por qué nos fijamos en los sistemas Linux para detectar malware si su cuota de mercado es tan baja en comparación con otros sistemas operativos? Y la respuesta es simple: por la importancia que tiene cada uno de los sistemas que gobierna. Como se puede ver en la figura 3.2, las plataformas con mayor número de vulnerabilidades en 2018 están siendo las plataformas Android y Linux, concretamente Debian. [7] Actualmente, el número de malware dirigido a Linux está creciendo especialmente en entornos de escritorio, donde el reputado sistema de gestión de software deja de ser efectivo en el momento en que un usuario decide ejecutar un fichero descargado desde un sitio distinto a los servidores oficiales de su distribución. Hay otros factores que hacen muy recomendable hacer periódicamente un análisis anti-malware de cualquier sistema operativo, como el hecho de que el administrador del sistema finalmente es un ser humano y puede cometer errores, o que el software que está actualmente instalado en el servidor puede tener algún bug de seguridad que aún no conocemos y que por lo tanto no ha sido solucionado. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 15.

(36) CAPÍTULO 3. ESTADO DEL ARTE. Figura 3.1: Productos con mayor número de vulnerabilidades en la historia (CVEDetails.com).. Figura 3.2: Productos con mayor número de vulnerabilidades en 2018 (CVEDetails.com). De hecho, el escenario en el cual un intruso se cuela en un sistema, deja abierta la puerta a que instale malware de cualquier tipo. Si esto sucede, querremos saberlo cuanto antes para, de este modo, poder solucionarlo y minimizar los daños. En este escenario, los mecanismos de control de integridad y análisis de los sistemas siguen siendo necesarios.. 16. Trabajo de Fin de Grado.

(37) CAPÍTULO 3. ESTADO DEL ARTE. 3.2.1.. Antivirus. Existe una amplia gama de antivirus para los SO basados en Linux [14].. Figura 3.3: Tabla comparativa de Antivirus Uno de las primeros datos que saltan a la vista es que el hecho de utilizar un antivirus de una casa conocida y con licencia de pago no implica una alta tasa de detección como sucede con F-Prot, Comodo y McAfee. Por otro lado, el hecho de que la herramienta sea de fuentes abiertas tampoco garantiza excelentes resultados. ClamAV obtiene un resultado que lo sitúan en la mitad de la tabla comparativa con un 66 % de acierto en la detección. Finalmente encontramos 7 soluciones con maś de un 95 % de virus detectados, de los cuales solo uno, Kaspersky Endpoint Security 8.0 for Linux, consigue el 100 % de detección. En el caso de las soluciones comerciales que no son de fuentes abiertas, no sabemos qué estrategia han seguido para implementar la detección de virus. En el caso de ClamAV, al ser de fuentes abiertas, sabemos que utiliza un sistema de análisis estático con reconocimiento de malware basado en firmas.. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 17.

(38) CAPÍTULO 3. ESTADO DEL ARTE. 3.3.. Aprendizaje automático. El aprendizaje automático es una rama de la inteligencia artificial que permite crear programas capaces de generalizar comportamientos y reconocer patrones en los datos a través de información no estructurada proporcionada en forma de muestras [15]. Se entiende como aprendizaje automático al área de estudio que proporciona a los ordenadores la capacidad de aprender a hacer una tarea sin haber sido explícitamente programados para realizarla. En general se dispone de un conjunto de datos X (registros o instancias) y se trata de predecir los valores de una variable respuesta Y a partir de los valores de un conjunto de variables predictoras (atributos o características). El conjunto de instancias se suele dividir en dos partes, una de ellas, denominada conjunto de entrenamiento, se utiliza para que el sistema aprenda un modelo y la otra, denominada conjunto test, se usa para evaluar el modelo. En el caso de que la variable respuesta sea binaria y tome dos posibles valores (positivo y negativo), al predecir el resultado para una muestra de prueba, se producen cuatro resultados posibles: Verdadero positivo, resultado realmente positivo y cuya predicción también es positiva, Verdadero negativo, resultado realmente negativo y cuya predicción también es negativo, Falso negativo, resultado realmente positivo y cuya predicción es positiva, y Falso positivo. resultado realmente negativo y cuya predicción es positiva.. 3.3.1.. Tipología. Según la salida que proporcionan Supervisado: Se caracterizan porque se conocen los valores de la variable respuesta para los datos de entrenamiento. Este tipo de algoritmos producen una función que establece una correspondencia entre entradas y salidas del sistema. experiencia o conocimiento previo en la que nos podemos apoyar para tomar decisiones y hacer predicciones. El objetivo del aprendizaje supervisado es usar las características de un objeto para identificar a qué clase o grupo pertenece. Por ejemplo, un sistema de control del spam en el cual el usuario indica qué correos electrónicos son spam, gracias a lo cual el sistema puede aprender de dichas indicaciones para en un futuro ser capaz de identificar correos similares. La selección de características utilizadas para el entrenamiento del algoritmo en un entorno de aprendizaje automático supervisado es fundamental para el correcto funcionamiento de un modelo 18. Trabajo de Fin de Grado.

(39) CAPÍTULO 3. ESTADO DEL ARTE de predicción. Una selección inadecuada de las características hará que el aprendizaje sea más lento o que incluso no llegue a producirse nunca. No supervisado: Es un método de aprendizaje automático donde el modelo se ajusta a las observaciones. A diferencia del aprendizaje supervisado, no hay un conocimiento a priori. Se caracteriza porque el algoritmo descubre en los datos de entrada, de manera autónoma, las diferentes características, regularidades, correlaciones y categorías. Así, el aprendizaje no supervisado trata los objetos de entrada como un conjunto de variables aleatorias, construyéndo así un modelo de densidad para el conjunto de datos. Un ejemplo de una aplicación interesante de estos algoritmos es la segmentación de clientes, donde podemos agrupar los clientes en grupos de forma automática en función de ciertas características comunes. Algunos de los algoritmos más representativos de aprendizaje no supervisado son: • K-means: es un método de agrupamiento, que tiene como objetivo la partición de un conjunto de n observaciones en k grupos en el que cada observación pertenece al grupo cuyo valor medio es más cercano. • Detección de anomalías: consiste en detectar anomalías a partir de una clara definición de lo que es normal. Es una técnica que genera facilmente falsos positivos por la dificultad que entraña definir la condición normal. Existen dos tipos de detección de anomalías: estadística y no estadística. Semisupervisado: combinación de los anteriores, en las que se tienen en cuenta datos marcados y no marcados. Por refuerzo: su información de entrada es el feedback que obtiene como respuesta a sus acciones; se basa en el método de ensayo y error. Transducción: similar al aprendizaje supervisado, pero no construye una función como tal. Trata de predecir categorías de los futuros ejemplos a partir de ejemplos ya dados. Multitarea: usan el conocimiento previamente aprendido por el sistema, basándose en enfrentarse a lo que ya a visto previamente.. Según el tipo de tarea Según el tipo de tarea, los tipos de aprendizaje automático se pueden agrupar en: tipo productivo (clasificación y regresión) o de tipo descriptivo (clustering y asociación). Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 19.

(40) CAPÍTULO 3. ESTADO DEL ARTE Clasificación: El objetivo es asignar los valores de clase a registros no clasificados a partir de ejemplos de entrenamiento. La variable respuesta es de tipo categórica, es decir, toma un conjunto finito de valores. Regresión: El objetivo es asignar un valor real a un atributo de un registro a partir de los valores del resto de los atributos del registro. La variable respuesta es cuantitativa y puede tomar infinitos valores. Clustering: dividir el conjunto de registros, de tal manera que los registros incluidos en uno de los clusters se caracterizan por su gran similitud o cercanía, mientras que entre grupos hay una mayor distancia. Asociación: identificar relaciones no explícitas entre atributos categóricos de registros no clasificados. Se pretenden identificar aquellas relaciones que se establecen en función de la ocurrencia conjunta de varios atributos.. Tipos de modelos Los modelos creados se pueden clasificar como [16]: Geométricos: se construyen en el espacio de las instancias y pueden tener múltiples dimensiones. Pueden tener un borde de decisión linear entre varias clases. Probabilísticos: intentan determinar la distribución de probabilidades descriptivas de la función que relaciona los valores de los nuevos registros con unos valores determinados. Se aplica en aquellos casos en los que la relación entre el conjunto de atributos y la categoría de la clase no es determinista. Suele deberse al ruido o a la propia naturaleza de los valores. El más conocido es el de Naïve Bayes, el cual almacena como descripción conceptual la previa probabilidad de cada clase y la probabilidad condicional de cada atributo dado por la clase. Lógicos: expresan las probabilidades en reglas organizadas en formas de árboles de decisión.. Según su linealidad Dentro de los métodos de clasificación y regresión, se distinguen por su linealidad dos tipos: Lineales: La función que se utiliza para predecir la variable respuesta a partir de las variables predictoras es una aplicación lineal. Las características de un objeto son típicamente presentadas en un vector llamado vector de características. 20. Trabajo de Fin de Grado.

(41) CAPÍTULO 3. ESTADO DEL ARTE Destacan por su velocidad de cómputo, especialmente cuando el vector x es disperso, aunque los árboles de decisión pueden ser más rápidos. Además, los clasificadores lineales con frecuencia funcionan muy bien cuando el número de dimensiones del vector x es grande, como en clasificación de documentos, donde típicamente cada elemento en en el vector x es el número de apariciones de una palabra en un documento. En tales casos, el clasificador debe estar bien regularizado. No lineales: Construyen superficies arbitrarias que permiten separar clusters muy cercanos o que incluso se solapan.. 3.4.. Librerías de aprendizaje automático. Hay 3 lenguajes con buen soporte al aprendizaje automático: R, Python y Scala.. Figura 3.4: Infografía de lenguajes y librerías de aprendizaje automático Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 21.

(42) CAPÍTULO 3. ESTADO DEL ARTE R es un lenguaje específicamente diseñado para el desarrollo estadístico y suele ser el favorito de los programadores que proceden de entornos matemáticos. Cuenta con un conjunto de herramientas para investigación reproducible. Es tan específico que puede no ser la elección óptima en caso de ser necesario resolver un caso de propósito general. Por su parte, Python es un lenguaje de propósito general y suele ser el escogido por aquellos desarrolladores que provienen de otros entornos de programación. Por otro lado, Scala es un lenguaje con grandes capacidades en entorno clusterizados pero carece de las herramientas de visualización de datos con las que sí cuentan Python y R. Existe una cantidad muy parecida de librerías, tanto para Python como para R, y en este aspecto ambos lenguajes cuentan con un soporte parecido. Para nuestro caso se ha elegido Python porque es uno de los dos lenguajes que cumplen con los requisitos necesarios para llevar adelante el proyecto, y es el que ofrece una curva de aprendizaje más rápida.. 3.5.. Estudios previos. Alireza Sohuri y Rahil Hosseini en su informe sobre el estado del arte del año 2018 [10] compararon 40 métodos de detección de malware y se observó que el 40 % de los estudios se habían realizado sobre sistemas tipo Android y un 23 % sobre Windows [10], algunos sobre datasets variados, pero ninguno con datasets solo de Linux. Fuera de este State of Art (SoA) hemos encontrado un único artículo sobre detección de malware sobre Linux [17]. Se observa que en la mayoría de los estudios publicados se consiguen niveles de detección en su mayoría por encima del 95 % salvo alguna excepción con un 85 %. Los métodos de clasificación más utilizados son: 29 % Máquinas de vectores soporte (SVM) 17 % J48 14 % Árboles de decisión 10 % Naive Bayes. La mayor exactitud alcanzada hasta ahora en este campo fue la obtenida por Zahoor-Ur-Rehman, Sidra Nasim Khan y su equipo en el año 2017 [18] con un 99,81 % y una exhaustividad (recall o TPR) del 100 %, utilizando el algoritmo KNN a partir de datos obtenidos de análisis híbrido de malware: estático y dinámico.. 22. Trabajo de Fin de Grado.

(43) 4 Marco teórico. Para la detección de malware nos interesa centrarnos especialmente en algoritmos de clasificación para diferenciar si un fichero es malware o no.. 4.1.. Algoritmos utilizados. Para que estos algoritmos puedan funcionar correctamente debemos ser capaces de suministrarles un conjunto de datos de entrenamiento con suficiente cantidad y calidad como para conseguir así un nivel de acierto elevado. En nuestro caso nos centramos en algoritmos de clasificación. Denotamos por X al vector de variables predictoras, por Y la matriz de variables respuesta, y por Cj a los posibles valores de la variable respuesta.. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 23.

(44) CAPÍTULO 4. MARCO TEÓRICO. 4.1.1.. Algoritmo Naïve Bayes. Naïve Bayes es uno de los clasificadores más utilizados por su simplicidad y rapidez. Se trata de una técnica de clasificación y predicción supervisada que construye modelos que predicen la probabilidad de posibles resultados. Está basada en el Teorema de Bayes, también conocido como teorema de la probabilidad condicionada, el cual responde a la pregunta de qué probabilidad hay de que suceda un hecho asociado a una probabilidad que depende de que suceda otro hecho asociado a otra probabilidad. Presupone que la aparición o no de un atributo en un caso no influye en la aparición del resto de atributos. [19] Permite sólo variables categóricas. Las variables continuas deben ser categorizadas previamente a la construcción del modelo. La salida es, para cada etiqueta de la clase seleccionada, se asigna una puntuación de probabilidad (normalmente un logaritmo) proporcional a la auténtica probabilidad estimada. Se utiliza para detección de spam, clasificación de textos, detección de fraudes en seguros.. 4.1.2.. Algoritmo KNN - Nearest Neighbors. Es un método de clasificación supervisada que sirve para estimar la función de densidad F(x/Cj) de las características predictoras x por cada clase Cj. Es un método de clasificación no paramétrico, que estima el valor de la función de densidad de probabilidad o directamente la probabilidad a posteriori de que un elemento x pertenezca a la clase Cj a partir de la información proporcionada por el conjunto de prototipos. En el proceso de aprendizaje no se hace ninguna suposición acerca de la distribución de las variables predictoras. En el reconocimiento de patrones, el algoritmo KNN es usado como método de clasificación de elementos basado en un entrenamiento mediante ejemplos cercanos en el espacio de los elementos. KNN es un tipo de aprendizaje perezoso (lazy learning), donde la función se aproxima solo localmente y todo el cómputo es diferido a la clasificación. Se establece una distancia en el espacio vectorial de las variables predictoras (por ejemplo la distancia euclídea). Para clasificar un elemento se buscan los k registros más cercanos y se clasifica de acuerdo con la clase mayoritaria entre estos k datos. 24. Trabajo de Fin de Grado.

(45) CAPÍTULO 4. MARCO TEÓRICO. 4.1.3.. Algoritmo SVM Lineal. Los algoritmos SVM pertenecen a la familia de los clasificadores lineales. Dado un conjunto de puntos, subconjunto de un conjunto mayor (espacio), en el que cada uno de ellos pertenece a una de dos posibles categorías, un algoritmo basado en SVM construye un modelo capaz de predecir si un punto nuevo (cuya categoría desconocemos) pertenece a una categoría o a la otra. Los datos de entrada (los puntos) son vistos como un vector p-dimensional. La SVM busca un hiperplano que separe de forma óptima a los puntos de una clase de la de otra, que eventualmente han podido ser previamente proyectados a un espacio de dimensionalidad superior.. Figura 4.1: Ejemplo gráfico del algoritmo SVM Lineal En ese concepto de “separación óptima” es donde reside la característica fundamental de las SVM: este tipo de algoritmos buscan el hiperplano que tenga la máxima distancia (margen) con los puntos que estén más cerca de él mismo. Por eso también a veces se les conoce a las SVM como clasificadores de margen máximo. De esta forma, los puntos del vector que son etiquetados con una categoría estarán a un lado del hiperplano y los casos que se encuentren en la otra categoría estarán al otro lado. Los modelos basados en SVMs están estrechamente relacionados con las redes neuronales. Usando una función kernel, resultan un método de entrenamiento alternativo para clasificadores polinomiales, funciones de base radial y perceptrón multicapa.. 4.1.4.. Algoritmo RBF SVM. El algoritmo de SVM con Función de Base Radial (siglas en inglés RBF) es un tipo de algoritmo de Máquinas de Vectores Soporte (SVM). Las funciones de base radial (RBF)son también conocidas como funciones Gaussianas. El kernel RBF sobre dos muestras x y x’, representado como vector de características en un espacio de Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 25.

(46) CAPÍTULO 4. MARCO TEÓRICO entrada, se define como:.   ||x − x0 ||2 K(x, x0 ) = exp − 2σ 2. |x-x’|² es el cuadrado de la distancia Euclídea entre dos vectores de características. σ es un parámetro libre. Una definición equivalente pero más simple involucra el parámetro γ = 1/(2*σ²). K(x, x0 ) = exp −γ||x − x0 ||2. . Como el valor del kernel RBF decrece con la distancia y su valor se encuentra entre 0 y 1, ya se encuentra preparado para una interpretación de similitud. La característica espacio del kernel tiene un numero infinito de dimensiones, para σ=1.. Figura 4.2: Expansión del espacio de características del kernel para σ=1. 4.1.5.. Algoritmo de Árbol de Decisión. Utiliza un árbol de decisión como un modelo predictivo que mapea observaciones sobre un artículo a conclusiones sobre el valor objetivo del artículo. Los modelos de árbol, donde la variable de destino puede tomar un conjunto finito de valores se denominan árboles de clasificación. En estas estructuras de árbol, las hojas representan etiquetas de clase y las ramas representan las conjunciones de características que conducen a esas etiquetas de clase. Los árboles de decisión, donde la variable de destino puede tomar valores continuos (por lo general números reales) se llaman árboles de regresión. En análisis de decisión, un árbol de decisión se puede utilizar para representar visualmente y de forma explícita decisiones y toma de decisiones. En minería de datos, un árbol de decisión describe datos, pero no las decisiones; más bien el árbol de clasificación resultante puede ser un usado como entrada para la toma de decisiones.. 4.1.6.. Algoritmo de Bosques Aleatorios. Random forest (o random forests) también conocidos en castellano como “Bosques Aleatorios” es una combinación de árboles predictores tal que cada árbol depende de los valores de un vector aleatorio 26. Trabajo de Fin de Grado.

(47) CAPÍTULO 4. MARCO TEÓRICO probado independientemente y con la misma distribución para cada uno de estos. Es una modificación sustancial de bagging que construye una larga colección de árboles no correlacionados y luego los promedia. El método combina la idea de bagging de Breiman y la selección aleatoria de atributos para construir una colección de árboles de decisión con variación controlada. En muchos problemas el rendimiento del algoritmo de bosque aleatorio es muy similar a la del boosting, y es más simple de entrenar y ajustar. Por estos motivos es un algoritmo muy popular y ampliamente utilizado.. 4.1.7.. Algoritmo Red Neuronal. Basado en un gran conjunto de unidades neuronales simples (neuronas artificiales), de forma aproximadamente análoga al comportamiento observado en los axones de las neuronas en los cerebros biológicos. Cada unidad neuronal está conectada con muchas otras y los enlaces entre ellas pueden incrementar o inhibir el estado de activación de las neuronas adyacentes empleando funciones de suma. Cada neurona se comporta como una función cuyo resultado se propaga a las demás neuronas.. 4.1.8.. Algoritmo AdaBoost. AdaBoost es, entre los algoritmos de boosting, el más popular y quizá también el más importante históricamente ya que fue la primera formulación de un algoritmo que pudo aprender a partir de los clasificadores débiles. El algoritmo AdaBoost para categorización binario, en general, funciona de la siguiente manera: 1. Forma un conjunto grande de características sencillas 2. Inicializa pesos para entrenar imágenes 3. Para T iteraciones: a) Normalización de pesos, b) Para las características disponibles del conjunto, entrenamiento de un clasificador utilizando solo una característica y evaluación del error de formación c) Selección del clasificador con el error más bajo, d ) Actualización los pesos de las imágenes de formación: aumenta el peso si el clasificador clasifica de forma errónea el objeto, disminuye si lo hace correctamente 4. Formación de un clasificador final robusto como la combinación lineal de los T clasificadores. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 27.

(48) CAPÍTULO 4. MARCO TEÓRICO. 4.2.. Fugas de datos. La fuga de datos, o en inglés data leakage, es la creación de información adicional e inesperada en los datos de entrenamiento, permitiendo a un modelo de aprendizaje automático hacer predicciones excesivamente optimistas. Las fugas de datos hacen parecer que un modelo es muy preciso hasta que llega el momento de probarlo en la realidad, momento en el cual se comprueba que es altamente impreciso. Pueden ser producidos por fallos humanos o mecánicos. Las fugas de datos se pueden producir: por el tipo de características utilizadas o por un indebido manejo de datos. Tipos de fugas de datos: Por el tipo de características utilizadas: Se produce cuando las características utilizadas para predecir los resultados contienen datos con los que es imposible contar en el momento de hacer la predicción. Un ejemplo es si queremos predecir el precio que va a tener un producto con un mes de antelación y utilizamos una variable que indica qué precio tendrá el producto 2 semanas antes. Por un manejo incorrecto de los datos: Este tipo de fuga de datos se produce cuando tomamos decisiones en función de los datos de test o de las predicciones. Esto sucede cuando se hace un filtrado de características entrenando dicho filtro con el conjunto completo de datos, o con subconjuntos de datos de los que no dispondríamos en un escenario real. La manera correcta de manejar los datos es: 1. Dividir las características que forman el conjunto de datos en subconjunto de características predictoras (X) y características a predecir (y). 2. Dividir las muestras que forman el conjunto de datos en subconjunto de muestras de entrenamiento (X_train e y_train) y subconjunto de muestras de test (X_test e y_test), 3. El filtro de características se entrena utilizando las características predictoras de X_train. 4. Una vez se ha entrenado el filtro, se aplica la transformación que produce a las características predictoras de los subconjuntos de entrenamiento y test. De esta manera habremos aplicado el filtro de características tomando las decisiones de filtrado basándonos únicamente en las características predictoras del subconjunto de entrenamiento.. 28. Trabajo de Fin de Grado.

(49) 5 Metodología y diseño. Para llevar a cabo el estudio objeto de este proyecto se ha implementado una herramienta que cumple los siguientes requisitos:. 5.1.. Requisitos funcionales. El programa es capaz de: Leer el conjunto de ficheros binarios de goodware y malware, Hacer el análisis estático de cada uno de los ficheros binarios, Traducir los reportes de análisis estático de cada fichero binario a vector numéricos, Entrenar varios modelos de aprendizaje automático supervisado diferentes, Obtener de cada modelo sus predicciones, Medir para cada modelo: precisión, exhaustividad, f1 y recall. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 29.

(50) CAPÍTULO 5. METODOLOGÍA Y DISEÑO El programa cumple la anterior funcionalidad siguiendo los siquientes requisitos: Tener probada su ejecución en un sistema Debian GNU/Linux. Comportamiento configurable por medio de un fichero de configuración. Permitir configurar el comportamiento del programa en función de una etiqueta introducible por argumento que coincide con una etiqueta del fichero de configuración, No existen valores mágicos dentro del código, a lo sumo en constantes definidas al principio del código.. 5.2.. Requisitos software.. La funcionalidad descrita en los requisitos funcionales se consigue con un software que cumple las siguientes especificaciones: se escribe en lenguaje Python 3.6, puede hacer uso de las herramientas del sistema que se consideren convenientes, como es el caso de readelf y file. lee la configuración de un fichero de configuración que contará con las siguientes secciones: • sección de valores por defecto. • sección de configuraciones especificas que el usuario puede elegir en el momento de ejecutar el programa a través de un argumento de entrada. utiliza un logger para los mensajes informativos o de error que deban guardarse en un fichero de log, contiene la clase Dataset, la cual describe la forma y funcionalidad que necesita tener nuestro dataset. contiene la clase Binary_file, la cual describe la forma y funcionalidad que representa cada fichero binario. funcionalidad probada en el mismo sistema del cual procede el dataset analizado, es decir, un sistema Debian GNU/Linux Buster.. 30. Trabajo de Fin de Grado.

(51) CAPÍTULO 5. METODOLOGÍA Y DISEÑO. 5.3.. Proceso. Para la realización de este proyecto se han seguido dos caminos que se pueden considerar inversos: del dato al modelo y del modelo al dato. El flujo habitual de un proyecto de aprendizaje automático es el descrito en 5.1 y corresponde a lo que en este proyecto se ha llamado del dato al modelo.. Figura 5.1: Flujo de trabajo de aprendizaje automático supervisado Del dato al modelo: 1. Elección del dataset. 2. Elección de las herramientas a utilizar. 3. Análisis estático y generación de submatrices de características. 4. Filtrado de características por limitaciones de computabilidad por el criterio de menor varianza. 5. Selección de las K mejores características para clasificación por el criterio de Chi². 6. Entrenamiento de los modelos estadísticos elegidos, predicción y validación de resultados. 7. Análisis critico sobre los resultados obtenidos. Además se ha realizado un camino lógicamente inverso, al cual hemos llamado del modelo al dato, que ha consistido en identificar qué características o palabras corresponden a unos ciertos vectores de características. Este proceso se ha hecho con el objetivo de conocer mejor la información basada en datos utilizada por los algoritmos para su toma de decisiones. Este procedimiento permitirá llegar a un modelo de detección de malware. Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 31.

(52) CAPÍTULO 5. METODOLOGÍA Y DISEÑO Del modelo al dato: 8. Reiteración de las fases 5, 6 y 7 con diferente número de K-mejores características. 9. Identificación de las características utilizadas. 10. Conclusiones.. 5.4. 5.4.1.. Del dato al modelo Fase 1: Eleccción del dataset. Se ha elegido un dataset en el que, tanto malware como goodware, proporcionen fiabilidad de los datos, buscando que se trate de ficheros etiquetados y bien conocidos por la comunidad de análisis de malware.. Goodware: Debian GNU/Linux Buster Se ha descargado la distribución de Debian GNU/Linux Buster completa para dos arquitecturas diferentes, amd64 e i386, por medio de las 3 imágenes ISO de DVD disponibles para descarga en la web oficial de la distribución por torrent en el servidor de la página oficial de la distribución debian.org [13]. Se ha montado cada una en un directorio. A continuación, utilizando el script bajo estas lineas, se han descomprimido para cada arquitectura todos los ficheros *.deb en otro directorio, de manera que obtenemos una organización de ficheros en directorio destino equivalente a la obtenida al instalar los paquetes. Esto es así debido al formato de los paquetes Debian *.deb. #!/bin/bash # ######################################################################### # Descripcion: Busca todos los ficheros *.deb existentes a partir del # directorio en el cual se ejecuta este script y se descomprime cada uno # de ellos en el directorio definido por la variable $destdir. # ######################################################################### set -e srcdir="./" destdir="out". 32. Trabajo de Fin de Grado.

(53) CAPÍTULO 5. METODOLOGÍA Y DISEÑO mkdir -p $destdir while IFS= read -rd $'\0' file; do echo $file dpkg -x $file out done < <( find "$srcdir" -iname '*.deb' -print0 ). Malware: VirusShare, colección de malware Linux Se pusieron los 9482 ficheros de malware del dataset de Linux de VirusShare [2] en un directorio. De este conjunto de ficheros se seleccionaron los que cumplen con la definición de fichero binario que se describe más adelante en la sección de análisis estático 5.4.3, resultando con esta característica un total de 3565 ficheros binarios.. 5.4.2.. Fase 2: Elección de las herramientas a utilizar. Se ha elegido las herramientas del sistema file y readelf, la primera para detectar si el fichero es un fichero binario o no, y la segunda para analizar el fichero en caso de tratarse de un binario. El lenguaje utilizado para la programación de la herramienta ha sido Python3 y como lenguaje de apoyo y para el manejo de ficheros Bash script. El primero se eligió por la agilidad que permite en el desarrollo, versatilidad y soporte con que cuenta para aprendizaje automático. El segundo por ser la shell standard de los sistemas Linux y por su eficiencia a la hora de manejar ficheros. Scikit-learn es la librería principal de aprendizaje automático utilizada en este proyecto, la cual utiliza a su vez librerías más populares para este entorno como son numpy y pandas, y además cuenta con una muy buena documentación.. 5.4.3.. Fase 3: Análisis estático. Se han considerado como ficheros potencialmente binarios y candidatos para ser utilizados para el análisis estático todos aquellos ficheros que, formando parte del dataset, estuvieran almacenados en un directorio cuyo nombre termina en las letras “bin”. Finalmente, se ha considerado como fichero binario aquel sobre el cual, al ejecutar la herramienta File, devolviera por salida estándar un resultado que contuviera la cadena “ELF” y no contuviera la cadena “not an ELF”. Una vez se ha decidido que un fichero es binario, se ejecuta sobre él la herramienta readelf, la cual hace un análisis estático del mismo. Dicho resultado se transforma en una lista de instancias de clase Detección de malware de Linux con métodos de aprendizaje automático aplicados a datos de análisis estático. 33.

(54) CAPÍTULO 5. METODOLOGÍA Y DISEÑO Binary_file, la cual contiene el diccionario asociado al reporte readelf donde las claves son las palabras y el valor asociado a la clave es la cantidad de veces que dicha palabra se ha repetido en el informe readelf de ese fichero binario. Una vez decididos los criterios procedemos a parsear los informes estáticos para obtener 2 informaciones principales: Para cada binario, qué palabras aparecen y cuantas veces. Para el conjunto completo de todos los binarios, qué palabras aparecen y cuantas veces.. 5.4.4.. Fase 4: Selección de características. Una selección de las características adecuada eliminará ruido en los datos y acelerará el aprendizaje del modelo estadístico. Cada fichero binario está definido por un vector que representa las repeticiones de cada palabra en el reporte generado en su análisis estático. Todos los vectores completos apilados forman la matriz completa de características. Como ejemplo tomaremos en dataset formado por los binarios amd64 + malware, de manera que el tamaño de esta matriz se puede calcular de la siguiente manera: Tamaño total de la matriz de características sin filtrado = nº de muestras * nº de características * tamaño de cada componente del vector de características. Siendo: nº de muestras: 9896 ficheros binarios teniendo en cuenta goodware y malware, nº de características: 12.384.366 palabras distintas generadas por todos los reportes estáticos de los binarios, tamaño de cada componente del vector de características: dado que cada componente es almacenado en un Dataframe Pandas el cual esta coompuesto por variables de tipo float64, las cuales están compuestas por: 52 bits de mantisa + 11 bits de exponente + 1 bit de signo = 64 bits = 8 bytes. De esta manera, el tamaño resultante es: 9896 * 12.384.366 * 8 bytes = 980.445.487.488 bytes = 486815038,475 Kbytes = 475.405,31101 Mbytes = 464,262999034 Gbytes Esta matriz, debido a su tamaño, es inmanejable por el equipamiento informático con el que contamos para hacer este trabajo. 34. Trabajo de Fin de Grado.

Referencias

Documento similar

Como medida de precaución, puesto que talidomida se encuentra en el semen, todos los pacientes varones deben usar preservativos durante el tratamiento, durante la interrupción

dente: algunas decían que doña Leonor, &#34;con muy grand rescelo e miedo que avía del rey don Pedro que nueva- mente regnaba, e de la reyna doña María, su madre del dicho rey,

Abstract: This paper reviews the dialogue and controversies between the paratexts of a corpus of collections of short novels –and romances– publi- shed from 1624 to 1637:

Y tendiendo ellos la vista vieron cuanto en el mundo había y dieron las gracias al Criador diciendo: Repetidas gracias os damos porque nos habéis criado hombres, nos

por unidad de tiempo (throughput) en estado estacionario de las transiciones.. de una red de Petri

Por lo tanto, en base a su perfil de eficacia y seguridad, ofatumumab debe considerarse una alternativa de tratamiento para pacientes con EMRR o EMSP con enfermedad activa

o Si dispone en su establecimiento de alguna silla de ruedas Jazz S50 o 708D cuyo nº de serie figura en el anexo 1 de esta nota informativa, consulte la nota de aviso de la

 Tejidos de origen humano o sus derivados que sean inviables o hayan sido transformados en inviables con una función accesoria..  Células de origen humano o sus derivados que