Mendizale - Bizkaiko Foru Aldundia

Anuncio
Mendizale
15 de noviembre de 2006
Resumen
Ante la creciente magnitud del problema del aseguramiento de la Seguridad de la Información
en sistemas y redes de comunicaciones de todo tipo, los tradicionales mecanismos pasivos de
aislamiento y control de acceso se muestran insucientes para contener el extraordinariamente
ascendente número de ataques e intentos de int
rusión, bien indiscriminados, bien selectivos, que se producen en la actualidad.
De este modo, en dichas circunstancias, el área de conocimiento de la Detección de Intrusiones, caracterizada fundamentalmente por su comportamiento activo y por el uso de técnicas de
Inteligencia Articial más o menos ambiciosas y sosticadas, se muestra como una de las tecnologías de seguridad más prometedoras, a medio plazo. Así, es posible encontrar actualmente
soluciones comerciales de detección sólidas y de reconocido prestigio, las cuales, bien orientadas
a la monitorización de equipamientos especícos, bien orientadas a la supervisión de redes de
comunicación completas, abogan por la utilización de modelos de representación de conocimiento
e inferencia basados en el concepto de Sistema Experto, de encadenamiento de reglas.
De esta manera, por lo general, el conocimiento disponible en relación con ataques documentados contra dichos equipamientos o redes de comunicación, queda representado en forma
de reglas de producción, confeccionadas por el administrador humano. Dichos Sistemas de Detección de Usos Indebidos, se caracterizan por ser muy precisos en sus decisiones, amén de por
un habitual alto nivel de eciencia. Sin embargo, presentan una importante limitación: no son
capaces de responder ante lo que no conocen. O lo que es lo mismo, ante la posibilidad de que
un hipotético atacante pueda disponer del conocimiento del sistema de detección (cuestión realmente factible en la mayoría de casos), para a partir de él introducir ligeras modicaciones en
sus procedimientos de ataque que camuen sus acciones, o bien ante ataques completamente
novedosos, simplemente no hay respuesta.
Por ello, la comunidad cientíca estudia actualmente posibles soluciones a este inconveniente,
apareciendo el concepto de Detección de Anomalías como un elemento de análisis indispensable
a medio plazo, bien en forma de complemento al tradicional enfoque de detección de usos indebidos, patrones o rmas, o bien como superconjunto semántico de éste. Para ello, en general,
dicho enfoque de Detección de Anomalías, persigue el objetivo de ser capaz de proporcionar una
respuesta incluso ante situaciones de riesgo no conocidas de antemano, en base a la elaboración
del perl de comportamiento del sistema a monitorizar, y al cálculo de desviaciones de la actividad cotidiana con respecto a dicho perl. Así, toda desviación sucientemente signicativa será
considerada como una anomalía del sistema, y susceptible por tanto de ser noticada al operador humano en forma de señal de alarma, de manera que sea posible un análisis pormenorizado
de las causas de dicha alarma, o de procesarse automáticamente, en la línea del paradigma de
Prevención de Intrusiones.
De esta forma, con el objetivo de proporcionar una respuesta completa por parte del sistema de detección, tanto ante ataques conocidos como ante ataques no conocidos, la presente
tesis doctoral explora el camino de la unicación de los dos grandes paradigmas de Detección de
Intrusiones, mediante la utilización de modelos de representación de conocimiento e inferencia
de conclusiones basados en el concepto de Red Bayesiana, el cual contempla de manera intrínseca toda la potencia de representatividad de los tradicionales Sistemas Expertos basados en
reglas, amén de un amplio conjunto de poderosas capacidades adicionales, como son: inferencia explicativa de conclusiones, encadenamiento omnidireccional de relaciones de causalidad y/o
correlación, representación intrínseca de la magnitud temporal, aprendizaje estructural (o Data
Mining Bayesiano) a partir de los datos, aprendizaje paramétrico completo o secuencial a partir
de dichos datos, capacidad de adaptación del modelo de conocimiento a variaciones del sistema
observado, o posibilidad de obtención, mediante análisis de sensibilidades, de un esquema cualitativo y cuantitativo de la representatividad y grado de interdependencia de los parámetros que
componen el ámbito del problema. De este modo, a partir de los estudios y experimentaciones
llevadas a cabo en la presente tesis doctoral, se consigue un potente modelo de representación
de conocimiento a partir del cual se desarrolla un motor de razonamiento adaptativo capaz de
inferir conclusiones que contemplan, de un modo unicado y homogéneo en el tratamiento de los
diversos tipos de parámetros de detección, tanto conocimiento propio del paradigma de Detección
de Usos Indebidos, por un lado, como conocimiento característico del paradigma de Detección
de Anomalías, por otro.
Estos paradigmas se aplican en este proyecto al mundo de la tecnología móvil que se va a ir
introduciendo poco a poco a lo largo de esta memoria.
2
Índice general
1. Introducción
17
1.1. El papel de la detección de Intrusiones en la Sociedad de la Información . . . . .
2
1.2. El papel innovador de la Detección de Intrusiones para dispositivos móviles . . .
12
1.3. Conceptos Fundamentales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
1.3.1. Conceptos Fundamentales de la Seguridad de la Información . . . . . . . .
15
1.3.2. Conceptos de Detección de Intrusiones . . . . . . . . . . . . . . . . . . . .
18
1.3.3. Modelo general de funcionamiento . . . . . . . . . . . . . . . . . . . . . .
20
1.3.4. Características de los diferentes enfoques
. . . . . . . . . . . . . . . . . .
26
1.4. Retos por alcanzar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
1.4.1. Respuesta ante ataques no conocidos (Zero-Day Attacks) contra teléfonos
móviles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4.2. Aprendizaje Bayesiano no supervisado de perles de usuario
45
. . . . . . .
45
1.4.3. Unicación de modelos de detección de intrusiones . . . . . . . . . . . . .
46
1.4.4. Respuesta preventiva mediante intercepción de llamadas al sistema . . . .
47
1.4.5. Optimización de tasas de falsos positivos y falsos negativos . . . . . . . .
47
1.4.6. Superación de limitaciones arquitectónicas . . . . . . . . . . . . . . . . . .
47
1.4.7. Base de conocimiento estándar . . . . . . . . . . . . . . . . . . . . . . . .
48
1.4.8. Análisis de tráco de redes inalámbricas . . . . . . . . . . . . . . . . . . .
48
1.4.9. Reducción de requerimientos administrativos . . . . . . . . . . . . . . . .
48
1.4.10. Adaptación al comportamiento del sistema . . . . . . . . . . . . . . . . . .
49
1.4.11. Fortalecimiento del sistema de detección . . . . . . . . . . . . . . . . . . .
49
1.4.12. Reducción del consumo de recursos computacionales . . . . . . . . . . . .
50
1.5. Hipótesis fundamentales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
1.6. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
1.7. Estructura de la memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
2. Entorno De Trabajo
57
2.1. Detección de Intrusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
2.1.1. Perspectiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
3
2.1.2. Modelo conceptual de Lundin . . . . . . . . . . . . . . . . . . . . . . . . .
59
2.1.3. Taxonomía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
2.2. Técnicas de análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
2.2.1. Detección de Usos Indebidos . . . . . . . . . . . . . . . . . . . . . . . . . .
76
2.2.2. Detección de Anomalías . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87
2.2.3. Modelo General de Denning . . . . . . . . . . . . . . . . . . . . . . . . . . 106
2.3. Implicaciones Arquitectónicas en el Análisis . . . . . . . . . . . . . . . . . . . . . 108
2.3.1. Detección basada en Agentes de Software . . . . . . . . . . . . . . . . . . 108
2.3.2. Detección basada en Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . 110
2.3.3. Sistema Inmunológico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
2.4. Técnicas de Análisis especícas para Host Intrusion Detection Systems (HIDS) . 111
2.4.1. Preámbulo: Ataques Mimicry en Sistemas de Detección de Intrusiones . . 112
2.4.2. Detección mediante Análisis Forense . . . . . . . . . . . . . . . . . . . . . 114
2.4.3. Detección basada en análisis estático o instrumentación binaria del sistema 116
2.4.4. Detección basada en rmas . . . . . . . . . . . . . . . . . . . . . . . . . . 119
2.4.5. Detección de ataques contra la lógica de las aplicaciones . . . . . . . . . . 121
2.4.6. Detección basada en Secuencias de Syscalls . . . . . . . . . . . . . . . . . 123
2.4.7. Detección basada en grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
2.4.8. Visualización e identicación del contexto de las intrusiones desde las trazas
de llamadas al sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
2.4.9. Modelación de llamadas al sistema mediante ventana deslizante . . . . . . 136
2.4.10. Modelado de trayectorias de syscalls mediante en análisis del código fuente 145
2.4.11. Solución de instrumentación mediante criptografía . . . . . . . . . . . . . 150
2.4.12. Solución mediante virtualización para terminales móviles . . . . . . . . . . 151
2.5. Modelos de redes probabilísticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
2.5.1. Modelos de Redes Probabilísticas . . . . . . . . . . . . . . . . . . . . . . . 154
2.5.2. Aprendizaje Estructural . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
2.5.3. Modelado de la información de estado [137] . . . . . . . . . . . . . . . . . 182
3. ESIDE-Mendizale Un Framework Bayesiano de detección de intrusiones
213
3.1. Análisis de riesgos y formalización . . . . . . . . . . . . . . . . . . . . . . . . . . 213
3.1.1. Posibles parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
3.1.2. Selección realizada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
3.1.3. Futuros parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
3.2. Recogida de información . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
3.2.1. Recogida de información en sistemas GNU/Linux . . . . . . . . . . . . . . 230
3.2.2. Recogida de información en sistemas Windows Mobile. . . . . . . . . . . . 252
3.2.3. Recogida de información en sistemas Windows. . . . . . . . . . . . . . . . 258
3.2.4. Recogida de información en sistemas Symbian OS. . . . . . . . . . . . . . 270
4
3.3. Cuestiones arquitectónicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
3.3.1. Riesgo tecnológico, un problema en alza.
. . . . . . . . . . . . . . . . . . 280
3.3.2. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
3.3.3. Detección de intrusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
3.3.4. Introducción a DFSU
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
3.3.5. Estructura básica de DFSU . . . . . . . . . . . . . . . . . . . . . . . . . . 303
3.3.6. DFSU un programa polifacético . . . . . . . . . . . . . . . . . . . . . . . . 312
3.3.7. Componentes de DFSU . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
3.3.8. DFSU primeros pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
3.3.9. DFSU conguración y puesta en marcha de una instancia . . . . . . . . . 334
3.3.10. DFSU descripción de las interfaces . . . . . . . . . . . . . . . . . . . . . . 350
3.4. Análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
3.4.1. Modelo General Operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
3.4.2. Obtención de la Muestra Evidencial. . . . . . . . . . . . . . . . . . . . . . 357
3.4.3. Aprendizaje e Inferencia de Expertos Mendizale . . . . . . . . . . . . . . . 360
3.4.4. Proceso de Razonamiento en la Red Naive de Unicación de Conclusiones 367
3.5. Respuesta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
3.5.1. Tipos de respuestas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
3.5.2. Respuesta implementada en ESIDE-Mendizale. . . . . . . . . . . . . . . . 373
3.6. Fortaleza
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
3.7. Cuestiones Operacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
3.8. Aspectos sociales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
4. Conclusiones y líneas de investigación futuras
379
4.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
4.2. Líneas de investigación futuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
5
6
Índice de guras
1.1. Ratio de plataformas PC compatible infectadas en el mundo . . . . . . . . . . . .
2
1.2. Utilización de Internet por parte de empresas y organizaciones con sede en la UE
5
1.3. Utilización de Internet por parte de individuos particulares residentes en la UE .
5
1.4. Crecimiento del número de usuarios en el territorio español, en miles de usuarios
6
1.5. Evolución del comercio electrónico durante los últimos años (en Euros) . . . . . .
7
1.6. Evolución del comercio electrónico durante los últimos años (en número de transacciones) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.7. Evolución del número de incidentes de seguridad reportados anualmente por CERT/CC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
1.8. Evolución del número de incidentes de seguridad reportados anualmente por FBI
y CSI en su Computer Crime and Security Survey
. . . . . . . . . . . . . . . . .
10
1.9. Relación entre el nivel de preparación del hacker y el grado de sosticación de sus
ataques, según estudios realizados por CERT/CC . . . . . . . . . . . . . . . . . .
11
1.10. Modelo General de Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . .
21
1.11. Taxonomía general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
2.1. Modelo conceptual de Lundin . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
2.2. Taxonomía de Alessandri et al. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
2.3. Modelo general de Alessandri et al. . . . . . . . . . . . . . . . . . . . . . . . . . .
66
2.4. Taxonomía de Allen et al. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
2.5. Taxonomía de Bace y Mell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
2.6. Taxonomía de Axelsson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
2.7. Taxonomía de Debar, Dacier y Wespi . . . . . . . . . . . . . . . . . . . . . . . . .
69
2.8. Taxonomía revisada de Debar, Dacier y Wespi. . . . . . . . . . . . . . . . . . . .
70
2.9. Taxonomía de Lazarevic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
2.10. Taxonomía de Krügel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
2.11. Taxonomía de Indican CERT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
2.12. Arquitectura CIDF.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
2.13. Taxonomía ESIDE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
74
2.14. Ubicación de hipótesis fundamentales . . . . . . . . . . . . . . . . . . . . . . . . .
75
7
2.15. Modelo general de Detección de Usos Indebidos. . . . . . . . . . . . . . . . . . . .
77
2.16. Batería de reglas de Snort para detección de Shellcodes . . . . . . . . . . . . . . .
78
2.17. Firma de Snort para detección de ataques contra Apache . . . . . . . . . . . . . .
78
2.18. Firma de Bro para detección de ataques contra Apache . . . . . . . . . . . . . . .
78
2.19. Batería de reglas de Dragon para detección de Shellcodes . . . . . . . . . . . . . .
79
2.20. Firma de NFR para detección del histórico ataque Land Attack . . . . . . . . . .
79
2.21. Regla de MIDAS para monitorización de cuentas de usuario privilegiadas . . . . .
81
2.22. Regla de MIDAs para análisis de horario inusual en el acceso a cuentas de usuario
81
2.23. Base de hechos de P-BEST/EMERALD para detección del histórico ataque TCP
SYN Flood. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
2.24. Batería de reglas de P-BEST/EMERALD para detección del histórico ataque TCP
SYN Flood . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
2.25. Escenario de STAT para detección de ataques contra servidores IMAP . . . . . .
84
2.26. Especicación en lenguaje STATL de escenario de STAT para detección de ataque
contra servidores IMAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
2.27. Reglas de Snort para detección de ataques contra servidores IMAP . . . . . . . .
85
2.28. Red de Petri de IDIOT para validación del proceso de login . . . . . . . . . . . .
85
2.29. Modelo general de Detección de Anomalías
. . . . . . . . . . . . . . . . . . . . .
88
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
94
2.31. Árbol de reglas de Wisdom and Sense . . . . . . . . . . . . . . . . . . . . . . . .
95
2.32. Aplicación de redes neuronales a Detección de Intrusiones . . . . . . . . . . . . .
96
2.33. Firma ISL de NFR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97
2.34. Batería de reglas ISL de P-BEST/EMERALD . . . . . . . . . . . . . . . . . . . .
98
2.35. Firma ISL del MIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
2.36. Red Bayesiana trivial de modelado de actividad intrusiva . . . . . . . . . . . . . .
99
2.30. Batería de reglas de TIM
2.37. Algoritmo Genético general, en pseudocódigo . . . . . . . . . . . . . . . . . . . . 100
2.38. Clasicaciones convencional y difusa de un parámetro de detección . . . . . . . . 101
2.39. Clasicación de eventos basada en máquina de vector soporte . . . . . . . . . . . 102
2.40. Modelo General de Detección de Intrusiones de Denning . . . . . . . . . . . . . . 107
2.41. Modelo General de Detección de Intrusiones de Denning . . . . . . . . . . . . . . 109
2.42. Representación conceptual de GrIDS de una epidemia vírica . . . . . . . . . . . . 110
2.43. Grafo de dependencia que puede seguirse realizando operaciones de BackTracking 116
2.44. Ciclo de vida de una vulnerabilidad en software . . . . . . . . . . . . . . . . . . . 120
2.45. Grafo de llamadas que se producen desde código fuente. . . . . . . . . . . . . . . 124
2.46. Grafo de llamadas entre librerías . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
2.47. Arquitectura bayesiana del sistema de detección de anomalías para host propuesto
en [95] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
2.48. Código fuente y grafo de ejecución presentado en el paper [141] . . . . . . . . . . 130
8
2.49. Arquitectura de un sistema de detección de intrusiones sin (izq) y con (dch) un
módulo de identicación del contexto de intrusiones (ICI) . . . . . . . . . . . . . 131
2.50. Set de datos utilizados para el FSG . . . . . . . . . . . . . . . . . . . . . . . . . . 133
2.51. Ejemplo de FSG para diferentes procesos . . . . . . . . . . . . . . . . . . . . . . . 133
2.52. Número de Secuencias Anómalas Mínimas (MFS) no duplicadas en todos los set
de datos intrusivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
2.53. Secuencias Anómalas Mínimas (MFS) compartidas por la misma intrusión en el
mismo proceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
2.54. Entropía condicional del modelo de ventana deslizante . . . . . . . . . . . . . . . 137
2.55. Entropía condicional para una ventana de tamaño n
. . . . . . . . . . . . . . . 137
2.56. Ejemplo de grafo de llamadas al sistema . . . . . . . . . . . . . . . . . . . . . . . 139
2.57. Un árbol de sujos para el ejemplo de la cadena A B C C A B B C C A A B C . 141
2.58. Árbol de sujos con punteros de sujos incluidos . . . . . . . . . . . . . . . . . . 141
2.59. Árbol nal resultante de la compresión de la gura anterior . . . . . . . . . . . . 142
2.60. Ejemplo de código y representación de representación NFA . . . . . . . . . . . . . 143
2.61. Ejemplos de implementación de IAM . . . . . . . . . . . . . . . . . . . . . . . . . 143
2.62. Ejemplo de recursividad y autómata generado. . . . . . . . . . . . . . . . . . . . 144
2.63. Ejemplo de recursividad indirecta y autómata generado. . . . . . . . . . . . . . . 144
2.64. Ejemplo de código y modelo HPDA . . . . . . . . . . . . . . . . . . . . . . . . . . 145
2.65. Ejemplo de un programa en C asociado a un modelo de grafo de llamadas (NFA)
y un modelo NDPDA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
2.66. Proceso de llamada a getuid utilizando el modelo VSL. . . . . . . . . . . . . . . . 148
2.67. Proceso de llamada getuid utilizando el modelo VPStatic. . . . . . . . . . . . . . 149
2.68. Instalación del programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
2.69. Comprobación de las syscalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
2.70. Imagen de la arquitectura de los nuevos procesadores para terminales de tercera
generación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
2.71. Comunicación VMM asimétricos . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
2.72. Comunicación dinámica inter-dominio . . . . . . . . . . . . . . . . . . . . . . . . 154
2.73. ID de los registros del procesador lógico virtual . . . . . . . . . . . . . . . . . . . 154
2.74. Esquema de la propagación en poliárboles . . . . . . . . . . . . . . . . . . . . . . 159
2.75. Ejemplo de red naive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
2.76. Ejemplo de sustración de nodos en red Naive . . . . . . . . . . . . . . . . . . . . 162
2.77. Ejemplo de adición de un nodo a una red Naive . . . . . . . . . . . . . . . . . . . 163
2.78. Red bayesiana de ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
2.79. Trayectoria Del Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
2.80. Cadena de Markov . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
2.81. Cadena de Markov representada como red bayesiana . . . . . . . . . . . . . . . . 185
9
2.82. Tablas de probabilidad condicionada . . . . . . . . . . . . . . . . . . . . . . . . . 186
2.83. Cadena de Markov y la evolución de sus estados. . . . . . . . . . . . . . . . . . . 190
2.84. Ejemplo de PHMM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
2.85. Ejemplo de IDHMM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
2.86. Ejemplo de HHMM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
2.87. Ejemplo de integración de cadenas interrelacionadas . . . . . . . . . . . . . . . . 192
2.88. Otra aproximación para la integración de cadenas interracionadas . . . . . . . . . 192
2.89. Complejidad del algoritmo Fordward . . . . . . . . . . . . . . . . . . . . . . . . . 195
2.90. Complejidad del algoritmo de Backward . . . . . . . . . . . . . . . . . . . . . . . 196
2.91. Cálculo del algoritmo de Viterbi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
3.1. Imagen del monitor de anomalías desarrollado por Teresa F.Lunt y R. Jagannathan.214
3.2. Arquitectura interna de los sistemas operativos . . . . . . . . . . . . . . . . . . . 218
3.3. Abstracción a dos niveles en sistemas Linux . . . . . . . . . . . . . . . . . . . . . 219
3.4. Formato IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
3.5. Formato TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
3.6. Formato UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
3.7. Formato ICMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
3.8. Esquema de la estructura del kernel
. . . . . . . . . . . . . . . . . . . . . . . . . 231
3.9. Proceso de llamada a una syscall . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
3.10. Ejemplo utilización del comando strace . . . . . . . . . . . . . . . . . . . . . . . . 234
3.11. Esquema de llamada a una interrupción mediante interrupción . . . . . . . . . . 240
3.12. Logo de SuSE, distribución alemana, respaldada por la empresa Novell . . . . . . 241
3.13. Logo del agente de snare para sistemas GNU/Linux . . . . . . . . . . . . . . . . . 242
3.14. Esquema del formato Portable Ejecutable . . . . . . . . . . . . . . . . . . . . . . 254
3.15. Esquema de llamadas para ejecutar una operación a nivel de kernel.
. . . . . . . 255
3.16. Esquema de la información contenida en la estructura KDataStruct . . . . . . . . 256
3.17. Detalle de interfaz de usuario del agente. . . . . . . . . . . . . . . . . . . . . . . . 257
3.18. Esquema de memoria de NT, y posible puntos de recolección de datos. . . . . . . 261
3.19. Ejemplo de modicación de memoria en el punto de inicio . . . . . . . . . . . . . 264
3.20. Esquema de funcionamiento de la librería strace . . . . . . . . . . . . . . . . . . . 266
3.21. Monitorización de syscalls de un proceso infectado con el virus Satir.994 utilizando
strace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
3.22. Interfaz de usuario del agente, menús generales. . . . . . . . . . . . . . . . . . . . 269
3.23. Menú de selección de syscalls hookeadas . . . . . . . . . . . . . . . . . . . . . . . 269
3.24. Simplicación de la arquitectura de Symbian OS . . . . . . . . . . . . . . . . . . 270
3.25. Formato interno de los cheros ejecutables y librerías para Symbian OS . . . . . 272
3.26. Modelo simplicado de la arquitectura de procesadores de un terminal Symbian OS272
3.27. Capas del núcleo de Symbian OS . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
10
3.28. Llamada ejecutiva al kernel de Symbian OS . . . . . . . . . . . . . . . . . . . . . 274
3.29. Código fuente en el que se realiza la llamada para reservar una porción de memoria275
3.30. Arquitectura de los drivers de dispositivo simplicada
. . . . . . . . . . . . . . . 277
3.31. Selección de hilos en ejecución a interceptar . . . . . . . . . . . . . . . . . . . . . 278
3.32. Volcado de la memoria y de las peticiones que se realizan a la librería . . . . . . . 279
3.33. Detalles de un hilo en ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
3.34. Run-Mode Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
3.35. Ecuación del riesgo tecnológico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
3.36. Seguridad Perimetral (Firewall) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
3.37. Etapas en el proceso de detección
3.38. Logotipo de Snort
. . . . . . . . . . . . . . . . . . . . . . . . . . 284
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
3.39. Cabecera IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
3.40. Denición de patrones de uso indebido . . . . . . . . . . . . . . . . . . . . . . . . 290
3.41. Esquema de funcionamiento; Modelo de usos indebidos . . . . . . . . . . . . . . . 291
3.42. Ataque según la losofía de detección de anomalías . . . . . . . . . . . . . . . . . 292
3.43. Esquema de funcionamiento de un modelo de detección de anomalías . . . . . . . 294
3.44. IPS integrado en una red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
3.45. Taxonomía de los sistemas de detección de intrusiones . . . . . . . . . . . . . . . 301
3.46. Arquitectura de tres capas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
3.47. Correlacionando HIDS y NIDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
3.48. Estructura de dos capas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
3.49. Estructura de tres capas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
3.50. Estructura con plugins distribuidos . . . . . . . . . . . . . . . . . . . . . . . . . . 310
3.51. Estructura de Heads jerárquicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
3.52. Estructura de herencia de los plugins . . . . . . . . . . . . . . . . . . . . . . . . . 317
3.53. Clase PlugSkel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
3.54. Clase ExpertSkel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
3.55. Deln opciones de conguración . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
3.56. Deln cambiando el modo de funcionamiento . . . . . . . . . . . . . . . . . . . . 322
3.57. Deln mostrando el modo de funcionamiento actual . . . . . . . . . . . . . . . . . 323
3.58. Listado de modos de funcionamiento de Deln . . . . . . . . . . . . . . . . . . . . 323
3.59. Deln ejemplo de una alerta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
3.60. eForwarder opciones de conguración . . . . . . . . . . . . . . . . . . . . . . . . . 325
3.61. eForwarder listado de modos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
3.62. eForwarer mostrando el modo de funcionamiento actual . . . . . . . . . . . . . . 326
3.63. eForwarder cambiando el modo de funcionamiento . . . . . . . . . . . . . . . . . 326
3.64. Stats, ejemplo de estadisticas de sistema. . . . . . . . . . . . . . . . . . . . . . . . 327
3.65. Head con un tail y dos masters conectados . . . . . . . . . . . . . . . . . . . . . . 347
11
3.66. Plugins cargados en el Head . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
3.67. Plugins cargados en el Tail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
3.68. Visualización de las alertas en el Head . . . . . . . . . . . . . . . . . . . . . . . . 349
3.69. Pantalla principal servidor WebOs . . . . . . . . . . . . . . . . . . . . . . . . . . 350
3.70. Graco del sysload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
3.71. Pantalla de información gráca sobre el Tail . . . . . . . . . . . . . . . . . . . . . 352
3.72. Pantalla de inicio de la consola . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
3.73. Comandos de consola para webOs . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
3.74. Pantalla de ayuda de la consola . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
3.75. Comandos de consola ls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
3.76. Aprendizaje de Parámetros de las llamadas al Sistema . . . . . . . . . . . . . . . 364
3.77. Aprendizaje de Parámetros de las llamadas al Sistema . . . . . . . . . . . . . . . 365
3.78. Aprendizaje de Parámetros de las llamadas al Sistema . . . . . . . . . . . . . . . 366
3.79. Ejemplo de envío de alerta de ataque al telefono móvil (Respuesta pasiva). . . . . 370
3.80. Problemática de la respuesta activa en sistemas NIDS . . . . . . . . . . . . . . . 372
3.81. Ejemplo de arquitectura del sistema, que asegura la fortaleza del sistema mediante
VPNs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
12
Índice de cuadros
1.1. Utilización de Internet en las diferentes regiones del globo . . . . . . . . . . . . .
3
1.2. Utilización de Internet en las diferentes regiones del globo . . . . . . . . . . . . .
4
1.3. Previsiones de crecimiento del Comercio Electrónico, según Forrester, IDC y eMarketer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.4. Previsiones de crecimiento del Comercio Electrónico, según Forrester, IDC y eMarketer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.5. Áreas de investigación sobre Detección de Intrusiones con mayor actividad . . . .
35
2.1. Líneas de Investigación sobre Detección de Intrusiones . . . . . . . . . . . . . . .
64
2.2. Relación entre retos de la Detección de Intrusiones y líneas de investigación . . .
65
2.3. Métricas utilizadas en el sistema IDES de Detección de Intrusiones basada en perles 92
2.4. Tabla de probabilidades de la gura . . . . . . . . . . . . . . . . . . . . . . . . . 185
2.5. Implementación del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
3.1. Tipo y valores posibles de cada parámetro . . . . . . . . . . . . . . . . . . . . . . 224
3.2. Tipos y posibles parámetros del protocolo TCP . . . . . . . . . . . . . . . . . . . 225
3.3. Tipos y posibles parámetros de UDP . . . . . . . . . . . . . . . . . . . . . . . . . 226
3.4. Tipos y posibles parámetros ICMP . . . . . . . . . . . . . . . . . . . . . . . . . . 227
3.5. Tipo y parámetros de bajo nivel de Snort . . . . . . . . . . . . . . . . . . . . . . 227
3.6. Tipo y parámetros de alto nivel de Snort . . . . . . . . . . . . . . . . . . . . . . . 228
3.7. Parámetros que proponen Mahoney y Chan[364]. . . . . . . . . . . . . . . . . . . 228
3.9. Parámetros de alto nivel de Marina Bykova . . . . . . . . . . . . . . . . . . . . . 229
3.8. Parámetros y tipos de Marina Bykova . . . . . . . . . . . . . . . . . . . . . . . . 229
3.10. Fichero de compilación compileAll.sh . . . . . . . . . . . . . . . . . . . . . . . . . 334
3.11. Fichero slaveconf.xml del Head y del Tail
. . . . . . . . . . . . . . . . . . . . . . 335
3.12. Fichero oaconf.xml del head y del tail . . . . . . . . . . . . . . . . . . . . . . . . 337
3.13. Fichero webos.xml del Head y del Tail . . . . . . . . . . . . . . . . . . . . . . . . 338
3.14. Fichero reload.sh del Syshooker . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
3.15. Fichero mastercong.xml del Syshooker . . . . . . . . . . . . . . . . . . . . . . . 340
3.16. Fichero dfsumcon.cfg del Snort Modicado . . . . . . . . . . . . . . . . . . . . . 341
3.17. Fichero run.sh del Snort Modicado . . . . . . . . . . . . . . . . . . . . . . . . . 341
13
3.18. Ejemplo de conguración del chero dfsumcong.cfg del Snort Modicado . . . . 344
3.19. Ejemplo de conguración del chero run.sh en el Snort Modicado . . . . . . . . 344
3.20. Ejemplo de conguración del chero mastercong.xml en el Syshooker . . . . . . 344
3.21. Ejemplo de conguración del archivo slaveconf.xml en el Head . . . . . . . . . . . 345
3.22. Ejemplo de conguración del chero slaveconf.xml en el Tail . . . . . . . . . . . . 346
3.23. Listado de llamadas al sistema por el PID 2d82b0aa . . . . . . . . . . . . . . . . 362
3.24. Listado de parámetros para realizar una llamada write en GNU/Linux . . . . . . 363
3.25. Listado de llamadas al sistema por el PID 2d82b0aa (recordatorio) . . . . . . . . 365
14
Listings
2.1. Ejemplo de un ataque Mimicry . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
2.2. Hola esto es una prueba aquí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
3.1. Prototipo de función VirtualAlloc de la API Win32. . . . . . . . . . . . . . . . . 220
3.2. Prototipo de la función malloc para sistemas linux provista por el API de glibc. . 220
3.3. Prototipo de syscalls write (código 4) y kill (código 37) de sistemas GNU/linux . 221
3.4. Prototipo de la función NTCreateFile del kernel de Windows . . . . . . . . . . . 221
3.5. Ejemplo de programa en ensamblador . . . . . . . . . . . . . . . . . . . . . . . . 232
3.6. Ejemplo de la mejora con lenguaje C . . . . . . . . . . . . . . . . . . . . . . . . . 233
3.7. Macro para llamar a syscall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
3.8. Contenido de unistd.h los números de las syscalls . . . . . . . . . . . . . . . . . . 235
3.9. Denición de la IDT en linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
3.10. Inicialización de la IDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
3.11. Gestión de la interrupción 80 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
3.12. Gestión de la llamada sysenter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
3.13. Prototipo de la función ptrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
3.14. Ejemplo de un módulo básico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
3.15. Función que obtiene la base del vector de syscalls . . . . . . . . . . . . . . . . . . 245
3.16. Ejemplo de la intercepción de la syscall Kill . . . . . . . . . . . . . . . . . . . . . 246
3.17. Líneas que son sobreescritas con un salto a la función. . . . . . . . . . . . . . . . 248
3.18. Shellcode a la que saltamos cuando se llama a la función.
. . . . . . . . . . . . . 249
3.19. Ejemplo de la creación y destrucción de un dispositovo /proc. . . . . . . . . . . . 250
3.20. Código que permite saber el ejecutable padre del que proviene el proceso. . . . . 252
3.21. Utilizanción de int2Eh en Windows . . . . . . . . . . . . . . . . . . . . . . . . . . 259
3.22. Utilizanción de int2Eh en Windows . . . . . . . . . . . . . . . . . . . . . . . . . . 259
3.23. Denición de la clase hEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
3.24. Ejemplo para obtener el Identicativo de la CPU en ensamblador sobre sistemas
GNU/Linux en nomenclatura AT&T . . . . . . . . . . . . . . . . . . . . . . . . . 362
15
16
Capítulo 1
Introducción
17
Resumen
Internet se ha convertido en los últimos tiempos en un hábitat peligroso. Cada día que pasa
se desarrollan nuevas y cada vez más potentes herramientas destinadas a atacar sistemas de
información y redes de comunicación de todo tipo, y miles de ordenadores en todos los puntos
del planeta son asaltados diariamente. Desgraciadamente, aún no se ha encontrado una solución
al problema si bien, dentro del área de conocimiento de la Detección de Intrusiones, el campo
de la Detección de Anomalías se perla como un rme candidato, con grandes posibilidades de
erigirse en la tecnología de seguridad de la información por excelencia, a medio plazo.
Esta situación se acerca cada día más al usuario, conforme se avanza en la tecnología, el ser
humano tiene a su disposición cada vez más elementos susceptibles de ser atacados. Actualmente
ya se desarrollan sistemas de protección para dispositivos móviles por parte de grandes compañías,
pero el problema del mundo de Internet tradicional se encuentra desplazado encima de un nuevo
mercado: la portabilidad y el multiemplazamiento de los nuevos dispositivos.
1.1. El papel de la detección de Intrusiones en la Sociedad de la
Información
Hasta el momento, las investigaciones llevadas a cabo en el campo de la seguridad de la
información respecto de la cuestión del asalto subversivo e ilegítimo a sistemas informáticos, no
han aportado más que soluciones muy parciales al problema. En el momento de escribir estas
líneas, la magnitud de esta cuestión es tal que prestigiosos observatorios y centros de respuesta
temprana ante incidentes de seguridad, como pueden ser el Computer Emergency Response Team
Coordination Center1 CERT[60], el Equipo de Seguridad para la Coordinación de Emergencias en
Redes Telemáticas2 ESCERT [123], su homólogo IrisCERT [98], o el servicio Alerta-Antivirus
3
[23], se ven colapsados con cientos de miles de casos de intrusiones al año. De hecho, se ha llegado
a un punto en el que los datos estadísticos que ofrecen periódicamente dejan de ser realmente
signicativos.
Figura 1.1: Ratio de plataformas PC compatible infectadas en el mundo
Asimismo, otros grandes referentes como pueden ser las reconocidas listas de distribución
1
Puesto en marcha en 1.988 por iniciativa del Departamento de Defensa [109] estadounidense, a través de
la Defense Advanced Research Project Agency [94], y en colaboración con la Carnegie Mellon University [70].
Su constitución, el día 17 de Noviembre de 1.988, fue llevada a cabo con carácter de urgencia a raíz del ataque
informático perpetrado dos semanas antes por Robert Tappan Morris. Se estima que el mítico Gusano de Morris
llegó a infectar alrededor del 10 % de los servidores que en aquel momento estaban conectados a Internet en el
mundo [118]. El oscuro horizonte que se abría en un sector tan crítico como el informático hizo que el todopoderoso
Departamento de Defensa decidiera acometer esta iniciativa para tratar de minimizar los efectos de crisis similares
en el futuro.
2
Tanto esCERT como IrisCERT son dependientes de CERT/CC y tienen un ámbito de actuación circunscrito
al territorio español. Actualmente, esCERT se encuentra ubicado en la Universidad Politécnica de Cataluña,
mientras que IrisCERT está soportado por la iniciativa RedIris [178].
3
Servicio provisto por la entidad pública empresarial Red.es [295], adscrita al Ministerio de Industria, Turismo
y Comercio, a través de la Secretaría de Estado para las Telecomunicaciones y para la Sociedad de la Información.
2
Cuadro 1.1: Utilización de Internet en las diferentes regiones del globo
sobre cuestiones de seguridad SecurityFocus BugTraq [132] o Full Disclosure [108], o los observatorios privados pertenecientes a los grandes fabricantes mundiales de soluciones de seguridad,
como pueden ser Panda Software [324], Kaspersky [222] o Symantec [74], apuntan en la misma
dirección. A modo de ejemplo, sirva la gura 1.1 para ilustrar la problemática de la seguridad
en el mundo, según el Global Virus Observatory de Panda Software.
De esta forma, la conclusión es clara: En una sociedad de la información cuya realidad depende
cada vez más de la tecnología, como puede deducirse de las cifras de crecimiento del número de
usuarios conectados a Internet [181, 103, 333, 359, 99], o de los diferentes estudios realizados
al respecto por las grandes consultoras como Forrester [172] o Gartner [173], la seguridad de
la información es un campo de las Ciencias de la Computación que aún presenta importantes
deciencias. Deciencias que, además, inciden de forma extraordinariamente negativa en el uido
desarrollo de actividades cruciales para una evolución tecnológica plena como son el movimiento
de capitales en general y el comercio electrónico en particular. De estar resuelta la cuestión
de la conabilidad en el uso de las tecnologías de la información y las comunicaciones, dichas
actividades podrían llegar a altísimas cotas de progreso; tal y como se indica en la línea prioritaria
de investigación Towards a Global Dependability and Security Framework del VI Programa
Marco Europeo [72, 296], dentro del Espacio Europeo de Investigación.
A este respecto, las tablas 1.1 y 1.2 ilustran de forma signicativa el crecimiento del número
de usuarios a nivel mundial, según cifras de Internet World Stats [180, 179].
En la misma línea, las guras 1.2 y 1.3 ilustran el grado de utilización de Internet en la Unión
Europea por parte de empresas y organizaciones, y usuarios particulares, respectivamente, según
cifras de la European Statistical Data Support [333]. Existen ciertos países para los que no hay
datos disponibles, y que lógicamente no aparecen en dichas guras.
De forma análoga, pero ya en el ámbito nacional, la gura 1.4 ilustra el crecimiento del número
de usuarios y los porcentajes de penetración de Internet en el territorio español, durante los cinco
últimos años, según cifras de la consultora Tatum [99]. Por otro lado, en lo relativo a la creciente
relevancia que está adquiriendo el comercio electrónico a nivel mundial, la tabla 1.3 representa las
3
Cuadro 1.2: Utilización de Internet en las diferentes regiones del globo
Cuadro 1.3: Previsiones de crecimiento del Comercio Electrónico, según Forrester, IDC y eMarketer
4
Figura 1.2: Utilización de Internet por parte de empresas y organizaciones con sede en la UE
Figura 1.3: Utilización de Internet por parte de individuos particulares residentes en la UE
5
Figura 1.4: Crecimiento del número de usuarios en el territorio español, en miles de usuarios
previsiones realizadas por tres de las mayores rmas multinacionales de consultoría tecnológica,
como son Forrester, IDC y eMarketer. Dichas previsiones están recogidas en el E-Commerce and
Development Report que Naciones Unidas publica anualmente [268, 267].
De la misma forma, en la tabla 1.4 puede observarse la tendencia de crecimiento prevista para
la Unión Europea, entre otras regiones del planeta, como son Latinoamérica, África, regiones
en vías de desarrollo de Asia y Región del Pacíco y otras regiones en vías de desarrollo, y
Norteamérica y otras regiones desarrolladas de Asia y Región del Pacíco [267].
Por último, en las guras 1.5 y 1.6 pueden observarse las últimas cifras publicadas por la
Comisión del Mercado de las Telecomunicaciones [103], relativas a la situación del comercio
electrónico en el territorio nacional.
Por otro lado, en lo relativo a la problemática de la seguridad propiamente dicha, son especialmente signicativas las tendencias observadas por CERT/CC [59], así como por el Federal
Bureau of Investigation [128] en colaboración con el Computer Security Institute [79] [129], y que
están representadas en las guras 1.7 y 1.8. Dichos datos deben servir como botón de muestra
del problema de la seguridad en los Estados Unidos de Norteamérica, si bien la situación en el
resto del orbe es análoga, como se desprende de los estudios realizados por los miembros del
prestigioso Honeynet Project [283]. Dicho proyecto tiene como objetivos la detección y análisis
de comportamientos no documentados, y por lo tanto de alto riesgo, en la actividad subversiva de
Internet, mediante el despliegue de una vasta red (Honeynet) de servidores señuelo o Honeypots4 .
De esta forma, han llegado a observarse, por ejemplo, redes domésticas atacadas diariamente en
más de treinta ocasiones, o casos de intrusión en dichos servidores señuelo a los quince minutos
4
Honeypot o Tarro de miel: Recurso informático cuyo valor reside en ser atacado, comprometido y analizado,
con el objeto de descubrir nuevas formas de ataques informáticos; según la denición de su autor, Lance Spitzner
[221]. Por su parte, el concepto Honeynet hace referencia, como es lógico, a una red de Honeypots.
6
Cuadro 1.4: Previsiones de crecimiento del Comercio Electrónico, según Forrester, IDC y eMarketer
Figura 1.5: Evolución del comercio electrónico durante los últimos años (en Euros)
7
Figura 1.6: Evolución del comercio electrónico durante los últimos años (en número de transacciones)
de su conexión a Internet [282, 202].
Como puede observarse en la gura 1.7, el crecimiento del número de incidentes de seguridad
observados por CERT/CC desde su puesta en marcha, presentó hasta el año 2.003 un crecimiento exponencial, que ha terminado haciendo que los responsables máximos decidieran eliminar
dicho parámetro de sus estudios anuales, para pasar a proporcionar conclusiones abstractas de
mayor utilidad. De nada sirve conocer el número de víctimas; lo verdaderamente importante es
concienciarse del problema de la seguridad y averiguar cómo evitar convertirse en una de ellas.
De esta forma, a partir de 2.004, CERT/CC publica, en colaboración con el United States
Secret Service [363] y la prestigiosa revista CSO Magazine [80], su E- Crime Watch Survey [265],
del cual ya ha visto la luz su primera edición. En él pueden observarse datos alarmantes, como
por ejemplo el 70 % de organizaciones estadounidenses encuestadas que registraron al menos un
caso de intrusión en el último año, o los más de seiscientos sesenta millones de dólares de pérdidas
económicas derivadas de actividad cracker5 que se estiman durante el mismo periodo de tiempo.
En la misma línea, tal y como puede observarse en la gura 1.8, el informe que anualmente
5
Cracker: Someone who tries to break the security of, and gain access to, someone else's system without
being invited to do so. Denición del RFC 2828 [288] del Internet Engineering Task Force [169]. Es un término
confundido habitualmente con el de Hacker: Someone with a strong interest in computers, who enjoys learning
about them and experimenting with them. En cualquier caso, las connotaciones delictivas que se han arrogado a
este término están tan extendidas, que se admite en general su uso.
8
Figura 1.7: Evolución del número de incidentes de seguridad reportados anualmente por CERT/CC
presentan FBI y CSI12 también revela datos escalofriantes sobre la cantidad de ataques informáticos que concluyen con éxito, si bien en este caso la tendencia que se advierte permite cierto
margen para el optimismo, al menos a medio plazo. No obstante, a pesar de ello, la situación
dista aún mucho de ser halagüeña, ya que más de la mitad (70 % en el año 2.000) de los organismos y grandes corporaciones estadounidenses encuestadas sufren anualmente al menos un
caso de intrusión. Ademýs, existe un importante número de ellas (alrededor del 10 %) que ni
siquiera es capaz de determinar con precisión si sus recursos computacionales y de comunicación
son accedidos subversivamente o no.
Asimismo, de los resultados obtenidos por el anteriormente mencionado Honeynet Project
pueden obtenerse conclusiones similares: La seguridad informática se mantiene en niveles de alto
riesgo y la actividad hacker crece desmesuradamente día a día, llegando a observarse crecimientos
del número de ataques en torno al 890 % anual. Sin embargo, también se observa cierta mejora en
las cifras de incidentes registrados, debido fundamentalmente a una creciente concienciación por
parte de usuarios, administradores de sistemas y desarrolladores de aplicaciones del problema de
la seguridad, así como a una mayor utilización de las tecnologías de seguridad disponibles. De
esta forma, ha podido observarse un importante progreso, por ejemplo, en la esperanza de vida
media de un servidor GNU/Linux conectado a Internet, que ha pasado de tan sólo 72 horas en
el año 2.000, a tres meses en la actualidad [282]. Por otro lado, existe un importante factor a
9
Figura 1.8: Evolución del número de incidentes de seguridad reportados anualmente por FBI y
CSI en su Computer Crime and Security Survey
tener en cuenta a la hora de analizar estos datos de crecimiento de la actividad subversiva en
la red, que es el nivel de preparación técnica que necesita el potencial intruso para atacar un
determinado sistema informático; factor que inuye directamente en el orden de magnitud de la
amenaza.
Así pues, a medida que la sosticación, la potencia y la facilidad de uso de las herramientas
de hacking crece, mayor es la población potencial de individuos susceptibles de convertirse en
agentes propagadores de todo tipo de epidemias informáticas. En los orígenes del delito informático era habitual observar cómo los responsables de los incidentes de seguridad seguían un
perl común en el que el elemento fundamental era su alto grado de preparación técnica y sus
vastos conocimientos sobre el funcionamiento a bajo nivel de sistemas, redes y arquitecturas6 . Sin
embargo, hoy día la situación ha cambiado y, si bien los desarrolladores últimos de herramientas, utilidades y técnicas de hacking siguen correspondiendo a ese perl de antaño, los usuarios
habituales de las mismas se encuentran a gran distancia de aquéllos7 . De esta forma, la amenaza
6
Tradicionalmente se ha utilizado el término Blackhat Hacker para hacer referencia a este tipo de atacante
de elite.
7
En la gura 1.9 se ilustra esta conclusión. Como puede observarse, cada vez es necesario un menor conocimiento
técnico para orquestar un ataque mucho más potente y efectivo. De hecho, esta situación ha dado origen a una
nueva especie de pirata informático: El Script Kiddie, caracterizado fundamentalmente por su baja preparación
técnica y su carencia de objetivos concretos; características que lo hacen especialmente peligroso, dada la gran
facilidad de uso de las nuevas herramientas de hacking y lo indiscriminado de sus acciones.
10
Figura 1.9: Relación entre el nivel de preparación del hacker y el grado de sosticación de sus
ataques, según estudios realizados por CERT/CC
general crece aceleradamente en nuestros días, y sólo es posible contener el número de incidentes
de seguridad mediante la concienciación e interiorización del problema por parte de los usuarios,
y mediante la utilización de las contramedidas adecuadas, en un proceso continuo de vigilancia
tecnológica [58].
Además, no sólo es relevante la amenaza que constituye esa amplísima población de usuarios
malintencionados, sino que también es necesario prestar especial atención a la ingente colección
de malware8 en forma de virus9 , gusanos10 , caballos de Troya11 y demás, que prolifera por
doquier. Las diferentes variantes de estos tipos de códigos malignos son capaces de lanzar los
anteriormente mencionados ataques de forma automática, infectando y extendiendo el ataque a
otros sistemas a gran velocidad12 , lo que incrementa en varios órdenes de magnitud su impacto
8
9
Malware: Malicious software o código maligno [220].
Virus: Hidden, self-replicating section of computer software, usually malicious logic, that propagates by
infecting (i.e., inserting a copy of itself into and becoming part of ) another program. A virus cannot run by itself;
it requires that its host program be run to make the virus active. Denición del SANS glossary of terms used in
security and intrusion detection [177].
10
18 Gusano o Worm: Computer program that can run independently, can propagate a complete working
version of itself onto other hosts on a network, and may consume computer resources destructively. [177]
11
19 Caballo de Troya (Troyano) o Trojan horse: Computer program that appears to have a useful function, but
also has a hidden and potentially malicious function that evades security mechanisms, sometimes by exploiting
legitimate authorizations of a system entity that invokes the program. [177]
12
Staniford-Chen, Moore, Paxson y Weaver [332] calculan que un gusano de alta velocidad (Flash Worm) podría
infectar el 95 % de una población de un millón de ordenadores vulnerables en 510 milisegundos, mediante tráco
11
potencial [332]. Un ejemplo interesante de este extremo puede ser el del lamentablemente popular
gusano Slammer21, considerado el caso de malware autopropagable más rápido de la historia.
Según los estudios realizados por David Moore, Vern Paxson et al. [253], dicho gusano llegaba
a duplicar la población de ordenadores infectados cada ocho segundos y medio. Qué decir de lo
absurdo de intentar enfrentarse manualmente a amenazas como el mencionado Slammer u otros
históricos como el Witty [88], el Code Red [254], o el Nimda [53], por ejemplo.
En la misma línea, las interesantes cifras publicadas por CERT/CC para el año 2.002, en el
cual se registraron un total de 5.500 vulnerabilidades13 en software de todo tipo, se hacían eco
de esta cuestión y revelaban, además, lo inabordable del problema no ya de la respuesta ante
este tipo de ataques, sino incluso simplemente de una cuestión tan trivial como la administración
de las actualizaciones de seguridad del software por el operador humano. De hecho, se estimaba
en 298 días de trabajo al año el esfuerzo que necesitaría un eciente administrador de sistemas
solamente para leer las descripciones de dichas vulnerabilidades y descargar y aplicar los parches
o hotxes correspondientes [58].
De esta forma, a raíz de esta problemática situación, surge inmediatamente y de forma natural
una conclusión lógica: Es necesario responder ante estos avasalladores ataques con mecanismos
tan automatizados o más que los del atacante, ya sea éste un intruso real o virtual, para poder
contrarrestar ecazmente su abrumador poder ofensivo; necesidad esta que se ha visto parcialmente satisfecha en los últimos tiempos gracias a la aparición y al continuo desarrollo del área de
conocimiento conocida como Detección de Intrusiones. Dicha área de conocimiento se ve materializada actualmente en los denominados Sistemas de Detección y Prevención de Intrusiones, y
cuenta ya con investigaciones sólidas y de reputada solvencia que incluso han evolucionado hacia
productos comerciales ampliamente extendidos. Sin embargo, los modelos de funcionamiento que
se han venido explorando con mayor intensidad parecen haber tocado techo, y se hace necesario prestar una mayor atención a otras líneas de investigación, como puede ser la Detección de
Anomalías. De esta forma, será posible tratar ciertas cuestiones que hasta ahora han pasado desapercibidas y que pueden resolver las deciencias que tradicionalmente han venido presentando
dichos modelos [340, 297, 28, 15, 84]. Así, con el objetivo de cubrir esta necesidad y dar un paso
más allá en el Área de la Detección de Intrusiones se ha planteado y llevado a cabo el presente
desarrollo.
1.2. El papel innovador de la Detección de Intrusiones para dispositivos móviles
Expertos en seguridad de todo el mundo alertan sobre el crecimiento extraordinario de virus,
gusanos y troyanos que han encontrado en los terminales de telefonía móvil un nuevo objetivo
UDP. En el caso de utilizar tráco TCP serían necesarios 1,3 segundos.
13
Vulnerabilidad o Vulnerability: A aw or weakness in a system's design, implementation, or operation and
management that could be exploited to violate the system's security policy. [288]
12
a atacar, y sólo es cuestión de tiempo que alcancen las cifras de pérdidas económicas de sus
homólogos cableados, según arman especialistas como Aaron Davidson, Chief Executive Ocer de SimWorks International, uno de los grandes fabricantes mundiales de servicios móviles,
Bruce Hughes, investigador de la compañía TruSecure, o Norman Bennett, Gerente General de
Symantec Corporation; dos de los grandes fabricantes de soluciones de seguridad.
Así pues, son muchos los fraudes que puede perpetrar esta nueva generación de ataques
informáticos, y contra los que actualmente no existen soluciones de seguridad, con la honrosa
excepción de dos embrionarias herramientas antivirus como son F-Secure Mobile y Kaspersky, que
aún tienen un marcado carácter experimental. De esta forma, un hacker puede infectar el móvil de
un usuario mediante un código malicioso (malware) que realice arbitrariamente establecimientos
de llamadas (con las consiguientes pérdidas económicas), envíos masivos de SMS, MMS, etc. (el
denominado robo de servicio), o incluso espionaje de la información sensible (datos privados,
información bancaria, claves de acceso, etc.) almacenada en la memoria de dicho terminal.
Asimismo, es posible la automatización de estos ataques, lo que ha dado origen a una nueva
generación de gusanos auto-propagables, que pueden reenviarse, por ejemplo, a la lista de contactos; aunque, a través de protocolos wireless como Bluetooth u 802.11a/b/g [Wi-Fi], ni siquiera
es necesario este pequeño conocimiento previo de las víctimas (Overview de vulnerabilidades de
Securityfocus).
Por otro lado, y entrando en un área tecnológica también en creciente expansión, cada vez
son más los dispositivos y soluciones domóticas y de inteligencia ambiental (Ambiental Intelligence, AmI) que abogan por la utilización de tecnologías y protocolos móviles para resolver sus
requisitos de interoperabilidad y conectividad, por lo que, en caso de intrusión, no sólo quedaría
en compromiso el teléfono del usuario, sino toda su red doméstica.
Por último, también son posibles ataques de denegación de servicio [DoS] que inutilicen un
teléfono o dispositivo, o que saturen hasta la inoperancia el ancho de banda de la red telefónica. En este ámbito, existe un terminal especialmente amenazado: El teléfono con soporte lógico
de aplicaciones basado en Sistema Operativo, como Windows Mobile, o Symbian. Estos móviles tienen conectividad total con Internet, funcionan como mini-ordenadores, y pueden alojar
programas (que perfectamente pueden ser subversivos) como cualquier PC; de forma que heredan automáticamente las problemáticas de seguridad que tradicionalmente han venido sufriendo
éstos.
Además, según varias consultoras tecnológicas como Gartner, Nielsen-NetRatings o IDC, el
crecimiento en el número de ventas de estos dispositivos que se espera es extraordinario. Por
ejemplo, según la rma IDC, el número de estos aparatos vendidos en 2008 puede superar los
130 millones de unidades, un 15 % del parque mundial. Según ARC Group, en 2004 se vendieron
27 millones de unidades, casi el 5 % del total de móviles vendidos en todo el mundo. Las cifras
de la rma británica Canalys, que tratan los dos grandes tipos de terminales: los de voz (móviles
sincronizables con PC y Smartphones con posibilidad de cargar aplicaciones) y los de datos
13
(Handhelds o PDAs, con o sin conexión inalámbrica a redes); muestran crecimientos de hasta
un 101 % en el caso de los teléfonos móviles y de un 5 % en el caso de los PDA. Asimismo, el
fabricante PalmOne (líder del mercado) obtuvo unas ventas de 1.503.590 equipos en el último
cuarto de 2004, un 8 % más que en 2003, e incrementó un 154 % las ventas de sus conocidos
terminales Treo.
Por otro lado, según cifras de IDC, cada semana se venden en todo el mundo alrededor
de tres millones de dispositivos con tecnología inalámbrica Bluetooth (especialmente sensible a
manipulaciones subversivas), incluyendo no sólo teléfonos móviles, sino también componentes de
automoción, dispositivos domóticos, accesorios informáticos, etcétera, etcétera, y se preveía para
2008 un parque de unos 922 millones de unidades en todo el mundo. También es importante,
ya en un ámbito más local, el crecimiento de líneas UMTS que se espera en el estado: Según el
consejero delegado de Telefónica Móviles, Javier Aguilera, "Esperamos que en 2005 haya más de
un millón de líneas". A lo que hay que añadir, además del crecimiento del mercado mundial, los
más de 300 millones de Euros que preveía invertir Amena, y los 1700 de Telefónica Movistar.
Por otro lado, según consultoras como Tatum o Nielsen-NetRatings, u organizaciones como
la International Telecommunication Union (ITU), el previsible aumento de transacciones económicas realizadas a través de móviles es susceptible de convertirse en el principal motor del
malware móvil, al igual que ocurrió con el auge del e-business en el mundo. Los distintos tipos
de gusanos, virus y demás, permitirán el acceso a contraseñas, información bancaria o datos corporativos de millones de clientes que comienzan realmente a usar el móvil para realizar compras
y operaciones nancieras, sobre todo en Europa y Japón. Se estima que en 2004 más de cuatro
millones de personas usaron el teléfono móvil en el estado para pagar sus compras, según cifras
de la Comisión del Mercado de las Telecomunicaciones.
Por último, también es importante prestar atención al impacto que ESIDE-Mendizale puede
producir en el tejido empresarial vasco, siendo dos las incidencias positivas se detectan a priori:
Por un lado, este proyecto y los estudios sobre los que se basa pueden servir como base para
el desarrollo de un producto de calidad de protección de terminales móviles, precisamente en
un momento en el que la coyuntura mundial y local es muy favorable. Qué decir tiene que un
fabricante de soluciones de seguridad como Panda Software (recientemente galardonada con el
premio "Con mucho gusto" del Departamento de Industria, Comercio y Turismo del Gobierno
Vasco), una las grandes empresas fabricantes de soluciones de seguridad informática a nivel
mundial, y con la que la Facultad de Ingeniería - ESIDE mantiene unas estrechas relaciones,
adquiriría una considerable ventaja competitiva a raíz de este estudio, adelantándose a aquellos
competidores que aún no han contemplado la cuestión móvil entre sus prioridades.
Por otro lado, la cuestión de la seguridad es un problema cada vez más acuciante para organizaciones y empresas que cada vez más hacen uso de soluciones de movilidad para proporcionar
mayor exibilidad a sus procesos de negocio, y aunque existen herramientas que aportan cierta
seguridad, se está aún muy lejos de una solución denitiva.
14
Este proyecto puede sentar las bases para el desarrollo de una arquitectura de seguridad robusta, exible y económica, que reduzca las pérdidas por hacking móvil a su mínima expresión.
Además, este proyecto está orientado a servir como solución a un problema ampliamente extendido en empresas, organizaciones y usuarios particulares con todo tipo de perles, por lo que su
área potencial de implantación es muy amplia.
Así pues, ante un considerable volumen de actividad, es posible plantear una línea de servicio
en un operador de telefonía como puede ser Euskaltel (con quien la Facultad de Ingeniería ESIDE mantiene unas estrechas relaciones), que se vería en situación de poder ofrecer un servicio
de seguridad diferenciador y de valor añadido a sus clientes.
Realmente los benecios que se conseguirían gracias a la reducción drástica de las pérdidas
económicas debidas al acceso ilegítimo de intrusos a los recursos móviles de empresas y particulares, podrían llegar a ser muy importantes a medio plazo.
Para nalizar, también es interesante tener en cuenta los benecios que podría reportar
ESIDE-Mendizale a aquellas empresas que emplean a los alumnos del Máster en Seguridad de la
Información que se desarrolla en la Facultad de Ingeniería - ESIDE. Dicho Máster en Seguridad de
la Información acoge todos los años a un buen número de alumnos, que posteriormente incorporan
los conocimientos adquiridos a su trabajo cotidiano en empresas como Panda Software, Euskaltel,
IT-Deusto, Vodafone o Telefónica Movistar.
A este respecto, tal y como se ha hecho con los resultados del proyecto ESIDE-Depian (subvencionado por Diputación Foral de Bizkaia a través de del programa Bizkaitek 2004) se pretende
incluir en el módulo relativo a técnicas IDS/IPS un epígrafe con resultados y conclusiones obtenidas en el proyecto, lo que redundará aún más en la difusión de los mismos.
1.3. Conceptos Fundamentales
Es importante presentar algunos conceptos básicos, sobre los cuales está basada la presente
memoria de proyecto. En primer lugar se denen algunos conceptos fundamentales de Seguridad de la Información, y a continuación se pasa a denir conceptos básicos de Detección de
Intrusiones.
1.3.1. Conceptos Fundamentales de la Seguridad de la Información
A pesar de que en el Área de la Seguridad de la Información no existe un acuerdo universal
sobre el propio concepto de Seguridad, una denición plausible puede ser la que proporciona el
RFC2828 [288]:
Denición 1.1, Seguridad:
(1) Measures taken to protect a system. (2) The condition of a
system that results from the establishment and maintenance of measures to protect the system.
(3) The condition of system resources being free from unauthorized access and from
15
unauthorized or accidental change, destruction, or loss.14 La cual da paso de forma natural al siguiente concepto:
Denición 1.2, Seguridad de la Información:
The protection of data from disclosure,
alteration, destruction, or loss that either is accidental or is intentional but unauthorized.
15
No obstante, es posible obtener una denición más representativa del concepto a partir de
la evolución que ha sufrido el mismo hasta nuestros días. En un primer momento el área de
conocimiento de la Seguridad de la Información tenía como objetivo fundamental la protección
de dicha información contra accesos no autorizados; es decir, ser garante de la condencialidad
de la misma. Sin embargo, con la proliferación de redes de comunicación como Internet, y el
alto grado de conectividad que proporcionan, además, apareció la necesidad de proteger esa
misma información contra modicaciones o alteraciones no autorizadas. Surgió de esa forma un
segundo objetivo: Era necesario garantizar también la integridad de la información. Además,
dichas redes de comunicación también propiciaban cierto tipo de agresiones, conocidas como
ataques de denegación de servicio16 , que imposibilitaban el legítimo acceso a la información,
simplemente saturando el sistema informático hasta la inoperancia; de forma que fue necesario
incorporar a la denición de Seguridad de la Información el concepto de disponibilidad para
incluir esta cuestión. Finalmente, con el extraordinario desarrollo que han venido presentando
las transacciones económicas electrónicas, han aparecido dos nuevas problemáticas. Por un lado,
es necesario prestar especial atención a la cuestión de la autenticación de las partes implicadas
en dichas transacciones. Además, también es perentorio garantizar la responsabilidad de las
acciones tomadas por dichas partes. No puede darse la posibilidad de que los hechos de una de
las entidades implicadas en una transacción, sean repudiados por dicha entidad.
De esta forma, podemos encontrar una excelente denición de Seguridad de la Información
en la conferencia que pronunció Danniel G. Wolf [139], Information Assurance Director de la
National Security Agency [262], en el Federal Information Security Reform Act 2.002, la cual se
incluye a continuación, adaptada por cuestión de espacio17 :
Denición 1.3, Seguridad de la Información:
The condition of a system that results from
the establishment and maintenance of measures that assure information condentiality and
14
Como puede observarse, el RFC2828 proporciona tres deniciones, cada una de las cuales adquiere un mayor
nivel de concreción respecto a las precedentes: (1) Conjunto de medidas utilizadas para proteger un sistema. (2)
Estado de un sistema que resulta del establecimiento y mantenimiento de medidas de protección para dicho sistema. (3) Estado en el que los recursos de un sistema se encuentran libres del peligro de ser accedidos, modicados,
destruidos o dañados sin autorización.
15
Protección de los datos contra la divulgación, alteración, destrucción o menoscabo, ya sean éstas accidentales,
o intencionadas pero no autorizadas.
16
Denegación de servicio o Denial of Service: The prevention of authorized access to a system resource or the
delaying of system operations and functions. [288]
17
Lindqvist introduce idénticas reexiones en la denición de Seguridad de la Información que propone en su
tesis doctoral [358].
16
integrity, availability, authenticity and non-repudiation in computer and communication
systems.18 De hecho, Wolf va más allá del concepto tradicional e incluye las cuestiones de la detección
de intrusiones y la respuesta automática ante ellas como parte fundamental de la protección de
la información; tal es la importancia que está alcanzando este campo en el área de la Seguridad
de la Información:
Denición de Wolf, Seguridad de la Información:
In an age of constant probes and
attacks of on-line networks, however, an increasingly important element of protection deals with
operational responsiveness in terms of detecting and reacting to these time-sensitive events.
19
Una vez desarrollado el concepto fundamental, existe toda una colección de términos a su
alrededor, los cuales pueden consultarse en la abundante bibliografía al respecto [127, 177, 151,
352, 288][OSSTMM03]. A continuación, se incluyen los más importantes y sobre los que está
basada la anterior denición de Seguridad de la Información [288]:
Denición 1.4, Condencialidad:
The property that information is not made available or
disclosed to unauthorized individuals, entities, or processes; i.e., to any unauthorized system
entity.20 Denición 1.5, Integridad:
The property that data has not been changed, destroyed, or lost
in an unauthorized or accidental manner.21 Denición 1.6, Disponibilidad:
The property of a system or a system resource being
accessible and usable upon demand by an authorized system entity, according to performance
specications for the system; i.e., a system is available if it provides services according to the
system design whenever users request them.22 Denición 1.7, Autenticidad:
The property of being genuine and able to be veried and be
trusted.23 18
Estado de un sistema que resulta del establecimiento y mantenimiento de medidas de seguridad que aseguran
la condencialidad e integridad de la información, así como disponibilidad, autenticidad y no repudio en sistemas
de computación y de comunicaciones.
19
En una época de constantes rastreos y ataques contra redes de comunicación, un aspecto de seguridad cada
vez más importante es el de presentar una respuesta operativa, en términos de detectar y reaccionar ante esos
eventos que se producen en tiempo real.
20
Propiedad por la cual la información no se hace disponible ni se divulga a individuos, entidades o procesos
no autorizados; esto es, a cualquier entidad del sistema.
21
22
Propiedad por la cual los datos no se modican, destruyen o dañan, de forma no autorizada o accidental.
Propiedad de un sistema o de un recurso de sistema de ser utilizable ante la demanda de una entidad de
sistema autorizada, de acuerdo con las especicaciones de rendimiento de dicho sistema; esto es, un sistema es
disponible si proporciona sus servicios de acuerdo a su diseño en cualquier momento en el que los usuarios lo
soliciten.
23
Propiedad de ser genuino y hábil para ser vericado y recibir conanza.
17
Denial by a system entity that was involved in an association
Denición 1.8, Repudio:
(especially an association that transfers information) of having participated in the
relationship.24 1.3.2. Conceptos de Detección de Intrusiones
A continuación se describen los términos fundamentales de Detección de Intrusiones sobre
los cuales está basado el presente trabajo de investigación, y que se utilizarán frecuentemente a
lo largo de esta memoria [288]:
Denición 1.9, Ataque:
An assault on system security that derives from an intelligent
threat, i.e., an intelligent act that is a deliberate attempt (especially in the sense of a method
or technique) to evade security services and violate the security policy of a system.25 Denición 1.10, Intruso:
An entity that gains or attempts to gain access to a system or
system resource without having authorization to do so.26 Denición 1.11, Intrusión:
A security event, or a combination of multiple security events,
that constitutes a security incident in which an intruder gains, or attempts to gain, access to a
system (or system resource) without having authorization to do so.27 Respecto a la denición de Intrusión, también es interesante prestar atención a la propuesta
por Zamboni [92], en la cual se relaciona explícitamente la intencionalidad de la denición de
Shirey con los conceptos de Seguridad de la Información descritos anteriormente:
Denición 1.12, Intrusión:
Any set of actions that attempt to compromise the integrity,
condentiality, or availability of a computer resource.28
29
24
Negativa de una entidad de sistema de haber estado involucrada en una asociación (especialmente en una
asociación que implique transferencia de información) o de haber participado en dicha relación.
25
Asalto a la seguridad de un sistema que tiene su origen en una amenaza inteligente; esto es, un acto intelectual
que debe considerarse como un deliberado intento (especialmente en la medida en que se utiliza un método o una
técnica) de evadir los servicios de seguridad y violar la política de seguridad de dicho sistema.
26
Entidad que consigue o intenta conseguir acceso a un sistema o recurso de sistema sin tener autorización para
hacerlo.
27
Evento de seguridad, o combinación de múltiples eventos de seguridad, que constituye un incidente de segu-
ridad en el cual un intruso consigue, o intenta conseguir, acceso a un sistema (o recurso de sistema) sin tener
autorización para hacerlo.
28
Cualquier conjunto de acciones que intente poner en compromiso la integridad, condencialidad o disponibi-
lidad de un recurso computacional.
29
Como puede observarse, la denición de Zamboni no incluye los conceptos de Wolf de autenticidad y no
repudio. A pesar de que esa primera denición es menos exhaustiva, es la que aparece de forma generalizada en
la bibliografía.
18
Denición 1.13, Detección de Intrusiones:
A security service that monitors and analyzes
system events for the purpose of nding, and providing real-time or near real-time warning of,
attempts to access system resources in an unauthorized manner.30 A pesar de que la denición de Detección de Intrusiones proporcionada por el RFC2828 es
completa y perfectamente contrastada, existen algunas cuestiones que no se abordan completamente. Por ello, es interesante prestar atención a otras alternativas, entre las cuales se encuentra
la excelente denición de Rebecca Bace [28], que se incluye a continuación:
Denición 1.14, Detección de Intrusiones:
Intrusion detection is the process of
monitoring the events occurring in a computer system or network and analyzing them for signs
of intrusions, dened as attempts to compromise the condentiality, integrity, availability, or to
bypass the security mechanisms of a computer or network. Intrusions are caused by attackers
accessing the systems from the Internet, authorized users of the systems who attempt to gain
additional privileges for which they are not authorized, and authorized users who misuse the
privileges given them. Intrusion Detection Systems (IDSs) are software or hardware products
that automate this monitoring and analysis process.
31
Por otro lado, también es interesante observar la denición que proporciona el Instituto
SANS [177], ya que introduce una primera clasicación de Sistemas de Detección de Intrusiones,
en función del origen de los ataques a detectar:
Denición 1.15, Detección de Intrusiones:
Security management system for computers
and networks. An Intrusion Detection System gathers and analyzes information from various
areas within a computer or a network to identify possible security breaches, which include both
intrusions (attacks from outside the organization) and misuse (attacks from within the
organization).
32
De forma natural, esta denición de la expresión Detección de Intrusiones, como término
genérico que da nombre a un área de conocimiento, introduce el concepto Sistema de Detección
30
Servicio de seguridad que monitoriza y analiza los eventos del sistema con el propósito de encontrar intentos
de acceso a recursos de sistema de forma no autorizada, y proporcionar aviso en tiempo real (o cerca del tiempo
real) sobre ellos.
31
Detección de Intrusiones es el proceso de monitorizar los eventos que se dan en un sistema de computación
o en una red de comunicaciones, y analizarlos en busca de signos de intrusión; denidos éstos como intentos de
poner en compromiso la condencialidad, integridad o disponibilidad, o de evadir los mecanismos de seguridad
de dicho sistema o red. Dichas intrusiones son causadas por atacantes que consiguen acceder a sistemas desde
Internet, por usuarios autorizados de dichos sistemas que intentan obtener privilegios adicionales para los cuales
no están autorizados, o por usuarios autorizados que hacen un mal uso de los privilegios que se les han otorgado.
Por otro lado, los Sistemas de Detección de Intrusiones (IDS) son productos software o hardware que automatizan
este proceso de monitorización y análisis.
32
Sistema de gestión de la seguridad para computadores y redes. Un Sistema de Detección de Intrusiones
recoge y analiza información de diferentes áreas dentro de dicho computador o red, con el objetivo de identicar
posibles brechas de seguridad, entre las cuales se incluyen tanto intrusiones (ataques provenientes del exterior de
la organización) como usos indebidos (ataques provenientes del interior de dicha organización).
19
de Intrusiones, como realización instrumental del mismo. Bace ya daba paso a esta cuestión en
la denición anterior, si bien existen otras que tratan especícamente dicho concepto, como por
ejemplo la que da Zamboni en su tesis doctoral:
Denición 1.16, Sistema de Detección de Intrusiones:
A computer system (possibly a
combination of software and hardware) that attempts to perform intrusion detection.33 Por último, existe un concepto que adquiere especial relevancia en el presente trabajo de
investigación, ya que es la piedra angular sobre la cual se ha desarrollado el mismo, y que
se denomina Detección de Anomalías. El exhaustivo documento recopilatorio de Julia Allen
[15] recoge una excelente denición, si bien es un concepto que se desarrollará en profundidad
posteriormente:
Denición 1.17, Sistema de Detección de Anomalías:
Analysis method that identies
any unacceptable deviation from expected behavior. Expected behavior is dened, in advance,
by a manually developed proleor by an automatically developed prole. An automatically
developed prole is created by software that collects and processes characteristics of system
behavior over time and forms a statistically valid sample of such behavior. Note that
unexpected behavior is not necessarily an attack; it may represent new, legitimate behavior
that needs to be added to the category of expected behavior.
34
1.3.3. Modelo general de funcionamiento
Desde la aparición de la Detección de Intrusiones a principios de la década de los ochenta
[20] y hasta nuestros días, los diferentes enfoques propuestos han venido manteniendo, a pesar de
sus lógicas particularidades, un esquema de funcionamiento común. Por lo general, las responsabilidades de todo Sistema de Detección de Intrusiones son la captura de datos del sistema de
información, el análisis de dichos datos en el intento de detectar algún tipo de actividad subversiva a partir de ellos, y el proporcionar una respuesta ante aquellas situaciones susceptibles de
comprometer la seguridad del sistema. De esta forma, un primer modelo general de funcionamiento quedará compuesto por estos tres pilares fundamentales: Recogida de información, Análisis y
Respuesta [116, 351, 17, 28, 334, 26, 100, 204, 84, 216, 154]. La gura 1.10 describe dicho modelo
general.
33
Sistema de computación (posiblemente combinación de software y hardware) que intenta llevar a cabo la tarea
de detectar intrusiones.
34
Método de análisis que identica cualquier desviación inaceptable respecto del comportamiento esperado.
Dicho comportamiento se dene, a priori, mediante un perl que puede construirse manual o automáticamente.
Un perl construido automáticamente se realiza mediante un software que recoge y procesa características del
comportamiento del sistema a lo largo del tiempo, y que produce un modelo estadístico de dicho comportamiento.
Es interesante observar que un comportamiento no esperado no es necesariamente un ataque; simplemente puede
representar nuevo y legítimo comportamiento que necesitará ser incorporado a la categoría de comportamiento
esperado.
20
Figura 1.10: Modelo General de Funcionamiento
Como puede observarse, las tres fases de este modelo se llevan a cabo de forma secuencial
y por lo general ininterrumpida, ya que la mayoría de Sistemas de Detección de Intrusiones se
plantean el objetivo de responder ante los diferentes eventos del sistema en tiempo real [255].
Por otro lado, esta división en fases del modelo general, introduce una categorización de los
diferentes tipos de Sistemas de Detección de Intrusiones, en función de la losofía de diseño que
se sigue en cada una de ellas. De esta manera, existen diferentes tipos de Sistemas de Detección
de Intrusiones dependiendo de la fuente de información utilizada durante el proceso de recogida
de información, dependiendo de la losofía de análisis que se sigue a la hora de determinar si un
determinado comportamiento es legítimo o subversivo, y en función también del tipo de respuesta
que se proporciona.
Así pues, existen dos fuentes de información fundamentales, que introducen una primera categorización. El objetivo fundamental de la fase de recogida de información es obtener y registrar
todo aquel dato que sea susceptible de haber tenido cualquier tipo de relación con las acciones de
los usuarios del sistema. A continuación, a partir de esos datos, la fase de análisis deberá decidir
qué comportamientos están justicados y cuáles no, y por último la fase de respuesta actuará
en consecuencia. Para ello, en todo sistema informático, existen dos lugares fundamentales de
los cuales es posible extraer este tipo de información [116, 205, 340, 336, 240, 26, 100, 204]. Por
un lado, las acciones de todo usuario quedan registradas por el servicio de auditoría del Sistema
Operativo o por los registros históricos de los servicios de aplicación que corren en una determinada máquina35 , de forma que ésta se convierte precisamente en el primer punto natural del
cual obtener información para el proceso de análisis. Esta ubicación da origen a los denominados
Sistemas de Detección de Intrusiones orientados a la Máquina, e introduce la siguiente denición
[177]:
Denición 1.18, Sistema de Detección de Intrusiones orientado a la Máquina (Host
Intrusion Detection System):
35
Intrusion detection systems that use information from the
Algunas fuentes [351, 92, 28, 15, 84, 50] consideran que esta forma de recogida de información constituye por
sí misma una tercera categoría de Sistema de Detección de Intrusiones.
21
operating system audit records to watch all operations occurring on the host that the intrusion
detection software has been installed upon.36 [...]
Por otro lado, dado el extraordinario grado de conectividad que presentan hoy en día los
sistemas de información [58], es difícil que se dé el caso de un intruso que acceda físicamente a
su víctima, y sin embargo es mucho más probable que su asalto se realice a través de algún tipo
de red de comunicación. De esta forma, el tráco de red se convierte en el medio de transporte
habitual de las órdenes que dicho intruso envía hacia el sistema atacado, y por lo tanto en el
segundo punto lógico de captura de información. Análogamente al caso anterior, esta ubicación
da origen a los denominados Sistemas de Detección de Intrusiones orientados a la Red, e introduce
su correspondiente denición [177]:
Denición 1.19, Sistema de Detección de Intrusiones orientado a la Red (Network
Intrusion Detection System):
Intrusion Detection System that monitors the trac on its
network segment as a data source.37 [...]
Cada uno de estos enfoques presenta sus particularidades, sus ventajas, sus capacidades, sus
inconvenientes y sus limitaciones; aspectos todos ellos que serán tratados en profundidad más
adelante. En general, los sistemas orientados a la máquina consiguen una mayor precisión en
la decisión de análisis, a costa de circunscribir su ámbito de actuación al sistema que protegen
[336, 240]. Asimismo, dependen enormemente de la plataforma software sobre la cual operan.
Por su parte, los sistemas orientados a la red son capaces de salvaguardar por sí mismos redes
enteras de ordenadores, si bien no tienen la precisión de los anteriores y no resuelven por lo
general ciertos problemas, como el análisis de tráco de red cifrado [17, 28, 15, 26].
Por otro lado, la fase de análisis también presenta una clara dicotomía38 , en función del
método de análisis que se emplea [116, 351, 17, 28, 388, 100, 204, 84, 216]. Por un lado, es habitual utilizar técnicas de Inteligencia Articial basadas en reconocimiento de patrones39 , para
representar todo el conocimiento de que se dispone sobre la actividad subversiva que se pretende
detectar. Así, es posible construir una lista negra40 que incluye todos los comportamientos maliciosos conocidos hasta el momento, para a continuación pasar a contrastar la actividad cotidiana
de los usuarios del sistema con dicha lista.
Esta losofía de detección se denomina Detección de Usos Indebidos o Detección basada en
Conocimiento41 , y se caracteriza por su elevada precisión a la hora de decidir la legitimidad
36
Sistema de Detección de Intrusiones que usa información del registro de auditoría del sistema operativo para
observar todas las operaciones que tienen lugar en la máquina en la que está instalado el software de detección
de intrusiones.
37
38
Sistema de Detección de Intrusiones que monitoriza el tráco de su segmento de red como fuente de datos.
Algunas fuentes establecen una tercera categoría, denominada Detección de Anomalías de Protocolo [Go-
lomb03, Das01, Axelsson00].
39
Reconocimiento de patrones o pattern matching. En el área de la Detección de Intrusiones también se utiliza
habitualmente el concepto de rma o signature.
40
Lista negra o blacklist.
41
Detección basada en Conocimiento o Knowledge-based Detection.
22
de una determinada acción. Sin embargo, adolece de ciertos problemas, entre los cuales el más
relevante es su absoluta falta de respuesta ante ataques aún no documentados. Un intruso puede
construir una ligera variante de un ataque clásico, o por supuesto un ataque completamente
nuevo, y evadir así la vigilancia del Sistema de Detección de Intrusiones. Rebecca Bace y Peter
Mell proponen una buena denición [28]:
Denición 1.20, Detección de Usos Indebidos (Misuse Detection):
Detection method
that analyzes system activity, looking for events or sets of events that match a predened
pattern of events that describe a known attack.42 [...]
Otro método de detección, que precisamente trata de ir más allá de las limitaciones inherentes
a los métodos de Detección de Usos Indebidos, y conseguir que los Sistemas de Detección de
Intrusiones puedan responder ante ataques novedosos43 , no documentados, es la Detección de
Anomalías o Detección basada en Comportamiento44 . Esta losofía de detección también está
basada en técnicas de Inteligencia Articial, pero plantea una forma de análisis complementaria a
la anterior. En lugar de utilizar el conocimiento subversivo conocido para llevar a cabo el proceso
de decisión, utiliza el conocimiento legítimo45 . De esta forma, a partir de las acciones habituales
de los usuarios, se construye un perl de comportamiento que posteriormente es contrastado con
la actividad cotidiana que se registra durante la explotación normal del sistema.
Así, es posible detectar acciones que se salen de la forma de proceder habitual de dichos
usuarios; acciones entre las cuales se encuentran los novedosos modos de ataque mencionados
anteriormente. A este respecto, es importante destacar el hecho de que con este modo de operación
se consigue que el proceso de detección sea completo [100]; característica de la que adolecen los
sistemas de Detección de Usos Indebidos. Además de la denición enunciada por Julia Allen e
incluida en el apartado anterior, existe otra precisa alternativa, propuesta también por Bace y
Mell [28]:
Denición 1.21, Detección de Anomalías (Anomaly Detection):
Detection method
that identies abnormal unusual behavior (anomalies) on a host or network.46 [...]
Este enfoque proporciona capacidad de respuesta ante los peligrosos Zero-Day Attacks y
llega más allá de las habilidades propias de los Sistemas de Detección de Usos Indebidos. No
obstante, también presenta un importante inconveniente: Un nuevo elemento o componente en
el sistema introduce de forma natural nueva actividad, la cual no deja de ser legítima y, sin
42
Método de detección que analiza la actividad del sistema, en busca de eventos o conjuntos de eventos que
concuerden con un patrón de eventos predenido que describe un ataque conocido.
43
Conocidos como zero-day attacks, en contraposición con los anteriormente mencionados ataques conocidos o
well-known attacks.
44
45
46
Detección basada en Comportamiento o Behaviour-based Detection.
En este caso se está usando política de lista blanca o whitelist.
Método de detección que identica comportamiento inusual o anormal (anómalo) en una máquina o en una
red.
23
embargo, es calicada por el sistema de detección como subversiva [15, 26]. Esta cuestión obliga
a una actualización continua del perl de comportamiento, y hace que el sistema presente una
indeseada característica conocida como falso positivo47
48
49
. Una buena denición es la que
proponen Ptacek y Newsham [385]:
Denición 1.22, Falso Positivo (False Positive):
An event, incorrectly identied by the
Intrusion Detection System as being an intrusion when none has occurred.50 Asimismo, Ptacek y Newsham también proponen la correspondiente denición del concepto
complementario: el
falso negativo.
Denición 1.23, Falso Negativo (False Negative):
An event that the Intrusion Detection
System fails to identify as an intrusion when one has in fact occurred.51 Existe una gran colección de estudios realizados en el área de la Detección de Anomalías
[116, 227, 26, 50], si bien aún no se ha conseguido un modelo que consiga integrar todos los
benecios que teóricamente caracterizan a este tipo de enfoques [165]. La práctica totalidad de
productos comerciales aún no se ha decido por ella, y se siguen utilizando modelos basados en
Detección de Usos Indebidos [116, 351, 205, 78, 28, 204, 49], debido fundamentalmente a que su
ecacia aún es discutida y al mencionado problema de los falsos positivos [116, 28].
Por último, la fase de respuesta, que tradicionalmente ha mantenido una única losofía de
funcionamiento, también ha visto aparecer en los últimos tiempos un nuevo enfoque. De esta
forma, al clásico método de respuesta pasivo consistente en la simple noticación de eventos de
alarma al administrador, se suma la posibilidad de llevar a cabo una reacción activa, como puede
ser la reconguración del entorno de la víctima para aislarla del agresor. Asimismo, también es
posible activar la recogida detallada de información, de cara a la toma de las pertinentes acciones
legales, o pasar directamente al contraataque [28].
Además, actualmente, la tendencia consiste en hacer que esta reacción suponga el ltrado de
las acciones del usuario, para lo cual el Sistema de Detección de Intrusiones debe ubicarse en un
punto del sistema en el que sea posible interceptar las órdenes de dicho usuario. De este modo,
es posible analizar dichas órdenes antes de ser enviadas nalmente al sistema para su ejecución.
47
Falso positivo o falsa alarma. Un Sistema de Detección de Intrusiones basado en Detección de Anomalías con
una conguración deciente puede saturar de falsos positivos al administrador de dicho sistema, incapacitándole
incluso para responder ante los verdaderos ataques [Newman+02].
48
Se estima que es bastante común obtener ratios de alrededor de diez falsos positivos por cada alarma real
[78].
49
En contraposición con el fenómeno del falso positivo, se encuentra el denominado falso negativo. Esta cuestión
es incluso más preocupante que la anterior, ya que es fruto de la falta de reacción del sistema de detección ante
un cierto ataque. Sin embargo, dado el enorme riesgo que supone, es habitual optar por soluciones de compromiso
que eliminen la posibilidad de su aparición, por lo general a costa de perjudicar la tasa de falsos positivos.
50
Evento incorrectamente identicado como intrusión por el Sistema de Detección de Intrusiones, cuando por
el contrario no ha ocurrido tal intrusión.
51
Evento no identicado como intrusión por el Sistema de Detección de Intrusiones, cuando por el contrario sí
es merecedor de dicha identicación.
24
Figura 1.11: Taxonomía general
Este método de respuesta recibe la denominación de Prevención de Intrusiones y pretende dar
un paso más allá en la evolución.
De hecho, algunos autores consideran que dicha tecnología deberá constituir a medio plazo el
método de respuesta por defecto de todo Sistema de Detección de Intrusiones [337, 341], aunque
aún existen poderosas argumentaciones en contra [133]. Timothy Wickham propone una precisa
denición de Sistema de Prevención de Intrusiones en su polémico artículo
Intrusion Detection
is Dead. Long Live Intrusion Prevention! :
Denición 1.24, Sistema de Prevención de Intrusiones (Intrusion Prevention
System):
System that actively monitor a network or host for attacks and block those attacks
from occurring.52 De esta forma, a partir de las tres categorizaciones descritas es posible plantear una primera taxonomía general, que ilustra de forma conveniente una primera aproximación al área de
conocimiento de la Detección de Intrusiones. La gura 1.11 ilustra dicha taxonomía
52
Sistema que monitoriza activamente una red o una máquina en busca de ataques, y que evita que dichos
ataques ocurran.
25
1.3.4. Características de los diferentes enfoques
En la actualidad aún no se ha desarrollado un modelo conceptual de Sistema de Detección de
Intrusiones de amplio espectro que minimice los inconvenientes que parecen estar inherentemente
asociados a sus diversas alternativas. Cada uno de los enfoques de diseño existentes proporciona
soluciones a determinadas cuestiones, pero adolece invariablemente de ciertos problemas, por lo
que se hace necesario contemplar la vía de la integración de múltiples métodos de análisis como
el camino a seguir [65, 116, 165, 398, 15, 105]. A continuación se incluye una relación de las
ventajas e inconvenientes que presentan cada una de las ramas de la taxonomía del apartado
anterior.
0.3.4.1 Recogida de información
Respecto a la cuestión de la recogida de información, o lo que es lo mismo, al objetivo estratégico de un Sistema de Detección de Intrusiones que dene su ámbito de aplicación, las
dos losofías de funcionamiento que se han introducido anteriormente (Detección orientada a
la Máquina y Detección orientada a la Red) presentan poderosas capacidades, que convierten a
ambas en extraordinarias herramientas de seguridad en prácticamente todo tipo de sistemas. Sin
embargo, ambos métodos muestran importantes debilidades, que hacen necesario un profundo
esfuerzo de reexión, de cara a la consecución de un modelo híbrido que maximice las capacidades reduciendo los inconvenientes [116, 164, 240, 92, 15, 204]. A continuación se relacionan las
cualidades y defectos de ambas.
0.3.4.1.1 Detección de Intrusiones orientada a la Máquina
La Detección de Intrusiones orientada a la Máquina fue el primer enfoque de diseño sobre
el que se empezó a trabajar en los orígenes de la Detección de Intrusiones [20], y constituye
probablemente la rama sobre la que tradicionalmente se ha desarrollado un mayor número de
investigaciones. En general, este tipo de detección está considerado como el potencialmente más
exacto en la toma de decisiones, debido simplemente a su ubicación dentro del propio sistema que
se pretende proteger. Este emplazamiento permite que el Sistema de Detección pueda determinar
con precisión los usuarios y procesos que están involucrados en un determinado ataque. Además,
desde esta localización, es capaz de analizar el impacto en el sistema de cualquier acción, ya que
tiene a su disposición toda la potencia del Sistema Operativo, y puede analizar detalladamente
sistemas de cheros, interfaces de red, etcétera, de forma ágil [116, 78, 28, 240, 92].
Sin embargo, en redes corporativas de medio o gran tamaño, el alto coste administrativo
que suponen los procesos de instalación, conguración y mantenimiento de todo un parque de
Sistemas de Detección de Intrusiones orientados a la Máquina, hace que esta solución sea inviable
en la mayoría de los casos. Por lo general su utilización queda circunscrita a sistemas servidores
[351, 28]. Éstas son las principales características de este tipo de sistemas, aunque es importante
26
prestar atención al conjunto de sus particularidades. A continuación se relacionan las ventajas e
inconvenientes que supone la utilización de esta clase de métodos.
0.3.4.1.1.1 Ventajas
Posibilidad de determinar el éxito o fracaso de un ataque
Habitualmente, los Sistemas de Detección de Intrusiones orientados a la máquina basan sus
decisiones de análisis en los registros históricos de eventos del sistema o de servicios de aplicación,
por lo que pueden obtener una medida precisa del grado de éxito o fracaso de un ataque. Los
sistemas orientados a la red, por el contrario, solamente pueden detectar intentos de intrusión,
pero no son capaces de determinar si dichos intentos han fructicado o no. De esta forma, en
general, los sistemas orientados a la máquina presentan una tasa de falsos positivos muy reducida,
lo que hace que sean un buen complemento de los sistemas de red: Éstos detectan los primeros
indicios de actividad sospechosa que aparecen en la red y sus homólogos orientados a la máquina
comprueban si esa actividad ha tenido impacto en el sistema o no. [351, 336, 28, 164, 240]
Monitorización de actividades especícas
Este tipo de sistemas de detección puede monitorizar la utilización que los usuarios de un sistema
hacen de sus recursos, pudiendo centrar su atención en cuestiones particulares como el acceso
o modicación de archivos, utilización de credenciales y privilegios, manipulación de software,
ejecución y manipulación de procesos, etcétera. Además, su especial ubicación hace posible que
cualquier actividad sospechosa de poner en compromiso la seguridad del sistema pueda ser no
sólo detectada, sino incluso interceptada, mediante una simple redirección de los servicios del
Sistema Operativo en el que se encuentran instalados. [351, 78, 336, 28, 164, 240, 92, 100]
Detección de ataques físicos
Evidentemente, un sistema de detección orientado a la máquina puede revelar cualquier actividad
subversiva que se lleve a cabo mediante la presencia física del intruso ante la víctima. En aquellos
casos en los que el atacante ha alcanzado tan importante nivel de acceso, un sistema orientado
a la red es incapaz de responder, ya que es posible que el intruso no necesite utilizar los recursos
de comunicaciones de dicho sistema, o que incluso sea consciente de que no debe hacerlo para
pasar desapercibido. Por el contrario, un sistema de detección orientado a la máquina no tiene
ninguna dicultad para detectar dicha intrusión y noticarla convenientemente. [164, 92, 204]
Detección de ataques a través de medios de comunicación cifrados
Dado que este tipo de sistemas se instala directamente en la máquina a proteger, es posible dar
respuesta a un problema que tradicionalmente se ha caracterizado por la ceguera absoluta que
produce en los sistemas de detección orientados a la red, como es la cuestión del tráco de red
27
cifrado. Para poder analizar correctamente cualquier tipo de información, un sistema de detección
orientado a la red debe ser capaz de comprender su estructura, lo cual puede convertirse en una
tarea imposible de realizar en la práctica en el caso de que el atacante decida aplicar métodos de
cifrado sobre dicha información. De esta forma, un intruso puede apoyarse en dichos algoritmos
para conseguir eludir la vigilancia del sistema de detección. Sin embargo, dado que la información
que llega al sistema atacado (conteniendo órdenes, archivos o herramientas) debe ser descifrada
antes de ser interpretada por el Sistema Operativo, un sistema de detección orientado a la
máquina no tiene dicultad alguna para realizar su cometido. [116, 336, 28, 164, 92, 100, 204, 50]
Detección de ataques en redes de comunicación conmutadas
Una de las soluciones que tradicionalmente han abordado el problema de las escuchas ilegítimas
en redes de comunicación, como es el diseño de redes conmutadas, hace que los sistemas de
detección orientados a la red convencionales no puedan acceder a la información que necesitan
para llevar a cabo su actividad de análisis, ya que dichos entornos impiden que esa información
llegue a ellos. Sin embargo, en el caso de los sistemas orientados a la máquina, esa cuestión no
representa un problema, ya que pueden disponer de forma natural de toda la información dirigida
hacia el sistema que protegen. [340, 28, 100, 204, 50]
Reducido tiempo de respuesta
Dado que este tipo de sistemas sólo es responsable de analizar la actividad que se da en el sistema
al cual dedican su vigilancia, el volumen de información que deben analizar es relativamente
pequeño. Por ello, es posible proporcionar una respuesta en condiciones de tiempo real, o muy
cerca de ellas. De esta forma, en la mayoría de los casos, la actividad del intruso puede ser
detenida antes de que pueda producir cualquier daño en el sistema. [240, 92]
0.3.4.1.1.2 Inconvenientes
Elevado coste administrativo y económico
En el caso de utilizar Sistemas de Detección orientados a la Máquina en una red corporativa
con múltiples sistemas conectados, es necesario instalar, congurar, administrar y mantener un
sistema de detección en cada uno de dichos sistemas. Evidentemente, esta consideración implica
un extraordinario coste de administración, que a menudo hace que este tipo de soluciones sea
descartado. Por el contrario, un único sistema orientado a la red es capaz, por sí solo o en pequeñas
colectividades de agentes, de llevar a cabo la vigilancia de toda una red corporativa. Por ello,
los costes económicos derivados tanto de los mencionados esfuerzos administrativos, como de la
inversión económica propiamente dicha, son por lo general muy altos, en comparación con los
sistemas orientados a la red. [116, 351, 78, 28, 240, 92, 204]
Vulnerabilidad de emplazamiento
28
Dado que este tipo de sistemas de detección se ubica en el propio sistema a proteger como si
fuera un aplicativo convencional, en aquellos casos en los que el intruso consigue alcanzar cierto
nivel de operatividad en dicho sistema, aparece el riesgo potencial de que el sistema de detección
pueda ser desactivado o subvertido por dicho atacante. Por el contrario, un sistema de detección
orientado a la red es susceptible congurarse de forma que su presencia sea no sólo inexpugnable
sino incluso inadvertida para cualquier usuario. [351, 336, 28, 240, 92, 100, 50]
Limitada área de inuencia
La propia idiosincrasia de estos sistemas hace que su ámbito de protección se vea limitado a un
único sistema, debido a que solamente son capaces de detectar actividad subversiva a partir de
los registros de solicitudes de servicio que los aplicativos hacen al Sistema Operativo de dicho
sistema (ya sea en el nivel de aplicación o en el nivel de servicio), o a partir del tráco de red
exclusivamente dirigido hacia el mismo. Además, esta forma de actuación hace que el sistema de
detección sea dependiente de la plataforma software (fundamentalmente del Sistema Operativo),
lo que introduce una compleja componente de heterogeneidad en sistemas de información en los
que conviven múltiples tipos de plataformas. Un sistema de detección orientado a la red, por el
contrario, es capaz de detectar comportamientos ilegítimos dirigidos contra redes enteras, ya que
la información que maneja uye por el medio de comunicación y está rigurosamente estandarizada
en forma de protocolos de comunicación. [351, 340, 78, 336, 28, 240, 204]
Sensibilidad del propio sistema de detección
Un intruso potencial puede orquestar un ataque de denegación de servicio dirigido hacia el propio
sistema de detección, con el objetivo de deshabilitarlo. De esta forma, una vez conseguida la desactivación de dicho sistema, las acciones de dicho intruso pueden realizarse con total impunidad
e incluso sin dejar rastro. Ésta es una característica especialmente indeseada, tanto en este tipo
de sistemas como en sistemas de detección orientados a la red, y que debe minimizarse haciendo
especial énfasis en el desarrollo eciente y optimizado de toda la arquitectura interna del sistema
de detección. [336, 28, 240, 100, 204]
Alto consumo de recursos
Dado que este tipo de sistemas de detección debe ubicarse en el propio sistema a proteger,
necesita hacer uso de sus recursos para su ejecución. Por un lado, el consumo de recursos de
almacenamiento suele verse incrementado notablemente, debido al volumen que habitualmente
presentan los registros históricos de los sistemas operativos, así como al tamaño de los registros
generados por el propio sistema de detección. Por otro, también es importante el consumo de
capacidad de procesamiento que se requiere, ya que es necesario analizar cada una de las peticiones de servicio que los usuarios del sistema o sus aplicativos solicitan al Sistema Operativo local.
Además, es necesario observar que, tal y como se ha explicado anteriormente, cada máquina de
29
la red corporativa debe tener instalado su propio sistema de detección, por lo que esos grandes
consumos se extienden a todo el parque informático de la organización. [116, 336, 28, 100, 204, 50]
0.3.4.1.2 Detección de Intrusiones orientada a la Red
La Detección de Intrusiones orientada a la Red constituyó una importante evolución, introducida por L. Todd Heberlein [161], del concepto de Detección de Intrusiones original. Hasta aquel
momento la protección de sistemas informáticos se había realizado desde las propias infraestructuras hardware y software que se deseaban salvaguardar, y esta nueva losofía originó un gran
interés académico, y numerosas investigaciones cientícas e inversiones comerciales. En general,
este tipo de detección está considerado como el más poderoso y el que mejores prestaciones ofrece
en grandes infraestructuras informáticas [240]. Su ubicación, anexa al sistema de explotación de
la organización, a través de la captura continua del ujo de información transmitido a través
de las redes corporativas, consigue que la interferencia o sobrecarga introducidas en el sistema
sean nulas y que las decisiones generadas por el sistema de detección tengan carácter global
[50]; todo ello sin los costosos requerimientos de administración de los sistemas orientados a la
máquina. No obstante, estos sistemas también presentan algunas limitaciones, como por ejemplo
su incapacidad para detectar ataques locales o para determinar el impacto de los ataques que
detectan [28, 92]. Por otro lado, el reducido impacto económico que tiene en los presupuestos de
infraestructura de la organización, hace que la Detección de Intrusiones orientada a la Red sea
una opción muy utilizada, y que alcanza en la actualidad altas cotas de cuota de mercado [351].
En rasgos generales, éstas son las principales propiedades de este tipo de soluciones, aunque es
importante observar sus características en conjunto. A continuación se relacionan las ventajas e
inconvenientes que supone la utilización de esta clase de métodos.
0.3.4.1.2.1 Ventajas
Extensa área de inuencia
Un único Sistema de Detección de Intrusiones orientado a la Red es capaz de detectar por sí mismo
cualquier tipo de actividad subversiva o anómala que utilice la infraestructura de comunicaciones
de una organización como medio de transporte, incluso en redes con alto número de sistemas
conectados. Además, en casos en los que el volumen de información que uye a través del sistema
de información supera la capacidad de respuesta del sistema de detección, su arquitectura general
permite que el escalado de dicho sistema sea realmente sencillo y natural [92]. De esta manera,
en el caso de grandes redes corporativas, la vigilancia de los recursos computacionales del sistema
queda en manos no ya de un único sistema de detección, sino en una pequeña colectividad de
procesos agente que colaboran en las tareas de recogida de información, análisis y respuesta.
[351, 78, 336, 28, 240, 92, 204]
Nulas interferencia y sobrecarga en el sistema objetivo
30
El despliegue de este tipo de sistemas de detección tiene un impacto nulo sobre la infraestructura computacional y de comunicaciones subyacente, ya que por lo general se destina para ello
una máquina adicional dedicada en exclusiva. Así, habitualmente, un sistema orientado a la red
captura de forma pasiva el tráco de dicha red, sin intervenir activamente en ningún momento.
Simplemente escucha, decide e informa si lo considera necesario. Por ello, esta solución es ampliamente adoptada por empresas y organizaciones de todo tipo [351]; en perjuicio de los sistemas
orientados a la máquina, que sí necesitan una importante cantidad de recursos provenientes del
sistema a proteger, como pueden ser memoria principal, capacidad de almacenamiento, capacidad
de procesamiento, etcétera. [116, 336, 28, 100, 204, 50]
Fortaleza de emplazamiento
Un sistema de Detección de Intrusiones orientado a la Red puede congurarse de manera que
sea virtualmente invisible para cualquier usuario de la organización, incluyendo por supuesto a
cualquier potencial intruso que tenga como objetivo a dicha organización. Su carácter pasivo
propicia esta característica e incluso es posible utilizar dispositivos hardware o componentes
software que garantizan dicha propiedad [83]. Existen ciertas soluciones de detección orientada a
la red que abogan por un comportamiento reactivo ante las amenazas, pero mantienen igualmente
esta propiedad de su inexpugnabilidad. Por el contrario, un sistema orientado a la máquina es
fácilmente detectable por un intruso, quien puede intentar ponerlo en compromiso para conseguir
sus nes. Además, esta invisibilidad evita cualquier posibilidad de alteración o corrupción de los
recursos del sistema de detección mismo, de forma que los habituales métodos de eliminación de
evidencias son inviables de antemano; a pesar de que existan ciertas técnicas [385] dirigidas a
evadir la vigilancia de dicho sistema de detección. [351, 336, 28, 240, 92, 100, 50]
Detección de ataques orientados a la red
Dado que este tipo de sistemas de detección analizan todos y cada uno de los paquetes de
información que circulan por la red de comunicaciones, pueden detectar ataques que se realizan
por debajo de los niveles de aplicación o de servicio a los que habitualmente acceden los usuarios
de una máquina. Por lo general, un sistema orientado a la máquina no analiza todos los diferentes
aspectos del tráco de red, por lo que es incapaz de detectar numerosos tipos de ataque, como
pueden ser los de denegación de servicio o los de fragmentación [385]. Por el contrario, un sistema
orientado a la red sí observa cada uno de los diferentes parámetros que componen dichos paquetes,
y puede responder de forma eciente ante un mayor número de amenazas. [116, 336, 240, 100, 50]
Bajo coste administrativo y económico
Debido a la notable amplitud del ámbito de inuencia que por lo general poseen los sistemas
orientados a la red, unas mínimas tareas administrativas y de supervisión y mantenimiento son
en general sucientes para una explotación adecuada de dicho sistema de detección. Asimismo, la
31
inversión económica necesaria se mantiene contenida en la mayoría de los casos, y es susceptible
de incrementarse progresivamente a lo largo del tiempo en aquellas situaciones cuya evolución
va requiriendo mayores prestaciones. [116, 78, 28, 240, 92, 204]
Reducido tiempo de respuesta
Al igual que los sistemas orientados a la máquina, los sistemas orientados a la red proporcionan
por lo general excelentes tiempos de respuesta, lo que permite detectar un ataque mientras se está
llevando a cabo. Esta capacidad de respuesta posibilita que el administrador reciba la noticación
de dicho ataque a tiempo para responder convenientemente. Además, en el caso de que el sistema
de detección incorpore capacidades de reacción, la respuesta puede en muchos casos llegar incluso
a detener el ataque en cuestión. [28, 164]
Independencia de la plataforma
Como se ha explicado anteriormente, este tipo de sistemas de detección utiliza los paquetes de
información que se transmiten por la red para tomar sus decisiones; paquetes que se caracterizan
por estar conformados en virtud de estándares que regulan sus diferentes características. Dado
que dichos estándares tienen como objetivo la denición formal de protocolos de comunicación
entre plataformas habitualmente heterogéneas, la información de la que se nutren los sistemas
de detección orientados a la red es compatible e interpretable por un amplio número de plataformas hardware y software. Esto hace que un mismo sistema de detección sea capaz de advertir
comportamientos subversivos en redes que interconectan sistemas de computación heterogéneos,
lo que lo convierte en una herramienta de seguridad excepcional. Por el contrario, los sistemas
orientados a la máquina son especícos de la plataforma, por lo que ante la necesidad de vigilancia de sistemas de información heterogéneos son necesarias diferentes soluciones de detección;
con los costes administrativos y económicos que ello conlleva. [116, 78, 336, 240, 100, 50]
0.3.4.1.2.2 Inconvenientes
Rendimiento en redes de alta velocidad
Ante el problema de la detección de intrusiones en redes de alta velocidad, los sistemas de
detección orientados a la red adolecen por lo general de dicultades en el correcto procesamiento
de todos los paquetes de información que uyen por dichas redes, en situaciones de alta ocupación.
Habitualmente, dichos sistemas integran en su arquitectura interna mecanismos de control de
congestión para tratar de paliar este problema, pero, como es lógico, dichos mecanismos tienen
capacidades nitas. Por ello, es posible la pérdida de paquetes de red que el sistema no ha sido
capaz de capturar temporalmente para su análisis. Esta característica constituye una importante
fuente de inspiración para todo tipo de intrusos, que intentan saturar el sistema de detección,
incapacitándole para responder correctamente. Actualmente, la tendencia consiste en migrar
32
el software de detección a dispositivos hardware que incrementen el rendimiento, así como la
especialización de los tipos de ataque a detectar, y la optimización de los recursos computacionales
necesarios para proporcionar una respuesta en unos márgenes de tiempo aceptables. A este
respecto, está comúnmente aceptada la consideración de estos sistemas de detección orientados
a la red como sistemas de tiempo real acríticos. [116, 336, 28, 164, 240, 92, 100, 204, 50]
Problemas de detección de ataques en redes de comunicación conmutadas
Las redes de comunicación conmutadas se utilizan actualmente de forma habitual en redes corporativas de tamaño medio y grande, y están basadas en la separación lógica de distintos segmentos
de red, lo que permite alcanzar mayores rendimientos de transferencia de información que en los
anteriores medios compartidos. Sin embargo, esta deseable característica evita el libre acceso al
tráco de red, lo cual es una cualidad imprescindible para el funcionamiento de todo sistema de
detección orientado a la red. Para poder analizar el tráco de información, el sistema detector
tiene que poder acceder a él. En cualquier caso, esta problemática tiene una repercusión relativa,
ya que la mayoría de dispositivos de conmutación incorpora puertos especiales53 que permiten
acceder al ujo completo de información. Basta con conectar el sistema de detección a uno de
esos puertos para garantizar su correcto funcionamiento. [340, 28, 100, 204, 50]
Problemas de detección de ataques a través de medios de comunicación cifrados
Dado que los Sistemas de Detección de Intrusiones orientados a la Red necesitan acceder libremente a la información que circula por dicha red, cualquier obstáculo a ese acceso, ya sea físico
como en el caso anterior, o lógico como en el caso en el que las comunicaciones estén sujetas a esquemas de cifrado de la información, incapacita a dichos sistemas para cumplir con su cometido.
Un sistema de detección que no es capaz de interpretar la información contenida en un paquete
de red, no puede realizar ningún análisis respecto de dicho paquete, ni tomar decisión alguna.
Éste es uno de los grandes handicaps que tradicionalmente ha venido sufriendo la Detección de
Intrusiones orientada a la Red, si bien existe una evolución de estos sistemas por la cual es posible
solventar este problema, y que se conoce como Detección de Intrusiones orientada al Nodo de
Red54 [84, 78, 241]. Este enfoque consiste en convertir un sistema orientado a la red en un sistema
orientado a la máquina, que analice el tráco proveniente del subsistema de comunicaciones de
dicha máquina, después de haber sido descifrado por la capa criptográca de la pila de protocolos
de red. Por supuesto, este avance implica un retroceso en la tradicional capacidad de los sistemas
orientados a la red de detectar intrusiones en grandes redes. [116, 336, 50, 28, 164, 92, 100, 204]
Imposibilidad de determinar el éxito o fracaso de un ataque
53
54
Conocidos como tap ports o mirroring ports.
Este enfoque da lugar a los conocidos Sistemas de Detección de Intrusiones de Nodo de Red o Network Node
Intrusion Detection Systems.
33
Por lo general, los sistemas de detección orientados a la red no son capaces de determinar si un
ataque detectado por ellos ha sido exitoso para el atacante o no. Sólo pueden precisar que en un
momento dado se produjo dicho ataque. Esta particularidad obliga a que, después de detectado
un determinado ataque, el administrador del sistema deba investigar manualmente el impacto
que ha podido tener dicho ataque en su organización. [351, 336, 28, 164, 240]
0.3.4.2 Análisis
La fase de análisis constituye el núcleo central del modelo general de funcionamiento de
todo sistema de detección, ya que es en él donde deben tomarse las decisiones importantes
que afectan a la seguridad del sistema de información que se pretende proteger. La anterior
fase de recogida de información, así como la siguiente, de respuesta, están caracterizadas por
realizarse de forma prácticamente automática, mecánica. Por el contrario, en esta fase de análisis
es necesario disponer de un modelo de representación de conocimiento y de un mecanismo de
inferencia de conclusiones que sean capaces de procesar las complejas relaciones que existen
entre los múltiples parámetros que es necesario estudiar. Por supuesto, es en esta fase de análisis
donde se encuentra concentrado el mayor interés estratégico de todo el área de conocimiento
de la Detección de Intrusiones, y es en ella también donde se registra una mayor actividad
investigadora, ya que aún no se ha conseguido un modelo general que consiga superar los retos
existentes. A este respecto, es interesante observar las conclusiones que se desprenden del estudio
realizado por Emilie Lundin y Erland Jonsson sobre la actividad investigadora en el área de
la Detección de Intrusiones [379] en los últimos años55 . La tabla 1.5 es ruto de dicho estudio,
y muestra claramente como la fase de Análisis es el área que oncentra un mayor interés en la
comunidad académica.
A continuación se describen las principales características de las dos grandes losofías de
funcionamiento sobre las cuales está construida la mayoría de los componentes de análisis de
los actuales Sistemas de Detección de Intrusiones: Detección de Usos Indebidos y Detección de
Anomalías. Como se comprobará, ambos métodos proporcionan importantes benecios, pero no
consiguen evitar ciertas debilidades. Esta situación obliga a seguir investigando en búsqueda de
un modelo que sea capaz de aunar las ventajas de ambos métodos, minimizando en la medida
de lo posible los inconvenientes [65, 116, 351, 147, 165, 336, 28, 164, 92, 15, 26, 339].
0.3.4.2.1 Detección de Usos Indebidos
Actualmente, la Detección de Usos Indebidos es el enfoque más extendido y el que ha fructicado con mayor rmeza en el mercado [351, 50, 28]; éxito que ha venido producido fundamentalmente por su eciencia y sencillez de administración. Su principio de funcionamiento es simple:
55
Para el desarrollo de este estudio se han tomado en consideración las conferencias de mayor prestigio y
contabilizado el número de publicaciones en cada una de las diferentes áreas. En la tabla 1.5 se han seleccionado
solamente las áreas descritas en el modelo general, si bien existen otras líneas de investigación laterales más
especícas, que escapan a los objetivos de esta introducción.
34
Cuadro 1.5: Áreas de investigación sobre Detección de Intrusiones con mayor actividad
35
A partir del conocimiento de los diferentes tipos de ataques utilizados por la comunidad hacker,
basta con recoger los eventos que se produzcan en un determinado sistema y contrastarlos contra
dicho conocimiento, para poder detectar intentos de subversión en el sistema.
Por lo general, este conocimiento se estructura en forma patrones que describen las peculiaridades de cada ataque. De esta forma, una base de conocimiento puede estar compuesta por
varios miles de patrones o rmas [29, 18], cada uno de los cuales debe ser comparado con los
sucesos que van teniendo lugar en la explotación cotidiana del sistema de producción. Este modo
de operación hace que el sistema sea realmente sólido y que detecte con precisión toda actividad
maliciosa que tenga registrada en su base de rmas. Sin embargo, es precisamente este mismo
modo de operación la causa de su más importante limitación: No es posible detectar nada que
no esté previamente documentado.
De esta manera, un intruso (que puede estar al corriente de la conguración de las bases de
conocimiento que se estén utilizando) puede realizar una ligera modicación de un ataque y pasar
desapercibido para el sistema de detección. Es más, cada día aparecen ataques completamente
nuevos, que por supuesto pasan inadvertidos a los detectores, a menos que se incluyan las nuevas
rmas. Como es obvio, esta cuestión obliga a realizar un continuo y costoso proceso de mantenimiento, que queda en manos del operador humano, y que hace que el sistema de detección vaya
perdiendo progresivamente su eciencia. Ante continuas actualizaciones de la base de rmas,
llega un momento en el que el volumen de patrones a contrastar consume más tiempo del que
tardan en producirse los eventos del sistema. El detector se satura y se empiezan a ignorar dichos
eventos. Por todo ello, si se desea conseguir una auténtica protección ante ataques novedosos,
es necesario explorar otras vías de investigación que complementen a los sistemas basados en
rmas. [116, 147, 84, 165, 28, 26, 100, 204]
A continuación se relacionan las ventajas e inconvenientes fundamentales que presenta este
tipo de sistemas de detección:
0.3.4.2.1.1 Ventajas
Precisión en la detección
Los Sistemas de Detección de Usos Indebidos son muy efectivos en la detección de los ataques
que tienen documentados. Esto es debido a que su principio de funcionamiento se reduce a la
comparación de la actividad cotidiana del sistema que se pretende proteger, con una base de
rmas de ataques que se construye a partir de vasto conocimiento experto sobre métodos de
intrusión y procedimientos para explotar vulnerabilidades conocidas. De esta forma, cualquier
actividad subversiva que se encuentre tipicada en dicha base de conocimiento es advertida
rápidamente. [116, 147, 165, 28, 26, 100]
Ausencia de falsos positivos
36
Dada la simplicidad del método de detección, no es habitual que se produzca el fenómeno del falso
positivo, siempre y cuando la base de conocimiento se encuentre convenientemente congurada.
Ésta es precisamente la mayor ventaja que presenta este tipo de sistemas de detección con
respecto a otros, como puede ser la Detección de Anomalías, que ha sufrido tradicionalmente
este problema. [116, 84, 28, 15, 100, 358]
Estabilidad del conocimiento
Una característica negativa que presentan algunos Sistemas de Detección de Intrusiones más
ambiciosos que los basados en la Detección de Usos Indebidos, es la posibilidad de que los modelos
de representación de conocimiento adaptativos que utilizan puedan ser dirigidos progresiva e
intencionadamente56 para que, llegado el momento, dejen pasar desapercibidos ciertos eventos que
el potencial intruso no desea que sean detectados. Si el sistema de detección es capaz de adaptarse
a los cambios de comportamiento de los usuarios, es posible que alguno de esos usuarios utilice esa
indeseable característica con nes maliciosos. Sin embargo, en el caso de la detección de rmas,
la sencilla estructura de su motor de decisión elimina este problema. [116, 84, 17, 28, 100, 204]
Bajo coste administrativo
Un Sistema de Detección de Usos Indebidos puede proporcionar de forma rápida y able un
diagnóstico exacto sobre la situación de un sistema de información, sin necesidad de laboriosos
procedimientos administrativos y sin necesidad de disponer de personal de seguridad excepcionalmente experimentado. [116, 147, 28, 15, 100, 358]
0.3.4.2.1.2 Inconvenientes
Incapacidad de detección de ataques no documentados
La limitación por excelencia de todo sistema de detección de usos indebidos, dada la naturaleza
del propio principio de funcionamiento, consiste en la incapacidad absoluta de este tipo de sistemas de advertir cualquier comportamiento subversivo que no se encuentre documentado en su
base de conocimiento. Dado el extraordinario número de vulnerabilidades que se encuentran diariamente, así como de procedimientos de ataque que las explotan [59], esta cuestión adquiere de
forma natural carácter de urgencia. Actualmente, las soluciones al problema pasan por la actualización automática periódica de las bases de rmas, si bien este método termina por reducir la
eciencia del sistema de detección a medio y largo plazo. [116, 84, 205, 17, 28, 15, 26, 100, 204, 358]
Rendimiento decreciente
56
Dicha técnica es conocida habitualmente como session creeping.
37
El crecimiento que se produce en las bases de conocimiento a medida que se detectan, analizan y
documentan nuevos tipos de ataques, hace que dichas bases sean complejas de mantener, y que
el rendimiento del sistema termine por degradarse. En esta situación, el sistema de detección
puede llegar incluso a saturarse, y a tomar la decisión de ignorar aquellos eventos que están
saturando sus mecanismos de control de la congestión. Por supuesto, si el sistema se ve obligado
a dejar de analizar eventos, su ecacia pasa a verse en un serio compromiso. De hecho, existen
técnicas de evasión de Sistemas de Detección de Intrusiones [385] que se basan en esta indeseada
característica. [116, 147, 100, 204]
0.3.4.2.2 Detección de Anomalías
Con el objetivo de aportar una solución al principal problema de los Sistemas de Detección
de Usos Indebidos, y proporcionar un método capaz de detectar ataques desconocidos hasta
el momento, surge la Detección de Anomalías [105], si bien hasta la fecha existen pocos casos
de éxito de dicha tecnología, debido fundamentalmente a la complejidad de administración que
la ha venido caracterizando. Tal y como se describe en la denición 1.1.17, su principio de
funcionamiento consiste en primer lugar en elaborar un perl del comportamiento habitual de
los usuarios. A continuación, la actividad cotidiana de los mismos es comparada con dicho perl, y
en el caso de que se observe alguna desviación signicativa, dicha actividad será clasicada como
anómala. Por último, se generará la pertinente respuesta, que en función de la conguración del
sistema podrá quedar reducida a una noticación de alarma al administrador, o por el contrario
llegar a provocar un efecto reactivo sobre el sistema.
Por lo general, este modelo de funcionamiento está basado en las propiedades estadísticas de
los diferentes eventos que se producen en el sistema. De esta forma, es posible que el sistema
de detección aprenda la naturaleza del comportamiento de los usuarios del sistema, e inera
sus conclusiones, por lo general construidas en base al concepto de probabilidad. Este modo de
operación hace que el sistema pueda prescindir de todo conocimiento apriorístico, y que pueda
detectar ataques para los cuales no existe un modelo previamente documentado. Sin embargo,
su naturaleza probabilística y la necesidad del sistema de detección de permanecer en un estado
de adaptación continua a las variaciones del comportamiento de los usuarios, hace a dichos
sistemas susceptibles de generar falsos positivos. Esta característica no es preocupante siempre
que se mantenga dentro de unos límites de excepcionalidad, pero puede convertirse en un serio
problema si se da con mayor frecuencia. De hecho, la minimización de los falsos positivos es uno
de los mayores retos que actualmente presenta esta tecnología. [116, 84, 28, 15, 26, 100, 204, 358]
A continuación se relacionan las principales ventajas e inconvenientes que presenta la Detección
de Anomalías:
0.3.4.2.2.1 Ventajas
Detección de ataques desconocidos
38
La mayor capacidad de este tipo de Sistemas de Detección de Intrusiones es precisamente la
de poder responder ante lo desconocido. Dado que su losofía de funcionamiento está basada
en el aprendizaje que el propio sistema de detección hace sobre la realidad de la infraestructura
hardware y software que pretende proteger, es este conocimiento aprendido el elemento que marca
la diferencia entre lo legítimo y lo subversivo. De esta forma, no es necesario documentar todos y
cada uno de los tipos de ataque que aparecen diariamente, sino que basta con realizar un ejercicio
de introspección que determine cómo se comporta habitualmente un sistema de información, y
cómo no. [116, 147, 84, 28, 15, 26, 100, 204, 358]
Documentación de ataques desconocidos
Dada la poderosa propiedad anterior, un sistema de detección basado en anomalías puede generar
automáticamente información descriptiva sobre los nuevos ataques que detecta. De esta forma, es
posible construir, en base a dicha información, nuevas rmas de ataques que pueden ser utilizadas
por los sistemas de detección de usos indebidos, de cara a la utilización conjunta de ambos. [28]
Rendimiento constante
El modelo de representación de conocimiento de este tipo de sistemas no necesita incrementar
su volumen de conocimiento, sino simplemente adaptarlo a ajustarlo a la realidad de la infraestructura subyacente. Esta propiedad hace que estos sistemas tengan un prometedor futuro, ya
que no adolecen del problema de la pérdida de eciencia que sufren los modelos de detección de
usos indebidos. [116, 147]
0.3.4.2.2.2 Inconvenientes
Inestabilidad del conocimiento
Dada la necesidad de este tipo de sistemas de detección de adaptación continua a la siempre cambiante realidad del sistema a proteger, el conocimiento adquirido por los Sistemas de Detección
de Anomalías presenta cierta propensión a la inestabilidad. El comportamiento del sistema cambia, y ese cambio puede inuir para que lo que en un momento dado ha podido ser considerado
como legítimo, ahora pase a ser subversivo, y viceversa: que lo que en el pasado era considerado
anómalo, pase a convertirse en habitual. Por supuesto, esta cuestión se da cerca de los umbrales
de detección, y no signica que el sistema sufra de indeterminismo. [116, 28, 26, 100, 204, 358]
Posibilidad de subversión del conocimiento
Debido a la misma necesidad de adaptación del apartado anterior, aparece una remota, aunque
posible, probabilidad de que el inherente proceso de aprendizaje de este tipo de sistemas sea utilizado subversivamente, con el objetivo de que en un momento del futuro el sistema de detección
deje de percibir como anómalos ciertos eventos maliciosos. Para ello, un intruso puede provocar a
39
lo largo de un cierto periodo de tiempo ciertos sucesos normales (legítimos), pero cuyos atributos
cada vez se van acercando progresivamente al terreno de lo anómalo. De esta forma, teóricamente, llegaría un momento en el futuro en el que el sistema, que se habría adaptado a esos cambios,
consideraría un evento antes subversivo como perfectamente legítimo. [116, 84, 17, 28, 100, 204]
Alto coste administrativo
En la actualidad, el proceso de aprendizaje que caracteriza a los sistemas de detección de anomalías aún no ha conseguido liberarse de una relativamente costosa tarea de conguración y administración. Asimismo, y dada la naturaleza cambiante de dichos sistemas, el mantenimiento
de los mismos también contribuye de forma notable a incrementar los esfuerzos que una organización necesita soportar para que su sistema de detección pueda ser explotado con las mayores
garantías. Además, dicho proceso de aprendizaje no sólo precisa de esas importantes tareas de
conguración y administración, sino que, además, los modelos computacionales que se utilizan
(como pueden ser las redes neuronales o los algoritmos genéticos) requieren muy frecuentemente
la supervisión del mismo por parte del operador humano. [116, 28, 15, 204]
Presencia de falsos positivos
Debido fundamentalmente a la naturaleza probabilística de los modelos de Detección de Anomalías, es frecuente la necesidad de tomar un compromiso sobre la magnitud del volumen de respuestas que se consideran convenientes para su correcto procesamiento posterior. Dicho compromiso
se establece habitualmente en base a valores umbral que separan lo que se considera normal (y
por lo tanto, legítimo) de lo que se considera anómalo (y por lo tanto, ilegítimo). Un umbral
muy restrictivo hace que cualquier desviación, por leve que sea, sea considerada merecedora del
lanzamiento de una alarma u otra acción de respuesta. En principio, la seguridad del sistema es
muy alta, y se responde ante cualquier evento sospechoso. Sin embargo, el volumen de respuestas
es enorme, y en el caso habitual de utilizarse la simple respuesta pasiva mediante noticaciones
de alarma, el administrador queda automáticamente saturado de ingentes cantidades de mensajes que no puede procesar y que por lo general sólo implican acciones legítimas pero ligeramente
desviadas del perl de comportamiento. O lo que es lo mismo: falsos positivos. Además, y lo que
es aún peor, entre esos grandes volúmenes de mensajes suelen pasar desapercibidos auténticos
peligros, los cuales no pueden ser físicamente diferenciados de los anteriores. Por el contrario, un
umbral muy permisivo genera un número razonable de respuestas, pero posibilita la no detección
de ataques cercanos a dicho umbral, dando origen a los aún más peligrosos falsos negativos.
Por todo ello, parece evidente la necesidad de buscar un equilibrio entre los dos extremos, que
permita minimizar ambos efectos indeseados, si bien su eliminación completa es improbable.
[116, 147, 84, 28, 15, 26, 100, 204, 358]
40
0.3.4.3 Respuesta
Una vez que el sistema de detección ha recogido un determinado evento y tomado la decisión
que considera más apropiada sobre él, es necesario dar una respuesta oportuna al mismo. En la
mayoría de los casos, dicha respuesta implica el lanzamiento de un mensaje de alarma hacia una
consola de gestión a cargo del administrador de dicho sistema. Este modo de actuación es lo que
se conoce como Respuesta Pasiva, y se realiza habitualmente de forma remota, bien mediante un
protocolo de noticación propio del sistema de detección, bien mediante algún esquema estándar
de gestión de sistemas como puede ser por ejemplo SNMP57 [351, 147], o bien mediante los
servicios de noticación de eventos que proveen los sistemas operativos. Por el contrario, existen
otras soluciones que apuestan por el uso de técnicas más activas, y que intentan mitigar de
forma automática los efectos de los potenciales ataques. Por lo general, una vez detectado un
ataque, este tipo de aproximaciones intentan recabar toda la información posible sobre el origen
de dicho ataque, tanto para poder así orquestar una respuesta más precisa, como para poder
tomar las acciones legales correspondientes con mayor conocimiento de causa. Además, también
es habitual llevar a cabo acciones correctoras del entorno atacado, abortando las conexiones del
intruso con la víctima, bloqueando el acceso de dicho intruso, protegiendo el acceso a servicios
del sistema agredido, etcétera. Asimismo, existen sistemas de detección que presentan un mayor
nivel de agresividad, y optan directamente por contraatacar contra el origen de la amenaza. Por
último, como se ha explicado en apartados anteriores, es importante prestar atención a un nuevo
enfoque que está surgiendo al respecto, y que coloca al sistema de detección dentro del ujo
de información, de forma que le es posible no ya sólo detectar un cierto ataque, sino incluso
interceptarlo. Este enfoque se denomina Prevención de Intrusiones, y pretende proporcionar un
mayor nivel de seguridad, ltrando de forma selectiva aquellos eventos dirigidos al sistema que
se pretende proteger. [116, 351, 84, 165, 340, 336, 50, 17, 28, 15, 26, 100, 204] A continuación
se describen las dos principales losofías de respuesta que presentan los actuales sistemas de
detección: La respuesta pasiva y la respuesta activa.
0.3.4.3.1 Respuesta pasiva
Como se ha descrito anteriormente, la respuesta pasiva constituye la forma de respuesta
más simple y a su vez más extendida, fundamentalmente debido a dos razones: Por un lado,
es habitual que los administradores de sistemas de detección de intrusiones preeran mantener
un control estricto sobre las acciones que se llevan a cabo en el sistema de información que
tienen a su cargo, de forma que cualquier hipotética decisión que pudiera tomar dicho sistema
de detección representa un riesgo de inestabilidad en el sistema que en la mayoría de los casos no
es aconsejable tomar automáticamente, sin un cierto proceso de reexión. Por otro lado, parece
lógico que la responsabilidad de llevar a cabo acciones críticas para el sistema, como suelen ser
las relativas a modicaciones en la política de seguridad (como es lo habitual), recaigan en un
57
SNMP o Simple Network Management Protocol: Protocolo de gestión de red, basado en UDP [288].
41
operador humano, y no en un sistema que se encuentra en continuo peligro de ser subvertido.
[116, 28] A continuación se relacionan las ventajas e inconvenientes más importantes de este
método de respuesta:
0.3.4.3.1.1 Ventajas
Rapidez de respuesta
La principal característica positiva de este método de respuesta es su sencillez y rapidez. Es
posible lanzar una noticación de alarma a la consola de gestión del administrador o incluso
a su teléfono móvil en el mismo instante que se detecta un ataque. Una correcta conguración
del sistema de detección, que mantenga la tasa de falsos positivos en unos límites razonables,
en combinación con este tipo de respuesta, puede ser perfectamente válido en la mayoría de los
casos. [15, 204]
Imposibilidad de subversión
Al contrario que en otros tipo de sistemas más ambiciosos y agresivos, con este tipo de respuesta
no es posible que un potencial intruso llegue a utilizar subversivamente las peligrosas capacidades
de actuación sobre el entorno de dichos sistemas. Deberá ser el operador humano quien decida
si es necesario activar el registro de datos sobre el intruso, bloquear su acceso al sistema, o
contraatacarle. Es un método simple, pero no adolece de los delicados efectos laterales de otros
esquemas más sosticados. [351, 84, 340, 50, 28, 15, 26, 204]
0.3.4.3.1.2 Inconvenientes
Incapacidad de reacción
Debido a la propia naturaleza de este método de respuesta, no es posible realizar ningún tipo de
operación ante una determinada evidencia de agresión. En algunos casos, existen ciertas acciones
operativas que pueden tomarse sin riesgo de ser utilizadas en benecio del atacante, como por
ejemplo el ltrado de paquetes de red mal formados, y que este método no puede realizar por
defecto. [340, 28, 204]
Posibilidad de saturación del operador humano
En el caso de disponer de un sistema de detección con respuesta pasiva que sufra del problema de los falsos positivos, el método por defecto consistente en el envío de noticaciones de
alarma al administrador puede llegar a saturarle por completo. De hecho, puede llevarle hasta
la más absoluta inoperancia. Además, en muchos casos un determinado evento malicioso es el
desencadenante de otros muchos, de forma que un único ataque se traduce en una avalancha de
noticaciones. [116, 340, 204]
42
0.3.4.3.2 Respuesta activa
Como se ha explicado anteriormente, existen tres niveles de agresividad en las respuestas de
tipo activo: Recogida adicional de información, reconguración del entorno lógico de la víctima, y
contraataque [116, 351, 84, 340, 17, 28, 15, 26, 100, 204]. Además, existe un aspecto adicional, en
función de la ubicación del sistema de detección, que permite no ya sólo detectar un determinado
ataque, sino además prevenir al sistema contra él [337, 116, 165, 341, 17, 358]. En el primer caso,
el principio de funcionamiento consiste en, dado que habitualmente el registro de información
que realiza el sistema de detección es muy limitado por cuestiones de espacio, incrementar la
granularidad de la información que se recaba, una vez que se tiene constancia de estar sufriendo
un ataque. De esta forma, es posible registrar las direcciones origen del ataque, los identicativos
de usuario responsables del mismo, los recursos que están siendo utilizados, etcétera, etcétera, de
cara a una posterior depuración de responsabilidades. En segundo lugar, se plantea la cuestión
de intentar detener un ataque, una vez detectado, o al menos, evitar ataques posteriores. Para
ello, la solución habitual pasa por la terminación abrupta de las conexiones de red que el intruso
ha activado hacia la víctima. Es posible que el mal ya esté hecho, pero así se intenta al menos
detener cualquier actividad del agresor lo antes posible. Además, también es habitual intentar
evitar cualquier intento futuro de acceso por parte de dicho intruso, mediante la reconguración
de los dispositivos de enrutado y de ltrado de paquetes. Asimismo, una solución de agresividad
máxima consiste en atacar mediante patrones de ataque predenidos aquellas direcciones desde
las cuales se lanzó el mencionado ataque. Por supuesto, este último extremo no es recomendable
en la práctica, dadas las ambigüedades legales existentes. Por último, en los casos en que el
sistema de detección se encuentre ubicado dentro del ujo de información por el que deben
circular las órdenes de los usuarios hacia el sistema, es posible realizar ltrado de alta precisión,
exclusivamente de aquellos eventos que se identican como potencialmente peligrosos.
0.3.4.3.2.1 Ventajas
Reacción automática
En este tipo de sistemas es posible congurar un cierto grado de respuesta automática, de forma
que es posible graduar su intensidad, en función del grado de certidumbre de que se disponga.
Por ejemplo, aquellos eventos de naturaleza evidentemente maliciosa pueden ser ltrados directamente por el sistema de detección, mientras que otras cuestiones en las que exista una mayor
ambigüedad pueden seguir dejándose en manos del administrador. Por su parte, otros eventos
de riesgo medio pueden activar un mecanismo de registro detallado. [116, 84, 340, 28, 15, 204]
Reducción del volumen de noticaciones de alarma
A pesar de que esta cuestión depende en gran medida de la naturaleza de la fase de análisis,
una respuesta activa congurada convenientemente, de forma gradual, puede contribuir a reducir
notablemente la carga de trabajo del operador del sistema de detección. [84, 340]
43
Posibilidad de intercepción del ataque
En el caso de que el sistema de detección se encuentre ubicado en forma de sistema de prevención
de intrusiones, esto es, dentro del ujo de información y con capacidad de intercepción de cada uno
de los eventos que componen dicho ujo, a las capacidades anteriores es posible añadir esta última.
Con ella, el objetivo tradicional de detección de la intrusión se extiende extraordinariamente, y
hace posible que cualquier evento clasicado como malicioso sea eliminado del sistema que se
está protegiendo. [28, 15, 204]
0.3.4.3.2.2 Inconvenientes
Potencial exceso de responsabilidad
Un importante inconveniente de los métodos de respuesta activa es precisamente una de sus capacidades. Así como la absoluta carencia de responsabilidad del sistema de detección perjudica
el rendimiento de dicho sistema, un alto grado de responsabilidad supone un riesgo de inestabilidad difícilmente aceptable por cualquier administrador experimentado. De esta forma, la
solución lógica pasa por encontrar un equilibrio entre ambos extremos, de manera que el sistema
pueda hacerse cargo de cuestiones menores y de repercusión controlada, mientras que el operador
humano toma la responsabilidad de las cuestiones de mayor impacto. [351, 84, 340, 28, 15, 26, 204]
Posibilidad de subversión
Esta característica se encuentra muy relacionada con la anterior, ya que en aquellos casos en
los que el sistema de detección asume un gran nivel de responsabilidad, es posible que esa
capacidad de actuación sea utilizada subversivamente por el intruso. Por ejemplo, es habitual
la reconguración de dispositivos de red para que realicen el bloqueo de aquellas direcciones
de red desde las cuales se ha detectado un determinado ataque. De esta forma, un agresor que
falsica dichas direcciones en los paquetes de información que intercambia con su víctima puede
conseguir que el propio sistema de detección se encargue de denegar un determinado servicio
a todas las máquinas de la red que está protegiendo, con lo que habrá conseguido servirse a
su antojo de la herramienta que supuestamente debía velar por la seguridad del sistema de
información. [351, 84, 340, 50, 28, 15, 26, 204]
44
1.4. Retos por alcanzar
La novedad más importante de ESIDE-Mendizale radica en el hecho de que hasta el momento no hay ningún producto inteligente de seguridad en terminales móviles. Las tareas que
actualmente se están llevando a cabo (F-Secure Mobile, Kaspersky) son simplemente antivirales,
por reconocimiento de rmas de malware conocido, y no permiten responder ante situaciones de
riesgo para la que no existe un modelo claramente denido y documentado. Sin embargo, son
muchas las novedades que aporta este proyecto y que lo hacen realmente interesante, tanto desde
el punto de vista cientíco, como desde el tecnológico, como desde el puramente mercantil. A
continuación se relacionan las más importantes:
1.4.1. Respuesta ante ataques no conocidos (Zero-Day Attacks) contra teléfonos móviles
El sistema generará automáticamente y en tiempo real un modelo de comportamiento habitual del usuario que accede normalmente al teléfono móvil, en concreto a través de las interacciones internas que tienen los procesos y aplicaciones de dicho usuario con el Sistema Operativo
del terminal. De esta forma, mediante auditoría continua de dispositivos, llamadas al sistema,
hilos de ejecución, memoria consumida, servicios del API del Sistema Operativo, etcétera, será
perfectamente posible detectar desviaciones respecto del perl habitual que puedan derivar en
situaciones de peligro para el sistema.
Además, esta técnica permite eliminar los costosos requerimientos de actualización que presentan los IDSs basados en reglas. A partir de las capacidades y limitaciones descritas en los
apartados anteriores, se pueden observar ciertas cuestiones generales del área de conocimiento
de la Detección de Intrusiones que después de veinte años de investigación permanecen sin una
solución ecaz, y que actualmente constituyen los grandes retos pendientes de esta disciplina
[65, 116, 351, 147, 165, 340, 78, 336, 28, 164, 15, 26, 100, 204, 358, 77, 84].
1.4.2. Aprendizaje Bayesiano no supervisado de perles de usuario
El principal reto que actualmente presenta la Detección de Intrusiones consiste en dotar a
los módulos de análisis de los sistemas de detección de la capacidad de detectar ataques no
conocidos, en base al comportamiento habitual de los sistemas de información y de sus usuarios.
Las cifras de vulnerabilidades que aparecen periódicamente son extraordinarias [59] y, aunque
las habituales actualizaciones automáticas de las bases de conocimiento contribuyen de forma
notable a mitigar su impacto, la solución pasa por encontrar nuevos diseños que se enfrenten
directamente al problema.
Gracias a la capacidad de aprendizaje probabilístico (aprendizaje de correlaciones entre variables, e incluso aprendizaje de la estructura de las relaciones entre ellas) e inferencia que proporcionan las Redes Bayesianas y las Cadenas de Markov, se puede eliminar la costosa componente
45
de conguración y mantenimiento que presentan la mayoría de los actuales IDSs.
De esta manera, tanto la generación de los antes mencionados perles de comportamiento,
como el análisis propiamente dicho, se realizarán de forma transparente para el usuario nal.
Como se ha mencionado en apartados anteriores, se pretende usar el entorno OpenPNL de
Intel Corporation, en concreto en todo lo relativo a inferencia y aprendizaje automáticos. (Está
previsto que Intel desarrolle una serie de tarjetas aceleradoras especícas para toma de decisiones
mediante OpenPNL: hecho que puede aportar unos rendimientos extraordinarios -probablemente
cambiará el orden de magnitud- en cualquier solución software desarrollada sobre dicho entorno.)
Para ello, la Detección de Anomalías se convierte en la opción más interesante, y que presenta
a priori mayores posibilidades. De hecho, es precisamente es en esta área en el que se concentra
actualmente el mayor número de investigaciones. Sin embargo, tal y como se ha explicado en el
apartado anterior, dicha losofía de análisis presenta importantes inconvenientes, como pueden
ser el exceso de falsos positivos o la propensión a la inestabilidad de sus modelos de representación
de conocimiento. Por ello, es necesario desarrollar nuevos métodos de análisis que integren de
forma homogénea las capacidades de los métodos de Detección de Anomalías y de los de Detección
de Usos Indebidos, potenciando de forma sinérgica las ventajas de ambos, y minimizando sus
desventajas. De esta forma, será posible responder adecuadamente ante ataques bien conocidos,
a la vez que ante ataques de nuevo diseño. [65, 116, 340, 78, 28, 92, 15, 83].
Además, en ESIDE-Mendizale se pretende resolver una problemática tradicional que han
venido sufriendo las Cadenas de Markov, en cuanto a sus requisitos de parametrización estática.
En el presente proyecto se aborda dicha cuestión de forma dinámica, mediante la novedosa técnica
de Bayesian Merging desarrollada por Stolcke y Omohundro, en combinación con los algoritmos
Forward, Viterbi y Baum-Welch.
1.4.3. Unicación de modelos de detección de intrusiones
Otro objetivo fundamental que se plantea dentro de la Detección de Intrusiones es el de la
unicación de las múltiples soluciones de análisis que existen actualmente, fundamentalmente
mediante la homogeneización de los diferentes modelos de representación de conocimiento existentes, tanto de detección basada en rmas como de detección basada en anomalías. Para ello,
el factor principal que debe tenerse en consideración es la taxonomía de los parámetros de análisis, ya que a partir de ellos y de su morfología deben construirse posteriormente los motores de
análisis responsables de la toma de decisiones. De esta forma, en caso de conseguirse un modelo
denitivo de representación que acredite potencia descriptiva y exibilidad, sería posible avanzar
tanto en el mencionado objetivo de unicación, como en el anterior de detección de ataques
desconocidos en base a la integración de modelos de análisis. Asimismo, y dada la naturaleza
evolutiva y siempre cambiante de las tecnologías subyacentes, un paradigma de esas características contribuiría a proporcionar grandes posibilidades de extensibilidad al sistema; cualidad ésta
que habitualmente marca la diferencia entre un Sistema de Detección de Intrusiones correcto y
46
uno excelente. [65, 116, 165, 205, 336, 164, 92, 15, 84].
1.4.4. Respuesta preventiva mediante intercepción de llamadas al sistema
Se pretende diseñar el IDS/IPS de manera que sea capaz de interactuar con el núcleo del
Sistema Operativo, de forma que sea posible interceptar comandos y solicitudes de servicio potencialmente peligrosas. Según los grandes gurús de la detección de intrusiones, esta losofía debe
marcar el futuro inmediato de los IDSs.
Conseguir que según se ejecuta un determinado código se bloquee llegando a un estado
anómalo en particular es como decir que se puede hacer frente a las amenazas e incluso solucionar
el problema que presentan de raíz, dado que después de la intercepción hay formas en las que
se puede devolver a un sistema al estado correcto de funcionamiento inmediatamente anterior.
Esta casuística será cubierta en profundidad en apartados posteriores.
1.4.5. Optimización de tasas de falsos positivos y falsos negativos
Como se ha explicado anteriormente, existen numerosos enfoques de Detección de Intrusiones
que aún adolecen del problema de los falsos positivos, sobre todo en el caso de aquéllos que se
enmarcan dentro del área de la Detección de Anomalías. La cuestión de la existencia de falsos
negativos también representa un problema, sobre todo en el caso de los sistemas de Detección de
Usos Indebidos, pero a menudo se solventa mediante el compromiso de realizar una conguración
del sistema que proporcione una mayor seguridad, a costa de un mayor coste administrativo. Por
otro lado, dicho efecto también suele mitigarse mediante una actualización frecuente de las bases
de conocimiento. De esta forma, el principal asunto que queda por resolver es la reducción del
volumen de falsos positivos, que en sí mismos pueden constituir una vulnerabilidad susceptible
de ser explotada por un ataque de denegación de servicio, no contra el sistema de detección, sino
contra el operador humano responsable de su administración. [116, 147, 165, 78, 336, 28, 92, 26,
204, 358, 77, 84].
1.4.6. Superación de limitaciones arquitectónicas
En apartados anteriores se han descrito ciertas limitaciones inherentes a los actuales Sistemas
de Detección de Intrusiones orientados a la Red y al Host, como son su incapacidad para recoger
(y por lo tanto analizar) convenientemente información en grandes bloques. Otra cuestión arquitectónica que frecuentemente introduce problemas de ecacia en dichos sistemas de detección
es el crecimiento que habitualmente experimentan las infraestructuras hardware y software de
las organizaciones. Este crecimiento puede llegar a impedir que el detector de intrusiones pueda
realizar su labor convenientemente, con lo que toda la seguridad que debería aportar desaparece.
Por ello, es necesario que el diseño estructural de cada una de las tres fases que componen el modelo general de todo sistema de detección contemple la cuestión de la escalabilidad con especial
47
atención. [116, 351, 78, 28, 15, 26, 100, 204, 84]
Todas éstas son cuestiones en efecto problemáticas, pero no suponen propiamente un reto,
ya que ya existen soluciones cuando menos parciales que las solventan. Es perfectamente posible
distribuir los procesos de recogida de información, análisis y respuesta en redes con alta carga o
que escalan de tamaño frecuentemente. Sin embargo, en la mayoría de los casos, dichos inconvenientes repercuten negativamente en la penetración de las tecnologías de Detección de Intrusiones
en empresas y organizaciones, que no desean realizar inversiones, esfuerzos administrativos, ni
reestructuraciones de infraestructura extraordinarias producto de la incorporación de dichas tecnologías. En las actuales condiciones, el retorno de la inversión no está claro, y el verdadero reto
consiste en desarrollar nuevos modelos que justiquen sin lugar a dudas la implantación de la
Detección de Intrusiones con todas sus consecuencias. Cuanto menos claro estaba hasta la fecha
el llevar el mundo de la Seguridad de la Información a los terminales móviles, pero como se ha
expuesto es de primera necesidad en los tiempos que corren.
1.4.7. Base de conocimiento estándar
Se pretende diseñar la base de conocimiento que da soporte al algoritmo de análisis en formato
XML, para que pueda ser portada a otros sistemas de análisis o incluso a diferentes plataformas
de computación, dado el objetivo generalista del presente desarrollo en cuanto a su ámbito de
aplicación.
No en vano se plantea su integración con los grandes sistemas operativos que copan actualmente el mercado de terminales de telefonía móvil avanzados, como son GNU/Linux, Windows
CE/Mobile, Symbian OS, Palm-OS.
1.4.8. Análisis de tráco de redes inalámbricas
Dado que la utilización de redes y protocolos de comunicación inalámbricos (GSM, GPRS,
EDGE, UMTS, 802.11b/g -WiFi-, Bluetooth, etc.) es una realidad cada vez mayor, este proyecto
contempla el desarrollo de una batería de reglas especícas para el análisis del comportamiento
de los usuarios que se conectan a los sistemas informáticos a través de estos medios, lo cual
redunda de forma natural en el carácter global de esta solución de seguridad.
1.4.9. Reducción de requerimientos administrativos
Actualmente, la incorporación exitosa de un Sistema de Detección de Intrusiones a la infraestructura computacional y de comunicaciones de una organización requiere un considerable
esfuerzo de tiempo de administración. De hecho, por lo general, el coste principal no es el relativo
a la inversión en las licencias de uso de los productos (frente al cual incluso es posible optar por
48
soluciones de detección de libre distribución58 sólidas y de reputada solvencia59 ), sino el derivado
del tiempo que es necesario invertir para conseguir una conguración adecuada, así como para
llevar a cabo un mantenimiento que asegure la ecacia del sistema de detección a lo largo del
tiempo.
Asimismo, también es determinante el hecho de que el proceso de detección pueda realizarse
de forma unicada sobre arquitecturas hardware y software heterogéneas, como corresponde a
la realidad de cualquier organización moderna, considerando múltiples plataformas, sistemas
operativos, servicios de aplicación, etcétera. Por todo ello, cualquier modelo de funcionamiento
que se plantee debe ser especialmente cuidadoso en mantener unos requisitos administrativos y
de supervisión mínimos, que permitan una adopción natural del mismo por parte de empresas y
organizaciones. [116, 351, 28, 164, 92, 358, 77, 84]
1.4.10. Adaptación al comportamiento del sistema
A pesar de que la fructífera línea de la Detección de Usos Indebidos cuenta con casos de éxito
sobresalientes, enormemente extendidos, y que se caracterizan por su relativa sencillez administrativa, cada vez es más necesario que los Sistemas de Detección de Intrusiones se adapten por
sí mismos a la siempre cambiante realidad de las infraestructuras informáticas que deben salvaguardar. Esta cuestión, que en el caso anterior de los sistemas basados en rmas es importante,
en el caso de los sistemas basados en anomalías es trascendental.
Como se ha explicado en apartados anteriores, la Detección de Anomalías está llamada a
ser la solución al problema de los ataques desconocidos, ya que es capaz a priori de ir más allá
que sus homólogos basados en patrones. No obstante, aunque este extraordinario objetivo se vea
satisfecho, sus habituales y costosos requisitos administrativos deberán desaparecer, o al menos
igualar a los de dichos homólogos, ya que ningún modelo de detección tendrá una verdadera
expansión si no minimiza sus costes de implantación y mantenimiento. [116, 351, 165, 336, 28,
164, 240, 92, 204, 358, 77]
1.4.11. Fortalecimiento del sistema de detección
Actualmente, es frecuente observar cómo el propio Sistema de Detección de Intrusiones se
ha convertido en uno de los primeros elementos del sistema en recibir ataques de todo tipo.
De hecho, en la mente del agresor, esta realidad es fruto de un razonamiento absolutamente
lógico. Para él, no es posible materializar sus subversivas intenciones de forma inadvertida bajo
la estrecha vigilancia del sistema de detección. O lo que es más, en aquellos casos en los que el
sistema esté congurado para prevenir ese tipo de comportamientos, dicho atacante ni siquiera
58
El concepto de software de libre distribución o software libre fue acuñado por Richard Stallman en 1.984.
Dicho concepto hace referencia a una forma de entender la informática que aboga por la libertad de los usuarios
para ejecutar, copiar, distribuir, estudiar, cambiar y mejorar el software [329].
59
Actualmente, el Sistema de Detección/Prevención de Intrusiones orientado a la Red de libre distribución por
antonomasia es Snort [242, 323].
49
tendrá la posibilidad de ejecutar acción alguna. De esta forma, el sistema de detección pasa a
ser una cotizada presa, que por lo general merece especial atención por parte del intruso.
Por ello, es imprescindible que el diseño e implementación de dicho sistema de detección
contemplen la resistencia a la subversión del mismo como un aspecto fundamental. De nada
sirve un sosticado módulo de análisis basado en complejas técnicas matemáticas, si el sistema
puede caer fácilmente ante un ataque de denegación de servicio, por ejemplo. Así pues, tiene que
ser extremadamente difícil para un intruso potencial conseguir desactivar o manipular cualquier
componente de dicho sistema de detección, así como lograr que sus acciones pasen inadvertidas
ante él. De hecho, es altamente recomendable considerar la posibilidad de que el propio sistema
sea capaz de automonitorizarse, en busca de ataques que hayan podido realizarse contra su
integridad; solución que ya se aplica, por ejemplo, dentro de algunos sistemas operativos, para
garantizar la consistencia de sus componentes internos. Además, es deseable que dicho sistema
de detección sea tolerante a fallos, en la medida en que debe ser capaz de recuperar su estado
ante fallos generales del sistema, ya sean éstos accidentales o intencionados. [116, 351, 165, 78,
28, 164, 92, 15, 26, 358, 77, 84].
1.4.12. Reducción del consumo de recursos computacionales
Hoy en día, la puesta en explotación de un Sistema de Detección de Intrusiones aún lleva
implícito un alto consumo de los recursos computacionales de la infraestructura que se pretende
proteger; especialmente en el caso de aquéllos sistemas que están orientados a la máquina. Por
ello, a pesar de sus grandes virtudes, la difusión de esta tecnología encuentra actualmente grandes
obstáculos a su incorporación como medida de seguridad en la infraestructura computacional y
de comunicaciones de numerosas organizaciones.
De esta forma, el diseño de los nuevos sistemas de detección debe asegurar la mínima sobrecarga posible de los mismos sobre los recursos del sistema de información objetivo del análisis, así
como la absoluta garantía de una nula interferencia en su actividad cotidiana. A este respecto,
a pesar de presentar algunas limitaciones intrínsecas (tal y como se ha explicado en apartados
anteriores), la tecnología de Detección de Intrusiones orientada a la Red se revela como el más
rme candidato al éxito, ya que el aprovechamiento que consigue de los recursos disponibles es
máximo. [116, 351, 78, 164, 92, 100, 77, 84]
1.5. Hipótesis fundamentales
A partir de los retos planteados en el apartado anterior, los cuales señalan la dirección en la
que debe orientarse toda investigación cientíca que se desarrolle en estos momentos en el área
de la Detección de Intrusiones, se establecen las siguientes hipótesis fundamentales,de ámbito
de aplicación, de unicidad y homogeneidad, sobre las cuales se sustentan los objetivos generales,
especícos y operacionales, así como el desarrollo mismo del presente trabajo:
50
Hipótesis fundamental 1: Ámbito de aplicación.
Se puede aplicar cualquier tipo de
técnica de Detección de Intrusiones (HIDS/HIPS) para sistemas cableados tradicionales en
terminales móviles.
Esta primera hipótesis se formula con el objetivo de explicar claramente que se ha llegado a
un punto tecnológico tan desarrollado, que es comparable un terminal móvil a un computador
cableado de hace años. Las técnicas de detección de intrusiones que se han estudiado engloban
mayoritariamente técnicas para sistemas cableados de análisis de funcionamiento del Software
Interno. Estás técnicas se van a poder aplicar en mayor o menor medida a los nuevos terminales
móviles, debido a que actualmente tienen la misma potencia que hace unos años el resto de
sistemas informáticos.
Hipótesis fundamental 2: Unicidad.
Es posible combinar en un único modelo de análisis
las principales ventajas de los métodos de Detección de Usos Indebidos y de Detección de
Anomalías orientados a la Host, e incluso alimentar el motor de Detección de Usos Indebidos
con los veredictos del motor de Detección de Anomalías
Esta segunda premisa se enuncia indicando que dado que los motores de Detección de Usos
Indebidos son más rápidos, una vez se obtenga un resultado por parte del Motor de Anomalías,
se puede incorporar a la batería de reglas del sistema. De esta forma de forma única se dispone
de un sistema que aglutina el conocimiento de ambos mundos de detección que tradicionalmente
han sido separados.
Hipótesis fundamental 2: Homogeneidad.
Es factible analizar de forma homogénea los
diferentes parámetros heterogéneos propios de los Métodos de Detección de Usos Indebidos y
de Detección de Anomalías orientados al Host. E incluso yendo un paso más adelante, se
pueden homogeneizar los veredictos entre Sistemas de Detección basados en Host (HIDS) con
los veredictos de los Sistemas de Detección basados en Red (NIDS).
Como puede observarse estas hipótesis pretenden aglutinar el resultado nal de el presente
proyecto: un sistema homogéneo entre diferentes fuentes:
Terminales Móviles (Symbian OS, Windows Mobile, Linux Mobile...)
Terminales Cableados
Redes y gestión de las mismas
Para lo que se ha creado una infraestructura que permita aglutinar de forma homogénea los conocimientos de los Sistemas Probabilísticos Expertos que se han desarrollado para cada submundo.
Aquí se abre una vía por la que una organización puede tener a buen recaudo el completo de
sus sistemas informatizados. Poco a poco se irá exponiendo la forma en la que se ha desarrollado
cada parte y el modo en que se va integrando en el sistema infraestructural completo.
51
1.6. Objetivos
Por todo lo anterior, el objetivo fundamental de ESIDE-Mendizale es desarrollar un Sistema
de Detección y Prevención de Intrusiones en Terminales Móviles, que detecte ataques conocidos
y no conocidos (Zero-Day Attacks), mediante Detección de Anomalías en las llamadas al Sistema Operativo; cumpliendo de esta forma con los objetivos del VI Programa Marco, dentro del
Espacio Europeo de Investigación, en concreto en todo lo relativo a la línea "Towards a Global
Dependability and Security Framework", que establece el objetivo prioritario de investigación
en medidas de seguridad orientadas al fortalecimiento de sistemas informáticos, para asegurar la
conabilidad en el uso de las TICs; así como con los objetivos del Plan de Ciencia y Tecnología del País Vasco, en el área prioritaria Entorno Seguro de Transacciones y Pago en Negocio
Electrónicoâ, del Programa Empresa Digital.
Asimismo, según las impresiones recogidas en la 11th International Conference on Concurrent Enterprising (recientemente celebrada en Munich y bajo la cual se organiza el Proyecto
MOSAIC, nanciado por dicho VI Programa Marco), la Seguridad en Movilidad es uno de los
pilares fundamentales para el pleno desarrollo de las TICs en Mobile Collaborative Working
Environments, una de las futuras líneas prioritarias del VII FP. Así pues, para ello, se creará
en tiempo real, mediante una herramienta matemática denominada Red Bayesiana (denominada
así en honor al creador de su principio básico de funcionamiento, Thomas Bayes, y desarrollada
como mecanismo computacional eciente de análisis multivariable por Judea Pearl, investigador
de la Universidad de Cambridge), un modelo del comportamiento normal del terminal móvil,
para posteriormente analizar la actividad cotidiana del mismo y detectar desviaciones que puedan comprometer su seguridad. En concreto, se pretende utilizar una tecnología recientemente
desarrollada y publicada por Intel Corporation, y conocida bajo el nombre de OpenPNL (Open
Probabilistic Network Library), para la programación de sus nuevos prototipos de chips de apoyo
inteligente a la toma de decisiones.
El objetivo fundamental que se pretende conseguir en el presente proyecto es el desarrollo de
una herramienta software que detecte ataques conocidos y desconocidos (aún no documentados)
contra terminales móviles, mediante el análisis de anomalías en las llamadas al Sistema Operativo.
Con esta información se pretende crear un modelo del comportamiento normal del trabajo
del dispositivo, para posteriormente comparar la adecuación de un determinado rastro o traza
de actividad (constituida mediante múltiples parámetros recogidos del sistema en tiempo real) al
modelo; permitiendo detectar desviaciones potencialmente peligrosas respecto al mismo. Estas
desviaciones son indicativas de un comportamiento anormal del sistema y denotan la necesidad
de noticar en forma de alarma dicho comportamiento, o de actuar de forma reactiva, impidiendo
que cualquier software malicioso pueda comprometer la seguridad del terminal.
Dada la actual situación de crecimiento del sector de las comunicaciones móviles, y las escasas
medidas de seguridad implementadas hoy por hoy en los terminales, es realmente factible el
desarrollar un producto comercial a partir del prototipo que se desarrolle en ESIDE-Mendizale.
52
Para ello, el objetivo especíco más importante que se pretende alcanzar, si bien no el único, es el
de desarrollar un nuevo método de Detección de Anomalías que resuelva las problemáticas de las
que aún adolecen los IDSs actuales y que, además, compatibilice dicho análisis con las habituales
restricciones computacionales y de almacenamiento que suelen presentar los terminales móviles.
Como ha podido observarse en el estudio del estado del arte llevado a cabo de cara a la
presentación, cada uno de los actuales enfoques de diseño de IDSs proporciona soluciones a
determinados problemas, pero deja sin tratamiento otras cuestiones; por lo que una labor importante que tendrá que afrontar el equipo investigador será la de desarrollar una solución que
sea capaz de modelizar de forma homogénea las dos grandes losofías de detección (Patrones de
Comportamiento Indebido y Anomalías), combinando las capacidades de ambas y eliminando sus
respectivos inconvenientes. De esta forma, podrá darse cumplimiento al objetivo de responder
ante situaciones de riesgo conocidas (mediante el conocimiento propio de la Detección de Patrones), y también ante situaciones anómalas (mediante el conocimiento propio de la Detección de
Anomalías), que podrían comprometer la seguridad del terminal.
Por otro lado, la capacidad preventiva de los actuales IDSs está muy limitada, y no es sucientemente efectiva en muchos casos. El IDS observa el comando, la llamada al sistema o el
paquete de red enviado por el atacante, pero no está en disposición de detener ese ataque. Como
mucho puede intentar abortar la conexión de red, o bloquear el rewall, cuando se trata de IDSs
de red, o denegar el acceso a algunos recursos cuando se trata de IDSs de host, pero por lo general
dichas respuestas suelen llegar tarde. Por lo tanto, su objetivo principal se reduce habitualmente
a la mera noticación del peligro, en la conanza de que el usuario o el administrador tomen las
contramedidas necesarias lo antes posible.
Así pues, el segundo objetivo especíco que se persigue en ESIDE-Mendizale consiste en
lograr no sólo la detección, sino también la intercepción de las solicitudes de actuación de los
usuarios del terminal móvil, para poder realizar el pertinente Análisis de Anomalías antes de que
dicha acción llegue realmente al Sistema Operativo, y sea por lo tanto ejecutada. De esta forma,
será perfectamente posible evitar ataques evidentes, con patrones conocidos y rmas de ataque
perfectamente reconocibles, y a la vez y de forma homogénea detectar ataques para los que no
existe un modelo previo pero que pueden resultar en algún tipo de perjuicio para el sistema.
Por último, una problemática adicional que suelen presentar los IDSs/IPSs, independientemente de su losofía de detección, es su alto grado de dependencia respecto del operador humano.
Por un lado, las baterías de reglas de los IDSs basados en reconocimiento de patrones deben ser
continuamente actualizadas con las rmas de los nuevos ataques se van documentando día a día,
para que el sistema pueda seguir manteniéndose efectivo. Por otro lado, los IDSs basados en
análisis de anomalías necesitan un profundo proceso de conguración personalizada y puesta a
punto, antes de ser lanzados a explotación y durante el funcionamiento cotidiano de la plataforma
en la que están instalados. Por supuesto, a este respecto, es muy conveniente mantener la losofía
de continua actualización ante el enemigo, pero también es muy deseable poder disponer de un
53
mayor nivel de automatización de los diferentes procesos del IDS/IPS; nivel de automatización
que puede conseguirse mediante técnicas de Inteligencia Articial como es el caso del Aprendizaje
Bayesiano No Supervisado que se plantea para este proyecto.
Siguiendo la línea anterior, el último objetivo especíco que se plantea en la presente propuesta
consiste en alcanzar un alto nivel de autosuciencia del IDS/IPS; objetivo que redunda de forma
natural en su exibilidad y adaptación a diferentes entornos y plataformas móviles. De esta
forma, estos objetivos persiguen el desarrollo de un IDS/IPS de Host Móvil, que sea capaz de
proteger de forma robusta toda la lógica implementada en los modernos terminales de telefonía
móvil, que se anticipe de forma eciente a situaciones de peligro conocidas o no, y que requiera
de una mínima interacción del operador humano; siendo su meta natural el posterior desarrollo
de un producto software estable y de calidad.
1.7. Estructura de la memoria
La organización de los capítulos de esta memoria es la siguiente:
Capítulo primero: Introducción.
En este capítulo se presenta el área de la Detección de
Intrusiones desde un punto de vista global, y se maniesta su relevancia como elemento de
seguridad en la actual Sociedad de la Información. Asimismo, se introducen los conceptos
fundamentales de Seguridad de la Información y Detección de Intrusiones, incluyendo el
modelo general de funcionamiento y las características más importantes que presentan
actualmente los Sistemas de Detección de Intrusiones. A continuación, a partir de dichas
características se enumeran los grandes retos que presenta la tecnología y se establecen las
hipótesis fundamentales sobre las cuales se basa la presente memoria. Por último, en base a
dichas hipótesis, se denen los objetivos generales, especícos y operacionales que deberán
alcanzarse para la correcta validación de las anteriores hipótesis.
Capítulo segundo: Entorno de trabajo.
En este capítulo se describen las dos disci-
plinas que conuyen en el presente estudio, como son la Detección de Intrusiones, por un
lado, y los Modelos de Redes Probabilísticas, por otro. Así, en primer lugar, en relación con
la primera de dichas disciplinas, se presenta la perspectiva histórica de los Sistemas de Detección de Intrusiones, desde su aparición en la década de los ochenta, hasta nuestros días.
Seguidamente, se continúa describiendo las diferentes áreas de conocimiento que componen
dicha disciplina, según el modelo conceptual propuesto por Emilie Lundin, y se analizan
las diferentes taxonomías de sistemas de detección propuestas por diversos autores, con el
objetivo de ubicar conceptualmente las hipótesis fundamentales y los objetivos enunciados. A continuación, se concluye con la descripción de las diferentes técnicas de análisis,
categorizadas según los dos grandes enfoques de diseño: Detección de Usos Indebidos y Detección de Anomalías. También se incluye un breve epígrafe en el que se describen algunas
implicaciones arquitectónicas. Por otro lado, en lo relativo a la segunda de las disciplinas
54
propuestas, se introducen los conceptos de Modelo de Red Probabilística y de Red Bayesiana, y se describen sus diferentes potencialidades, como son inferencia de conclusiones,
mediante diversos métodos de propagación exacta de evidencia, aprendizaje automático
estructural y paramétrico, y representación intrínseca de la magnitud temporal, mediante
el concepto de Red Bayesiana Dinámica.
Capítulo tercero: ESIDE-Mendizale.
Un framework bayesiano de Detección de Intru-
siones para Sistemas Móviles. En este capítulo se describe la solución propuesta, una vez
explorado el área de conocimiento de la Detección de Intrusiones, así como los diferentes
fundamentos probabilísticos. Dicha solución se ha dado en denominar ESIDE- Mendizale,
en correspondencia con el acrónimo de Mobile Environment for Discovery of Zero-Day
Attacks through Bayesian Learning. Por otro lado, para su descripción, se utiliza el modelo
conceptual propuesto por Emilie Lundin, cuya exhaustiva formulación sirve en esta ocasión
como inmejorable hilo conductor de la exposición. Así, a pesar de que las hipótesis fundamentales del presente estudio se ubican principalmente en la fase de Análisis, se describen
las cuestiones de Análisis de Riesgos y Formalización, Recogida de Información, Análisis,
Respuesta, Cuestiones Arquitectónicas, Fortaleza, Cuestiones Operacionales, Evaluación y
Aspectos Sociales.
Capítulo cuarto: Experimentación y Análisis de Resultados.
En este capítulo, una
vez denida la solución propuesta, se describe el proceso de experimentación realizado con el
objetivo de contrastar la validez de las hipótesis fundamentales de la presente memoria. Por
supuesto, a pesar de que son numerosas las implicaciones que presenta ESIDE-Mendizale
desde los diferentes puntos de vista, dichas hipótesis fundamentales se centran en la fase de
Análisis, por lo que la presente experimentación se orienta igualmente hacia esta cuestión.
Se incluyen secuencialmente los análisis de los resultados obtenidos a partir de los diferentes
experimentos.
Capítulo quinto: Conclusiones y Líneas de Investigación Futuras.
En este capítulo
se recogen las diferentes conclusiones obtenidas durante el desarrollo de las investigaciones
que han conducido a la consecución de los objetivos marcados en la presente tesis doctoral. Asimismo, también se incluye una relación de futuras líneas de investigación que son
susceptibles de abordarse a corto y medio plazo, y en base a las cuales es posible buscar
solución a ciertas cuestiones que aún permanecen por resolver, y a los nuevos retos que se
plantean a raíz de las conclusiones obtenidas.
Se concluye con un apartado dedicado a la bibliografía, con todas las referencias mencionadas
en esta memoria.
55
56
Capítulo 2
Entorno De Trabajo
2.1. Detección de Intrusiones
Durante la década de los ochenta y hasta la actualidad, el crecimiento exponencial de la
actividad subversiva contra sistemas de información de todo tipo [59] ha suscitado un desarrollo
igualmente acelerado en la investigación que se ha venido desarrollando en el área de la Detección
de Intrusiones.
Esta evolución está caracterizada por avances importantes que se han producido en momentos
puntuales, y ha venido modelando un panorama general complejo y en el que entran en juego
múltiples aspectos propios de los distintos enfoques de detección que se han desarrollado y sobre
los que se sigue investigando. Por ello, y dado que los objetivos marcados en el presente trabajo de
investigación se circunscriben a determinadas parcelas especícas de dicho panorama general, se
hace necesaria una acotación del ámbito del problema que se plantea. Con este n, en la presente
sección se procede a introducir las características generales del actual horizonte investigador, en
concreto a lo largo de los siguientes apartados, así como las características propias de aquellos
campos de la Detección de Intrusiones íntimamente ligados a los objetivos de la presente memoria,
en concreto a través del apartado de Técnicas
de Análisis .
2.1.1. Perspectiva
Tradicionalmente, las tareas de auditoría de los eventos de seguridad que se producían en
un determinado sistema de información eran llevadas a cabo de forma manual. Las máquinas en
explotación existentes en los diferentes tejidos de la sociedad no eran numerosas, las cifras de
usuarios y aplicaciones se mantenían en niveles bajos, y era no era descabellado el hecho de que
dichas tareas se realizaran de esa manera. Sin embargo, a medida que el número de máquinas,
usuarios, servicios de aplicación, capacidades de conectividad, etcétera, crecía, la magnitud del
número de eventos de seguridad adquiría progresivamente una mayor dimensión que hacía inviables los tradicionales procedimientos de auditoría. Era necesario abordar la búsqueda de nuevos
57
métodos de trabajo automatizados [84, 78, 28, 271, 15] .
De esta forma, en el año 1.980, James P. Anderson desarrolló un estudio, a petición de las
Fuerzas Aéreas de Estados Unidos [362], en el que propuso un sistema de clasicación automático
que utilizaba los eventos registrados por el subsistema de auditoría del Sistema Operativo para
detectar actividades subversivas a partir del comportamiento habitual de los usuarios de un
determinado sistema. Este trabajo supuso el comienzo de la Detección de Intrusiones en general,
así como de la Detección orientada a la Máquina y la Detección de Anomalías, en particular.
Muchas de las investigaciones que se han desarrollado desde entonces utilizan este concepto [20],
incluido el presente trabajo de investigación.
Posteriormente, a mediados de los ochenta, SRI International [327] comenzó un intenso esfuerzo investigador, por iniciativa del gobierno de los Estados Unidos, con el objetivo de analizar
los registros de auditoría de los grandes sistemas informáticos gubernamentales y crear perles de
comportamiento de los usuarios de dichos sistemas. En las primeras fases de esta investigación,
la Doctora Dorothy Denning diseñó un primer modelo general de Sistema de Detección de Intrusiones, a partir del cual se desarrolló posteriormente el denominado proyecto IDES1 [237, 396].
Las conclusiones obtenidas a partir de la realización de dicho proyecto están recogidas en su histórico artículo An Intrusion Detection Model [105], y aún hoy siguen constituyendo un referente
fundamental para todo trabajo de investigación que se desarrolle sobre el tema, sobre todo en el
campo de la Detección de Anomalías.
Por otro lado, mientras SRI International llevaba a cabo dicho proyecto IDES, el Laboratorio Lawrence Livermore [263] de la Universidad de California Davis [264] abordó el desarrollo
del proyecto Haystack2 , cuyo objetivo era la construcción de una nueva versión de Sistema de
Detección de Intrusiones para las Fuerzas Aéreas que proponía el análisis de los registros de auditoría mediante la comparación de los mismos con una batería de patrones de ataque predenidos
[Smaha88]. Dicho proyecto dio origen a lo que hoy se conoce como Detección de Usos Indebidos, y su evolución natural, denominada DIDS3 [322], constituyó asimismo la primera solución
distribuida de Detección de Intrusiones.
Posteriormente, al inicio de la década de los noventa, Todd Heberlein, investigador de la
Universidad de California Davis, presentó la idea de la Detección de Intrusiones orientada a la
Red. Hasta entonces, los estudios realizados por Anderson, Denning y el Laboratorio Lawrence
Livermore se habían centrado únicamente en la Detección orientada a la Máquina, de forma
que el desarrollo del denominado proyecto NSM4 supuso una revolución conceptual en el área
[161]. Además, las aportaciones de Heberlein fueron recogidas por el equipo de investigación
1
2
IDES: Intrusion Detection Expert System.
En una entrevista telefónica con Crosby Marks, uno de los desarrolladores del proyecto, éste confesó que:
"Searching through this large amount of data for one specic misuse was equivalent to looking for a needle in a
haystack." Este sentimiento del equipo investigador ante la magnitud del problema con el que se enfrentaban les
llevó a decidir dejar simbólica constancia del mismo en el propio nombre del proyecto [271].
3
4
DIDS: Distributed Intrusion Detection System.
NSM: Network Security Monitor.
58
del proyecto Haystack, quien extendió el proyecto DIDS con las nuevas ideas, proponiendo por
primera vez el concepto de Sistema de Detección de Intrusiones Híbrido.
En este ámbito, durante los últimos diez años, las diferentes investigaciones cientícas han
ido estabilizándose (como pueden ser los proyectos NIDES5 [19], EMERALD6 [384] o la familia
STAT7 [367, 170]), de forma que, desde nales de los años noventa y hasta la actualidad, han
aparecido múltiples productos comerciales y de libre distribución sólidos y de contrastada solvencia (como pueden ser ISS RealSecure [335] o Snort [323]), por lo general basados en Detección
de Usos Indebidos, que proporcionan soluciones ecientes a muchas de las problemáticas que
presenta el área de la Detección de Intrusiones.
Sin embargo, tal y como se explica en el apartado 1.3, la tecnología de la Detección de Intrusiones aún presenta grandes retos por superar, y aunque existen pruebas de concepto ambiciosas
y que prometen grandes resultados, dichas aproximaciones se basan por lo general en la integración de soluciones parciales, y no en el desarrollo de un modelo de representación e inferencia
intrínsecamente completo [116]. Por ello, todavía es necesario seguir trabajando en el diseño de
nuevos modelos que aborden los problemas de una forma unicada y homogénea, tal y como se
enuncia en las hipótesis fundamentales del apartado 1.4.
2.1.2. Modelo conceptual de Lundin
El desarrollo de un Sistema de Detección de Intrusiones no se limita a la obtención de un
mecanismo hardware o software que realice las tres operaciones fundamentales de recogida de
información, análisis y respuesta, constituyentes del modelo general de funcionamiento descrito
en el apartados anteriores.
Por el contrario, dichas componentes se encuentran ubicadas dentro de un contexto más
amplio y en el que existen ciertas cuestiones adicionales que es necesario tener en especial consideración a la hora de abordar el diseño de todo sistema de detección. Estas cuestiones son, en
concreto, la adaptación de dicho sistema al sistema de información que se desea proteger, el impacto administrativo y económico inherente a su despliegue, y el mantenimiento de la seguridad
ante ataques dirigidos hacia él [204, 154]. Asimismo, también es necesario prestar atención a otros
aspectos fundamentales como puede ser la denición de la taxonomía de ataques que se pretende
detectar, o la metodología de evaluación de dicho sistema de detección [17, 26, 100]. Por último,
existen ciertas consideraciones éticas y legales sobre las que igualmente es necesario realizar una
profunda reexión [116, 154]. Emilie Lundin describe este contexto, en su tesis doctoral, de una
forma excepcionalmente precisa. La gura 2.1 está extraída de dicho estudio y pretende ilustrar
las distintas áreas de conocimiento.
5
6
7
NIDES: Next Generation Intrusion Detection Expert System.
EMERALD: Event Monitoring Enabling Responses to Anomalous Live Disturbances.
STAT: State Transition Analysis Tool for Intrusion Detection.
59
Figura 2.1: Modelo conceptual de Lundin
Áreas de conocimiento
A continuación se describen las nueve áreas de conocimiento propuestas por Emilie Lundin,
las cuales sirven, además de para denir el exhaustivo modelo conceptual descrito en el apartado
anterior, para categorizar la actividad investigadora que se realiza actualmente en el campo de
la Detección de Intrusiones:
Análisis de Riesgos y Formalización
Ésta es el área de conocimiento en el que se establecen los fundamentos básicos de todo el proceso
de Detección de Intrusiones subsiguiente. En ella se dene el ámbito del problema de la detección
y se formaliza la taxonomía de intrusiones y de parámetros de detección que se pretende utilizar
como objetivo [116, 17, 26, 358, 304] . El Sistema de Detección de Intrusiones solamente será
capaz de detectar aquellos ataques que puedan especicarse en base a dicha taxonomía. De esta
forma, en este apartado, se estudian por tanto los diferentes tipos de vulnerabilidades, intrusiones
e intrusos, que se constituyen en elementos de riesgo para las plataformas tecnológicas que se
pretende proteger. Como es lógico, sin una suciente atención a esta cuestión en la fase de análisis,
sería extraordinariamente difícil desarrollar un modelo de Sistema de Detección de Intrusiones
que fuera realmente ecaz ante cualquier tipo de ataque. Además, sin unos objetivos claros y bien
denidos también se hace especialmente ardua la tarea de evaluación de la ecacia y eciencia
de cualquier tipo de sistema de detección [93].
Recogida de Información
60
En esta área se denen la taxonomía y el formato de los datos que se deben registrar para
desarrollar convenientemente las tareas de análisis. Además, otras cuestiones fundamentales que
se plantean en este punto son cómo debe realizarse la tarea de recogida de información, qué
mecanismos de recogida son los más adecuados para ser utilizados, dónde se va a realizar el
almacenamiento de dicha información, y en qué puntos del sistema es más conveniente realizar
dicha recogida. El posterior análisis y por lo tanto el resultado último de la detección, serán tan
ecaces como lo sea el presente proceso de recogida de información [116, 92, 204, 277, 134, 255].
Una mala calidad de los datos recogidos se traduce habitualmente en una menor cobertura ante
los ataques, una mayor tasa de falsos positivos, y en una reducción de la eciencia.
Análisis
La tarea de análisis es el corazón de la Detección de Intrusiones, su núcleo, ya que de ella
dependen las decisiones últimas que deben tomarse en el sistema de detección. En esta área
recae, por lo tanto, la responsabilidad de determinar con precisión y eciencia la línea que separa
el comportamiento legítimo de los usuarios de la infraestructura tecnológica de una determinada
organización, del comportamiento subversivo contra dicha infraestructura. De esta forma, el reto
que supone afrontar dicha responsabilidad hace que sea precisamente este componente de análisis
el que constituya el área de conocimiento sobre la cual se viene realizando en los últimos años el
mayor número de investigaciones y publicaciones cientícas [65, 116, 84, 340, 78, 28, 92, 15, 26,
367, 100].
Respuesta
Una vez que el componente de análisis ha tomado una decisión, es responsabilidad del componente
de respuesta llevar a cabo las acciones pertinentes. En el caso de haberse detectado un intento de
intrusión, o bien una intrusión efectiva, es necesario poner en marcha los mecanismos de alerta
pasiva o activa de que se disponga. Es perentorio noticar dicha intrusión al administrador del
sistema, y mitigar en la medida de lo posible el impacto potencial de dicha intrusión sobre la
infraestructura tecnológica. Las investigaciones en esta área apuntan hacia el desarrollo de nuevos
modelos de representación gráca de intrusiones, mecanismos de respuesta automática ecaces y
seguros, y elaboración de deniciones formales de las limitaciones a las que deben estar sujetos
dichos mecanismos de respuesta activa [116, 27, 28].
Cuestiones Arquitectónicas
La realidad tecnológica de la mayoría de las actuales corporaciones y organizaciones está caracterizada por el alto nivel de conectividad de sus sistemas de computación. La presencia de redes
de comunicación de diferentes tipos es condición sine qua non y la distribución de los componentes de los modelos de negocio propiciada por dicha conectividad es una práctica ampliamente
extendida.
61
De esta forma, no es descabellado pensar, asimismo, en la distribución de las distintas etapas
del proceso de Detección de Intrusiones [89, 116, 49, 92, 384, 330, 322], con el objetivo de
alcanzar mayores cotas de eciencia, tolerancia a fallos y escalabilidad. Sin embargo, la habitual
heterogeneidad de los sistemas de computación, así como de las redes de comunicación, introduce
una importante componente de complejidad en el sistema de detección, a la hora de recoger
información proveniente de diferentes sistemas operativos, diferentes protocolos de comunicación,
diferentes servicios de aplicación, etcétera.
Por otro lado, existen ciertas particularidades técnicas propias de los diferentes tipos de
arquitecturas que pueden llegar a suponer un obstáculo en la labor de dicho sistema de detección,
como pueden ser las anteriormente descritas cuestiones de las redes conmutadas o del cifrado de
las comunicaciones. Los costes de administración pueden elevarse considerablemente, en función
de la exibilidad que permita el sistema de detección en el momento de su despliegue. [351, 84,
78, 28, 15, 26, 100, 204]
Fortaleza
Como se ha explicado en apartados anteriores, el propio Sistema de Detección de Intrusiones
se convierte desde el momento de su implantación en uno de los objetivos fundamentales de
cualquier intruso. Para él, es necesario pasar lo más desapercibido posible, y la labor del sistema
de detección es precisamente la contraria. Esta es la razón por la que los sistemas de detección
suelen ser objeto de múltiples atentados contra su propia integridad y disponibilidad[116, 385].
En concreto, es muy importante proteger la etapa de recogida de información, tanto durante el
desarrollo de la misma, como posteriormente, en el momento del almacenamiento de la información que debe surtir al proceso de análisis [191]. De otra forma, la información de partida puede
ser objeto de subversión y el sistema de detección estaría proporcionando una falsa sensación de
seguridad. [116, 351, 84, 165, 78, 28, 164, 92, 15, 26, 358, 77]
Cuestiones Operacionales
Existe una amplia colección de cuestiones relativas a la utilización de los Sistemas de Detección
de Intrusiones por parte de los usuarios, entre las que se encuentran la cuestión del mantenimiento, la escalabilidad, la portabilidad o la extensibilidad. Además, existen otros aspectos
importantes como pueden ser la interoperabilidad entre los distintos componentes o incluso entre distintos sistemas de detección, o la supervisión administrativa necesaria para la correcta
parametrización de dichos sistemas. Por ello, es necesario prestar especial atención a esta cuestión de la operatividad, ya que puede marcar en muchos casos la diferencia entre una solución
eciente y que ofrece resultados de conanza, y un software sin utilidad real para el usuario
[116, 351, 84, 340, 28, 164, 92, 15, 358, 77].
Evaluación
62
Esta área de conocimiento debe enfrentarse a una cuestión sobre la que aún hay mucho trabajo
por desarrollar, como es la vericación de los resultados, tanto de análisis como de rendimiento, ofrecidos por los Sistemas de Detección de Intrusiones. Dicha cuestión de la evaluación ha
demostrado empíricamente ser un problema de difícil solución, ya que no es fácil encontrar una
taxonomía precisa de las propiedades de detección que deben medirse. Es necesario denir las
propiedades que caracterizan de la forma más adecuada múltiples tipos de sistemas de cómputo
y diferentes tipos de redes de comunicación, y además es necesario denir el conjunto de procedimientos de evaluación que deban aplicarse sobre dichas propiedades. De lo contrario, ante la
ausencia de una referencia sólida en la cuestión de la evaluación, ni los fabricantes de solución de
detección podrán comprobar la efectividad de sus productos, ni los investigadores podrán estar
seguros de la solidez de los modelos de detección sobre los que investigan [116, 249, 93, 232, 184].
Aspectos Sociales
La última cuestión componente del modelo conceptual hace referencia al nivel de responsabilidad
social que puede recaer sobre las decisiones tomadas por el Sistema de Detección de Intrusiones, y
que pueden afectar a terceras partes. Los problemas básicos que pueden observarse a este respecto
hacen referencia, por un lado, al nivel de agresividad que puede congurarse en la respuesta del
sistema de detección (máxime teniendo en consideración cuestiones como la potencialidad de
falsicación de la identidad del atacante), así como las cuestiones de privacidad derivadas de
la recogida de información necesaria para el proceso de detección. Asimismo, existe una última
consideración consistente en la potencial adaptación de los modelos de respuesta con el objetivo
de que sean capaces de proporcionar información pericial de carácter forense[116, 28, 154, 358] .
Actuales Líneas de Investigación
Cada una de las áreas de conocimiento descritas anteriormente presenta en mayor o menor
medida ciertas cuestiones aún no resueltas y sobre las cuales la comunidad cientíca plantea sus
líneas de investigación, con mayor o menor intensidad.
Con el objeto de construir una imagen de conjunto de los estudios más importantes que se
están llevando a cabo en la actualidad en el área de la Detección de Intrusiones, Emilie Lundin
y Erland Jonsson han realizado una recopilación de los artículos publicados en las conferencias
más representativas del sector durante los últimos años [116].
En la siguiente tabla, se incluye la versión completa que aparece en el estudio original, y en
la que se hace referencia al número de investigaciones realizadas en los últimos años en las nueve
áreas de conocimiento que componen el modelo conceptual.
63
Cuadro 2.1: Líneas de Investigación sobre Detección de Intrusiones
Relación entre retos y líneas de investigación
Cada una de las líneas de investigación descritas anteriormente y cuyo volumen de publicaciones se recoge en el apartado anterior, está íntimamente relacionada con los retos tecnológicos
descritos en el Capítulo 1. La tabla puesta a continuación describe de forma gráca dichas relaciones. Como puede observarse, la línea de investigación de análisis (la cual presenta, con una
gran diferencia con respecto al resto de líneas, el mayor número de publicaciones, según la tabla
anterior) aborda por sí misma la mayoría de los retos fundamentales descritos en el capítulo
primero, por lo que la selección de la misma como elemento fundamental del presente trabajo de
investigación puede calicarse como una opción más que razonable.
2.1.3. Taxonomía
De entre los diferentes elementos componentes del modelo conceptual de Lundin, aquéllos
que tradicionalmente se han utilizado para categorizar las distintas tipologías de Sistemas de Detección de Intrusiones han sido los que corresponden al conjunto de consideraciones funcionales
básicas. De esta forma, la recogida de información, el análisis y la respuesta son los tres pilares fundamentales que se consideran habitualmente, si bien en algunas ocasiones otras cuestiones
adicionales (arquitectónicas u operacionales, por lo general) son utilizadas también como criterios
de categorización. A este respecto, autores de reconocido prestigio internacional como pueden ser
Alessandri, Allen, Axelsson, Bace, Debar, Kahn, Krügel o Lazarevic, expresan diferentes sensibilidades respecto a la cuestión de la categorización, por lo que no existe una taxonomía general
64
Cuadro 2.2: Relación entre retos de la Detección de Intrusiones y líneas de investigación
única que pueda utilizarse como referente universal. Por ello, y con el objetivo de establecer una
clasicación general sobre la cual denir el ámbito y la ubicación conceptual del presente trabajo de investigación, se incluye a continuación un breve estudio sobre las diferentes alternativas
existentes.
Taxonomía de Alessandri et al.
A pesar de que el objetivo principal del trabajo de Alessandri et al. [17] consiste en clasicar,
fundamentalmente a nivel operacional y no tanto a nivel conceptual, tanto los distintos tipos de
sistemas de detección, como los distintos tipos de actividad subversiva, incluye una interesante
taxonomía general de Sistemas de Detección de Intrusiones. La gura siguiente ilustra dicha
taxonomía:
Dicha taxonomía está construida a partir de un modelo general de funcionamiento simple, en
el cual solamente se consideran los componentes de recogida de información y análisis. Dicho modelo general es compatible con los esfuerzos que desarrolla el Intrusion Detection Working Group
(IDWG) del IETF con el objetivo de estandarizar los ujos de información entre componentes
[102].
Taxonomía de Allen et al.
Julia Allen se aproxima considerablemente al modelo general propuesto por Alessandri [15].
En este caso, la descripción funcional de un Sistema de Detección de Intrusiones se divide en
tres elementos componentes: Sensor, analizador e interfaz de usuario. Alessandri consideraba
65
Figura 2.2: Taxonomía de Alessandri et al.
Figura 2.3: Modelo general de Alessandri et al.
66
Figura 2.4: Taxonomía de Allen et al.
que la cuestión del interfaz podía generalizarse fuera del sistema de detección, por lo que sólo
contemplaba las dos primeras cuestiones. Por otro lado, a partir de dicho modelo, se describen
independientemente las cuestiones de la recogida de información y del análisis. De esta forma,
en cuanto a la cuestión de la recogida de información, Allen establece cuatro tipos de fuentes de
información desde las cuales puede realizarse el proceso de detección: Aplicación, máquina, red o
infraestructura multi-red. Además, en concreto, en la recogida de información basada en máquina,
se diferencia el nivel lógico desde el que se recoge la información para la fase de análisis: A nivel
de servicio de aplicación de auditoría, y a nivel de servicio de llamadas al sistema. Por último,
en cuanto a la cuestión del método de análisis, se describen las dos grandes losofías: Detección
de usos indebidos, rmas, o patrones, y detección de anomalías. La taxonomía representada en
la gura 2.4 es un compendio de todas estas consideraciones:
Taxonomía de Bace y Mell
Rebecca Bace y Peter Mell siguen un modelo de taxonomía similar al propuesto por Allen
et al., si bien en este caso se presta una mayor atención al componente de respuesta, en el cual
se pasa de dar por supuesta la pasividad del mecanismo de respuesta (como es característico de
los casos anteriores), a considerar el hecho de que dicho mecanismo pueda responder de forma
activa [28]. La gura 2.5 ilustra esta taxonomía.
Taxonomía de Axelsson
A pesar de que Stefan Axelsson centra su estudio general sobre Detección de Intrusiones en
los principios fundamentales del componente de análisis (el cual lógicamente presenta un mayor
interés cientíco), también incluye una detallada categorización sobre el resto de características propias de todo sistema de detección [26]. La gura a continuación ilustra la taxonomía
presentada por dicho autor:
67
Figura 2.5: Taxonomía de Bace y Mell.
Figura 2.6: Taxonomía de Axelsson
68
Figura 2.7: Taxonomía de Debar, Dacier y Wespi
Taxonomía de Debar, Dacier y Wespi
Una taxonomía muy utilizada como referencia en la bibliografía [297] es la desarrollada por
Debar, Dacier y Wespi en 1.999 [100]. En ella, además de los tres grandes elementos de categorización que aparecen en la taxonomía de Bace, se introduce la componente de la frecuencia
de análisis del sistema de detección. Este aspecto ha sido especialmente relevante durante las
primeras etapas de la evolución de la Detección de Intrusiones, ya que marcaba la diferencia
entre aquellos sistemas que eran capaces de detectar casos de intrusión en el mismo instante en
que ésta se estaba produciendo, y aquéllos que no. Sin embargo, en la actualidad, la práctica totalidad de Sistemas de Detección de Intrusiones operan en tiempo real, por lo que dicha tipología
de clasicación ha perdido cierta importancia.
Esta clasicación fue revisada por Stefan Axelsson [26] y el propio Debar apenas un año
después [101]. En dicha revisión, se introdujo el concepto de paradigma de detección como nuevo
criterio principal de clasicación; paradigma que hace referencia al tipo de análisis que se realiza
y que presenta dos alternativas posibles: Detección orientada al análisis de los estados por los
que pasa el sistema, y detección orientada al análisis de las transiciones entre dichos estados.
Asimismo, dichas alternativas presentan a su vez dos enfoques distintos en lo referente a la
evaluación que llevan a cabo sobre el sistema: Evaluación proactiva y evaluación pasiva o no
intrusiva.
Por último, en cuanto al tipo de fuente de información, se introducen dos nuevas alternativas: Registro de auditoría de aplicación, por un lado8 , y registro de alertas provenientes de
otros sistemas de detección9 , conectados secuencialmente, por otro. La gura 2.8 ilustra estos
8
Concepto que hace que la taxonomía en cuestión se mantenga en perfecta consonancia con las alternativas
propuestas por Allen [15] y Bace [28].
9
Concepto que contempla la posibilidad de que un determinado Sistema de Detección de Intrusiones utilice
la información proveniente de otros sistemas de detección conectados, de esta forma, de manera secuencial. Esta
organización cooperativa de múltiples sistemas de detección permite abordar la problemática de la Reducción de
Auditoría [322] de una forma potencialmente más eciente.
69
Figura 2.8: Taxonomía revisada de Debar, Dacier y Wespi.
renamientos realizados sobre la taxonomía original.
Taxonomía de Lazarevic, Kumar y Srivastava
El modelo taxonómico más reciente es fruto de los estudios realizados por Aleksandar Lazarevic, Vipin Kumar y Jaideep Srivastava [227], y está basado fundamentalmente en las taxonomías
propuestas anteriormente por Stefan Axelsson [26] y Hervé Debar et al.[100]. En particular, a
los tres pilares fundamentales de recogida de información, análisis y respuesta, se propone la
agregación de la cuestión arquitectónica, así como de la cuestión de la tipología de restricciones
temporales a las que el sistema de detección debe estar sujeto.
Taxonomía de Krügel
Christopher Krügel utiliza en su tesis doctoral[50] una taxonomía similar a la propuesta por
Rebecca Bace y Peter Mell [28], a la cual añade el criterio fundamental del almacenamiento
de datos de auditoría. A continuación se describe, mediante la siguiente gura, la taxonomía
resultante.
Taxonomía de Indian CERT
El Indian Computer Emergency Response Team propone una clasicación de Sistemas de
Detección de Intrusiones dividida en dos grandes grupos de características: Componentes fundamentales y cuestiones adicionales [CERT/IN03].
70
Figura 2.9: Taxonomía de Lazarevic
Figura 2.10: Taxonomía de Krügel
71
Figura 2.11: Taxonomía de Indican CERT.
Como puede observarse, las cuestiones fundamentales son idénticas a las recogidas por Bace
y Mell en su propuesta de taxonomía. Por otro lado, las mencionadas cuestiones adicionales
toman en consideración las diferentes tipologías que pueden plantearse en cuanto a arquitecturas,
estrategias de control y temporización.
En concreto, en primer lugar, se hace referencia a la cuestión de la ubicación del sistema de
detección, que puede realizarse bien sobre el propio sistema objetivo a proteger, o bien mediante
una máquina especíca dedicada a tal efecto. En segundo lugar, se hace referencia al hecho
de que el control del sistema de detección puede llevarse a cabo desde diferentes niveles de
descentralización, de forma que puede optarse bien por una estrategia centralizada, bien por una
solución completamente distribuida, o bien por un esquema intermedio.
Por último, la periodicidad operativa del sistema de detección puede categorizarse en dos
grandes grupos: por un lado, sistemas orientados a determinar la ocurrencia o no de intrusiones
en el sistema con nes puramente forenses, y por otro, sistemas orientados a detectar inmediatamente cualquier intento de intrusión, con el objetivo de poder plantear una respuesta mientras
dicha intrusión aún está teniendo lugar.
Common Intrusion Detection Framework
Con el objetivo de proporcionar un marco de trabajo estándar, que permitiera tanto a fabricantes como a investigadores eliminar las dicultades de integración y comunicación que presentaban los distintos elementos de las múltiples arquitecturas de detección existentes, Kahn,
72
Figura 2.12: Arquitectura CIDF.
Porras, Staniford-Chen y Tung propusieron en 1.998 una arquitectura genérica, dividida en tres
grandes pilares fundamentales [208] que se describen a continuación:
Arquitectura de detección CIDF10 , construida a partir de componentes genéricos, denominados
Boxes,
y que son responsables de las tareas de recogida de información, almacena-
miento, análisis y respuesta.
Lenguaje de comunicación entre componentes CISL11 , que permite un intercambio de información semántica estándar y bien denida.
Especicación de directorio, a partir de la cual los diferentes componentes pueden localizarse y autenticarse entre ellos.
Contribución de Kim y Spaord
Dentro del área de conocimiento de la Detección de Intrusiones orientada a la Máquina, Gene
Kim y Eugene Spaord introdujeron en 1.994, en su artículo
of Tripwire: A File System Integrity Checker,
The Design and Implementation
el concepto de Vericación de Integridad, también
conocido como Detección de Intrusiones orientada a Objetivos12 . En dicho artículo, los autores
proponían un Sistema de Detección de Intrusiones que aplicaba técnicas criptográcas de cifrado
irreversible para garantizar la integridad de aquellos recursos críticos del sistema a proteger.
De esta forma, aparecía una nueva tipología de sistema de detección que, si bien mantenía
claramente su orientación a la máquina, dejaba de utilizar información proveniente de los registros
de auditoría de sistemas operativos y servicios de aplicación, y pasaba a utilizar sus propios
registros [389].
10
11
12
CIDF: Common Intrusion Detection Framework.
CISL: Common Intrusion Specication Languaje.
Detección de Intrusiones orientada a Objetivos o Target-based Intrusion Detection.
73
Figura 2.13: Taxonomía ESIDE.
Contribución de Ko, Ruschitzka y Levitt
Dentro del área de conocimiento de la Detección de Anomalías, Calvin Ko, Manfred Ruschitzka y Karl Levitt introdujeron en su artículo Execution monitoring of security-critical programs
in distributed systems: A specication-based approach, el concepto de Detección de Anomalías
basada en Especicación. Dicho concepto supone una importante innovación con respecto a la
losofía tradicional de detección de anomalías, que abogaba por la creación de perles (por lo
general estadísticos) de comportamiento para su posterior contraste con la actividad cotidiana
de los usuarios del sistema [213]. En el caso de la presente propuesta, dichos perles no se construyen dinámicamente, sino que se especican a partir de conocimiento experto que se formaliza
en forma de reglas. De esta forma, todo comportamiento que se desvíe signicativamente del
conjunto de reglas preestablecidas será susceptible de ser catalogado como subversivo, y recibirá
consecuentemente una respuesta en esta línea.
Taxonomía ESIDE-Mendizale
A partir de las múltiples consideraciones descritas en los apartados anteriores, se propone
un modelo de taxonomía general que pretende sintetizar los diferentes puntos de vista, desde
una perspectiva conceptual. Dicha taxonomía presenta tres pilares fundamentales: recogida de
información, análisis y respuesta [351, 28, 15] , tal y como se ilustra en la gura. Además, como
puede observarse en dicha gura, cada uno de esos tres pilares fundamentales presenta una
categorización propia, construida a partir de las diferentes reexiones aportadas por los autores
anteriores. En primer lugar, se clasican los Sistemas de Detección de Intrusiones en base al tipo
de recogida de información que implementan, que puede estar orientada a la máquina, o a la red
[100].
74
Figura 2.14: Ubicación de hipótesis fundamentales
De esta forma, dentro de las soluciones orientadas a la máquina, en primer lugar, pueden
observarse sistemas de detección basados en información del Sistema Operativo, de los servicios
de aplicación, o de sus propios registros de auditoría (característica particular de los sistemas
de vericación de integridad) [389]. Además, la recogida basada en el sistema Operativo puede
realizarse, asimismo, a nivel de servicio o a nivel de kernel o núcleo [15].
Por otro lado, en segundo lugar, la recogida de información orientada a la red presenta,
además de los mecanismos propios de dicha categoría, un tipo especial de sistema de detección
que se caracteriza por su orientación al nodo de red [84, 78, 241].
Asimismo, en lo relativo al método de análisis, la taxonomía propuesta contempla las dos grandes losofías de Detección de Intrusiones: Detección de Usos Indebidos y Detección de Anomalías
[351, 50, 28, 15, 101, 100, 208]. Además, dentro de la Detección de Anomalías, se presta especial
atención a la cuestión de la presencia o no de conocimiento experto, ya que el presente trabajo
de investigación considera especialmente la clara diferenciación que existe entre ambos métodos
[213].
Por último, la fase de respuesta presenta dos categorías de sistemas de detección: Por un lado,
la tradicional respuesta pasiva, consistente en noticaciones de alarma al operador humano, y
por otro, la respuesta activa contra agresiones detectadas contra el sistema que se pretende
proteger [351, 49, 28, 101, 100, 208]. Además, en lo relativo a la respuesta activa, se diferencia
entre aquellos sistemas que responden a la agresión y aquéllos diseñados para impedir que dicha
agresión consiga impactar en dicho sistema (concepto comúnmente identicado con el término
Prevención de Intrusiones) [337, 341].
75
2.2. Técnicas de análisis
Como se ha expuesto anteriormente, en los apartados anteriores, el componente de Análisis
constituye la línea de investigación en la que existe actualmente un mayor interés y sobre la cual
se está llevando a cabo la mayor actividad investigadora, tanto dentro del mundo académico
como dentro de la industria de la Seguridad de la Información.
Dicho componente acapara en estos momentos el mayor número de publicaciones de las
más prestigiosas conferencias internacionales, y centra sobre sí mismo las mayores inquietudes
innovadoras del área de conocimiento de la Detección de Intrusiones.
Además, tal y como se ha explicado, dicho elemento mantiene una íntima relación con los
retos tecnológicos que aún esperan ser resueltos, por lo que se revela claramente como el camino
por el que debe desarrollarse toda investigación relevante. Por todo ello, tanto las hipótesis fundamentales, como los objetivos generales, especícos y operacionales, se centran precisamente en
el mencionado módulo de análisis, y están basados esencialmente en los principios fundamentales
de éste.
De esta manera, con el objetivo de situar la actividad investigadora realizada en el presente
estudio en el vasto horizonte de cuestiones propias del área de la Detección de Intrusiones, se
describen a continuación las principales losofías de análisis existentes en la actualidad, esto es:
Detección de Usos Indebidos y Detección de Anomalías.
2.2.1. Detección de Usos Indebidos
Tal y como se explica en la denición 1.20, la Detección de Usos Indebidos hace referencia
al método de Detección de Intrusiones que aboga por utilizar la denición previa de dichas
intrusiones para su posterior contraste con la actividad cotidiana del sistema que se desea proteger
[28]. De esta manera, la operatoria del sistema de detección está basada por completo en la vasta
recopilación de conocimiento experto proveniente del operador humano, y que incluye una ingente
cantidad de deniciones de ataques conocidos, así como de vulnerabilidades conocidas. Así pues,
una vez recogido dicho conocimiento experto, la detección de cualquier rastro de una actividad
que previamente haya sido catalogada como maliciosa (y que utilice por lo tanto alguno de
los ataques documentados, o intente explotar alguna de las vulnerabilidades conocidas) puede
llevarse a cabo de forma eciente y, sobre todo, muy precisa.
No obstante, es precisamente el motivo de su efectividad la razón de que este tipo de Sistemas
de Detección de Intrusiones se encuentre enormemente limitado para responder ante situaciones
de riesgo para las que no existe un modelo previamente documentado. Por lo general, ante una
ligera variación de uno de los ataques documentados, el sistema de detección no localiza en
su base de conocimiento la rma o patrón representativo de dicho ataque y es por lo tanto
incapaz de responder. Esta cuestión obliga al administrador humano a una minuciosa (y por lo
tanto, costosa) elaboración de las rmas de ataque, con el doble objetivo de que sean lo más
76
Figura 2.15: Modelo general de Detección de Usos Indebidos.
genéricas posible y de que no generen falsos positivos. Por otro lado, la respuesta ante un ZeroDay Attack es igualmente fallida, lo que obliga (al igual que en el caso anterior) a una periódica
actualización de dicha base de conocimiento. En general, estas características propias de los
sistemas de detección basados en Detección de Usos Indebidos hacen que dichos sistemas sean
calicados habitualmente como precisos pero incompletos [100].
Así pues, con el objetivo de proporcionar una visión general sobre el funcionamiento interno de
este tipo de sistemas de detección, que permita extraer las conclusiones necesarias para identicar
las problemáticas existentes y enunciar los grandes retos que aún presenta esta tecnología, se
describen a continuación los principios básicos de funcionamiento sobre los cuales está construida
la inmensa mayoría de ellos.
Reconocimiento estático de Patrones.
Está técnica es la forma de Detección de Usos Indebidos más simple que existe, así como la
más extendida, y está basada en la búsqueda de patrones o rmas básicas13 dentro del ujo de
eventos proporcionado por el mecanismo de recogida de información [297, 317]. Dichos patrones
están constituidos por lo general por un conjunto de atributos discretos que tiene el objetivo de
formalizar el conocimiento experto que se deberá utilizar durante el proceso de detección. Por
otro lado, a pesar de las limitaciones semánticas que presenta este método, su sencillez permite
conseguir una gran eciencia a la hora de tomar decisiones, por lo que su utilización es en
muchos casos más que suciente. Algunos de los actuales Sistemas de Detección de Intrusiones
que utilizan, entre otras, esta técnica son Snort, Bro96[277], NFR97 [260, 294], RealSecure,
CISCO Secure IDS [69], o Dragon [171].
13
Es muy habitual la denición de patrones mediante la especicación de cadenas de símbolos que se correspon-
den con diferentes métodos de ataque. Si se localiza una cadena o subcadena concreta dentro de un determinado
evento, se habrá detectado el correspondiente ataque.
77
Figura 2.16: Batería de reglas de Snort para detección de Shellcodes
Figura 2.17: Firma de Snort para detección de ataques contra Apache
Figura 2.18: Firma de Bro para detección de ataques contra Apache
78
Figura 2.19: Batería de reglas de Dragon para detección de Shellcodes
Figura 2.20: Firma de NFR para detección del histórico ataque Land Attack
79
Probabilidad Condicional
El método anterior presenta un comportamiento suciente en muchos casos, pero adolece de
una importante carencia de capacidad representativa [297]. En concreto, es habitual el hecho
de que un determinado patrón identique la existencia de su ataque correspondiente no de
forma categórica, sino con una cierta probabilidad [304]. De esta manera, es posible la aparición
de situaciones en las que la detección del patrón no implique absolutamente el hecho de que
el sistema esté siendo atacado. Por ello, un motor de análisis semánticamente completo debe
contemplar el concepto de probabilidad condicional [155]:
(2 : 1)
P (Intrusion/P atron)14
A continuación, mediante la aplicación del Teorema de Bayes [360] a la expresión anterior,
es posible obtener:
(2 : 2)
P (Intrusion/P atron) = P (P atron/Intrusion)
P (Intrusion)
P (P atron)
De esta forma, a partir de la expresión 2.2, un administrador humano es capaz de cuanticar dicha probabilidad condicional, simplemente mediante el cálculo de los tres términos que
componen dicha expresión. Para ello, es necesario disponer de un registro histórico que recoja la
experiencia del sistema, y a través del cual sea posible cuanticar la probabilidad a priori15 [155]
de la ocurrencia de una intrusión, o P (Intrusion).
Asimismo, gracias a dicho histórico también es posible determinar, para cada uno de los patrones de ataque, tanto la probabilidad a priori de dicho patrón, o P (P atron), como la probabilidad
condicional P (P atron/Intrusion).
Por otro lado, este modo de calcular la probabilidad condicional puede no ya utilizarse ante
eventos individuales, sino extenderse incluso a secuencias de eventos, con lo que se consigue una
mayor capacidad representativa del estado del sistema que se pretende proteger. Para ello, sería
necesario calcular, de una forma similar, la probabilidad P (Intrusion/Secuencia De Eventos
[304].
Sistemas Expertos
Otra losofía de análisis, extremadamente potente, que se ha aplicado en algunas ocasiones a
la Detección de Intrusiones basada en Detección de Usos Indebidos es la utilización los denominados Sistemas de Producción o Sistemas Expertos[387]. Dichos sistemas persiguen el objetivo
fundamental de independizar la lógica de decisión del conocimiento necesario para formalizar la
solución a los problemas a los que se aplican. De esta forma, un sistema experto está compuesto
14
La expresión 2.1 indica la probabilidad condicional de que se haya producido una intrusión, ante la evidencia
de haberse detectado un determinado patrón de ataque.
15
102
80
Figura 2.21: Regla de MIDAS para monitorización de cuentas de usuario privilegiadas
Figura 2.22: Regla de MIDAs para análisis de horario inusual en el acceso a cuentas de usuario
por lo general de un motor de análisis o inferencia, responsable de la toma de decisiones, y de
una base de conocimiento basada en la especicación de baterías de reglas, cuya elaboración es
responsabilidad del experto humano.
En general, las reglas en las que estos sistemas codican el conocimiento experto responden
al modelo if-then, de forma que habitualmente están compuestas por dos elementos: un conjunto
de condiciones o hechos, y un conjunto de acciones a llevar a cabo en caso de que se cumplan las
condiciones correspondientes. De esta forma, cuando el motor de inferencia detecta que un determinado evento satisface el conjunto de condiciones de una regla, simplemente dispara el conjunto
de acciones asociado a dicha regla, pudiendo conrmar de esta forma nuevos hechos (satisfacer
nuevas condiciones) que permiten a su vez disparar nuevas reglas, de forma encadenada, hasta
que es explotado todo el conocimiento disponible.
A pesar de que esta losofía de detección resulta muy precisa, por lo general, el gran volumen
de datos de auditoría que habitualmente es necesario procesar a través del motor de inferencia
puede llegar a introducir serios problemas de rendimiento durante su explotación. El proyecto
Haystack [306] fue, en 1.988, el primer caso de sistema experto aplicado a la Detección de Intrusiones, si bien han aparecido desde entonces (sobre todo en los primeros años de la evolución)
otras muchas soluciones que aplican conceptos similares, como pueden ser MIDAS16
IDES, NIDES, EMERALD, DIDS o CMDS
18
17
[317],
[272].
También los más recientes y anteriormente mencionados Snort, Bro, NFR, RealSecure, CISCO Secure IDS, o Dragon usan esta técnica, en mayor o menor medida. Sin embargo, por lo
general, el conocimiento experto utilizado en estos sistemas no contempla la posibilidad de que
determinados patrones o rmas habiliten el disparo encadenado de nuevas reglas, lo que representa la pérdida de uno de los pilares fundamentales de los sistemas expertos. De esta forma,
16
17
MIDAS: Multics Intrusion Detection and Alerting System.
MIDAS utiliza el denominado Production-Based Expert System Toolset (P-BEST), desarrollado inicialmente
por Alan Whitehurst y evolucionado posteriormente en los desarrollos de IDES, NIDES y EMERALD [231].
18
CMDS: Computer Misuse Detection System.
81
Figura 2.23: Base de hechos de P-BEST/EMERALD para detección del histórico ataque TCP
SYN Flood.
la verdadera esencia de este enfoque queda muy frecuentemente sin explotar y restringida a tareas secundarias de registro de información forense, debido a la complejidad administrativa que
introduce su utilización plena19 .
Por otro lado, este tipo de sistemas presentan por lo general una importante limitación, relacionada con su incapacidad para representar la dimensión temporal, la cual es utilizada frecuentemente para resolver la ordenación cronológica de los eventos a medida que se van produciendo
en el sistema. El conjunto de todos los hechos demostrables de la base de conocimiento no lleva
asociada de forma implícita ningún tipo de información temporal, por lo que dichos sistemas
son simplemente incapaces de determinar el orden en que se han ido conrmando los diferentes
hechos, y por lo tanto de tomar consideración cronológica alguna durante el proceso de decisión.
Existen algunas soluciones que tratan de solventar esta cuestión mediante la especicación
explícita de la información temporal, si bien se reducen en la mayoría de los casos a propuestas
experimentales [304]. En general, aquellas problemáticas de seguridad que requieren necesariamente dichas consideraciones temporales, como pueden ser el escaneo de puertos20 o la denegación
de servicio, son resueltas mediante métodos especícos, añadidos como módulos del sistema de
detección [323].
Asimismo, otro inconveniente característico de estos sistemas consiste en que las decisiones
del motor de inferencia están limitadas cualitativamente a la calidad del conocimiento experto de
los responsables de seguridad encargados de la especicación de la base de conocimiento. Además,
el modo en que dichos responsables especican el mencionado conocimiento experto puede llegar
a hacer que la base de conocimiento sea en muchos casos completamente ininteligible, debido al
altísimo nivel de detalle que puede alcanzarse en la elaboración de las baterías de reglas, sobre
todo en entornos en los que es necesaria una alta optimización de dichas baterías.
Por último, es interesante prestar atención al hecho de que los sistemas expertos son susceptibles de ser utilizados con el objetivo de combinar múltiples parámetros de Detección de
Intrusiones, de forma que es posible construir un modelo homogéneo que, además, introduce en
el análisis el concepto de certidumbre. En cualquier caso, la representación de la certidumbre
en dichos sistemas de producción presenta grandes limitaciones, tal y como se desprende de los
19
De hecho, en las últimas versiones de Snort se apunta la posibilidad de eliminar la capacidad de encadena-
miento de reglas, en benecio de una solución de registro de información forense administrativamente más sencilla,
denominada Tagging [323].
20
Escaneo de Puertos o Port Scanning [138]: An attack that sends client requests to a range of server port ad-
dresses on a host, with the goal of nding an active port and exploiting a known vulnerability of that service. [288]
82
Figura 2.24: Batería de reglas de P-BEST/EMERALD para detección del histórico ataque TCP
SYN Flood
estudios realizados por Judea Pearl [187].
Diagramas de Transición de Estados
Esta propuesta pretende optimizar el volumen del ujo de alarmas que son transmitidas hacia
el operador humano. En concreto, su objetivo fundamental consiste en identicar, representar y
analizar las diferentes fases por las que suelen pasar, en general, los distintos tipos de agresiones
contra sistemas de información. De esta forma, en lugar de utilizar un único patrón para representar un determinado ataque, este tipo de sistemas utiliza diagramas de transición de estados,
o autómatas nitos21 [373], que representan los distintos estados que debe alcanzar un intruso
potencial para llevar a cabo con éxito dicho ataque. Asimismo, las transiciones entre estados se
caracterizan mediante condiciones, o asertos, que deben ser satisfechas para que se materialicen
dichas transiciones. Cada una de estas transiciones equivale a una regla de los anteriores sistemas
expertos. Por otro lado, el estado inicial de cada uno de los diagramas representa el estado del
sistema antes de ser agredido, mientras que el último de los estados se caracteriza por representar el éxito del ataque. Lógicamente, el sistema a proteger no debería llegar a ninguno de los
múltiples estados nales bajo ningún concepto.
De este modo, mediante el seguimiento del estado de avance en el que se encuentra un
determinado atacante, es posible liberar al administrador humano de una gran cantidad de
noticaciones de alarma. Solamente se le informa de aquellos eventos que pueden llevar al sistema
21
Denominados escenarios.
83
Figura 2.25: Escenario de STAT para detección de ataques contra servidores IMAP
Figura 2.26: Especicación en lenguaje STATL de escenario de STAT para detección de ataque
contra servidores IMAP
a un estado inseguro. La primera aproximación de Sistema de Detección de Intrusiones basado
en diagramas de transición de estados fue STAT[367, 170, 381] , que posteriormente fue portado
a sistemas Unix bajo el nombre de USTAT[203]. Las guras siguientes, extraídas de los estudios
de Steve Eckmann, describen de forma gráca un escenario de ataque contra servidores IMAP22 ,
escrito en lenguaje STATL[120].
Sin embargo, a pesar de lo aparentemente innovador de esta propuesta, la aportación conceptual que provee con respecto a los anteriores sistemas de detección basados en sistemas expertos
no es muy grande. Ambos modelos son semánticamente equivalentes [119], por lo que cualquier
diagrama de transición de estados puede representarse mediante un conjunto de reglas de producción, y viceversa. Eckmann incluso propone la traducción automática23 de baterías de reglas
de Snort24 [242] en escenarios de STAT [381]. Además, se da la circunstancia de que, en muchos
casos, los requisitos de rendimiento obligan a utilizar reglas muy ligeras y con pocas relaciones
entre ellas, por lo que dichos modelos son muy poco utilizados en la práctica.
22
23
24
IMAP: Internet Message Access Protocol. [288]
Para lo cual, el propio Eckmann ha desarrollado la herramienta Snort2Statl.
A pesar de que en la mayoría de los casos solamente se utiliza la capacidad de Snort de identicar patrones
estáticos, es posible utilizar toda la potencia conceptual de los sistemas de producción, a través de dos parámetros
especiales, denominados activates y dynamic [323].
84
Figura 2.27: Reglas de Snort para detección de ataques contra servidores IMAP
Figura 2.28: Red de Petri de IDIOT para validación del proceso de login
Redes de Petri
Una variante interesante de los sistemas de detección basados en diagramas de transición de
estados, es la propuesta en 1.994 por Sandeep Kumar y Eugene Spaord, en su sistema IDIOT25
[391], el cual hace uso de las denominadas Redes de Petri [56] para representar escenarios de
intrusión. Dichas Redes de Petri se caracterizan por poseer una capacidad semántica superior a
los tradicionales autómatas nitos [238], y su uso está muy extendido, sobre todo, en sistemas
de producción automática. En concreto, una de las características más potentes que presentan
es su capacidad de representar procesos o tareas concurrentes, de forma que un determinado
sistema puede encontrarse en un momento dado, no en un único estado de ejecución, sino en
varios. Para ello, una Red de Petri está compuesta, no sólo por un conjunto de estados y un
conjunto de transiciones entre dichos estados (como era el caso de los diagramas de transición de
estados, referenciados anteriormente), sino además por un conjunto de tokens, marcas o testigos,
que habilitan el disparo de dicho conjunto de transiciones. De esta forma, una determinada
transición no se materializará realmente, incluso aunque se conrme su condición asociada, a
menos que exista un número adecuado de tokens en los estados origen de dicha transición (que
pueden ser varios, al contrario que en el caso anterior) que la habiliten. Por otro lado, una
vez habilitada y disparada dicha transición, se consumen los tokens ya utilizados en los estados
origen, y se crean nuevos tokens en los estados destino de la misma. La gura 2.31, extraída
de los estudios originales de Kumar y Spaord [390], describe de forma gráca un escenario de
validación de intentos de acceso a un sistema Unix.
Sin embargo, a pesar de la mayor potencia de representatividad de las Redes de Petri, la
solución propuesta en el proyecto IDIOT, dada la complejidad administrativa que requiere la
elaboración de redes que aprovechen todo el potencial del modelo general, no hace uso de toda
la capacidad semántica que tiene a su disposición (sobre todo en lo relativo a la mencionada
especicación de concurrencia) [391], por lo que es posible construir un modelo equivalente ba25
IDIOT: Intrusión Detection In Our Time. Los autores deseaban hacer referencia explícita, no exenta de cierta
ironía, al habitual desfase de tiempo que existe desde que se construye el prototipo experimental hasta que se
lanza el desarrollo del sistema de producción.
85
sado en sistemas expertos. Además, al igual que en los casos anteriores, la calidad de la base
de conocimiento sigue dependiendo de la calidad del conocimiento experto del administrador
humano responsable de la conguración del sistema de detección.
Detección basada en Modelos
Esta técnica fue propuesta por Garvey y Lunt en 1991[383] e introduce el concepto de modelo
de ataque, en combinación con un mecanismo de razonamiento basado en evidencias que tiene
como objetivo la inferencia de conclusiones. Mantiene ciertas similitudes con los métodos basados
en diagramas de transición de estados, los cuales son en este caso denominados modelos, así como
con los métodos basados en probabilidad condicional. De esta forma, la omnipresente base de
conocimiento está compuesta en esta ocasión por un conjunto de modelos, cada uno de los
cuales representa una secuencia de comportamientos constitutivos de un determinado ataque.
Posteriormente, durante la explotación del sistema, a partir de las acciones de cada uno de los
usuarios del mismo, el motor de inferencia va descartando probabilísticamente ciertos modelos, de
forma que el conjunto de los ataques posibles que pueden corresponderse con la situación actual
de dicho sistema se va reduciendo progresivamente. De esta manera, si se da el caso de que
dicho conjunto de modelos potenciales queda vacío, se puede concluir que el comportamiento del
usuario en cuestión es legítimo. Además, este método va más allá del mero análisis estadístico
ya que anticipa, antes de llevar a cabo cada una de las comprobaciones, una selección de los
parámetros de comportamiento a vericar, en base al conjunto de modelos que en un momento
dado aún tiene posibilidades. De esta forma, no sólo se lleva a cabo el análisis pertinente, sino
que se busca continuamente cómo realizar dicho análisis de la forma más eciente posible.
En general, el proceso completo de análisis queda reducido de este modo a dos etapas: Una
primera etapa en la cual se establece un conjunto de hipótesis de comportamiento, y una segunda
en la cual se contrastan dichas hipótesis con la actividad registrada en el histórico de auditoría.
En términos probabilísticos, si se desea obtener una vericación precisa y eciente, la relación
entre las hipótesis de comportamiento y la actividad que realmente se lleva a cabo en el sistema
debe constituir el valor más alto posible [304].
(2 : 3)
P (Actividad/Comportamiento)
P (Actividad/Cualquier otro comportamiento)
Al igual que el caso de los Sistemas de Detección de Intrusiones basados en probabilidad
condicional, el registro histórico de las evidencias que se producen en el sistema permite obtener
un cálculo adaptativo de la probabilidad de los diferentes modelos. A medida que el sistema
evoluciona, algunos de esos modelos ganan peso especíco (se hacen más probables, dados ciertos
comportamientos), mientras que otros pierden relevancia.
De esta forma, es posible obtener una adecuada representación del concepto de certidumbre,
al igual que en el caso de los sistemas basados en probabilidades condicionales, de forma que se
pueden superar ciertas limitaciones inherentes a los sistemas expertos, como pueden ser la pro-
86
pagación de la certidumbre o la aparición de hechos contradictorios. Además, dada su capacidad
para anticipar los parámetros de detección a analizar, si se conguran los distintos modelos de
forma que utilicen progresivamente parámetros cada vez más detallados y complejos, es posible obtener unos requisitos computacionales muy bajos. Así pues, en primer lugar, cuando aún
se tiene un gran conjunto de modelos a vericar, se analizarían parámetros de grano grueso, y
posteriormente, cuando el número de modelos se va haciendo cada vez menor, se irían analizando parámetros con un mayor nivel de detalle. Por supuesto, todas estas consideraciones hacen
que la Detección de Intrusiones basada en Modelos presente unos requisitos de administración
extraordinarios, de forma que en la práctica su utilización es muy escasa.
Por último, es importante prestar especial atención al hecho de que este tipo de sistemas
de detección no sustituyen a los Sistemas de Detección de Intrusiones basados en Detección de
Anomalías, dada la especicación manual de las diferentes relaciones entre los múltiples parámetros que constituyen las colecciones de modelos. Esta técnica debe considerarse solamente como
un complemento a dichos sistemas, como se explica en la obra de Pearl [187].
2.2.2. Detección de Anomalías
La Detección de Anomalías hace referencia al método de Detección de Intrusiones que aboga
por comparar el conocimiento relativo al comportamiento habitual del sistema que se desea
proteger con la actividad cotidiana del mismo. De esta forma, la operatoria del sistema de
detección se basa en la elaboración y mantenimiento de un perl de actividad normal, compuesto
por un conjunto de parámetros o métricas de detección, y en el posterior contraste de dicho
perl con las acciones que se estén llevando a cabo en un momento dado. Toda acción que se
desvíe signicativamente del perl habitual será inmediatamente catalogada como subversiva y
provocará las acciones de respuesta correspondientes.
De esta manera, dado que la principal fuente de conocimiento del sistema de detección es
la realidad cotidiana del sistema a proteger, y no el conocimiento experto proveniente del administrador humano, es posible responder ante situaciones para las cuales no existe un modelo
de ataque conocido y documentado dentro de la base de conocimiento, con lo que se consigue
superar ampliamente las limitaciones características de los sistemas de detección basados en Detección de Usos Indebidos. No se utiliza la política de lista negra inherente a estos sistemas, sino
que se opta por una política de lista blanca construida a partir de la observación minuciosa del
sistema objetivo; de forma que es posible responder ante los Zero-Day Attacks mencionados en
apartados anteriores, no en base a lo que se conoce como malicioso, sino a partir de lo que se sabe
que es legítimo, o normal26 . En general, estas características propias de los sistemas de detección basados en Detección de Anomalías hacen que dichos sistemas sean calicados de completos
[100], si bien adolecen de cierta falta de precisión que da origen habitualmente a mayores tasas
26
Este modo de operación corresponde al modelo general de funcionamiento, si bien existen algunas propuestas
que abogan por la utilización de conocimiento experto positivo para especicar cómo debe ser el comportamiento
del sistema [213].
87
Figura 2.29: Modelo general de Detección de Anomalías
de falsos positivos.
De esta forma, con el objetivo de proporcionar una visión general sobre el funcionamiento
interno de este tipo de sistemas de detección, que permita extraer las conclusiones necesarias
para identicar las problemáticas existentes y enunciar los grandes retos que aún presenta esta
tecnología, se describen a continuación los principios básicos de funcionamiento sobre los cuales
está construida la inmensa mayoría de ellos.
Modelos estadísticos
Dorothy Denning describió en su histórico artículo An Intrusion Detection Model[105] cinco
modelos estadísticos en base a los cuales es posible categorizar los diferentes parámetros o métricas de detección que alimentan actualmente a la práctica totalidad de Sistemas de Detección de
Intrusiones basados en Detección de Anomalías. En concreto, el objetivo fundamental del estudio
desarrollado por Denning consistía en, dado un parámetro x y una secuencia de n observaciones
x1 , ..., xn , determinar si una nueva observación xn+1 es normal respecto del conjunto de observaciones previas o si, por el contrario, se desvía de forma signicativa de las mismas. Para ello,
Denning propone los modelos estadísticos que se describen a continuación, algunos de los cuales
fueron posteriormente incorporados dentro del proyecto IDES [237, 396].
Modelo Operacional
88
Este modelo está basado en la hipótesis de que la normalidad de los parámetros que componen
un determinado evento puede decidirse mediante la comparación de los mismos con un conjunto
de valores límite que se establecen manualmente en base al histórico de evidencias. De esta forma,
aunque las observaciones anteriores no se usan directamente en la decisión, sirven para establecer
esos límites particulares de las diferentes métricas de detección. A este respecto, el ejemplo de
modelo operacional por antonomasia es el de un contador de intentos de login por unidad de
tiempo, a partir del cual una observación por encima del límite habitual sugiere la existencia de
un intento intrusión.
Modelo basado en media y desviación típica
Este modelo pretende generalizar el modelo operacional, aportando una mayor capacidad representativa que se consigue a partir de los conceptos estadísticos clásicos de media, varianza y
desviación típica [155]. Para ello, el presente modelo se basa en la hipótesis de que los valores
más representativos del conjunto de las n observaciones pasadas son precisamente la media y la
desviación típica, las cuales se calculan mediante las expresiones siguientes:
(2 : 4)
Sumatorio = x1 + ... + xn
Sumatorio de cuadrados = x21 + ... + x2n
(2 : 5)
(2 : 6)
(2 : 7)
M edia =
V arianza =
Sumatorio
n
Sumatorio de cuadrados
− M edia2
(n − 1)
√
(2 : 8)
Desviacion tipica =
V arianza
De esta forma, una nueva observación es catalogada como anómala si cae fuera de un intervalo
de conanza centrado en el valor de la media y con un margen denido por el administrador
como una fracción k de la desviación típica. La expresión dene formalmente los límites de dicho
intervalo:
(2 : 9)
M edia ± k∆Desviacion tipica
Este modelo puede utilizarse sobre distintos tipos de parámetros, como pueden ser contadores
de eventos, temporizadores, y demás métricas acumulables. Además, presenta dos grandes ventajas con respecto al modelo anterior, ya que, por un lado, no necesita conocimiento acumulado
sobre la actividad del sistema para denir los diferentes límites. Por el contrario, el propio modelo
es capaz de aprender por sí mismo qué valores constituyen la actividad normal del sistema, y
89
en qué intervalos de conanza debe ubicarse el comportamiento de los usuarios. Además, por
otro lado, como los intervalos de conanza pueden construirse de forma especíca para cada uno
de los usuarios, el modelo soporta aquellas circunstancias en las que lo que es normal para un
determinado usuario sea anómalo para otro. Por último, con el objetivo de minimizar las posibilidades de sufrir Session Creeping, es posible plantear una variante de este modelo que penalice
progresivamente las observaciones más antiguas, en benecio de las más recientes.
Modelo Multivariable
Este modelo pretende generalizar el modelo basado en media y desviación típica, analizando las
potenciales correlaciones existentes entre dos o más métricas. Esta losofía está basada en la
hipótesis de que es posible obtener una mayor capacidad de discriminación a partir de combinaciones de múltiples parámetros de detección, que a partir de métricas individuales. De esta
forma, por ejemplo, la decisión de clasicar el comportamiento de un determinado usuario, se
realizaría en base al análisis conjunto de una colección de métricas como pueden ser tiempo de
procesador consumido, número de procesos en ejecución, número de operaciones de entrada-salida
solicitadas, frecuencia de acceso al sistema, duración de la sesión de usuario, etcétera, etcétera.
A este respecto, es interesante señalar el hecho de que uno de los mecanismos matemáticos de
análisis multivariable más poderosos son precisamente las Redes Bayesianas [187], mencionadas
anteriormente, y en base a las cuales se ha desarrollado el presente trabajo de investigación.
Modelo basado en Cadenas de Markov
Este modelo pretende complementar a los modelos anteriores, introduciendo el concepto de estado
en el proceso de análisis. Los distintos tipos de análisis descritos hasta el momento toman sus
decisiones sin tener en consideración las múltiples circunstancias por las que ha podido pasar el
sistema que se pretende proteger, por lo que su capacidad de representación se encuentra limitada.
Por el contrario, en este caso, se propone la utilización de un mecanismo matemático orientado
precisamente a resolver este problema de falta de memoria, y que es conocido habitualmente
como Cadena de Markov.
Para ello, este modelo considera no sólo el evento que acaba de producirse en este instante en
el sistema, sino también el que se produjo en el instante anterior. De esta forma, internamente,
se construye una matriz de estado que caracteriza las frecuencias de transición entre los múltiples estados por los que puede pasar el sistema a lo largo de su ciclo de vida (en lugar de las
frecuencias individuales de cada estado, como es característico de los casos anteriores). Así pues,
una determinada observación es categorizada como anómala si su probabilidad de ocurrencia,
dado el estado anterior, es demasiado baja.
Por otro lado, es interesante señalar la posibilidad de que este tipo de análisis puede generalizarse aún más, con el objetivo de tomar en consideración no ya el estado inmediatamente
anterior, sino un conjunto de n estados anteriores, mediante la utilización de Cadenas de Markov
Generalizadas [90].
90
Por último, es importante prestar especial atención al hecho de que este tipo de análisis,
que constituye un subconjunto semántico de las anteriormente mencionadas Redes Bayesianas
[73, 206, 57, 115, 63, 291], también se incorpora, de forma implícita, a la solución propuesta en
el presente estudio.
Modelo Temporal
Este último modelo pretende complementar las propuestas anteriores, analizando, además del
orden en que se producen los eventos en el sistema (tal y como es característico del caso anterior),
la longitud de los intervalos de tiempo existentes entre dichos eventos. Básicamente, se reduce
a la aplicación del modelo basado en media y desviación típica a una métrica especial que no
es más que el intervalo de tiempo transcurrido entre un determinado evento y el anterior. De
esta manera, una determinada observación será clasicada como anómala si su probabilidad de
ocurrir en ese preciso instante es demasiado baja. Este tipo de análisis presenta la ventaja de ser
capaz de estimar tendencias de comportamiento a lo largo del tiempo, lo que le permite detectar
cambios graduales en dicho comportamiento y adaptarse a la nueva realidad del sistema que se
pretende proteger. También esta cuestión es tomada en consideración en el presente trabajo de
investigación, con lo que el exhaustivo modelo estadístico de Denning es abordado en toda su
extensión.
Detección de Umbral
La detección de umbral constituye la forma más simple de Detección de Anomalías. Por
lo general, el principio básico de funcionamiento consiste en analizar, dentro de un intervalo
de tiempo, una determinada métrica de detección, como puede ser, por ejemplo, el número de
intentos de conexión fallidos por unidad de tiempo. Si una vez realizada la observación, dicha
métrica excede un determinado umbral, establecido previamente, se considera dicha observación
como anómala y se dispara la acción de respuesta correspondiente [297]. Un Sistema de Detección
de Intrusiones que goza de gran popularidad y que utiliza esta técnica es Tripwire [174, 357, 389].
Este tipo de detección se corresponde fundamentalmente con el modelo operacional propuesto
por Denning.
Detección basada en Perles
La detección basada en perles pretende generalizar el método anterior de detección de umbral, de forma que en lugar de considerarse una única métrica de detección, son analizados perles
compuestos por múltiples parámetros que sirven para obtener una representación más precisa de
la actividad que se lleva a cabo en el sistema. La siguiente tabla incluye algunas de las métricas
utilizadas por el sistema IDES [396, 237].
91
Cuadro 2.3: Métricas utilizadas en el sistema IDES de Detección de Intrusiones basada en perles
De esta forma, la combinación de este conjunto de métricas para un determinado usuario,
constituye en cada momento un perl actual de comportamiento, que es comparado periódicamente con un perl almacenado que contiene los múltiples valores umbrales de dicho conjunto
de métricas. Si se produce una situación en la que el perl actual se desvía signicativamente del
almacenado, se considera dicho perl actual como anómalo y se genera la respuesta pertinente
[297]. En algunos sistemas de detección, además, el mencionado perl almacenado se actualiza
regularmente con los datos contenidos en el perl actual, con lo que se consigue la adaptación
automática a potenciales cambios en el comportamiento de los usuarios [304]. Esta modalidad de
detección se corresponde fundamentalmente con el modelo operacional propuesto por Denning, si
bien, en función del tipo de comparación que se implemente internamente, puede presentar además ciertas peculiaridades propias del modelo basado en media y desviación típica, del modelo
multivariable, y del modelo temporal.
Métricas Estadísticas
En la línea del modelo operacional, del modelo basado en media y desviación típica, del
modelo multivariable y del modelo temporal propuestos por Denning, la detección basada en
métricas estadísticas aboga por el análisis conjunto de los distintos parámetros de detección en
base a una expresión heurística compuesta que combine las distintas componentes de anomalía
posibles. Sobre este principio básico de funcionamiento está basado, por ejemplo, el sistema de
detección NIDES [19], en el cual se utilizan además los conceptos anteriormente mencionados de
perl actual y perl almacenado. En concreto, el perl almacenado que se utiliza está compuesto,
en general, por un conjunto de i métricas s1...si , mientras que el perl actual está compuesto
por i observaciones c1...ci. Por otro lado, los valores de anormalidad o anomalía ai se obtienen
como la diferencia en valor absoluto entre ambos perles, de forma que se obtiene un conjunto
de valores a1...ai, para los que ai=|si - ci|. Además, no es habitual que todas las métricas tengan
la misma relevancia, de forma que es necesario añadir un peso especíco wi a cada métrica. Por
92
último, tampoco es habitual que todos los valores de anomalía tengan la misma repercusión en la
decisión nal. Las anomalías importantes deben tener una mayor relevancia que otras anomalías
menores, por lo que es necesario considerar dichos valores al cuadrado, por lo menos [297, 304].
Todas estas consideraciones sirven para construir la expresión 2.10, la cual constituye el núcleo
fundamental del mencionado proyecto NIDES.
(2 : 10)
Anomalia = w1 a21 + w2 a22 + ... + wi a2i , ∀i > 0
De esta forma, cualquier evento que produzca un valor de anomalía por encima de un determinado umbral, establecido de antemano, será considerado como anómalo y suscitará la respuesta
correspondiente por parte del sistema de detección. En general, este tipo de sistemas de detección (al igual que el caso anterior, de detección basada en perles) permite advertir utilizaciones
anómalas de los recursos computacionales del sistema que se desea proteger de forma ecaz, si
bien presenta ciertos inconvenientes de importancia, como pueden ser su incapacidad para representar información temporal (al igual que el caso de la Detección de Usos Indebidos basada en
sistemas expertos), la posibilidad de sufrir ataques de Session Creeping, y su falta de precisión
en entornos en los que el comportamiento de los usuarios es ligeramente errático o voluble[93].
Sistemas basados en Reglas
La Detección de Anomalías basada en sistemas de reglas pretende aportar una mayor capacidad semántica a los modelos anteriores. Mientras los sistemas de detección basados en métricas
estadísticas resuelven el problema de la comparación de perles mediante formulación matemática, sus homólogos basados en sistemas de reglas proponen, como se describe en apartados
anteriores, la utilización de un motor de inferencia responsable de interpretar baterías de reglas
que formalizan conocimiento experto. De esta forma, dado que los mencionados sistemas basados
en reglas presentan un mayor poder expresivo [297], se pretende mediante su utilización la resolución de algunos de los problemas inherentes a dichos modelos anteriores, como son el modelado
explícito de información temporal, y la adaptación del sistema de detección al comportamiento
anárquico de algunas tipologías de usuarios.
Un sistema de Detección de Anomalías basado en sistemas de reglas es ADS27 [380]. Dicho
sistema de detección está orientado a la máquina y es capaz de analizar información del Sistema
Operativo proveniente de los niveles de servicio, o de llamada al sistema, y de interpretación de
comandos. Para ello, es necesario especicar conjuntos de reglas que representan el comportamiento de cada uno de los usuarios del sistema, incluyendo métricas como el tipo de llamadas al
sistema permitidas, número de solicitudes de servicio realizadas, etcétera, etcétera. Una vez elaborado ese perl de comportamiento, durante la explotación del sistema de detección, cualquier
actividad que sobrepase los límites establecidos en el mismo será considerada como anómala por
el motor de inferencia, y se ejecutarán las acciones de respuesta correspondientes.
27
ADS: Anomaly Detection System.
93
Figura 2.30: Batería de reglas de TIM
En general, esta técnica está basada en la hipótesis de que las secuencias de eventos no se
producen aleatoriamente, sino que por el contrario siguen patrones regulares e identicables28 .
Por ello, un objetivo fundamental que se aborda es el del análisis de anomalías en la ordenación de
eventos, lo que hace que la Detección de Intrusiones adquiera una mayor calidad. Otros ejemplos
de sistemas de detección que utilizan esta técnica son Wisdom and Sense29 [395] y TIM30 [353].
La gura superior ilustra de forma conceptual el funcionamiento de una batería de reglas de
TIM, inferida a partir de la observación de una secuencia de eventos registrada en el sistema
a proteger. A pesar de lo particular de su enfoque, su mecanismo de inferencia es muy similar
a las anteriormente mencionadas Cadenas de Markov, por lo se ajusta extraordinariamente al
modelo de detección basado en Cadenas de Markov propuesto por Denning. Por su parte, la
gura siguiente ilustra un caso de ejemplo de estructura de reglas de decisión de Wisdom and
Sense, de similar capacidad representativa.
Redes Neuronales
Dado que el objetivo fundamental de todo Sistema de Detección de Intrusiones basado en
Detección de Anomalías consiste en deducir, a partir de un conjunto de x1 ...xn observaciones,
el grado de normalidad del evento xn + 1[105], la aplicación del mecanismo matemático de
aprendizaje e inferencia conocido como Red Neuronal [MacKay02] se revela como una opción
natural, con prometedoras posibilidades [386, 275]. En concreto, el objetivo fundamental que
se persigue con este enfoque es el de representar todo el conocimiento relativo a los perles de
comportamiento de los usuarios de una forma implícita al mecanismo de inferencia, y no mediante
los habituales esquemas explícitos inherentes a las aproximaciones basadas en perles, métricas
estadísticas o sistemas expertos. De esta forma, se enriquece, potencialmente, el conocimiento
28
Esta técnica también es conocida habitualmente como Generación de patrones predictivos o Predictive Pattern
Generation [304].
29
30
Wisdom and Sense: Sabiduría y Sensibilidad.
TIM: Time-based Inductive Machine.
94
Figura 2.31: Árbol de reglas de Wisdom and Sense
relativo a las múltiples relaciones existentes entre los diferentes parámetros de detección, con lo
que la calidad de las decisiones inferidas es teóricamente superior [297, 304].
Para ello, se organiza un esquema de funcionamiento compuesto por dos fases: aprendizaje,
o entrenamiento, y explotación. De esta manera, en primer lugar se entrena la red neuronal
con un histórico de la actividad de que se ha registrado en el pasado, el cual, además de las
métricas propias del perl de comportamiento, debe incluir un parámetro de detección adicional
que representa la clasicación de dicha actividad. Dicho parámetro de clasicación representa
el hecho de si la actividad analizada ha supuesto un ataque (y en caso armativo, el tipo de
ataque) o no contra la seguridad del sistema, de forma que su nalidad última no es otra que la
de etiquetar el conocimiento disponible para así proporcionar a la posterior fase de explotación
conciencia sobre el hecho clasicatorio.
Posteriormente, una vez que la red neuronal ha sido entrenada convenientemente, tanto el
conjunto de los múltiples perles de comportamiento, como sus métricas componentes, quedan
representados implícitamente y de forma unicada en las múltiples conexiones neuronales que
componen la citada red. De esta manera, la red en cuestión puede ser nalmente utilizada para
obtener conclusiones acerca del tipo de categorización que debe aplicarse a las nuevas observaciones que se registren en el sistema. Si los parámetros de detección que componen un determinado
evento mantienen cierta similitud con los recogidos por la red neuronal, dicho evento será considerado anómalo y el sistema de detección responderá en consecuencia. De esta forma, estos
sistemas de detección presentan poderosas posibilidades: son capaces de adaptarse por sí mismos
95
Figura 2.32: Aplicación de redes neuronales a Detección de Intrusiones
a sistemas computacionales cuya realidad evoluciona a lo largo del tiempo, mantienen una alta
estabilidad del conocimiento asimilado (incluso en situaciones sujetas a la inuencia de componentes de ruido), son capaces de inferir conclusiones de alto nivel de abstracción, sin necesidad
de hipótesis estadísticas previas, y además son muy ecientes, una vez puestos en explotación.
Sin embargo, la utilización de redes neuronales introduce un serio inconveniente en lo relativo a la inferencia de relaciones de tipo causa-efecto, ya que dentro de su naturaleza existe
una absoluta incapacidad de explicación de las conclusiones que ofrecen. La suma de sus múltiples conexiones, una vez entrenadas adecuadamente, proporciona unos resultados precisos y
de conanza, pero es imposible determinar cuáles son las causas exactas que producen dichos
resultados[57]. Por otro lado, la mencionada fase de aprendizaje requiere por lo general unos
costosos esfuerzos administrativos de supervisión, que hacen que, por lo general, este tipo de
sistemas de detección vea reducida su aplicación a condiciones de laboratorio. Algunos casos de
Sistemas de Detección de Intrusiones desarrollados en base a redes neuronales son los prototipos
correspondientes a los estudios realizados por Ángel Grediaga31 et al. [149], Anup Gosh32 et al.
[148], James Cannady y Jim Mahaey [54], David Endler , y Jake Ryan y Meng-Jang Lin [382].
A pesar de tratarse de un enfoque especialmente particular, puede clasicarse de una forma intuitiva dentro del modelo multivariable de Denning. La gura anterior ilustra un caso de red
neuronal utilizada para predicción de comandos en sistemas Unix [Fox+90].
31
En las investigaciones realizadas por Grediaga et al. y Cannady y Mahaey se utiliza un tipo especial de red
neuronal denominado Mapa Auto-Organizativo [338], que presenta la característica de que su fase de entrenamiento
puede realizarse de forma no supervisada. Ésta es una propiedad fundamental para conseguir unos requisitos
administrativos mínimos, que permitan una adopción natural del Sistema de Detección de Intrusiones resultante
por parte de empresas y organizaciones.
32
En las investigaciones realizadas por Gosh et al. se utiliza un tipo especial de red neuronal denominado
Red de Elman [122], que presenta la característica de que ser capaz de representar implícitamente la magnitud
temporal. Ésta es una propiedad fundamental para poder construir un modelo de representación y unos motores
de aprendizaje e inferencia que tomen en consideración de forma intrínseca el hecho cronológico.
96
Figura 2.33: Firma ISL de NFR
Lenguajes de Especicicación de Intenciones
Un método que aboga por la especicación apriorística del comportamiento de los usuarios
del sistema, es la utilización de lenguajes interpretados a través de los cuales especicar dicho
comportamiento33 . De esta forma, es posible la vericación en tiempo real del grado de desviación que está sufriendo el comportamiento actual de un determinado usuario, con respecto a su
comportamiento ideal, especicado mediante uno de dichos lenguajes. Éste es un método que,
además de permitir la especicación de comportamiento legítimo, también puede utilizarse para
representar conocimiento experto sobre comportamientos maliciosos de los que el administrador
humano tenga constancia, debido al alto grado de capacidad expresiva que presenta.
Algunos casos de éxito de Sistemas de Detección de Intrusiones que utilizan esta técnica son
IDML34 [230], NFR o Stalker[307]. En todos ellos, se utilizan lenguajes de especicación expresamente desarrollados para cada caso, si bien también existen soluciones de detección que utilizan
lenguajes de propósito general de construcción de sistemas expertos, aplicados a la especicación
de escenarios de Detección de Intrusiones, como pueden ser P-BEST35 o CLIPS36 [299]. Las guras siguientes ilustran dos casos de representación de conocimiento de Detección de Intrusiones
propios de NFR y P-BEST/EMERALD, respectivamente.
Por último, también es interesante prestar atención, respecto a la utilización de lenguajes de
especicación de intenciones, a los ambiciosos estudios realizados por Jon Doyle et al.[112] en el
Instituto Tecnológico de Massachusetts [251]. La gura 2.38 muestra un ejemplo de especicación de escenario de intrusión en un servidor de transferencia de cheros escrito en el lenguaje
propuesto en dicho trabajo de investigación.
Clasicación Bayesiana
Los métodos de clasicación Bayesiana [187] están basados en los conceptos clásicos de Teoría
de la Probabilidad de probabilidad conjunta [155] y probabilidad condicional, y se caracterizan
fundamentalmente por conseguir la clasicación no supervisada de objetos. Esta propiedad de
la no supervisión permite que estos métodos de análisis presenten unos requisitos administrativos mínimos y que los hacen especialmente atractivos, ya que elimina la necesidad de que sus
33
34
35
36
Conocidos como lenguajes de especicación de intenciones o Intent Specication Languajes o ISL [297].
IDML: Intrusion Detection Markup Languaje.
Utilizado dentro del proyecto EMERALD, entre otros.
Utilizado dentro de los proyectos CLIPSNIDS y DIDS, entre otros.
97
Figura 2.34: Batería de reglas ISL de P-BEST/EMERALD
Figura 2.35: Firma ISL del MIT
98
inherentes procesos de aprendizaje deban ser administrados por el operador humano, como es
menester, por ejemplo, en los casos de los métodos de detección de umbral, o en los basados en
perles, en métricas estadísticas, en sistemas de reglas, o en redes neuronales [304].
Figura 2.36: Red Bayesiana trivial de modelado de actividad intrusiva
De este modo se consigue una adaptación natural e instantánea a la evolución a lo largo del
tiempo de los sistemas que se pretende proteger, ya que es posible mantener, en paralelo con
los procesos de inferencia y decisión, perennes procesos de aprendizaje automático. Además, un
sistema de clasicación Bayesiano permite la identicación automática del número de categorías
de clasicación, dado el conjunto de datos a clasicar126, permite operar en base a datos incompletos, permite el análisis unicado de parámetros, sin los habituales criterios y restricciones de
excepción presentes en la mayoría de sistemas de detección, e incluso soporta el análisis homogéneo de parámetros discretos y continuos; parámetros que, además, pueden ser tanto cuantitativos
como temporales [376].
Sin embargo, a pesar de sus enormes posibilidades, también presenta ligeros inconvenientes.
Por un lado, estos métodos aún presentan cierta dicultad para denir los umbrales de detección
más adecuados; tarea que sigue siendo responsabilidad del administrador de seguridad. Por otro
lado, como es característico de cualquier sistema de adaptación automática al sistema objetivo,
presentan la teórica posibilidad de sufrir ataques de Session Creeping [57]. Algunas propuestas
de Sistemas de Detección de Intrusiones que utilizan métodos de clasicación Bayesianos son
los proyectos SPAMBayes [399], ADAM37 [32] y eBayes38 [Valdés+01], así como los estudios
realizados por Steven Scott [305] , Nasser Abouzakhar et al. [13], Christopher Krügel et al. [215],
Burroughs et al. [47], y Nong Ye y Mingming Xu [244]. La gura anterior ilustra un sistema de
clasicación bayesiano utilizado para Detección de Intrusiones orientada a la máquina [304].
Algoritmos Genéticos
Los denominados Algoritmos Genéticos [82] constituyen una técnica de búsqueda y optimización, perteneciente al área de conocimiento de los denominados Algoritmos Evolutivos [121],
37
38
ADAM: Audit Data Analysis and Mining.
Proyecto desarrollado por SRI International, como elemento componente del proyecto EMERALD.
99
Figura 2.37: Algoritmo Genético general, en pseudocódigo
que también ha sido propuesta dentro del área de conocimiento de la Detección de Anomalías,
en concreto como componente fundamental del motor de análisis del proyecto GASSATA39 [219],
desarrollado por Ludovic Mé. En general, este tipo de métodos están basados en la mecánica
de la Genética y de la Selección Natural [303]. De esta forma, el proceso de búsqueda u optimización se organiza en base a los principios genéticos clásicos de herencia, mutación, selección y
recombinación, para a partir de cromosomas, formados por vectores de parámetros de detección,
dar origen a un conjunto de generaciones sucesivas cuyos últimos miembros se ajusten perfectamente al problema propuesto. Al nalizar dicho proceso evolutivo, sólo habrán sobrevivido los
más fuertes.
De este modo, los resultados obtenidos por Mé fueron realmente prometedores, presentando
una tasa de acierto del 0,996 y una tasa de falsos positivos del 0,0044. Además, el tiempo necesario
para obtener dicha solución fue mínimo, por lo que la sobrecarga introducida en el sistema se
mantuvo en unos niveles realmente bajos. Otros estudios interesantes desarrollados en esta línea
pueden ser los llevados a cabo por Dong Kim et al. [211], por Wei Li[368], por el grupo de
investigación de Jan Elo [280], por Susan Bridges y Rayford Vaughn [40], por Sinclair et al.
[320], y por Mark Crosbie y Gene Spaord [76].
Lógica Difusa
La denominada Lógica Difusa40 [75] es una extensión de la Lógica de Boole [361] que se
caracteriza por ser capaz de representar el concepto de certidumbre, o grado de veracidad, aproximándose de esa forma al concepto idóneo de Probabilidad [57, 115]. De este modo, mientras
la lógica clásica utiliza únicamente los conceptos absolutos de verdadero o falso, la lógica difusa utiliza múltiples niveles o grados de veracidad, proporcionando de esa manera una mayor
aproximación al razonamiento humano. Por ejemplo, un Sistema de Detección de Intrusiones
basado en lógica difusa puede representar el concepto muy peligroso. Por ello, es posible que un
determinado evento sea clasicado como perteneciente (con diferentes grados de pertenencia) a
más de una clase simultáneamente. La gura siguiente ilustra de forma conceptual la diferencia
entre ambos enfoques utilizando para ello una única métrica de detección como es el número de
puertos TCP-IP accedidos por unidad de tiempo [41].
39
40
GASSATA: A Genetic Algorithm as an Alternative Tool for Security Audit Trails Analysis.
Lógica Difusa o Fuzzy Logic.
100
Figura 2.38: Clasicaciones convencional y difusa de un parámetro de detección
Por otro lado, es interesante tomar el consideración el hecho de que esta tecnología es susceptible de ser utilizada por sí sola, como elemento fundamental del proceso de Análisis, o bien de
usarse como complemento a otras técnicas de detección, como es el caso del proyecto IIDS41 , desarrollado en la Universidad de Mississippi por [41, 40]. Otras Susan Bridges y Rayford Vaughn42
investigaciones desarrolladas al respecto son las llevadas a cabo por John Dickerson et al. en
el proyecto FIRE43 [106, 107], así como los estudios realizados por Chavan et al. [64], Jonatan
Gómez y Dipankar Dasgupta[377], y Jianxiong Luo [183].
Máquinas de Vector Soporte
Las denominadas Máquinas de Vector Soporte44 [365] constituyen un método no lineal basado
en optimización cuadrática [150, 394] de aprendizaje supervisado dirigido a la resolución de
problemas de clasicación y regresión. Por lo tanto, el objetivo principal de dichos métodos ante
el problema de la Detección de Intrusiones se reduce a clasicar la actividad de los usuarios, en
principio en las dos grandes categorías canónicas: Maldad y Bondad. Este modo de operación
es similar a los que caracterizan a otros enfoques, como pueden ser las redes neuronales o los
clasicadores bayesianos, de forma que su aportación conceptual es limitada. Por otro lado, la
propia denición del término incluye una premisa, como es el hecho del aprendizaje supervisado,
que en general supone un importante obstáculo para la eciente utilización de un hipotético
Sistema de Detección de Intrusiones que resultara de la aplicación de las referidas máquinas de
vector soporte.
Otros métodos, como pueden ser las Redes Bayesianas, permiten operar de forma ecaz
sin dicha supervisión del entrenamiento [57, 115], de forma que los costes de administración
correspondientes se mantengan dentro de unos límites de adecuada eciencia económica. Algunas
41
42
IIDS: Intelligent Intrusion Detection System.
En el desarrollo de este proyecto, Bridges y Vaughn utilizaron Lógica Difusa combinada con Algoritmos
Genéticos.
43
44
FIRE: Fuzzy Intrusion Recognition Engine.
Máquinas de Vector Soporte o Support Vector Machines [SVM].
101
Figura 2.39: Clasicación de eventos basada en máquina de vector soporte
investigaciones en las que se han aplicado los principios fundamentales de dichas máquinas de
vector soporte son las llevadas a cabo por Crina Groçan et al. [150], por Srinivas Mukkamala y
Andrew Sung [394, 256], por Zonghua Zhang y Hong Shen [156], por Heller et al. [162], y por Hu
et al. [167]. La gura ilustra de forma conceptual el mecanismo de clasicación característico de
las máquinas de vector soporte [167].
Data Mining
El denominado Data Mining45 [349, 158], también conocido como Knowledge Discovery in
Databases46 , es una técnica de búsqueda automática de patrones o pautas regulares de conocimiento en ingentes volúmenes de información, para la cual se utilizan fundamentalmente técnicas
estadísticas y de reconocimiento de patrones. De este modo, la esencia última de dicha aproximación no diere sustancialmente de otras alternativas propuestas anteriormente, salvo por su
orientación no supervisada y por los grandes requerimientos de eciencia que presenta. De esta
forma, se pretende dar un paso adelante en la tecnología estadística clásica mediante la automatización del proceso de extracción de conocimiento.
Por otro lado, aunque los problemas especícos a los que puede enfrentarse el Data Mining
son múltiples, son tres los que predominan habitualmente, ya que proporcionan un conocimiento
de mayor calidad: Clasicación, Análisis Multivariable de Relaciones y Análisis de Secuencia
[229]. A continuación se describen someramente las mencionadas problemáticas:
Clasicación
El objetivo fundamental del problema de clasicación consiste en asignar una categoría a cada
uno de los hechos de la base de datos. Por otro lado, puede darse la circunstancia de que el
conjunto de categorías esté denido de antemano, o que deba ser inferido a partir de los datos.
45
46
Data Mining o Minería de Datos.
Knowledge Discovery in Databases (KDD) o Descubrimiento de Conocimiento en Bases de Datos.
102
A este respecto, las Redes Bayesianas en general, y las Redes Bayesianas de tipo Naïve en
particular, constituyen el paradigma por excelencia de clasicación automática a partir de los
datos [57, 115].
Análisis Multivariable de Relaciones
En este caso el problema consiste en identicar las relaciones de correlación y causalidad existentes entre las múltiples variables que componen cada uno de los hechos de la base de datos,
mediante la aplicación de tests estadísticos de independencia e independencia condicional. Al
igual que en el caso anterior, las Redes Bayesianas suponen un método excepcional para la resolución de dicho problema [57, 115]. Por otro lado, es interesante prestar atención a la absoluta
correspondencia existente entre este aspecto del Data Mining y el modelo multivariable propuesto
por Denning.
Análisis de Secuencia
En esta ocasión el problema consiste en identicar las relaciones de correlación y causalidad existentes entre los múltiples estados por los que pueden pasar las secuencias de eventos que tienen
origen en un determinado sistema de información. En este caso, los denominados Modelos de
Markov constituyen una excelente aproximación, si bien están superados por las anteriormente
mencionadas Redes Bayesianas, las cuales, aunque presentan unos mayores requisitos computacionales, proporcionan una mayor capacidad de representación [57, 115], imprescindible para
la resolución de problemas complejos. Al igual que el caso anterior, es interesante prestar atención a la absoluta correspondencia existente entre esta cuestión y el modelo basado en Cadenas
de Markov propuesto por Denning.
Son abundantes las investigaciones realizadas en el campo de la Detección de Intrusiones que
aplican técnicas de Data Mining. Algunas de las más representativas son las llevadas a cabo
por Guy Helmer et al. [163], por el equipo de investigación de la Universidad de Minnesota
[227, 110], por Wenke Lee y Salvatore Stolfo47 [228, 229, 393], de la Universidad de Columbia, y
por Christina Warrender et al. [374].
Selección de parámetros de detección
Al vasto abanico de posibilidades de análisis descrito en los apartados anteriores es necesario
añadir la cuestión fundamental de la formalización de la información que entra a dicho proceso
de análisis, en la línea del modelo conceptual propuesto por Emilie Lundin [116]. De esta forma,
una cuestión tan importante como la selección del modelo de análisis es la selección de aquellas
métricas o parámetros de detección a partir de los cuales debe desarrollarse éste, de modo que
la diferenciación entre la actividad anómala y la actividad legítima que se registre en el sistema
47
Lee y Stolfo utilizan un enfoque de inducción de reglas a partir de los datos muy similar al utilizado en el
proyecto TIM.
103
a proteger pueda llevarse a cabo de manera eciente. Para ello, es necesario seleccionar, de entre
la amplia colección de métricas que pueden estar a disposición del sistema de detección (en las
múltiples y variadas circunstancias propias de cada tipo de sistema), aquel subconjunto de ellas
que resuelva de forma precisa y eciente el problema.
Esta cuestión se denomina habitualmente Selección de parámetros de detección, y adquiere
una complejidad adicional debido a que, por lo general, distintos tipos de ataque requieren
la utilización de distintos tipos de métrica. Por ello, un determinado subconjunto limitado de
parámetros no suele ser adecuado para representar cualquier tipo de ataque, y además, por otro
lado, un conjunto excesivamente elevado de parámetros no consigue, en general, buenos niveles
de rendimiento. De esta forma, la solución pasa por alcanzar el equilibrio entre una adecuada
capacidad representativa y una eciencia satisfactoria, mediante la selección dinámica de dichos
parámetros de detección [304].
A este respecto, Heady et al. [160] proponen en su trabajo de investigación una aproximación
de Sistema de Detección de Intrusiones basada en Algoritmos Genéticos que permite explorar
todo el espacio de métricas posibles, con el objetivo de seleccionar un subconjunto ideal. En ella
se busca, a partir de un conjunto inicial de parámetros de detección y mediante las operaciones
genéticas anteriormente mencionadas de herencia, selección, recombinación y mutación, un proceso de selección natural que obtenga subconjuntos de métricas más fuertes, a partir del grado de
acierto de las predicciones de intrusión que se consiguen en cada una de las generaciones. Aquellas
generaciones que representan mejor el conjunto de ataques de entrenamiento son potenciadas y
resultan seleccionadas a la hora de llevar a cabo nuevas generaciones, en detrimento de aquellas
otras que se encuentran más alejadas del modelo ideal.
Dentro del área de conocimiento de los propuestos Modelos de Redes Probabilísticas, en
general, y en el caso del presente trabajo de investigación, en particular, esta selección se realiza
de forma natural mediante un procedimiento estadístico especialmente interesante, dada su gran
riqueza semántica, denominado Análisis de sensibilidades [57].
Combinación de múltiples métricas
Una vez determinado el conjunto de métricas que mejor es capaz de determinar la presencia
o no de actividad intrusiva en el sistema, es necesario un último esfuerzo de combinación de
todos esos parámetros de detección en una única medida que proporcione unidad al análisis.
Sólo de esta manera es posible obtener una magnitud que represente de forma global y unicada
la verdadera dimensión del riesgo que supone cada uno de los eventos que se analizan en el
sistema de detección. Para ello, dos enfoques de combinación muy extendidos son la utilización de
propiedades estadísticas Bayesianas, bien a partir de la aplicación sus principios fundamentales
o bien mediante el uso de los Modelos de Redes Probabilísticas, y la utilización de Matrices
de Covarianzas [304]. Por otro lado, además de la obtención de magnitudes de unicación de
métricas, estos principios combinatorios pueden generalizarse de forma que sus benecios sean
104
aplicables no ya a múltiples parámetros de detección, sino incluso a múltiples veredictos que
puedan ser generados por diferentes Sistemas de Detección de Intrusiones que cooperen en las
tareas de decisión. En concreto, en el presente trabajo de investigación también se plantea esta
cuestión, la cual se aborda mediante el uso de Redes Bayesianas de tipo Naïve, las cuales están
especícamente orientadas a la resolución de problemas de clasicación [57].
Estadística Bayesiana
Dado un conjunto de métricas A1 , A2 , ..., An utilizadas para determinar la legitimidad de la actividad que se registra en el sistema que se pretende proteger, es posible obtener conclusiones
globales acerca de la realidad de dicho conjunto de métricas, mediante la aplicación de los principios probabilísticos clásicos establecidos alrededor del Teorema de Bayes. Para ello, en primer
lugar, es habitual realizar un proceso de discretización de dichos parámetros de detección, que
por lo general implica la existencia de al menos dos estados48 : Maldad (o anormalidad) y Bondad.
Por otro lado, también es habitual el planteamiento de la hipótesis de que el sistema objetivo
es susceptible de sufrir intentos de intrusión, los cuales podrán, posteriormente, resultar exitosos o no. Dicha hipótesis de intrusión se representa como I y está sujeta a una distribución
de probabilidad P (I). A continuación, a partir de estas consideraciones, es posible calcular la
conabilidad y la sensibilidad de cada una de las métricas de detección Ai mediante las expresiones P (Ai = 1/I ) y P (Ai = 1/ ∼ I ). De esta forma, la probabilidad condicional de I , dado el
conjunto de parámetros Ai , mediante el citado Teorema de Bayes, puede representarse mediante
la expresión:
(2 : 11)
P (I/A1 , A2 , ..., An ) = P (A1 , A2 , ..., An /I)∆
P (I)
P (A1 , A2 , ..., An )
Como puede observarse, es necesario calcular la distribución de probabilidad conjunta del
conjunto de métricas, dada la variable I. Para ello, es necesario tener en especial consideración el
hecho de que el número de probabilidades requerido para representar dicha distribución de probabilidad es exponencial en el número de parámetros [57, 304], lo que puede hacer que el análisis
sea computacionalmente intratable. Por ello, para conseguir que el problema sea abordable en
términos de eciencia, es habitual tomar ciertas hipótesis de independencia condicional, que se
traducen en un exponencialmente menor número de probabilidades necesario. En concreto, por
lo general, se considera que cada uno de los parámetros de detección es independiente de los
demás, condicionalmente dada I . Dichas hipótesis se resumen en las siguientes expresiones, las
cuales resultan en la expresión nal:
(2 : 12)
P (A1 , A2 , ..., An /I) =
π
Y
P (Ai /I)
i=1
48
Por supuesto, en este punto, no es imprescindible que dicha discretización sea binaria, sino que es posible
plantear cualquier tipo de categorización, tanto de los parámetros de detección de entrada, como de los parámetros
de salida obtenidos a partir de éstos.
105
P (A1 , A2 , ..., An / ∼ I) =
(2 : 13)
π
Y
P (Ai / ∼ I)
i=1
(2 : 14)
Qn
P (Ai /I)
P (I/A1 , A2 , ..., An )
P (I)
Qn i=1
=
P (∼ I/A1 , A2 , ..., An )
P (∼ I) i=1 P (Ai / ∼ I)
Así pues, de esta forma, es posible calcular la probabilidad de ocurrencia de una intrusión,
dada una observación o evidencia del conjunto de métricas. Por supuesto, las hipótesis de independencia condicional tomadas pueden no ajustarse completamente a la realidad, por lo que
siempre es necesario contemplar la posibilidad de existencia de relaciones entre los parámetros
de detección, a costa de unos menores rendimientos computacionales.
Matrices de Covarianzas
El proyecto NIDES utiliza un modelo de representación de relaciones estadísticas entre variables
basado en el concepto de Matriz de Covarianza [155]. De esta forma, el conjunto de métricas
A1 , A2 , ..., An se representa como un vector A que permite el cálculo de una medida de anomalía
compuesta, en base a la expresión que se indica a continuación, en la que C es la matriz de
covarianzas que representa la dependencia estadística existente entre cada par de variables de
entrada.
AT C −1 A
(2 : 15)
Dicho modelo de representación es realmente eciente, pero adolece de una importante carencia de capacidad semántica, ya que solamente es capaz de representar relaciones entre parejas
de variables [304]. En ningún caso pueden plantearse conclusiones basadas en múltiples parámetros de detección, por lo que la calidad expresiva de este método se encuentra muy limitada,
máxime teniendo en consideración el hecho de que otros enfoques, entre los cuales se encuentran
las anteriormente mencionadas Redes Bayesianas, soportan perfectamente cualquier requisito de
análisis multivariable [57, 115, 187].
2.2.3. Modelo General de Denning
Además de la propuesta de modelo estadístico de Detección de Anomalías, Dorothy Denning [105] también propuso un Modelo General de Detección de Intrusiones, el cual perseguía
el objetivo de integrar los benecios y potencialidades de los métodos de Detección de Usos
Indebidos y de Detección de Anomalías. Dicho objetivo abstracto de integración evitaba tomar
en consideración cualquier aspecto de bajo nivel, como pudieran ser el tipo de sistema objetivo,
la formalización de datos de entrada, etcétera, lo que ha contribuido notablemente a que los
principios establecidos en dicho modelo general sigan siendo vigentes en los actuales Sistemas de
Detección de Intrusiones. La gura siguiente ilustra el mencionado modelo [304].
106
Figura 2.40: Modelo General de Detección de Intrusiones de Denning
Como puede observarse, los distintos eventos concretos se trasforman en una primera fase en
eventos abstractos, independientes de cuestiones como tipo de plataforma, Sistema Operativo,
protocolo de red, etcétera. Posteriormente, estos eventos son utilizados para alimentar tanto a
un primer motor de análisis basado en perles de comportamiento, denominado Activity Prole,
como a un segundo motor de análisis basado en reconocimiento de patrones, denominado Rule
Set. De esta forma, dicho Activity Prole, por un lado, utiliza el modelo estadístico de Denning
descrito anteriormente para detectar desviaciones signicativas de los perles de comportamiento,
a la vez que es capaz de construir nuevos perles ante la aparición de nuevos usuarios o recursos
en el sistema a proteger. Por su parte, el Rule Set se apoya sobre un sistema basado en reglas,
para detectar comportamientos subversivos conocidos. Además, el Activity Prole es capaz de
formular en forma de reglas del Rule Set toda aquella actividad que identica como anómala, de
forma que a partir de ese momento, será éste último el encargado de detectar nuevas apariciones
de dicha actividad, con el incremento de eciencia que ello conlleva. Por supuesto, ésta es la
propiedad más poderosa del modelo propuesto por Denning, y sobre la cual descansan todos los
esfuerzos de integración de las dos grandes losofías de detección llevados a cabo en sus trabajos
de investigación.
Por otro lado, aunque el presente estudio, desarrollado en el ámbito del proyecto IDES de SRI
International, revela la importancia de la integración de los dos grandes enfoques de Detección
de Intrusiones y constituye aún actualmente un referente de enorme importancia, alcanza dicha
integración mediante la utilización de una única colección de parámetros de detección que es
compartida por los dos motores de análisis. Los datos son la esencia de la integración, pero
la inferencia que se realiza sobre dichos datos es heterogénea y, por lo tanto, sujeta a grandes
limitaciones de expresividad que restringen la calidad de las conclusiones que se obtienen.
No obstante, a este respecto, es posible encontrar modelos de representación, como las Redes
Bayesianas, que aúnan completamente los principios de funcionamiento de dichos grandes enfoques, consiguiendo un modelo de representación unicado y homogéneo por un lado, y un método
107
de obtención de conclusiones que permite tanto el análisis y la toma de decisiones, como el aprendizaje de comportamiento, de una forma también unicada y homogénea, por otro [57, 115, 187].
Respecto a esta cuestión, es interesante observar la completa adecuación de dichas características a la declaración de objetivos general, especícos y operacionales del presente trabajo de
investigación.
2.3. Implicaciones Arquitectónicas en el Análisis
Además de las técnicas de análisis expuestas anteriormente, existe una serie de propuestas
relativas al modelo arquitectónico en base al cual se construye un determinado Sistema de Detección de Intrusiones que introducen ciertas consideraciones importantes en el proceso de análisis.
A continuación se describen las más representativas.
2.3.1. Detección basada en Agentes de Software
Los conceptos de Agente Software, Agente Autónomo y Agente Colaborativo [386], constituyen un enfoque de diseño que persigue dotar de sensibilidad y autosuciencia a los procesos
que implementan la lógica de negocio de cualquier servicio de aplicación tradicional. Además,
también tratan de conseguir el objetivo de la colaboración mediante la distribución lógica de
las cargas de trabajo. De esta forma, un agente software se desarrolla por lo general como un
proceso independiente del sistema, que será gestionado únicamente por el Sistema Operativo, y
que formará parte de una plataforma general dentro de la cual cumple una determinada labor,
monitorizando aquellos eventos que sean de su responsabilidad, analizándolos y actuando en
consecuencia.
El paradigma de sistema de agentes autónomos aplicado al campo de la Detección de Intrusiones es el proyecto AAFID49 [30], desarrollado por el equipo de investigación de Gene Spaord
en la Universidad de Purdue. La gura anterior ilustra un caso de ejemplo de arquitectura AAFID, en la que, como puede observarse, se plantea un estructura jerárquica en base a tres tipos
de componentes fundamentales implementados en forma de agentes autónomos. De esta forma,
cada uno de los agentes AAFID puede ser bien un Agente de campo, bien un Transceptor, o bien
un Monitor.
Por supuesto, cada una de estas categorías tiene asignada una misión concreta. En primer
lugar, los agentes de campo recopilan toda la información proveniente de la máquina que se desea
proteger, en el modo en que se especica en el apartado de formalización. Posteriormente, toda
esa información es enviada al transceptor asignado a cada uno de los agentes, de forma que pueda
encargarse de la coordinación de las operaciones de dichos agentes, así como de la importante
tarea de la Reducción de auditoría, la cual redunda de forma notable en la eciencia del motor
de análisis. A continuación, los resultados de este procesamiento son enviados al monitor corres49
AAFID: Autonomous Agents For Intrusion Detection.
108
Figura 2.41: Modelo General de Detección de Intrusiones de Denning
pondiente, quien tiene la responsabilidad de realizar el análisis propiamente dicho. Por último,
existe una capa de interfaz de usuario que puede aplicarse a cualquiera de los monitores, a través
de los cuales es posible realizar las labores de administración tanto del propio monitor, como de
los transceptores u otros monitores asignados a dicho monitor, como de los agentes de campo
asignados a dichos transceptores.
De esta forma, se consigue un Sistema de Detección de Intrusiones modular, robusto, escalable y extensible. El desarrollo de cada uno de los agentes es más sencillo y, por lo tanto, más
seguro. Por otro lado, el sistema en su conjunto no está sujeto a un único punto de fallo, como es
habitual en sistemas con una orientación más centralizada. Por último, también es posible incorporar nuevos agentes ante el crecimiento del sistema que se pretende proteger, así como añadir
fácilmente nuevas funcionalidades. Todas estas ventajas no pueden pasar desapercibidas, dada la
acelerada evolución a la que están sujetos los actuales sistemas de computación y comunicaciones,
por lo que son tomadas en especial consideración en el presente trabajo de investigación. Otros
estudios realizados en la misma línea más recientemente son los llevados a cabo en la Universidad
de Iowa por Guy Helmer et al. [Helmer+03], en el Instituto Nacional de Estándares [260] por
Wayne Jansen et al. [196], y en la Universidad de Monterrey por Joseph Barrus [33].
109
Figura 2.42: Representación conceptual de GrIDS de una epidemia vírica
2.3.2. Detección basada en Grafos
La enorme capacidad infecciosa de algunas de las actuales amenazas que se ciernen sobre
sistemas de información de todo tipo[332], en combinación con ciertas peculiaridades intrínsecas propias de cada una de ellas, han dado origen a una propuesta de Sistema de Detección
de Intrusiones que propone la identicación de dichas amenazas en función precisamente de características exclusivas de su modo de propagación. Dicha propuesta, denominada GrIDS50 , ha
sido desarrollada por el equipo investigador de Stuart Staniford-Chen [330], de la Universidad
de California Davis, y aborda el problema de la Detección de Intrusiones de esa manera.
En concreto, el sistema GrIDS monitoriza la actividad existente entre las distintas máquinas
conectadas a la red de comunicación del sistema de información que se pretende proteger, y
obtiene patrones de actividad, en forma de grafo, que posteriormente son comparados con los
patrones de propagación de epidemias conocidas que ya se encuentran documentadas. De esta
forma, el objetivo fundamental consiste en detectar estos ataques a gran escala en las primeras
fases de su desarrollo. La gura ilustra de forma conceptual un caso de epidemia vírica representada por GrIDS en forma de grafo. Por un lado, se muestra un primer grafo que representa
la propagación de una amenaza en sus primeros estadios de evolución, y por otro, se muestra un
segundo grafo en el que la citada epidemia ha alcanzado un estado completamente avanzado.
2.3.3. Sistema Inmunológico
Existe una línea conceptual dentro del área de conocimiento de la Detección de Intrusiones
que aboga por aprovechar las similitudes existentes entre un Sistema de Detección de Intrusiones
y el sistema inmunológico de los seres vivos [325]. Para ello, el objetivo fundamental de dicha
línea conceptual no consiste sino en diferenciar con precisión qué elementos de los presentes en
la realidad del sistema a proteger son propios de dicho sistema y cuáles no. A este respecto,
es interesante observar el alto grado de correspondencia de dicho objetivo fundamental con los
50
GrIDS: Graph-based Intrusion Detection System.
110
principios básicos de la Detección de Anomalías. De esta manera, al igual que un organismo
vivo es capaz de reconocer comportamientos extraños propios de antígenos, un sistema de detección inmunológico es capaz de detectar comportamientos anómalos de los usuarios, así como
comportamientos clasicados de antemano como subversivos.
Además, este tipo de sistemas persiguen otra serie de cuestiones que en el caso de los organismos vivos se dan con naturalidad, como pueden ser la orientación completamente distribuida,
la diversidad, la adaptabilidad, la autonomía, la cobertura dinámica, la detección de anomalías,
la identicación de comportamiento, la no existencia de componentes de conanza, o la detección subóptima o imperfecta. Como puede deducirse de manera natural, estas características se
adecuan extraordinariamente al conjunto de retos por alcanzar planteados. No obstante, a pesar
de lo ambicioso de los objetivos planteados y del horizonte de posibilidades que se abre de forma
apriorística ante este enfoque de detección, las investigaciones realizadas hasta el momento no
han conseguido eludir una costosa etapa inicial de aprendizaje supervisado, en la misma línea
que otros enfoques anteriormente descritos.
Por otro lado, a pesar de la supuesta novedad de la estrategia arquitectónica que se plantea, los
métodos de análisis que se utilizan dentro de cada uno de los elementos componentes del sistema
inmune también se corresponden con dichas aproximaciones anteriores, por lo que el nivel de
innovación aportado en lo puramente analítico es limitado. Algunas investigaciones interesantes
sobre el tema son las desarrolladas por Haiyu Hou y Gerry Dozier [378], por Dipankar Dasgupta
y Fabio González [96], y por el equipo de investigación de Steven Hofmeyr .
2.4. Técnicas de Análisis especícas para Host Intrusion Detection Systems (HIDS)
Los Sistemas de Detección de Intrusiones para Sistemas Operativos, o Host, como se vienen
denominando tradicionalmente requieren de datos para poder realizar su labor. Ha pasado
bastante tiempo desde que se empezó a tener ideas sobre cómo facilitar la auditoría de sistemas
en orden de garantizar la seguridad de los mismos. Existen incluso documentos, de hace bastante
tiempo, que arman que sin la capacidad de generar y almacenar información de auditoría, no
se puede considerar un sistema como seguro [279]
La auditoría permite dos puntos de acción fundamentales: el primero y más importante
es que si ha acaecido una violación de la seguridad del sistema, los sucesos que se han ido
produciendo son repetibles; así mismo, como segundo punto se tiene el que se va a poder predecir
el comportamiento de los usuarios y actuar en consideración si se estima un posible ataque en
base al conocimiento anterior.
Los Sistemas de Auditoría tienen que ser capaces de:
Aceptar datos de los procesos que puedan registrar sus propios datos de auditoría.
111
Recoger la suciente información como para deducir lo que está pasando en el sistema.
Recolectar datos en la totalidad del sistema a todos los efectos.
Hacer acopio de sucesos relativos a la seguridad en otras partes interesantes, aun sin ser
dependientes del host.
Otro de los problemas habituales en este tipo de sistemas es el hecho de que los eventos, evidencias
o muestras se producen muy rápido. Usualmente se afronta esta tesitura en genérico como en
la plataforma de [279], CMW51 , Recolección Selectiva y Reducción Selectiva. La Reducción
Selectiva se basa en recoger sucientes datos para cumplir los requisitos de identicación de
usuarios, objetos accedidos, nivel de seguridad, etcétera. La Recolección Selectiva es idéntica al
caso anterior pero recogiendo selectivamente cualquiera de las partes anteriores acorde al patrón
que se esté buscando. Así mismo, los datos deberán ser almacenados bien localmente o bien
externamente en centros de recopilación de información. El hecho de almacenar la información
localmente sucinta un riesgo de poder ser alterado indebidamente. La recogida de datos que
plantearon en su momento abordaba 3 niveles importantes de modo que la captura fuera global:
intercepción de llamadas de sistema (syscall) en kernel, en la interfaz que se le proporciona por
el sistema operativo al usuario y a captura de interacción entre sistema operativo y aplicación.
El problema asociado es el volumen de datos generados, dado que son muchos los recursos a
monitorizar: sistema, aplicaciones, usuarios, etc.
2.4.1. Preámbulo: Ataques Mimicry en Sistemas de Detección de Intrusiones
Se hace un estudio [372] sobre diferentes tipos de sistemas de detección basados en host
(HIDS) para ver la seguridad que presentan contra diferentes ataques evasivos. Los ataques
denominados Mimicry permiten a un atacante realizar el ataque sin ser detectado por ninguno de
los sistemas existentes. Para poder demostrar este tipo de ataques se desarrolla una aplicación
marco que permitiera efectuarlos, demostrando que era viable realizarlos contra la seguridad
existente en una implementación concreta de HIDS.
Los autores argumentan que para detección de anomalías, casi todos las llamadas al sistemas
se pueden traducir en operaciones de no-operación (no-op), de forma que puedan desorientar
al sistema de detección realizando nalmente la tarea que se desea. Hay mucha literatura que
explica diferentes mecanismos de detección que son susceptibles a engaños mediante este tipo de
técnica:
Sistemas basados en el análisis de llamadas al sistema [134, 310, 14, 309]
Minería de datos [369, 229]
Redes Neuronales [14]
51
Compartmented Mode Workstation
112
Autómatas Finitos [52]
Modelos de Markov Ocultos [374]
Reconocimiento de patrones en secuencias de comportamiento [343, 344]
Una de los puntos de partida de este tipo de técnica es el hecho que no todo código malicioso
tiene la necesidad de llamar a una llamada al sistema. Como segunda arma los atacantes suelen
tener de su mano la paciencia, esperar hasta que la secuencia sea aceptada por el sistema de
detección como comportamiento normal para lanzar el ataque, incluso conduciendo el aprendizaje
del sistema en uno u otro sentido. El atacante contra sistemas basados en detección de llamadas
de sistema, puede introducir un troyano que se encargue de modicar las librerías a las que se
ha llamado para realizar una determinada tarea.
Una parte importante que se debe tener en consideración cuando se realizan este tipo de
ataques es el hecho de que generalmente, después de haber realizado el ataque el sistema entra en
una serie de trazas de syscalls a las que le ha llevado el código atacante, que generalmente no están
contempladas por los sistemas de detección indicando esta anomalía debidamente (detección a
posteriori al ataque producido). Para poder solucionar este tipo de situaciones se debe llegar a
realizar un cierre de aplicación anticipado pero existente en el sistema de detección, haciendo
pasar el ataque como un fallo de programación en vez de como una violación en la seguridad.
Otra aproximación bastante acertada es realizar un ataque mediante las cadenas de syscalls
más comunes dentro de la aplicación objetivo. Es decir, crear de las diferentes trazas que se
puedan tener, aquella que sea más común para que la desviación nal sea lo menor posible.
Siguiendo esta línea incluso se pueden realizar ataques o troyanos que emulen a la aplicación
objetivo después de haber realizado el ataque para que el sistema parezca que se encuentra en
un estado correcto.
Un fallo o carencia habitual en los sistemas de detección es la ausencia en el estudio de los
parámetros, haciendo que haya situaciones en las que varias llamadas sean la misma, queriendo
realizar cosas muy diferentes:
Listing 2.1: Ejemplo de un ataque Mimicry
1
//LLAMADA AL SISTEMA INOFENSIVA
open ( " / l i b / l i b c . s o " , O_RDONLY) ;
//LLAMADA AL SISTEMA DE POSIBLE ATAQUE
6
open ( " / e t c / shadow " , O_RDWR) ;
Otro defecto observado es que si no hay forma de insertar el código atacante dentro del
modelo de la aplicación que mantiene el IDS, hay una forma de variar la secuencia del ataque
113
mediante la inserción de operaciones que no hagan nada. Estas operaciones conocidas como, sin
operación (nop), sirven para que la traza se mantenga acorde a lo que ha aprendido el sistema
de detección, pero realmente el objetivo nal es conseguir poner en marcha la vulnerabilidad de
la seguridad deseada.
Continuando con lo expuesto en el párrafo anterior, siempre es posible generar las variaciones
en el ataque que permitan llegar a la situación en la que el detector no va a ser capaz de indicar
la anomalía. Un ejemplo puede ser tan simple como que una llamada read() de un chero en
memoria, puede ser equiparada en código a una mmap() seguida de un acceso a memoria. Por
la misma regla, hay secuencias que pueden ser desordenadas desde el ataque original al necesario
para evadir el sistema HIDS. De la misma forma unas pocas llamadas al sistema le dotan al
atacante de un poder especial, como por ejemplo la fork(). Esta última llamada es tratada
por los sistemas HIDS desdoblando el sistema para seguir al proceso padre y al proceso hijo, lo
que permite al atacante realizar el ataque en dos pasos diferentes dentro de distintos procesos.
Además si se consigue un acceso a la llamada execve() se le ofrece al ataque la posibilidad de
ejecutar cualquier cosa que desee en el sistema.
2.4.2. Detección mediante Análisis Forense
Es posible mejorar el conocimiento de lo sucedido en un sistema informático mediante el uso
de técnicas forenses [198] que no requieren de predecir la naturaleza del ataque, el conocimiento
del atacante o de los detalles de los recursos del sistema y objetos afectados. Los principios
incluyen la grabación de datos sobre el sistema operativo en su totalidad, particularmente los
eventos y entornos en espacio de usuario, así como interpretando los eventos en capas de diferente
abstracción según el contexto donde han sucedido. Los autores además, proponen la creación de
una máquina de estados nita sobre la que los resultados puedan ser establecidos preferiblemente
a ser inferidos.
El análisis forense es el proceso de comprensión, recreación y análisis de los eventos que han
sucedido previamente. El logeo es la grabación de datos que puedan ser útiles en el futuro para la
comprensión de eventos pasados. El proceso de auditoría de sistemas se compone de la recogida,
examen y análisis los datos guardados.
El hecho de trabajar temporalmente después de haber sucedido la vulnerabilidad, les permite
a los expertos conocer la forma en la que ha sido cometida. Para poder realizar este tipo de
análisis hay que hacer uso de una serie de puntos clave:
El sistema al completo debe ser considerado.
Los efectos de una acción pueden ser diferentes de los que se espera que sean.
Los datos en ejecución son el único registro de qué pasó exactamente. Mientras que los
escaneos de vulnerabilidades anteriores y posteriores a la intrusión pueden ayudar ampli-
114
amente, un conjunto de datos en tiempo real es la única fuente autorizada de la que se
puede sacar información completamente able.
En este tipo de metodologías se tienen en cuenta una serie de premisas de partida:
Principio 1:
Tener en cuenta el sistema completamente. Esto incluye tanto el espacio de
usuario, como el espacio de núcleo del Sistema Operativo, sistemas de cheros, pila de
protocolos de red y subsistemas asociados.
Principio 2 :
No siempre esta logeado lo que se presupone sobre fallos esperados, ataques
y atacantes. No creer en ningún usuario y no conar en ninguna política, dado que no se
sabe de antemano lo que se encontrará.
Principio 3 :
Tener en consideración los efectos de los eventos, no solo por ser debidos a
una serie de acciones, si no por cómo esos efectos pueden alterar el contexto del entorno.
Principio 4 :
El contexto ayuda en la interpretación y compresión del signicado de un
determinado evento.
Principio 5 :
Cada acción y cada resultado debe ser procesado y presentado de forma que
pueda ser analizado y comprendido en un análisis forense.
En el artículo se expone que una de las mayores faltas en esta técnica es la inexistencia de un
análisis automatizado para poder realizar todas las comprobaciones. El resumen de realizar una
solución genérica pasa por recoger no solo los eventos del kernel, si no también información sobre los tiempos, tamaños y localizaciones de alojamientos de información en memoria, lecturas y
escrituras. Las herramientas deberán conseguir eventos de información acerca de enlaces abstractos, sobre todo de aquellos que vayan a la red o que sobrepasen el sistema de cheros local. Se
deben recoger datos de programas, funciones y nombres de variables. Mediante una correlación
apropiada de esos nombres, eventos de memoria, contexto del sistema, entorno del programa,
herramientas que cubran los principios anteriores, si es presentada de forma humanamente legible
se podrá tener una herramienta adecuada para estas problemáticas.
El análisis de intrusiones a día de hoy, suele ser un trabajo difícil que se realiza generalmente a
mano, debido a que los administradores carecen de información y herramientas para comprender
fácilmente la secuencia de los pasos que ocurren en un ataque. Los creadores de la aplicación
BackTracker [212], después de producirse la intrusión, han dispuesto de una serie de medidas
para poder relacionar las evidencias entre sí. Hay una serie de factores que pueden indicar una
dependencia entre eventos:
Dependencias entre procesos. Esto se produce cuando un proceso afecta directamente en
la ejecución de otro proceso. Las causas pueden ser: creación, compartición de memoria,
envío de mensajes o señales...
115
Dependencias proceso a chero. Conseguir datos interesantes de cheros del sistema mediante un proceso. También se puede cargar el chero completamente en memoria y leer/escribir directamente ahí antes de guardarlo.
Dependencias entre proceso y nombre de chero. Un ejemplo de esto puede ser cuando
una aplicación carga un chero con su conguración, si este contiene datos incorrectos se
pueden producir situaciones peligrosas.
Para realizar el trazado inverso de aplicaciones se logean los objetos y los eventos con las dependencias en tiempo de ejecución. De esta forma se puede construir un grafo que indique las
relaciones entre todos los objetos que se han ido viendo en ejecución. Un ejemplo de un grafo
orientado a los eventos que se van realizando, partiendo de la información de que se ha producido
un ataque:
Figure 2.43: Grafo de dependencia que puede seguirse realizando operaciones de BackTracking
2.4.3. Detección basada en análisis estático o instrumentación binaria del
sistema
En el documento [198] los autores explican la creación de una herramienta, DOME, que
realiza un análisis estático para identicar las localizaciones (espacio virtual de direcciones) de las
llamadas al sistema que realizan los programas ejecutables. Después de obtener esas direcciones
se monitorizan los programas en tiempo de ejecución y se verica que la posición de memoria
utilizada por el ejecutable es la que corresponde con el estudio del sistema anterior. Esta técnica
es simple, práctica y aplicable al mundo real, pero si bien el equipo de investigación S3lab de la
Universidad de Deusto debe indicar que es posible infectar el código de las llamadas a sistema,
manteniendo intacta la posición del mapeo de memoria virtual.
Los autores sostienen que mediante el sistema DOME realizado obtienen una potente técnica
para proteger el software contra código malicioso, bien código inyectado dentro de los procesos
(buer overows...), bien código generado automáticamente (virus polimórcos, troyanos que
116
guardan sus datos cifrados, descifrando su código fuente y ejecutándose en el momento de arrancar...), o bien código malicioso ofuscado (virus, troyanos, gusanos... que ocultan su código de
forma que sean difíciles de detectar).
Mediante esta técnica es posible entrar al tan ansiado campo para los administradores de
detección de ataques nóveles, Zero-day attacks. Este proyecto ha centrado su estudio en windows
2000, con lo que el formato de estudio consecuentemente se ha jado en formato de chero
portable ejecutable (formato PE).
Los desarrolladores indican que para la detección del código inyectado, problemática indicada
previamente por el equipo de investigación S3lab, no es posible realizar esta técnica, dado que
lo que se cambia no es la dirección o la llamada a una u otra función, si no el propio código que
se va a ejecutar en el momento de su carga.
Otro tema que plantean en el documento, es la posible sobrecarga del sistema al realizar
la captura de eventos producidos, se indica que producen una sobrecarga al sistema de un 5%
al realizar las funciones de comparación para cada llamada a la API. Así mismo el sistema
desarrollado esta limitado a las llamadas a funciones de Win32, dejando las llamadas más internas
al sistema sin capturar.
Los autores plantean una serie de premisas:
Cualquier código inyectado, generado dinámicamente u ofuscado se asume como malicioso.
El código maligno interactúa con el sistema operativo.
En la interacción con el sistema operativo, el código malicioso, usa las llamadas exportadas
por Win32 (en el sistema operativo en estudio de los autores).
Cuando un código malicioso se esconde de la detección y análisis mediante el uso de generación de código dinámico y ofuscación, se esconde a su vez el uso de las llamadas a
Win32.
Los ejecutables software que deben ser protegidos pueden ser desensamblados y se puede
obtener la información sobre las API's usadas. Por lo tanto son monitorizables.
Se suele hacer uso de Detours [140]como herramienta de análisis para facilitarse el acceso al sistema operativo en cuestión, herramienta que se introducirá y comentará en el siguiente capítulo.
La investigación últimamente esta decantándose en lo que se denomina instrumentación binaria dinámica, utilizada comúnmente en los estudios para realizar Análisis Forenses [366]. El
malware52 actual es susceptible de tener métodos para modicar el código de programa que usan.
Los compiladores en tiempo real (JIT) a pesar de dar un soporte transparente, no son capaces de
seguir sistemas o aplicaciones multihilo, programas automodicables o código que se autotestea
en modo de núcleo. Para poder resolver este problema los autores han creado una herramienta
52
Término genérico que hace referencia a virus, troyanos, software espía (spyware)
117
que analiza la granularidad sobre el proceso, la red, teclas usadas, cheros, registro de sistema
y un largo etcétera. Mediante esta herramienta después de detectar un comportamiento anómalo se puede analizar a través de debuggers las diferentes formas de un virus polimórco, su
cifrado-descifrado de datos, el contenido de memoria que ha usado.
Las técnicas de instrumentación binaria representan a la habilidad de controlar las construcciones pertenecientes a cualquier código y es empleada tanto en técnicas de análisis grueso como
granular. El control se reere a generar la construcción del ejecutable para observar una posible
alteración semántica. La instrumentación binaria se clasica en dos categorías:
Basadas en pruebas: Dtrace [55], Dyninst [45], Detours [140]. Realizan su función modicando el programa objetivo para ser ejecutado de una forma determinada cuando se llama
al programa original.
JIT: Pin [234], DynamoRIO [44], Valgrind [257]. Estos métodos se basan en la instrumentación mediante empleo de máquinas virtuales (VM).
Los métodos basados en pruebas no son transparentes debido a que las instrucciones originales
se sobreescriben en memoria por medio de lo que se denominan trampolines53 .
El sistema que denominan SPiKE ofrece una API sobre la que integrar las funciones para
los analizadores que se quieran. Introduce en la memoria virtual una serie de elementos lógicos
que se activan cuando se produce una lectura, escritura o ejecución. El producto se basa en
otro entorno denominado VAMPiRE [366] para poder insertar esos códigos lógicos en la posición
adecuada de memoria. La técnica de activación de eventos que usan, denominada por ellos
Invisible
Drift
lo que hace es insertar código en unas determinadas posiciones correspondientes a la
construcción del código del que se desea realizar la instrumentación. Un BreakPoint en código
permite detener la ejecución de código arbitrario durante el tiempo de ejecución. Para evitar
que se detecte este tipo de ganchos se usan páginas de memoria que contienen la información
referente a ellas mismas como no presente y se basan en el sistema de Detección de Excepciones
de Paginado en Memoria (PFE).
Los errores más comunes de programación de aplicaciones con los que se suele ganar el control
de un sistema o de una aplicación residen en la manipulación de corrupciones en memoria de
los procesos. Los ataques más comunes actualmente son debidos a buer overow o a format
string. Se considera importante identicar automáticamente cuándo se han producido estos
errores. El punto que presentan los autores de este texto [201] en el que se puede detectar el
error producido es el momento del cierre inesperado y de forma incorrecta de la ampliación.
Una vez conocidos los valores de datos y direcciones que se han embebido en el ataque se puede
bloquear este tipo de ejecuciones. En el documento [201] se presenta y desarrolla un sistema
descentralizado y auto protegido para los ordenadores cableados en red. Se pueden encontrar
53
Un trampolín es una secuencia de código que se puede atravesar entrando en múltiples partes de la misma
dado que no realiza operaciones que varíen el contexto del procesador.
118
numerosos intentos para la detección de rmas de ataque de este tipo, como pueden ser los
siguientes:
Honeycomb [214]
Autograph [210]
Early Bird [312]
Poligraph [193]
Pero este tipo de métodos suelen de una limitación, que generalmente se hace uso de un análisis
sintáctico sobre los ataques, olvidando la semántica en la que se han producido los mismos.
Muchas otras aproximaciones que se están desarrollando se basan más en la instrumentación del
código binario e incluso pueden recuperarse de los ataques una vez producidos:
TaintCheck [259], realiza un análisis dinámico mediante una emulación binaria del programa para atrapar la propagación del binario por la red. A su vez también se realizan
rmas de ataques basadas en semántica.
DIRA [321], hace una instrumentación del código para mantener un log de actualización de
la memoria mientras el programa está en ejecución, realizando incluso una vuelta a atrás
para volver a una zona segura cuando se ha producido el ataque.
STEM [311] realiza una aproximación reactiva. Después de detectar un ataque, se reemplaza la vulnerabilidad del programa con una versión parcheada.
Las herramientas anteriores aun siendo un paso importante introducen debido a la instrumentación de código una sobrecarga importante en la ejecución de un determinado proceso.
El análisis del ujo de la información dinámica (DIFA) [248] es muy útil para la detección de
intrusiones a nivel de aplicación. Uno de los efectos más habituales de los ataques sosticados es
el hecho de poder introducir información insegura dentro de partes importantes de la aplicación,
esta modicación es un hecho contrastable del suceso de este tipo de ataques. Muchos de estos
patrones de comportamiento, una vez detectados se pueden introducir en un sistema de detección
de intrusiones basado en rmas.
2.4.4. Detección basada en rmas
Arbaugh en el año 2001 [43] indica que en el mundo de la seguridad informática de los
sistemas de alta disponibilidad, los administradores se encuentran en la tesitura de mantener
sistemas a sabiendas con vulnerabilidades. Esta situación se produce debido a que se descubren
fallos de seguridad continuamente, pero pasa un tiempo hasta que se tiene la solución de los
119
Figure 2.44: Ciclo de vida de una vulnerabilidad en software
mismos, conllevando que estos administradores se encuentren indefensos durante periodos de
tiempo dado que una baja en el servicio conlleva pérdidas difícilmente cuanticables.
Para ello Arbaugh diseñó, implementó y evaluó un sistema que soporte la construcción y ejecución de predicados que representen una determinada vulnerabilidad. El sistema que presentan,
Intro-Virt, se vale de técnicas basadas en introspección de máquinas virtuales para monitorizar
la ejecución de la parte software, aplicaciones y sistema operativo.
El proceso por el que una aplicación determinada o sistema operativo se mantiene vulnerable
es el siguiente:
Como se puede ver en la imagen anterior, el hecho de que una vulnerabilidad sea observada,
no implica que inmediatamente se corrija, aquí entran en juego diferentes motivaciones de los
administradores, desarrolladores y directivos [157, 24, 43, 35].
La idea sobre la que se basan los autores es comprobar mediante una serie de predicados si se
dan las propiedades para una u otra vulnerabilidad. Así mismo, combinando los predicados con
los resúmenes de las máquinas virtuales creadas, el usuario podrá conocer si ha sucedido alguna
anomalía de este tipo en el pasado. Los autores dejan claro que descubrir vulnerabilidades
acaecidas, no es prevenir de una posible intrusión, pero sí es un punto de partida para conocer
hasta qué punto el sistema ha sido comprometido.
Otro de los pilares fundamentales que tienen en mente los autores es que mediante la combinación de predicados de vulnerabilidad especícos, junto con una respuesta estratégica se puede
alertar al usuario e incluso prevenir sobre los ataques que están sucediendo en el sistema.
Los predicados que buscan los autores son fáciles de escribir una vez que es conocida la
vulnerabilidad e incluso podrían ser transcritos por la entidad que se encargue de escribir el
parche. Un predicado correcto no puede tener ni falsos positivos ni falsos negativos, pero en
contraposición con los detectores de exploits especícos se lograría captura las variantes del
código malicioso, cualidad que no es soportada por estas últimas herramientas.
Los predicados con las deniciones de vulnerabilidades deberán ser ejecutados fuera del entorno del sistema, es decir, que no es apropiado mantener la revisión de los mismos ni en zona
de usuario, ni en zona de kernel. La solución pasa por tener hardware dedicado a este tipo de
tesituras.
Una de las primeras pruebas que realizan es ejecutar el software objetivo en una máquina
virtual, de esta forma se obtiene acceso total al sistema en estudio, esta técnica se denomina:
introspección de máquinas virtuales [142]. Para poder demostrar estas ideas los autores se basan
120
en VMM (Virtual Machine Monitor), que en plataformas de virtualización como Xen [276], es la
parte encargada de gestionar los recursos utilizados. Así mismo si el atacante consigue poner en
el peligro el propio núcleo del sistema de virtualización, debido a una fuga de la caja estanca en
la que se estaba trabajando, se tendrán problemas complejos de detectar y solventar.
2.4.5. Detección de ataques contra la lógica de las aplicaciones
Como ya hemos visto en secciones anteriores, la detección de anomalías basadas en el análisis
de trazas de llamadas al sistema de los diferentes programas para obtener un modelo de su comportamiento y posteriormente analizar sus llamadas en busca de anomalías, puede dar resultados
óptimos en la detección de ataques. No obstante, este tipo de detección no es apropiada cuando
lo que se ataca en la lógica de las aplicaciones. En estos casos se hace insuciente en análisis de
ujo de llamadas al sistema, pues estos ataques en contadas ocasiones modican la trayectoria
de ejecución de los procesos (con lo que la traza de llamadas al sistema invocada por éstos se
mantiene intacta). Por tanto, las aproximaciones basadas en el análisis de secuencias de llamadas
al sistema no detectarían estos ataques [134, 371].
Otro problema es que la información que se necesita para detectar ataques a nivel de lógica
de aplicación puede no estar o ser muy difícil de extraer de las llamadas al sistema invocadas por
el proceso.
Para detectar ataques de éste tipo, es recomendable realizar una auditoría selectiva en ciertos
puntos del ujo de control de la aplicación. El problema es que pocas aplicaciones proveen de un
hook54 , e incluso cuando éstos están disponibles no suelen estar colocados en el lugar correcto.
Además, la técnica de instrumentación suele ser especíca para cada aplicación y difícil de portar
a otros programas.
Auditando los datos
Auditar es el mecanismo de recogida de datos respecto a la actividad de los usuarios y las
aplicaciones. Ya que el sistema operativo es considerado como una entidad conable debido a
que se encarga de los accesos a los recursos (como memoria y cheros), la mayoría de los sistemas
de auditoría están implementados dentro de él. Estos sistemas de auditoría no están diseñados
especícamente para la detección de intrusiones y por lo tanto, en muchas ocasiones los datos
producidos por los sistemas de auditoría del sistema operativo contienen información irrelevante
y escasez de datos útiles. Debido a este hecho, usualmente los sistemas de detección de intrusiones
desarrollan herramientas propias para acceder directamente al sistema operativo en busca de la
información realmente relevante.
Lunt [235] sostiene que es necesario disponer de aplicaciones auditoras que provean de la
información puramente necesaria para la detección de intrusiones.
54
Sistema de recolección de datos a bajo nivel, como por ejemplo las llamadas al sistema invocadas y los
argumentos de éstas.
121
Reescritura binaria dinámica
Esta técnica es independiente de plataforma y soporta la recogida de información en cualquier lugar dentro del ujo de control de la aplicación [401] y es utilizada en conjunto con rmas
especícas de aplicación para detectar ataques que explotan los errores de la lógica de la aplicación. Esta aproximación ha sido validada a través de muchos estudios de casos de ataques contra
aplicaciones reales como por ejemplo Apache y OpenSSH [401].
La reescritura binaria dinámica es una técnica de post-compilación que cambia directamente
el código de los ejecutables. Al contrario que la librería de interposición dinámica, la reescritura
binaria dinámica funciona con programas vinculados estática y dinámicamente. Además provee
de un mayor acceso a la parte interna de la aplicación ya que además de las librerías de funciones, pueden ser utilizadas funciones estáticas de la aplicación. Existen dos tipos de técnica de
reescritura binaria:
1. Estática: Modica la imagen residente en disco del binario55 de los programas.
2. Dinámica: Cambia la imagen de memoria de un proceso.
ATOM [328], EEL [225], Purify [159], y Etch [345] son ejemplos de herramientas basadas en
técnicas de reescritura estática. Dyninst [45] y Detours [140] son ejemplos de herramientas de
reescritura dinámica.
Comparando ambos métodos, la escritura dinámica tiene la ventaja de que mantiene intactos
los ejecutables de las aplicaciones. Además, utilizando la escritura dinámica es posible modicar
los binarios de la aplicación de varias maneras, dependiendo del contexto de invocación de la
aplicación y permite mantener el código tras una llamada fork()56 , por lo que el proceso hijo
también será instrumentalizado.
En términos generales, la reescritura binaria dinámica es una aproximación de interposición.
La técnica de interposición a las llamadas al sistema ha sido utilizada para desarrollar perles
de usuario y depuración de sistemas software, además de ser muy utilizada con propósitos de
seguridad:
1. Curry, usa interposición dinámica de librerías para proling57 y traceo de llamadas a las
librerías [81].
2. Deteurs, una herramienta de depuración y proling que utiliza reescritura binaria dinámica
para interceptar funciones Win32 [140].
55
Los cheros binarios son archivos electrónicos que han sido guardados utilizando el código básico de las
computadoras u ordenadores: código binario, una sucesión de ceros y unos. [1]
56
Se trata de una llamada al sistema operativo para que duplique el proceso que ha llamado, creando por tanto
un proceso hijo que será una copia de él mismo.
57
Técnica de creación de perles de usuario, aplicaciones, ...
122
3. ByPass, extiende la funcionalidad del software de sistemas existente para computación
distribuida utilizando técnicas de interposición en librerías compartidas [354].
4. Interposition Agents, es un RootKit58 para interponerse entre el código de usuario y el
núcleo del sistema operativo [200].
Por lo tanto ésta aproximación separa las rutinas de auditoría de la aplicación original. De esta
manera puede ser añadido un nuevo módulo de auditoría sin que se requiera la recompilación
de la aplicación. La selección del módulo de auditoría es pospuesta hasta el momento en el
que la aplicación es invocada, permitiendo una selección de conguración de auditoría exible.
Además, las rutinas de auditoría y la aplicación corren bajo el mismo espacio de direcciones con
rendimiento comparable al acercamiento de modicación del código.
2.4.6. Detección basada en Secuencias de Syscalls
Estudio de secuencias de llamadas al sistema para clasicar las intrusiones [37] y los fallos
inducidos en procesos privilegiados de UNIX. La clasicación es una capacidad esencial para
responder a una anomalía, dado que permite asociar respuestas apropiadas para responder a
cada anomalía. Los autores [199] arman que la creación de un Diccionario de Anomalías es
imprescindible en este tipo de sistemas. Este tipo de diccionarios se encargan de contener la
información sobre las secuencias anómalas para cada tipo de anomalía. A su vez, en paralelo
con este tipo de diccionarios se pueden crear los denominados Diccionarios Normales, para poder
realizar la clasicación debidamente.
Los esfuerzos durante más de 20 años se han centrado en la generación de Sistemas de Seguridad de la Información aplicando técnicas de Minería de Datos, Aprendizaje de Máquinas, Reconocimiento de Patrones e Inteligencia Articial [192, 370, 289, 258]. La metodología planteada
en [199], denominada stide (sequence time-delay embedding) se puede resumir de la siguiente
forma:
1. Modelado: Se caracteriza el fenómeno en estudio por medio de una secuencia de variables
o símbolos dentro un alfabeto largo pero nito. Estas secuencias se obtienen manteniendo
el programa en estudio ejecutándose desde el arranque hasta el cierre.
2. Recolección de Datos Normales: Recogida de grandes volúmenes de datos correspondientes a la operación normal del programa, almacenando los símbolos generados. Ene este
apartado se realiza el estudio numerosas ocasiones, produciendo numerosos procesos, hilos... tratando de explorar la operación normal de funcionamiento de todas las formas
posibles.
58
Es una herramienta que se ejecuta a nivel del sistema operativo capaz de interceptar llamadas al sistema y
afectar a los procesos que se están ejecutando, con diversos propósitos.
123
3. Extracción de características: Se selecciona un tamaño de cadena (k), y se construye un
diccionario de secuencias cortas sobre los datos del Diccionario Normal. Esto se realiza
mediante una ventana deslizante del tamaño k a través de la muestra, saltando sólo un
único símbolo cada momento.
4. Detección: Dado una muestra de entrada del sistema en estudio, se realiza la detección
de anomalías mediante comparación de secuencias contra el chero salvado de normalidad
anterior. Si las secuencias no son encontradas se denominarán secuencias anómalas y se
almacenarán en el Diccionario de Anomalías.
2.4.7. Detección basada en grafo
Detección basada en grafo de llamadas al sistema
Los autores establecen que si bien el kernel de linux dota al usuario de una serie de funciones
interesantes de modularidad y exibilidad, en sistemas embebidos se puede lograr un mejor
rendimiento, para ello se valen de lo que han denominado como grafo de llamadas al sistema
basado en la ingeniería inversa de este tipo de sistemas. Mediante una representación en forma
de grafo se puede representar el comportamiento del sistema objetivo mejorando o haciendo
hincapié en optimizar determinadas funciones.
En la forma en la que trabajan los autores, se consigue representar y abstraer el funcionamiento interno del kernel, así como de las aplicaciones que hacen uso del mismo. Una
representación del funcionamiento de llamadas entre funciones de código puede ser el siguiente:
Figure 2.45: Grafo de llamadas que se producen desde código fuente.
Un grafo de llamadas es un grafo dirigido que representa la estructura estática del programa.
Al igual que el grafo anterior se ha realizado para un programa, se puede realizar un grafo
semejante para las llamadas desde el código fuente de las librerías. Es el mismo concepto que en
el caso anterior pero carece de raíz. Esto queda expresado en la gura siguiente:
124
Figure 2.46: Grafo de llamadas entre librerías
Teniendo el grafo adecuado para cada máquina, dependiendo de las aplicaciones que se tengan
instaladas, se puede diferenciar un comportamiento normal del mismo o sucesos anormales. En
la misma línea, dado que los sistemas de detección de intrusiones se usan para detectar los rastros
de actividades maliciosas sobre redes y sistemas, en el documento de Mutz de 2006, [95] se indica
una forma para detectar una secuencia de llamadas al sistema anómalas.
Los sistemas de detección de intrusiones se clasican, como ya se ha comentado en puntos
anteriores, de dos formas: basados en malos usos o basados en anomalías. En los primeros
sistemas (misuse-based) [277, 231] se tiene un número de descripciones de ataque, o rmas, que
se tratan de localizar sobre ujos de datos de auditoría de sistemas. Estos sistemas generalmente
son ecientes y tienen una baja tasa de detecciones erróneas que se denomina falsos positivos.
Si bien, la gran pega de este tipo de sistemas es el hecho de que no detectan ataques que no
haya sucedido alguna vez y de los que se tenga conocimiento. Un buen ejemplo para una tarea
concreta puede ser el caso de detección de condiciones de carrera, en el que se ha desarrollado un
lenguaje de auditoría de trazas BSM, denominado BSML [281]. En este documento se explica
un lenguaje para determinar cuando se dan estas situaciones y actuar en consecuencia por si se
esta produciendo un ataque.
Dentro de los diferentes tipos de sistemas de detección de intrusiones, los que se basan en
anomalías [105, 146] construyen modelos del comportamiento que se espera de las aplicaciones.
Para generar estos modelos se revisa la operación normal de las mismas, guardándolo como punto
de referencia. Los modelos que se consiguen se denominan perles.
De la forma anterior comparando los modelos de comportamiento de cada aplicación con
el comportamiento actual se pueden obtener las desviaciones que hayan surgido. Una de las
premisas de esta forma de actuación es el hecho de que una desviación sobre el comportamiento
aprendido, conlleva ser víctima de un ataque. En el documento de Denning [105] se trata de
125
realizar una aproximación basándose en perles de usuario, pero este tipo de técnicas no pueden
ajustarse a los cambios de repentinos de los usuarios en su comportamiento.
Se han desarrollado diferentes sistemas de anomalías con diferentes técnicas de detección.
Ejemplos de ello pueden ser desde la detección y de datos sobre el tráco de red [229] o análisis
estadísticos de registros de auditoría [396]. La secuencia de llamadas al sistema producida por
las aplicaciones ha sido objeto de análisis de detección de anomalías. Las técnicas que se han
ido proponiendo son aproximaciones de dos tipos: basadas en especicaciones y basadas en
aprendizaje.
La aproximación mediante especicaciones confía en unos modelos especícos para cada aplicación que han sido realizados manualmente [36, 62, 213], bien con conocimiento experto, bien
derivadas a través del uso de algún programa con alguna técnica de análisis [371]. Los perles
generados de esta forma son introducidos como entrada de un sistema de detección de intrusiones
en tiempo real, así cuando se produzca una secuencia de llamadas no conformes con el modelo
se levantará la correspondiente alerta. La mayor pega de este tipo de sistemas de detección es el
hecho de que tienen una limitada capacidad para generar las especicaciones, tarea normalmente
bastante ardua para ser realizada a mano. Otro problema de este tipo de HIDS es la necesidad
de interacción del usuario durante la fase de entrenamiento, si bien es posible utilizar modelos
predenidos para cada aplicación, no son aplicables para todos los usuarios, sobretodo al emplear
diferentes conguraciones. Así mismo, para este tipo de aproximación se requiere el acceso al
código fuente.
Si ahora se analiza la técnica de aprendizaje se debe señalar que no es necesario asumir nada
de antemano, si no que los perles se construyen en base al análisis de las llamadas al sistema
durante la ejecución normal. Esta primera aproximación vino de la mano de Forrest [134]. La
clave de este método es el hecho de que un programa que tiene que interaccionar con el sistema
operativo en el que esta siendo ejecutado requiere hacer uso de las llamadas al sistema para
poder causar un daño permanente en el sistema. Cuando una secuencia de llamadas al sistema
se desvía del comportamiento esperado, se asume que se está produciendo un ataque.
La idea era recabar durante la fase de aprendizaje todas las posibles secuencias de llamadas al
sistema de una determinada longitud. Durante la fase de detección, se comparaban las cadenas
de secuencias recogidas con las legítimas aprendidas en la primera fase, teniendo la posibilidad
frente a desviaciones de indicar la anomalía. El problema de esta técnica es que sólo hace uso de
la secuencia que siguen estas llamadas, dejando a un lado los argumentos y los valores devueltos
al retornar de las mismas. Además en la metodología de la autora sólo se examina un proceso
en concreto.
Siguiendo ésta línea de trabajo, otros autores han continuado el trabajo precursor del análisis
de secuencias de syscalls [371, 374, 131], y por norma general es la opción más utilizada para
análisis del comportamiento de los programas.
Las técnicas basadas en detección de anomalías conlleva un riesgo inherente de detectar como
126
anomalía comportamiento de secuencias que son legítimas en el funcionamiento de una determinada aplicación, así como realizar código malintencionado que siga las secuencias de llamadas
correctas. Además generalmente las técnicas que se aplican no hacen uso de los argumentos que
llevan asociados las llamadas al sistema.
Se proponen dos posibles mejoras a los sistemas de detección de anomalías basados en host:
1. Aplicar sistemas de detección que incorporen los argumentos que llevan las llamadas al
sistema.
2. Descubrir una forma de cuanticar la puntuación de anomalía de cada modelo en una
medida global. Este resultado determinará si un evento es parte o no de un ataque.
En concreto para resolver este problema los autores proponen una técnica que hace uso de las
Redes Bayesianas para realizar la clasicación de las llamadas al sistema. Los autores demuestran
que el análisis de los argumentos y el uso de clasicadores Bayesianos mejoran la precisión contra
los intentos de evasión. La salida de cada uno de los motores de detección individuales se combina
con una Clasicación Bayesiana, mejorando a los clasicadores basados en umbrales naive que
se usan para combinar las salidas de los modelos.
El sistema propuesto al estar basado en análisis de llamadas al sistema individuales, es más
resistente contra los ataques que tratan de asemejarse a la forma normal de comportamiento de
una aplicación: ataques mimicry attacks [348, 346, 372]. La denición formal de este tipo de
ataques es aquel que mediante código inyectado ataca a la seguridad de un sistema emulando la
secuencia de llamadas al sistema de las aplicaciones legítimas.
El modelo que presentan los autores [95], consiste en un ujo ordenado de llamadas al sistema
almacenadas dentro del sistema operativo S = {s1 , s2 , ...}. Cada llamada al sistema s ∈ S tiene
un valor de retorno rs y una lista de argumentos < as1 , ..., asn >. Se debe indicar que los autores
no están teniendo en cuenta las relaciones entre las llamadas al sistema. Para cada llamada al
sistema creada por una aplicación se crea un perl, comparando después del aprendizaje cada
llamada de esa aplicación a las syscalls del sistema si concuerdan con el perl aprendido en la
primera fase.
En el modo de detección, la función de cada modelo es devolver la probabilidad de que
ocurra un determinado argumento basándose en el modelo aprendido previamente. Un valor de
baja semejanza (likelihood) de que una determinada característica es observable en un perl
establecido indica la posible anomalía que se esta produciendo.
Para los autores del documento [95] sólo se considera ataque aquello que se salga de lo común
dentro de los posibles parámetros que se puedan tener en un argumento de llamada al sistema.
Si un ataque se realiza sin invocar a las llamadas del sistema con unos argumentos dentro de los
del modelo, no será reconocido. Para poder caracterizar las llamadas al sistema se aplican una
serie de modelos que ayudan a la identicación de anomalías:
127
1.
Longitud de la cadena de texto.
Generalmente los parámetros que se introducen en las
llamadas a las API's o al sistema ejecutivo tienen una longitud máxima de unos cientos de
caracteres y generalmente son legibles directamente por el ser humano. Si se introduce un
ataque dentro de este tipo de parámetros se acaban insertando caracteres no reconocidos
que aumentan los tamaños normales que se tenían dentro de cada parámetro.
2.
Distribución de Caracteres.
La forma en la que se distribuyen los caracteres dentro de las
cadenas de texto de los argumentos suele ser regular, aparte de ser generalmente caracteres legibles. Por normal la mayor parte de los caracteres se encuentran en un pequeño
conjunto de 256 caracteres: letras, números y unos poquitos caracteres especiales. Dentro
de los lenguajes naturales escritos, por ejemplo castellano o ingles, los caracteres tienen
una distribución de frecuencias de aparición uniforme. Es cierto que no se puede comparar
un lenguaje natural con el empleado por un sistema computerizado, pero tienen ciertas
semejanzas en la distribución de caracteres que bien pueden ser tenidas en cuenta.
3.
Inferencia estructural.
Es posible que el atacante haya conseguido mantener la acción
dentro de unos parámetros normales para la distribución de caracteres, y/o en una longitud
adecuada a la normalidad de las longitudes de cadenas de texto. Para poder capturar
adecuadamente este tipo de ataques se realiza el análisis de la estructura de argumentos,
que no es más que la gramática de expresiones regulares que puede emplear ese argumento
en concreto. La inferencia estructural es el proceso por el cual se obtiene esta gramática.
4.
Buscador de Tokens.
El objetivo del localizador de tokens es determinar si los valores de
determinados argumentos de llamadas al sistema se pueden resumir en un conjunto de
alternativas posibles reducido. Esto se debe a que generalmente una aplicación pasa a
menudo valores idénticos, como ags y handlers, en los argumentos de las syscalls. Cuando
un ataque cambia el ujo normal de ejecución y consigue saltar al código malicioso propiamente dicho, estas restricciones son violadas.
Finalmente para homogeneización de los resultados de los diferentes motores se emplea una
clasicación basada en redes bayesianas que tiene la siguiente estructura:
128
Figure 2.47: Arquitectura bayesiana del sistema de detección de anomalías para host propuesto
en [95]
Siguiendo la línea de investigación abierta para superación de los sistemas de detección más
utilizados basados en detección de desviaciones, hay autores que clasican estos sistemas como
caja blanca, caja negra o caja gris [141]. Para discernir los sistemas y poder clasicarlos se valen de la información que usan para construir el modelo mediante el que realizan la
comparación:
Los detectores de caja negra emplean únicamente el número de la llamada al sistema
utilizada. Potencialmente estos detectores pueden hacer uso de los argumentos en esas
llamadas.
Los detectores de caja gris extraen además información en tiempo de ejecución a medida
que las llamadas al sistema se van produciendo.
Los detectores de caja blanca extraen el modelo directamente desde el código fuente o del
binario.
Los detectores de caja negra y caja gris ya han sido comentados en el documento. Los detectores
de caja blanca se basan en el concepto de falsos positivos cero, dado que siempre indican una
posible intrusión. Si bien estos detectores no son siempre apropiados, en principio debido a que
el código fuente no es siempre accesible, además que el hecho de realizar un análisis estático es
129
complejo por causas externas: ofuscación, sistemas de protección digital, packers59 ... Otro inconveniente de las cajas blancas son los programas que se cambian a sí mismos, muy comúnmente
usados en técnicas víricas.
En el paper [141] exponen una nueva técnica que denominan grafo de ejecución, que es técnica
pionera juntando las tres cajas. Se trata de construir un modelo que acepte las mismas secuencias
de llamadas al sistema pero con las bases de partida de las cajas blancas. Los autores denominan
a la secuencia de observaciones como ejecución, basándose en llamadas a API's intermedias o
a syscalls directamente de sistemas UNIX, en los que se va apilando/rellenando los parámetros
en la pila para hacer la llamada o en los registros para solicitar la interrupción directamente.
Así mismo en la misma traza de ejecución se anexan los valores de retorno y las direcciones de
retorno que se requieran. Finalmente el concepto de grafo de ejecución, que se construyen en base
a las observaciones de ejecución explicadas con anterioridad, consta de pares de identicación
de llamadas al sistema consecutivas y las direcciones de retorno de la pila cuando se realiza la
llamada en sí misma. Dado que cada una de las direcciones devueltas revela información sobre
la estructura de llamadas del sistema, se puede considerar una aproximación a la terminología
de caja blanca.
Figure 2.48: Código fuente y grafo de ejecución presentado en el paper [141]
2.4.8. Visualización e identicación del contexto de las intrusiones desde las
trazas de llamadas al sistema
Los sistemas de detección basados en anomalías son muy útiles pues son capaces de detectar
técnicas de intrusiones nuevas que no han sido analizadas y que no tienen rmas conocidas.
Sin embargo esta capacidad conlleva el problema de la posibilidad de generar falsos positivos.
Esto es debido a que el análisis de la normalidad se lleva a cabo mediante el análisis del funcionamiento del programa y comportamientos normales pueden quedar fuera de éste análisis. La
mayoría de las técnicas tratan de generalizar el comportamiento normal para modelar mejor este
59
Un packer es un programa, generalmente comercial que se encarga de impedir que se pueda realizar ingeniería
inversa en los programas binarios que se distribuyen.
130
tipo de conducta. Aun así este hecho implica que se contemplará mayor parte de una posible
pauta intrusiva. La identicación del contexto de la intrusión60 puede ayudar signicativamente
a aumentar la tasa de detecciones y a reducir los falsos positivos generados [402].
Flujo de trabajo del Identicador del contexto de intrusiones (ICI)
La adeshión de un módulo de identicación del contexto de intrusiones consiste en colaborar
con el motor de análisis de anomalías, realizando un aprendizaje o-line, (es probable que al
módulo ICI le lleve un tiempo considerable determinar los contextos de intrusiones), en el cual
cada vez que salte una alarma el módulo ICI analizará el contexto y determinará si ésta era
un falso positivo o no. En caso de serlo la secuencia que ha hecho saltar la alarma debería
ser añadida al sistema inteligente de detección de intrusiones como parte del comportamiento
normal, evitando de esta manera futuros falsos positivos por el mismo motivo.
Ésta imagen detalla el el proceso en el que estaría involucrado el módulo ICI [402]:
Figura 2.49: Arquitectura de un sistema de detección de intrusiones sin (izq) y con (dch) un
módulo de identicación del contexto de intrusiones (ICI)
1. Todos los eventos procesados por el motor de análisis son copiados al móludo ICI para que
los guarde en un buer de tamaño predenido.
2. Toda alarma generada por el motor de análisis también es enviada al módulo ICI.
3. El módulo ICI extrae el contexto de la intrusión de la alarma, y más adelante lo procesará,
visualizará y/o lo agrupará.
4. El módulo ICI busca contextos de intrusión ya identicados similares.
5. Un experto en seguridad analiza el contexto de la intrusión y decide si la alarma ha sido
un falso positivo o no y el nivel de conanza teniendo en cuenta los contextos existentes.
6. El vector ICI (alarma,decisión,conanza) de la alarma es enviado al motor de análisis y/o
a los sistemas de respuesta.
60
En la detección de intrusiones basada en anomalías, el contexto de la intrusión que corresponde a una alarma,
son las huellas auditadas que se encuentran fuera del modelo normal del comportamiento las que hacen saltar la
alarma
131
7. El motor de análisis ana el modelo de comportamiento normal utilizando el vector obtenido
del ICI para evitar volver a dar el mismo falso positivo.
8. Los sistemas de respuesta activan diferentes estrategias en base al vector ICI.
Otras utilidades para el ICI
Además de la capacidad para reducir los falsos positivos, el módulo ICI puede ser utilizado
como una herramienta para analizar tareas como las que se enumeran a continuación:
1. Para fortalecer la correlación de alertas con las técnicas de detección de anomalías ya que
una alerta no puede determinar consistentemente una intrusión y el contexto de la intrusión
es capaz de mostrar las razones exactas.
2. Para estudiar las características de las intrusiones y mejorar después en base a la información obtenida la eciencia del experto y proponer nuevas técnicas de análisis.
3. Para aplicarlo en otros campos de la intrusión como el estudio forense.
Visualizando y analizando el contexto
Sabemos que las anomalías en una secuencia de llamadas intrusivas estarán indicadas por un
set de secuencias extranjeras. Por tanto sería de gran ayuda visualizar dicha secuencia no propia
del programa en el esquema del ICI. El tamaño de la ventana aplicado para dicha aplicación
también será crítico ya que en el caso de que la secuencia extraña sea mayor que el tamaño de
la ventana, ésta no será totalmente detectada. En los grácos producidos para la visualización
del contexto de la intrusión la longitud de todas las secuencias intrusivas deben ser mostradas
de modo que se conozca si existe la posibilidad de detectarlas completamente o no en base al
tamaño de la ventana. Este tipo de grafo llamado Gráco de secuencias extranjeras o anómalas
[402] (FSG Foreing secuence graph).
Finalmente se deberían tratar de identicar secuencias anómalas mínimas (MFS) y los eventos
con los que están asociadas para que sean identicados como parte del contexto. Para lograrlo,
los datos pueden ser analizados mediante dos métodos:
1. Separando los datos en bloques más pequeños y evaluando cada bloque.
2. Evaluando todo evento que se encuentre en los datos.
El primer método puede llegar a romper las secuencias anómalas, por lo que la utilización del
segundo método es más acertada.
La siguientes imágenes muestran un ejemplo [402] de visualización de un FSG. Los datos
provienen de la Universidad de Nuevo México y también han sido utilizados en [347, 374]
132
Figura 2.50: Set de datos utilizados para el FSG
Para analizar las características de cada intrusión, su set de datos, incluso siendo en el mismo
proceso es tratado como set de datos individual puesto que cada intrusión genera sus propias
características de contexto en los rastros revisados.
Figura 2.51: Ejemplo de FSG para diferentes procesos
133
Para éste gráco FSG, el número de secuencias anómalas en cada set de datos es representativo
y la mayoría de las intrusiones pueden ser detectadas aplicando un tamaño de ventana adecuado.
Otro fenómeno signicativo es que las intrusiones no generan secuencias anómalas en la primera
fase (excepto en la subgura b ). Por ejemplo en la imagen (a), tras 600 llamadas al sistema se
han generado secuencias de llamadas anómalas y esto de alguna forma es indicador de que existe
un periodo de calentamiento para las intrusiones, al menos para aquellas que son detectadas
mediante sistemas basados en anomalías.
Además en las tres instancias de sunsendmail en la subgura (g) se genera el mismo gráco
FSG. Esto quiere decir que tienen las mismas características de intrusión. Al mismo tiempo, para
las diferentes instancias de la misma intrusión en las subguras (a),(c),(f) o (i) sus grácos FSG
también son similares. Este fenómeno puede beneciar investigaciones en las técnicas de detección de anomalías puesto que no es necesario crear técnicas especícas para detectar diferentes
ejecuciones de una misma intrusión.
Para diferentes intrusiones en un proceso, los grácos FSG son diferentes; para el proceso
sendmail desde CERT, el gráco FSG de la intrusión en la subgura (c) es diferente del gráco
FSG para la intrusión sm565a o sm5x en la subgura (d); el gráco FSG de las intrusiones en el
mismo proceso sendmail (e), (f) y sunsendmailcp en la subgura (g) también son diferentes
entre si. Este hecho prueba que no existen estrategias generales para detectar todas las intrusiones
en un proceso, y que las estrategias de técnicas especícas de detección son necesarias para
detectarlas.
Identicando el contexto de las intrusiones: MFSs
Las secuencias anómalas mínimas en los rastros auditados son una de las características
producidas por una intrusión, lo cual es utilizado por detectores de anomalías para detectar la
intrusión. Como se ha mencionado antes, los MFS son el contexto de las alarmas. Basado en
la identicación del contexto de la intrusión en los set de datos, sus estadísticas numéricas son
resumidas en las siguientes tablas:
134
Figura 2.52: Número de Secuencias Anómalas Mínimas (MFS) no duplicadas en todos los set de
datos intrusivos
Figura 2.53: Secuencias Anómalas Mínimas (MFS) compartidas por la misma intrusión en el
mismo proceso
Del número total de secuencias anómalas mínimas en cada set de datos intrusivo, se puede
inferir que:
1. Que con un tamaño de ventana igual a 2, es suciente para detectar la mayoría de las
intrusiones a excepción de la instancia decode-280.
2. Que del gráco Ejemplo de FSG para diferentes procesos mostrado anteriormente y de
las estadísticas de la estancia de la intrusión decode-280, se observa que la longitud
mínima de la MFS es 6. Desde su índice posicional, se puede fácilmente encontrar que
135
éste corresponde a la secuencia 2-95-6-6-95-5. El siguiente listado muestra todas las MFS
acaecidas en las dos instancias decodicadas y las correspondientes llamadas al sistema:
decode-280 / proceso 283: 2-95-6-6-95-5 ; decode-314 / proceso 317: 112-6, 6-19, 2-95-1,
2-95-6-6-95-5.
3. Que las diferentes ejecuciones de una intrusión comparte la mayoría de las secuencias
anómalas mínimas (tabla inferior). Especialmente, las diferentes ejecuciones de sunsendmailcp tienen el mismo set de secuencias anómalas mínimas. Esto es útil para las investigaciones en técnicas de detección de anomalías puesto que la diversidad en diferentes
ejecuciones de la misma intrusión, es limitada por lo que no es necesario desarrollar un
diseño especíco para cada una de ellas. Al mismo tiempo, fortalece la armación de que
los grácos FSG son especícos para cada intrusión y que las diferentes ejecuciones deben
tener las mismas características (contexto de intrusión).
Por último la información de las tablas debería disuadir posibles ataques del tipo mimicry [372] y
del paradigma de ocultamiento de información [348], visto el gran número de secuencias anómalas
mínimas reportadas, en especial, para la intrusión de buer overow.
2.4.9. Modelación de llamadas al sistema mediante ventana deslizante
Este método extiende las primeras investigaciones [126] en la detección de anomalías en
llamadas al sistema para la detección de intrusiones, incorporando tamaños de ventana dinámicos.
El tamaño de la ventana es la longitud de la subsecuencia de una traza de llamadas al sistema
las cuales son utilizadas como la unidad básica para el modelado del comportamiento de una
aplicación o de un proceso. Se presentan dos métodos para la estimación óptima del tamaño
de la ventana basados ambos, en la disposición de datos para el entrenamiento [124]. El primer
método es un modelado de la entropía el cual, determina el tamaño óptimo de la ventana para
los datos. El segundo método es una función modeladora de probabilidad que tiene en cuenta el
contexto para establecer el tamaño de ventana. Un tamaño de ventana dependiente del contexto
está motivado por el hecho de que las llamadas al sistema son generadas por los procesos.
Modelo de entropía
Se puede utilizar un marco teórico de información para escoger el tamaño de ventana óptimo
para las llamadas al sistema. En este marco, se estima cual de los diferentes tamaños de ventana
realizará mejor la ordenación de los datos mediante computación. Una descripción detallada
sobre la aplicación teórica de información a la detección de anomalías es presentada en [10].
La premisa básica para la detección de intrusiones es esa ordenación intrínseca en los datos auditados que es consistente con el comportamiento normal, y distinto del comportamiento
anómalo. Se mostrará empíricamente que cuantos más datos ordenados existen mejor es el rendimiento del modelo de detección de anomalías. El proceso de construcción de un modelo de
136
detección de anomalías debería por tanto involucrar una primera medida de orden de los datos
bajo los diferentes modelos. En este caso, se está interesado en medir la ordenación bajo diferentes
tamaños de ventana. Esta ordenación puede ayudar a elegir el mejor tamaño de ventana.
Para modelar las llamadas al sistema, se usa un modelo predictivo a través del cual la probabilidad the n llamadas al sistema es estimada por las n-1 llamadas previas. La forma en que
la predicción del modelo es entrenada, es que por cada n-1 secuencia de llamadas al sistema
presentes en la traza61 , se mantienen contadores de las siguientes llamadas. La predicción para
una determinada llamada al sistema dada una secuencia de n-1 llamadas previas es, el número
de esa llamada dividido por el número total62 de llamadas. En este punto la longitud n es el
tamaño de la ventana del algoritmo que modela. Se medirá la ordenación de los datos para la
predicción del modelo bajo diferentes valores de n.
Se propone utilizar una medida teórica de los datos para medir la ordenación de los datos,
entropía condicional, para ayudarnos a elegir el valor de n. Cuantos más datos normalizados,
menor entropía.
La denición de la entropía condicional es:
Figura 2.54: Entropía condicional del modelo de ventana deslizante
donde P(x,y) es la probabilidad conjunta de x e y, y P(x|y) es la probabilidad condicional
de x dado y. En el contexto de la llamadas al sistema se deja que
al sistema e
sea el set de llamadas
sea el set de secuencias de llamadas al sistema de longitud n-1. D
será la notación para el total de secuencias en la traza, |(x,y) será el número de veces que se
origina la secuencia en D, y |D| será el total de números de secuencias en la traza. Se puede
denir entonces la probabilidad conjunta como
. La probabilidad condicionada
de P(x|y) es la predicción de éste modelo. Desde que P(x|y) = 0 para una secuencia (x,y) que no
ocurre en la traza y la entropía condicional es aditiva, se puede representar la entropía condicional
para una ventana de tamaño n como63 :
Figura 2.55: Entropía condicional para una ventana de tamaño n
61
Una traza de llamadas al sistema es una secuencia de todas las llamadas al sistema que un proceso de una
aplicación dada realiza durante su tiempo de vida (ejecución).
62
63
Para evitar probabilidades 0, al contador de cada tipo de llamada al sistema se le añade un pequeño valor.
La segunda ecuación puede ser computada de forma eciente
137
Grafo de llamadas de una aplicación
La motivación para una dependencia del contexto del tamaño de la ventana proviene del mecanismo subyacente de cómo un proceso se ejecuta. Las llamadas al sistema en la traza dependen
de la trayectoria en la ejecución del proceso. Asimismo, la trayectoria de un proceso depende de
muchos factores como entradas recibidas o el estado del sistema donde se está ejecutando. Estos
factores determinan que trayectoria de ejecución seguirá el proceso en cada desviación posible.
Se podrían modelar todos los set de las posibles trayectorias de la aplicación utilizando grafos
de llamadas64 . Los grafos de llamadas modelan la estructura de la aplicación y dene las posibles
trayectorias de la ejecución. Cada nodo representa una posible bifurcación del programa, y las
aristas están etiquetados con las llamadas al sistema que se dan entre los nodos. Existe un nodo
de comienzo denido para el grafo y al menos un nodo nal. Es posible observar la trayectoria
de ejecución de un proceso a través de el grafo de llamadas del sistema asociado a éste y por lo
tanto una traza de llamadas al sistema sería simplemente las llamadas al sistema a lo largo de
la trayectoria de ejecución del proceso.
Se debe tener en cuenta que a pesar de que estos grafos existan para todos los programas,
obtenerlos es muy costoso debido a que variarán por el código fuente, por el compilador y por
el sistema operativo empleados. Debido a ésto, es prácticamente inviable asumir que se pueden
recrear los grafos a partir de las llamadas al sistema observadas. Aún no pudiendo determinar
el grafo especíco de llamadas, se puede asumir que éste existe y utilizar ésto para motivar un
tamaño de ventana dependiente del contexto.
En la aplicación del grafo de llamadas al sistema a la detección de intrusiones, existe un set
de trayectorias de ejecución que corresponden a exploits65 . El objetivo del método de modelado
de llamadas al sistema es el ser capaz de determinar si una secuencia de llamadas al sistema
corresponden a una trayectoria de ejecución normal, o si bien pertenece a la trayectoria de
ejecución de un exploit. Hay que tener en cuenta la longitud de la secuencia ha sido ajustada en el
contexto del grafo de llamadas y que con mayor probabilidad una secuencia larga puede identicar
unívocamente una sección del grafo. Sin embargo, es usualmente demasiado larga para ajustarse
a una sola arista por lo que debe abarcar más ramas. Para que estas secuencias sean observadas
varias veces, los estados de los diferentes procesos donde tienen lugar las secuencias más largas
deberán forzar la trayectoria de ejecución para que coincida con estas ramas. Desgraciadamente
ésto puede generar ruido en el modelo.
Por otro lado, las secuencias más cortas abarcan menos ramas, sin embargo, pueden tener
lugar en múltiples puntos del grafo de llamadas resultando complicado determinar unívocamente
dónde surge la secuencia y, por tanto, si ésta pertenece a un trazado normal o a el trazado de
un exploit.
Idealmente, para una secuencia dada se preere escoger aquella que sea la más corta y que
64
65
Es un gráco en el cual cada ruta dene una posible trayectoria de ejecución para un proceso o una aplicación.
Es el nombre con el que se identica un programa informático malicioso, o parte del programa, que trata de
forzar alguna deciencia o vulnerabilidad de otro programa.[2]
138
identique unívocamente la rama del grafo donde se genere. Debido a que los nodos de las ramas
ocurren en lugares diferentes, la longitud óptima de una secuencia depende especícamente de
las llamadas al sistema que ésta contiene. Por lo tanto, la longitud óptima depende del contexto.
La siguiente gura muestra un ejemplo de grafo de llamadas al sistema:
Figura 2.56: Ejemplo de grafo de llamadas al sistema
Sparse Markov Transducers (SMT)
Los SMT[125] son utilizados para modelar trazas de llamadas al sistema estimando una
probabilidad predictiva dependiente del contexto motivada por el marco del grafo de llamadas.
Esta es la probabilidad de predecir la siguiente secuencia de llamadas al sistema dada la secuencia
previa. Una vez que se ha entrenado al modelo desde datos basados en la normalidad de un
proceso, se dispone de una distribución de probabilidad predictiva sobre dicho proceso. En la
fase de evaluación de secuencias de llamadas al sistema para determinar si entran dentro del
rango de la normalidad o si bien pertenecen a una traza generada por la ejecución de un exploit,
se computa cada la probabilidad predictiva para cada secuencia. Si la probabilidad obtenida
está por debajo del umbral establecido entonces la probabilidad de que la secuencia haya sido
originada por el proceso en funcionamiento normal es muy baja y la traza será evaluada como
exploit (anómala). El establecimiento del umbral dene la diferencia entre falsos positivos y el
ratio de detección del sistema
139
Detección basada en grafos N-gramas de llamadas al Sistema
Este tipo de sistemas basados en cadenas de Markov con N-gramas[246], se engloban en el
área denominada como computación inmunológica. para ello basándose en el documento de
Forrest [134] han introducido la idea de los n-gramas para caracterizar el modelo. Para poder
establecer el valor de la N se deben basar los cálculos en la granularidad de las llamadas al kernel,
que puede variar de un sistema operativo a otros.
La caracterización del comportamiento de un programa al igual de lo propuesto por Forrest
se basa en la recogida de segmentos deslizantes de longitud N. Los autores indican que un valor
de N grande implica un coste computacional alto y así mismo, un valor bajo será inválido para
la caracterización del sistema.
Otra de las partes importantes del estudio es la determinación del momento en el que se
puede dar el aprendizaje por nalizado, dado que un aprendizaje incompleto puede llevar a
estimar una tasa de falsos positivos altos. Para poder estimar de forma correcta, durante el
principio del aprendizaje la base de datos crece rápidamente, sin embargo cuando la tasa de
incremento desciende y se hace muy pequeña, se puede decir que la base de datos ha convergido.
En este momento se podrá concluir con que la base de datos es completa y se puede dar por
nalizado el aprendizaje.
Para poder construir la base de datos con cadenas de texto de múltiples longitudes se puede
tener en cuenta las siguientes consideraciones:
1. Se construye el árbol de sujos para los N-gramas de los datos de aprendizaje para algún
valor que sea sucientemente grande de N. N será el límite superior en la longitud de
cadenas multilongitudinales. Una máquina de estados nita (FSM) mediante el algoritmo
two-nger se puede construir de forma inmediata a partir de ese sujo.
2. Se puede compactar el árbol de sujos en un grafo dirigido acíclico mediante la fusión de
subárboles equivalentes.
3. Incluso se pueden llegar a anexar dos subárboles si son muy parecidos introduciendo una
pequeña variación en la forma de compactar.
En general un árbol de sujos para una determinada cadena de caracteres contiene todos los
posibles sujos de la misma, por lo que un árbol de sujos de longitud m tiene m sujos diferentes.
El árbol de sujos para un conjunto de cadenas contiene cada sujo de cada una de ellas. Así
mismo el árbol de sujos para un conjunto de N-gramas puede construirse realizando primero el
árbol de las cadenas de entrenamiento y después entroncando cada rama con la profundidad N
deseada.
140
Figure 2.57: Un árbol de sujos para el ejemplo de la cadena A B C C A B B C C A A B C
Cada nodo en profundidad k < N se denomina k-grama, los nodos hijos de profundidad N se
llaman N-gramas y el nodo raíz se rellena con una cadena vacía. Cada enlace se etiqueta con un
símbolo. Estos enlaces de sujos conectan cada nodo a su sujo apropiado más largo. Los sujos
más largos proporcionan una forma de ir de un N-grama (un nodo hijo) al siguiente N-grama:
Figure 2.58: Árbol de sujos con punteros de sujos incluidos
A veces puede ser necesario incluso incluir un nodo denominado Unknown_symbol (nodo
141
desconocido) para poder contemplar los sucesos que se salgan fuera de lo normal en el modelo
representado por el árbol.
El algoritmo denido como detección de two-nger es como leer la cadena ABCCABBCCABABC con dos dedos de la mano, dejas el dedo de la izquierda jo al principio de la cadena
mientras desplazas el derecho. El desplazar un caracter el dedo derecho es como descender un
nivel en el árbol. Como se requiere que los dedos estén separados como mucho por N letras,
cuando se alcanza este momento se desplaza una posición el dedo de la izquierda, luego si en
la cadena para una longitud de 4 el máximo era ABCC, ahora se tendrá BCC para continuar y posteriormente BCCA. Una anomalía en la cadena de llamadas al sistema requiere un
desplazamiento del dedo izquierdo.
Con esta representación del modelo de cadenas de llamadas al sistema se puede realizar el
mismo desarrollo efectuado por Forrest [134]para el análisis de las trazas del sistema y detección
de anomalías sobre las mismas.
Figure 2.59: Árbol nal resultante de la compresión de la gura anterior
Detección mediante el uso de Autómatas en Línea
Una nueva forma de abstracción en el comportamiento de un programa es la denominada
Inlined Automaton Model (IAM)[293]. Una vez se dene el modelo de comportamiento de
un determinado programa (accediendo al código fuente) se obtiene un grafo como el siguiente
ejemplo:
142
Figure 2.60: Ejemplo de código y representación de representación NFA
Si en base a lo anterior se materializa la forma en la que se ejecuta, como es el caso que se
esta planteando:
Figure 2.61: Ejemplos de implementación de IAM
La monitorización de los programas se basa en las llamadas a las librerías de funciones, con
lo que se tienen que desarrollar un sistema de interposición que se encargue de comparar las
llamadas con el modelo que se tiene. Los mayores problemas que se pueden plantear en este
tipo de situaciones son derivados de la recursividad. El hecho de que el código fuente de un
programa para diferentes casuísticas vuelva sobre sí mismo, deja un campo abierto para que se
tomen por buenas numerosos cambios en el mismo que darían un resultado de comportamiento
normal, teniendo un ataque en ejecución.
143
Figure 2.62: Ejemplo de recursividad y autómata generado.
Figure 2.63: Ejemplo de recursividad indirecta y autómata generado.
La granularidad es importante y un problema a considerar en este tipo de sistemas de detección. Idealmente un IDS debería monitorizar todas y cada una de las sentencias ejecutadas
por el programa en estudio y de esa forma, validar cada instrucción de la máquina. Esto por lo
general no es posible, lo que lleva a afrontar el problema desde diferentes puntos de granularidad:
cuanto más gruesa la aproximación más sencillo será generar un ataque mimicry. Por ejemplo,
restringir exclusivamente los eventos observables a llamadas al sistema, signica que las llamadas
a las librerías no son incluidas en el modelo. Numerosos ataques de buer overow y format
string han acaecido contra las propias librerías instaladas en el sistema operativo.
Detección mediante el uso de Autómatas en llamadas a la pila
Hay otro trabajo[233], que se basa a su vez en autómatas, que incluye en los mismos la
información de la pilla de llamadas. Este modelo se publicita como más potente sobre los que se
basan exclusivamente en secuencias de syscalls, detectando ataques adicionales que los anteriores
no detectan. Este método se basa en el descrito por Feng et al. [131], pero realizando su función
de forma más general. Aun basándose en autómatas de apilamiento de llamadas (HPDA), en vez
de hacer uso de una pila extra como en el modelo de PDA de Wagner and Dean [371], este motor
de análisis se basa exclusivamente en la pila del sistema operativo correspondiente. Cuando se
144
invoca a una syscall, el sistema de detección de intrusiones se activa y comprueba si se puede
pasar del estado en que se encuentra al siguiente. El modelo HPDA, parecido al PDA es una
5-tupla: (S, Σ, T, s, A) donde S es un conjunto nito de estados y Sigma es un conjunto nito
de símbolos denido como Σ = (Y xAddr) ∪ siendo Y = {Entry, Exit, Syscall}y Addr es el
conjunto de posibles direcciones denidas por el programa ejecutable. Las entradas de este tipo
de modelos son de los siguientes tipos:
Entrada. Es un punto de entrada para las llamadas del sistema. La dirección asociada es
la dirección de retorno de esta función.
Salida. Es un punto de salida de una función de llamada del sistema. La dirección asociada
es también la dirección de retorno de esta función.
Syscall es la invocación de una llamada al sistema, donde la dirección asociada es la
dirección de retorno de esta llamada.
es el string vacío.
T es el conjunto de funciones de transición (SxΣ → S)
s es el estado inicial (s ∈ S)
A es el conjunto de estados aceptados (A ⊆ S)
Figure 2.64: Ejemplo de código y modelo HPDA
2.4.10. Modelado de trayectorias de syscalls mediante en análisis del código
fuente
Uno de los inconvenientes a la hora de trabajar con sistemas de detección basados en anomalías del comportamiento normal de las aplicaciones, es que no se dispone de todas las muestras
145
posibles. Ésto tiene como consecuencia que un número, (normalmente muy bajo si el entrenamiento ha sido adecuado), de trayectorias de ejecución no es representado en el modelo creado
y por lo tanto, la posibilidad de generación de falsos positivos66 existe desde un principio. La
razón por la que un entrenamiento puede no se correcto, radica en la dicultad técnica de obtener
todas las trayectorias posibles de una aplicación ya que su comportamiento se captura durante su ejecución. Además en los sistemas basados en anomalías se jan umbrales de normalidad
debido a que pueden existir comportamientos normales que pueden ser tan inusuales como un
comportamiento intrusivo. Mediante esta medida se evita pasar comportamientos intrusivos por
alto, pero en cambio se desligitimiza por segunda vez funcionamientos poco probables aunque
correctos de la aplicación.
Wargner y Dean [371] introdujeron por primera vez la idea de extraer del código fuente de
las aplicaciones un modelo de las trayectorias de ejecución. En ejecución cualquier llamada al
sistema que se desvía del modelo determinado estáticamente es considerada como una intrusión
y por lo tanto debe ser prohibida. Un gráco de llamadas derivado de un gráco de control de
ujo (CFG) es un autómata nito no determinístico (NFA) debido como construye el control en
forma de if − then − else67 y funciones call/return68 . El grado de indeterminismo en un CFG
determina el número de trayectorias imposibles [371] y de esta manera latitud disponible para
los ataques de tipo mimicry [372], los cuales son capaces de evadir los sistemas que inspeccionan
patrones de llamadas al sistema generando los patrones de llamadas que la aplicación secuestrada
debería generar hasta que localizan el tipo de llamada al sistema que necesitan. Wagner [371]
y Gin [194] trataron de utilizar un modelo autómata de apilación inversa (PDA push-down
automaton) para tratar de mitigar el problema de trayectorias imposibles. Aunque el modelo de
PDA es más preciso que el de NFA, incurre en una costosa comprobación en tiempo de ejecución
[371, 194]. Sin embargo el desafío en la prevención de intrusiones basada en llamadas al sistema
es reducir la vulnerabilidad a ataques mimicry al tiempo que se minimiza la sobrecarga en tiempo
de ejecución.
Construcción del modelo de llamadas al sistema
Recientes sistemas de detección[371, 131, 319, 194, 374, 223, 309] denen modelos de comportamientos normal utilizando la actividad realizada en tiempo de ejecución. Los primeros trabajos
como [319, 309] utilizan perles para construir modelos de comportamiento normal. Sin embargo, generar los perles requiere tiempo y puede producir modelos incompletos. La manera más
idónea de construir el modelo es aplicar un análisis estático para extraer patrones de llamadas
66
Un falso positivo se da en el momento que el sistema de detección de anomalías detecta una trayectoria de
ejecución, (traza de llamadas al sistema), y genera una alerta siendo dicha trayectoria no intrusiva, (se encuentra
dentro del comportamiento normal de la aplicación).
67
Sentencias condicionales que en base al resultado de la evaluación de una condición booleana (positivo o
negativo) ejecutan unas acciones u otras.
68
Instrucciones de llamada y retorno a una función. En el retorno se da el control a la siguiente instrucción
desde donde fue hecha la llamada.
146
al sistema de la aplicación.
Figura 2.65: Ejemplo de un programa en C asociado a un modelo de grafo de llamadas (NFA) y
un modelo NDPDA.
La manera más sencilla de extraer un modelo de llamadas es partiendo del grafo de llamadas
propuesto por Wagner y Dean [371], quienes directamente deducen el grafo de llamadas del grafo
de control de ujo (CFG) abstrayendo todo a excepción de las funciones y los nodos de llamadas
al sistema como se muestra en la subgura (B). El CFG resultante es un autómata de estados
no determinista de NFA debido a que las construcciones tales como if − then − else, los bucles
y las funciones son llamadas desde múltiples sitios.
Una limitación en el modelo de grafo de llamadas es el problema de rutas imposibles como es
indicado por la linea intermitente en la subgura (B), la cual surge porque la función f es llamada
desde dos lugares, V y W . El grafo permite una trayectoria imposible {v− > Entrada(f )− >
Salida(f )− > W 0 }, lo cual no es posible. La consideración de este tipo de rutas como posibles tiene como consecuencia que exista una posibilidad para un ataque de tipo mimicry [372].
Por ejemplo, si asumimos que ocurre un ataque por desbordamiento del buer en la función f
en la gura (A), cuando f retorne la ejecución sería transferida al código intrusivo inyectado
mediante el desbordamiento. Al tomar el control, el código intrusivo generaría la secuencia de
llamadas {close(), exec(”/bin/sh”)}, logrando llevar a cabo el ataque pues la secuencia generada
se corresponde con una de las posibles en el grafo (B). Esta limitación de los modelos de grafos
de llamadas es debido al hecho que sólo verica el orden entre llamadas al sistema denidas como
la aplicación, pero no su emplazamiento.
Para eliminar las trayectorias imposibles, Wagner simula las operaciones de pila utilizando un
autómata no determinista de apilación inversa (NDPDA) [371] como se representa en la subgura
(C). La idea clave del modelo NDPDA reside en que cuando se encuentra una llamada desde
V , el estado de retorno correspondiente V 0 es introducido en una pila simulada antes de que el
147
control sea transferido, y es retirado cuando la llamada devuelve el control. Este funcionamiento
asegura que la función siempre retornará al lugar donde ha sido llamada sin importar los lugares
desde donde ha sido llamada. Sin embargo, para cada llamada al sistema entrante, el modelo
NDPDA debe calcular un set de posibles conguraciones de la pila, basándose en las llamadas al
sistema previas. Este set de conguraciones puede crecer indenidamente, especialmente en las
llamadas recursivas. A pesar de un complicado algoritmo para reducir la complejidad del modelo
NDPDA, el peor de los casos en tiempo de ejecución sigue siendo cúbico en la longitud de las
llamadas al sistema. Esto conlleva una alta e inaceptable sobrecarga en tiempo de ejecución para
aquellas aplicaciones que son de tamaño grande.
Los modelos PAID [223] y Dyck [195], utilizan inserciones de llamadas al sistema nulas para
transformar aplicaciones y eliminar el indeterminismo. Sin embargo el modelo Dyck puede producir sobrecargas impredecibles debido a una inserción desmesurada de llamadas al sistema nulas.
Más aun, el modelo Dyck es indeterminista debido a que no inserta llamadas al sistema nulas
en funciones recursivas. El modelo PAID[224], utiliza grafos inline para eliminar el problema de
trayectorias imposibles. Aunque PAID es un modelo determinista el modelo que genera es dos o
tres veces mayor y requiere extensas modicaciones:
Figura 2.66: Proceso de llamada a getuid utilizando el modelo VSL.
Cuando getuid es llamado, el VSL previo es {r1 , r2 , r3 }, el VSL actual es {r1 , r2 , r4 }, y el
prejo de ambos VSL es {r1 , r2 }. Por tanto, tras consumir r3 , el algoritmo pasa el estado actual
de S_setuid a C30 , y después a C4 tras consumir r4 . Finalmente, introduce r4 en la pila y mueve
el estado actual a Entry(f 4) [224].
Feng propuso un modelo estático (VPS) [2], el cual explota el estado de la pila de usuarios para identicar cada lugar de llamada al sistema. Para cada llamada al sistema entrante
extrae todas las direcciones que se encuentren actualmente en la pila para formar una lista
de pila virtual (VSL) y alimentar con ella a un autómata determinista de apilación inversa
o DPDA como se muestra en la gura anterior. Los símbolos de r1 a r4 en el DPDA representan la dirección de la llamada. Asumiendo que el VSL para una llamada al sistema pre-
148
via Sp es {a1 , a2 , ..., a1 , b1, b2, ..., bm }, y el VSL para las llamadas al sistema actuales Sc es
{a1 , a2 , ..., a1 , c1 , c2 , ..., cn }. La secuencia {a1 , a2 , ..., a1 }es un prejo común para los dos VSL.
Sus algoritmos transversales utilizan {bm , bm−1 , ..., b1 } para generar los símbolos de entrada que
simulan operaciones de retorno de funciones, y {c1 , c2 , ..., cn } para generar los símbolos de entrada que simulan operaciones de llamada a funciones. Tras la llamada a getuid en la gura superior
el VSL para getuid es {r1 , r2 }. Asumiendo que el estado actual es S_setuid, el algoritmo utiliza
{r3 } y {r4 } para generar las siguientes operaciones transversales:
1. No consumir nada y mover al siguiente estado Exit(f 3).
2. Sacar un elemento de la pila. Si el elemento en la parte alta de la pila es r3 , mover el estado
a C30 .
3. Consumir r4 y mover el estado a C4.
4. Empujar r4 en la pila y mover hasta el estado Entry(f 4).
5. Mover hasta el estado getuid cuyo contador coincide el contador de programa de la llamada
actual getuid.
Si todas estas operaciones son aceptadas por el modelo DPDA entonces la llamada al sistema
getuid actual es legítima.
Figura 2.67: Proceso de llamada getuid utilizando el modelo VPStatic.
Si getuid no es llamada, el modelo VPStatic no puede aceptar la llamada al sistema setuid
debiado a que el modelo no puede alcanzar el estado S − setuid desde el estado Entry(main). La
función f 1en la subgura de la derecha (B) es llamada dentro de un bucle. El algoritmo VPStatic
actual no puede aceptar la secuencia de llamadas {setuid, getuid, setuid} desde que el algoritmo
sólo retorna al prejo del actual VSL previo.
El modelo VPStatic no puede manejar el indeterminismo debido a las sentencias if − then −
else. Por ejemplo en la subgura superior (A), la llamada al sistema getuid en f 2 no es siempre
149
ejecutada debido a que se realiza dentro de una sentencia if − then − else. Si getuid no es ejecutado, el modelo VPStatic genera un falso positivo cuando setuid es ejecutado. En el momento
que setuid es llamado el VSL previo es {} y el VSL actual es {r1 }. Según el algoritmo, las únicas
operaciones que pueden generar para atravesar el autómata son:
1. Consumir r1 , mover al estado C1
2. Introducir r1 en la pila, mover hasta el estado Entry(f 1).
3. Mover hasta el estado setuid cuyo contador coincide el contador de programa de la llamada
actual setuid.
Obviamente, tras la segunda operación, la tercera no puede ser aceptada por el autómata desde
que C2 es el único estado que se puede alcanzar desde el estado Entry(f 1).
VPStatic también falla al manejar el indeterminismo cuando se efectúan llamadas a funciones
desde bucles, como se muestra en la subgura (B) superior. Además aunque utiliza el estado de
la pila del usuario, no puede prevenir todos los ataques mimicry [224]. Por ejemplo un ataque de
mimicry podría llenar la pila de tal manera que llegaría a engañarle demandando una llamada al
sistema mediante una instrucción trampa, y recuperando el control y repitiendo el mismo proceso.
Esto es debido a que el modelo no tiene en cuenta la dirección de retorno de la instrucción trampa
y el atacante puede obtener el control tras la llamada a la instrucción trampa.
El modelo PAID utiliza una combinación de todas las direcciones de retorno en la pila del
usuario y la dirección de retorno de la llamada trampa que se encuentra en la pila del núcleo como
coordenada unívoca para cada instancia de llamada al sistema en la aplicación. Además utiliza un
algoritmo nuevo de grafo transversal que soporta backtracking69 para tratar con indeterminismos
creados por sentencias condicionales del tipo if − then − else y es tan eciente como el algoritmo
transversal DFA [224]. Finalmente para reducir más aún la vulnerabilidad debido al tamaño
de ventana por parte de ataque mimicry, PAID realiza un extenso y restringido análisis de los
argumentos de las llamadas al sistema, el cual, puede crear restricciones totales o parciales en los
argumentos de llamadas al sistema basado en cheros de conguración. Ésta habilidad, estrecha
los posibles valores de los argumentos en muchas de las llamadas al sistema susceptibles de ser
atacadas, tales como la open().
2.4.11. Solución de instrumentación mediante criptografía
El avance de las llamadas al sistema autenticadas [252] se basa en el hecho de introducir
dentro de misma una serie de parámetros extra: argumentos para control de políticas, argumentos
criptográcos que garanticen la integridad de la política y de los argumentos. Para poder realizar
este tipo de funciones y proteger los sistemas:
69
Es un método de resolución automática de problemas mediante una búsqueda sistemática de posibles solu-
ciones. Las soluciones no válidas se eliminan y no se vuelven a comprobar.
150
1. Transformar los programas para cambiar las llamadas al sistema con llamadas al sistema
autenticadas.
2. Revisión en tiempo real por parte del kernel para asegurar que cada llamada al sistema
esta dentro de la política que le corresponde.
Para empezar, instalación en el sistema, se analiza el binario de un programa por un instalador de
conanza, quien primero generará la política que comprenda el comportamiento de cada llamada
al sistema usando un análisis estático y reescribe el binario de forma que cada syscall contenga
tanto la política como la validación criptográca que necesite.
Figure 2.68: Instalación del programa
El segundo paso, comprobación de la syscall en tiempo real, se realiza por medio de una
intercepción en el kernel, que verica el contenido criptográco utilizado, con lo que si todo es
correcto se permite la ejecución de la llamada y si no se obliga al cierre del programa solicitante.
Figure 2.69: Comprobación de las syscalls
2.4.12. Solución mediante virtualización para terminales móviles
En las especicaciones de seguridad [11] [12] se explican los retos tecnológicos en esta materia para la siguiente generación de dispositivos móviles: medición de la integridad, control
criptográco de acceso para los procesos, autenticación de usuarios, etc. El objetivo es conseguir aumentar la seguridad existente en los dispositivos móviles. El documento [175] se centra
151
en la creación de instancias de sistemas operativos, donde los usuarios son capaces de ejecutar
aplicaciones nativas descargadas de redes libres.
Un dominio (una instancia de Sistema Operativo) es denido como un entorno de ejecución
aislado preparado para un grupo de aplicaciones. Esta separación entre dominios hace posible
la prevención de accesos ilegales al espacio de direcciones de otros dominios y limita la máxima
cantidad de recursos que pueden usar las aplicaciones de un dominio en concreto. Estos dominios
incluso pueden funcionar con diferentes sistemas operativos para terminales móviles: SymbianOS, µ − IT RON , Linux, etc.
La propuesta no se centra en el uso intensivo de recursos hardware como es el caso de los
dominios basados en hardware. La idea es la creación de dominios software, para el que un
software (VMM, Virtual Machine Monitor) se encarga de gestionar los diferentes SO, así como
de compaginar el uso de recursos hardware. Si no que como ni la solución pura de virtualización
por software, ni la solución de implementar todo en hardware son del todo favorables se propone
una mezcla entre ambas aproximaciones. VIRTUS es una nueva propuesta de arquitectura de
un nuevo procesador con arquitectura de virtualización, creando un dominio hardware para
aplicaciones preinstaladas en un procesador y dominios software para aplicaciones descargadas
en otros procesadores para poder satisfacer los siguientes objetivos de diseño:
Seguridad más fuerte. Las aplicaciones preinstaladas en la siguiente generación de terminales móviles deben ser protegidas de las aplicaciones descargadas.
Virtualización exible del procesador. La siguiente generación de terminales móviles requerirá un número alto de dominios para instalar las aplicaciones descargadas. Se requiere
proporcionar en este tipo de sistemas, como en VIRTUS [175], un número ilimitado de
dominios software para los procesadores virtualizados.
Baja degradación en la funcionalidad. Es un requisito que el hecho de tener múltiples
dominios no degrade la funcionalidad del sistema en el trato con diferentes aplicaciones.
Poca interferencia en la funcionalidad. No debe existir interferencia entre las aplicaciones
preinstaladas y las aplicaciones descargadas. Una separación de aislamiento en los procesadores virtuales soluciona el problema, dado que el dominio de aplicaciones preinstaladas
se ejecuta en un procesador diferente que el que se usa para las descargadas, impidiendo la
infección del software original.
Tamaño de código pequeño. Este requerimiento es intrínseco a la capacidad de procesamiento que se puede tener en este tipo de terminales móviles.
152
Figure 2.70: Imagen de la arquitectura de los nuevos procesadores para terminales de tercera
generación
Para poder lograr estos objetivos:
1. una solución puede ser tener máquinas virtuales (VMM) asimétricas a través de las cuales
se pueda integrar el dominio hardware con los dominios software.
Figure 2.71: Comunicación VMM asimétricos
2. Se requiere una comunicación entre dominios que permita que una aplicación corriendo en
un determinado dominio pueda comunicarse de forma criptográcamente segura con otra
aplicación de otro dominio.
153
Figure 2.72: Comunicación dinámica inter-dominio
3. Así mismo debe resultar sencillo el trabajar con la virtualización para realizar desarrollos
efectivos en cuanto a esta tecnología.
Figure 2.73: ID de los registros del procesador lógico virtual
Listing 2.2: Hola esto es una prueba aquí
int
main ( i n t argc , char ∗∗ argv ) {
return
3
0;
}
2.5. Modelos de redes probabilísticas
2.5.1. Modelos de Redes Probabilísticas
Antes de comenzar a ver la denicion intuitiva de este concepto es aconsejable leer el ANEXO
RRBB.1 - Introducción de conceptos.
154
Redes Bayesianas
Denición intuitiva
Una red bayesiana, red de creencia o red de causalidad es una repre-
sentacion graca de las relaciones causa-efecto dentro del dominio de un determinado problema.
Una descripcion mas formal se puede encontrar en [187].
Denicion forma
Partiendo de un conjunto nito de nodos X̄ . Cada uno de ellos representa una variable, que
puede ser discreta o continua, aunque solo se van a manejar variables discretas por ser mas
sencillas. Esta relacion biunivoca entre nodos y variables nos premite emplear indistintamente
ambos terminos. Como se ha visto anteriormente los valores de una variable deben constituir un
conjunto exclusivo y exhaustiva.
Las redes bayesianas no necesitan suponer que los diagnosticos son exclusivos y exhaustivos, y
por tanto no es necesario tener una variable D que represente todos los posibles diagnosticos;
por ejemplo, en vez de una variable llamada D=Enfermedad, cuyos valores representasen los posibles diagnosticos correspondientes a la ebre: neumonia, amigdalitis, paludismo, etc., en la red
bayesiana tendriamos una variable Neumonia que puede tomar dos valores (neumonia-presente y
neumonia-ausente) o mas de dos valores (neumonia-ausente, neumonia-leve, neumonia-moderada
y neumonia-severa), dependiendo del grado de precision que necesitemos en el diagnostico , otra
variable Amigdalitis, Paludismo, etc. De este modo, la red bayesiana puede ofrecer dos o mas
diagnosticos a la vez (por ejemplo, amigdalitis-severa y neumonia-leve), lo cual era imposible con
el metodo probabilista clasico.
En el Anexo RRBB.2 - Denciones previas a las redes bayesianas se introducen ahora algunas
deniciones basicas sobre grafos necesarias para entender la denicion de red bayesiana.
Denicion de red bayesiana
La propiedad fundamental de la red bayesiana es la separacion direccional denida en [186, 187]
como:
Separacion direccional.
Dado un grafo dirigido aciclico conexo y una distribucion de prpobabili-
dad sobre sus variables, se dice que, hay separacion direccional si, dado un nodo X, el conjunto
de padres pa(X), separa condicionalmente este nodo de otro nodo subconjunto Ȳ en que no hay
descendientes de X. Es decir:
P (x|pa(x), ȳ) = P (x|pa(x))
155
Es habitual denir las redes bayesianas a partir de grafos dirigidos aciclicos (en ingles DAG,
de Directed Acyclic Graph). Es importante incluir la especicacion conexo por tres razones.
La primera, porque muchos de los algoritmos y propiedades de las redes bayesianas solo son
correctos para grafos conexos, por lo que es mejor incluir esta caracteristica en la denicion que
tener que añadirla como nota a pie de pagina en casos particulares. La segunda razon es que,
aun en el caso de tener un modelo con dos partes inconexas, podriamos tratarlo como dos redes
bayesianas independientes. Y la tercera, porque los modelos del mundo real con que se suele
trabajar son siempre conexos; si hubiera dos partes inconexas no se tendria uno sino dos modelos
independientes.
En base a todo lo anterior se pueden caraterizar las redes bayesianas, así:
Red bayesiana.
Grafo aciclico dirigido conexo mas una distribucion de probabilidad sobre
sus variables.
El término direccional hace referencia a la asimetria de dicha propiedad, que se maniesta
en las siguientes propiedades de las redes bayesianas:
Si A no tiene padres entoces P (x|pa(x)) = P (x|∅) = P (x) y la ecuacion {b.i.1.b.1} se
traduce en P (e|a) = P (e) para cada nodo E que no sea uno de los descendientes de A; en
otras palabras, E es a priori independiente de A. En consecuencia, dos nodos cualesquiera
D y E que no tengan antepasado comun son independientes a priori.
Si D es descendiente de A y antepasado de H, y existe ningun otro camino desde A hasta
H, entonces estos dos nodos se dice que quedan condicionalmente separados por D:
P (h|d, a) = P (h|d)
Si tanto G como H son hijos de D y no tienen ningun otro antepasado comun este ultimo
separa G y H, haciendo que sean condicionalmente independientes:
P (g|d, h) = P (g|d)
En general, la independencia a priori o condicional de dos nodos se pierde al conocer cualquiera
de sus descendientes comunes, ya que en este caso la propiedad de separacion direccional ya no
es aplicable.
Semántica de las redes bayesianas
Se han denido hasta el momento las redes bayesianas
desde un punto de vista matematico formal. La cuestión que se plantea ahora es su semantica, es
decir, ¾que interpretacion se le puede dar a una red bayesiana? ¾Como se corresponde un modelo
con el mundo real? ¾Por que se puede hablar de causas y efectos en una red bayesiana?
Esta cuestion esta ya parcialmente respondida en la presentacion intuitiva, que fue introducida
antes de la denicion formal de red bayesiana precisamente para mostrar que los conceptos
y axiomas introducidos no pareciesen arbitrarios, sino que responden a las propiedades de la
156
causalidad, segun nuestra concepcion intuitiva del mundo real. Es importante señalar que la
estructura de la red, por si misma, aporta gran cantidad de informacion cualitativa. En efecto,
un arco XY indica, ya antes de conocer el valor concreto de la probabilidad condicional, que
hay una correlacion entre ambas variables: el valor que toma X inuye sobre la probabilidad
de Y , y viceversa. Es lo que se ha dado en llamar inuencia causal directa. Tal es la relacion
que existe, por ejemplo, entre el pais de origen y el paludismo, o entre el paludismo y la ebre.
Profundizando un poco mas, se oserva que la existencia de un camino entre dos variables X e Y
, con variables intermedias Z, indica que hay una inuencia causal indirecta entre ambas.
Tal como se ha discutido en la presentacion intuitiva de las redes bayesianas, cuando el sentido
comun, basado en la experiencia, dice que la inuencia de una variable X sobre uno de sus efectos
Y1 (por ejemplo, del paludismo sobre la prueba de la gota gruesa) no depende de cuales han sido
las causas o mecanismos que han producido X, ni depende tampoco de si X a dado lugar a otros
efectos, entonces la red contendra un arco desde X hasta Y1 , y no habra ningun arco que conecte
Y1 con las demas variables. Por tanto, la ausencia de arcos es tambien una forma de expresar
informacion. El hecho de que Y1 depende solamente de su causa, X, se traduce matematicamente
diciendo que, conocido el valor de X, la probabilidad de Y1 es independiente de los valores que
toman esas otras variables, o dicho de otro modo, X separa Y1 de dichas variables. Se empieza a
ver aqui la relacion entre el concepto de padre y el de causa, entre el de hijo y el de efecto, entre
el de arco y el de inuencia causal directa, entre el de independencia en los mecanismos causales
y el de independencia probabilista.
En este punto es donde se maniesta la importancia del sentido de los arcos y su relacion con
la idea de causalidad. Volviendo al ejemplo del paludismo, el hecho de que las variables Pais-deorigen y Tipo-sanguineo no tengan ningun padre comun signica que son a priori independientes,
es decir, que el pais no inuye en el tipo sanguineo y viceversa, de modo que, si no hay mas
evidencia, no se puedeobtener ninguna informacion sobre el pais de origen a partir del tipo
sanguineo, ni viceversa. Sin embargo, el hecho de que ambas variables tengan un hijo comun
signica que, una vez conocido el valor de ese nodo, surgen correlaciones entre los padres70 . Se
puede decir, usando la terminología de [186], que el camino entre U1 y U2 permanece bloqueado
hasta que sea activado por la llegada de informacion sobre X o sobre alguno de sus descendientes.
Para el caso de los efectos de una variable ocurre precisamente lo contrario: todo medico
sabe que hay correlacion entre la ebre y el test de la gota gruesa. Sin embargo, tal como se
discute en la Dencion Intuitiva, la correlacion desaparece cuando se averigua si el paciente tiene
o no tiene paludismo. Es decir, el camino entre Y1 y Y2 está activado en principio, y se bloquea
solo al conocer el valor de X. De esta asimetria entre padres e hijos, reejo de la asimetría que
existe en el mundo real entre causas y efectos, procede el nombre de separacion direccional. Por
tanto, hay dos formas de justicar los enlaces que se introducen u omiten al construir una red.
La primera es de naturaleza teorica: se forma un modelo causal a partir de la experiencia de un
70
La correlación que aparece entre las causas se aprecia más claramente en el caso de una puerta OR
157
especialista y se trazan los arcos correspondientes al modelo; la relacion que se ha discutido entre
los mecanismos causales y las propiedades matematicas de independencia permite fundamentar
el modelo. El otro camino para justicar la red consiste en realizar una comprobacion empirica
a partir de un conjunto sucientemente amplio de casos, utilizando las herramientas estadisticas
que se emplean habitualmente para detectar correlaciones.
Hay otro punto relativo a la semantica de las redes bayesianas, que se va a mencionar solo
brevemente, pues aun esta muy discutido. Es el que se reere al debate entre los que deenden que
las redes probabilistas pueden expresar causalidad y los que sostienen que estas solo expresan
correlaciones entre variables. En realidad, no se trata de un debate limitado al campo de las
redes bayesianas, sino que la existencia de la causalidad es una cuestion que se han planteado
matematicos y losofos por lo menos desde el siglo XVII, a partir de las teor1as de Hume.
Para no entrar en esta cuestion se citaran solamente tres trabajos, los de [188] y [397] y el de
[113], que muestran como recientemente han surgido argumentos matematicos para defender la
interpretacion causal frente a la meramente correlacional.
En resumen, lo que se ha intentado mostrar en esta seccion es que la informacion cualitativa que expresa la estructura de una red bayesiana es mas importante aun que la informacion
cuantitativa, como lo demuestra el hecho de que se han construido redes cualitativas [273, 274],
capaces de razonar a partir de las propiedades de independencia de las redes bayesianas, incluso en ausencia de valores numericos. Por este motivo, [3] ha sugerido en nombre de redes de
independencia (independence networks) como el mas adecuado para las redes bayesianas.
Propagacion en poliárboles
El algoritmo para poliárboles que se presenta en esta sección,
basado en el paso de mensajes π yλ fue desarrollado por [153] a partir del que Pearl había
propuesto para árboles en [185]. Sin embargo, la principal limitación del algoritmo de Kim y
Pearl es que no permite tratar los bucles que aparecen inevitablemente al desarrollar modelos
del mundo real, por lo que en sí mismo resulta de muy poca utilidad y los constructores de
redes bayesianas. Recurren a otros que, aun perdiendo las ventajas de éste, son aplicables a
todo tipo de redes bayesianas. Sin embargo, aquí se va a estudiar con detalle por dos razones.
Primera, por su sencillez y elegancia, que permitirá comprender mejor las propiedades de las redes
bayesianas. Y segunda, porque el algoritmo de condicionamiento local [114], aplicable también
a redes múltiplemente conexas, es una extensión de éste, que se basa en los mismos conceptos y
deniciones. Para comprender mejor el desarrollo matemático que se va a realizar, puede ser útil
al lector repasar la dencion intuitiva, en que aparecen sencillos ejemplos numéricos que explican
por qué se introducen las deniciones de π y λ cómo se propaga la evidencia.
Una de las propiedades fundamentales de un poliarbol es que hay un unico camino entre cada
par de nodos. En consecuencia, la inuencia de cada hallazgo se propaga hasta un nodo X bien
a traves de los padres o a traves de los hijos de éste, por lo que para cada nodo X se pude hacer
una particion de la evidencia (o conjunto de hallazgos) en dos subconjuntos tales que:
158
e = e+
X ∪ eX
e+
X ∩ eX = ∅
Donde e+
X representa la evidencia por encima de X y eX la evidencia por debajo de X
en el sentido antes mencionado. De forma similar, la eliminacion de un enlace XY divide la red
y por lo tanto tambien la evidencia- en dos partes, una que se queda por encima del enlace
y otra que queda por debajo. Se llamaran e+
XY y eXY respectivamente. Al igual que en el caso
anterior se cumple que:
e = e+
XY ∪ eXY
e+
XY ∩ eXY = ∅
En base a la particion de evidencia podemos establecer las siguientes denciones:
π(x) ≡ P (x, e+
X)
λ(x) ≡ P (e-X |x)
πX (ui ) ≡ P (Ui , e+
Ui X )
λYi (x) ≡ P (e-XY j |x)
Figura 2.74: Esquema de la propagación en poliárboles
El sentido de estas denciones es el siguiente:
1. π(x) indica qué valor de X es mas probable según la evidencia relacionada con las causas
de X, es decir, segun la evidencia por encima de X.
2. λ(x) Indica que valor de X explica mejor los hallazgos correspondientes a los efectos de X,
es decir, la evidencia por debajo de X.
159
3. πX (u) Indica qué valor de U es mas probable según la evidencia por encima del enlace
UX.
4. λYi (x) Indica qué valor X explica mejor la evidencia por debajo del enlace XY.
Antes de concluir esta seccion es conveniente señalar que las denciones anteriores, aunque
tomadas del libro de Pearl [187] se han modicado de acuerdo con la propuesta de [278].
Un caso particular: Redes tipo Naive
Introducción
Los modelos bayesianos Naive (red naive a partir de ahora) se denominan naive (ingenuo) por
la hipótesis de la que parten. Son utilizadas extensamente en la clasicación de muestras de
todo tipo [22, 284, 245], llegando incluso a plantearse estructuras jerárquicas en su interior:
Augmented Naïve Bayes [61]. Hay numerosos estudios actuales para la aplicación y solución de
problemas más complejos mediante creación de Redes en Árbol Aumentadas (TAN), Multiredes
autónomas en las ramas, redes selectivas y variantes parecidas [135, 145, 67].
Una de las aplicaciones más usadas es la gestión de Spam en correos electrónicos mediante una
clasicación de textos, tras una temporada de aprendizaje se observan unos resultados
perfectamente válidos con una baja tasa de error71 .
Se pueden encontrar aproximaciones que indagan en la aplicación de esta algorítmica en aras
de la Seguridad en base a Anomalías [318]. Las redes activas72 pueden proporcionar una solución
real a la problemática de seguridad haciendo un uso cooperativo de los recursos para análisis por
medio de diferentes técnicas. En este caso se trataría de clasicar como normal o como anómalo
los sucesos que se ocasionan en tiempo real dentro de una red corporativa.
Siguiendo en la línea de seguridad hay otros trabajos que siguen en la línea de clasicación,
pero esta vez en base a determinados parámetros de los paquetes (datagramas / segmentos) o
incluso del contenido de los mismos (ejecutables, imágenes . . . ). Un ejemplo se puede ver en la
referencia [176].
Otras aproximaciones que hacen uso de este tipo de redes pueden ser aquellas en las que se
trata de clasicar un tipo de comportamiento en base a eventos. Estas aproximaciones tienen en
cuenta una serie de parámetros, y en base al valor que tomen los mismos, pueden decidir si el
comportamiento es anómalo o dentro del margen normal [217].
71
SpamBayes, proyecto localizado en la sede web: . Solución para el reconocimiento de spam en correo electrónico
iniciada por Paul Graham.
72
Redes caracterizadas por poder dirigir el ujo de información a través de diverso hardware programable por
sus usuarios o terceras partes.
160
Explicación en detalle
Las redes Naïve Bayes parten de la hipótesis de que cada variable Xi es condicionalmente
independiente del resto dado un cluster de varibles con el mismo padre C. Mediante esta
hipótesis la distribucion de probabilidad se puede representar ecientemente como el producto
de varias distribuciones más simples:
n
P (X1, X2, ..., Xn , C) = P (c)P (xi |C)
i=1
Una red naive es un caso especial de red bayesiana sobre las variables X1, ..., Xn y C, en la
que el padre de cada variable Xi es C y C no tiene padres. El aumento eciencia viene por el
uso de esta estructura restringida.
Para el uso más común, la clasicacion, se tiene que C representa la clase que se debe predecir
y Xi representan los atributos observables. Por ejemplo, en un ltro naive anti-spam, la C puede
represntar la clase spam y no-spam y Xi puede representar si la i-esima palabra está presente
en el mail tratado. Las distribuciones componentes se pueden aprender a partir de datos de
entrenamiento simplemente mediante el conteo de las ocurrencias de una palabra en las etiquetas
spam y no-spam. En este ejemplo, así como en muchas aplicaciones de las redes naive la
hipotesis ingenua es claramente falsa: las palabras presentes en un email depende de otras
tanto en spam como en email legitimos. Sin embargo, estos modelos tienden a realizarse bien en
la práctica y el análisis teórico ha demstrado que es óptimo [111].
Naive Bayes tambien se utiliza en el clustering, donde el objetivo es aprender la estructura
subyacente de los datos. Al contrario que en la tarea de clasicacion, C representa una variable
cluster que nunca se observa directamente. En muchos casos el numero de clusters presentes es
desconocido y se debe inferir [66].
Los modelos de clustering normalmente se aprenden mediante el algoritmo EM en un proceso
iterativo que consta de dos pasos como explica [104] y más adelante en esta memoria.
La estimacion Naive Bayes es la aplicación de los modelos naive Bayes a los problemas
generales de aprendizaje e inferencia, el caso de la inferencia se explica más adelante.
Hasta aquí se ha realizado una presentacion de lo que son las redes bayesianas como concepto, a partir de este punto se procede a describir las potentes funcionalidades de este articio
matematico.
Adicción y eliminación de nodos en caliente.
Con la ayuda de un experto en la materia, J.M. Gutierrez se plantea la siguiente evolución de
una red naive. Si se tiene de partida una red como la siguiente:
161
Figura 2.75: Ejemplo de red naive
La probabilidad para la clasicación en función de los dos nodos que aparecen en la gura es
la que sigue:
P(Padre) = P(Padre_a_priori) · P(Hijo1 / Padre) · P(Hijo2 / Padre)
Caso de que se quiera quitar un nodo dejando la red Naive con sólo un hijo, para calcular el
estado del padre en todo momento se tendría en cuenta únicamente la parte de la red de la que
se disponen datos:
Figura 2.76: Ejemplo de sustración de nodos en red Naive
P(Padre) = P(Padre_a_priori)· P(Hijo1 / Padre)
Igualmente, caso de que se quiera añadir un hijo más para el cómputo correspondiente del
estado del padre:
162
Figura 2.77: Ejemplo de adición de un nodo a una red Naive
P(Padre)=P(Padre_a_priori)·P(Hijo1/Padre)·P(Hijo2/Padre)·P(Hijo3/Padre)
Aprendizaje
Introducción al aprendizaje en redes bayesianas
Existen dos tipos de aprendizaje:
Estructural, que se reere al aprendizaje de la estructura (dependencia) gráca del grafo,
es decir, determinar las aristas a incluir en el grafo.
Paramétrico, que se reere al aprendizaje de la estructura parametrica, es decir, probabilidades. En el leguaje de los estadisticos, el aprendizaje parametrico se denomina estimacacion.
En este punto se van a explicar en detalle ambos tipos de aprendizaje asi como los algoritmos
usados en ESIDE-Depian para implementarlos.
Por otro lado, según [57] todo método de aprendizaje consta de 2 elementos:
Una medida de calidad, que se utiliza para decidir cual es mejor de un conjunto de redes
bayesianas candidatas. Esto es una media global de la calidad, ya que mide la calidad de
la red bayesiana en su totalidad, es decur ambas, la calidad de la estructura graca y la
calidad de los parametros estimados.
163
Un algoritmo de busqueda, que se usa para seleccionar un pequeño subconjunto de redes
bayesianas de alta calidad, del que se selecciona el mejor. Hay que darse cuenta que de
todas las posibles redes, incluso para un pequeño numero de variables , es extremadamente
grande y es virtualmente imposible determinar la calidad de todas las redes posibles.
Tambien en [57] se establecen las siguientes etapas para el aprendizaje estructural y
paramétrico:
Elegir la medida de calidad y el algorimo de busqueda.
Utilizar un algoritmo de busqueda para seleccionar un subconjunto de redes bayesianas
con calidades altas. Esto requiere estimar los parametros de las redes seleccionadas usando
metodos de estimacion y evaluando las calidades de todas las redes bayesianas en el conjunto
elegido.
Por ultimo, seleccionar la estructura de la red con mayor calidad del conjunto anterior.
2.5.2. Aprendizaje Estructural
El consiste en la obtencion de la estructura de la red bayesiana, es decir, los nodos y los enlaces
entre los nodos o de una forma más formal, consiste en obtener las relaciones de dependencia e
independencia de las variables involucradas [130].
Existen dos aproximaciones basicas al aprendizaje estructural:
Test de indepencia
Puntuación y procedimientos de búsqueda.
Existen multitud de algoritmos para este tipo de aprendizaje de los cuales se han utilizado los
siguientes:
Algoritmo PC
Este es un algoritmo basado en test de independencia desarrollado por [326] y que pertenece a
la clase de algoritmos basados en restricciones. La idea basica del algoritmo es desarrollar una
serie de declaraciones condicionales de dependencia e independencia mediante tests estadisticos.
El algoritmo realiza los siguientes pasos:
En primer lugar realiza una serie de test de independecia para todos los para de variables,
expecto para las que se haya denido algun tipo de restriccion estructural.
164
Posteriormente añade un enlace entre cada par de variables para las que no encuentra independecia condicional. El grafo resultante constituye el esqueleto de la estrucutura aprendida.
Seguidamente identica los colideres, asegurandose que no se dan ciclos dirigidos. (un
collider es un par de enlaces dirigidos tal que se encuentran en el mismo nodo).
Despues se hacen cumplir las direcciones para aquellos enlaces cuya dirección se puede
derivar de la independencia condicional encontrada y los colliders identicados.
Finalmente, los enlaces no dirigidos restantes se dirigen de forma aleatoria, aseguranado
que no se producen ciclos.
Hay que darse cuenta de una cosa muy importnte; y es que, en general, este algoritmo no es
capaz de derivar la direccion de todos los enlaces a partir de los datos y por lo tanto algunos
enlaces los dirige de forma aleatoria.
Mejora del Algoritmo PC, el algritmo NPC
NPC signica condicion de ruta necesaria y es un criterio desarrollado por investigadore s
de Siemens en Munich para resolver algunos problemas de los algoritmos basados en restricciones como el algoritmo PC. Basicamente PC y NPC son iguales en su funcionamiento (ambos
construyen el esqueleto de la red en bases a test de independencia).
NPC trata de reparar las deciencias del algoritmo PC y que ocurren espcialmente cuando
se usan conjuntos de datos incompletos. La solucion propuesta por el algorimo NPC se bsa en
la inclusion de un criterio conocido como condicion de ruta necesaria73 . Este criterio es la base
para introducir la nocion de regiones ambiguas74 que proporcionan un lenguaje para la seleccion
entre conjuntos de enlaces interdependientes e inciertos.
En los algoritmos basados en restricciones, el esquleto del gráfo se construye mediante la no
inclusion de un enlace en la gráfo siempre que los nodos correspondientes sean condicionalmente
independientes. Puede, sin embargo, haber incosistencias entre el conjunto de independicia condiconal y las condiciones de dependencia originadas por el uso de un conjunto de datos limitado.
Es decir no todas las condiciones se pueden representar a la vez.
El número de inconsistencias en el conjunto de condiciones reejan el gradod e incertidumbre
del modelo estructural. Por lo que, el numero de incertezas es un medida suciente como para
saber si el aprendizaje se realizo consuencientes datos o no. Las condiciones incosnsitentes
producen multples soluciones a la hora de inducir un grafo aciclico dirigido.
73
Informalmente, esta condicion dice que el orden de dos variables X e Y debe ser condicionamente independiente
de un conjunto S; es decir, debe existir una ruta entre X y cada Z perteneciente a S (que no atraviese Y) y entre
cada Y y cada Z de S (que no atraviese X). Si no, la inclusion de Z en S es inexplicable. Por lo que, para que la
declaracion de independencia sea valida, se requiere un numero de enlaces en el grafo.
74
Cuando la ausencia de un enlace, a, depende de la presencia de otro enlace, b, y viceversa, se deene a y b
para ser interdependientes. Tanto a como b constituyen lo que se llama enlaces inciertos. Una region ambigua es el
maximo conjunto de enlaces interdependientes. Es decir, una region ambigua es un conjunto de enlaces inceirtos.
El objetivo principal es obtener tan pocas y tan pequeñas regiones ambiguas como se pueda.
165
Algoritmo Hill-Climbing
Una descripción intuitiva de Hill-Climbing se puede encontrar en probablemente sea el
algoritmo de busqueda local mas conocido. La idea que subyace en este algoritmo es la
siguiente: empezando en un estado generado aleatoriamente; moverse al estado vecino con
mejor valor; reiniciandose, a otro estado aleatorio, cada vez que se alcanza el mimino local. Este
proceso se repite hasta que se encuentra la solucion. Hill-Climbing, por lo general, mantiene un
parametro llamado Max-Flips que se usa para limitar el numero de movimientos entre
cada reinicio, lo que ayuda a dejar minimos locales no estrictos. El hecho de que tenga que
explorar todos los vecinos del estado actual antes de realizar el siguiente movimiento, se debe
tener en cuenta, puesto que lleva cierto tiempo [5, 314].
El algoritmo Hill-Climbing es un algoritmo de descenso, de sencilla implementación y gran
robustez, que dada la repetitividad de su método de búsqueda permite contrastar resultados. La
dirección de búsqueda se hace de forma exhaustiva calculando todas las posibles direcciones, y
eligiendo aquella que consigue un mayor descenso. Para n variables z = (z0, z1,..., zn−1 ) se ensayan
2n formas [71]:
z1 = (z0 + s, z1,..., zn−1 ), z2 = (z0 − s, z1,..., zn−1 ), ..., z2n−1 = (z0, z1,..., zn−1 + s), z2n =
(z0, z1,..., zn−1 − s)
donde s toma valores arbitrarios. Tipicamente, se realizan varios escalones , asignando a s
valores decrecientes en los sucesivos escalones. Una vez alcanzada una situacion de equilibrio para
un determinado escalon (cuando ninguna direccion de busqueda proporciona una solucion que
mejore a la actual, cuando la mejora es menor que un cierto valor minimo, o cuando se alcanza
un maximo de busquedas), el proceso se repite para el siguiente escalon k+1 en el que se aplica
un salto s menor.
La tendencia a obtener minimos locales es el principal problema de este algoritmo, que se
debe al caracter descendiente del coste denido por los criterios de aceptacion del algoritmo, y
que depende en gran medida de la solucion de partida.
La descripción en forma de algoritmo se puede encontrar en [WIKIPEDI05].
Algoritmo Bayesian Information Criterion (BIC)
BIC se ha convertido en un criterio para la seleccion de modelos popular en los ultimos años.
BIC trata de proporcionar una medida del peso o el factor bayesiano de una evidencia que
favorece a un modelo sobre otro. Tiene, sin embargo, algunas desventajas importantes que
normalmente no son reconocidas [91].
Primero, los factores de Bayes dependen de la creencia previa sobre los valores esperados de
los parametros de la distribucion y no existen garantias de que el factor de Bayes, implicado
por BIC, vaya a hacer que este proximo a uno de los calculados previamente.
166
Segundo, para obtener los factores de Bayes que siguen desde BIC, los investigadores deben
variar la ditribucion previa dependiendo de la distribucion marginal de las variables y de
la naturaleza de las hipotesis. Dichas variaciones parecen injusticables, en prinicipio, y
tienden a hacer que BIC se incline a modelos excesivamente simples en la práctica.
Un modelo de mezcla nita se caracteriza por tener un numero de componentes K y un vector
de parametros θ = (p1,..., pK , λ1,..., λK ) . Una forma clasica de elegir un modelo es seleccionar
aquel que maximice la probabilidad integrada [4]:
b = arg(max f (x|m, K))
(m,
b K)
m,K
donde la probabilidad integrada es:
f (x|m, K) =
R
Θm,K
f (x|m, K, θ)π(θ|m, K)dθ
con la probabilidad:
f (x|m, K, θ) =
Qn
i=1 f (xi |m, K, θ)
y siendo Θm,K el parametro que representa el espacio del modelo m con K componentes y
π(θ|m, K) una distribucion debil o con poca informacion en θ para este modelo. Swarz propuso
una aproximacion asintotica de la probabilidad integrada, valida en condiciones normales:
b −
log f (x|m, K) ≈ log f (x|m, K, θ)
vm,K
2
log(n)
donde θb es la estimacion ML (Maximum-Likelihood) de θ
θb = argmax f (x|m, K, θ)
θ
y vm,K es el numero de parametros libres en el modelo m con K componentes. Esto lleva a
minimizar el supuesto criterio BIC:
BIC m,K = −2Lm,K + vm,K ln n
b es la maxima log-likelihood para m y K.
donde Lm,K = log f (x|m, K, θ)
Aprendizaje Paramétrico
El aprendizaje paramétrico consiste en encontrar los parámetros asociados a una estructra dada
de una red bayesiana. Dichos parámetros consisten en las probabilidades a priori de los nodos
raíz y las probabilidades condicionales de las demás variables, dados sus padres. Si se conocen
todas las variables, es fácil obtener las probabilidades requeridas. Las probabilidades previas
corresponden a las marginales de los nodos raíz, y las condicionales se obtienen de las conjuntas
de cada nodo con su(s) padre(s). Para que se actualizen las probabilidades con cada caso
observado, éstas se pueden representar como razones enteras, y actualizarse con cada
observación.
167
Aprendizaje Paramétrico en modelos discretos
La explicacion de este tipo de aprendizaje se realizara con un ejemplo. Supongase que se
compra una bolsa de caramelos de limon y de cerazas de un nuevo fabricante y de los que se
desconoce tolmente las proporciones de cada uno de ellos. En este caso se tiene una serie de
hipotesis continuas. El parametro en este caso, llamado θ , es la proporcion de caramelos de
cereza, y las la hipotesis es hθ . (La propocion de caramelos de limon es (1 − θ) ). Si se asume
que todas las proporciones iguales a priori, entonces la aprocimacion Maximum-likelhood es
razonable. Si se modela esta situacion mediante una red bayesiana, se necisita una variable
alatoria, Flavor (que representa el sabor de un caramelo extraido aleatoriamente de la bolsa).
Esta variable tiene los valores cereza y limon, donde la probabilidad de cereza es θ . Ahora se
supone que se tiene N caramelos sin envoltorio, de los cuales c son de cereza y |l = N − c| son
de limon. De esta forma la funcion de probabilidad es:
N
P (d|hθ ) = Π P (dj |hθ ) = θc (1 − θ)l
j=1
La hipotesis de maximum-likelihood viene dada por el valor de θ que maximiza esta expresion.
El mismo valor se obtiene maximizando el log-likelihood,
L(d|hθ ) = log P (d|hθ ) =
N
P
log P (dj |hθ ) = c log θ + l log(1 − θ)
j=1
Mediante algoritmos se reduce los productos a sumas de los datos , que normalmente es mas
facil de maximizar. Para encontrar el valor maximum-likelihood de θ , se diferencia L con
respecto θ e igualando la expresion resultante a 0, de la siguiente forma:
dL(d|hθ )
dθ
=
c
θ
−
l
1−θ
=0→θ=
c
c+l
=
c
N
Hasta aqui se ha reproducido el metodo de maximum-likelihood para el aprendizaje
parametrico, que en resumen consiste:
Escribir un expresion de probabilidad para los datos en funcion de los parametros.
Calcular la derivada del log-lokelihood para cada parametros
Encontrar el parametro cuya derivada es 0.
El ejemplo mostrado hasta aqui ilustra un problema importante del aprendizaje
maximum-likelihood en general: cuando el conjunto de datos es tan pequeño que algunos
eventos no se han sido observados -por ejemplo, que no hay caramelos de cereza- este
metodo asigna probabilidad 0 a estos eventos. Para evitar esto, se utilizan algun truco
como incializar el conteo de los eventos a 1 en vez de a 0.
168
Los resultados que proporciona este metodo son buenos y es facil comprobar que se puede
extender a cualquier tipo de red bayesiana cuyas probabilidades condicionales se representen
como tablas.
El punto mas imporante es que con datos completos, el problema del aprendizaje parametrico con maximum-likelihood en una red bayesiana se descompone en problemas separados,
uno para cada parametro. Otro punto importante es que los valores del parametro para
una variable, dados sus padres, son simplemente las frecuencias observadas de los valores
de las variables para cada conguracion de los valores de los padres. Como antes, se debe
tener cuidado con los cero cuando los conjuntos de datos son pequeños.
Existe aprendizaje parametrico para modelos continuos, pero como en el presente
proyecto no se hace uso de este tipo de modelos no se van a comentar; tan solo se
comenta que sique los mismos principios que el aprendizaje en modelos discretos.
Aprendizaje Paramétrico bayesiano
El aprendizaje maximum-likelihood da lugar a procedimientos de aprendizaje muy simples,
pero tiene serias deciencias en el tratamiento de conjuntos de datos pequeños. Por ejemplo,
siguiendo con el ejemplo de los caramelos, la hipotesis maximum-likelihood es que la bolsa tenga
el 100 % de caramelos de cereza ( θ = 1,0 ). A menos que la hipotesis previa sea que la bolsa
debe contener tanto todos los caramelos de limon o todos de cerezas, esta no es una conclusion
razonable. La aproximacion bayesiana para el aprendizaje de parametros establece una hipotesis
previa sobre los posibles valores de los parametros y actualiza la distribucion segun llegan los
datos.
El ejemplo de los caramelos tiene un parametros θ : la probabilidad de que un caramelo
cogido al azar sea de cereza. Desde el punto de vista bayesiano, θ es el valor (desconocido) de la
variable Θ ; la hipotesis previa es simplemente la distribucion previa P (Θ) . Por lo que P (Θ = θ)
es la probabilidad previa de que la bolsa tenga θ caramelos de cereza.
Si el parametro θ puede tener cualquier valor entre 0 y 1, entonces P (Θ) debe ser una
distribucion continua distinta de 0 solo entre 0 y 1 y que integra a 1. La densidad uniforme
P (θ) = U [0, 1](θ) es un candidato. Resulta que la densidad uniforme es un miembro de la familia
de la distribuciones beta. Cada distribucion beta se dene por dos hiperparametros a y b tales
que:
beta[a, b](θ) = αθa−1 (1 − θ)b−1
La constante de normalizacion depende de a y b. El valor medio de la distribucion es , por lo
que valores mas grandes sugieren la creencia de que esta mas cercano a 1 que a 0. Valore mayores
de a +b hace la distribucion mas escarpada, sugiriendo una gran certeza sobre el valor de . Por lo
que, la familia beta proporciona un intervalo util de posibilidades para las hipotesis previa.]para
169
θ en el intevalo [0,1]. La constante de normalizacion α depende de a y b. El valor medio de la
distribucion es a/(a + b) , por lo que valores mas grandes sugieren la creencia de que Θ esta mas
cercano a 1 que a 0. Valore mayores de a +b hace la distribucion mas escarpada, sugiriendo una
gran certeza sobre el valor de Θ . Por lo que, la familia beta proporciona un intervalo util de
posibilidades para las hipotesis previa.
Anterior, entonces, despues de observar un punto de referencia la distribucion posterior de
tambien es una distribucion beta. A la familia beta tambien se la llama conjugada previa para la
familia de distribuciones de variables booleanas. A continuacion se ve como trabaja, mediante el
ejemplo de los caramelos:]Ademas de su felxibilidad la familia beta tiene otras propiedades interesantes: si Θ tiene una beta[a, b] anterior, entonces, despues de observar un punto de referencia
la distribucion posterior de Θ tambien es una distribucion beta. A la familia beta tambien se la
llama conjugada previa para la familia de distribuciones de variables booleanas. A continuacion
se ve como trabaja, mediante el ejemplo de los caramelos:
P (θ|D1 = cereza) = αP (D1 = cereza|θ)P (θ)
=α' θ·beta[a, b](θ) = α' θ·θa−1 (1 − θ)b−1
=α' θa (1 − θ)b−1 = beta[a + 1, b](θ)
Previa se comporta exactamente como si se hubiera iniciado todo el proceso con una beta[1,1]
previa uniforme habiendo visto a-1 caramlelos de cereza actuales y b-1 caramelos de limon actuales. Así, despues de ver un caramelo de cereza, tan solo se incrementa el parametro a para obtener
la probabilidad anterior; de forma similar despues de ver un caramelo de limon, se incrementa
el paraemtro b. Asi, se puede ver que los hiperparametros a y b como contadores virtuales, en
el sentido de que la beta[a, b] previa se comporta exactamente como si se hubiera iniciado todo
el proceso con una beta[1,1] previa uniforme habiendo visto a-1 caramlelos de cereza actuales y
b-1 caramelos de limon actuales.
Mediante el examen de la secuencia de distribuciones beta para el incremento de los valores a
y b, manteniendo las proporciones jas, se puede ver directamente como la distribucion posterior
sobre el parametro Θ cambia segun llegan los datos. Por ejemplo, si se supone que en la bolsa
actual hay un 75 % de caramelos de cereza. La distribucion converge, claramente, a un pico al
rededor del valor de verdad de Θ . Para conjuntos de datos grandes el aprendizaje bayesiano
converge para dar los mismos resultados que el aprendizaje maximum-likelihood.
Si se utilizan tres parametros θ, θ1, θ2 donde θ se ha visto anteriormente lo que es, θ! es la
probabilidad de que los caramelos de cereza tengane envoltorio rojo y θ2 la probabilidad de que
los caramelos de limon tengan envoltorio rojo. La hipotesis bayesiana previa debe cubrir los tres
parametros completamente -es decir, necesitamos especifocar P (Θ, Θ1, Θ2 ) . Normalemente se
asume independencia de parametros:
P (Θ, Θ1, Θ2 ) = P (Θ)P (Θ1 )P (Θ2 )
Con esta asunción, cada parametro puede tener su propia distribucion beta que se actualiza
separadamente segun
170
llegan los datos.
Una vez que se tiene la idea de que los parametros desconocidos se pueden representar variables aleatorias como Θ , es natural incorporarlas a la red bayesiana. Para hacer esto, tambien
se deben hacer copias de las variables que describen cada caso. Por ejemplo, si se observan 3
caramelos entonces se necesita Sabor1, Sabor2, Sabor3 y Envoltorio1, Envoltorio2, Envoltorio3.
El parametro variable Θ determina la probabilidad de cada varibale Sabori :
P (sabor i = cereza|Θ = θ) = θ
De forma similar la probabilidades de envoltorio dependen de Θ1 y Θ2 . Por ejemplo:
P (Envoltorio i = rojo|Sabor i = cereza, Θ1, θ1 ) = θ1
Ahora el proceso de aprendizaje bayesiano se puede formular como un problema de inferencia
en una reb bayesiana contruida convenientemente. La prediccion para una nueva instancia se
realiza median la incorporacion nuevas variables de la instancia a la red, algunas de las cuales son
encoladas. Esta formulacion del aprendizaje y la prediccion meustra claramente que el aprendizaje
bayesiano no requiere de ningun principio de aprendizaje extra.
Aprendizaje paramétrico secuencial
Este tipo de aprendizaje es interesante, sobre todo, en situaciones en las que el proceso de
aprendizaje no puede almacenar todas las observaciones pasadas en la memoria principal [136].
El aprendizaje/adaptación secuencial se puede denir como la capacidad crucial de un sistema
para corregir los errores del modelo inicial y poder adaptarse a los cambios en la distribucion
subyacente [34]. Este tipo de aprendizaje es interesante, sobre todo, en situaciones en las que el
proceso de aprendizaje no puede almacenar todas las observaciones pasadas en la memoria
principal [136].
Distingue esto del entramiento y prere llamarlo adaptación. En este punto es interesante hacer
una distrincion entre la generacion del modelo inicial y la revision de los parametros que ya
existen en el modelo. Existen dominios donde hay sucientes datos disponibles para aprender
los parametros de la red a patir de una base de datos. Se puede defnir esta actividad como
entrenamiento. Sin embargo, el caso más normal es tener que usar una combinacion de
conocimiento experto y datos estadisticos para obtener los parametros requeridos. En este
punto alguien puede querer usar los datos recibidos para revisar los parametros de la red; los
parametros inicialmente se pueden precisar de forma imprecisa o, incluso, de forma incorrecta.
[266] distingue esto del entramiento y prere llamarlo adaptacion.
Cuando la muestra de entrenamiento aumenta y se requiere una actualizacion rapida e
incremental de la red bayesiana, se puede hacer una alteracion de parametros simple sin que
171
afecte a la estructura de los padres. Esto quiere decir, que para cada varible x ∈ X y para cada
conjunto de padres razonable Πx ∈ Px se debe incrementar el correspondiente valor de celdas y
actuzalar las posteriores. Normalmente este proceso debe afectar a los nodos vivos en el
entramado de padres. Por ejemplo, si se tiene una muestra z y se extiende a z' con el nuevo
ejemplo teniendo x=i y Πc = j, se debe incrementar nx=i|j y
(n
+αx )(n
Pr (ΠX |z ', ς, E) = Pr (ΠX |z, ς, E) (nx=i|j +mx αx x=.|j
)(n
x=.|j
−1+mx αx )
x=i|j −1+αx )
Todo esto se deriva de las propiedades recursivas de la funcion Gamma. El proceso de actualizacion completo realizara, por tanto, O(P) operaciones. Se puede mejorar este proceso actualizando inicialmente, solo, los nodos hoja en los enntramados del padre porque el cambio en el
conteo del ejemplo se puede ltrar hacia arriba sin referencia a los ejemplos.
Aprendizaje con datos incompletos
Una distinción importante sobre los datos incompletos (missing data) es si la ausencia de estos
datos es depediente del estado real de las variables. Por ejemplo, un dato perdido en un estudio
sobre dogadiccion puede indicar que el paciente lo hizo demasiado enfermo como para continuar
en el estudio. Por otro lado, si la variable es oculta (por ejemplo, nunca se ha observado el
caso) entonces la ausencia del dato es independiente del estado de la variable.
Aunque los metodos bayesianos y los modelos grácos estan preparados para el análisis de
ambas situaciones; los metodos necesarios para cuando la ausencia es independiente del estado son
más simples que que aquellos en los que la ausencia es dependiente. En este punto se van a tratar
algunos de ello para ver muchos mas se pueden utilizar las siguientes referencias [301, 190, 189].
Aprendizaje paramétrico con datos incompletos Se van a discutir ahora los métodos para el
aprendizaje paramétrico cuando se usa una muestra de datos incompleta (por ejemplo, cuando
no se han obserado algunas variables de algunos casos). La presentacion formal del problema es
la siguiente:
Suponiendo que se observa un unico caso incompleto. Sea Y ⊂ X y Z ⊂ X que son las
variables observada y no observadas respectivamente. Asumiendo la independencia de parametros
se puede calcular la distribucion posterior de θij para una estructura de red S, como sigue:
X
p(θij |y, S h ) =
p(z|y, S h )p(θij |y, z, S h )
x
= (1 −
p(pa ji |y, S h )){p(θij |S h )}
+
ri
X
p(xki , pa ji |y, S h ){p(θij |xki , pa ji , S h )}
k=1
Cada término dentro de las llaves en esta ecuacion es una distribucion de Dirichlet. Por lo
que, a menos que Xi y todas las variables en Pa i se observen en el caso y, la distribucion posterior
de θij sera una combinacion lineal de distribuciones de Dirichlet.
172
Cuando se observa un segundo caso incompleto, alguna o todos los componentes de Dirichlet
de la ecuacion anterior se dividirán en mezclas de Dirichlet. Lo que siginica, que la distribucion
posterior para θij se transformara en una mezcla de mezclas de Dirichlet. A medida que se
siguen observando datos incompletos, cada valor perdido para Z, la distribucion posterior de θij
contendra unnumero de componentes que es exponencial al numero de casos. En general, para
cualquier conjunto interesante de probabilidades y prioridades, el calculo exacto de la distribucion
posterior de θij es intratable. Por lo que se requiere una aproximacion para datos incompletos.
Se procede a continuación a explicar los metodos mas comúnmente utilizados.
Metodos de Monte-Carlo
Una clase de aproximaciones esta basada en los muestreos de Monte-Carlo. Estas
aproximaciones pueden ser extremadamente exactas, siempre que se este dispuesto a esperar
bastante tiempo hasta que se produzca la convergencia.
Se va a presetantar el metodo de Monte-Carlo conocido com Gibbs sampling (que aunque se
ha explicado anteriormente, aquí tiene otra aplicacion).
Dadas las variables X = {X1 , ..., Xn } con alguna distribución conjunta p(x) se puede utilizar
el sampler de Gibbs para aproximar la expectativa para la función f(x) con respecto de p(x) de
la siguiente forma. Primero, se elige (de alguna manera, por ejemplo, aleatoriamente) un estado
inicial para cada una de las variables en X. A continuación se elige una variable culaquiera Xi
se desasigna su estado actual, y se calcula su distribucion de probabilidad dados los estados
de resto de n-1 variables. Entonces se muestrea un estado para Xi basado en su distribucion
de probabilidad y se calcula f(x). Finalmente se repiten los dos primeros pasos, manteniendo un
registro del valor medio de f(x). En el límite, como el número de casos se aproxima a innito, esta
media es igual a Ep(x) (f (x)) con tal de que se cumplan dos condiciones. Primero, el sampler de
Gibbs debe ser irreducible, es decir, la distribución de probabilidad p(x) debe ser tal que se pueda
muestrear eventualmente cualquier posible conguracion de X dada cualquier conguración incial
de X. Segundo, cada Xi se debe elegir amenudo.
Para ilustar el funcionamiento de Gibbs Sampling, se aproximará la densidad p(θs |D, S h )
para cualquier conguracion de θs dado un conjunto de datos incompletos D = {yi , ..., yn }y una
red bayesiana de variables discretas con prioridades de Dirichlet independientes. Para aproximar
p(θs |D, S h ). Primero se incializa, de alguna forma, los estados de las variables no observadas en
cada caso. Como resultado, se obtiene una muestra completa y aleatoria Dc . Segundo, se elige
alguna variable Xil (variable Xi en el caso l) que no se ha observado en la muestra original D
elegida al azar, y se reasigna su estado de acuerdo con la distribucion de probabilidad:
p(x'il |Dc \ xil , S h ) =
p(x'il ,Dc \xil |S h )
p(xil ,Dc \xil |S h )
x
P
il
173
donde Dc \ xil indica el conjunto de datos Dc con la observacion Xil borrada. Tercero, se
puede repetir esta reasignacion para todas las variables no observadas en D, produciendo una
muestra completa aleatoria nueva Dc' . Cuarto, se calcula la probabilidad posterior p(θs |D, S h ) .
Y nalmente, se repiten los tres primeros pasos y se usa la media de p(θs |D, S h ).
Aproximación Gaussiana
Los metodos de Monte-Carlo proporcionan resultado exacto, pero normalmente son intratables,
por ejemplo, cuando se tiene una muestra de datos demasiado grande. Otra aproximación que
ofrece resultados practicamente igual de exactatos para muestras relativamente grandes es, esta
aproximacion gaussiana [209] y [12] que se comenta en este punto.
La idea que hay detras de esta aproximacion es que, para una cantidad de datos grande, p(θs |D, S h ) ∝ p(D|θs , S h )p(θs |S h ) se puede aproximar, frecuentemente, a una distribucion
Gaussiana multivarible.
Concretamente, sea:
g(θs ) ≡ log(p(D|θs , S h )p(θs |S h ))
También, se dene θ̃s como la conguracion de θs . Esta conguracion tambien maximiza
p(θs |D, S h ) y se conoce como la conguracion MAP de θs .
Para calcular esta aproximacion gaussiana, se debe calcular θ̃s , asi como, el Hessian75 negativo
de g(θs ) evaluado en θ̃s .
Aproximación MAP, ML y algoritmo EM
Como aumente el tamaño de la muestra, el pico gaussiano es más agudo tendiendo a la función
delta de la conguración MAP θ̃s . En este punto no es necesario calcular medias o expectativas.
En su lugar, simplemente se realizan predicciones basadas en la conguración MAP.
Una aproximación más profunda se basa en la observación de que, como el tamaño de la
muestra aumenta, el efecto de la anterior p(θs |S h )disminuye. Por lo que, se puede aproximar
θ̃s por medio de la conguracion de Maximum Likekihood del θs :
θ̃ = argmax {p(D|θs , S h )}
θa
Existe un tipo de tecnicas de optimizacion basada en gradiente para para encontrar ML o
MAP. Por ejemplo, se puede usar un gradiente ascendente, donde se siguien las derivadas de
g(θs ) o la probabilidad p(D|θs , S h ) hasta el maximo local. [302] y [355] muestran como calcular
las derivadas de la probabilidad de una red bayesiana con distribuiciones multinomiales no restringidas. [46] discute el caso más general donde la funcion de probabilidad viene de una familia
exponencial. Por supuesto estos metodos basados en gradiente encuentran sólo el maximo local.
75
http://rkb.home.cern.ch/rkb/AN16pp/node118.html
174
Otra tecnica para encontrar un ML o MAP local es el algoritmo EM descrito por [104]. Para
buscar el maximo local MAP o ML, se comienza por asignar, de alguna forma (por ejemplo,
aleatoria) un conguracion a θs . Seguidamente, se calcula la estadistica suciente esperada para
un conjunto de datos completo, donde la expectacion se toma con respecto a la distribucion
conjunta para X condicionada por la conguracion asignada a θs y los datos conocidos D. En el
ejemplo que se viene mostrando, se puede calcular:
Ep(x|D,θs ,S h ) (Nijk ) =
N
P
l=1
p(xki , pa ji |yl , θs , S h )
donde yl es el l-esimo caso incompleto de D. Cuando Xi y todas las variables en pa i se
observan en el caso xl el término para este caso requiere una computación trivial: es cero o uno.
Si no, se puede usar cualquier algoritmo de inferencia bayesiano para evaluar el término. Este
cálculo es el paso de expectacion del algoritmo EM.
Seguidamente, se usan las estadisticas-sucientes esperadas como si fuesen la actuales estadisiticassucientes de la muestra completa (aleatoria) D. Si se hace el calculo ML, se determina la conguracion de θs que maximiza p(Dc |θs , S h ). Siguiendo el ejemplo, se tiene que:
θijk =
Ep(x|D,θ ,S h ) (Nijk )
s
Pri
k=1 Ep(x|D,θ ,S h ) (Nijk )
s
Si se hace el calculo MAP, entonces se establece la conguracion de θs que maximiza p(Dc |θs , S h ).
Siguiendo el ejemplo, se tiene que:
θijk =
αijk +Ep(x|D,θ ,S h ) (Nijk )
s
Pri
k=1 (αijk +Ep(x|D,θ ,S h ) (Nijk ))
s
Esta asignacion, realmente, es el paso de maximizacion del algoritmo EM. Este algorimo
se usa normalmente cuando cuando existen sucientes estadisiticas (por ejemplo, cuando una
funcion de distribucion local está en una familia exponencial), aunque generalizaciones de EM
permiten que se use en distribuciones locales mas complicadas.
Una vez que se ha construido la red bayesiana ( a partir de concimiento, previo, datos o una
combinacion de ambos) normalmente, surge la necesidad de determinar algunas probabilidades
de interes a partir del modelo. Por ejemplo, en un problema sobre deteccion de fraude, se puede
pretender obtener la probabiliadad de un fraude dadas una serie de observaciones de otras variables. Esta probabilidad no se almacena directamente en el modelo y por tanto se debe calcular.
En general, el calculo de la probabilidad dado un modelo se conoce como inferencia. En este
punto se va a describir la inferencia en redes bayesiana [86].
Como una red bayesiana, para una variable X, determina la distribucion probabilidad conjunta de esa variable, se puede (en principio), usar la red baysiana para calcular cualquier probabilidad que resulte de interes. Por ejemplo, para la siguiente red:
175
Figura 2.78: Red bayesiana de ejemplo
La probabilidad se puede calcular:
p(f |a, s, g, j) =
p(f,a,s,g,j)
p(a,s,g,j)
=
P p(f,a,s,g,j)
p(f ' ,a,s,g,j)
f'
Para problemas con muchas más variables, sin embargo, esta aproximacion tan directa no es
posible. Afortunadamente, cuando todas las variables son discretas, se puede aprovechar la independencia condicional codicada en las redes bayesianas para hacer estos calculos más ecientes.
Dada la ecuacion de independecia condicional p(j|f, a, s, g) = p(j|f, a, s) la ecuacion anterior
se transforma en:
p(f |a, s, g, j) =
)p(j|f,a,s)
P p(f )p(a)p(s)p(g|f
p(f ' )p(a)p(s)(g|f ' )p(j|f ' ,a,s)
f'
=
)p(j|f,a,s)
P p(f )p(g|f
p(f ' )(g|f ' )p(j|f ' ,a,s)
f'
Muchos investigadores han desarrollado algoritmos de inferencia para redes bayesianas con
variables discretas que aprovechan la independencia condicional como se ha descrito arriba. Por
ejemplo en [166], [239] y [287] desarrollan algoritmos que invierten arcos o enlaces en la estructura
de la red hasta que la pregunta probabilista realizada se puede leer directamente del grafo. En
estos algoritmos cada enlace invertido se corresponde con una aplicacion del teorema de Bayes.
[186] desarrolla un esquema de paso de mensajes que actualiza las distribuciones de probabilidad
de cada nodo de una red bayesianas en respuesta a observaciones de una o más variables. [392],
[197] y [97] crearon un algoritmo que primero transforma la red bayesiana en un arbol donde cada
nodo en el arbol se correponde con un subconjunto de variables en X. El algoritmo se aprovecha,
entonces, de algunas propiedades matematicas de los arboles para realizar la inferencia. Este
algoritmo es el que más se utiliza con variables discretas.
Aunque se utiliza la independencia condicional para simplicar la inferencia probabilistica,
la inferencia exacta en redes bayesianas arbitrarias con nodos discretos es un problema NPhard76 . Incluso la inferencia aproximada mediante, por ejemplo, el metodo de Monte-Carlo es un
problema NP-hard. El origen de esta dicultad subyace en lo ciclos no dirigidos de la estructura
de la red bayesiana -ciclos en la estructura donde no se hace caso a la direccionalidad de los
enlaces. Cuando una red bayesiana contiene muchos ciclos la inferencia es intratable. Para muchas
aplicaciones la estructura es sucientemente simple (o se puede simplicar sin perder demasiada
exactitud) por lo que la inferencia es eciente.
76
http://es.wikipedia.org/wiki/NP-hard
176
Algoritmo Gibbs Sampling [51]
Este algoritmo es uno de los más simples dentro de los algoritmos de Monte-Carlo. Lo introdujo [144] en el contexto del procesamiento de imagenes y posteriormente lo discutio [350] en el
contexto de problemas de perdida de datos. El documento [143] ayuda a demostrar el valor del
algoritmo de Gibbs para un amplio abanico de problemas de analisis bayesiano.
Para denir este algoritmo, se establece la distribucion condicional total como:
{π(ψ1 |ψ2 , ..., ψp ); π(ψ2 |ψ1 , ψ3 , ..., ψp ); π(ψp |ψ1 , ..., ψd−1 )}
Ahora un ciclo del algoritmo se completa mediante la simulacion de {ψk }pk=1 para esas distri-
buciones, actualizando de forma recursiva las variables condicionantes. Cuando d=2 se obtienen
los dos bloques del sampler de Gibbs que aparecen en [350]. En este sampler cada bloque se
revisa en un orden jado, de la siguiente manera [39]:
(0)
(0)
Se especica un valor inicial ψ (0) = (ψ1 , ..., ψp )
Repetir para j = 1, 2, ..., M
(j+1)
desde π(ψ1 |ψ2 , ψ3 , ..., ψp )
(j+1)
desde π(ψ2 |ψ1
(j+1)
desde π(ψp |ψ1
• Generar ψ1
• Generar ψ2
(j)
(j)
(j)
(j+1)
, ψ3 , ..., ψp )
(j+1)
, ..., ψp−1 )
(j)
(j)
• ...
• Generar ψp
(j+1)
Devolver los valores {ψ (1) , ψ (2) , ..., ψ (M ) }
(j)
(j+1)
La densidad de la transicion de ψk hasta ψk
(j+1)
(j+1)
(j)
(j)
p(ψk |ψ1
, ..., ψk−1 , ψk+a , ..., ψp )
viene dado por
hasta que el bloque k-esimo se alcanza, el anterior (k-1) se
actualiza. Por lo tanto, la densidad de la transicion de la cadena, bajo el supuesto de que π es
absolutamente continua, viene dada por el producto de las transiciones de los nucleos de cada
bloque:
K(ψ, ψ ' ) =
p
Q
k=1
(j+1)
π(ψk |ψ1
j+1
j
, ..., ψk−1
, ψk+1
, ..., ψpj )
Para ilustrar la manera en que los bloques se revisan, se considera el caso de dos bloques,
cada uno con un único componente y esquematizado en la siguiente gura una posible trayectoria
del algoritmo.
177
Figura 2.79: Trayectoria Del Algoritmo
Los contornos en la gura representan la distribucion conjunta de ψ y las etiquetas (0),
(1), etc denotan los valores simulados.
Hay que darse cuenta que en cada iteracion del algoritmo se completa despues de que ambos
componentes han sido revisados. Tambien hay que darse cuenta de que cada componente se revisa
a lo largo de la los ejes de coordenas. Esta caracteristica puede ser una fuente de problemas
si dos componentes estan ampliamente correlacionados porque entonces los contornos tienen
compresiones y movimimientos a lo largo del eje de coordenadas que dan lugar a pequeños
movimientos.
Este algoritmo es aplicable cuando la distribucion conjunta no se conce explicitamente, pero
la distribucion condicional de cada variable si es conocida. En resumen, lo que hace este algoritmo
es generar una instancia de la distribucion de cada variable de forma condicional a los valores
actuales de las otras variables [WIKIPEDI05]. Este algoritmo es facil de implementar y garantiza
convergencia hacia la distribucion correcta, sin embargo puede requirir un numero excesivo de
iteraciones antes de que converja [87].
Algoritmo Naive
El metodo de inferencia que se prensenta en este punto se puede aplicar a cualquier modelo
naive.
En [87] describen el algoritmo de la siguiente forma: para preguntas marginales, sea X el
conjunto de variables de consulta, sea C la variable componente de k estados y Z el conjunto
de la demas variables ocultas. (Se asume que la variable componente nunca forma parte de la
consulta, esto es, nunca se observa en los datos de entrenamiento). Permitase que X se reera a
los estados jos de las variables de pregunta. Ahora se puede calcular la probabilidad marginal
directamente mediante la suma de todos los posibles estados de C y Z:
P (X = x) =
k P
P
P (X = x, Z = z, C = c)
c=1 z
178
Por la hipoteisis de naive Bayes, cada una de las otras variables son indepndientes dada C.
Usando esto, se puede expresar la probabilidad en terminos de las distribuciones aprendidas P(C)
y P (Xi |C) :
P (X = x) =
|Z |
|X |
k P
P
Q
Q
P (c) P (zi |c) P (xi |c)
c=1 k
Como
P
z
i=1
j =1
P (zi |c) siempre es 1, las variables en Z no afectan al calculo de la probabilidad y
se pueden ignorar con total seguridad:
P (X = x) =
k
P
X|
Q
|
P (c)
c=1
P (xj |c)
j =1
Como esta expresion es el producto de k sumas, cada suma conteniendo |X|+1 terminos,
el tiempo total requerido para calcaular P(X = x) es O(|X|k). El tiemp de inferencia de naive
Bayes es constante al numero de variables ocultas mientras la inferencia exacta bayesiana es
exponencial al numero de varibles ocultas.
Las probabilidades condicionales se pueden calcular ecientemente como ratios de las probabilidades marginales. Permitase a Y referirse a un conjunto de variables condionantes en la
consulta condicional y permitase a y referirse a un estado jo de Y.
=y)
P (X = x|Y = y) = P (X=x,Y
P (Y =y)
Las probabilidades marginales en numerador y denominador se pueden calcular en tiempo
O(k(|X |+|Y |)) y O(k |Y |) respectivamente. Por otro lado, la probabilidad condicional P(X =x |
Y = y) se pude calcular en tiempo O(k(|X |+|Y |)) . Hay que jarse en que este tiempo permanace
independiente del numero de variables ocultas.
Puesto que la distribucion de probabilidad completa, sobre multiples variables, especica un
probabilidad para cada uno de un numero exponencial de estados, almacenar estas probabiliadades puede requerir un tiempo y espacio tambien exponencial. Se puede, sin embargo, generar
de forma eciente un modelo reducido de naive Bayes que incorpore toda la evidencia. En este
modelo reducido se borran todas las variables de Y y las evidencias en Y se han incorporado
mediante el ajuste del peso de los componentes, P(C).
Inferencia con datos incompletos
Las inferencias sobre las magnitudes desconocidas parámetros, datos no observados, variables
latentes, etc se obtienen calculando la distribución condicionada de éstas por las magnitudes
conocidas, como son: el modelo estadístico, los datos observados, las variables explicativas, el
método de muestreo y cualquier otra información auxiliar, como pueda ser el redondeo de los
datos, la censura o truncado de estos, etc [182].
179
Puesto que no se han encontrado que metodos o algoritmos emplea la libreria PNL para
realizar esta labor; se pasa a describir algunos de los metodos mas importantes que se han
encontrado.
Metodos de imputacion multiple
La imputacion múltimple (MI) es la practica de rellenar los datos perdidos con valores
plausibles. Aparentemnente resuelve que existan missing-data al comienzo del analisis de los
datos. Sin embargo, una metodo de imputacion ingenuo puede crear mas problemas de los que
resuleve, distorsionando las estimaciones, produciendo errores de todo tipo como indica [300].
El procedimiento de MI proporciona tres metodos para la imputacion la imputacion de los valores perdidos y el metodos elegido depende del patron que sigan los missing-data. Para patrones
monotonos son apropoiados tanto el metodo de regresion parametrica, que asume normalidad
multivariable como un metodo no parametrico que usa un metodo de puntuacion de la propension. Para patrones arbitrarios se puede usar el metodo MCMC77 que asume normalidad
multivariable. A continuacion se describen estos tres metodos comentados.
1. Metodo de regresion paramétrica
De forma intuitiva, este metodo ajusta un modelo de regresion para cada variable con valores
perdidos, con las variables previas como covarianzas. En base al resultado del modelo simula un
nuevo modelo de regresión y lo usa para imputar los missing-data a cada variable [9]. Puesto
que el conjunto de datos tiene un patron de perdida de datos monotono, el proceso se repite
secuencialmente para variables con missing-data.
De un modo mas formal, para una variable Yj con valores perdidos, se ajusta con observaciones
no perdidas de un modelo
Yj = β0 + β1 Y1 + β2 Y2 + ... + β(j−1) Y(j−1)
El modelo ajustado tiene estimaciones del parametro de regresion (β̃0, β̃1, ..., β̃(j−1) , ) y la covarianza asociada σj2 Vj donde Vj es la matrix X'X de la interseccion y las variables Y1, Y2, ..., Y(j−1) .
Para cada imputacion, aparecen nuevos parametros (β̃* 0, β̃*1 , ..., β̃*(j−1) , ) y σ*2j de la distribucion predictiva de los missing-data. Es decir, se simulan de (β̃0, β̃1, ..., β̃(j−1) , ) , σj2 y Vj .
Los valores perdidos se reemplazan, entonces, por
β*0 + β*1y1 + β*2y2 + ... + β*(j−1)y(j−1) + zi σ* j
donde y1, y2, ..., y(j−1) son los valores de la covarianza de las primeras (j-1) variables y z es
una desviacion normal simulada.
77
Markov Chain Monte Carlo
180
1. Metodo de puntuación de la propensión
La puntuación de la propensión es la probabilidad condicional de la asignacion a un tratamiento
particular dado un vector de covarianzas observadas [301]. En este metodo se genera una puntuacion de la propension para cada variable con valores perdidos para indicar la probabilidad de
la observacion que falta . Las observaciones se agrupan entonces basandose en esa puntuacion y
se aplica a cada grupo una imputación bayesiana aproximada [226].
Con un patron de perdida de datos monótono, los pasos a seguir para imputar valores a cada
variable Yj con datos perdidos son los siguientes:
Crear una variable indicador Rj con el valor 0 para las boservaciones con Yj perdido y el
valor 1 en caso contrario.
Ajustar el modelo logico de la regresion de logit(pj ) = β0 + β1 Y1 + β2 Y2 + ... + β(j−1) Y(j−1)
donde pj = p(Rj = 0|Y1, Y2, ..., Y(j−1) ) y logit(p) = log(p/(1 − p))
Crear la puntuacion de la propension para cada una de las observaciones para indicar la
probabilidad de los datos perdidos.
Dividir las observaciones entre un jado de grupos basando es las puntuaciones.
Aplicar un arranque de imputacion bayeisano aproximado para cada grupo. En el grupo
k , denote Yobs la n1 obserbacion sin perdida de datos de los valores de Yj y denote Ymis
la observacion n0 con perdida de datos de Yj . El arraque aproximado de la imputacion
bayesiana primero muestra n1 observaciones aleatorias con remplazamiento de Yobs para
*
crear un nuevo conjunto de datos Yobs
. Este es una analogia no-parametrica de los para-
metros mostrados para la distribucion predictiva posterior de los datos perdidos. Entonces
*
muestra los n0 valores de Ymis reemplazandolos aleatoriamente con los valores de Yobs
.
Este proceso se repite secuencialmente para cada variable con valores perdidos.
Este metodo utiliza sólo la informacion de covarianza con la que esta relacionada si los
valores imputados de la varible estan perdidos. No usa correlaciones entre variables. Es efectivo
para inferencias sobre las distribuciones de variables imputadas individualmente, pero no es
apropiado para el analisis de las relaciones entre variables [400].
1. Metodo MCMC
En este metodo se construye una cadena de Markov sucientemente larga como para que la
distribucion de elementos se estabilice en una distribucion comun y estacionaria. Mediante
simulaciones repetidas se obtiene una distribucion de interes.
En inferencia bayesiana, la informacion sobre los parametros desconocidos se expresa en
forma de distribucion posteriror. MCMC se ha aplicado como un metodo de exploracion de
181
distribuciones posteriores en inferencia bayesiana. Es decir, mediante MCMC , se puede simular
la distribucion conjunta entera de las cantidades desconocidas y para obtener una estimacion
simulada de los parametros posterirores de interes.
Asumiendo que los datos son de una distribucion normal miltivariante, el aumento de datos se aplica a la inferencia bayesiana con missing-data mediante la repeticion de una serie de
imputaciones y pasos posteriores. Los pasos son los siguientes [400]:
Paso de imputacion I-step.
Con el vector de medias estimadas y la matriz de covarianza, este paso simula los valores
perdidos para cada una de las observaciones de forma independiente. Esto es, si se denota
las variables con valores perdidos de la observacion i como Yi(mis) y las variables con
valores observados como como Yi(obs) entonces el paso I-step muestra valores para Yi(mis)
de una distribucion condicional dado Yi(obs) .
Paso posterior p-step
Este paso simula el vector de poblacion media posterior y la matriz de covarianza para
estimaciones de muestras completas.. Estas nuevas estimaciones se usan en el pasos
I-step. Sin informacion previa sobre esos parametros, se usan piroridadas no informativas.
Se puede usar otras prioridades informativas.
Estos dos pasos se repiten lo suciente como para que sean conables para un conjunto
multiple de datos imputados [316].
La meta es tener la convergencia iterada a su distribucion estacionaria y entonces simular
una muestra independiente de valores perdidos. Es decir, con el parametro actualmente estimado
(t+1)
θ(t) en la t-esima iteracion el paso I-step muestra Ymiss
muestra
θ(t+1)
de
(t+1)
p(θ|Yobs , Ymis )
de p(Ymis |Yobs , θ(t)) y el paso p-step
(1)
(2)
. Esto crea la cadena de Markov (Ymis , θ(1) ), (Ymis , θ(2) ), ...,
que converge en una distribucion para p(Ymis , θ|Yobs ).
2.5.3. Modelado de la información de estado [137]
Sea X una variable aleatoria que puede tomar L posibles valores de un conjunto Σ. Sin pérdida
de generalidad, sea Σ={1, ..., L} . Proporcionando un conjunto de entrenamiento D que contiene
los resultados de N variables independientes x1, ..., xN de X de una distribucion multinomial
desconocida P*. Se puede indicar por Ni el número de ocurrencias del símbolo i en los datos
de entrenamiento. El problema de estimación multinomial es encontrar una aproximación buena
para P* (que tambien es una distribucion multinomial).
Este problema consiste en predecir el resultado de xN +1 dado x1, ..., xN . Dada una distribucion anterior sobre las posibles distribuciones multinomiales la estimacion Bayesiana es:
182
P (xN +1 |x1, ..., xN , ξ) =
R
P (xN +1 |θ, ξ)P (θ|x1, ..., X N , ξ)dθ
donde θ = (θ1 , ..., θL ) es un vector que describe los posibles valores de las probabilidades
desconocidas P * (1), ..., P * (L) , y ξ es la variable contexto que indica todas las posibles hipotesis
sobre el dominio.
La probabilidad posterior de θ se puede reescribir usando la ley de Bayes como:
P
P (θ|x1, ..., xN ) ∝ P (x1, ..., xN |θ, ξ)P (θ|ξ) = P (θ|ξ) θiNi
i
La distribucion de Dirichlet es una familia parametrica que son las conjugaciones de la distribucion multinomial. Esto es, si la distribucion previa es de esta familia, entoces esta en la
posterior. Un Dirichelet prior para X se especica mediante los hiperparametros α1 , ..., αL y
tienen la forma:
P (θ|ξ) =
donde Γ(x) =
R∞
0
P
Q
P
Γ(
Q i α i ) θ α i -1 ( θ i
i
Γ(α
)
i
i
i
i
= 1andθi > 0∀i)
tx-1 e-t dt es la funcion gamma. Dado un Dirichlet prior, la prediccion incial
para cada valor de X es:
P (X 1 = i|ξ) =
R
θiP (θ|ξ)dθ =
Pαi
j αj
Con todo esto es facil ver que, si el previo es un Dirichelet prior con hiperparametros α1 , ..., αL
eentondes el posterior es un Dirichelet con hipermarametros α1 + N1 , ..., αL + NL . Por lo la
prediccion para X N +1 es:
P (xN +1 = i|x1, ..., xN , ξ) =
P αi +Ni
j (αj +Nj )
Se puede pensar en los hiperparametros αi como un numero de ejemplos imaginarios en
los que se ha visto el resultado i. Así, el ratio entre los hiperparametros corresponde a la valoracion inicial de la probabilidad relativa de los resultados correspondientes. El peso total de los
hiperparametros representa la conanza en el conocimiento previo. Como se puede ver, si este
peso es grande, la estimacion de los parametros tiende a ir mas allá de las frecuencias observadas
empiricamente de los datos.
Cadenas de Markov
En este apartado se van a describir las cadenas de Markov, los modelos de Markov Ocultos y
diversas aproximaciones a su implementación. Además se dará una visión de las problemáticas
y algorítmicas empleadas. [290, 228]
183
Cadenas de Markov
Una cadena de Markov representa un automáta con estados nitos de la siguiente forma:
Figura 2.80: Cadena de Markov
Se dene como λ = N, {π1}, {aij} N, representa el número de estados que tiene la cadena.
π representa la probabilidad inicial o a priori de cada uno de los estados.
{aij}, representa la matriz de distribución de probabilidad para transiciones entre estados
de la cadena.
La premisa fundamental que se realiza en todo tratamiento y trabajo relacionado con modelos
de Markov es la hipótesis de independencia de todas las muestras anteriores con la actual salvo
para con la anteior. Esto explicado de forma matemática queda de la siguiente forma:
P (qt = j|qt−1 = i|qt−2 = k, ...) = P (qt = j|qt−1 = i)
La interpretación es que la probabilidad de estar en el estado j en el instante actual sólo
viene condicionada al estado en el que se encontraba el sistema en el instante t-1. El resto de
las muestras que se han producido en el modelo se descartan, si bien hay trabajos relacionados
para ampliación del número de etapas anteriores a tener en consideración: bigramas, trigramas,
. . . n-gramas.
Las cadenas de Markov además tienen la propiedad de ser estacionarias, es decir, que en cada
momento se cumple el principio de Markov, esto es:
P (qt = j|qt−1 = i) = P (qt+1 = j|qt+1−1 = i)
A este tipo de cadenas de Markov también se le suele denominar cadenas de primer orden.
A su vez denotar que los estados en estas cadenas son observables, es decir, se puede saber su
valor en todo momento.
La parte observable de este modelo es la propia secuencia de estados y a su vez se puede
calcular la probabilidad de que se de una observación en concreto para un determinado modelo:
184
P (X|M ) = πX1 · αX1 X2 . . . αXn−1 Xn
La fórmula anterior indica que para calcular la probabilidad de que una cadena de Markov
genere una determinada observación, se calcula de forma tan sencilla como la arriba indicada:
probabilidad de inicio por el primer estado de la observación, por la probabilidad de transición
entre el primer estado observado y el segundo, etc.
Representacion de cadenas de markov como RRBB
Las cadenas de Markov son un subconjunto de las propias Redes Bayesianas. Es decir, que se
puede representar lo mismo de ambas formas. Para el caso de una cadena de Markov simple
como la que sigue:
Figura 2.81: Cadena de Markov representada como red bayesiana
En esta red de ejemplo las probabilidades son las siguientes:
Cuadro 2.4: Tabla de probabilidades de la gura
Con una determinada distribución inicial π , que indica la probabilidad a priori de que se esté
en un estado o en otro.
Una red bayesiana que represente lo mismo, partiendo del principio de que sólo se mantiene
el conocimiento del estado anterior, queda tan simple como esta:
185
Figura 2.82: Tablas de probabilidad condicionada
Las tablas de probabilidades condicionadas para el nodo de la RRBB que se ha denominado
SFinal, van a indicar la probabilidad de que se de un determinado estado de la variable en
función del estado que haya ocurrido con anterioridad. Como se puede aprenciar en la gura,
además de tener las tablas de probabilidad condicionada en el segundo nodo, se tiene la tabla de
probabilidad a priori del primero, que coincidirá con la distribución π , de una cadena de markov
simple.
Denotar además, que solo hacen falta dos variables para computar todo, introduciendo evidencias parciales y manteniendo el productorio. Para el primer caso de las cadenas de Markov el
procedimiento para calcular la ruta S1, S2, S3, S5, S4, S1:
P (S1, S2, S3, S5, S4, S1) = P (S1) · P (S2|S1) · P (S3|S2) · P (S5|S3) · P (S4|S5) · P (S1|S4)
Realizando la misma operación, de la RRBB sólo nos va a interesar el CPD78 del segundo
nodo, para poder realizar el cálculo pertinente. Todas las probabilidades condicionadas se van
a poder obtener de la susodicha tabla. Además las probabilidades iniciales, para una cadena de
markov en la que no se tiene denido ni estado de principio ni de nal, quedan representadas en
la tabla o CPD del nodo denominado Sinicial .
En la forma anterior como se puede apreciar, resulta bastante sencilla la modelización de una
cadena de Markov y además se obtienen una serie de ventajas algoritmicas y computacionales
dadas por las redes bayesianas en sí mismas79 .
Hidden Markov Model
Los Modelos Ocultos de Markov son autómatas de estados nitos estocásticos con
observaciones continuas o discretas. Estas observaciones o salidas se conocen como símbolos y
en cada momento del tiempo sólo se extrae uno en concreto.
78
79
CPD, tabla de probabilidades del nodo en cuestión.
Inferencia, aprendizaje, correlación, independencia, representación del conocimiento . . .
186
Básicamente es el mismo concepto que las cadenas de Markov anteriores, con la salvedad de
que los estados no son visibles, si no que de ellos sólo se conoce la salida que emiten.
Se han utilizado extensamente en el reconocimiento del habla, en los que se llega incluso
a una jerarquía de modelos que van desde la detección de subpalabras (fonemas, semisílabas,
sílabas) hasta la detección de palabras y textos completos. Otros usos comunes son el modelado
de secuencias genéticas de ADN, el modelado de textos o la extracción de información de los
mismos [Rabiner93]. Aplicaciones en las que se utilizan pueden ser: robótica, reconocimiento de
voz, genoma humano, economía, nanzas, marketing y un largo etcétera.
Se pueden considerar como una máquina abstracta con k estados ocultos que emiten símbolos
observables de un alfabeto Σ. Cada estado tiene su propia distribución de probabilidad con lo
que la máquina varía entre los estados de acuerdo a esta distribución. Se tienen que tomar para
realizar un cambio de estado dos decisiones: ¾a qué estado se tiene que pasar?, y ¾qué símbolo
del alfabeto Σ es el que se tiene que emitir?
Los observadores pueden ver los símbolos que han sido o se están emitiendo, pero desconocen
el estado oculto en el que se encuentra el modelo HMM en cada momento. La idea subyacente
es conseguir identicar la secuencia de estados ocultos por la que se ha ido para la obtención de
una determinada serie de símbolos.
Los parámetros de un Modelo Oculto de Markov son los siguientes:
Alfabeto Σ de símbolos que pueden ser emitidos.
Conjunto S de estados ocultos que pueden emitir símbolos del alfabeto anterior.
Matriz de transiciones T. Indicando la probabilidad de pasar de un estado s a otro estado
s.
Matriz de emisiones A para cada estado. Indica la probabilidad de emitir un determinado
símbolo del alfabeto estando en un determinado estado.
Se puede denir otra variable acorde a la ruta seguida a través de los estados ocultos en el
interior del modelo que se denomina habitualmente path o hidden path.
Se asume que en total hay N estados Sn posibles para el modelo. Además, se añade un estado
S0 en el que siempre se va a comenzar por conveniencia en la implementación. También se añade
un estado SN como el estado nal del modelo, dado que llegado a ese punto, el modelo parará.
Se tiene a su vez un conjunto P como posibles salidas del modelo que cumplen el alfabeto Σ
= {a1, a2, . . . , aP}. Si además se añade un símbolo a 0 que reprensenta la salida nula se concede
al modelo que pueda haber momentos en los que no exista ninguna salida.
Cada estado Sj tiene una distribución de probabilidad de emisión de símbolos denida por el
vector Aj tal que la probablidad de emisón de a cuando se esté en el estado Sj sea denida por
Aj (a). Se cumple que:
187
P
A(α) = 1 ∀Sj ∈ S
α∈A
Para la matriz de transiciones T, dena de forma que Tjk es la probabilidad de moverse desde
el estado Sj al estado Sk. Denotar que las las de la matriz generada de esta forma deben sumar
1, si bien las columnas no tienen porqué. También se tiene que resaltar que los elementos de la
diagonal de esta matriz deberán ser diferentes de cero para poder permitir transiciones de un
estado a sí mismo.
Para poder eliminar la necesidad de almacenar la distribución inicial de partida de los estados
se tiene a usar el estado comentado anteriormente S0, estado en el que el modelo siempre empieza
y no vuelve nunca a él. Esto indica que la primera columna de la matriz T esté rellena de ceros
y que la primera la es sólo la distribución de probabilidad de comienzo de los estados.
En general por compendio se va a utilizar a partir de ahora la nomenclatura de [Rabiner93]
en la que una cadena de Markov queda completamente denida de la siguiente forma:
N estados ocultos.
M posibles observaciones.
Las distribuciones iniciales de los estados {π1, π2, . . . , πN }
Los estados se etiquetan como S1, S2,. . . , SN.
El número de observaciones se ja en T y éste será a su vez el número de estados ocultos
a través de los que se ha pasado.
La secuencia de observaciones: O = O1, O2,. . . , OT .
La notación que se emplea para una determinada ruta de estados ocultos es: Q = q1, q2,
. . . , qT.
La matriz de transición entre estados ocultos se denota A y sus coecientes serán aij.
La matriz de emisión de símbolos por estado se denota B y es única para cada estado
oculto, por lo que sus coecientes en función del estado son: bi(j).
De esta forma la nomenclatura completa para una cadena de Markov viene determinada por:
λ = N, M, {π1}, {aij}, {bi(j)} Los cálculos más comunes que se suelen emplear son:
Probabilidad de que una determinada secuencia siga un determinado camino en el interior
del modelo.
Probablidad de emitir una determinada serie de símbolos alcanzando el estado
188
Probabilidad de estar en un determinado estado símbolos.
Los problemas más comunes para los que se trata de buscar una solución mediante aplicación de
estos modelos [290]:
Calcular la probabilidad con la que un determinado modelo puede producir una secuencia
de observaciones.
Encontrar el camino óptimo dentro de los estados ocultos que más probablemente haya
podido generar una determinada secuencia.
Aprender un HMM que satisfaga lo mejor posible las secuencias observadas.
Para el primero de los problemas planteados, la solución pasa por calcular la probabilidad con la
que la secuencia observada se ajusta al modelo: P(O / λ). Esta útilidad permite seleccionar de
una serie de modelos, cúal es con mayor probabilidad el que la ha generado y por tanto permite
hacer una clasicación de la muestra adecuada.
El segundo problema implica que se tenga una observación y se quiera determinar cúal ha sido
el camino seguido en los estados ocultos. Mediante esta resolución se consigue descubrir y arrojar
luz a un comportamiento no observado directamente. Se puede a su vez dar una explicación a los
datos obtenidos al poder comprobar los estados ocultos que han sido los encargados de llegar a
ese resultado. Una de las partes más importantes que se deben de tener en cuenta en este punto
es el criterio de optimización a elegir para realizar la maximización de probabilidad, uno de los
más usados es el criterio de la semejanza, likelihood80 .
El tercer problema que se plantea es tratar de tener un modelo completamente ajustado a
los datos de muestras observadas. Sería partir de un histórico de observaciones y a partir de ellas
tratar de inferir los parámetros pertinentes del modelo HMM. Esto se consigue mediante entrenamiento del modelo, realizando un ajuste topológico del mismo y reestimando los parámetros
hasta que el ajuste a las muestras de partida es el mejor posible.
Sobre toda la problemática que se trata de resolver mediante modelos HMM se volverá
más extensamente y en detalle en la parte de algorítmica. Si bien es interesante mostrar la
representación de un HMM de ejemplo y la expansión posible en lo que se denomina Trellis:
80
Likelihood, valor de semejanza, generalmente usado en logaritmos. Este concepto se ampliará en secciones
posteriores.
189
Figura 2.83: Cadena de Markov y la evolución de sus estados.
En la gura anterior, a la izquierda se observa un HMM de ejemplo, y a la derecha se
puede observar un despliegue de hacia donde puede evolucionar cada estado en cada momento
dependiendo de la conexión que tenga con el resto. El modelo en Trellis será usado más adelante
para explicación de algoritmos.
Tipos de HMM
1. Prole Hidden Markov Models. PHMM
Un modelo oculto de Markov basado en perles es una representación de un alineamiento
múltiple. Este alimenamiento múltiple es indicado para encontrar una determinada secuencia.
Generalmente se usa en biotecnología o genética. El usar este tipo de modelos se justica
debido a la facilidad con la que puede cuanticar coincidencias potenciales de nuevas secuencias
proteicas.
Figura 2.84: Ejemplo de PHMM
1. Input Driven Hidden Markov Models, IDHMM
Son modelos de Markov Ocultos que además de quedar denida por:
λ = N, M, {π1}, {aij}, {bi(j)} tienen en consideración entradas externas en cada estado
oculto en cuestión. Queda de la siguiente forma:
190
Figura 2.85: Ejemplo de IDHMM
El modelo queda denido por una sextuplaλ = S, N, M, {π1}, {aij}, {bi(j)} , donde S
son los valores nitos de símbolos de entrada al mismo.
1. Hierarchilcal Hidden Markov Models, HHMM
Esta implementación de modelos de Markov oculto se basa en el establecimiento de una
determinada jerarquía en su interior. La parte superior de la misma por ejemplo podrían ser
estados que emitan frases, justo por debajo estarían otros modelos que representasen palabras,
silabas, cadenas cortas, etcétera. La idea es conseguir desarrollar una estructura lo
sucienmente amplia y genérica para dar cabida a la resolución de problemas con
características determinadas. Un ejemplo aplicado a biotecnología [Skounakis+03]:
Figura 2.86: Ejemplo de HHMM
1. Coupled Hidden Markov Models, CHMM [Zhong+01]
191
Figura 2.87: Ejemplo de integración de cadenas interrelacionadas
Los ejemplos de la gura superior indican la forma en la que se pueden integrar dos cadenas
correlacionadas/acopladas mediante una sucesión estructurada de estados ocultos. Los Modelos
de Markov Acoplados vienen dados por una necesidad de incremento de funcionalidad en los
Modelos de Markov simples. Otra aproximación para establecimiento de correlación entre estados
ocultos que se vean altamente relacionados (se incluyen en este punto los HMM Factoriales
izquierda y los HMM de Entrada-Salida):
Figura 2.88: Otra aproximación para la integración de cadenas interracionadas
Algorítmica
En la sección anterior se han descrito una serie de problemáticas a las que se puede dar
solución mediante los Modelos Markovianos. Las soluciones pasan por ajustarse a determinados
algoritmos para la realización de los cálculos pertinentes. A continuación se detalla el
funcionamiento de los algoritmos que se utilizarán:
1. Evaluación en HMM
Dada una secuencia de observaciones y, la probabilidad P(y) se calcula de las siguientes formas:
Calcular la probabilidad del camino seguido por los estados.
Calcular la probabilidad condicionada de cada símbolo emitido al estado en que se encuentra dado el camino anterior.
192
Suma del producto para el camino de la probabilidad del estado por la probabilidad condicionada de emitir esa observación.
P
P (y) =
x P (x, y)
=
P
x P (x)P (y/x)
Esta ecuación se simplica aplicando el concepto de Markov y asunciones de independencia
condicional. La probabilidad P(x) para el camino x es igual a la probabilidad inicia del estado
x0, por la probabilidad de realizar una transición del estado x0 al estado x1 , por la probabilidad
de pasar de x1 a x2 y así sucesivamente.
P (x) = π(x0 )
τ
Q
a(xt−1 , xt )
t=1
La probabilidad P(y/x) de observar una secuencia y dado un camino x se calcula multiplicando la probabilidad de observar y1 después de transicionar de x0 a x1 por la probabilidad de
observar y2 despues de pasar de x1 a x2 , etcétera.
P (y|x) =
τ
Q
b(xt−1 , xt , y t )
t=1
Y nalmente si se sustituye adecuadamente en la ecuación inicial por las dos anteriores se llega
a la conclusión:
P (y) =
τ
Q
o
a(xt−1 , xt )b(xt−1 , xt , y t )
x π(x )
t=1
P
La evaluación directa de la ecuación anterior implica O(T NT) multiplicaciones, donde N es el
número de estados en el HMM, y donde hay NT caminos a través de la red trellis en que cada
uno de ellos requiere T multiplicaciones.
1. Algoritmo Fordward
Este algoritmo es una altenativa eciente para cuanticar la probabilidad P(y) basado en una
programación dinámica. Este algoritmo calcula las probabilidades de secuencias de
observaciones parciales mediante el uso de probabilidades de observaciones más cortas y sus
posibles estados intermedios. Se denomina algoritmo forward debido a que funciona desde el
comienzo de una secuencia de observaciones hasta el nal.
Si se denomina αt (j) como la probabilidad conjunta en el instante t del estado xj para la
secuencia de observación parcial y1 , . . . , yt :
αt (j) = P (y 1 , ..., y t , X t = xj )
193
La probabilidad P(y1 , . . . , yt ) puede ser calculada marginalizando Xt , esto es, sumar las
probabilidades conjuntas de observar esta secuencia y visitar el estado x en el instante t, para
todo j:
P (y 1 , ..., y t ) =
P
P
P (y 1 , ..., y t , X t = xj ) = αt (j)
j
j
Siguiendo el razonamiento anterior se puede concluir que:
P (y) =
P T
α (j)
j
En base a la demostración anterior, el algoritmo
forward
trata de calcular los coecientes α
inductivamente en la forma que sigue:
α0 (j) = π(xj )
P
αt+1 (j) = αt (i)aij bij (y t+1 ),
para 0 ≤ t ≤ T − 1
En particular, α0 (j) se dene como la probabilidad inicial (a priori) del estado x , y αt+1 (j) se
calcula de la forma siguiente:
Tomar el valor αt (i) para el estado arbitrario xi .
Buscar la probabilidad de transición aij para pasar del estado x al estado x.
Encontrar la probabilidad de observar yt+1 después de transicionar del estado xi al estado
xj.
Y nalmente sumar el producto αt(i)·aij·bij·(yt+1) para todo i.
La complejidad del algoritmo forward es O(T·N2).
194
Figura 2.89: Complejidad del algoritmo Fordward
1. Algoritmo Backward
El algoritmo Backward es otro algoritmo para calcular la probabilidad P(y). Como en el
algoritmo anterior, es un algoritmo para programación dinámica. La diferencia con el anterior
radica en que trabaja desde el nal de la observación al principio de la misma, calculando las
probabilidades de las secuencias de observación parciales, en terminos de probabilidad de
observación de secuencias más cortas, dados los estados intermedios.
Como en el anterior la probabilidad P(yt+1 ,. . . ,yT ) puede ser calculado mediante una
marginalización de Xt : suma las probabilidades conjuntas de observar esta secuencia y visitar el
estado x en el tiempo t, para todo i:
Donde β T (i) denota la probabilidad de observación de la secuencia yt+1 , . . . , yT , cuando el
estado xi se visita en el instante t: β T (i)=P(yt+1 ,. . . ,yT / Xt = x). Teniendo en cuenta que
P(X0 x
) = ) se concluye que:
195
Los valores de β se pueden calcular de la forma siguiente:
Particularmente, β T (i) se inicializa a 1 y β t (i) se procesa así:
mirar la probabilidad de transición para pasar del estado x al estado x
observar la probabilidad de que se de una muestra y en la transición de x a x.
Buscar el valor β t (j) para el estado x, que será la probabilidad de observar la secuencia
(y,. . . ,y) dado x en el instante t.
Sumar el producto a b (y) β (i) para todo i.
La complejidad del algoritmo backward es de O(T N2 ).
Figura 2.90: Complejidad del algoritmo de Backward
196
1. Algoritmo Fordward-Backward
El objetivo del algoritmo Forward-Backward es aglutinar de alguna forma los valores α del
algoritmo forward y los valores β del algoritmo backward. Esto es:
Luego, mediante la marginalización de
X
t
, se consigue:
1. Filtrado y suavizado de las probabilidades. Filtering and Smoothing algorithms
Las probabilidades se pueden ltrar de forma sencilla mediante el uso de los valores [F103?]
para las muestras entre los instantes: 0 ≤ t ≤ T.
Las probabilidades suavizadas son calculadas mediante el uso de los valores [F103?] y β para
las muestras entre los intantes: 0 ≤ t ≤ T.
197
1. Decoding Algorithm (Vitervi)
El problema de la decodicación consiste en encontrar una ruta que maximice la probabilidad
de pasar por esos estados dada una secuencia de observaciones. Como la secuencia de
observaciones es dada, P(y) es constante con lo que:
Cualquier camino de estados ocultos que pertenezca a la maximización arriba indicada es una
solución válida para el problema de la decodicación.
El algoritmo de Vitervi resuelve el problema de la decodicación encontrando subrutas
(x , ..., xt ) tales que ∈ arg máx{x0 , ..., xt }P (x0 , ..., xt , y 1 , ..., y t ).
0
Si se dene:
El algoritmo de Vitervi se calcula inductivamente como sigue:
Simultáneamente, el algoritmo almacena los estados que comprenden el camino más probable:
Para calcular el camino más probable, se va hacia atrás en la traza en la forma que se detalla a
continuación:
198
Donde ahora se puede realizar:
Y en particular:
Figura 2.91: Cálculo del algoritmo de Viterbi
El problema del aprendizaje en HMM
Si se consiguieran pares de valores de estados y observaciones en la forma {(x1,y1),. . . ,(xn,yn)}
sería una cuestión muy sencilla la estimación de los parámetros de una cadena de markov
oculta, HMM λ = (π, A, B)Para maximizar la semejanza81 de los datos al modelo se usarían
81
Semejanza o Likelihood. Valor, logaritmico generalmente, que indica la probabilidad de que una muestra se
ajuste a un determinado modelo de Markov Oculto: P(Muestra/Modelo).
199
contadores frecuenciales relativos para estimar las probabilidades iniciales, de transición y de
emisión:
Donde #Z indica el número total de ocurrencias de un determinado evento Z.
En general, sin embargo, los datos de esta forma no están disponibles. Como su propio nombre
indica, la información de los estados está oculta en un HMM.
1. Algoritmo Baum-Welch
El algoritmo Baum-Welch, es un algoritmo destinado al aprendizaje de parámetros de un HMM
dada una secuencia de observaciones.
Si se denota:
Se puede derivar en base a los algoritmos anteriores:
200
La metodología a seguir para calcular el algoritmo Baum-Welch es la siguiente:
Inicializar λ = (π, A, B)
Iterar hasta conseguir que [λ = (π, A, B)] = [λ0 = (π 0 , A0 , B)]
• Maximización
◦ Ejecutar algoritmo forward para calcular:
◦ Ejecutar algoritmo backward para computar:
◦ Para 1 ≤ t ≤ T, calcular:
• Expectación:
◦ Estimar las probabilidades iniciales:
201
◦ Estimar las probabilidades de transición de
◦ Estimar la probabilidad de transición de
i
a j:
i
a
j
y emitir el símbolo k :
◦ Modelo:
1. Algoritmo Bayesian Merging
Introducción
Este algoritmo propuesto en el año 1994 con referencia [308], ha sido la base para el
aprendizaje automatizado en las partes que conllevan cadenas de Markov.
En el esquema general se pueden encontrar tres tipos de gramáticas probabilísticas:
n-gramas
Modelos de Markov Ocultos (HMM)
Gramáticas estocásticas de Contexto-Libre. (SCFG, Stocastic Context-Free Grammars)
En todas las anteriores sería aplicable este algoritmo en particular.
Problemas a solventar
202
La problemática se ja en encontrar o aprender modelos aplicables a un conjunto de muestras
determinado.
Los modelos probabilísticos más comunes se pueden caracterizar por dos partes:
una estructura discreta (la topología de un HMM, el backbone de contexto libre en un
SCFG)
y una serie de parámetros discretos/contínuos que determinan las probabilidades de las
observaciones que integren el modelo.
El problema radica en la determinación de la estructura. Se ha visto en el apaartado anterior
que el algoritmo baum-welch de partida necesita un modelo base. El hecho de requerir un
modelo de partida obliga a determinar de antemano el número de estados que va a disponer el
modelo en cuestión. Una vez jada la estructura, los parámetros pueden ser ajustados usando
los métodos estandar, como la maximización de similitud82 (ML).
En los modelos de variables/estados ocultos (HMM, SCFG) la estimación típicamente involucra
EM (Expectation Maximization, ej. Baum-Welch), acertado para estructuras prejadas, dado
que puede aprender cualquiera de los comoponentes de un modelo de markov oculto:
λ = (π, A, B):
Explicación funcional
El método denominado Bayesian Merging se puede usar tanto en HMM como en SCFG. Se
trata de realizar diferentes operaciones de unión de subestructuras de un modelo base tratando
de maximizar la probabilidad posterior bayesiana del mismo en base a los datos dados.
Este método se ha propuesto como una alternativa eciente, robusta, y cognitivamente plausible para la construccion de modelos probabilisticos en una amplia variedad de dominios.
Este método se ha propuesto como una alternativa eciente, robusta, y cognitivamente plausible para la construccion de modelos probabilisticos en una amplia variedad de dominios.
Este algoritmo se puede caracterizar de la siguiente forma:
Incorporacion de datos: Dado un cuerpo de datos X construir un modelo inicial M mediante
la acomodación explícita de cada punto individualmente, tal que, Maximice la probabilidad
P(X|M)83 . El tamaño del modelo inicial crecerá con la cantidad de datos y no exhibirá
normalmente una generalización signicativa.
82
83
Maximización de similitud o semejanza o likelihood. Explicada anteriormente en la parte algorítmica.
Donde X será la secuencia de observaciones y M será el modelo HMM en este caso.
203
Mezcla de estructura: Consiste en la construcción de una secuencia de nuevos modelos obteniendo M a partir de M mediante la aplicacion de una generalizacion o merging (operador
m) que se une a la subestructura en M.
En resumen, consiste en construir un modelo base de partida introduciendo explícitamente
cada punto de datos individualmente, de modo que el modelo M 0 maximize la similitud
P(x/M). Esto quiere decir que para cada muestra se tenga la probabilidad más elevada posible
de producirla con el modelo M planteado.
Después de este paso se construye una secuencia de nuevos modelos a los que se le aplica un
operador o función de merging M i+1 = m(Mi ). Las operaciones que realiza m() son dependientes del tipo de modelo, pero en general todo modelo se puede explicar por unas subestructuras
separadas.
Para comprobar la bondad de ajuste de un modelo i+1 con respecto al anterior se utiliza la
fórmula de Bayes (probabilidad posterior):
Esta fórmula como se puede apreciar es proporcional a la probabilidad apriori P(M) y a la
similitud P(x/M). El denominador a la hora de realizar la maximización no necesita ser tomado
en consideración, no depende de M, con lo que puede ser ignorado.
Por último, se necesita encontrar una estrategia para encontrar modelos con la más alta
probabilidad posterior posible. La que se usa en este caso es la denominada BEST-FIRST.
Empezando con el modelo inicial (maximiza la similitud, pero tiene generalmente una baja
probabilidad apriori) se exploran todos los posibles pasos de mezcla (merging). Sucesivamente se
va escogiendo uno (greedy search, búsqueda ávida) o unos (beam search, búsqueda de haz) que
den el mejor incremento inmediato en la probabilidad posterior.
En la práctica, para mantener funcionando correctamente a los modelos en un tamaño manejable, se puede usar una versión "on-line" para el algoritmo de mezcla, en el cual la incorporación
y los estados de mezcla/búsqueda estén intercalados.
Aplicación del modelo de mezcla en las gramáticas probabilísticas.
204
El caso que se esta estudiando se centra en los modelos de Markov Ocultos, HMM. La
aplicación del modelo de mezcla en estos modelos se realiza acorde a lo explicado en los
siguientes párrafos:
1. Para cada muestra observada se crea una única ruta (path) entre el estado inicial y el
nal asignando un nuevo estado para símbolo token en la misma. Es decir, si se dan los
datos ab, abab el modelo inicial es el siguiente:
2. En el proceso de mezcla, dos estados antiguos del HMM son reemplazados con un único
nuevo estado. Éste estado hereda la unión de las transiciones y emisiones de los estados
anteriores. Una muestra para el ejemplo anterior:
205
3. El punto crucial es que cada uno de estos modelos puede ser encontrado maximizando la
probabilidad posterior del HMM. El punto de parada es cuando se consigue un modelo
que produce un salto muy elevado en el término de similitud, decrementando
considerablemente la probabilidad aposteriori del modelo.
Distribuciones previas.
La aproximación se elige de forma "desinformada apriori", esto amplía la probabilidad apriori a
lo largo de todos los posibles HMMs sin dar preferencia explícita a topologías particulares. Un
modelo M es denido por su estructura M y sus parámetros continuos θ. De esta forma se
puede descomponer la probabilidad del modelo apriori en lo siguiente:
206
Además hay que tener en cuenta que las estructuras de los modelos reciben la probabilidad
apriori de acuerdo a su
longitud de descripción :
l(M) es el número de bits necesarios para codicar M, por ejemplo: número de bits necesarios
para codicar todas las transmisiones y emisiones.
Las probabilidades apriori para θ , son asignadas en base a la distribución de Dirichlet para
cada parámetro multinomial de transición y emisión, parecido a un arbol de decisión Bayesiana
[Buntine92]. Por conveniencia del modelado se asume que los parámetros asociados a cada estado
son apriori independientes.
Hay tres formas intuitivas de conocer el por qué las simples prioridades como las planteadas
en este apartado pueden conducir a probabilidades posteriores mayores para los modelos HMM.
Estas aproximaciones se demuestran debido a:
Las topologías pequeñas tienen una longitud de descripción menor, y por ello una probabilidad apriori mayor. Esto se corresponde con la intuición de que una estructura más grande
necesita ser seleccionada de un mayor rango de posibles alternativas equiprobables, por lo
que cada elección individual es menos probable en forma a priori.
Los modelos más grandes tienen más parámetros, por ello se hace que cada parámetro en
particular sea menos relevante. Se conoce también como factor de Occam [Gull98].
Después de que dos estados hayan sido unidos, la cantidad de datos efectiva para cada
parámetro se aumenta (la evidencia para las subestructuras mezcladas se junta). Esto
cambia y encumbra las distribuciones posteriores para esos parámetros más cercanos a las
conguraciones de máxima similitud.
1. Cómputo Posterior
El objetivo del procedimiento de inferencia es la estructura del modelo, luego como se ha dicho,
el objetivo es maximizar la probabilidad posterior del modelo:
207
El motivo matemático para maximizar la parte estructural en vez de simplemente P(M/x),
es que con nes inferenciales un modelo con una estructura posterior elevada representa mejor
la aproximación del procedimiento óptimo de Bayes para promediar todos los posibles modelos
M. Esta armación anterior se puede calcular de la siguiente forma:
Si bien, puede ser aproximada usando la suposición común de Vitervi sobre las probabilidades
en los HMMs.
208
Cuadro 2.5: Implementación del algoritmo
209
Otras cuestiones de implementación relacionadas
• Incorporacion eciente de muestras:
En el caso más simple este paso crea un estado dedicado para cada instancia de símbolo en
cada una de las muestras X. Estos estados son enlazados con transiciones de probabilidad a 1,
de tal modo que una muestra (x...x) es generado por una secuencia de estados (q...q). q puede
ser alcanzado desde q a través de una trasición de probabilidad 1/X, donde X es el número
total de muestras. Todos los estados emiten su correspondiente símbolo de salida xi con una
probabilidad de uno.
De esta forma, muestras repetidas llevan a multiples caminos a lo largo del modelo, todos
ellos generando el mismo string de entrada. La probabilidad total de un string x de acuerdo al
modelo inicial es entonces c(x)/X (la frecuencia relativa del string x). Como se ha introducido
anteriormente de esta forma se constituye el modelo de maxima similitud con los datos de X.
Denotar que los estados correspondientes en caminos equivalentes podrían ser mezclados sin
tener por ello una perdida en la similitud del modelo. Esto es básicamente lo que va haciendo el
algoritmo en las fases iniciales.
Una optimización en este estado es evitar la multitud de rutas y comprobar para cada nueva
muestra si ya esta introducida en una ruta existente. Caso de que sea de esta forma sólo habra que
actualizar la probabilidad de transmision inicial. Usando una extension del algoritmo de Viterbi,
la nueva muestra puede ser alineada con los estados existentes en el modelo, reclutando nuevos
estados sólo cuando y donde sea necesario. Este alineamiento no tiene efecto en las posibles
mezclas, no va a generar ciclos, pero si que puede reducir el número inicial de estados en el
modelo.
Cálculo de los candidatos a mezclarse
El caso general es examinar todos los posibles pares de estados en el modelo actual:
Como se puede apreciar, lo mejor es mantener el modelo con pocos estados, para evitar unos
costes elevados de cómputo. El coste de una mezcla está generalmente dominado por el coste de
mezclar las distribuciones de salida de los estados involucrados. Debido a lo anterior, conviene
en este caso indexar los estados de acuerdo a sus características de emisión y considerar solo
pares de estados que tengan similares entradas. Esta restricción se podría eliminar más adelante
después de que se hayan agotado todas las posibilidades de mezclas. El benecio es claro, dotar
210
al algoritmo de rapidez, y en casos de uso incremental previene de mezclas prematuras que a la
luz de nuevos datos deberían mantenerse separadas.
Evaluación del modelo usando rutas de Vitervi
Para encontrar la probabilidad posterior de un modelo potencial, necesitamos evaluar la
estructura inicial P(M).
El objetivo de la maximización puede ser MAP (Maximun Posterior Probability), cuyos
parámetros pueden calcularse a través del algoritmo Baum-Welch, teniendo en cuenta la condición
de inicio de Dirichlet tomada.
Por otro lado otro objetivo puede ser la evaluación de P(x/M s ), cuya solución no tiene una
solución obvia. Para solventar esta situación y la anterior se puede hacer uso de la aproximación
de Vitervi.
Computación de similitud
La probabilidad exacta de la similitud de un modelo con referencia a un cojunto de datos X, es
dada por el producto de cada una de las probabilidades de la muestra con la siguiente ecuacion:
Esto se puede leer como el productorio de la probabilidad de todas las muestras posibles que
haya. Y la probabilidad de las muestras se puede obtener calculando sucesivamente la probabilidad de pasar del estado Inicial al estado 1 por la probabilidad de que el estado 1 emita el
símbolo x1 de la muestra... y as sucesivamente hasta llegar al nal del "string" /Muestra/Cadena
en cuestión.
La aproximación de Viterbi implica el reemplazo de los sumatorios de todas las muestras por
los terminos con la contribucion mas elevada:
Los términos en esta expresión pueden ser agrupados por estados, llegando a la forma:
211
En esta ecuación anterior los componentes c(q→q) y C(c→σ ) son los contadores totales de
transiciones y emisiones que ocurran a lo largo de las rutas Viterbi asociadas a las muestras de
X. Si se usa la notación de c(q) para la colección de contadores de Vitervi asociados con el estado
q, la fórmula anterior quedará:
MAP parameter estimation.
Para estimar aproximadamente el parametro MAP basado en contadores de ruta Viterbi se han
de modicar los parametros para incluir las condiciones de Dirichlet.
Para implementar esta evaluacion hace falta aproximar la siguiente integral:
Aplicando una serie de aproximaciones basadas en las rutas óptimas de Vitervi y aplicación
de las prioridades de Dirichlet se puede llegar a obtener una formula más simple.
Actualizacion de ruta usando Viterbi de manera optimista.
Consiste basicamente en creer que los estados mezclados preservan las rutas de maxima
representacin de Vitervi. Para ello se requiere que los contadores intermedios de Vitervi se
mantengan durante la fase de mezcla.
212
Capítulo 3
ESIDE-Mendizale Un Framework
Bayesiano de detección de intrusiones
En este capítulo se explica el modelo conceptual de la solución dividiendo éste en nueve puntos, según el modelo conceptual propuesto por Emilie Lundin. Dichos puntos son: Formalización,
Captura de información, Análisis, Respuesta, Fortaleza, Cuestiones operacionales, Evaluación
y Aspectos sociales. De esta forma se obtiene una visión global del Modelo Conceptual de la
solución propuesta.
3.1. Análisis de riesgos y formalización
Este aspecto es fundamental a la hora de la implementación del modelo puesto que estos
parámetros constituyen las variables que tendra éste. Para dilucidar cuáles serian los parámetros
sensibles de mostrar una actividad anómala de los procesos, se ha realizado un estudio, primero
del estado del arte en cuestiones de sistemas de monitorización de actividad de sistemas, que
puede verse en puntos anteriores. Así como un estudio de cuáles pueden ser los valores susceptibles
de ser monitorizados para detectar dicha actividad anormal.
3.1.1. Posibles parámetros
En este punto se hace un repaso de todos parámetros manejados durante el desarrollo del
proyecto. Estos parámetros son medidas que se toman en los sistemas monitorizados, que permiten dilucidar si el equipo se encuentra comprometido o no. Para obtener dichos parámetros,
se han seguido las variables que un estudio previo de las soluciones ya realizadas en éste ámbito
utilizaban para sus desarrollos.
Estos parámetros se pueden dividir en dos grandes grupos muy diferenciados, por una
parte, las medidas que se pueden utilizar para realizar un proling de usuario [236], que
sirven para dilucidar si lo que el sistema está realizando es lo que el sistema suele realizar
213
Figura 3.1: Imagen del monitor de anomalías desarrollado por Teresa F.Lunt y R. Jagannathan.
para un usuario concreto, y por otra parte los parámetros que persiguen dilucidar si un
proceso realiza las acciones que suele realizar.
Estas dos aproximaciones permiten detectar las intrusiones a dos niveles completamente diferentes: por una parte, la detección de intrusiones basada en proling de usuario, permitiría detectar
intrusiones a nivel de usuario, es decir, podría resolver que el usuario actual, no es1 el usuario
que conocía. El otro método, permite controlar la utilización anómala de los recursos para cada
proceso. Es decir, permite realizar un proling de procesos.
Cada una de las técnicas conllevan un tipo de detección diferente y unos resultados diferentes
que se comentarán en los siguientes apartados.
Parámetros de proling de usuario
Estudios anteriores[236], demuestran que un proling de usuario, permite grandes tasas de
acierto sobre la variación de comportamientos de usuario, observando cierto numero de parámetros que permiten discernir un usuario sobre otro. Por lo tanto este método, aprendiendo el perl
de un usuario, se puede llegar a detectar una utilización anómala, tal y como habían anticipado
mucho tiempo antes[21].
Este sistema de proling de usuario para detección ha sido implementado por varios [236, 21,
117] sistemas, los cuales se enumerarán los parámetros que han manejado para dichos trabajo.
Teresa F. Lunt and R. Jagannathan, Experto de detección de intrusiones
El documento [236], expone la creación del experto de detección de intrusiones basado en
un experto que generaba perles de los usuarios. En dicho trabajo, utilizaban los siguientes
parámetros, divididos en dos grandes grupos, variables discretas y continuas:
1
O al menos se comporta de una manera totalmente diferente.
214
Variables discretas: Este tipo de variables tienen un rango de valores nito, se trata de un
conjunto de valores que se utilizan para caracterizar aspectos del usuario. Cada perl de
usuario está compuesto en parte por un conjunto de variables discretas y la probabilidad
de que el usuario cumpla dicho valor.
1.
Time of login :
Se trata del número de sesiones que un usuario inicia en un periodo de
veinticuatro horas. Asimismo, cada periodo de veinticuatro horas se encuentra dividido en
tres categorías diferentes: el periodo de día, periodo de tarde y periodo de cementerio2 , el
cuál no debería haber nadie. Cada login es caracterizado en alguno de estos tres periodos.
2.
Location of login :
Localización del login, es el número de sesiones que un determinado
usuario ha iniciado en un determinado lugar. La estación desde la que se conecta el usuario, puede bien estar directamente conectada con el servidor, bien puede estar conectado
mediante un multiplexor, o estar conectado remotamente. Cada localización diferente sería
un valor discreto dentro de la localización del login.
Variables continuas: Este tipo de variables tienen un rango de valores innito, es decir, que
pueden tomar cualquier valor, dado que son variables que van aumentando (los valores se
van acumulando), conforme la sesión va avanzando. Cada perl de usuario, maneja una
probabilidad condicionada de que se den los valores acumulados medios de las sesiones
anteriores. Asumiendo distribuciones normales a este tipo de variables se puede conseguir
el porcentaje de ajuste del valor actual con la normalidad3 . Para realizar el estudio normal,
se utilizaron los valores de los último 50 días para poder permitir un grado de cambio
gradual a los usuarios. Las variables estudiadas fueron las siguientes:
1.
Connect time :
Tiempo de conexión, que es la duración de una sesión en un sistema. Como
un sólo usuario puede iniciar varias sesiones en un mismo sistema4 , se identica cada una
de las sesiones con un identicativo de trabajo, y cuando se acaba la sesión, se cierra cada
uno de los trabajos creados.
2.
CPU Time :
Tiempo de CPU, es la suma del tiempo de procesamiento utilizado en una
sesión.
3.
IO Activity :
Actividad de entrada y salida, la suma de las actividades de entrada / salida
realizadas en una sesión.
4.
Protection Violations :
Violación de protecciones, es el número de violaciones de acceso
de los permisos acumulados en la sesión.
2
Traducción literal de Graveyard period , supuestamente en este periodo de tiempo no debería haber ningún
tipo de actividad en el sistema auditado. Considerando el inglés estadounidense también puede ser una variación
de Graveyard shift, que signica turno de noche.
3
4
Asumiendo que las interacciones anteriores eran interacciones normales.
Como es usual en sistemas Unix-Like.
215
Este sistema desarrollado, permitía detectar el 95 % de los ataques masquerade 5 , en tiempo real,
mostrando una interfaz que permitía al administrador de sistemas de conocer y tomar contra los
eventos anómalos detectados con el conjunto de parámetros anteriores.
Dorothy Denning
Dorothy Denning en su documento[105] establece un modelo en el que dene los siguientes
parámetros, todos ellos discretos para determinar si un sistema estaba siendo comprometido.
1.
Frecuencia de login :
Se trata de un parámetro discreto que reeja las veces que un usuario
se conecta a un servidor. También puede interpretarse como un parámetro para IDS de red
si se considera contra un servidor.
2.
Frecuencia de localización :
Parámetro discreto a nivel de host que reeja, como su nombre
indica las veces que se conecta un usuario desde un determinado lugar. También se puede
interpretar como parámetro a nivel de red si la validacion se hace contra un servidor.
3.
Ultimo login :
Parámetro discreto a nivel de host reeja como su nombre indica cuando se
produjo el último login del usuario. También se puede interpretar como parámetro a nivel
de red si la validación se hace contra un servidor.
4.
Tiempo entre sesiones :
Parámetro discreto a nivel de host que reeja, como su nombre
indica, el tiempo entre dos sesiones. También se puede interpretar como parámetro a nivel
de red si la validación se hace contra un servidor.
5.
Output de la sesión :
Este parámetro indica la cantidad de tráco generada durante una
sesión.
6.
Carga de CPU, IO,... etc de la sesión :
Se trata de un parámetro discretizado, que marca la
carga de entrada/salida y CPU que genera una sesión. Este parámetro puede considerarse
continuo, y suponer que sigue una ley normal para poder obtener una salida que marcase
la normalidad del mismo. D. Denning, ha discretizado este dato, en vez de utilizar leyes
normales para tratar estos parámetros.
7.
Numero fallos en contraseña:
Parámetro discreto a nivel de host reeja, como su nombre
indica, el intentos de validación fallidos. También se puede interpretar como parámetro a
nivel de red si la validación se hace contra un servidor.
8.
Frecuencia de ejecución :
Parámetro discreto a nivel de host reeja, como su nombre indica,
la frecuencia con que se ejecuta un determinado programa.
9.
Numero de ejecuciones denegadas :
Parámetro discreto a nivel de host que indica el número
de ejecuciones denegadas de un determinado programa.
5
Ataque de suplantación de usuario.
216
10.
Carga de CPU, IO,... etc del programa :
Parámetro discreto a nivel de host reeja, como
su nombre indica, el throughput de un determinado programa.
11.
Numero de veces que un programa se queda sin recursos :
Parámetro discreto a nivel de host
que indica el número de veces que un determinado programa se queda sin recursos.
12.
Frecuencia de lectura, escritura, creado y borrado de un chero :
Parámetro discreto a ni-
vel de host que reeja, como su nombre indica, la frecuencia de operaciones IO de un
determinado programa sobre los cheros.
13.
Registros leídos/escritos :
Parámetro discreto a nivel de host que reeja, como su nombre
indica, la frecuencia de operaciones IO de un determinado programa sobre los cheros.
14.
Fallos de lectura, escritura, creado y borrado de un chero :
Parámetro discreto a nivel de
host que reeja, como su nombre indica, los fallos de operaciones IO de un determinado
programa sobre los cheros.
15.
Fallos por excesivo uso de recursos por parte de un chero :
Parámetro discreto a nivel de
host que indica el número de veces que un determinado chero se queda sin recursos.
Una idea que se puede extraer de este documento es la organización del modelo en una serie de
planos o esferas conceptuales que represente diversos aspectos tales como tiempo, lugar por poner
algunos ejemplos sencillos. De esta forma se tiene un plano temporal, un plano de ubicación. Así
se podría conseguir analizar datos heterogéneos de forma homogénea muy fácilmente.
Además también se pueden ver dos aspectos importantes de los planos en los que se está
dando la auditoría en el sistema, tanto a nivel de proceso, como a nivel de usuario, para poder
monitorizar a nivel de usuario, o de proceso.
Parámetros de proling de proceso
Como se ha explicado anteriormente existen multitud de parámetros para modelizar el comportamiento de un usuario para con el equipo, pero muchos ataques no se producen por suplantación de usuario, sino que se dan al hacer que un proceso presente un comportamiento diferente
al que debería llegar. Por lo tanto, para llegar a detectar ataques que no son de suplantación de
usuario, habría que llegar a un nivel mas bajo: al proling de proceso[285].
Primeramente, hay que hacer una diferenciación entre el código fuente y los procesos. Los
procesos, son código fuente en proceso de ejecución, es decir el código fuente6 solo es el guión de
lo que se ejecuta, luego lo que se ejecuta es el código fuente cargado en memoria, con sus valores
su puntero de ejecución y su pila de valores, es decir, un proceso.
Cuando los procesos se están ejecutando, no interactúan directamente sobre el hardware del
sistema, sino que utiliza la abstracción que el sistema operativo provee a los programas para con
6
También conocido como código muerto.
217
los componentes. Si este sistema no funcionase de esta manera, el software sería especico de
una máquina concreta, dejando de funcionar cuando el software se ejecute sobre un hardware
diferente.
Para que este echo ocurra7 , el sistema operativo provee de un conjunto de rutinas
que abstraen a al software de los entresijos del funcionamiento del hardware, y permiten
ejecutar códigos fuente entre diferentes máquinas con diferente HW8 . Los mismos formatos ejecutable (Tanto PE para sistemas Windows como los COFF para formatos Unix), funcionan de
esta manera, reservando espacio para las llamadas a el núcleo que realiza el acceso al Hardware.
Figura 3.2: Arquitectura interna de los sistemas operativos
De la misma manera la arquitectura de los procesadores actuales, implementan en Hardware
todas estas capacidades de los sistemas operativos. Existen varios niveles de privilegio (también
conocidos como Rings), los cuales implementan a nivel hardware el funcionamiento interno del
sistema operativo descrito anteriormente.
Por lo tanto, para realizar un proling de proceso, hay que monitorizar la actividad del
proceso, esta actividad puede abordarse mediante dos perspectivas diferentes, monitorizando la
interacción de los procesos con el kernel, o observando externamente al proceso.
Parámetros de monitorización externa de procesos.
Los parámetros de monitorización externa de procesos, realizan un perl del aspecto externo
del proceso, es decir, sin analizar ningún tipo de llamada al sistema.
Estas variables son varias de las que explica D. Denning[105] en el artículo de monitorización
de usuarios. Estos parámetros son:
Consumo de memoria de un proceso.
E/S de un proceso.
7
8
Que exista la posibilidad de ejecutar software sobre plataformas Hardware diferentes.
Pos supuesto, nos referimos a HW similar, pero distinto, por ejemplo la utilización de un procesador AMD
o intel ó una tarjeta ATI, o una tarjeta Nvidia; en ningún caso cambios de HW tan grande que afecten a los
programas de zona de usuario como puede ser la utilización de una arquitectura de 64 y 32 bits.
218
Figura 3.3: Abstracción a dos niveles en sistemas Linux
Consumo CPU de un proceso.
Frecuencia de ejecución.
Fallos de escritura / lectura.
Fallos en los permisos.
Hay que resaltar que el método de monitorización externa de procesos, presenta un alto índice
de fallos, dado que los parámetros considerados, son susceptibles a grandes cambios por la carga
del sistema, y no sólo a la acción de ataques y /o intrusiones tanto externas como internas.
Parámetros de monitorización interna de procesos.
Los procesos, en los sistemas operativos modernos necesitan acceder a servicios provistos por
el sistema operativo para realizar acciones para con su entorno. Esta abstracción, permite que
un mismo código pueda ejecutarse en diferentes sistemas.
Pero esta abstracción no es la única que existe, dado que la cantidad de hardware disponible,
y lo diferentes que son entre sí, hacen que una API de kernel permanente y estándar sea algo
excesivamente rígido, por lo que también se da una abstracción a nivel de usuario, mediante
librerías, que son las que realizan las llamadas a las funciones del Kernel. En los sistemas Windows, la API al nivel de aplicación (en ring3), es conocida como la API Win32, que se encuentra
implementada en diversas DLL del sistema. En los sistemas Linux, esta API, es conocida como
la glibc, aunque también existen otras librerías menos importantes que también llaman al kernel,
como pueden ser la X11 o la librería de sincronización pthread, las cuales están recogidas en el
estándar POSIX.
Por lo tanto, en todos los sistemas operativos modernos, existen dos tipos de posibilidades
para realizar una monitorización interna de procesos, una de ellas, monitorizando las llamadas
219
a la librerías que implementas las API a nivel de usuario, es decir, monitorizar las llamadas a
las librerías Win32, glibc... o bien realizar una monitorización a nivel de llamadas desde dichas
librerías al kernel.
Las llamadas a las librerías de zona de usuario que abstraen las llamadas al kernel, y la
intercepción de este tipo de llamadas producirían una salida de más alto nivel, que permitiría
generar un proling a mayor nivel, pero como contrapartida, se genera gran cantidad de información que puede considerarse como ruido. Este inconveniente puede enmascarar las evidencias que
muestran un ataque. En éste ámbito existen varios sistemas[140]9 , que implementan la captura
de datos a este nivel.
Tal y como se comenta en estudios anteriores[247], la monitorización de todas las llamadas
de este tipo causa una gran sobrecarga sobre el sistema dado que los programas actualmente
hacen un uso exhaustivo de las rutinas en este tipo de librerías. Pero lo que también se reeja en
el estudio es que resultaría altamente interesante monitorizar algunas de las llamadas a librerías
externas como pueden ser por ejemplo el API de Winsock10 en sistemas Windows.
El prototipo de estas funciones es en C, y exportan servicios a los programas para que éstos
los consuman.
Listing 3.1: Prototipo de función VirtualAlloc de la API Win32.
LPVOID V i r t u a l A l l o c (
LPVOID lpAddress ,
SIZE_T dwSize ,
2
DWORD f l A l l o c a t i o n T y p e ,
DWORD f l P r o t e c ) ;
Listing 3.2: Prototipo de la función malloc para sistemas linux provista por el API de glibc.
void
∗ malloc ( size_t s i z e ) ;
La otra opción de monitorización interna de procesos son las syscalls o llamadas al sistema
que generan los programas, éstas bien pueden estar generadas por las librerías o directamente por
los programas que llaman a la función sysenter o bien la interrupción 2e en sistemas Windows o
a la interrupción 80 en sistemas GNU/linux.
Este tipo de parámetros han sido utilizados en estudios anteriores [279, 374, 37, 199, 126,
375, 194], estando demostrado[134] que una alteración del comportamiento o de la naturaleza de
los procesos provoca un cambio de las syscalls que se ejecutan en el nivel privilegiado del sistema
operativo.
Estas llamadas, están formados por un código de función11 , y por un número variable de
9
También existe para los sistemas GNU/Linux, las librerías ltrace, que permiten una auditoría de los programas
a este nivel de abstracción.
10
Especicación de la API de comunicación mediante red en sistemas Windows, actualmente se encuentra en
la versión número dos. Mas información en http://www.sockets.com/.
11
Que se almacena en el registro eax del procesador cuando se realiza la llamada a la interrupción.
220
argumentos que se almacenan también en los registros. Por lo tanto cada llamada al sistema
posee un prototipo, identicado por un número de llamada.
Listing 3.3: Prototipo de syscalls write (código 4) y kill (código 37) de sistemas GNU/linux
long
k i l l _ s a v e d ( pid_t , i n t ) ;
long
write_saved ( int , const char ∗ , s i z e _ t ) ;
Listing 3.4: Prototipo de la función NTCreateFile del kernel de Windows
NTSTATUS N t C r e a t e F i l e (
PHANDLE F i l e H a n d l e ,
ACCESS_MASK D e s i r e d A c c e s s ,
POBJECT_ATTRIBUTES O b j e c t A t t r i b u t e s ,
PIO_STATUS_BLOCK I o S t a t u s B l o c k ,
4
PLARGE_INTEGER A l l o c a t i o n S i z e ,
ULONG F i l e A t t r i b u t e s ,
ULONG ShareAccess ,
ULONG C r e a t e D i s p o s i t i o n ,
ULONG CreateOptions ,
9
PVOID EaBuffer ,
ULONG EaLength ) ;
3.1.2. Selección realizada
Finalmente los parámetros utilizados para el proyecto han sido las syscalls o llamadas al
sistema, los argumentos a favor de esta decisión se encuentra detallada a continuación:
Realiza un modelado del comportamiento de cada proceso:
Es decir, no solamente genera
perles de los usuarios[236], sino que se realiza un proling de proceso, el primer enfoque
es particularmente preciso a la hora de reconocer ataques de suplantación pero hoy en día
uno de los mayores problemas con los que se encuentra la seguridad hoy en día son los
conocidos como
buer overows
12
[269],
que modican el comportamiento de cada proceso
para poder realizar acciones arbitrarias sobre el sistema a nivel de proceso. Con el proling
de usuario, los ataques realizados mediante buer overows puede ser detectado, pero será
inherentemente mas lento e inexacto que un proling de proceso en el cuál se mantiene
un modelo de proceso y no de usuario; detectando inmediatamente si un proceso está
realizando acciones arbitrarias que no debería ejecutar dicho proceso con respecto a la
normalidad.
12
También conocidos como desbordamiento de buer, se trata de realizar sobre los programas acciones que per-
mitan ejecutar código arbitrario. Usualmente se utiliza la técnica de sobreescribir mediante copias no controladas
el valor de retorno almacenado en la pila del proceso.
221
Se trata de un mecanismo similar en todos los sistemas operativos modernos :
La mayoría
de lo sistemas operativos modernos implementan un mecanismo de comunicación entre los
procesos en zona de usuario y el kernel en ring 0, con privilegios para ejecutar cualquier
acceso al hardware, y es similar en todos los sistemas estudiados, lo que reduce los problemas
de integración entre los datos de diferentes plataformas.
En casi todos los sistemas operativos se encontraban ya implementados [375,
38] sistemas
de recogida de datos parecidos al que habíamos de implementar. Esto presenta la ventaja
de que se sabe de antemano que la auditoría de dichos parámetros es posible.
Permite la correlación de syscalls entre diferentes sistemas,
es decir, se puede realizar un
estudio de las syscalls que genera un proceso apache (por poner un ejemplo) en un sistema
GNU/Linux y en un sistema Windows.
Genera una menor cantidad de información,
el sistema implementado necesita la mayor
brevedad posible para poder tomar acciones con la mayor brevedad posible, y un volumen de
datos mayor[247] aumenta el tiempo necesario para aprender tanto la normalidad como para
aprender la estructura de los datos aprendidos. Aunque, conceptualmente puede percibirse
que parte de la información vital para la detección de anomalías se haya perdido, en realidad
dichas anomalías se encuentran también[134] en las syscalls de más bajo nivel. De esta
manea al reducir la cantidad de datos, se elimina una gran cantidad de ruido13 .
A menor nivel que la mayoría de infecciones de malware,
la mayoría[315, 247] de las infec-
ciones de malware utilizan la técnica de interceptar las llamadas a nivel de API del sistema,
por lo que si el sistema de recolección se encuentra en el mismo nivel, puede que el malware
haga que el sistema de recogida de datos no capte las acciones realizadas por el sistema, al
interceptar las llamadas a las API del sistema a un nivel más alto del que lo hace el sistema
de recolección de datos.
Proporciona datos que permiten detectar comportamientos anómalos,
que ya ha sido de-
mostrado por estudios anteriores[134], y que han sido la base de multitud de estudios
relacionados con la seguridad anteriormente[199, 126, 131, 375, 194, 309].
Las razones anteriores, han echo que la elección de parámetros para el sistema haya sido utilizar las llamadas al sistema para utilizarlas como parámetro en el sistema implementado en el
proyecto.
En el sistema se han utilizado las partes que integran una llamada al sistema:
Función llamada: Habitualmente ha sido el parámetro utilizado, para detectar desviaciones
en el comportamiento de los procesos, normalmente no se utiliza el nombre de la función
sino que se utiliza el número que idéntica unívocamente cada syscall.
13
Como ruido, se considera los datos que no tienen una representatividad y difuminan la importancia de los
que sí que la tienen.
222
Parámetros de la función: Los parámetros han sido siempre ignorados, hasta que un estudio[372]
demostró que conociendo el sistema que iba a auditar el proceso, era posible engañar al
sistema, emulando la cadena de syscalls que sería lícita en el sistema mediante llamadas a función que realmente no hacían nada. Este tipo de ataques denominados
mimicry,
hicieron necesaria la inclusión de los argumentos como parámetro a incluir en estudios
posteriores[68].
Valor de retorno de la función: El parámetro del valor de retorno[95, 233] , ha sido incluido
en varios estudios actuales de modelización de secuencias de llamadas al sistema.
Como puede apreciarse, cada llamada genera tres parámetros de entrada al sistema, que permiten
realizar una modelización a bajo nivel, para poder realizar una modelización de comportamiento
de procesos, y no de usuarios.
3.1.3. Futuros parámetros
Como futuros parámetros se establece la línea de investigación que se abre para correlacionar
los parámetros de un entorno de red con los parámetros que se contemplan del entorno de host.
Estos parámetros permitirían establecer una serie de esferas /planos de análisis, de forma, que
se integren en el análisis homogéneo parámetros heterogéneos.
Por lo tanto, un análisis de datos heterogéneos, puede dar relaciones entre los dos mundos
ampliamente separados desde sus inicios, como pueden ser los HIDS, y los NIDS.
A continuación se describen los posibles parámetros relacionados con el mundo de la red que
pudieran ser utilizados conjuntamente con los parámetros que ya han sido expuestos anteriormente.
Para obtener estos parámetros se tuvieron en cuenta fuentes como los protocolos IP, TCP,
UDP e ICMP, el sistema de detección de intrusos Snort y el proyecto Lerad [364] por citar
algunos. De forma general para todas las tablas, aquellos parámetros en los que el tipo se indica
Binario / Discreto
es porque se pueden implementar de las dos formas; por ejemplo, para
el parámetro Ipopts de Snort este se puede implementar de forma discreta con una variable
que contenga nueve estados o bien, de forma binaria mediante nueve variables (una para cada
estado) que contenga tan solo dos estados. Y también que en aquellos sitios donde aparece
cuanticable
No
es que el parámetro tiene naturaleza discreta pero los valores que pueden contener
son aleatorios.
Formato de las tramas
En este punto se explica el formato de las tramas IP, TCP, UDP, ICMP y se comentan los
posibles valores que pueden tomar y con qué tipo de variables se pueden representar. Se han
elegido estos protocolos puesto que son fundamentales en las redes Ethernet actuales.
223
Formato trama IP
El protocolo IP (Internet Protocol, IP) es un protocolo no orientado a conexión usado tanto
por el origen como por el destino para la comunicación de datos a través de una red de paquetes
conmutados. [8]
El formato de su datagrama es el siguiente, según [RFC791]:
Figura 3.4: Formato IP
El tipo y los posibles valores cada parámetro de este datagrama se detallan en la siguiente
tabla.
Parámetro
Tipo
Valores posibles
Versión
Internet Header Lenght
Tipo de servicio
Longitud Total
Identicador
Dont Fragment (DF)
More Fragment (MF)
Desplazamiento del fragmento
Tiempo de vida
Protocolo
Suma de comprobación
Dirección Origen
Dirección Destino
Discreto
Discreto
Discreto
Discreto
Discreto
Binario
Binario
Discreto
Discreto
Discreto
Discreto
Discreto
Discreto
4ó6
24
24
216
No cuanticable
0-1
0-1
213
26
26
216
232
232
Cuadro 3.1: Tipo y valores posibles de cada parámetro
224
Formato de TCP
El protocolo de control de transmisión ('Transmission Control Protocol', TCP) está pensado
para ser utilizado como un protocolo 'host' a 'host' muy able entre miembros de redes de comunicación de computadoras por intercambio de paquetes y en un sistema interconectado de tales
redes. [10]
Su formato según [10] es el siguiente:
Figura 3.5: Formato TCP
El tipo y los posibles valores cada parámetro de este protocolo se detallan en la siguiente
tabla.
Parámetro
Tipo
Valores posibles
Puerto origen
Puerto destino
Número de secuencia
Número de conrmación (ACK)
Desplazamiento
URG
ACK
PSH
RST
SYN
FIN
Ventana
Checksum
Puntero Urgente
Opciones + Relleno
Datos
Discreto
Discreto
Discreto
Discreto
Discreto
Binario
Binario
Binario
Binario
Binario
Binario
Discreto
Discreto
Discreto
Discreto
Discreto
216
216
212
212
24
0-1
0-1
0-1
0-1
0-1
0-1
216
216
216
No cuanticable
No cuanticable
Cuadro 3.2: Tipos y posibles parámetros del protocolo TCP
225
Formato UDP
Este Protocolo de Datagramas de Usuario (User Datagram Protocol, UDP) asume que el
protocolo IP se utiliza como protocolo subyacente. Este protocolo aporta un procedimiento para
que los programas de aplicación puedan enviar mensajes a otros programas con un mínimo de
mecanismo de protocolo. El protocolo se orienta a transacciones, y a la entrega como la protección
ante duplicados no se garantizan. Las aplicaciones que requieran de una entrega able y ordenada
de secuencias de datos deberían utilizar el protocolo TCP. [11]
Su formato según [11] es el siguiente:
Figura 3.6: Formato UDP
El tipo y los valores de cada parámetro de este protocolo se detallan en la siguiente tabla.
Parámetro
Tipo
Valores posibles
Puerto Origen
Puerto Destino
Longitud
Checksum
Discreto
Discreto
Discreto
Discreto
216
216
216
216
Cuadro 3.3: Tipos y posibles parámetros de UDP
Formato ICMP
El protocolo IP se utiliza para el servicio de datagramas de "host" a "host" en un sistema de
redes interconectadas denominado Catenet. Los dispositivos de conexión de redes se denominan
Pasarelas (Gateways). Estas pasarelas se comunican entre ellas con propósito de control mediante el Protocolo Pasarela a Pasarela (Gateway to Gateway Protocol (GGP)). Ocasionalmente,
una pasarela o un "host" de destino se comunicará con un "host" de origen para, por ejemplo,
informar de un error en el procesamiento de datagramas. El Protocolo de Mensajes de Control
Internet (ICMP) se usa para este propósito. ICMP utiliza el soporte básico de IP como si se
tratara de un protocolo de nivel superior. Sin embargo, ICMP es realmente una parte integrante
de IP, y debe ser implementado por todo módulo IP. [7]
Su formato según [7] es
226
Figura 3.7: Formato ICMP
El tipo y los valores de cada parámetro de este protocolo se detallan en la siguiente tabla.
Parámetro
Tipo
Valores posibles
Tipo
Código
Checksum
Contenido
Discreto
Discreto
Discreto
Discreto
28
28
No cuanticable
216
Cuadro 3.4: Tipos y posibles parámetros ICMP
Snort
Mediante un exhaustivo proceso de revisión de las reglas que incluye este sistema se consiguió
extraer un conjunto de métricas que fueron separadas en dos categorías: Bajo Nivel y Alto Nivel
respectivamente. Las de bajo nivel se corresponden con la mayoría de los parámetros de las
tramas de los protocolos explicados anteriormente y las de alto nivel representan conceptos más
complejos que los propios parámetros. Los parámetros de bajo nivel son los siguientes:
Parámetro
Tipo
Valores posibles
Flags (Syn, Ack, Rst, etc)
Fragbits (MF,DF)
TTL
ID
Ipopts
Dsize
Flow
Window
Discreto/Binario
Binario
Discreto
Discreto
Discreto/binario
Discreto
Discreto/Binario
Discreto
0-1
0-1
26
No cuanticable
rr, eol, nop, ts, sec, lsrr, ssrr, satid, any
No cuanticable
to_client, to_server, from_client, from_server, establishe
No cuanticable
Cuadro 3.5: Tipo y parámetros de bajo nivel de Snort
Algunas de los parámetros de alto nivel son los siguientes:
227
Parámetro
Tipo
Valores posibles
Not-suspicious
Attempted-recon
Shellcode-detect
Suspicious-login
System-call-detect
Unsuccessful-user
Unsuccessful-admin
Icmp-event
Binario
Binario
Binario
Binario
Binario
Binario
Binario
Binario
0-1
0-1
0-1
0-1
0-1
0-1
0-1
0-1
Cuadro 3.6: Tipo y parámetros de alto nivel de Snort
Como se puede observar muchos de los parámetros de los obtenidos de las tramas se corresponde con los parámetros de bajo nivel de Snort, a continuación se muestra una tabla donde se
observa la correspondencia entre los parámetros obtenidos de las las tramas y los obtenidos de
Snort.
Todos los parámetros extraídos de Snort están recogidos en los parámetros de las tramas,
menos
Flow
que se puede implementar de una manera alternativa. Queda claro, de esta forma,
que implementar los parámetros de las tramas combinados con los de Snort permite extender y
mejorar el modelo que incorpora Snort.
Lerad
En el documento [364] Mahoney y Chan proponen un algoritmo para la detección de intrusiones que utiliza los siguientes parámetros.
Parámetro
Tipo
Puerto Origen
Puerto Destino
Longitud de la conexión
Duración de la conexión
Flags de los dos primeros paquetes
Flags de los dos últimos paquetes
Ocho primeros octetos del campo datos
Numero de conexiones a un puerto de una ip concreta
Discreto
Discreto
Discreto
Discreto
Binario/Discreto
Binario/Discreto
Discreto
Discreto
Valores posibles
No
No
No
No
216
216
cuanticable
cuanticable
0-1
0-1
cuanticable
cuanticable
Cuadro 3.7: Parámetros que proponen Mahoney y Chan[364].
Marina Bykova
Marina Bikova y otro en su documento [48] analiza los siguientes parámetros para detectar
comportamientos anómalos en la red.
228
Parámetro
Tipo
Numero de direcciones IP fuera de rango
Numero de otras violaciones en la dirección
Opciones IP no adecuadas
Numero de paquetes demasiado pequeños (IP/TCP)
Veces que aparece puerto cero
Checksum invalido
Discreto
Discreto
Discreto
Discreto
Discreto
Discreto
Cuadro 3.9: Parámetros de alto nivel de Marina Bykova
Parámetro
Tipo
Valores posibles
Tamaño paquete (IP/TCP)
Checksum (IP/TCP)
Dirección IP
Opciones IP
Puertos TCP
Flags TCP
Bits reservados TCP
Discreto
Discreto
Discreto
Discreto
Discreto
Binarios
Binarios
Tantos como paquetes
Tantos como paquetes
212
No cuanticable
216
0-1
0-1
Cuadro 3.8: Parámetros y tipos de Marina Bykova
Como puede comprobarse estos parámetros son los mismos que se obtienen del análisis de
las cabeceras de las tramas. Con estos parámetros, Bykova, establece los siguientes parámetros
de mayor de nivel de abstracción.
Christopher Kruegel
De la mano de dos autores altamente reconocidos, como son Christopher Krügel y Giovanni Vigna, en el documento [217] se comentan una serie de métricas factibles de ser aplicadas,
ampliadas y generalizadas. La idea de la que parten es la aplicación de conocimiento experto
para el análisis de solicitudes web. Dieren las peticiones en una serie de partes denidas por el
estándar del protocolo HTTP [6]. El objetivo general de la práctica que realizan es contrastar
el tráco que se genera en un determinado momento con el tráco aprendido como válido y sin
ataques en una fase de aprendizaje. Se compone por lo tanto de dos fases diferenciadas y claves,
el aprendizaje y la detección. Durante la primera se tratará de establecer el valor de la métrica
que corresponda en la forma más precisa posible y durante la segunda se comparará, como si de
una medida patrón se tratase, para validar una posible ocurrencia en dos categorías: normal o
anomalía.
Para realizar esta clasicación se basan en una serie de métricas susceptibles de ser añadidas
al sistema en futuras ampliaciones como parámetros.
229
3.2. Recogida de información
La recogida de la información permite alimentar el sistema con los datos de los terminales
móviles, (en este caso las syscalls con sus argumentos), estos terminales pueden ser heterogéneos,
es decir, se han desarrollados sistemas de captura de datos para diferentes plataformas: GNU/Linux, Windows, Windows Poquet PC y Symbian. Aunque el sistema esta diseñado para ser un
analizador de anomalías en terminales móviles, la solución implementada permite analizar diferentes plataformas, no solamente en terminales móviles, sino en sistemas operativos de propósito
general , ampliando el estudio realizado.
A continuación se detallan los sistemas de recogida de información llevada a cabo en los
sistemas mencionados.
3.2.1. Recogida de información en sistemas GNU/Linux
Los sistemas GNU/Linux se caracterizan por encontrarse en multitud de dispositivos y arquitecturas diferentes, desde dispositivos embebidos14 , hasta soluciones móviles, PDAs... por lo que
un aspecto interesante del proyecto pasaba por realizar un sistema de recogida de información
en sistemas GNU/Linux por la amplitud del arquitecturas y sistemas en los que se encuentran.
Particularmente la opción elegida pasaba por implementar un sistema de recolección de información para PDAs de Nokia N770 que utilizan una distribución propia llamada maemo15 .
Al nal de este apartado se especicarán los detalles de implantación en la Plataforma.
En los sistemas Unix-like16 , la arquitectura del sistema se divide en dos partes muy diferenciadas: el modo real y la zona de usuario, siendo las syscalls el lenguaje por el cual hablan las
dos partes. Dichas syscalls17 , son el mecanismo que permite conectar las dos zonas divididas por
el sistema operativo, el modo real, en el que se encuentra el kernel, y la zona de usuario, donde
se encuentran los programas de usuario.
Las diferencias entre estas dos zonas son muy signicativas, en el modo real, se realizan las
funciones primordiales de los sistemas operativos18 , como pueden ser la gestión de memoria,
la gestión de procesos... por lo tanto su tratamiento es eminentemente diferente a la zona de
usuario, en la que se disponen de los servicios provistos por el kernel (gestión de memoria virtual
19
, gestión de sistemas de cheros...); y para pedir dichos recursos al sistema operativo, ha que
14
15
16
también conocidos como dispositivos empotrados.
Mas información sobre esta distribución en www.maemo.org.
Se trata de un sistema de funcionamiento parecido al de un sistema Unix tradicional, pero que no se encuentra
bajo una especicación UNIX convencional, tradicionalmente este término ha estado ligado al software libre y a
sistemas abiertos como GNU/Linux.
17
18
También conocidas como llamadas al sistema.
Cabe destacar, la excepción de los sistemas microkernel, en el que las funciones del sistema operativo aparecen
en zona de usuario.
19
Los sistemas operativos emulan las direcciones de memoria utilizadas por los programas de usuario, haciéndoles
creer que disponen de un rango de direcciones mayor del que existe físicamente en la memoria física de la máquina.
De esta manera el sistema operativo puede almacenar temporalmente en zonas del disco duro (minimizando la
utilización de un recurso tan valioso como es la memoria) bloques de memoria virtual poco utilizados.
230
Figura 3.8: Esquema de la estructura del kernel
Figura 3.9: Proceso de llamada a una syscall
utilizar el mecanismo de las syscalls.
Los sistemas GNU/Linux, siguen el estándar POSIX
20
, que denen un conjunto de syscalls,
de esta manera se parte de un conjunto de llamadas al sistema susceptibles de ser recogidas
como parte de la información utilizada posteriormente para el aprendizaje e inferencia de la
herramienta, dado que ya ha sido demostrado en estudios anteriores[375] que los ataques generan
una variación detectable en las syscalls generadas por los procesos.
Sistema de syscalls en sistemas GNU/Linux
Antes de proceder a la intercepción de las llamadas a las syscalls, fue necesario realizar un
completo estudio de la arquitectura que posee el kernel de GNU/Linux para el tratamiento de
las syscalls.
La parte de la gestión de estas syscalls, se pueden dividir en dos partes muy diferenciadas:
La llamada desde la zona de usuario y la recepción por parte de el kernel.
20
Portable Operating System Interface, siendo la X referencia a los sistemas Unix. Se trata de un conjunto de
estándares que dene las syscalls que ha de implementar un sistema Unix. Se encuentra denida en los estándares
IEEE1003. Cabe destacar, que este estándar no solamente dene las syscalls, sino que también especica programas
a nivel de usuario (sed, awk...) linea de comandos y otros tantos aspectos de los sistemas Unix-Like.
231
Llamada a syscalls desde la zona de usuario
La llamada a las funciones del sistema en los sistemas GNU, se implementan mediante interrupciones21 generadas por instrucciones en ensamblador o mediante las puertas de llamada
lcall7/lcall2722 , por lo tanto, cuando alguno de los dos mecanismos ocurre, el procesador, cuando un proceso de zona de usuario requiere un recurso, interrumpe lo que estaba haciendo y da
servicio a la petición recibida.
Esta llamada puede realizarse desde los programas directamente en código ensamblador,
llamando a las interrupciones int0x80, para ello se cargan en los registros EAX el código de la
instrucción (en el ejemplo se trata del código de la instrucción write , con el número de syscall
4, seguido de la syscall 1, la exit).
Listing 3.5: Ejemplo de programa en ensamblador
.data
3
msg :
# Zona de d a t o s
. s t r i n g " Hello , world ! \ n"
# d e f i n i c i o n cadena
l e n = . − msg
# longitud
.text
. g l o b a l main
8
# decimos e l " e n t r y p o i n t "
main :
13
18
movl
$ l e n , %edx
# l o n g i t u d de l a cadena
movl
$msg , %ecx
# p u n t e r o a l a cadena
movl
$1 , %ebx
# h a n d l e r ( 1 = STDOUT)
movl
$4 , %eax
# (4 = write )
int
$0x80
# llamada a l k e r n e l
movl
$0 , %ebx
#c o d i g o de s a l i d a
movl
$1 , %eax
#(1 = e x i t )
int
$0x80
# llamada a l k e r n e l
Como se puede observar, el código para llamar a una syscall concreta, depende de la syscall
que sea llamada, esto, hace que tenga muchas variaciones, y que el código ensamblador sea
muy difícil de escribir. Por dicha razón, hoy en día la mayoría de las llamadas a las syscalls, se
21
Señal que indica al procesador que debe interrumpir el curso de ejecución actual, y proceder a ejecutar el
tratamiento especico para la interrupción que acaba de ejecutarse.
22
Puertas de llamada utilizadas en sistemas Solarix, Unixware, que también son soportados por el kernel de
Linux.
232
encuentran englobadas en una librería (conocida como la glibc23 ), que provee de una API a alto
nivel para las llamadas a las syscalls, lo que permite abstraernos de las llamadas a bajo nivel y
de los registros en los que tenemos que almacenar los argumentos.
Para comparar los dos sistemas, lo que antes se hacia en varias lineas crípticas de ensamblador,
se realiza en una sola línea en lenguaje C.
Listing 3.6: Ejemplo de la mejora con lenguaje C
1
int
main ( ) { p r i n t f ( " H o l a Mundo " ) ; }
También existe otro tipo de macros que permiten las llamadas a las syscalls abstrayéndonos
en cierto modo de los registros del sistema, estos son:
Listing 3.7: Macro para llamar a syscall
s y s c a l l 2 ( long , runqueue , unsigned long ∗ , dst , long , l e n ) ;
Los programas, al seguir su curso generan un numero determinado de syscalls que pueden
ser logeadas, mediante el comando strace24 (para ver las llamadas al sistema así como sus argumentos). Mediante esta útil herramienta se pueden depurar programas comúnmente utilizados,
viendo si existe algún tipo de comportamiento extraño en la secuencia o el tipo de llamadas a
las syscalls del sistema.
Esta herramienta fue un punto de partida sobre el que se planteó comenzar a trabajar, pero
se vieron varios y numerosos inconvenientes:
Se trata de un sistema que trabaja a petición, es decir, hay que decir explícitamente que
el programa se ejecute bajo la supervisión de strace.
Genera una salida en texto que habría que parsear, siendo este un arduo trabajo.
Los programas ejecutados bajo strace, se ejecutan más lentamente que los ejecutados normalmente.
Vistos estos inconvenientes se optó por otro tipo de sistema para capturar las llamadas al
sistema, ya que strace no ofrecía las funcionalidades necesarias, tratándose más de un medio de
depuración de los programas, más que un sistema de monitorización integral.
Recepción de syscalls en zona de kernel
Para poder interceptar las llamadas, se procedió a un estudio exhaustivo de cómo se realiza
la recepción y tratamiento de las llamadas al kernel en los sistemas GNU/Linux.
23
24
GNU C library, es una parte esencial de los sistemas GNU/Linux .
Strace es un comando de la linea de comandos de Linux (comúnmente conocida como bash), que permite
logear las llamadas al sistema que se efectúan por parte de un programa.
233
Figura 3.10: Ejemplo utilización del comando strace
234
La comunicación se realiza mediante syscalls, siendo éstas llamadas a la interrupción 0x80,
estas llamadas, se traducen, en la llamada a la rutina situada en la entrada 0x80 de la tabla
de manejo de interrupciones. Por lo tanto, por ejemplo si se produce una interrupción 0x13, se
sumaría 13 a la dirección base del vector tabla de interrupciones, obteniendo de esa manera la
dirección de la función que ha de gestionar dicha interrupción25 .
Este proceso completo se puede encontrar en varios archivos del kernel, en el archivo
r/src/linux/include/asm/unistd.h,
/us-
podemos encontrar un conjunto completo de las syscalls que
el kernel esta preparado para recibir, en cada versión del kernel existe un número diferente de
syscalls, siendo siempre mayor que el anterior, dado que una vez que se ha insertado una nuevas
syscall, hay que mantenerla en el kernel por razones de compatibilidad, cuando una syscall ha
dejado de ser implementada, se le asigna una nueva syscall: sys_ni_syscall, que devuelve el valor
-ENOSYS, que indica que dicha syscall ya no está implementada.
Listing 3.8: Contenido de unistd.h los números de las syscalls
#i f n d e f
_ASM_I386_UNISTD_H_
#d e f i n e
_ASM_I386_UNISTD_H_
/∗
4
9
∗
This
file
contains
the
system
#d e f i n e
__NR_restart_syscall
0
#d e f i n e
__NR_exit
1
#d e f i n e
__NR_fork
2
#d e f i n e
__NR_read
3
#d e f i n e
__NR_write
4
#d e f i n e
__NR_open
5
#d e f i n e
__NR_close
6
call
numbers .
∗/
Estas llamadas son recibidas a nivel de kernel por código especíco para cada tipo de procesador, que extrae el valor del registro
eax,
en el que almacena el numero de la syscall que va a
ejecutarse. Este numero (multiplicado por el tamaño de las direcciones de memoria) se suma a
la dirección base de la idt26 , obteniéndose el handler de la interrupción que va a ejecutarse.
Listing 3.9: Denición de la IDT en linux
struct
d e s c _ s t r u c t i d t _ t a b l e [ 2 5 6 ] __attribute__ ( ( __section__ ( " . d a t a .
i d t " ) ) ) = { {0 , 0} , } ;
Como se puede ver en la inicialización, existen varias interrupciones aparte de la 80, denida
por la macro
25
SYSCALL_VECTOR,
como pueden ser
división por 0, page fault...
El vector de interrupciones es conocido como la zona de memoria en la que se encuentran los punteros a las
funciones que tratan cada una de las interrupciones. Por lo tanto para desplazarnos por las entradas del vector,
sumamos a la dirección base del vector el número de interrupción que queremos tratar.
26
Interrupción Description Table: Vector en el que se almacenan
235
Listing 3.10: Inicialización de la IDT
set_trap_gate (0 ,& d i v i d e _ e r r o r ) ;
s e t _ i n t r _ g a t e (1 ,& debug ) ;
s e t _ i n t r _ g a t e (2 ,& nmi ) ;
4
set_system_intr_gate ( 3 , &i n t 3 ) ;
/∗
i n t 3 −5 can
be
called
from
all
∗/
set_system_gate (4 ,& o v e r f l o w ) ;
set_system_gate (5 ,& bounds ) ;
set_trap_gate (6 ,& i n v a l i d _ o p ) ;
set_trap_gate (7 ,& d e v i c e _ n o t _ a v a i l a b l e ) ;
9
set_task_gate ( 8 ,GDT_ENTRY_DOUBLEFAULT_TSS) ;
set_trap_gate (9 ,& coprocessor_segment_overrun ) ;
set_trap_gate (10 ,& invalid_TSS ) ;
set_trap_gate (11 ,& segment_not_present ) ;
set_trap_gate (12 ,& stack_segment ) ;
14
set_trap_gate (13 ,& g e n e r a l _ p r o t e c t i o n ) ;
s e t _ i n t r _ g a t e (14 ,& p a g e _ f a u l t ) ;
set_trap_gate (15 ,& s p u r i o u s _ i n t e r r u p t _ b u g ) ;
set_trap_gate (16 ,& c o p r o c e s s o r _ e r r o r ) ;
set_trap_gate (17 ,& alignment_check ) ;
19
#i f d e f
CONFIG_X86_MCE
set_trap_gate (18 ,& machine_check ) ;
#e n d i f
set_trap_gate (19 ,& s i m d _ c o p r o c e s s o r _ e r r o r ) ;
set_system_gate (SYSCALL_VECTOR,& s y s t e m _ c a l l ) ;
Otra función importante que existen en el kernel, se trata de la función
request_irq,
que
permite habilitar una interrupción, siendo argumentos de la misma, el handler27 , y el número
de la interrupción que deseamos mapear. Esta función se encuentra redenida para varias de las
arquitecturas, siendo el handler generalizado el que se puede encontrar en
l/irq/manage.c
28
/usr/src/linux/kerne-
.
Una vez que se ha recibido la IRQ, (la interrupción que ha enviado la zona de usuario), se
realiza la gestión de la misma, como se puede ver en la<inicialización de las interrupciones, se
27
28
La función que maneja una interrupción.
Se pueden encontrar otras implementaciones de este código para otras arquitecturas:
arm: arch/arm/kernel/irq.c
arm26: arch/arm26/kernel/irq.c
sparc: arch/sparc/kernel/irq.c
sparc64: arch/sparc64/kernel/irq.c
Estos son los cheros donde podemos encontrar la implementación de la función que recoge las interrupciones.
236
asigna una función a cada interrupción que será llamada cuando se de dicha interrupción.
Nueva gestión de llamadas al Kernel: Sysenter29 .
La gestión de interrupciones, aún a pesar de estar lo más optimizada posible, siguen siendo
una tarea ardua y dura, dado que el kernel tiene que gestionar las puertas de llamada, y todo
el sistema de runlevels. Para mitigar esta deciencia, ha surgido una nueva manera de llamar
al Kernel, que se trata de sysenter, que mejora el rendimiento en las llamadas al kernel. Este
sistema es totalmente compatible con el anteriormente explicado, las interrupciones se pueden
llamar tanto por Systenter como por int80. Pero la instrucción systenter está más optimizada.
En los sistemas GNU/Linux, las llamadas a las syscalls se realizan desde la glibc, y en los
últimos tiempos se está llevando a cabo una transición desde las llamadas a las syscalls mediante
la interrupción 80, a la llamada más rápida Sysenter.
Por supuesto esta nueva gestión de llamadas se realiza únicamente en sistemas i386, siendo
especico de ésta arquitectura.
Gestión de las syscalls en zona de Kernel
Cuando llega una interrupción 80, el sistema de gestión de interrupciones explicado anteriormente delega la gestión a el handler de las syscalls, o en su defecto, se realiza una llamada a la
función sysenter, llamando al handler de las interrupciones.
Este handler es diferente para sysenter y para la interrupción int80, pero esencialmente realizan la mismo: Inspeccionan si la syscall que se quiere llamar está implementada (el número de
syscall es menor o igual que el número mayor de syscalls), si se produce esta situación se devuelve
un error. En caso contrario, se calcula la dirección donde se encuentra almacenado el handler30
que ha de tratar dichas syscall y se llama a dicha función devolviendo a zona de usuario lo que
el handler devuelva.
Listing 3.11: Gestión de la interrupción 80
#System
2
c a l l handler stub
ENTRY( s y s t e m _ c a l l )
p u s h l %eax
# s a v e orig_eax
SAVE_ALL
GET_THREAD_INFO( %ebp )
# system c a l l t r a c i n g i n
operation / emulation
/∗
7
Note , _TIF_SECCOMP i s
and
29
not
testb
bit
number
8,
so
it
needs
testw
∗/
Para mayor información: http://www.codeguru.com/cpp/w-p/system/devicedriverdevelopment/article.php/c8223/#more,
articulo sobre la optimización realizada por la instrucción sysenter[152].
30
and
La función que se va a encargar de tratar dicha syscall
237
t e s t w $ (_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|
_TIF_SYSCALL_AUDIT) , T I _ f l a g s( %ebp )
jnz syscall_trace_entry
cmpl $ ( n r _ s y s c a l l s ) , %eax
jae syscall_badsys
12
syscall_call :
c a l l ∗ s y s _ c a l l _ t a b l e (, %eax , 4 )
movl %eax ,EAX( %e s p )
# s t o r e t h e return v a l u e
syscall_exit :
cli
# make s u r e we don ' t m i s s an
interrupt
# s e t t i n g need_resched or
17
sigpending
# b e t w e e n s a m p l i n g and t h e
iret
movl T I _ f l a g s ( %e b p ) , %e c x
t e s t w $_TIF_ALLWORK_MASK,
%c x
# c u r r e n t −>work
jne syscall_exit_work
Listing 3.12: Gestión de la llamada sysenter
#S y s e n t e r
2
c a l l handler stub
ENTRY( s y s e n t e r _ e n t r y )
movl TSS_sysenter_esp0( %e s p ), %e s p
sysenter_past_esp :
sti
p u s h l $ (__USER_DS)
p u s h l %ebp
7
pushfl
p u s h l $ (__USER_CS)
p u s h l $SYSENTER_RETURN
12
/∗
∗
Load
∗
Careful
the
potential
about
sixth
argument
security .
∗/
cmpl $__PAGE_OFFSET−3, %ebp
jae syscall_fault
17
1:
movl ( %ebp ), %ebp
238
from
user
stack .
. s e c t i o n __ex_table , " a "
. align 4
. long 1b , s y s c a l l _ f a u l t
22
. previous
p u s h l %eax
SAVE_ALL
GET_THREAD_INFO( %ebp )
27
/∗
Note , _TIF_SECCOMP i s
and
not
testb
bit
number
8,
and
so
it
needs
testw
∗/
t e s t w $ (_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|
_TIF_SYSCALL_AUDIT) , T I _ f l a g s( %ebp )
jnz syscall_trace_entry
cmpl $ ( n r _ s y s c a l l s ) , %eax
jae syscall_badsys
32
c a l l ∗ s y s _ c a l l _ t a b l e (, %eax , 4 )
movl %eax ,EAX( %e s p )
cli
movl T I _ f l a g s( %ebp ) , %ecx
t e s t w $_TIF_ALLWORK_MASK, %cx
37
jne syscall_exit_work
/∗
if
something
modifies
registers
it
must
also
disable
sysexit
∗/
movl EIP( %e s p ) , %edx
movl OLDESP( %e s p ) , %ecx
x o r l %ebp, %ebp
42
sti
sysexit
Como se puede ver en los ejemplos mostrados, la llamada call, que se realiza en ambos códigos
(call
*sys_call_table(, %eax,4) ),
es la parte en la que se llama a la función que se encarga de
manejar cada syscall.
Estos punteros a funciones se almacenan en un vector llamado
sys_call_table,
y como cada
dirección de memoria en i386 son 4 bytes, multiplicando por cuatro el valor de eax , se obtiene
31
el oset32 necesario para calcular la dirección en la que se almacena el puntero a función que se
va a llamar.
El objeto
31
32
sys_call_table,
es de especial importancia, en versiones anteriores del kernel (de
En eax en ese momento se almacena el número de syscall que se está llamando.
desplazamiento
239
Figura 3.11: Esquema de llamada a una interrupción mediante interrupción
la rama 2.4 y anteriores) dicho objeto se encontraba disponible por parte de cualquiera de los
módulos que se cargasen en el sistema, y con realizar extern void* sys_call_table[]; se tenía acceso
a uno de los puntos mas importantes del sistema operativo. Este aspecto ha sido ampliamente
explotado por rootkits33 , lo que llevó a Linus Torvalds34 , a decidir eliminar esta exportación
haciendo algo más difícil algo que anteriormente era trivial. Esta ocultación no ha permitido
eliminar todos los sistemas de troyanización del kernel, dado que la dirección de la sys_call_table,
se puede seguir accediendo desde otros caminos que se explicarán posteriormente.
Como se puede ver también en ambos ejemplos el manejo del retorno de la función llamada
es también igual en ambos casos, ya que las funciones llamadas mediante call, devuelven el valor
de retorno en almacenado en la pila, por lo tanto lo que se realiza es almacenar el contenido de
la cima de la pila, que es el resultado de la syscall (todas las syscalls por convención devuelven
un long).
Denición del sistema de recogida de datos en sistemas GNU/Linux
Para llegar a la sección de plantear las posibles opciones de acceder a las llamadas al sistema
que se dan en un momento en el sistema se realizó un estudio de las técnicas utilizadas para
auditar las aplicaciones en sistemas GNU/Linux.
De un comienzo aparecieron varias opciones:
Realizar un sistema vírico que intercepte las llamadas a las syscalls.
Utilizar un sistema de logeo de syscalls convencional, como pueden ser strace y ptrace.
33
34
Sistemas de troyanización del kernel de linux.
Creador del Kernel de Linux, y actualmente mantiene una parte del desarrollo del mismo.
240
Figura 3.12: Logo de SuSE, distribución alemana, respaldada por la empresa Novell
Utilizar un sistema ya realizado por Novell : LAuS[261]35 .
Utilizar el sistema de auditoría snare[16].
Adaptar un sistema BSM[270] de auditoría en sistemas Solaris
Los requisitos planeados eran los siguientes:
Funcionamiento en todo tipo de plataformas / arquitecturas.
Funcionamiento en tiempo real y transparente para el usuario.
No haya necesidad de interacción con el usuario.
Dados los requisitos, se fueron analizando las diferentes opciones. El sistema LAuS, era un sistema desarrollado por Novell para la distribución SuSE en forma de parche del kernel de linux,
que permitía auditar las syscalls. Este sistema existe para que los sistemas SuSE obtuvieran el
certicado de seguridad informática CC EAL436 , esta solución aunque buena para los sistemas
que empleen SuSE, no es exible para los requisitos marcados por el sistema a emplear, y no se
ha probado en sistemas embebidos ni sistemas móviles. Además para funcionar necesita que el
kernel sea recompilado y es un proceso que para nada es transparente para el usuario.
El sistema LAuS, permite en ordenadores convencionales auditar a procesos, pero no ofrece
la exibilidad necesaria para realizar un proyecto con él, por lo que la opción de SuSE y Novell
quedó desechada por dichas razones.
Los sistemas de
strace
y
ptrace
37
,
permiten seguir a un proceso el curso de la ejecución de
otro en forma de syscalls, reciben las acciones del otro proceso, este sistema implementable en
35
36
Se trata de un sistema de auditoría realizado por Novell para SuSE
Estándar de seguridad informática Common Criteria Assurance Level 4 : Methodically Designed, Tested
and Reviewed. Analysis is supported by the low-level design of the modules of the TOE, and a subset of
the implementation. Testing is supported by an independent search for obvious vulnerabilities. Development
controls are supported by a life-cycle model, identication of tools, and automated conguration management.[URL]http://www.cesg.gov.uk/site/iacs/index.cfm?menuSelected=1&displayPage=13
37
La función ptrace, permite, al igual que el comando strace, seguir el funcionamiento de otro proceso.
http://linuxgazette.net/issue81/sandeep.html
241
Figura 3.13: Logo del agente de snare para sistemas GNU/Linux
zona de usuario puede parecer en principio una buena opción, pero entraña un gran peligro, que
es fácilmente superable por el malware existente actualmente.
Listing 3.13: Prototipo de la función ptrace
#include
long
<s y s / p t r a c e . h>
int
p t r a c e ( enum __ptrace_request r e q u e s t , pid_t pid , void ∗ addr
, void ∗ data )
El sistema de funcionamiento del sistema ptrace, solamente permite que un proceso siga la
ejecución de un proceso dado, es decir, un solo proceso puede seguir el funcionamiento de otro.
Algunos de los sistemas antimalware para sistemas GNU/Linux hacían uso de la función ptrace,
y la manera que desarrollaron los hackers, fue crear dos procesos en el malware, y se suscribían
mutuamente excluyendo la posibilidad de que cualquier otro proceso se suscribiese a su propia
ejecución, con esta
ptrace
maniobra de evasión
y el comando
strace
el sistema de auditoría de syscalls mediante la función
se ve inutilizado.
Otro aspecto dentro de el sistema de strace/ptrace es que el sistema deja de ser trasparente
para el usuario si se ejecutan bajo el comando strace, ya que los programas han de ser ejecutados
mediante línea de comandos lo que deja al sistema sin posibilidad de ser independiente del usuario
del sistema operativo auditado.
Los sistemas BSM proporcionan un sistema de auditoría y de alertas para el seguimiento de los
usuarios. Se trata de un sistema que no solamente realiza un histórico de las syscall generadas por
el sistema, sino que se encuentra abierto a muchos tipos de eventos, como puede ser que se abra
una conexión ftp... Por lo tanto se trata de un sistema que genera un grupo heterogéneo de datos
de entrada38 , en los que pueden aparecen relaciones de dependencia entre los datos de entrada por
el nivel de abstracción de los mismos. Además existen varios tipos de datos (sobre todo syscalls
a bajo nivel), que han sido rechazados para el sistema, dado que generan muchas entradas y que
genera datos sin sentido
39
, esta supresión de datos, para un sistema de experimentación como
puede ser Mendizale, dichos datos, pueden dar un perl mucho más exacto de los procesos que
están siendo inspeccionados. Por otra parte los sistemas BSM, permiten auditar usuarios, pero
no procesos en particular, lo que ha ocasionado que auditar procesos mediante un sistema de
auditoría de usuarios, no dé la solución más óptima.
38
Es decir, podemos encontrar, por una parte datos de muy alto nivel como puede ser la apertura de una
conexión ftp, y con datos de muy bajo nivel, como por ejemplo una syscall.
39
En concreto: Several audit classes were excluded because they did not generate meaningful information (or
generated too much data). 242
El sistema Snare[16], realizado por la empresa
intersec alliance,
es un sistema global de
detección de intrusiones el cuál dispone de un sistema de logeo de syscalls, que permite generar
reglas estáticas al administrador que genera alarmas cuando dicho evento se da en el sistema.
Este agente utiliza un sistema de auditoría, y por el momento únicamente funciona en Redhat
Enterprise Linux 4.0 U3, y ha sido testado en Fedora Core, en sistemas como Ubuntu Linux de
Canonical, no es funcional todavía, esta situación ha propiciado que este sistema que es funcional
haya sido rechazado en detrimento de la realización de un sistema de recogida de datos propio.
Por lo tanto las líneas que se han seguido han sido utilizar técnicas víricas que permitan
auditar el kernel de linux a bajo nivel. Este proceso se puede llevar a cabo de varias maneras,
pero siempre insertando código a nivel de kernel en forma de LKM40 .
Desarrollo del sistema de recogida de datos en sistemas GNU/Linux
Una vez denida cuál va a ser la losofía del sistema, se investigó cuáles eran las opciones
posibles:
Desarrollar un parche del kernel, conceptualmente puede que sea una buena solución dado
que modicar código que no está en ejecución puede ser mas seguro41 , que otras opciones,
pero no era una opción válida, dado que la transparencia con el usuario queda sustancialmente reducida con un proceso como recompilar el kernel.
Desarrollar un módulo del kernel de linux que secuestre las funciones del vector sys_call_table,
la cual era la opción más válida para el proyecto, y la que se ha desarrollado.
Por lo tanto, el sistema elegido ha fue un módulo del kernel que realice la recogida de datos, pero
existen también varias opciones en cuanto al acceso a las funciones llamadas a bajo nivel, por
lo tanto uno de los mayores problemas a la hora de desarrollar el sistema de recogida, ha sido
seleccionar qué método se utiliza a la hora de secuestrar las llamadas.
Para seleccionar el método necesario se ha tenido en cuenta la interoperabilidad entre diferentes plataformas o arquitecturas42 , y el impacto sobre el sistema operativo43 .
Los métodos implementados y estudiados para la elección del método denitivo, fueron dos:
Modicar las entradas de la
sys_call_table
para que en vez de que se llamen las funciones
que se han de encargar de las syscalls, se llame a funciones nuestras. Este sistema tiene la
complejidad añadida de que desde el kernel 2.5 el símbolo
sys_call_table,
no se encuentra
exportado en el kernel.
40
Loadable Kernel Module: Se trata de una sección de código que una vez compilada se la permite ser descargada
y carga en el kernel de linux.
41
Existen menos posibilidades de que se de un Kernel Panic modicando código fuente, que redireccionando
direcciones de memoria en tiempo de ejecución dado que puede tener consecuencias imprevisibles.
42
Alguno de los métodos utiliza código nativo a la hora de realizar la intercepción de las llamadas, y uno de los
requisitos de este sistema de recogida de datos era la interoperabilidad entre diferentes arquitecturas.
43
El tiempo de retraso que se puede dar por un proceso como el de la auditoría de syscalls.
243
Modicar en tiempo de ejecución el código de manipulación de las syscalls del kernel para
que en vez de realizar las funciones originales se llame a un método denido por nosotros.
Las dos opciones comentadas fueron han sido realizadas y probadas, para decidir cuál de las dos
era la mejor opción.
Desarrollo de sistema de recogida de datos basado en intercepción de sys_call_table
Esta opción, lo que realiza es la suplantación de las direcciones de memoria almacenadas
en la variable sys_call_table, haciendo que cuando se ejecute una llamada a una syscall (tanto
mediante la interrupción 80, como la llamada sysenter), se llame a una función propia.
El mecanismo de funcionamiento es muy simple, se realiza un módulo del kernel, que cuando
se cargue modique las entradas necesarias en el vector de direcciones, y que cuando se descargue
las deje como las encontró. El mecanismo de funcionamiento de los módulos del kernel permiten realizar esta tarea sin problemas, dado que la estructura básica de un módulo del kernel,
únicamente dispone de dos funciones, una que se la llama al cargar44 , y otra que se llama al
descargarse45 .
Listing 3.14: Ejemplo de un módulo básico
3
#include
<l i n u x / module . h>
#include
<l i n u x / k e r n e l . h>
#include
<l i n u x / timex . h>
static
int
__init f e n t _ i n i t ( void ) {
p r i n t k (KERN_INFO " H o l a s o y un LKM e n modo r e a l O_o"
! ! ! \ n" ) ;
return
0;
}
8
static
v o i d __exit f e n t _ e x i t ( v o i d ) {
p r i n t k (KERN_INFO " Se d e s c a r g a e l LKM. . . \ n " ) ;
}
13
module_init ( f e n t _ i n i t ) ;
module_exit ( f e n t _ e x i t ) ;
MODULE_LICENSE( "GPL" ) ;
44
Existen dos maneras de cargar módulos en el kernel, una mediante el comando insmod (que no carga los
módulos dependientes necesarios, y que carga el módulo desde cualquier localización), y el comando modprobe,
que realiza la carga tanto del módulo como de los módulos dependientes necesarios (los módulos han de estar
localizados en un sitio concreto de la jerarquía de cheros).
45
Mediante el comando rmmod.
244
El problema surge cuando deseamos buscar la dirección de memoria de la variable sys_call_table,
como ya hemos comentado anteriormente, a partir del kernel 2.5 no está disponible en el kernel
directamente. Las opciones para realizar el calculo de esta dirección son varias, este valor, se
encuentra almacenado en el chero System.map, resultante de compilar el kernel, en este chero
se encuentran las direcciones46 en las que se almacenarán las variables del kernel, y en este chero
sí que aparece la variable que nos interesa: sys_call_table.
Por lo tanto podemos copiar esta dirección, y embeberla en el código fuente para disponer
de una referencia a la dirección de memoria en la que se encuentra el vector de direcciones. Otra
opción sería también pasar la dirección mediante un parámetro del LKM, y en el script para
introducir, realizar una manipulación de System.map para que encuentre la dirección adecuada.
Esta solución es viable siempre y cuando se disponga del System.map del kernel que queremos auditar, no hace falta recompilar el kernel, sino que el System.map sea el original de la
compilación.
Si el chero System.map, no estuviese disponible o si la versión del mismo no fuese la original
existe otro método para localizar la dirección de la misma, se trata de buscar en el código que se
está ejecutando la dirección. El método[313] es bastante lógico, existe una función que permite
conocer la dirección base de la tabla IDT47 , por que entrando a la entrada 80, tenemos el handler
de la interrupción 80 que es la que se encarga de tratar las syscalls.
En este momento disponemos de el puntero a la función que se encarga de tratar las int80,
y mediante un memcpy48 , lo que hacemos es copiar el código de la función que se encarga de
tratar las syscalls (aparece anteriormente la sección de código que se encarga de ello).
Por lo tanto, para encontrar la dirección tenemos que buscar la llamada call que se realiza
desde el código fuente por lo que buscamos los códigos de operación
0x 0x14 0x85
49
, que se
corresponden a la llamada call, y posteriormente encontramos la dirección de la sys_call_table,
este método permite localizar la syscall table, pero tiene varios problemas que se detallarán a
continuación.
Listing 3.15: Función que obtiene la base del vector de syscalls
s t a t i c void
int
g e t _ s y s _ c a l l _ t a b l e ( void ) {
i;
unsigned i n t
char
sys_call_off ;
sc_asm [ SIZE ] ;
5
asm ( " s i d t %0" : "=m" ( i d t r ) ) ;
p r i n t k ( " [ + ] i d t r b a s e a t 0 x %08x \ n " , i d t r . b a s e ) ;
46
47
48
49
Direcciones físicas en las que se van a almacenar
La tabla IDT es el vector de interrupciones.
función de C, que se encarga de copiar una zona de memoria a otra.
Se trata código ensamblador, que se ocupa de hacer una call.
245
memcpy(& i d t , ( void ∗ ) ( i d t r . b a s e +8∗0x80 ) , s i z e o f ( i d t ) ) ;
s y s _ c a l l _ o f f = ( i d t . o f f 2 << 1 6 ) | i d t . o f f 1 ;
10
p r i n t k ( " [ + ] i d t [ 8 0 h ] d e s c r i p t o r p o i n t s t o 0 x %08x \ n " ,
sys_call_off ) ;
memcpy( sc_asm , ( void ∗ ) s y s _ c a l l _ o f f , SIZE ) ;
for (
i =0; i <SIZE ; i ++)
if
15
( ( sc_asm [ i ] == ' \ x f f ' ) &&
( sc_asm [ i +1] == ' \ x 1 4 ' ) &&
( sc_asm [ i +2] == ' \ x 8 5 ' ) ) {
printk ( " [+] s y s _ c a l l _ t a b l e c a l l found ! ( at
b y t e %d f r o m 0 x %08x a d d r e s s ) \ n " , i ,
sys_call_off ) ;
break
;;
}
20
if
( i <SIZE ) {
s y s _ c a l l _ t a b l e = ( void ∗ ) ∗ ( ( i n t ∗ ) &sc_asm [ i +3]) ;
p r i n t k ( " [ + ] s y s _ c a l l _ t a b l e a t 0 x %p \ n " , s y s _ c a l l _ t a b l e
);
} else {
printk ( " [ −] s y s _ c a l l _ t a b l e not found ! " ) ;
25
}
}
El código que hemos mostrado tiene el problema de que es muy dependiente de la arquitectura
en la que esté implementado el sistema, por lo que topa con el requisito marcado de independencia
de la arquitectura, dado que el código no sólo se quiere utilizar para arquitecturas i386, sino
también para arquitecturas ARM..., esta opción aunque atractiva, fue desechada.
Por lo tanto el sistema para encontrar la dirección mediante la búsqueda de la dirección de
la base del vector de syscalls, fue desechado en favor del método del System.map, siendo este un
sistema más exible para la utilización en diferentes arquitecturas.
Listing 3.16: Ejemplo de la intercepción de la syscall Kill
3
#include
<l i n u x / k e r n e l . h>
#include
<l i n u x / module . h>
#include
<l i n u x / i n i t . h>
#include
<l i n u x / t y p e s . h>
/∗
∗ Direccion
de
memoria
sacado
directamente
246
de
s y s t e m . map ,
la
entrada
es
:
sys_call_table
∗ ∗/
8
SYSCALLDIR 0 xc03337e0
#d e f i n e
MODULE_LICENSE( " GPLv2 o r l a t e r " ) ;
static
int
( ∗ k i l l _ s a v e d ) ( pid_t , i n t ) ;
almacenar
el
valor
∗ Direccion
de
memoria
// P u n t e r o
a
funcion
para
inicial
/∗
es
:
sacado
directamente
de
s y s t e m . map ,
la
entrada
sys_call_table
∗ ∗/
13
long
∗ s y s _ c a l l _ t a b l e = ( long ∗ ) SYSCALLDIR ;
static
int
m i _ k i l l ( pid_t pid , i n t s i g )
{
struct
del
task_struct ∗ ptr = current ;
// P i l l a m o s
la
instancia
pcb
p r i n t k ( " K Â ½ l l s i g n a l : %d u s u a r i o %d p i d : %d \ n " , s i g , ptr −>
18
uid , ptr −>p i d ) ;
return
( ( ∗ k i l l _ s a v e d ) ( pid , s i g ) ) ;
}
int
__init i n i t _ i n t e r c e p t ( void )
{
p r i n t k ( " M e n d i z a l e module l o a d e d \n" ) ;
23
gettimeofday_saved = ( int ( ∗ ) ( struct t i m e v a l
∗ , struct
t i m e z o n e ∗ ) ) ( s y s _ c a l l _ t a b l e [ __NR_gettimeofday ] ) ;
k i l l _ s a v e d = ( i n t ( ∗ ) ( pid_t , i n t ) ) ( s y s _ c a l l _ t a b l e [ __NR_kill ] )
;
s y s _ c a l l _ t a b l e [ __NR_kill ] = ( unsigned long ) m i _ k i l l ;
s y s _ c a l l _ t a b l e [ __NR_gettimeofday ] = ( unsigned long )
mi_gettimeofday ;
return
28
0;
}
void
__exit e x i t _ i n t e r c e p t ( void )
{
/ ∗ Lo d e j a m o s
todo
como
e s t a b a ∗/
s y s _ c a l l _ t a b l e [ __NR_kill ] = ( unsigned long ) k i l l _ s a v e d ;
33
s y s _ c a l l _ t a b l e [ __NR_gettimeofday ] = ( unsigned long )
gettimeofday_saved ;
}
247
module_init ( i n i t _ i n t e r c e p t ) ;
module_exit ( e x i t _ i n t e r c e p t ) ;
Por lo tanto, este método realiza una suplantación de las direcciones del vector de syscalls
original, esto supone que cuando una función kill es llamada, la función kill original, no es llamada,
sino que se llama realmente a la función suplantada por nosotros. Para no levantar sospechas ni
modicar el funcionamiento de las syscalls originales, después de realizar lo que queremos (en
el caso del ejemplo un simple printk), llamamos a la función kill original, devolviendo lo que la
función original ha devuelto. De este modo se consigue un logeo transparente al usuario.
Desarrollo de un sistema de recogida de datos basado en la modicación en tiempo
de ejecución de la rutina de tratamiento de las syscalls.
Este sistema de tratamiento ha sido desarrollado por parte de un hacker[292], para un rootkit
a nivel de kernel para kernels de la rama 2.6. Este sistema, utiliza una manera diferente para
interceptar todas las llamadas, en lugar de suplantar las direcciones a las que llama la rutina de
tratamiento de las syscalls, modica la rutina de tratamiento con técnicas víricas para ejecutar
su propia función cada vez que llega una syscall.
Este método, tiene la ventaja de que modicando en un solo punto50 el código fuente, ya
hookea todas las syscalls, su funcionamiento es eminentemente vírico. Su funcionamiento es
parecido al de un virus, modica el código que se va a ejecutar.
Listing 3.17: Líneas que son sobreescritas con un salto a la función.
a r c h / i 3 8 6 / k e r n e l / e n t r y . S −−−−
2
# system c a l l h a n d l e r s t u b
ENTRY( s y s t e m _ c a l l )
p u s h l %eax
# s a v e orig_eax
SAVE_ALL
GET_THREAD_INFO( %ebp )
7
cmpl $ ( n r _ s y s c a l l s ) , %eax //−−−>
Estas
instrucciones
seran
las
que
jae syscall_badsys
//−−−>
sobreescribiremos
con
nuestro
salto .
# system c a l l t r a c i n g i n o p e r a t i o n
12
t e s t b $_TIF_SYSCALL_TRACE, TI_FLAGS( %ebp )
jnz syscall_trace_entry
50
En el desarrollo anterior, hay que sustituir tantas direcciones a función como syscalls queremos hookear.
248
syscall_call :
c a l l ∗ s y s _ c a l l _ t a b l e (, %eax , 4 )
movl %eax ,EAX( %e s p )
17
# s t o r e t h e return v a l u e
....
−−−− e o f −−−−
Exactamente el sistema inserta un salto en la comprobación de si el número de syscall es
mayor al permitido (cmpl
$(nr_syscalls), %eax ),
y el salto condicional a sys_badsys si el número
de syscall no es el permitido. Estas acciones debemos realizarlas nosotros mismos dentro de la
rutina a la que lleva el salto. Estas dos operaciones ocupan en total 11bytes51 , lo más sencillo
será cambiar por un pushl y un ret52 , los cuales ocupan 6 bytes.
Este método ha de llevarse a cabo tanto en el handler de sysenter como en el de la interrupción
80, modicando en ambos los bytes concretos (en los dos sitios se realiza la misma comprobación).
Por lo tanto mediante este sistema podríamos tener un sistema que logease las interrupciones
o llamadas a la función sysenter sin tocar las direcciones de la sys_call_table.
El problema que plantea este método es la poca portabilidad que ofrece, dado que el código
que sobreescribe es altamente dependiente de la arquitectura sobre la que se ejecuta el sistema,
y además la dirección a la que salta es una shellcode53 , que por supuesto, es dependiente de
la arquitectura sobre la que se ejecute el sistema. Por lo tanto, este método, aunque limpio
y efectivo, se trata de un método ampliamente dependiente de la arquitectura en la que esté
implementado.
Listing 3.18: Shellcode a la que saltamos cuando se llama a la función.
char
idt_handler []=
//
( el
sysenter_handler
es
identico )
" \ x 9 0 \ x 9 0 \ x 9 0 \ x 9 0 \ x 9 0 \ x 9 0 \ x 9 0 \ x 9 0 \ x 9 0 \ x3d \ x 1 2 \ x 0 1 \ x 0 0 \ x 0 0 \ x 7 3 \ x 0 2
"
" \ xeb \ x06 \ x68 \ x90 \ x90 \ x90 \ x90 \ xc3 \ x83 \ x f 8 \ x25 \ x74 \ x06 \ x68 \ x90 \ x90
"
" \ x90 \ x90 \ xc3 \ x f f \ x15 \ x90 \ x90 \ x90 \ x90 \ x68 \ x90 \ x90 \ x90 \ x90 \ xc3 " ;
Mecanismo elegido, y detalles de implementación del mismo
Tras las dos aproximaciones que se desarrollaron, se decidió generar un sistema de recogida
de datos mediante la sobreescritura de la sys_call_table, dado que se trata del método arquitectónicamente más neutro y más transparente para el usuario. Por lo tanto el sistema que se
ha implementado necesita el archivo System.map original para funcionar. Esto implica que o
51
52
53
6 bytes el salto condicional y 5 la comparación.
Inserta un valor en la pila del sistema y salta a él mediante el ret.
código ensamblador embebido en el código fuente del LKM.
249
bien se ha compilado el kernel, o bien junto con el mismo se incluyen los archivos System.map
originales54 .
La naturaleza desestructurada del Kernel de linux, ha puesto alguna traba al desarrollo del
proyecto, como las cabeceras de las funciones que han de reemplazar a las originales han de ser
exactamente iguales, se hacía necesario buscar las declaraciones de las funciones por todo el árbol
de directorios del Kernel. Para automatizar todo este sistema, se desarrolló un script en Shell
script, que generaba las funciones necesarias para hookear todas las syscalls del kernel de linux.
Otro de los escollos a superar ha sido la comunicación kernel / userland que había que realizar,
dado que la intercepción se realiza a nivel de Kernel, y el análisis del mismo se realiza en otra
máquina. Este sistema implica que hay que realizar una comunicación kernel-userland, existiendo
las siguientes alternativas para que esta comunicación exista:
Netlink sockets Kernel-Userland.
Dispositivos de caracteres.
Dispositivos /proc.
Finalmente la comunicación se estableció mediante dispositivos /proc, generando un dispositivo55
mediante el cual se puede controlar el agente, ver estadísticas y para recibir las syscalls logeadas.
Listing 3.19: Ejemplo de la creación y destrucción de un dispositovo /proc.
1
static
int
if
__init p r o c _ i n i t ( void ) {
( ( p r o c F i l e = c r e a t e _ p r o c _ e n t r y ( " e j e m p l o " , 0 6 4 4 , NULL) )==
NULL)
{
remove_proc_entry ( " e j e m p l o " , &proc_root ) ;
p r i n t k (KERN_ALERT " E r r o r : C o u l d n o t c r e a t e p r o c
6
entry \n" ) ;
return
−ENOMEM;
}
p r o c F i l e −>owner = THIS_MODULE;
p r o c F i l e −>p r o c_ i o p s = &InodeAllowedOps ;
p r o c F i l e −>proc_fops = &FileAllowedOps ;
11
p r o c F i l e −>mode = S_IFREG | S_IRUGO | S_IWUSR;
p r o c F i l e −>u i d = 0 ;
p r o c F i l e −>g i d = 0 ;
p r o c F i l e −>s i z e = 1 0 0 0 ;
54
55
Echo que se da en la gran mayoría de las distribuciones de linux actuales.
Concretamente /proc/sysmonitor.
250
return
16
0;
}
s t a t i c void
__exit p r o c _ e x i t ( void ) {
remove_proc_entry ( " t e t a " , &proc_root ) ;
}
La ventaja de utilizar este tipo de dispositivos radica en que su creación es automática, al
contrario de los dispositivos de caracteres, para los que hay que ejecutar el comando
además permiten la ejecución de comandos como
cat, tail...,
mknod,
de esta manera la utilización del
sistema es mucho más sencilla y simple para el usuario, que utilizando mecanismos netlink, en los
cuales hay que recompilar el kernel y manejar complejas APIs para realizar dicha comunicación.
Otro de los grandes escollos que planteó la implementación del sistema de recolección, fue la
sincronización en el kernel y evitar que ocurran condiciones de carrera56 , para lo que se utilizaron
sistemas de sincronización a nivel de kernel, esto se da por la naturaleza multiproceso de los
sistemas GNU/Linux y que hacen que un proceso pueda pararse en cualquier momento para
que su ejecución sea relevada por otro, este proceso plantea el problema de como que algunos
procesos pueden escribir en zonas que otro proceso este leyendo.
Los sistemas utilizados han sido los siguientes:
spin_locks: Cerrojos, que los procesos abren y / o cierran mediante operaciones atómicas57 ,
y que permiten hacer exclusiva la utilización de un recurso por parte de un proceso.
Semáforos a nivel de kernel, con un funcionamiento similar a los semáforos a nivel de
usuario.
Colas de espera.
Mediante estos métodos se ha realizado un sistema de recepción de datos que ante pruebas de
stress no pierde datos ni entra en condiciones de carrera. Esta parte es importante dado que un
fallo, o un interbloqueo a nivel de kernel, puede ser especialmente dañino, dado que hay grandes
posibilidades de que el sistema sufra un
kernel panic
58
.
Existe una sola situación en la que se desechan datos de syscalls, que es cuando el buer en el
que se almacenan los datos se llenan (es decir, no se ha leído lo suciente), para evitar un buer
overow.
Otra situación que ha habido que solventar es la identicación del proceso, dado que cuando
estamos recibiendo la syscalls de un proceso, podemos saber el identicativo del proceso que
recibe dichas peticiones, pero no sabemos el nombre del ejecutable, para ello se utiliza un método
56
También conocidas como race conditions, se producen cuando dos o más procesos se quedan interbloqueados
a la espera de un recurso que nunca se va a liberar.
57
58
El proceso no se puede quedar a mitad de ejecución de dicha operación.
Nombre con el que se conoce a los fallos de Kernel.
251
que permite identicar el ejecutable del que proviene dicho proceso, de esta manera se puede
identicar no solamente el nombre del proceso59 , sino el ejecutable responsable de dicho proceso.
Listing 3.20: Código que permite saber el ejecutable padre del que proviene el proceso.
∗ GetEXE( void )
i n t char
{
if
( c u r r e n t −>mm) {
struct
(vma) {
while
5
vm_area_struct ∗ vma = c u r r e n t −>mm−>mmap;
if
( ( vma−>vm_flags & VM_EXECUTABLE) && vma−>vm_file ) {
char
∗ buf = k m a l l o c (PAGE_SIZE, GFP_KERNEL) ;
char
∗p ;
if
( buf == NULL) return NULL;
memset ( buf , 0 , PAGE_SIZE) ;
10
p = d_path (vma−>vm_file −>f_dentry , vma−>vm_file −>f_vfsmnt ,
buf , PAGE_SIZE) ;
if
( ! IS_ERR( p ) ) {
memmove( buf , p , s t r l e n ( p ) + 1 ) ;
return
( const char ∗ ) buf ;
}
15
k f r e e ( buf ) ; return NULL;
}
vma = vma−>vm_next ;
}
}
20
return
NULL;
}
El texto se envía en formato texto plano a la zona de usuario, debiendo el agente de zona de
usuario parsear 60 cada cadena de texto para conseguir toda la información.
Este agente de zona de usuario, conecta el sistema de recolección de datos con la infraestructura del sistema de análisis de Mendizale, enviando por red la información recogida por el agente
en el kernel de linux.
3.2.2. Recogida de información en sistemas Windows Mobile.
Windows Mobile es un sistema operativo compacto basado en el API Win32 de Microsoft, que
combinado con una serie de aplicaciones especícamente diseñadas para este tipo de sistemas,
59
60
Que se puede obtener del valor comm del task_struct que apunta current.
Extraer las diferentes partes de información de una unidad. En este caso concreto de una línea de texto.
252
da soporte a muchos de los dispositivos móviles que se encuentran hoy en el mercado61 .
Los sistemas Windows Mobile, en la totalidad de sus versiones Windows CE 3.X, 4.X y 5.X
presenta unas características especiales en el manejo de memoria62 , comunicación entre procesos...
que hacen imposible reutilizar herramientas desarrolladas para la auditoría de syscalls en sistemas
Windows convencionales en este tipo de sistema operativo.
Cuestiones de Desarrollo.
Los sistemas Windows CE, carecen por completo de sistemas de debuggeo o de programación
a bajo nivel, por lo que el desarrollo de cualquier tipo de aplicación o de agente de recolección de
información, suponía un gran esfuerzo por parte del equipo de investigación. Afortunadamente,
en la última versión del sistema de desarrollo Microsoft Visual Studio 2005, conscientes de la
situación que existía, Microsoft ha incorporado funcionalidades de depuración en tiempo real y
remotos de aplicaciones para Windows CE.
En concreto, la última versión de Windows Device Emulator, soporta la emulación real
de aplicaciones para Windows CE en todas sus versiones, lo que permite que una aplicación
pueda ser probada y desarrollada en un dispositivo63 que tenga las mismas características y
funcionalidades que el dispositivo nal en el que se va a ejecutar la aplicación nal. Este echo ha
facilitado la investigación dado que se ha podido emular y desarrollar el agente en un ambiente
idéntico al de un dispositivo físico real.
De esta manera en este momento es posible debugear directamente sobre el dispositivo físico
o sobre el emulador, pudiendo incluso atachearse 64 a procesos activos bien en la máquina real,
o en el emulador.
Sistema de llamadas al Kernel de Windows CE
El sistema de llamadas al kernel de Windows CE, es similar al de sus hermanos mayores,
los ejecutables tienen un formato PE65 , por lo que las llamadas al kernel de NT, no se realizan
directamente desde los programas sino que se realizan desde diferentes DLL que realizan dichos
accesos en lugar del el proceso directamente.
61
A nales del 2004 ya se hizo líder de ventas de software para este tipo de dispositivos por delante de PalmOS.
http://www.canalpda.com/displayarticle180.html
62
Los sistemas Windows Mobile, poseen un mecanismo propio de protección de memoria, que establece una capa
de abstracción entre la memoria virtual ofrecida por el procesador y la memoria que utilizan los procesadores. Este
mecanismo permite controlar los accesos de lectura / escritura a zonas de memoria que no hayan sido reservadas
anteriormente en la capa de abstracción[298].
63
64
Se trata de un dispositivo virtual, pero de las mismas características que un sistema Windows CE normal.
Se trata de una técnica de depuración que permite parar procesos en ejecución y ver lo que están ejecutando
en cada momento.
65
Portable Ejecutable, formato de archivo ejecutable introducido en la versión 3.1 del kernel de NT. Inspirado
en el formato COFF de sistemas Unix-like, mantiene la compatibilidad con todas las versiones de Windows. De
ahí el nombre de Portable.
253
Figura 3.14: Esquema del formato Portable Ejecutable
Este proceso es similar al que realiza la glibc, en sistemas GNU/Linux, pero en este sistema,
las llamadas las realizan diferentes DLLs en vez de una sola librería como la glibc.
Dada que la ubicación de las DLL dentro del sistema del usuario puede variar de una instalación a otra, el PE ha de especicar en la cabecera las DLL que va a necesitar, para que el loader
resuelva en dinámicamente las dependencias y si es necesario cargue las DLL que no estuvieran
cargadas en ese momento. De la misma manera, el formato PE, dene en la IAT66 , las funciones
que necesita de las DLL.
Desarrollo del sistema de recogida de datos para Windows Mobile
Para realizar la recogida de datos necesaria para el proyecto hace falta interceptar en algún
punto la llamada en cualquiera de sus fases desde la IAT, hasta el dispacher del kernel de Windows
CE.
Para realizar dicha aproximación varias opciones fueron barajadas[247], la primera de ellas
consistía en la modicación en la memoria permanente de las DLL involucradas en las llamadas
al Kernel de Windows CE. De esta manera sería posible inyectar código en cada DLL, o realizar
un wrapper67 sobre la misma. Sin embargo este proceso llevaría consigo la necesidad de modicar
la memoria ROM de todos los dispositivos en los que se quiere instalar el agente.
Soluciones heredadas de sistemas Windows, como la de modicar la IAT de todos los procesos
del sistema, o inyección de código en las entradas de las funciones exportadas por las DLL fueron
desechadas por el coste computacional que necesitaban y la limitada potencia de cálculo de los
sistemas ARM en los que se ejecuta Windows CE.
66
67
La IAT es el lugar donde el cargador escribe las direcciones de las funciones exportadas de alguna DLL.
Nombre técnico para un envoltorio software de ciertas funciones o DLLs.
254
Figura 3.15: Esquema de llamadas para ejecutar una operación a nivel de kernel.
La única solución una vez desechada las ideas anteriores, fue la de realizar una recogida de
datos a nivel de kernel, modicándolo en tiempo real, para que el usuario nal no tenga que
realizar pesadas instalaciones ni ralentice el sistema.
Para implementar una solución de este tipo, se necesita un gran conocimiento de cómo se
enumeran internamente las funciones, y de cómo se trata Windows CE las llamadas a las funciones
de su kernel. Pero, afortunadamente Microsoft liberó parte de las especicaciones internas de
su sistema operativo para sistemas móviles en el cuál se podían ver la distribución de ciertas
estructuras del kernel de linux, y de ciertas llamadas no documentadas del API de Windows CE,
en concreto la llamada PerfomCallBack4, ha sido de especial interés para el estudio que ha sido
llevado a cabo.
Entre los datos que se encontraron en dichas especicaciones, se encuentran varias estructuras
de gran importancia como puede ser la KDataStruct, que incluye información interna sobre
todo el sistema, y se encuentra siempre en la misma dirección de la memoria68 . Dentro de esta
estructura podemos encontrar:
SYSHANDLE_OFFSET: que da acceso al proceso actual.
KINFO_OFFSET: que da acceso a un array de estructuras UserKInfo, que poseen informaciones tan importantes como la lista de módulos, el heap del kernel, y la importantísima
tabla de punteros a las API, SystenAPISets.
En Windows CE existen dos tipos de API, las implícitas y las basadas en handles . Las
primeras son accesibles de forma global mediante el uso de la tabla de punteros a las API, encon68
En concreto se encuentra en las direcciones 0xFFFFC800 para el procesador ARM y 0x00005800 para el resto
de CPU soportadas por el sistema.
255
Figura 3.16: Esquema de la información contenida en la estructura KDataStruct
trándose indexadas por su el identicativo de su categoría (SH_WIN32, SH_GDI, SH_WMGR,
etc.) y su número de API. Este tipo de interfaces, se encuentran contenidas en objetos de kernel
como mutex o eventos y son referenciadas mediante su número de API y el puntero (handle)
al objeto que las contiene. Este tipo de APIs no son actualmente monitorizadas por el agente
desarrollado.
En los sistemas Windows CE, las llamadas a las funciones del kernel, se realizan mediante la
llamada a unas direcciones de memoria especiales llamadas
traps ,
que generan una excepción
que son gestionadas por el dispacher del kernel de Windows CE.
La manera más limpia y rápida de realizar una auditoría de las syscalls que ocurren en un
sistema Windows CE, es modicar los punteros de las funciones que realizan la gestión de las
excepciones generadas por los traps, para registrar los datos que nos son relevante para luego
devolver el control a la función original suplantada por nuestro agente.
Como algunas funciones del Kernel de Windows CE, realizan una comprobación de que el
propietario del thread en ejecución lo que hace que el agente deba de residir dentro del propio
thread.
Además como ya se ha comentado con anterioridad, las llamadas a las funciones del kernel de
Windows CE, se abstraen dentro de llamadas a DLLs, en este caso, existe una DLL, coredll.dll,
que mantiene una caché con las direcciones de las funciones que tratan las llamadas, por lo
tanto mediante este sistema que hemos explicado, ocurre el problema de que las funciones que
son llamadas desde coredll.dll, no serían redireccionadas debido a la caché que mantiene en su
interior.
Para ello, si queremos también capturar las llamadas de la librería core.dll, habremos de
modicar las la cache de la librería para todos los procesos.
Al igual que en los procesos en Windows NT/2000, la inyección de una DLL, pasa por
funciones no documentadas, en este caso PerfomCallBack4, que provoca la creación de un thread
256
Figura 3.17: Detalle de interfaz de usuario del agente.
remotamente en el proceso que se desee. La inyección previa de un código binario que efectúe la
llamada a loadlibrary, hace el resto.
Existe también la necesidad de monitorizar también las llamadas de los nuevos procesos que
se creen y no solamente de los que ya existan el sistema en el momento de la carga, por lo que
también es necesario monitorizar la llamada CreateProcess de la API del kernel, para realizar el
mismo proceso con los nuevos procesos.
Por lo tanto una vez denida la metodología a seguir, se dividió el desarrollo en dos partes
separadas:
El apartado de modicación de la caché de coredll.dll, de la inyección de una dll en todos los procesos que llamen a las funciones nuestras, y la monitorización de la función
CreateProcess, para realizar lo mismo con los procesos nuevos.
El apartado de comunicación con la infraestructura de Mendizale y de interfaz de usuario.
La comunicación entre ambos componentes se realiza mediante la librería HTRACE[356], que
permite la comunicación entre las dos partes del sistema mediante memoria compartida implementado como un buer circular.
El apartado de comunicación con la infraestructura de Mendizale, lo que realiza es leer las
llamadas al Kernel de Windows CE del buer circular, y enviarla mediante una conexión TCP
a la infraestructura.
La gestión de la conguración y de la interfaz de usuario sigue dos caminos separados, por
una parte la conguración de las llamadas que son capturadas y las que no, cuestión que sea
realiza mediante un chero XML, en el que se especica qué llamadas son capturadas y cuáles
no.
Por otra parte se puede congurar el puerto y dirección ip a la que se puede enviar el resultado
de la captura de las llamadas mediante la interfaz gráca, que es minimalista pero muy potente.
El sistema inserta un icono en el systray de Windows Mobile, estando en todo momento visible
y mostrando menús de conguración con el botón derecho del ratón.
Este sistema de interfaz gráca también permite parar y arrancar el sistema de logeo de las
llamadas, lo que permite al usuario del sistema nal controlar solamente los aspectos necesarios
para él.
257
3.2.3. Recogida de información en sistemas Windows.
Tradicionalmente Microsoft no ha caracterizado por permitir al usuario nal acceder a bajo
nivel a su plataforma Windows. Sin embargo la gran cantidad de usuarios que utilizan esta
plataforma siempre ofrece gran cantidad de información a los investigadores de los sistemas
operativos.
Desde que Desde que Windows 95 viera la luz en Agosto de 1995, se han publicado muchos
estudios y ensayos, sobre su funcionamiento interno y programación a bajo nivel. Gran parte de
estas investigaciones han sido llevadas a cabo por la comunidad de programadores de virus[315]
, que vieron en esta plataforma un entorno ideal al que migrar sus creaciones.
Actualmente, existen 3 grandes ramas en el mundo Windows. Por una parte tenemos la
conocida rama 9x, surgida del nacimiento de Windows 95, y dirigida al mercado doméstico.
Dada su orientación, la rama 9x carece de mecanismos de seguridad avanzados y permite una
gran exibilidad y compatibilidad con aplicaciones heredadas de MSDOS y Windows 3.x. La
rama 9x comprende también los sistemas operativos Windows 98 (1998) y Windows Millenium,
además de las diferentes revisiones de los mismos, Windows 95 OSR2, Windows 98 SE, etc.
Por otra parte encontramos la rama NT (New Tecnology), que surgió en la década de los
noventa con una clara vocación profesional, esta familia de sistemas operativos (Windows NT
3.X, Windows NT 3.5.X, Windows NT 4.X y Windows 2000), ofrecían una robustez y abilidad
ampliamente superior a los sistemas Windows 9X, que tenían un marcado carácter doméstico.
El comienzo de milenio, trajo consigo la eliminación por parte de Microsoft de la rama
Windows 9X, para ofrecer dos versiones de su sistema Windows XP, la versión Home Edition,
y la versión Professional, que ha disfrutado de una amplia difusión y fama en los sistemas
profesionales y privados, que puede considerarse como parte de la familia NT, ya que se trata de
una evolución de los sistemas NT.
De las misma manera los sistemas Windows 2003 (en todas sus versiones), también con un
marcado carácter profesional, se consideran dentro de los sistemas NT.
Otra de las ramas de los sistemas Windows, se trata de su versión para dispositivos móviles
con recursos limitados, como pueden ser PDAs o Tablet PC, Windows CE, tanto en sus versiones
CE4.1 (Windows Mobile 2003SE), ó CE 5.0 (Windows Mobile 2005).
Para nalizar, y con la inminente comercialización de los sistemas Windows Vista, surge
la última versión de Windows para PC con grandes cambios muy novedosos sobre las ramas
anteriores.
Actualmente el mercado doméstico de Microsoft esta copado con Microsoft Windows XP. El
mercado profesional utiliza también Windows XP (Professional) para escritorio, y Windows 2000
y 2003 para servidores.
El agente de recogida de información desarrollado está destinado a su uso en sistemas operativos de la rama NT, a partir de Windows 2000, cubriendo de esta manera la casi totalidad del
mercado actual.
258
Métodos de recogida de datos en sistemas Windows
Los sistemas de Microsoft Windows, funcionan a en dos niveles ofrecidos por la arquitectura
i386, los niveles 0, y 3 respectivamente. El kernel se ejecuta en nivel 0 (ring 0), y las aplicaciones
y procesos del sistema lo hacen a nivel 3 (ring 3).
Microsoft siempre ha tenido gran cuidado con mimar la compatibilidad entre sus plataformas
mediante la plataforma Win32, es decir, que una aplicación desarrollada en un sistema Windows
de la rama 9x, funciona igualmente en otro sistema de la rama NT.
Dado que en ambas ramas, el kernel es totalmente diferente en las dos ramas de Windows,
también lo son los procedimientos de llamada y de retorno de datos a la zona de usuario. Con
el n de salvar esta problemática en compatibilidad, los procesos de zona de usuario, nunca
llamarán directamente al kernel de Windows, sino que lo harán mediante la capa Win32, la cuál,
se encargará de la comunicación con el Kernel.
La capa win32 esta compuesta por una serie de DLLs del sistema que exportan un conjunto
de funciones similares, tanto en 9x como en NT, a los programas de usuario. A este conjunto de
funciones exportadas se le denomina la API win32.
A pesar de que la API ofrecida por la capa Win32, sea similar en todos los sistemas Windows,
la implementación interna de dicha capa, y de la comunicación con el kernel de Windows es
completamente diferente entre los diferentes sistemas. Por lo tanto la capa Win32, ofrece un
nivel de abstracción clave para el mantenimiento de la compatibilidad entre diferentes sistemas
Windows.
En el caso de la rama NT, la comunicación kernel - zona de usuario se realiza mediante dos
mecanismos diferenciados :
Mediante la interrupción 2E que al igual que la interrupción 80 en sistemas GNU/linux es
gestionada en zona Kernel, las DLL que forman la estructura de Win32, suelen terminar
su ejecución mediante la llamada a la interrupción int2Eh.
Listing 3.21: Utilizanción de int2Eh en Windows
2
MOV
EAX,
SyscallNumber
;
LEA
EDX,
[ ESP+4]
; EDX = p a r a m s . . .
INT
2Eh
requested
;
throw
;
return
the
syscall
number
execution
to
the
KM h a n d l e r
RET
4 ∗NUMBER_OF_PARAMS
Mediante la utilización de la instrucción optimizada sysenter[152] que realiza una ejecución
más rápida[31] que los sistemas tradicionales.
Listing 3.22: Utilizanción de int2Eh en Windows
push
fn
;
259
push
syscall
number
pop
eax
; EAX = s y s c a l l
push
eax
;
this
call
b
;
put
normalize
one
number
makes no
caller
diff
address
on
stack
5
b:
r:
add
[ esp ] , ( o f f s e t r − o f f s e t b )
;
mov
edx , esp
; EDX = s t a c k
db
0 fh , 34h
; SYSENTER i n s t r u c t i o n
add
esp ,
;
( param ∗ 4 )
normalize
stack
stack
De forma general, el sistema Win32, sigue utilizando la interrupción 2E, en lugar de la optimizada
sysenter, por lo que un debugger an nivel de usuario podría recoger la información de las llamadas
a las DLL, hasta que éstas efectúen la llamada al kernel de NT mediante dicha interrupción. Por
ejemplo, una llamada a la función
ExitProcess
de Kernel32.dll, prepara los argumentos para la
llamada ZwTerminateProcess en NTdll.dll, la cuál genera llamando a KiFastSystemCall, una
interrupción 2e.
De todo este funcionamiento se puede deducir, que existen dos maneras de monitorizar las
llamadas a el Kernel de Windows, una a nivel de zona de usuario, recibiendo las llamadas a las
DLL que conforman la capa Win32, y otra a nivel de Kernel, recibiendo las llamadas que realizan
dichas DLL al kernel de NT.
260
Figura 3.18: Esquema de memoria de NT, y posible puntos de recolección de datos.
Monitorización de llamadas a la API Win32
Por lo tanto el método a alto nivel, o a nivel de zona de usuario sería interceptar las llamadas a la API de Win32 que estandariza las llamadas al kernel de Windows. Para realizar esta
acción, existen diversos métodos, que permiten recoger información de este tipo de llamadas,
interponiendo el agente encargado de la recolección de datos entre el llamador y el llamado en
la función.
A continuación se enumeran las opciones posibles que se han contemplado para la implementación del agente a este nivel de el sistema operativo Windows.
Monitorización de la tabla de informaciones
Cuando un proceso hace uso de una llamada a una función implementada en una DLL, los
procesos no se limitan a saltar a la dirección de la función exportada. De echo aunque la dirección
de la función exportada se mapea en el propio espacio de direcciones de el proceso, no se garantiza
que las direcciones sean las mismas para todos los procesos, ni de que los desplazamientos para
la función exportada se mantenga entre diferentes sistemas operativos.
261
Este echo, puede ser fácilmente observado comparando con un debugger que las direcciones
de las funciones exportadas por el sistema para una misma función en los sistemas operativos
Windows 2000 y Windows NT, son diferentes.
Si diseñamos en ensamblador un programa que efectúe una llamada a ExitProcess asumiendo
como ja su ubicación en memoria para Windows XP, veremos como la ejecución de dicho
programa en un Windows 2000, u otro sistema operativo Microsoft, resulta en una excepción.
Los primeros ataques informáticos en forma de virus y shellcodes (ataques de inyección de
código), tomaban como jas las direcciones de memoria de las API que requerían, de tal manera
que eran especícos para una versión de Windows, fallando su aplicación genérica al resto de
versiones. En ocasiones, esta especicidad es tan grande que su aplicación para la misma versión
del sistema operativo, pero en distintos idiomas, no es viable.
Los primeros ataques informáticos en forma de virus y shellcodes (ataques de inyección de
código), tomaban como jas las direcciones de memoria de las API que requerían, de tal manera
que eran especícos para una versión de Windows, fallando su aplicación genérica al resto de
versiones. En ocasiones, esta especicidad es tan grande que su aplicación para la misma versión
del sistema operativo, pero en distintos idiomas, no es viable. Parece claro entonces que el proceso
no puede asumir una posición ja para las funciones exportadas por las DLL. Lo que ocurre en
realidad es que el proceso de usuario realiza una llamada a la API, de una forma indirecta a
través de la tabla de importaciones (IAT)69 .
Todos los programas win32 poseen formato PE (Portable Ejecutable), donde el .EXE se
encuentra dividido en un serie de cabeceras y secciones. Una parte de la cabecera PE esta
formada por la tabla de importaciones IAT, donde el programa expresa al cargador de Windows,
la lista de dependencias con funciones de DLLs.
El cargador del sistema operativo, realizará en el momento de la ejecución de dicho programa,
un mapeo de las DLLs necesarias donde del espacio de direcciones del proceso, y una resolución
dinámica de las funciones requeridas en la IAT. Se puede pensar en la IAT, como un largo
conjunto de buzones, donde en cada uno existe una etiqueta que indica el nombre de la función y
la DLL que la contiene. El cargador de Windows, se encargará en tiempo de carga, de introducir
un papel en cada buzón indicando la dirección de memoria absoluta de dicha función.
Posteriormente el proceso de usuario, cuando efectúa una llamada a una API como ExitProcess, tan solo realiza un salto indirecto sobre la IAT. De esta forma se garantiza una total
compatibilidad entre diferentes versiones de Windows.
La técnica de interposición basada en la modicación de la IAT, consiste en la modicación
de la tabla de importaciones de todos los procesos existentes, y de los nuevos generados. Esto se
puede hacer mediante el uso de ciertas APIs de Windows que permiten la escritura en la memoria
de otros procesos. El único problema es que la función trampolín a la que se redireccionará cada
API interpuesta, ha de residir en el espacio de direcciones de memoria del proceso remoto. La
69
Inport Address Table.
262
forma más sencilla de implementar esto es introduciendo todo el sistema de monitorización en
una DLL, y mapeando posteriormente dicha DLL en el espacio de direcciones de memoria del
proceso remoto al cual se pretende monitorizar. Esto se consigue mediante la introducción y
ejecución de un pequeño trozo de código ejecutable en el proceso remoto, que se encargue de
realizar una llamada a la API (LoadLibrary) que realice la carga de la DLL[218].
Existe un pequeño problema con la implementación de esta técnica de interposición. En
ocasiones, el proceso tan solo llama a un pequeño conjunto de funciones de DLL, presentes en
su IAT, y son estas DLLs las que internamente efectúan las llamadas a las DLLs del sistema.
Para evitar que estas llamadas pasaran desapercibidas (ya que no usan la IAT del proceso,
sino la IAT de la propia DLL que las contiene), hay que realizar recursivamente el proceso de
modicación de la IAT para todas las DLL utilizadas por el proceso.
Además, en ocasiones los procesos utilizan la carga y resolución dinámica de funciones de
DLLs, utilizando para ello las API LoadLibrary() y GetProcAddress. Con el n de detectar esto
último para realizar la modicación de la IAT de las nuevas API, es necesario interponer sendas
API LoadLibrary y GetProcAddress, para llamar en su ejecución al proceso de modicación de
IAT, antes de retornar el control al proceso que realizó la llamada.
Existen numerosas herramientas que implementan esta técnica, y todos ellos adolecen un
grave problema que sugiere la utilización de otro tipo de técnica para implementación de nuestro
agente.
Además, esta técnica para la interposición tan solo es efectiva cuando el proceso utiliza
método estándar para la resolución de la API. En efecto todos los procesos tienen la garantía de
utilizar este tipo de métodos, pero bajo los efectos de un ataque la situación cambia.
En los ataques de inyección de código, como por ejemplo los buer overfLow, un pequeño
trozo de código, llamado shellcode, es insertado y ejecutado dentro del proceso remoto atacado.
Esta shellcode efectúa una serie de acciones sobre el sistema que resultarán en una vulneración de
la seguridad del mismo. La shellcode requiere de la llamada a APIs y por tanto ha de resolverlas
dinámicamente.
Si bien es cierto que la shellcode podría utilizar la IAT para la resolución de la dirección de
las APIs, buscando en memoria el inicio de la tabla, existen otros métodos mucho más efectivos
para realizar dicha resolución que no toman la IAT como referencia[250].
Uno de ellos, por ejemplo, es la utilización del PEB (Program Execution Block) del proceso
para obtener la base de la dirección en memoria de kernel32.dll a n de localizar su tabla de
exportaciones para resolver todos sus métodos.
Al no utilizar la shellcode la IAT en su proceso de resolución, no se vería afectada por el
engaño
de la modicación de la IAT, y sus llamadas pasarían totalmente desapercibidas a
ojos del agente HIDS. El HIDS sería en este contexto totalmente incapaz de detectar ninguna
modicación entre las APIs llamadas por un proceso sano y uno que se encontrara bajo ataque.
En resumen, la interposición por modicación de IAT se muestra muy efectiva para el mode-
263
Figura 3.19: Ejemplo de modicación de memoria en el punto de inicio
lado de procesos en situaciones normales, pero gravemente incapaz de modelar todos los comportamientos de ataque. Por ello se ha descartado este método para la implementación de nuestro
agente.
Envolviendo DLLs
Otra técnica de interposición posible, consiste en la modicación en disco de todas las DLLs
del sistema (capa win32) a n de modicar el inicio de todas sus funciones para incluir el código
necesario para monitorizar su uso por parte del agente.
Un forma sencilla de implementar esta técnica, es la creación de DLLs envoltorio con las
mismas funciones exportadas que las originales. Cada función exportada sería simplemente una
función trampolín hacia la función original de la DLL real.
Esta técnica no resulta viable para su aplicación en nuestro HIDS ya que implicaría la modicación permanente en disco de importantes archivos de sistema, complicando de esta forma la
distribución e instalación del agente en sistemas en producción.
Modicando en memoria el punto de inicio de las API Win32
Otra aproximación posible es la modicación en memoria, en tiempo real, del inicio de todas
las funciones relevantes exportadas por las DLLs de sistema, para incluir una llamada a una
rutina del agente que realice la monitorización de la misma antes de devolver el control a la API
original.
Para simplicar el proceso, los bytes sobrescritos por el CALL introducido habrán de ser
restituidos (ejecutables) antes de que el control sea retornado. De esta manera el sistema, queda
igual una vez que se ha dejado de monitorizar las llamadas al API.
264
Este método es mas directo que la modicación de la IAT y no requiere ser realizado recursivamente por cada DLL, o la monitorización del uso de GetProcAddress. En efecto, al realizar
la interposición en el inicio de la cada función exportada, ésta es aplicable a todas las otras DLL
del proceso así como al proceso en si mismo.
Dado que cada DLL es mapeada de forma independiente en el espacio de direcciones de
memoria de cada proceso de usuario del sistema, la modicación de una de ellas no implica el
cambio de la misma en el resto de los procesos (no se encuentra en memoria compartida).
Por lo tanto el proceso de interposición habrá de realizarse para todos los procesos del sistema,
existiendo la necesidad de monitorizar la ejecución de nuevos procesos (mediante la interposición
de la API CreateProcess), a n de realizar el mismo proceso con ellos.
Finalmente, las funciones trampolín que se interponen a la llamada a las API originales, han
de residir en el mismo espacio de direcciones de memoria del proceso que efectúa la llamada. Para
que esto se cumpla, dichas funciones han de ser introducidas en la memoria del propio proceso.
Existe una librería, llamada Detours [168], provista por Microsoft Research que implementa
este método de interposición.
Detours automatiza el proceso de modicación del inicio de las APIs requeridas y la gestión
de la inyección remota de la DLL. Las funciones trampolín residen por tanto en una DLL que es
insertada en el proceso a monitorizar (o en todos si se desean monitorizar todos), para comunicar
mediante un PIPE, toda la monitorización realizada.
Interposición de llamadas al sistema en modo kernel
Al contrario que el resto de los métodos de monitorización que eran implementados a nivel
de usuario (ring-3), se presenta también la posibilidad de implementar la interposición a nivel de
kernel.
Como ya se ha comentado, las DLL del sistema terminan efectuando llamadas al kernel mediante la interrupción 2e, o la instrucción sysenter. El kernel posee un dispatcher que redirecciona
la ejecución a la función correspondiente indicada en los registros del procesador. Para ello el
dispatcher, utiliza la tabla de punteros a servicios (system service table) que contiene la ubicación
en memoria de las distintas funciones de kernel.
Modicando dicha tabla de punteros a servicio, es posible redireccionar la llamada a las
mismas a nuestras funciones trampolín, que tras registrar su ejecución, redireccionarán el control
a las originales.
Las funciones trampolín habrán por tanto de residir a nivel de kernel ring-0, y el efecto de la
interposición será global a todos los procesos.
Existe una librería provista por la empresa BlindView, recientemente adquirida por Symantec,
que implementa esta técnica para la monitorización genérica de llamadas al sistema. Su nombre
es strace[38].
Strace esta compuesto por un driver (.SYS) que corre a nivel de kernel, conteniendo las fun-
265
Figura 3.20: Esquema de funcionamiento de la librería strace
266
ciones trampolín y realizando la modicación de la tabla de punteros a servicios, y un programa
de usuario que se comunica con el driver de kernel mediante una tubería (named pipe).
Efectividad de los diferentes métodos de interposición, para el modelado de procesos
en el HIDS.
Al igual que en el caso de GNU/Linux, la efectividad de un HIDS por modelado de syscalls en
la plataforma Windows, depende de la capacidad del agente para monitorizar todas las syscalls
generadas, incluso aquellas realizadas a bajo nivel por los ataques y el malware, y de la hipótesis
que un ataque es una desviación visible de las secuencias normales de llamadas la sistema del
proceso.
Este último punto ya ha sido demostrado en otros estudios[375] para otras plataformas UNIX
(Solaris) y también ha sido demostrado para GNU/Linux en apartados anteriores. En este apartado nos centraremos en su demostración práctica para la Windows 2000/XP.
También estudiaremos la capacidad del agente desarrollado, explicado en detalle en el apartado anterior, para la detección de las syscalls generadas por los procesos y el malware.
En el apartado de GNU/Linux nos centramos en el estudio de las llamadas al sistema para ataques de inyección de código. En Windows hemos reproducido los mismos experimentos,
utilizando sencillos programas vulnerables que escuchan puertos de red, y creando exploits en
Python que los atacan.
Los resultados se muestran similares a los obtenidos con GNU/Linux, pero con algunas matizaciones importantes que pasaremos a relatar. Para la monitorización de los exploits hemos
utilizado la librería strace y también Detours, con el n de determinar la diferencia entre las
mismas, y seleccionar la más adecuada para su implementación en el agente.
En términos generales Detours se muestra mas precisa a la hora de trazar el comportamiento
del proceso bajo ataque, ya que strace se muestra incapaz de reejar ciertas acciones como la
escritura de datos en un socket.
Strace por otro lado, se muestra mucho más ecaz para la detección de llamadas al sistema
efectuadas a bajo nivel por parte de ciertas shellcodes, para las cuales Detours no detecta nada. A
pesar de que los procesos de usuario siempre utilizan la API de Windows para efectuar llamadas
al sistema, las shellcodes por el contrario suelen muchas veces realizar las llamadas a bajo nivel
ejecutando directamente la int2e o el procedimiento syscall.
Detours además presenta gravísimos problemas de rendimiento al intentar monitorizar un
gran conjunto de syscalls (1400 en nuestras pruebas) dejando el sistema prácticamente inutilizable.
Además de demostrar su viabilidad para la detección de ataques de inyección de código, hemos
querido determinar su capacidad para la detección de malware para lo cual se ha monitorizado
la acción de un virus informático del tipo win32.
Para las pruebas hemos monitorizado las llamadas al sistema generadas por un proceso note-
267
Figura 3.21: Monitorización de syscalls de un proceso infectado con el virus Satir.994 utilizando
strace
pad sin infectar, y las hemos comparado con el mismo proceso una vez infectado.
Observamos que en la diferencia encontramos las acciones del virus, muchas de las cuales son
traducidas en llamadas al sistema, que nuestro agente es capaz de monitorizar. Esta observación
abre la puerta a la utilización de modelos para detección mediante patrones o anomalías.
Diseño e implementación del agente
El agente desarrollado para Windows 2000/XP implementa la técnica de interposición de
llamadas al sistema mediante la modicación de la tabla de punteros a servicios (system service
table), a nivel de kernel (ring-0).
El agente esta compuesto por 2 componentes principales, uno que corre a nivel de kernel
(ring-0) y otro a nivel de proceso de usuario (ring-3).
El componente de kernel hace uso del driver provisto por la librería strace[38] de BlindView
c . Dicho driver permite la interposición de syscalls en sus diversas categorías, posibilitando la
selección de las mismas en base a ltros.
La comunicación con el componente de nivel de usuario se realiza mediante una tubería,
desde la cual el proceso de usuario recibe la información que procesará y enviará por socket al
Head DFSU.
El componente de nivel de usuario ofrece también una rica interfaz gráca al usuario donde
éste podrá especicar el alcance de la monitorización del agente.
La interfaz se divide en distintos tabulados donde podemos especicar el conjunto de procesos
a los que aplicar la monitorización y el destino de la misma, chero o DFSU remoto.
Por otra parte también es posible seleccionar la extensión de la monitorización, especicando
por categorías las llamadas al sistema que serán monitorizadas.
Las diferentes pruebas sobre los sistemas Windows 2000 y Windows XP sp2 arrojan resultados
positivos, mostrando muy poca sobrecarga en el sistema. Sin embargo aún existe algún problema
de compatibilidad no resuelto.
En Windows XP con service pack 2 instalado, es necesario desactivar en registro la protección
268
Figura 3.22: Interfaz de usuario del agente, menús generales.
Figura 3.23: Menú de selección de syscalls hookeadas
269
Figura 3.24: Simplicación de la arquitectura de Symbian OS
de memoria con el n de que el agente pueda modicar la tabla de llamadas a servicios a nivel
de kernel.
3.2.4. Recogida de información en sistemas Symbian OS.
Para comenzar a explicar las diferentes formas en las que se puede capturar la interacción del
usuario con las aplicaciones y de éstas con el sistema operativo conviene introducir los mecanismos
internos y la arquitectura de funcionamiento de este tipo de terminales móviles. Centrando un
poco más el tema, en la siguiente gura se hace un resumen de lo que sería la plataforma diseñada
por los desarrolladores de este sistema operativo:
Symbian OS es una arquitectura que toma las bondades de los sistemas monolínitico y los
basados en microkernels, es decir, que integra funcionalidades de ambos. Se dispone de un hilo
en ejecución con la prioridad más alta para todo el sistema que se denomina nanokernel. Éste
hilo supervisor se encarga de tareas como la sincronización y la organización temporal entre los
diferentes procesos que se tienen en ejecución, así mismo desempeña funciones de mantenimiento
y acceso a bajo nivel, proporcionando una interacción que cumpla con los exigentes requisitos de
las pilas de comunicación GSM/GPRS/UMTS, dado que es objetivo fundamental el cumplir los
tiempos y latencias para poder funcionar correctamente con este tipo de redes.
Por otra parte, por encima del nanokernel se tiene la parte denominada núcleo (kernel)
270
propiamente, que se ocupa de tareas más complejas: acceso a objetos más complejos (hilos de
modo usuario, procesos, manipuladores de objetos del sistema, librerías cargadas dinámicamente,
comunicación entre procesos, etc.). A su vez proporciona una sincronización para objetos más
compleja que el nanokernel, si bien a diferencia del anterior, esta parte no puede alojar memoria
dinámicamente. Dado que no ha sido diseñado el kernel para manipulación de memoria del
terminal, esta parte se ha dejado por completo a cargo del modelo de memoria, implementado
como servicio del kernel en vez de estar embebido dentro del código del mismo.
Los semáforos, mutex, y elementos de sincronización que son proporcionados por el nanokernel, son utilizados por el kernel para poder crear hilos de ejecución de procesos sincronizados,
para conseguir comunicar entre sí diferentes procesos y para manipular los diferentes arrays de
manipuladores que integran este sistema operativo.
El modelo de memoria extraído del núcleo en sí mismo, denominado ASIC, se encarga y
encapsula de manipular si una cache (entendida como porción de memoria) va a estar alojada
en espacio virtual o en espacio físico. Proporcionando una serie de accesos diferentes para la
aplicación que lo requiera:
Acceso directo (sin hacer uso de la MMU)
Movimiento entre partes (parecido a como se realizaba en versiones anteriores EKA170 )
Acceso múltiple.
Acceso realizado para el emulador de Symbian OS71 .
El modelo de memoria proporciona servicios de manipulación de memoria a bajo nivel, como por
ejemplo el mapeo por proceso de su espacio de direcciones, se encarga cuando se le pide del cambio
de contexto adecuado en la sincronización y es parte fundamental para lograr la comunicación
entre procesos del terminal. Así mismo es importante su función a la hora de creación de procesos
haciendo uso del servidor de cheros del sistema72
70
Actualmente se habla mayoritariamente de EKA2, que es la arquitectura de diseño y desarrollo que se esta
llevando a cabo por los desarrolladores de Symbian OS
71
Como se verá más adelante, la arquitectura ha sido desarrollada para dos soportes hardware diferentes. La
primera es para los propios terminales móviles y la segunda es para facilitiar el desarrollo con pcs ordinarios, de
forma que es posible trabajar con este sistema operativo de forma emulada en un ordenador convencional basado
en IA-32 y sistema operativo Windows, GNU/Linux o MacOS.
72
Symbian OS confía en la denición de servicio para la implementación del kernel. De esta forma ha desarrollado
servidores especializados, como en este caso el servidor de cheros, de forma que si hay que tocar algo de la
memoria física de archivos, de donde habrá que copiar el código fuente de la aplicación para ponerla en ejecución
(los cheros ejecutables tienen una forma de estructuración parecida al formato PE de Windows, se denominan
E32, disponible en http://newlc.com/El-formato-de-los-cheros.html), se encargue de forma única este servidor.
271
Figura 3.25: Formato interno de los cheros ejecutables y librerías para Symbian OS
Como se ha indicado anteriormente, este tipo de terminales requieren de funcionalidades
especícas para poder trabajar con la red de GSM/GPRS/UMTS, por lo que disponen de dos
procesadores arquitecturalmente hablando. Uno se hace cargo de mantener operativo el sistema
operativo funcionando, mientras que el otro se encarga de realizar las operaciones que se requieran
para las transaciones dentro de la red de comunicaciones correspondientes.
Figura 3.26: Modelo simplicado de la arquitectura de procesadores de un terminal Symbian OS
Ya entrando a nivel de software desarrollable se encuentran los drivers de dispositivo, su
función es la de controlar los diferentes periféricos de los que dispone el sistema. Estos drivers
proporcionan la interfaz requerida entre esos periféricos y el resto del sistema Symbian OS. Más
adelante se volverá sobre este tema, con los drivers LDD y PDD. Así mismo más adelante se
explicara junto con los drivers un subconjunto de los mismos, denominado Extensiones, que son
aquellos drivers que se cargan nada más arrancar el mismo (bootstrap process). Estós últimos se
emplean generalmente para inicializar los dispositivos pero han sido usados para otras funciones
272
menos agraciadas73
Otra pieza clave es la librería que hace de nexo entre el ejecutivo (núcleo o kernel) y los
procesos o aplicaciones de zona de usuario. Esta librería se denomina EUSER.DLL y proporciona
los siguientes servicios:
Ejecución de métodos que enteramente se quedan en la zona de usuario. Como pueden ser
la manipulacion de cadenas de texto74 .
Acceso a las funciones del kernel que sean requeridas por un proceso. Estas operaciones
son privilegiadas, es decir, que un proceso o aplicación no puede hacer uso de las mismas
directamente.
Acceso a funciones que le indiquen al kernel que debe modicar su propia memoria, como
pueden ser las de manipulación de hilos, creación de procesos o carga de una librería.
Para dar por concluida esta primera fase de aproximación al conocimiento de este sistema operativo se presenta a continuación una imagen indicativa de las diferentes capas que tiene el kernel:
Figura 3.27: Capas del núcleo de Symbian OS
Otra parte importante son las librerías cargadas dinámicamente (DLL), el núcleo crea un
objeto de librería para cada DLL que se cargue explícitamente en un proceso de usuario, esto
implica que los estos objetos son especícos y pertenecen exclusivamente al proceso para el que
73
El virus Cabir, o Caribe, y sus diferentes versiones, si bien no llegan a infectar el terminal propiamente.
No llegan a cambiar el código fuente o el de ejecución de las aplicaciones. Se valen de este tipo de drivers para
lanzar un proceso o aplicación durante el arranque del terminal. Este proceso es quien se encarga de escanear por
Bluetooth (una tecnología de comunicación inalámbrica) y enviar una copia del propio virus. Ha sido la voz de
alarma para las entidades y organizaciones antivirales de la necesidad de introducir productos para los terminales
móviles Symbian OS.
74
En Symbian OS las cadenas de texto o strings de otros lenguajes se denen como Descriptores y se dispone
de una serie de Macros que implementa la librería EUSER.DLL para trabajar con ellos convenientemente.
273
fueron creados hasta el punto de que si dos procesos comparten la misma librería, el núcleo realiza
dos objetos para representarla diferentes.
Llamadas al sistema en Symbian OS
En Symbian las llamadas al sistema se denominan
Executive Call
75
y son el mecanismo pro-
porcionado por el núcleo al código de zona de usuario para dar acceso al mismo a sus servicios.
Estas llamadas ejecutivas empiezan como una función en zona de usuario y después se sirven de
una excepción76 como puerta de enlace para permitirles solicitar código de modo kernel. En la
implementación hardware de los terminales móviles con Symbian OS, generalmente una interrupción se activa mediante una instrucción SWI y esta en la arquitectura ARM solo se dispone de
una para pasar a modo privilegiado. Por este motivo se usa un repartidor en el nanokernel para
decodicar un parámetro pasado desde zona de usuario (opcode) en la instrucción SWI y con él
poder determinar la función a la que tiene que llamar el repartidor (dispatcher). Este mecanismo
de llamadas da como resultado un bajo acoplamiento entre el kernel y los procesos de usuario,
con lo que se pueden realizar cambios en la implementación o en el diseño de ambas partes sin
afectar al resto del sistema operativo de forma sencilla.
El ujo de ejecución de una executive call esta reejado en la gura:
Figura 3.28: Llamada ejecutiva al kernel de Symbian OS
Si se asume que se ha producido una llamada desde un hilo en ejecución en espacio de usuario
75
76
Llamada ejecutiva o llamada al ejecutivo, conocido también como el núcleo o el kernel.
En otros sistemas operativos esto se conoce como la interrupción de solicitud. En el kernel de Linux se hace uso
de la interrupción int80h y en MS-Dos/Windows de la int20h. El tratamiento de excepciones y de interrupciones
funciona de maneja semejante en las arquitecturas ARM, PPC o IA-32/64.
274
como la siguiente, en la que se pide una porción de memoria compartida:
Figura 3.29: Código fuente en el que se realiza la llamada para reservar una porción de memoria
El fragmento de código anterior solicita la creación de una porción de memoria y almacena el
manipulador que se le devuelve para poder referenciar a este espacio. Lo siguiente es encontrar
la dirección base del espacio que se consigue mediante el método RChunk::Base(), un método
que se encuentra denido dentro de la librería de usuario EUSER.DLL. El paso 2 se realiza
dentro de la propia librería aparte de realizar una serie de funciones para realizar la función
solicitada acaba con una interrupción: SWI EExecChunkBase, donde EExecChunkBase es el
opcode necesario para el kernel. En el paso 3 ya interviene el dispatcher del nanokernel y dado
que esto es una llamada rápida (más adelante se volverá sobre este tipo de llamadas) se busca
en una tabla de parejas de entradas de 32 bits que referencian a la llamada que se ha de realizar.
Finalmente tras procesar el paso 3 dentro del nanokernel se requiere hacer uso de otra parte del
núcleo al margen del propio dispatcher quien se encargará de realizara las operaciones necesarias
para la solicitud del proceso en zona de usuario (pasos 4 y 5).
Denotar que las llamadas ejecutivas se realizan en el espacio y contexto del hilo que las
solicita, lo que implica que no se ha salido del espacio de memoria del proceso en cuestión, con lo
que no es posible machacar zonas de memoria de otros procesos haciendo uso de este mecanismo.
Si bien es posible que una vez llegado a código de kernel privilegiado poder solicitar el acceso
a memoria del sistema en general, aunque para ello se requiere realizar una modicación de la
información contenida en ROM del terminal móvil, solución bastante compleja para realizar una
infección vírica.
Ahora se va a comentar las diferencias y la forma de funcionamiento de las llamadas ejecutivas
rápidas y las lentas:
Slow executive calls
Estas llamadas se ejecutan con las interrupciones habilitadas y con el kernel desbloqueado, lo
que implica que pueden ser interrumpidas y cambiadas de orden en la ejecución por motivos
de sincronización o solicitudes más urgentes (preemptive system calls). Estas llamadas solicitan
un bloqueo del sistema rápido antes de llamar al manipulador que requieran para realizar sus
operaciones y posteriormente lo liberan para pasar a llamar al manipulador obtenido, después de
esto solicitan al manipulador que haga la tarea que se requiere, pero entran dentro de la tónica
del sistema apropiativo y sincronizable por lo que pueden pasar a segundo plano y tener que
cambiar de contexto de mientras otra solicitud más importante es atendida.
275
Fast executive calls
Las llamadas ejecutivas rápidas al contrario que las anteriores se ejecutan con las interrupciones
deshabilitadas, por lo que deben de ser muy cortas y requerir muy poco tiempo en ejecutarse. Así
mismo no hay muchas de este tipo de llamadas y suelen ser usadas para cosas muy puntuales que
se realicen de forma rápida y efectiva. Las llamadas ejecutivas lentas pueden contener hasta 11
parámetros asociados, en cambio estas llamadas rápidas solo pueden tener asociado un parámetro
de 32bits y sólo devuelven otro valor de 32bits.
Seguridad de instrumentación binaria en Symbian OS
La seguridad dentro del sistema corre a cargo dentro de lo que se denomina una Capability,
que no es más que una autorización que indica si el dueño ha conado para poder acceder a los
recursos protegidos por la cadena de texto asociada. Este token de autorización puede dar acceso
a API's internas muy sensibles como a los drivers de dispositivos o a datos como la conguración
del terminal.Los diseñadores han creado una serie de reglas entre lo que se permite hacer y lo
que no dentro del sistema operativo:
Cada proceso tiene un conjunto de tokens, capabilities, y éstas no cambian durante toda
su vida
Cuando se desarrolla un programa ejecutable, se tiene que crear un chero con extensión .MMP
que es el denominado chero de proyecto. Adicionalmente se requiere actualmente de una línea
extra que dena las capacidades que se le deberán otorgar a un determinado ejecutable. Tanto
los ejecutables .EXE, como las librerías .DLL tienen sus características denidas de esa forma.
Estas capacidades son leídas y escritas en disco durante el proceso de instalación y permanecerán
inalterables desde ese momento, incluso durante la carga se almacenan en memoria en sitios
diferentes y no accesibles desde el programa en ejecución. Se pueden consultar, pero no modicar.
Un proceso no puede cargar una librería DLL que tenga un conjunto menor de capacidades
que él mismo
Una librería DLL no puede linkarse estáticamente con otra DLL que tenga un conjunto
menor de capacidades denido.
Otra parte interesante en el orden de la seguridad interna del sistema operativo es el tratamiento
de la parte de Servidores/Clientes. Como se ha comentado, Symbian incorpora un particionado
especializado de funciones y funcionalidades para tener un bajo acoplamiento dentro del código.
Un servidor, por ejemplo de cheros o de sockets o de telefonía, siempre comprueba y pregunta a
sus posibles clientes a ver si tienen las capacidades adecuadas para poder solicitarle la realización
de una determinada tarea.
276
Drivers de dispositivo y Extensiones
El papel de los drivers de dispositivo es dotar al código de zona usuario acceso a los recursos
periféricos del hardware sin exponer la operación de acceso al mismo al código de usuario y
volver al dispositivo inestable. Generalmente en todo sistema operativo restringe al modo de
supervisión el acceso a los recursos hardware, con lo que el acceso desde el código usuario a un
driver plantea la misma barrera que entre código de núcleo privilegiado y código en ejecución de
las aplicaciones de usuario. Los drivers son cargados dinámicamente por el kernel y se alojan en
el proceso del kernel después del arranque del sistema.
La arquitectura de drivers en Symbian OS se distribuye en dos capas: lógica y física, como
se indica en la gura:
Figura 3.30: Arquitectura de los drivers de dispositivo simplicada
Los drivers de dispositivo lógicos, LDD, contienen la funcionalidad de una serie de dispositivos
y son los que se comunican con el código de usuario mediante una interfaz simple que dene una
API concreta. Este tipo de drivers denen una serie de funcionalidades genéricas y se valen de
los drivers físicos, PDD para realizar el acceso al hardware en la manera apropiada. Los PDD
controlan por lo general un dispositivo periférico en particular y por norma sólo se comunican
directamente con otro driver LDD o con una extensión.
Las Extensiones del kernel, no dejan de ser drivers también, con la salvedad de que son cargados en el sistema en el momento del arranque del mismo y usualmente son muy especializados
para poder inicializar los diferentes recursos convenientemente.
277
Debug en zona de núcleo (Kernel)
La arquitectura de los terminales móviles actuales basados en Symbian (Symbian S60 3a
generación), basada en EKA2 ha sido diseñada para admitir debugger remotos a nivel de kernel.
Estos debuggeos del núcleo se pueden producir de las siguientes formas:
Debuggers para Emulador. Solución aceptada e implementada en el presente proyecto para
acceder a las trazas del sistema.
La solución empleada para poder acceder a las trazas del sistema ha sido esta debido a la
simplicidad de trabajar con emuladores y al hecho de poder tener acceso físico a los mismos,
pudiendo modicarlos y adaptarlos convenientemente para la integración de los mismos en la
infraestructura. La operación realizada se basa en cambiar la librería EUSER.DLL, a la que todas
las aplicaciones hacen referencia en su funcionamiento para poder solicitar tareas avanzadas,
por otra librería modicada que permitiera realizar la captura y envío de los datos necesarios.
La práctica que se ha llevado a cabo se puede aplicar en los móviles comerciales mediante la
actualización del software y modicación de este fragmento de código que reside en la ROM77
del dispositivo.
Para el desarrollo de la intercepción de llamadas al sistema se ha hecho uso del proyecto
HookLogger78 , que modicado ha dado pie a poder observar la forma de trabajo existente en la
presente memoria.
Figura 3.31: Selección de hilos en ejecución a interceptar
77
ROM, Read Only Memory. Memoria que contiene el kernel, los drivers y las librerías del sistema operativo,
que no permite ser escrita o modicada salvo con el hardware apropiado.
78
Disponible en la dirección ocial http://developer.symbian.com/main/tools/devtools/code/index.jsp, sección
de herramientas de desarrolladores de SymbianOS
278
Figura 3.32: Volcado de la memoria y de las peticiones que se realizan a la librería
Figura 3.33: Detalles de un hilo en ejecución
Debuggers de aplicaciones en tiempo real. Ideal para el desarrollo e implantación de aplicaciones.
Los debuggers en tiempo real permiten que una aplicación que se encuentre en ejecución en un
terminal móvil Symbian OS pueda ser monitorizada y controlada en base a excepciones (para
poder introducir los breakpoints o puntos de ruptura) desde un PC remoto. La arquitectura de
este tipo de sistemas es la que sigue:
279
Figura 3.34: Run-Mode Debugger
Debuggers con opción de parada y congelación del sistema operativo. Se usan para el
desarrollo de Drivers de Dispositivo o otro software relacionado con el desarrollo del núcleo
3.3. Cuestiones arquitectónicas
Antes de entrar de pleno con DFSU es necesario que todos hablemos o al menos entendamos
el mismo lenguaje, para ello comenzaremos con un repaso al estado del arte en los sistemas de
detección de intrusiones. Tras la lectura de este capítulo el lector deberá comprender qué es un
sistema de detección de intrusiones, cuales son sus principales variantes así como cuáles son las
principales ventajas y desventajas de cada uno.
3.3.1. Riesgo tecnológico, un problema en alza.
Irónicamente, al tiempo que las nuevas tecnologías se vuelven más complejas, al tiempo que
se vuelven más rápidas, más accesibles, se vuelven también más vulnerables. Esta armación a
priori contradictoria cobra sentido al desglosar los factores que componen el
Riesgo tecnológico
(RT):
RT =
N A∗IE∗CA
ST
Figura 3.35: Ecuación del riesgo tecnológico
RT
La variable RT (Riesgo Tecnológico) pretende dar un aproximación cuantitativa de la amenaza
a la que se enfrentan nuestros sistemas informáticos.
NA
280
La variable NA (Número de Ataques) representa el número de ataques que sufren nuestros
sistemas, independientemente de si estos tienen éxito o no.
IE
Por supuesto la variable NA no tendría ningún fundamento sin IE (Indice de Éxito) de estos
ataques.
CA
La variable CA (Consecuencias del Ataque) representa cuales son los daños (en términos
económicos) del éxito de un hipotético ataque.
ST
La variable ST (Seguridad Teórica) representa cual es el grado de seguridad de nuestros
sistemas, ¾actualizamos nuestro software? ¾usamos cifrado? ¾claves de seguras? etc...
Si bien es cierto que nuestras medidas de seguridad teórica han mejorado notablemente,
gracias sobre todo a la expansión de las técnicas criptográcas y a la seguridad perimetral, la
delegación progresiva de responsabilidades hacia los sistemas informáticos hace que el papel de
estos sea cada día más importante, aumentando inevitablemente las repercusiones de un posible
ataque.
Si el Riesgo Tecnológico dependiese exclusivamente de estos dos factores (CA y ST), es posible
que hubiera podido controlarse gracias a las mejoras en Seguridad Teórica, lamentablemente la
balanza ha sido brutalmente descompensada por una explosión sin precedentes en el número de
ataques79
En todo sistema incipiente sea este: Social, Cultural, Económico o ½como no! Informático,
se produce una evolución a través del uso. Al igual que los caminos de la España del siglo XV
estaban infestados de rateros peligrosos, las autopistas de la información del siglo XXI están
plagadas de malhechores no menos desdeñables. Los técnicos y legisladores del siglo XXI deben
desarrollar técnicas capaces de limpiar Internet de la lacra que nos asola, sin embargo deben
hacerlo empleando juego limpio, es decir mejorando
la seguridad teórica
y no restringiendo sus
fantásticas capacidades y virtudes.
79
Una de las razones del aumento en el número de ataques está en los virus informáticos. Los worms de hoy
incorporan rutinas no sólo para replicarse y propagarse sino también para explotar vulnerabilidades conocidas,
de este modo muchos de los sistemas que antes pasaban desapercibidos por no ser de especial interés para un
atacante humano son ahora los más afectados .
281
3.3.2. Introducción
En la tarde del Miércoles 2 de noviembre de 1988 ordenadores de puntos vitales de los
Estados Unidos, como la NASA, el Pentágono, el Instituto Tecnológico de Massachusetts, las
Universidades de Berkeley, Stanford, Princeton, etcétera, de una costa a otra, de ARPANET a
MILNET, fueron cayendo uno tras otro, víctimas del
gusano
de Robert Morris.
Se habló entonces de millones de dólares en pérdidas y de un diez por ciento de Internet
colapsado. Tal fue la repercusión de ese primer gran ataque que tan solo una semana después,
con el gusano en cuestión aún en plena actividad, la Agencia de Proyectos de Investigación
Avanzada del Departamento de Defensa [DARPA] de los EEUU decidió fundar, en colaboración
con la Universidad Carnegie Mellon, el que sería el primer Centro de Respuesta ante Emergencias
Informáticas [CERT]; centro que posteriormente iría extendiéndose a un gran número de países,
entre ellos España [esCERT e IrisCERT].
Desde entonces hasta hoy los sistemas de seguridad informática han evolucionado enormemente y en muchas direcciones. Sin embargo, el hecho de que no exista una solución unicada,
que contemple el problema de forma global, es un síntoma de que dicho problema dista aún de
resolverse. Sin ir mas lejos, estos días Internet sigue convulsa tras ataques como el del gusano
Blaster y sus sucesivas variantes, con unas pérdidas económicas aún por cuanticar.
Tradicionalmente, la seguridad informática se ha fundamentado en los denominados mecanismos de control de acceso, de forma que el objetivo que se ha perseguido siempre ha sido el de
poder identicar a los usuarios que acceden al sistema, para así poder concederle o restringirle
el acceso a determinados recursos.
Si suponemos que nuestro sistema es una nca, este control de acceso podría realizarse poniendo unos buenos barrotes en las ventanas, reforzando las cerraduras y teniendo un exquisito
cuidado con quien recibe una copia de la llave para entrar. Además, sería una buena idea colocar
en el perímetro de la nca una verja electricada, para de este modo extender el área de seguridad más allá incluso de la puerta de entrada. Lejos de ser una simple metáfora, está es una
práctica que se sigue en el mundo de la informática casi al pie de la letra, esta es la idea con la
que se diseñaron los rewall o cortafuegos.
Sin embargo, no sólo evolucionan los mecanismos de defensa, también lo hacen las técnicas
de ataque y lo hacen hasta tal punto, que hoy en día los mecanismos de seguridad perimetral
(rewalls) son una medida necesaria pero claramente insuciente. Resumiendo: Una muralla cada
vez más gruesa siempre ha recibido el saludo de un cañón cada vez más potente.
Existe además una creencia generalizada (probablemente por llevar este tipo de paralelismos
con la vida real demasiado lejos) de que los ataques deben llegar siempre desde el exterior, nada
más lejos, gran parte de los ataques a lo que se enfrenta una red provienen precisamente desde su
interior. Empleados descontentos u ordenadores portátiles infectados, suelen ser las principales
fuentes. Salta a la vista que necesitamos un mecanismo automatizado para poder detectar a los
intrusos
que ya han conseguido vulnerar el perímetro de seguridad. Aquí es donde entran las
282
técnicas de detección de intrusiones.
Figura 3.36: Seguridad Perimetral (Firewall)
3.3.3. Detección de intrusiones
Un Sistema de Detección de Intrusos (IDS80 ) trata de detectar (y prevenir81 ) toda aquella
actividad subversiva que se desarrolla en el perímetro de nuestro sistema o que ya está dentro de
nuestra red. Una de las primeras referencias que podemos encontrar en el campo de la detección
de intrusos es el, ya un clásico, artículo de Dorothy E. Denning
An Intrusion Detection Model ,
de 1987 [EDENNING01]. Este artículo recoge desde un punto de vista conceptual gran parte de
las estrategias de detección más utilizadas en el momento. En él se establece por primera vez una
clasicación de los IDS que llega hasta nuestros días, por un lado el
de uso indebido
y por otro la
Reconocimiento de patrones
Detección de anomalías.
A pesar del peso histórico de escte artículo, utilizaremos otra clasicación más acorde con
los tiempos extraída de la obra Sistemas de Detección de Intrusiones por Diego González
[DGONZALEZ01]. Este autor establece tres fases generales de funcionamiento para cualquier
IDS, y los clasica según las técnicas empleadas en cada una de estas fases.
Como puede verse en la gura 3.37, la actividad del IDS se divide en 3 pasos:
1. Recogida de información: Capturar la información que posteriormente analizaremos.
2. Análisis: Dónde procesamos esta información.
3. Respuesta: Una vez el sistema he determinado si la información recogida compone una
amenaza o no deberemos tomar las medidas oportunas.
80
81
IDS, acrónimo de Intrusion Detection System
Últimamente los IDSs están evolucionando hacia los IPS (Intrusion Prevention System) donde se trata de
detectar la intrusión antes de que se produzca algún ataque.
283
Figura 3.37: Etapas en el proceso de detección
Taxonomía en base al método de recogida de información
Atendiendo a la fuente de la que los IDS's extraen la información, podemos establecer dos
categorías. Por un lado los IDS's basados es host (HIDS82 ) y por otro los IDS's basados en red
(NIDS83 ).
IDS's Basados en Máquina (HIDS)
Su funcionamiento en similar al de un antivirus en
el sentido en que el IDS se ejecuta como proceso local a la máquina que se desea vigilar. Este
proceso permanece habitualmente en estado dormido y en base a una serie de condiciones de
activación despierta para chequear si el estado del sistema es seguro o no. Determinar el estado
del sistema no es tarea fácil y su análisis debe afrontarse como si de una gran ecuación se tratara.
Esta ecuación debe tratarse con el mayor de los cuidados pues el más ligero cambio en cualquiera
de las variables puede signicar que el sistema a pasado de un estado seguro a uno inseguro o
viceversa.
82
83
HIDS, acrónimo de Host based Intrusion Detection System
NIDS, acrónimo de Network based Intrusion Detection System
284
A pesar de que todos los HIDS se ejecutan en la máquina a proteger, no todos ellos extraen
sus variables de los mismos puntos. A continuación se describen vagamente los enfoques más
comunes:
Llamadas al Sistema:
Los sistemas operativos ofrecen un conjunto de interrupciones que
pueden ser llamadas por las aplicaciones de usuario para invocar un servicio proporcionado
por éste. Cada uno de estos servicios se llama
syscall
syscall
o llamada al sistema, un ejemplo de
sería abrir un chero. Dependiendo de la complejidad del programa de usuario el
número de syscalls puede variar entre unas pocas en programas muy sencillos hasta miles o
decenas de miles en programas complejos. Al conjunto de syscalls que ejecuta un programa
se le llama
traza
y nos da una idea bastante precisa de su comportamiento.
Registros de Auditoría:
El Sistema Operativo, así como muchas de las aplicaciones de
usuario en ejecución sobre la máquina, mantienen una estricta contabilidad de todo lo que
está sucediendo84 . Esta información tradicionalmente se exporta en el caso del sistema
operativo a través de los dispositivos ubicados en /proc/85 y en el caso de los programas de
usuario a través de cheros de log. Por su sencillez y facilidad de acceso no es de extrañar
que esta fuese una de las fuentes de información más empleadas en los primeros IDS.
Vericaciones de integridad:
Dentro del área de conocimiento de la Detección de In-
trusiones orientada a la Máquina, Gene Kim y Eugene Spaord introdujeron, (1994), en
su artículo The Design and Implementation of Tripwire:
A File System Integrity Checker
[TRIPWIRE01], el concepto de Vericación de Integridad, también conocido como Detecci
ón de Intrusiones orientada a Objetivos86 . En dicho artículo, los autores proponían un Sistema de Detección de Intrusiones que aplicaba técnicas criptográcas de cifrado irreversible
empleando para ello funciones resumen, con unas propiedades muy características:
• La entrada del chero debe poder se de tamaño indeterminado.
• El resultado resumen debe ser de tamaño jo, como es lógico varios órdenes de magnitud más pequeño que la entrada.
• Dado x, calcular H(x) es en términos computacionales barato.
• H(x) es de un solo sentido, es decir no tiene función inversa.
• H(x) no debe presentar colisiones.
El objetivo perseguido por esta técnica es garantizar la integridad de aquellos recursos
críticos del sistema a proteger. De esta forma, aparecía una nueva tipología de sistema de
84
Esta información se suele emplear para generar perles de rendimiento o para análisis forense en caso de que
el sistema haya sido comprometido.
85
El empleo de dispositivos /proc es común en los sistemas Unix like, otros sistemas como por ejemplo Windows
utilizan otros métodos.
86
Detección de Intrusiones orientada a Objetivos o Target-based Intrusion Detection.
285
detección que, si bien mantenía claramente su orientación a la máquina, dejaba de utilizar
información proveniente de los registros de auditoría de sistemas operativos y servicios de
aplicación, y pasaba a utilizar sus propios registros.
/newpage
Conclusiones HIDS
A continuación se detallan las principales ventajas e inconvenientes de
los HIDS:
Puesto que se ejecutan en la máquina a proteger tienen acceso a un abanico de
variables mucho más rico que el tráco de red (syscalls, auditoría de cheros etc...)
Tienen además acceso al contenido de las conexiones cifradas por estar en uno de los
extremos del tráco.
Por otro lado, las labores de administración son mucho más costosas ya que deberá
congurarse cada ordenador a proteger.
Por muy bien que esté programado el HIDS, los fallos de seguridad existen, de
manera que irónicamente el mecanismo de protección pudiera convertirse en la puerta
de acceso para posibles ataques.
Toda la carga del proceso de detección se lleva a cabo en la propia máquina por lo
que el HIDS degrada el rendimiento de la máquina donde se instala.
IDS's Basados en Red (NIDS)
Este es el enfoque utilizado por la mayor parte de los IDS's
modernos que emplean la información capturada a través de sniers87 en diferentes segmentos de
la red del sistema para detectar posibles ataques. De este modo, un solo NIDS puede monitorizar
el tráco de toda una subred, protegiendo así varias máquinas simultáneamente.
A menudo una implementación real de un NIDS corporativo se compone no de uno, sino de
varios NIDS distribuidos en las distintas subredes, cada uno de ellos funcionado por separado en
su segmento de red. Así es precisamente como funciona Snort88 .
Figura 3.38: Logotipo de Snort
87
Un packet snier es un programa de captura de las tramas de red .Generalmente se usa para gestionar la red
con una nalidad docente, aunque también puede ser utilizado con nes maliciosos [WIKI03]
88
Snort es el estándar de facto de los NIDS. Snort (http://www.snort.org) está disponible bajo licencia GPL,
gratuito y funciona bajo plataformas Windows y Unix like.
286
Es habitual que los NIDS sean máquinas dedicadas exclusivamente a la detección de intrusiones, lo que por regla general los hace menos vulnerables89 , además no es extraño llegar al extremo
de no asignar IP al interfaz dedicado a la captura de paquetes, de este modo se evita que alguien
pueda direccionar ataques contra él e incluso utilizar cables de solo recepción o network taps,
evitando así que el equipo NIDS pueda ser
89
visto
por un hipotético atacante.
Esta armación a priori un tanto categórica se fundamenta en que en los sistemas muy especícos el número
de servicios suele ser muy reducido, un número de servicios reducido reduce a su vez las posibles puertas de acceso
a ese sistema. Esto lo hace más seguro.
287
A cada uno de los elementos de información que un IDS puede emplear para discernir si el
tráco que está analizando es o no un ataque se le llama métrica. Podemos clasicar las métricas
de red en dos subtipos [BYKOVA01]:
Información de cabecera:
El tráco de red va encapsulado dentro de las cabeceras
del protocolo que se esté utilizando. Como puede verse en la Figura 5: Cabecera IP esta
información se caracteriza por ser discreta90 y fácilmente extraíble ya que cada campo tiene
una longitud ja91 y está siempre en el mismo sitio. Los siguientes son ejemplos de métricas
extraídas de las cabeceras del protocolo:
• Direcciones IP origen y destino: Las direcciones de la máquina origen y de la
máquina destino son datos interesantes, tanto porque pueden ser empleados defensivamente en las medidas de control de acceso, como porque pueden llegar ser utilizadas
ofensivamente en denegaciones de servicio rudimentarias contra nuestro sistema. Supongamos por ejemplo que uno de nuestros servidores recibe un mensaje ICMP de
ping92 . Así pues, si el mensaje ha sido manipulado de forma que su dirección de origen
ha sido sustituida por la de destino, cuando nuestro servidor reciba dicho mensaje, en
lugar de responder al verdadero remitente se responderá a sí mismo indenidamente93 .
• Puertos origen y destino: Los puertos de origen y destino, son un excelente indicativo de actividades sospechosas, tanto para detectar barridos de puertos, como para
descubrir la presencia de servidores no autorizados en nuestra red (troyanos94 ).
• Flags TCP: Uno de los campos de la cabecera TCP, el de ags, contiene una serie de bits (URG, ACK, RST, SYN y FIN), por supuesto necesarios para el buen
funcionamiento del protocolo, pero que tradicionalmente se han modicado con otras
intenciones. Por ejemplo, para solicitar la conexión a un servidor, se activa el bit SYN,
mientras que el bit FIN hace justo lo contrario. Por sí solos no son especialmente signicativos, pero ¾no sería sospechoso que un mensaje llevase ambos bits activados?
Tampoco hay que olvidar que uno de los mayores problemas conocidos sobre plataformas Windows se fundamentaba en el manejo de paquetes OOB (Out of Band),
tramas con el bit URG activado [OOBATTACK01].
Carga útil:95
La información de cabecera es un añadido que los protocolos de comunica-
ciones deben agregar a sus transmisiones para que estas lleguen a su destino, sin embargo
90
91
Hay un número nito de posibles valores
Tal vez sería más apropiado explicar que la longitud del campo no siempre tiene por que se ja (casi siempre
lo es) sino que puede precalcularse cuanto va a ocupar. Esto sucede con el campo opciones de la cabecera IP.
92
Un ping es un mensaje con el que el emisor trata de averiguar si el receptor está activo, de forma que si es
así, éste devuelve un mensaje de echo.
93
94
Estos son los llamados ataques
chargen
Programa malicioso capaz de alojarse en computadoras y permitir el acceso a usuarios externos, a través de
una red local o de Internet, con el n de recabar información y/o controlar remotamente la máquina huésped.
95
También llamada payload.
288
lo que realmente le interesa al otro extremo es el contenido de la transmisión, la carga útil.
El problema del payload es que es generado en la capa de aplicación y cada aplicación tiene
su propio formato a la hora de organizar los datos del envío. Esto unido a que no existe un
modo able96 de determinar a que aplicación de usuario pertenece un determinado paquete,
hacen que la extracción de información del payload sea muy costosa.
Figura 3.39: Cabecera IP
96
Los puertos origen y destino podrían emplearse para identicar protocolos de aplicación conocidos. El pro-
blema es que no es un dato able ya que estos puertos pueden cambiar según las conguraciones.
289
Conclusiones NIDS
nientes:
Al igual que los HIDS, losNIDs también tienen sus ventajas e inconve-
Un solo NIDS bien situado puede cubrir las necesidades de un gran número de
ordenadores
El NIDS es transparente para los usuarios nales y siendo su administración
centralizada, los esfuerzos de los administradores de red son mínimos.
Pueden llegar a perder paquetes si el volumen de tráco en la red es muy elevado.
Los NIDS en principio no tienen acceso al payload de las conexiones cifradas
Un NIDS sabe si que ha tenido lugar un ataque, pero no sabe si ese ataque ha tenido
éxito o no, ni tampoco cual ha sido su impacto.
Taxonomía en base al método de análisis empleado
Atendiendo a que técnicas emplea el IDS para determinar, si las variables de control recogidas
representan o no un ataque, podemos distinguir principalmente dos corrientes. Por una lado los
sistemas de detección de usos indebidos y por otro los sistemas de detección de anomalías.
Reconocimiento de patrones de uso indebido
Este método trata de modelar todo el
conocimiento que los expertos de seguridad han adquirido a lo largo del tiempo, para de este
modo construir una lista negra de todas las actividades que pueden constituir un ataque. Su
utilidad es inmediata ya que el IDS sólo tiene que comparar el estado actual del sistema con
todos y cada uno de los estados recogidos dentro de la lista negra, si coincide con alguno de ellos
entonces es que se ha producido un ataque, de lo contrario el sistema está seguro.
Una denición sin duda más elegante es la propuesta por Rebecca Bace y Peter Mell:
Detection method that analyzes system activity, looking for events or sets of events that match a
predened pattern of events that describe a known attack.
Figura 3.40: Denición de patrones de uso indebido
Salta a la vista que este sistema tiene un fallo de base y es que aunque seamos capaces de
modelar todos y cada uno de los ataques existentes, algo por otra parte extraordinariamente
difícil, a medida que el tiempo vaya pasando surgirán nuevos ataques y poco a poco la lista irá
quedándose obsoleta.
/newpage
A pesar de sus claras limitaciones este sistema es muy popular, sobre todo por que cumple
perfectamente con su misión y por ser muy sencillo de comprender. A día de hoy este es el método
más empleado por los IDS modernos. A continuación se detallan sus variantes más conocidas:
Reconocimiento estático de patrones:
Esta técnica representa la forma más simple
de detectar malos usos. Normalmente se basa en sistemas que buscan mediante un reconocimiento de patrones relativamente simple cadenas o subcadenas dentro de las distintas
290
entradas. Si encuentran una determinada cadena binaria, entonces es que se ha detectado
un ataque.
Basada en probabilidades condicionales:
El reconocimiento estático de patrones de-
tecta una intrusión cuando cuando encuentra una determinada rma (característica), pero
esto no es del todo correcto, algunas rmas no reeje siempre un ataque. La aproximación
basada en probabilidad condicional trata de determinar la probabilidad condicional de que
una intrusión ocurra dada una cierta rma, para calcular esta probabilidad necesita datos
de intrusiones anteriores, por ejemplo, de logs de auditoría, eventos etc...
Basadas en análisis de transición de estados:
Esta aproximación representa las intru-
siones como una secuencia de transición de estados del sistema objetivo [PORRAS01]. Los
estados sucesivos se conectan mediante arcos que representan los eventos necesarios para
el cambio de estado. Cualquiera de los estados por separado no tiene por que constituir un
ataque en sí mismo, sin embargo la transición de un estado a otro sí puede constituirlo.
Detección basada en modelos:
Esta técnica combina modelos usos indebidos con el
razonamiento en base a evidencias. En este modelo, existe una base de datos con escenarios
de intrusiones formados por una secuencia de acciones que reejan el comportamiento de
una intrusión. En un momento dado un subconjunto de escenarios de ataque se considera
como escenario parecido. El IDS trata entonces de argumentar o rebatir los escenarios
dados en un chero de auditoría. El cálculo del razonamiento evidencial construido en el
sistema permite actualizar la probabilidad de la ocurrencia de los escenarios de ataque en
una lista de modelos activos.
Figura 3.41: Esquema de funcionamiento; Modelo de usos indebidos
291
Conclusiones reconocimiento de patrones de uso indebido
Los patrones de uso indebido son sencillos de implementar y de usar, tienen un índice de error
muy bajo, pero están limitados por su escasa exibilidad ante nuevos ataques. A continuación
se detallan sus principales ventajas e inconvenientes.
Es un sistema sencillo y de probada solvencia.
Al no requerir muchos cálculos los sistemas resultantes suelen tener un buen
rendimiento.
Están limitados en el sentido en que únicamente pueden detectar ataques conocidos
de previamente.
Detección de anomalías
Como respuesta a las carencias del sistema anterior surge una nueva
losofía de detección, fundamentándose ésta en una transgresora denición de ataque.
Una intrusión es una anomalía. Conozco lo que es 'normal' en mi sistema, para poder detectar
lo que no lo es (anomalías)
Figura 3.42: Ataque según la losofía de detección de anomalías
Tal y como puede verse en la Denición 2: Ataque según la losofía de detección de anomalías,
la base del funcionamiento de estos sistemas se basa en la suposición de que el perl de actividades
desarrollado durante una intrusión se desvía sensiblemente con respecto al perl de uso que un
usuario normal hace del sistema [CHEUK01]. De modo que el proceso de detección pasa por ser
capaz de modelar un perl del comportamiento normal del sistema para poder así identicar
cualquier desviación excesiva de ese perl como anómala y por tanto subversiva. A la hora de
determinar lo que es normal en el sistema, existen dos grandes aproximaciones [ROLAND01].
Por un lado están los sistemas capaces de aprender por sí mismos lo que es normal y lo que no,
para ello emplean técnicas estadísticas97 sobre variables como por ejemplo el número de procesos
en ejecución o el tráco de la red en un determinado instante y por otro los sistemas que en lugar
de aprender por sí mismos emplean conocimiento experto codicado en forma de reglas estáticas.
El primero de los problemas a los que deberá enfrentarse este modelo consiste en determinar
cuales son las variables más relevantes a la hora de denir un comportamiento normal. En
[HAROLD01] se proponer diferentes tipos de datos que pueden resultar útiles a la hora de
realizar la selección:
Variables de intensidad de actividad:
a una actividad
97
98
El sistema mide los valores numéricos asociado
a lo largo del pequeños intervalos de tiempo, de este modo obtiene de
Estas técnicas pueden variar desde lo más sencillo (medias, desviaciones, varianzas) hasta técnicas extrema-
damente sosticadas de aprendizaje automático (redes neuronales, redes bayesianas etc...)
98
Entendemos por actividad a cualquier proceso cuya ejecución pueda ser cuanticada numéricamente. Por
ejemplo el número de usuarios en el sistema o el número de Kbytes/segundo en una transferencia.
292
un modo muy preciso cual ha sido la evolución de esa actividad a lo largo de intervalos de
tiempo mayores.99
Variables Numéricas:
Algunas veces no tiene sentido analizar la evolución cronológica
de la variable, simplemente basta con conocer su valor100 .
Categóricas:
Aquellas cuyo resultado es una categoría individual, y miden la frecuencia
relativa o la distribución de una actividad determinada con respecto a otras actividades o
categorías101 [VILLALÓN01].
Registros de auditoría:
Esta medida analiza la distribución de las actividades generadas
en un pasado reciente basándose en los logs102 generados por las mismas; dicho análisis se
realiza de forma ponderada, teniendo más peso las actividades más recientes, y es comparado con un perl de actividades `habituales' previamente almacenado, de forma que permite
detectar si en un pasado reciente se han generado eventos inusuales[VILLALÓN01]
A día de hoy este es sin duda uno de los campos en la detección de intrusiones con una línea
de investigación más activa103 , no en vano existen cientos de aproximaciones104 , sin embargo, la
gran mayoría de ellas chocan con los mismos problemas [NATO01].
En primer lugar el sistema deberá ser capaz de describir de un modo efectivo el comportamiento del sistema, algo de por sí muy complicado105 , a esta dicultad se le añade el problema
de la comparación y es que dado un patrón de comportamiento almacenado y un patrón de
comportamiento actual ¾cual es la desviación mínima que marca la diferencia entre normal y
anómalo106 ?. Por si todo esto fuera poco, estos sistemas deben hacer frente a un problema más
y es que dependiendo en la técnica de aprendizaje que emplee el sistema, un atacante con los
conocimientos necesarios podría entrenar poco a poco el sistema con pequeñas variaciones de
comportamiento no lo sucientemente grandes como para ser consideradas en sí mismas como
una anomalía, pero si como para ir poco a poco cambiando el concepto de normalidad en el
sistema hasta adecuarlo a sus propositos.
99
Las mediciones se hacen cada breves periodos de tiempo para que un pico de actividad al comienzo del periodo
no pueda ser compensado con un descenso de actividad al nal del mismo.
100
101
Por ejemplo la variable número de procesos en ejecución.
Un ejemplo podría ser la comparación entre el número de intentos de entrada al sistema entre el usuario A y
el usuario B.
102
Un log es un registro de auditoría (generalmente un chero de texto) en el cual las aplicaciones vuelcan
información de algún tipo.
103
104
Esto es la más estudiada, pero no por ello la más extendida en entornos productivos.
El sólo hecho de que existan tantas técnicas debería ponernos sobre la pista de que algo no funciona bien ya
que si al menos una funcionase correctamente no habría sitio para muchas más. Esto pone de maniesto una vez
más el estado incipiente en el que se encuentran a día de hoy el conjunto de estas técnicas.
105
A pesar de que pueda parecer sencillo extraer las variables más relevantes incluso del sistema más sencillo
puede resultar extraordinariamente complicado.
106
Existen técnicas matemáticas que tratan de solucionar este problemas calculando el umbral óptimo, sin
embargo en la práctica el umbral suele ajustarse de un modo bastante ad-hoc
293
A pesar de los inconvenientes que presenta este método no debemos olvidarnos de sus ventajas
y es que teóricamente sería capaz de detectar los denominados
Zero days attacks
107
. Debemos
por tanto dar un voto de conanza a un modelo aún en las primeras etapas de su desarrollo, pero
que promete revolucionar el futuro de los sistemas de detección de intrusiones.
Figura 3.43: Esquema de funcionamiento de un modelo de detección de anomalías
107
Ataques nuevos aún no contemplados en las bases de datos, para los que evidentemente no existe ninguna
regla especíca.
294
Conclusiones detección de anomalías
A pesar de los inconvenientes presentados este es uno de los modelos más prometedores y sin
duda marcará el futuro de los sistemas de detección de intrusiones. A continuación se resumen
sus principales ventajas e inconvenientes:
Capacidad teórica de detectar ataques desconocidos por los expertos de seguridad.
Aprendizaje automático, menor necesidad de intervención por parte del administrador
de sistemas.
Tradicionalmente tanto su rendimiento como su efectividad ha sido baja comparada
con los sistemas basados en detección de usos indebidos.
Dado que el sistema evoluciona con el tiempo y la experiencia, cabe la posibilidad de
que un intruso pueda llegar a entrenarlo con el tiempo.
Taxonomía en base a la respuesta
Una vez detectado el ataque ha terminado gran parte de la labor del sistema de detección,
pero no toda, aún queda por decidir cual debe ser la respuesta ante dicho ataque. Existen dos
enfoques a la hora de tomar esta decisión:
Respuesta Pasiva
Este enfoque se caracteriza por una cesión de responsabilidad del sistema
hacia el administrador, el sistema simplemente noticará la ocurrencia de un determinado evento
y deberá ser el administrador quien tome las medidas oportunas para paliar en la medida de lo
posible los efectos del recién detectado ataque ente los métodos de noticación más comunes se
encuentran los siguientes:
Ficheros de registro108 :
Una de las alternativas más comunes y de mayor tradición con-
siste en que el programa escriba109 en un chero predeterminado cualquier evento o noticación que desee comunicar al administrador, será tarea de éste el analizar periódicamente
los cheros de registro en busca de información relevante.
Correo Electrónico:
Otra las alternativas más populares es el empleo del correo electró-
nico, de modo que la aplicación envía en un correo a la cuenta del administrador todas
aquellas incidencias que crea necesario reportar.
SMS110 :
Para noticaciones más importantes el sistema puede enviar un mensaje de texto
al administrador del sistema, indicándole brevemente el tipo y la hora de la incidencia que
se haya producido.
108
109
También llamados cheros de log
Para referirse a la acción de escribir en un chero de registro suele emplearse una mala adaptación del verbo
inglés to log : loguear
110
Acrónimo de Short Message Service, es un servicio disponible en los teléfonos móviles que permite el envión
de mensajes cortos entre teléfonos móviles, jos y otros dispositivos de mano [WIKI01].
295
En cualquiera de los métodos antes descritos se produce una diferencia de tiempo considerable
entre la detección del ataque por parte del sistema y la consiguiente acción del administrador. Es
precisamente este intervalo de tiempo el que hace incompatible el modelo de respuesta pasiva con
lo que más adelante describiremos como IPS o sistema de prevención de intrusiones. Podríamos
decir de un modo un tanto metafórico que un modelo de respuesta pasiva relega las funciones
del sistema de detección a las de un simple observador, es decir, puede presenciar un crimen y
llamar a la policía, pero nunca intervenir directamente a pesar de que una intervención temprana
resultaría casi siempre más efectiva.
Conclusiones respuesta pasiva
A pesar de ser un modelo muy conservador resulta ser una solución extremadamente útil
y la práctica totalidad de los sistemas de detección lo integran en sus soluciones, si no como
alternativa principal sí como complemento a una respuesta activa ecaz.
trusiones. A continuación se resumen sus principales ventajas e inconvenientes:
El sistema no podrá equivocarse tomando una decisión equivocada por cuenta propia.
Es más sencillo de instalar y congurar que un sistema de respuesta activa.
El sistema no podrá acertar tomando una decisión acertada por cuenta propia.
Requiere de una mayor intervención por parte del administrador de sistemas.
Respuesta Activa
Un sistema que implemente respuesta activa tiene la capacidad de res-
ponder ante un ataque una vez detectado. Este enfoque que a priori parece el más lógico111 , debe
con mucha prudencia, ya que a día de hoy no existe112 ningún sistema infalible113 . Deberá por
tanto tenerse en cuenta antes de introducir este tipo de modelos en sistemas productivos el hecho
de que en el caso de un falso positivo,el sistema estará respondiendo ante un estado legítimo.
Cualquier administrador de red sabe, que si la seguridad es importante, aún lo es más el asegurar
un buen servicio.
A continuación se describen las respuestas activas más comunes clasicadas en base el origen
de la captura de los datos:
Respuestas para sistemas de tipo Máquina
111
112
113
Quien mejor para intentar paliar los efectos de un ataque que aquel que viendo como sucede.
Podrá mejorarse la tasa de acierto pero probablemente no existirá nunca un sistema infalible.
falso positivo, es decir
falso negativo que es justo todo lo
Cuando un sistema falla puede hacerlo de dos formas: Bien con un
estado como subversivo cuando en realidad no lo es, o con un
catalogar como ataque un estado que en realidad si que lo es.
296
catalogar un
contrario, no
Envío de señales:
Si el sistema detecta que uno de los procesos en ejecución tiene un
comportamiento sospechosos puede enviarle una señal114 para nalizarlo.
Manipulación de los runlevels115 :
Para evitar males mayores, una vez detectado el
ataque, el sistema puede cambiar el runlevel, bien para apagar la máquina o para desactivar
las funciones de red. De este modo y como medida cautelar, el sistema quedaría en modo
de cuarentena hasta que el administrador del sistema decida cómo solucionar el problema.
Sistemas de decepción116 :
Una vez detectado el ataque, el sistema puede redireccionar el
proceso sospechoso a un honeypot, de este modo el proceso o la sesión del usuario seguiría
en ejecución pero en un contexto inocuo. El objetivo perseguido con esta técnica es ganar
tiempo para decidir si realmente es una ataque o en caso de que se conrme que sí lo es,
disponer del tiempo suciente para poder trazar la conexión e identicar al atacante.
Respuestas para sistemas de tipo Red
Interrupción de sesión:
Suponiendo que el protocolo en el que se encuentre el ataque
sea orientado a la conexión, sería posible que el sistema de detección cerrase esa conexión
remotamente. En el caso de TCP esto se consigue inyectando117 un paquete con el ag
RST activo. El éxito de esta técnica radica en inyectar el paquete antes de que el atacante,
de lo contrario no tendrá efecto pues los números de secuencia TCP no coincidirán.
Manipulación del Filtrado:
Esta opción permite la modicación de las reglas de un
rewall para así denegar el acceso118 a la IP del atacante durante un cierto tiempo.
DoS119 y DDoS120 :
Hay autores que consideran la opción de contraatacar frente a una
agresión. Para ello coordinarían una o varias máquinas para lanzar una denegación de
servicio al atacante.
114
115
En sistemas Unix like la señal que enviaría es la 9 (SIGKILL) denida en /usr/include/signal.h
En entornos Unix like, existen diferentes runlevels (niveles de ejecución), estos son los encargados de denir
que servicios están disponibles en el sistema. Para este caso en concreto son interesantes los runlevels 0 (parada
del sistema) 1 (modo monousuario) 2 (modo multiusuario sin red)
116
117
También llamados honeypots (tarros de miel)
Para inyectar un paquete dentro de una conexión de tipo TCP, necesitamos saber cuales son las IP origen
y destino de los dos extremos y el número de secuencia del segmento inmediatamente anterior al que queremos
inyectar. Toda esta información podemos conseguirla esnifando la conexión en curso.
118
119
En inglés se emplea el verbo to ban
Un ataque de denegación del servicio, también llamado ataque DoS (Denial of Service), es un ataque a un
sistema de ordenadores o red que causa una pérdida en el servicio a los usuarios. Normalmente provoca la pérdida
de la conectividad de la red por el consumo del ancho de banda de la red de la víctima o sobrecarga de los recursos
computacionales del sistema de la víctima. [WIKI02]
120
DDoS ( Distributed Denial of Service )es una ampliación del ataque DoS, se efectúa con la instalación de
varios agentes remotos en muchas computadoras que pueden estar localizadas en diferentes puntos. [WIKI02]
297
Conclusiones respuesta activa
La respuesta activa es el primer paso hacia la prevención de intrusiones (IPS121 ). A día de
hoy pocos son los expertos en la materia que no vean en esta técnica a la alternativa dominante
en un futuro no muy lejano.
trusiones. A continuación se resumen sus principales ventajas e inconvenientes:
El sistema podrá acertar tomando una decisión por cuenta propia.
Requiere de una menor intervención por parte del administrador de sistemas.
El sistema podría equivocarse tomando una decisión equivocada por cuenta propia.
Dado que hay que integrar el sistema de detección con el resto del hardware de la red,
la conguración suele ser más compleja.
IPS Intrusion Prevention Systems
Una de las últimas tendencias en el desarrollo de sistemas de detección de intrusiones son
los IPS o sistemas de prevención de intrusiones. Estos sistemas son una evolución lógica hacia la
hibridación entre los rewalls122 y los NIDS (véase Figura 3.44: IPS integrado en una red).
Figura 3.44: IPS integrado en una red
121
122
IPS (Intrusion prevention systems) técnica que se explica más adelante.
Conjunto de hardware y/o software montados sobre un sistema que controla el tráco entre dos redes aplicando
una serie de reglas especicas.
298
¾Por qué detectar a nivel de Firewall?
El rewall es un elemento crítico en cualquier cualquier red.
Nexo de unión con el mundo exterior.
Punto medio por el que pasa todo el tráco.
Modicación sencilla.
Alta efectividad (bajos falsos positivos)
En un sistema de estas características el tráco es analizando antes de entrar en la propia red,
luego si detectamos un ataque, este no tiene por que llegar a su destino, basta con que el IPS
ordene al rewall que haga un drop del paquete en cuestión, para que el ataque nunca llegue a
su destino. Atendiendo a las características expuestas en [SANS01] un IPS debe:
Deben analizar el tráco y responder en tiempo real para detener el ataque que se este realizando, ya que si la respuesta es muy lenta o tardía los host pueden haber sido
comprometidos y la intrusión no haberse evitado.
Debe tener un ratio muy bajo de falsos negativos y ser capaz de detectar un numero elevado
de ataques que no solo buscan la intrusión sino también la evasión123 . Al tiempo que no
deben provocar la denegación de servicio a usuarios legítimos.
Deben detectar e informar de actividades, internas y externas, anómalas así como del mal
uso de los recursos de los sistemas.
Alertar al personal de seguridad y responder a los intentos de intrusión modicando el
rewall o bloqueando el ataque el curso.
Deben ser capaces de procesar todo el tráco que se produce en las redes de alta velocidad124 .
123
124
Es decir pasar el control del IPS, típicamente con campos de la cabecera ttl muy bajos.
De lo contrario no serían de procesar todo el traco y sólo les quedaría dos alternativas descartar el paquete
o dejar pasar el tráco sin analizarlo. Cualquiera de las dos alternativas es seguramente una mala idea.
299
3.3.4. Introducción a DFSU
A lo largo del Capítulo 1 hemos pasado revista en mayor o menor medida a los distintos
modelos que históricamente han sido empleados para tratar de detectar de un modo lo más
efectivo posible, cualquier intrusión o intento de intrusión. En el segundo capítulo, emplearemos
estos conocimientos para describir y clasicar DFSU tratando en la medida de los posible justicar
nuestras decisiones. Tras la lectura de este capítulo el lector deberá comprender cuál la estructura
básica de DFSU y ser capaz de describir comparativamente DFSU con respecto a las técnicas
descritas en el Capítulo 1.
¾Por qué desarrollar otro IDS?
A día de hoy existen en el mercado innidad de alternativas capaces de implementar la
práctica totalidad de las técnicas de detección descritas a lo largo del primer capítulo, parece por
tanto lógico hacerse las siguientes preguntas ¾tiene sentido crear otro IDS?, ¾aporta DFSU algo
nuevo al panorama tecnológico actual o es una simple prueba de concepto?
Para contestar a estas dos preguntas, lo mejor sería empezar por explicar lo qué no es DFSU.
A pesar del contexto puramente académico en el que se localiza el presente trabajo, DFSU
no es ni un desarrollo formal ni una prueba de concepto sino más bien todo lo contrario. DFSU
pretende ser una alternativa real a los problemas125 de seguridad a los que el conjunto de nuestros
sistemas de información deben hacer frente cada día, problemas que por otra parte ninguno de las
innumerables alternativas existentes en el mercado ha sido capaz de erradicar. Con la esperanza
de triunfar donde otros fallaron surge DFSU, un nuevo enfoque en los sistemas de detección de
intrusiones.
¾Qué es DFSU?
Si nos remontamos al comienzo de esta memoria, concretamente al Capítulo 1, capítulo en el
que se describe el estado del arte de los sistemas de detección de intrusiones, veremos que éste
se encuentra dividido en tres secciones principales. En cada una de estas secciones se describe
una taxonomía o clasicación126 :
Los IDS's pueden estar basados en host o basados en red,
basados en anomalías o basados en reglas .
Cada una de estas clasicaciones tiene sus ventajas e
inconvenientes, mientras que los sistemas basados en reglas son poco exibles pero muy ables,
los sistemas basados en anomalías son justo todo lo contrario, muy exibles pero poco ables.
La inmensa mayoría127 de los sistemas existentes siguen muy de cerca esta clasicación,
es decir, crean sistemas basados en máquina o en red, basados en anomalías o reglas, algunos
empiezan ahora a incorporar respuesta activa y respuesta pasiva pero son los menos128 . Nosotros
125
126
127
Problemas por otra parte no menos reales
Véase Figura 3.45
A excepción de DIDS (Distributed Intrusion Detection System) prototipo desarrollado por la universidad de
California, no se continua desarrollando.
128
Algunos plugins de snort permiten recongurar iptables y snort inline por su puesto
300
creemos que este tipo de clasicaciones están obsoletas129 , puede que tuviese sentido hace años
cuando la seguridad de la información era un problema virgen y tan gigantesco que tratar de
abarcarlo todo a la vez era impracticable. Hoy cada uno de los campos de especialización en los
que se dividió el problema para hacerlo más asequible, está lo sucientemente maduro como para
retomarlo y emplearlo como base solida desde la que lanzar el ataque nal hacia la unicación.
El futuro pasa por correlacionar el tráco sospechoso en un segmento de red con la actividad
anómala en el ordenador que lo generó y esto es precisamente lo que es DFSU; Un framework
capaz de analizar de un modo centralizado tanto la información de cualquier tipo de dispositivo
físico (PC's, PDA's, teléfonos móviles) como máquina de sus comunicaciones (tráco de red).
Figura 3.45: Taxonomía de los sistemas de detección de intrusiones
129
Al menos en la práctica, desde un punto de vista académico la clasicación seguirá siendo por supuesto válida.
301
DFSU, una visión arquitectónica
Para lograr la integración tan deseada, DFSU se fundamenta en un modelo multicapa de
agentes distribuidos. Cada uno de los agentes distribuidos será un punto de recogida de información heterogéneo que podrá estar instalado bien en una máquina, recogiendo la información que
procesaría un HIDS o bien en un segmento de red recogiendo la información que procesaría un
NIDS. Es importante recalcar que los agentes distribuidos a diferencia de los HIDS o NIDS no
realizan ningún tipo de procesamiento sobre la captura sino que simplemente lo empaquetan y
lo envían a través de la red hasta la infraestructura centralizada de procesado.
Dado que el procesado no tiene lugar en el punto de captura, los agentes serán procesos ligeros
que podrán instalarse en prácticamente cualquier dispositivo hardware130 sin una degradación
perceptible en su rendimiento131 . Evidentemente esto tiene su contrapartida, la infraestructura
centralizada a la que se reporta toda la información desde los agentes, deberá ser capaz de
procesar grandes volúmenes de información132 . DFSU consigue este objetivo introduciendo una
capa de procesamiento sobre la que el administrador podrá añadir o retirar unidades133 hasta
ajustarlo a las necesidades de su entorno productivo.
130
A día de hoy tenemos programados agentes de este tipo no sólo para segmentos de red u ordenadores perso-
nales, también para teléfonos móviles y PDAs
131
No degradando de un modo perceptible el rendimiento de la máquina sobre la que se ejecuta, solventamos
uno de los grandes inconvenientes presentados por los HIDS.
132
El volumen de información dependerá lógicamente del número de agentes y de la cantidad de información que
recojan.
133
Nos referimos por unidades a cualquier dispositivo capaz de procesar información, generalmente serán PCs
302
DFSU se fundamenta por tanto en una arquitectura cliente/servidor de 3 capas134 : la capa
de captura, capa de distribución y capa de procesamiento. La idea fundamental de la losofía
cliente/servidor es la distribución de las tareas que debe realizar el sistema. Cada capa se encarga
de proveer ciertos servicios:
Capa de captura:
Constituida por el conjunto de los agentes distribuidos, su misión será
recoger información heterogénea, empaquetarla y enviarla a la capa de distribución.
Capa de distribución:
Esta capa tiene la misión de centralizar tanto las entradas del
sistema (fuentes de información e interfaces de administración) como las repuestas
135
tras
la detección de un ataque.
Capa de procesamiento:
Una vez que la información llega hasta la capa de distribución,
esta se encarga de redistribuirla entre los distintas unidades que componen la capa de
procesamiento, estas en caso de detectar algún ataque le retornarán un aviso.
Una arquitectura multicapa cliente/servidor como lo que aquí se presenta, conere al sistema las
siguientes características:
1. Escalabilidad: Permite la adición de nuevos equipos en cualquiera de sus 3 niveles para
acomodarse a los requerimientos dinámicos del sistema.
2. Portabilidad: El software continua en vigencia más tiempo que el hardware que lo soporta,
es por ello que el software de DFSU se caracteriza por su portabilidad a través de distintos
tipos de hardware136 y sistemas operativos.
3. Apertura: Todos los datos están almacenados en cheros de formato abierto137 manipulables desde de un simple editor de textos.
4. Flexibilidad: Una arquitectura de este tipo permite ajustar la topología del sistema a un
gran número de entornos productivos.
3.3.5. Estructura básica de DFSU
Hoy en día la reducción de costes es un factor muy a tener en cuenta por toda empresa
que desee ser competitiva en el mercado, en este sentido, la adquisición de grandes máquinas
de procesamiento comienza a no ser justicable ante soluciones más económicas como son los
sistemas de procesamiento distribuido. En este capítulo se expondrán con nombre propio los
elementos que componen el sistema distribuido de DFSU ya explicados durante el Capítulo 2 así
como las topologías en que puede congurarse un sistema productivo.
134
135
136
Véase Figura 3.43[UINDEB01]
Véase el apartado 3.3.3
Hasta la fecha ha sido probado satisfactoriamente en arquitectura de 32 y 64 bits y en LittleEndian y BigEn-
dian
137
Formato XML Extensible Markup Language
303
Figura 3.46: Arquitectura de tres capas
Elementos estructurales y deniciones preliminares
Dentro de la estructura de DFSU se distinguen 3 elementos básicos: Masters, Heads y Tails,
la función de estos es implementar cada una de las capas en las que se divide DFSU:
1. Capa de Captura → Masters
2. Capa de Distribución → Heads
3. Capa de Procesamiento → Tails
Masters o agentes distribuidos
Los Masters son agentes heterogéneos y distribuidos cuya función es capturar, etiquetar y
encapsular en eventos la información que se desea analizar. Se encuentran dispersos a lo largo de
la red138 .
Además de enviar la información capturada a la unidad central (Head), estos agentes pueden
ser capaces de recibir y procesar comandos enviados por él. Estos comandos pueden ser de
conguración ya que DFSU se gestiona de un modo centralizado desde el Head o de respuesta
activa, en caso de que el sistema esté funcionando en modo IPS.
Dado que contamos con Masters especializados en diferentes campos (HIDS y NIDS), el
sistema dispone de una visión global de todo el entorno, pudiendo incluso llegar a correlacionar
eventos de máquina con eventos de red. Imaginemos por ejemplo una red en la que se dispone
de un master de red (Master2) y de un master de host (Master1)139 , ambos reportando la
información capturada a la infraestructura de DFSU. Supongamos ahora que el Master2 detecta
138
Normalmente los monitores de red suelen ubicarse en cada uno de los dominios de colisión de la red y los
Monitores de host en cada una de las máquinas que se quiera auditar.
139
Véase Figura 3.47
304
una anomalía en el tráco de red de la Subnet1, DFSU podría correlacionar esa anomalía con
el comportamiento de la aplicación que lo ha generado en el Host1, aprendiendo así cual es el
comportamiento a nivel de syscalls que tiene un efecto pernicioso para el sistema a nivel de red.
Fíjese el lector que DFSU desborda a los sistemas tradicionales ya que tiene acceso tanto
a los efectos del problema140 como a las causas que lo originaron141 , pudiendo así analizar el
problema desde los dos puntos de vista. Por si ésto fuera poco, DFSU puede llevar la respuesta
activa hasta cotas nunca antes soñadas y es que teniendo acceso directo tanto a las causas como a
los efectos puede intervenir sobre ambos. En el ejemplo propuesto, podría intervenir activamente
y recongurar un Firewall para que no deje pasar más tráco desde el Host1 (actuando sobre los
efectos) o podría cerrar la aplicación que esta creando problemas (actuando sobre las causas).
Como puede verse un modelo de este tipo permite un campo de acción prácticamente ilimitado.
Figura 3.47: Correlacionando HIDS y NIDS
Masters implementados hasta la fecha
A día de hoy DFSU cuenta con tres tipos de
masters completamente funcionales. Estos masters son tanto para la monitorización del tráco
de red como para la auditoría de máquinas. En el caso de los sistemas de red empleamos un
versión modicada de snort y en el caso de las auditorías hemos desarrollado una aplicación
nueva para la captura de syscalls como se explicará más adelante.
Monitor de red
Al comienzo del proyecto se planteó la opción de crear un monitor de
red empleando para ello la librería libpcap142 , llegando incluso a desarrollar versiones funcionales
de éste. Poco tiempo después nos dimos cuenta de que en realidad no tenía demasiado sentido
reprogramar desde cero algo sobre lo que habían estado trabajando programadores muy cualicados durante mucho tiempo. Decidimos por tanto adaptar Snort a nuestras necesidades. Ésta
elección tubo por dos motivos:
140
141
142
En este caso un ataque de red
Un conjunto de syscalls determinado.
Libpcap es una librería para la captura de datos desde zona usuario.
305
http://www.tcpdump.org
. [LOPEZ01]
1. Snort es a día de hoy el estándar de facto en los sistemas de detección de intrusiones basados
en red.
2. Snort está licenciado bajo GPL, gracias a esto podemos tomar su código modicarlo y
redistribuirlo143 .
Modicando Snort hemos conseguido no sólo las ventajas del mejor snier sino también un
veredicto con el que entrenar nuestros plugins basados en inteligencia articial de un modo
automático y no supervisado.
Monitor de Host
De todas las técnicas existentes a la hora de implementar un HIDS
hemos elegido la auditoría de syscalls por considerarla la más difícil de burlar144 siendo a la vez
la que puede suministrarnos una información más completa y detallada sobre la ejecución de los
programas en la zona usuario. No descartamos sin embargo integrar en el futuro esta solución
con otras ya existentes como por ejemplo Tripwire145 .
Actualmente en desarrollo
Existen a día de hoy varios proyectos del tecnológico de
Deusto que emplean la infraestructura de DFSU y en los cuales se están implementando nuevos
Masters, concretamente versiones para Windows Mobile lo que permitiría emplear DFSU en más
del 50 % del mercado de PDA's [EROSKI01], también para Symbian lo que cubriría el 57 % del
mercado de teléfonos de última generación146 [QUES01]. Finalmente existe también un proyecto
de crear una versión para Windows.
Head o unidad central
El Head es el elemento principal de la arquitectura e implementa la capa de distribución. Su
misión principal es la de recibir los eventos provenientes de los Masters y distribuirlos entre los
Tails pudiendo antes hacer ligeras147 modicaciones sobre esta información e incluso añadir nuevos datos. Se encarga también de centralizar todas las labores administrativas ya que implementa
las interfaces de usuario.
La distribución de la información o balanceo depende de la política de forwarding con la
que este congurado el sistema148 , el objetivo perseguido al balancear la información es dividir
el número de eventos entre varias unidades de procesamiento (Tails), logrando de este modo
aumentar el rendimiento y permitiendo una escalabilidad sin precedentes.
143
144
Por supuesto esto nos obliga a mantener la licencia original es decir GPL
Recordemos que está implementada a nivel de Kernel y no de usuario que es desde donde llegan los posibles
ataques.
145
146
147
Tripwire
http://sourceforge.net/projects/tripwire
También llamados SmartPhones
Las modicaciones deben ser computacionalmente sencillas, ya que si sobrecargamos el head toda la infraes-
tructura se resentirá notablemente.
148
Véase 3.3.7
306
Para simplicar las labores de administración, el Head centraliza además el conjunto de
alertas generadas por los Tails y toma la iniciativa de la respuesta activa enviando ordenes de
reconguración tanto a masters de red como a masters host.
El Head es una pieza clave del sistema, si el Head falla el sistema al completo dejaría de
funcionar, de ahí que en entornos reales existe la posibilidad de congurar Heads de respaldo los
cuales en circunstancias normales estarían inactivos pero que si ocurriera un fallo grave o una
labor de mantenimiento del sistema principal, podrían activarse y continuar con el trabajo.
Tails o unidades de procesamiento
Los Tails reciben y procesan tanto los eventos como los comandos que el Head les reenvía. Una
vez han recibido esta información se pone en marcha la infraestructura de eventos; Un paquete
de información es un evento de tipo red (nEvent) o de tipo host (hEvent) de modo que todos
los plugins suscritos al evento en curso serán llamados para que desarrollen la labor para la que
fueron creados.
Si el plugin en cuestión es un ExpertPlugin149 , éste deberá establecer si el paquete es o no
un ataque. En caso de que lo sea, la infraestructura generará un evento de tipo alerta (Alert)
que será enviado de vuelta al Head. Éste llamará a los plugins suscritos a eventos de tipo alerta
(OutputPlugins) y serán ellos quienes tomarán las medidas de respuesta oportuna.
Podríamos decir que los Tails son en núcleo de proceso de DFSU, pues en ellos se llevan a
cabo las labores de detección. Dado que la arquitectura permite escalar su capacidad simplemente
añadiendo maquinas, sería posible reducir el gasto en hardware empleando muchos ordenadores
lentos para igualar la prestaciones que daría uno más rápido o unir varios rápidos para manejar
un volumen de datos muy grande.
Conguraciones topológicas soportadas por DFSU
Uno de los principales problemas a los que deben hacer frente los sistemas de detección de
intrusiones es sin duda ser capaz de procesar un volumen de datos ingente y hacerlo además en
un lapso lo sucientemente pequeño como para poder dar una respuesta en tiempo real. Se hace
por tanto necesario, aumentar las capacidades de proceso de éstos sistemas.
Existen al menos dos alternativas para llevar a cabo ésta tarea; Por un lado nos encontramos
con la escalabilidad vertical. Esta consiste en denitiva en aumentar la potencia del hardware150
bien mejorando sus componentes151 , bien adquiriendo uno nuevo más potente. La otra alternativa
es la escalabilidad horizontal que consiste en emplear de un modo combinado la potencia de
equipos más pequeños, para lograr así un potencial de cálculo superior al que podrían desarrollar
cada uno de ellos por separado.
149
150
151
Véase 3.3.7
Esto puede conseguirse mediante el uso de mainframes y demás ordenadores de gama alta.
En inglés to upgrade
307
En las fases iniciales de este proyecto descartamos la escalabilidad vertical. La principal razón para tomar esta decisión, fue que ésta lleva asociada una inversión económica que no está
al alcance de muchas pequeñas y medianas empresas, ni por supuesto al de usuarios domésticos.
Decidimos por tanto apostar por un sistema de capas que permitiera ajustar de una manera exible y sencilla la capacidad de cómputo del sistema a cada escenario productivo. A continuación
se describen las principales
Estructura mono-capa
Esta es la conguración topológica más sencilla de todas y consiste en arrancar todas las capas
en la misma máquina. Es decir, tener en una sola máquina arrancados los Master y el Head con
los plugins de detección activos. Este modelo está totalmente desaconsejado para un sistema
productivo, sin embargo puede resultar muy socorrido en entornos académicos o de desarrollo en
los que el rendimiento no es un factor a tener en muy cuenta.
Estructura de dos capas
Únicamente desglosamos dos capas, una de captura y una en la que fusionamos distribución
y procesado. Activamos de este modo los plugins de detección en el Head prescindiendo de los
Tails pero aprovechando la potencialidad que nos dan los Masters distribuidos.
A la hora de montar este modelo, deberá tenerse en cuenta que la capacidad de procesamiento
de DFSU estará limitada por la máquina en la que se monte el Head, debiendo en cualquier caso
controlar el número de Masters distribuidos para no llegar a un escenario en el que el sistema se
vea sobrepasado por una carga de información excesiva.
En este tipo de conguración la escalabilidad en caso de sobrecarga está muy limitada, por eso
creemos que está puede resultar útil para sistemas no críticos quedando claramente descartada
para proteger redes de importancia crítica o que puedan generar un gran volumen de datos.
Figura 3.48: Estructura de dos capas
308
Estructura de tres capas
Esta es la conguración en donde DFSU explota plenamente el potencial de las tres capas152 .
En este esquema los plugins de detección se localizan en los Tails siendo éstos quienes envían las
alertas de vuelta hacia el Head para ser tratadas.
Como puede en Figura 2: Estructura de tres capas el número de Tails es variable, pudiendo
el administrador adaptar su número hasta adecuarlo a las necesidades de la red.
Figura 3.49: Estructura de tres capas
Se recomienda que la información que circula entre Heads, Tails y Masters vaya por una red
separada, de este modo no degradaremos el rendimiento de la red que pretendemos monitorizar153
sobre la que está montada el sistema productivo de la empresa y además proteger al propio
sistema de detección de potenciales ataques.
152
153
Véase Figura 3.43
De lo contrario un master de red el tráco de paquetes puesto que todo lo que circulo lo encapsula y reenvía
al head.
309
Estructura con plugins distribuidos
Los plugins de detección son los encargados del proceso de análisis de la información recogida
y pueden basarse bien en reglas cuya ejecución es poco costosa y por lo tanto suponen una
sobrecarga leve en el sistema o bien en redes con gran capacidad de análisis (Redes Bayesianas154 )
las cuales suponen una sobrecarga muy alta en la máquina donde están ejecutándose. Es en este
segundo caso donde los plugins distribuidos ayudan a evitar la sobrecarga del Tail que aloja los
expertos.
Figura 3.50: Estructura con plugins distribuidos
En caso de que dispongamos de un plugin muy pesado, podremos preparar una máquina, que
deberá estar conectada al Tail, donde se ejecutará el experto evitando así la posible sobrecarga.
154
Modelo probabilístico que relaciona un conjunto de variables indicando
explicitamente mediante un grafo dirigido inuencia causal.
310
Estructura con Heads jerárquicos
Si bien es cierto que el balanceo de carga existente en el Head alivia la carga que soportan los
Tails para que no se saturen, en sistemas con grandes volúmenes de información para analizar,
es el Head quien podría llegar a saturarse.
Para solucionar este posible aunque improbable problema, se puede establecer una jerarquía
de Heads que funcionarían de la siguiente manera:
1. En un primer nivel, el head únicamente actuaría como balanceador distribuyendo los eventos recibidos, sin realizar ningún cálculo ni procesado, de forma homogénea entre los Heads
de nivel 2.
2. En el segundo nivel, los Heads coordinados entre sí como si de uno solo se trataran, balancearían los eventos entre los Tails.
Figura 3.51: Estructura de Heads jerárquicos
Como puede verse en la Figura 3.51 podemos tener tantos Heads funcionando en paralelo
como se desee.
Conclusión
Sin duda contar con una arquitectura multicapa es una de las mayores virtudes DFSU, gracias
a ella podemos crear topologías tan diversas como las que se han presentado a lo largo de este
capítulo y que coneren a DFSU una escalabilidad y exibilidad sin precedentes en este campo
de estudio.
311
3.3.6. DFSU un programa polifacético
DFSU puede verse desde varias perspectivas según quién y cómo vaya a utilizarlo. Es por
ello que este apartado se desglosa en tres puntos; Perspectiva del usuario nal, perspectiva del
administrador de sistemas y perspectiva del desarrollador.
En cada apartado se explicará lo que cada usuario debería conocer para la correcta utilización
de DFSU y la repercusión que la implantación tendría en cada uno de ellos. Tras la lectura de
este apartado se deberán conocer las diferencias entre las tres perspectivas existentes.
DFSU desde la perspectiva del usuario nal
¾Quién puede ser un usuario nal de DFSU?
La respuesta a esta pregunta es fácil; cualquiera. Existen dos maneras a través de las cuales
DFSU puede estar recopilando nuestra información:
1. A través de la Red: Se da este caso cuando se está conectado a una red donde agentes
de DFSU están monitorizando el tráco que circula . La adquisición de datos por parte de
los agentes es completamente transparente para estos usuarios.
2. A través de Host: En este caso el agente debe estar instalado en la máquina del usuario.
Ésto genera un tráco añadido a la red que aún no siendo muy elevado, debe estar calculado
por los administradores de la misma con el n de que no repercuta en la percepción que el
usuario tiene de la calidad del servicio.
Problemática en materia de seguridad a la que se enfrentan los usuarios nales
Actualmente los usuarios que desean tener protegido su terminal, tanto PC's como PDA's y
terminales móviles, utilizan una serie de herramientas como antivirus, rewalls, HIDS, etc., que
repercuten de forma negativa en el rendimiento del sistema que utilizan. Además, deben soportar
las constantes actualizaciones a las que se ven sometidas diariamente estas aplicaciones con el
n de hacer frente a los nuevas herramientas de ataque.
La utilización de estos sistemas, en donde el cálculo se realiza en el cliente, comienza a no
estar justicada pues día a día se dispone de: Redes de mayor capacidad para el envío de la
información y Arquitecturas con mayor potencia de cálculo para el procesado de la misma.
¾En qué medida DFSU puede resolver estos problemas?
Al igual que en la tecnología web, donde los nuevos sistemas tienden a servidores que se
encargan de la mayoría de los cálculos y el usuario únicamente necesita un cliente muy ligero
para visualizar la información, DFSU propone agentes muy ligeros. Masters donde solamente
se captura y se envía la información que se desea procesar a través de la red. Esto supone una
312
mejora palpable en el rendimiento de los ordenadores, mucho más en terminales móviles, y por
tanto una transparencia casi total para el usuario cuando hablamos de auditoría de Hosts. La
transparencia total se ve reejada en el ámbito de las Redes y la monitorización de su tráco,
donde el usuario nal no necesita tener instalado en su terminal ningún tipo de agente. En
este caso son los propios administradores, (ISP's155 y demás operadores de telecomunicaciones,
bancos, multinacionales, etc.), quienes los instalan a lo largo de sus redes.
155
Internet Service Provider, (Proveedor de servicios de Internet)
313
DFSU desde la perspectiva del administrador
Un administrador debe ser capaz de congurar la infraestructura del modo que desee. En
esta sección se detallarán pues, los elementos congurables así como los diferentes modos de
funcionamiento y se hará una descripción exhaustiva sobre el sistema de plugins y su correcta
utilización.
¾Quién puede ser un administrador de DFSU?
Ya que entre las tareas más importantes que debe llevar a cabo un administrador de DFSU
tocan el ámbito de las redes y el sistema operativo GNU/Linux, lo más recomendable sería
disponer de un profesional con un nivel alto de conocimientos en estos campos.
Problemática a la que se enfrentan los administradores de sistemas
Los administradores de sistemas han de lidiar diariamente con ataques dirigidos contra las
redes que están administrando. Para ello instalan y mantienen sistemas de seguridad de diferentes
tipos por lo que deben conocer un amplio número de conguraciones posibles por cada sistema
instalado además de las interfaces y comandos que oferta cada uno de ellos.
¾En qué medida DFSU puede resolver estos problemas?
DFSU trata de solucionar en la mayor medida posible estas complicaciones, unicando los
diferentes sistemas de detección de intrusiones existentes y centralizando la conguración de todo
el sistema desde la unidad central (Head) que proporciona una interfaz intuitiva y potente.
Conjunto de tareas asociadas a un administrador de DFSU
El administrador de sistemas se deberá encargar de congurar y poner a punto el sistema,
así como de tomar las decisiones sobre:
1. Qué estructura es la más adecuada.
2. Cuántas y dónde se han de situar las sondas.
3. Los plugins que estarán cargados.
4. Las políticas de enrutado y de respuesta ante alertas.
Las sondas se han de colocar en aquellos sitios de la red donde se quiera monitorizar la información
que circula por ella y en aquellas máquinas en los que se quiera realizar una auditoría sobre su
funcionamiento.
314
Lo más habitual es cargar los mismos plugins de detección en todos los Tails, pero si se
dispone de una cantidad muy elevada de éstos, puede ser recomendable no cargarlos todos dejando
únicamente los más actuales.
De haber un plugin muy pesado, la mejor opción es que sea cargado en el sistema como
distribuido.
315
DFSU desde la perspectiva del desarrollador
DFSU es un proyecto vivo que debe seguir creciendo y adaptándose a las nuevas ideas y
requerimientos. Actualmente existen desarrolladores que se encargan de estas tareas y aquellos
programadores que deseen unirse al proyecto y aportar sus ideas y conocimientos, deben tener
una base y experiencia con el n de que lo realizado sea robusto y able.
¾Quién puede ser un desarrollador de DFSU?
La estructura principal de DFSU ha sido desarrollada en c++ bajo la plataforma GNU/Linux.
Es por esto por lo que un desarrollador que quiera ayudar en la mejora y ampliación de la
infraestructura interna, debe tener experiencia en los siguientes campos:
1. Diseño de aplicaciones con idiomas de programación orientados a objetos
2. Programación en c++ sobre el sistema operativo GNU/Linux
3. Programación en redes.
Si se desea desarrollar un agente distribuido, basta con conocer el sistema para el que se quiera
desarrollar el agente y tener conocimientos sobre programación en redes.
Como último apunte mencionar que es preferible que los desarrolladores utilicen la mayor
parte de código estándar posible.
316
3.3.7. Componentes de DFSU
Arquitectura de plugins
Los plugins son una parte fundamental de DFSU pues la captura de datos y el procesado
existente en la infraestructura, está destinado ha hacerles llegar la información que necesitan
debidamente formateada y de la forma más transparente posible.
Todos los plugins a excepción de los propios del sistema,
System Plugins ,
se compilan
fuera de la infraestructura como librerías dinámicas. Ésto quiere decir, que se puede desarrollar
un plugin y probarlo sin necesidad de compilar una y otra vez la infraestructura, ahorrando
un tiempo considerable. Además da la posibilidad de cargar solamente aquellos plugins que
deseemos en cada momento de forma dinámica, sin necesidad de modicar, recompilar o reiniciar
la infraestructura.
Otra de las ventajas de que los plugins sean independientes es que pueden estar licenciados
bajo una licencia diferente a la que lleva la estructura de DFSU, esto es; la GPL. Aquellos
desarrolladores que deseen colaborar añadiendo funcionalidades podrán escoger entre un gran
abanico de posibilidades a la hora de licenciar sus plugins.
Para desarrollar un plugin, basta con elegir la plantilla correspondiente según su función.
Todo plugin hereda de la clase
plugskel Figura 1: Estructura de herencia de los plugins
a
través de la propia al tipo, la cual aporta atributos particulares a cada plugin, como se muestra
en la gura:
Figura 3.52: Estructura de herencia de los plugins
Existen pues tres funciones comunes a modo de api que deben implementarse ya que están
preparadas para que la infraestructura se comunique y envíe información al plugin:
1. void callBack(Evento* evnt): Esta función se ejecutará cuando se de el evento a los
que está suscrito el plugin.
2. doThis(string cmd): Si se quieren interpretar los comandos recibidos por consola se
deberá implementar esta función.
317
3. onExit(): Esta función se ejecutará cuando se destruya el plugin y deberemos colocar en
ella la liberación de la memoria reservada.
Figura 3.53: Clase PlugSkel
318
Tipos de plugins
Como se puede observar en la Figura 1: Estructura de herencia de los plugins existen cinco
tipos de plugins; Utility Plugin, Expert Plugin, System Plugin, Output Plugin y Distributed
Plugin.
Cada plugin cumple una función determinada, por lo que hay que escoger adecuadamente la
plantilla cuando se vaya a desarrollar un plugin:
1. Utility Plugin: Este tipo de plugins suele tener una preferencia alta pues su función
debería ser la de transformar, ltrar o modicar de alguna manera la información referente
a los eventos para otros.
Entre estos plugins podemos encontrar al llamado
conntrack
del que más adelante se
hablará en detalle.
La plantilla de estos plugins se encuentra en
src/uplugins/templateU .
2. Expert Plugin: Los expert plugins o plugins expertos tienen la misión de analizar los
eventos recibidos aplicando algoritmos y técnicas de detección de anomalías, intrusiones
y/o ataques.
Figura 3.54: Clase ExpertSkel
Todo experto hereda de la clase
ExpertSkel
Figura 3: Clase ExpertSkel y debe hacer uso
de la función especial setVeredict que se encuentra sobrecargada posibilitando las siguientes
opciones:
a ) setVeredict(int veredicto):
Esta función únicamente especica el tipo de ataque.
b ) setVeredict(int veredicto, string descripción):
Aquí se nos da la posibilidad de
añadir una descripción en caso de que el veredicto para ataque sea positivo pudiendo
dar más información sobre el ataque.
319
c ) setVeredict(int veredicto, string descripción, int tipoAtaque):
Por último
se puede indicar además del veredicto y de la descripción el tipo de ataque con las
siguientes opciones:
1) INFORMATIVE: El evento recibido no es peligroso, pero se desea reportar su
entrada en el sistema.
2) PONTENTIALLY_DANGEROUS: Indica que de por si el evento no es
dañino y que probablemente depende de la evaluación de próximos eventos y/u
otros parámetros para poder determinar la forma en que afectará su entrada en
el sistema.
3) DANGEROUS: El evento recibido debe tratarse ya que es maligno para el
sistema contra el que va dirigido.
4) EXTREMELLY_DANGEROUS: Indica que el evento es extremadamente
peligroso para el sistema al que va dirigido.
5) TESTING: Es un identicar para pruebas en el sistema.
Por otro lado los valores posibles para los veredictos están denidos en la cabecera
de la clase
ExpertSkel
y pueden ser los siguientes:
El evento recibido no es un ataque.
a
0 NO:
b
0 YES:
c
0 NSNC156 :
El evento recibido es un ataque.
No se debe tener en cuenta el veredicto del plugin para este evento.
La plantilla de estos plugins se encuentra en
src/eplugins/templateE .
3. System Plugins: Los system plugins o plugins del sistema son imprescindibles, desempeñan funcionen críticas del sistema y se compilan junto con este no siendo posible descargarlos. Algunos ejemplos de las tareas que puede desarrollar un system plugin son por ejemplo
la interpretación de los eventos de comandos, decidir sobre el enrutado de paquetes etc...
La plantilla para la creación de estos plugins puede encontrarse en la ruta
src/splugins/-
tempalteS .
4. Output Plugins: Los Output plugins o plugins de salida, son plugins especializados en el
tratamiento de alertas. Una de las características más destacadas de este tipo de plugins es
que se ejecutan en un thread distinto al del resto de plugins, con esto pretendemos evitar
que una operación de entrada salida como por ejemplo la escritura a una base de datos
paralice la ejecución del resto de plugins.
La plantilla para la creación de estos plugins puede encontrarse en la ruta
tempalteO.
156
NSNC es el acrónimo de No Sabe No Contesta
320
src/splugins/-
Plugins con nombre propio
La mayor parte de los plugins con nombre propio son system plugins que desempeñan tareas
fundamentales para DFSU, es por tanto necesario comprender cómo actúan para de este modo
ser capaz de congurarlos adecuándolos a nuestras necesidades.
Deln
En la sección anterior hemos descrito a los Expert plugins como los encargados de
determinar si un determinado evento de tipo red o de tipo host es o no un ataque, dado que
en un sistema pueden convivir varios plugins expertos ¾que sucedería si varios expertos diesen
respuestas contradictorias sobre un mismo evento? aquí es donde entra Deln.
Deln debe su nombre a ser siempre el último plugin en ejecutarse, de este modo puede
recoger los veredictos del resto de plugins expertos que se han ejecutado antes que él y decidir
en base a su modo de funcionamiento que acción tomar, a continuación describiremos los modos
de funcionamiento distintos modos de funcionamiento de Deln, resolviendo en cada caso el
siguiente ejemplo:
1. OR_MODE: Cuando este modo está activo basta con que uno de los expertos arme que
el evento en cuestión es un ataque para que delfín genere un evento de tipo alerta. Si este
modo fuese el modo activo en el momento en que se da la situación descrita en el Ejemplo
2: , Deln generaría una única alerta con una descripción genérica.
2. FOREACH_MODE: En este caso, se generarán tantas alertas como plugins hayan armado que el evento es un ataque. En el ejemplo propuesto Deln generaría 3 alertas, cada
una de ellas con la descripción establecida por cada uno de los plugins expertos.
3. NAIVE_BAYES_MODE: Este es el modo más sosticado de todos los implementados, su funcionamiento se basa en el empleo de una red Bayesiana de tipo Naïve, sin entrar
demasiado en detalle en el funcionamiento de una red Naïve, esta se fundamenta en probabilidades condicionales, de cada uno de los expertos que han dado el veredicto con respecto
a la variable ataque157 , por lo tanto ya no dependerá tanto del número de nodos que digan
que es un ataque sino de la abilidad158 de estos. Se introduce de este modo un factor muy
interesante que es el de puntuación de los expertos o scoring, aquellos con una probabilidad
condicionada alta serán más ables y por lo tanto mejores que otros que expliquen peor la
variable ataque.
157
Empleamos la variable ataque que nos viene del agente de red para entrenar Deln y obtener así unas
probabilidades condicionales lo más realistas posibles, para el caso de los agentes de syscalls el entrenamiento
debería hacerse manualemente ya que no contamos con una variable ataque asociada a cada una de las traza de
syscalls analizadas.
158
Fiabilidad en el mundo de las redes Naïve podría describirse como una probabilidad condicionada alta de que
dado el veredicto armativo de un experto el evento en cuestión
321
Ejemplos de conguración práctica
la consola emplearemos el comando
cmd
Para congurar los modos antes explicados desde
tal y como se detalla a continuación:
En esta imagen pueden verse las opciones que nos da Deln a través del comando cmd.
Figura 3.55: Deln opciones de conguración
Podemos modicar el modo de funcionamiento mediante el comando mostrado en la gura
sustituyendo el indicado por el que deseamos.
Para conocer el modo en el que está funcionando Deln basta con ejecutar el comando de la
gura.
Figura 3.56: Deln cambiando el modo de funcionamiento
322
Figura 3.57: Deln mostrando el modo de funcionamiento actual
Figura 3.58: Listado de modos de funcionamiento de Deln
Este es el listado de modos con los que podemos congurar Deln.
En esta imagen podemos ver la salida del plugin cmdOut mostrando en pantalla una alerta
generada por Deln.
Conntrack
Una de las secciones más importantes de DFSU es Conntrack, este plugin159 se
encarga de llevar un seguimiento a nivel de sesión, una sesión es en el caso de un monitor de
red cada una de las conexiones160 sobre las que está capturando datos, una conexión de red
se identica por una clave privada compuesta por la dirección IP origen + puerto origen + IP
destino + puerto destino. En el caso de los monitores de host una sesión se identica por la
máquina origen y el identicativo de proceso al que pertenecen las syscalls auditadas.
Conntrack implementa un algoritmo LRU161 con las últimas X sesiones 162 ordenadas en base
al número de eventos pertenecientes cada una de las sesiones y el timestamp del último evento
perteneciente a dicha sesión.
159
160
Es un utility plugin, calcula datos para otros plugins
Nos referimos a conexiones lógicas no físicas, de ahí que conntrack también funciona con protocolos no
orientados a la conexión como UDP.
161
162
Least Frequently Used
Dentro de esta sesión Conntrack permite además guardar información de estado asociada a esta sesión como
por ejemplo el número de bytes transmitidos o el número de syscalls procesadas.
Figura 3.59: Deln ejemplo de una alerta
323
En el siguiente apartado se explicará por qué esta información es tan importante para DFSU.
eforwarder
Su función radica en escoger a que Tail al que hay que enviar la información
recogida desde el master, si conntrack es tan importante para DFSU es por que muchos expert
plugins tienen estado163 y si enviásemos por ejemplo la traza de syscalls de un determinado host
cada vez a un Tail distinto este sería incapaz de correlacionar la información de las primeras
syscalls con la de las siguientes pues estas nunca le llegaron. La información de conntrack nos
sirve para poder enviar la información de una misma sesión siempre al mismo tail.
163
statefull expert plugins
324
Figura 3.60: eForwarder opciones de conguración
Figura 3.61: eForwarder listado de modos
eForwarder al igual que Deln dispone de varios modos de funcionamiento, a continuación se
describen brevemente:
1. MODE_ROUND_ROBIN: En este modo los eventos se envían de modo equitativo a
los Tails conectados. Si hubiera 2 Tails conectados, el primer evento se enviará al primer
Tail, el segundo al segundo Tail, el tercero al primer Tail otra vez, etc...
Es el modo óptimo desde el punto de vista del balanceo de carga ya que la diferencia de
eventos recibidos entre Tails será como máximo de uno.
2. MODE_BY_ORIGIN: Este modo envía todos los evento recibidos por un mismo master al mismo Tail.
3. MODE_BY_PROCESS: Este modo envía todas las syscalls generadas por un mismo
proceso siempre al mismo Tail.
4. MODE_BY_USER: Este modo envía todas las syscalls generadas por un mismo usuario
siempre al mismo Tail.
5. MODE_BROADCAST: Duplica la información recibida desde los Masters a todos y
cada uno de los Tails suscritos.
Ejemplos de conguración práctica
la consola emplearemos el comando
cmd
Para congurar los modos antes explicados desde
tal y como se detalla a continuación:
Estos son los comandos con los que podemos comunicarnos con el plugin eForwarder.
Estos son los modos de conguración posibles para eForwarder.
Este es el modo que está funcionando actualmente.
325
Figura 3.62: eForwarer mostrando el modo de funcionamiento actual
Figura 3.63: eForwarder cambiando el modo de funcionamiento
Esta es la forma de cambiar el modo de funcionamiento de eForwarder.
Stats
Para controlar el rendimiento de la infraestructura DFSU cuenta con este System plugin,
su labor es llevar una estadística de las variables más relevantes, por ejemplo el número de eventos
recibidos y su tipo, el número de ataques, si se están produciendo drops etc...164 , en la imagen
Figura 13: Stats, ejemplo de salida por pantalla podemos ver un ejemplo de la salida del comando
cmd Stats.
164
Un drop consiste en descartar un paquete y tiene lugar cuando llega un evento para el que no hay sitio en las
colas.
326
Figura 3.64: Stats, ejemplo de estadisticas de sistema.
Servidor Web Integrado
Uno de los mayores aciertos de DFSU fue integrar un servidor web dentro de la propia
infraestructura, gracias a este servidor al que bautizamos WebOs DFSU cuenta con las siguientes
ventajas:
1. Fácil diseño de interfaces: Al haber programado WebOs desde 0 pudimos adecuar su
diseño perfectamente a nuestras necesidades, una de las ventajas que obtuvimos fue poder
controlar cuando comienza y cuando acaba una petición web de manera que podemos
recoger ordenes desde los CGI165 y así permitir que una interfaz escrita en HTML tenga
acceso directo a una API166 en XML desde la que ejecutar comandos dentro de DFSU
(carga de plugins, descarga etc...). Además al permitir programar en perl, un lenguaje que
conocen muchos administradores de sistemas, permitimos que la gente pueda desarrollar
sus propias interfaces grácas sin tener que recompilar DFSU y sin tener que meter una
sola línea de C++.
2. Arquitectura C/S: Al ser una arquitectura cliente/servidor el administrador puede congurar la arquitectura de DFSU desde cualquier terminal conectado a la red.
3. Independencia de plataforma: La tecnología web es una tecnología estandarizada que
permite a cualquier sistema que tenga programado un navegador compatible acceder a
cualquier web. Algo que no puede decirse de las interfaces web convencionales.
165
166
Common Gateway Interface
Application programming interface
327
3.3.8. DFSU primeros pasos
¾Cómo conseguir el código?
DFSU es software libre y como todo programa de software libre tiene su sitio en sourceforge167 ,
concretamente en la siguiente url: http://dfsu.sourceforge.net
Además puede visitar la web de DFSU en www.dfsu.net donde además de informarse sobre
las últimos cambios puede unirse a las distintas listas de distribución:
Usuarios:
[email protected]
Administradores:
Developers:
[email protected]
[email protected]
Licencia
Como ya se ha mencionado con anterioridad DFSU se enmarca dentro del gran proyecto que
es el software libre y como es lógico empleamos licencias libres. El código de DFSU está licenciado
bajo GPL y la memoria que ahora está leyendo está licenciada bajo Creative Commons.
DFSU sigue una política parecida a la del Kernel de Linux en materia de licencias y es que
DFSU usa y apoya explícitamente licencias sin embargo no las forzamos, si un programador o
empresa desea desarrollar plugins para DFSU, no sólo puede hacerlo sino que además puede
elegir la licencia que más le convenza, lo que lógicamente incluye licencias privativas y/o de
código cerrado.
Estructura de directorios
Lo primero que se debería conocer perfectamente es la estructura de directorios en que se
compone el proyecto con el n de poder localizar y congurar lo más ecientemente posible la
opciones necesarias.
Los tres elementos de la infraestructura comparten una jerarquía de directorios muy similar
con la que cualquier administrador de sistemas Unix like se sentirá muy familiarizado. En el
directorio raíz de esta jerarquía se distinguen las carpetas
src
para los cheros fuente,
doc
para los cheros de documentación, etc para los cheros de conguración, lib para las librerías
y
bin
para los binarios.
A continuación expandiremos uno por uno los directorios expuestos anteriormente:
Estructura de la raíz del proyecto
dfsu:
Esta es la rama principal de donde cuelgan la estructura de directorios del Head,
Tail y Masters.
167
http://www.sourceforge.net
328
• dfsu/Head: Contiene todos los cheros fuentes de este elemento de la estructura.
• dfsu/Tail: Contiene los mismos cheros y estructura que la carpeta anterior estando
la diferencia en los datos de los cheros de conguración.
• dfsu/Masters: Es la raíz de donde parten los Masters implementados.
◦ Masters/snortMaster
◦ Masters/syshooker
329
Estructura de directorios en el Head y en el Tail
Head/src:
Agrupa todos los cheros fuentes de la infraestructura proyecto.
• src/includes: Contiene las cabeceras de los fuentes que se encuentran en
src .
• src/eplugins: Carpeta para almacenar los plugins expertos.
• src/oplugins: Carpeta para guardar los plugins de respuesta.
• src/splugins: Carpeta con los plugins del sistema.
• src/uplugins: Carpeta que contiene los plugins de utilidad.
• src/webos: Aquí se encuentran todos los cheros que conciernen al servidor web
WebOs.
◦ src/webos/src: Aglutina todos los cheros fuente que forman el servidor web.
◦ src/webos/etc: Contiene el chero de conguración del servidor web webos.xml .
◦ src/webos/htdocs: Contiene los documentos que utiliza el servidor web para
presentar la página inicial además de una estructura propia de directorios con
todo lo necesario para la edición de la interfaz web.
htdocs/cgi-bin: Carpeta que contiene los scripts ejecutables en perl.
htdocs/xml: Contiene el chero
hirearchy.xml
donde se especica la jerar-
quía que se visualizará en el menú que aparece en la izquierda en la interfaz
web.
htdocs/images: Carpeta donde se encuentran las imágenes que se muestran
en la interfaz.
htdocs/inc: Contiene los cheros que forman la cabecera, en pie de página
y el menú a incluir en las páginas que se quieran desarrollar.
htdocs/static: Contiene los cheros html jos que forman la página web que
se muestra.
htdocs/stylesheet: Ficheros .css que contienen los estilos a utilizar.
htdocs/vars: Ficheros variables que se generan en cada sesión.
◦ src/webos/logs: Carpeta donde el servidor web deja los logs generados.
Head/etc:
Contiene los cheros de conguración más importantes
slaveconf.xml
y
oa-
conf.xml.
Head/bin:
Contiene los ejecutables, tanto del programa como el compilador de plugins
que más adelante se detallará.
Head/doc:
Contiene la documentación al completo de DFSU.
330
Head/lib:
Contiene la librería estática en la que se compilan todos los objetos que se
encuentran en la carpeta
Head/logs:
src .
Carpeta donde se guardan los logs del sistema.
Head/sessions:
Carpeta donde se guarda un xml con un resumen de la sesión con infor-
mación proporcionada por los plugins del sistema, como el número de ataques detectado.
331
Estructura de directorios en el Master Syshooker
Dado que este Master se compone, como ya se ha explicado, de dos aplicaciones existen dos
directorios base para cada una de ellas:
dfsu/syshooker:
Es el nombre del directorio raíz, y de aquí parte la estructura de las dos
aplicaciones.
• syshooker/hookermaster: Este es el módulo que se encarga de capturar las syscalls
del sistema para que las recoja la aplicación cliente. No tiene una estructura interna
de directorios por el reducido número de cheros que lo componen.
• syshooker/hookerclient: La aplicación cliente se encuentra a partir de este directorio. Además aquí podemos encontrar los cheros para compilar y ejecutar la aplicación.
◦ hookerclient/bin: En esta carpeta es donde se encuentra el archivo ejecutable.
◦ hookerclient/etc: Contiene el chero de conguración mastercong.xml , donde
se han de congurar los parámetros para la conexión como más adelante veremos.
◦ hookerclient/lib: Contiene la librería estática donde compilan todos los objetos
del programa.
◦ hookerclient/src: En esta carpeta se encuentran los cheros fuentes de la aplicación.
src/includes: Contiene las cabeceras de los cheros fuentes arriba mencionados.
Estructura de directorios en el Master Snort modicado
Dado que la gran mayoría de esta aplicación es externa al proyecto DFSU, únicamente explicaremos dónde y que se encuentra en las modicaciones añadidas.
snortMaster/src/dfsu:
En esta carpeta es donde se encuentran los cheros fuentes de la
aplicación.
Compilación e Instalación de una instancia de DFSU
Para realizar la instalación y la compilación de DFSU han de seguirse unos pasos y se necesitan
ciertos paquetes de los que se depende los cuales vienen detallados en esta sección.
Se ha intentado que el número de dependencias sea el menor posible para facilitar al máximo
este proceso.
332
Compilación e Instalación
Este apartado se encuentra dividido en tantas partes como de ellas se compone DFSU. Al
principio de cada una de ellas se hará un repaso de los paquetes que se necesitan tener instalados
para poder compilar el programa.
Ya que DFSU está escrito en c++ y la compilación se lleva a cabo mediante el comando
make, necesitaremos tener instalado una versión de g++-3.3 o superior así como una versión de
automake.
Compilación e instalación del Head y el Tail
En el chero INSTALL que encontraremos
en la raíz de la estructura de directorios se nos indican las dependencias de los paquetes necesarios
para poder realizar una compilación satisfactoria. Los paquetes en cuestión son los siguientes:
1. LibXML2: http://xmlsoft.org/
2. ReadLine: http://cnswww.cns.cwru.edu/chet/readline/rltop.html
3. Libncurses5-dev:
4. Perl: libxml-simple-perl
Una vez instalados estos paquetes, bien en su forma binaria, bien desde las fuentes tenemos todo
lo necesario para poder construir DFSU, a continuación se explica cómo:
Abriremos una consola y nos posicionaremos en la raíz del árbol de directorios de DFSU, una
vez ahí entraremos en la carpeta
dfsu/Head ,
donde ejecutaremos el siguiente comando:
$ make
Una vez que el comando haya terminado, podremos entrar dentro de la carpeta
y comprobar que existe el ejecutable
dfsu/Head/bin
dfsu/Head/bin/slave.
Compilación e instalación del Snort Modicado
Para compilar este agente debemos tener
instalada la librería Libpcap. Una vez la tengamos instalada nos situaremos en la carpeta raíz
snortMaster/
y ejecutar los siguientes comandos:
1. $ ./congure
2. $ make
Finalmente para llevar a cabo la instalación se ejecutara el comando:
3. $ make install
333
echo trivialExpert
1
sh p++.sh ../src/eplugins/trivialexpert/ trivialexpert
echo cmdOut
2
sh p++.sh ../src/oplugins/cmdout/ cmdout
Cuadro 3.10: Fichero de compilación compileAll.sh
Compilación e Instalación del Syshooker
Para compilar el módulo del kernel Syshooker
necesitará tener un kernel compilado a mano que puede conseguir en http://www.kernel.org.
Una vez descargado y recompilado con las opciones básicas entre en la carpeta donde se
encuentra el syshooker y ejecute las siguientes instrucciones:
1. $ make
Tras la ejecución de este comando se construirá el módulo del kernel, chero .ko, el cual
podrá insertar dentro del núcleo con el siguiente comando:
2. $ insmod syshooker.ko
Compilación e Instalación de los Plugins
Para la compilación de los plugins tenemos dos
herramientas disponibles en la carpeta bin/ que se encuentra en la raíz de Head y del Tail.
Estas herramientas son scripts de consola; el
p++.sh
y el
compileAll.sh.
Cuando se dispone de un número bajo de plugins lo mejor es editar el segundo chero que
contiene lo siguiente:
Vemos como este script básicamente lo único que utiliza es el p++.sh pues es el que se
encarga realmente de compilar los plugins.
En caso de no querer utilizar este chero lo único que necesitaremos hacer es copiar la linea
marcada con un 1 o la linea marcada con el 2 y cambiar la ruta y el nombre del plugin que
deseamos compilar.
Una vez compilados, solamente necesitaremos incluirlos en el chero
oaconf.xml
para que
sean cargados en el sistema.
3.3.9. DFSU conguración y puesta en marcha de una instancia
Comprendiendo los cheros de conguración
La mayoría de los elementos congurables en el sistema disponen de un chero en el cual
se indica la conguración elegida. Éstos están en formato xml por ser el estándar de facto por
excelencia para el intercambio de información y se encuentran validados mediante un DTD, por
lo que es importante no modicar su estructura.
334
Hay que tener en cuenta, que si bien el Master y los plugins son aplicaciones cada una
independiente de la otra, el programa que ejecutado en el Head y en el Tail es el mismo estando
congurado de modo diferente. Ésto puede ser indicador de la gran importancia de conocer a
fondo las funciones y posibilidades de cada chero.
Ficheros del Head y de los Tails
Son tres los cheros congurables en el Head y el Tail: slaveconf.xml , oaconf.xml y
webos.xml. A continuación se explica su descripción interna y la ruta donde se encuentran:
slaveconf.xml
Es el chero de conguración maestro tanto para los Head como para los Tail.
Todos los puntos comentados aquí sirven tanto para el Head como para el Tail, a no ser que se
especique explícitamente lo contrario.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dfsu_slave SYSTEM "slaveconf.dtd">
<dfsu_slave>
1
<workAsHead value="no"/>
2
<name value="Tail1"/>
3
<verbose value="no"/>
4
<debug value="no"/>
5
<logPath value="etc/"/>
6
<webosPath2Cong value="src/webos/etc/webos.xml"/>
7
<oaPath2Cong value="etc/oaconf.xml"/>
8
<queuesSize value="500"/>
9
<tentacleTimeOut value="15"/>
10
<maxMasters value="15"/>
11
<maxTails value="15"/>
12
<headIp value="192.168.0.1"/>
13
<headBeaconPort value="4320"/>
14
<localBeaconPort value="4320"/>
15
<localTCPPort value="4320"/>
</dfsu_slave>
Cuadro 3.11: Fichero slaveconf.xml del Head y del Tail
335
workAsHead:
La primera etiqueta es posiblemente la más importante de todas, ya que
dene el comportamiento interno de la aplicación, variando de Head a Tail según pongamos
yes
o
no
respectivamente
En el caso de escoger
tiene como nombre
name:
yes
las etiquetas 2, 12 y 13 carecen de sentido. El Head siempre
Head .
La etiqueta name se utilizará para identicar a los diferentes Tails que se conecten y
la única restricción en este campo es que no puede tener el valor
Head .
En caso contrario
no podrá conectarse
En el caso de escoger no da igual lo que se ponga en la etiqueta 6 y 11.
verbose:
Muestra por la consola existente, más información sobre lo que está ocurriendo
en la infraestructura.
debug:
Muestra información útil únicamente para desarrolladores del sistema.
logPath:
Ruta donde se guardarán los cheros de log.
webosPath2Cong:
Es la ruta donde se encuentra el chero de conguración del servidor
web integrado WebOs, que más adelante se detallará.
oaPath2Cong:
Especica la rula a uno de los cheros de conguración más importantes.
En él se almacena toda la información referente a los plugins que deben ser cargados en el
sistema.
queuesSize:
Indica cual es el número máximo de eventos que puede haber dentro de una
cola del sistema. Es importante no dar un valor reducido pues la infraestructura necesita
un margen para poder funcionar correctamente.
tentacleTimeOut:
Es el tiempo que se esperará antes de desconectar desde la ultima
recepción o envío satisfactorio al Head en el caso del Tail o de los Masters y Tails en el
caso del Head.
maxMasters:
maxTails:
headIp:
Es el número máximo de masters que se pueden conectar.
Es el número máximo de Tails que se pueden conectar.
Cuando funcionamos como Tail, es esta la ip a la que nos intentaremos conectar
cuando se arranque la aplicación.
headBeaconPort:
Operando como Tails, este será el puerto al que se envíe la información
de control.
localBeaconPort:
Puerto por el que se escuchará la información de control.
336
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plugins SYSTEM "oaconf.dtd">
<plugins>
1
<plugin>
2
<loadOnBoot value="yes" />
3
<name value="CmdOut" />
4
<precedence value="1" />
5
<absPath value="src/oplugins/cmdout/cmdout.so"/>
6
<subscriptionList>
7
<EID value="5"/>
8
<EID value="0"/></subscriptionList>
9
<path2cong value=""/>
10
<enabledOnBoot value="yes"/>
</plugin>
</plugins>
Cuadro 3.12: Fichero oaconf.xml del head y del tail
localTCPPort:
Puerto por el que se esperarán conexiones entrantes provenientes del Head
si funcionamos como Tail o de Masters si funcionamos como Head.
oaconf.xml
loadOnBoot:
plugin:
Especica si el plugin se cargará en memoria al inicio del programa.
Los datos de carga de cada plugin vienen indicados dentro de esta etiqueta, por
lo que en caso de querer añadir nuevos plugins bastará con repetir el bloque <plugin>,
(como en el ejemplo), entre la etiqueta <plugins>.
name:
Es el nombre con el que aparecerá el plugin en los listados una vez se esté ejecutando
la aplicación.
precedence:
Indica cual será el orden en el que se llamará a el plugin pero existen unos
límites en el valor de la precedencia para asegurar que ciertos plugins del sistema se ejecutan
los primeros y los últimos. Puede haber plugins con la misma precedencia.
La máxima precedencia es 1, y la mínima 1000.
absPath:
Ruta absoluta hasta el chero compilado como librería.
337
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weboscong SYSTEM "weboscong.dtd">
<weboscong>
1
<ip>127.0.0.1</ip>
2
<index_page>index.pl</index_page>
3
<htdocs_dir>src/webos/htdocs/</htdocs_dir>
4
<max_requests>100 </max_requests>
5
<port>81 </port>
6
<user>www-data </user>
7
<perl_executable>/usr/bin/perl</perl_executable>
8
<logle>src/webos/logs/access.log </logle>
9
<cgi_pattern>.pl </cgi_pattern>
10
<hostname>titania </hostname>
11
<max_age>3</max_age>
</weboscong>
Cuadro 3.13: Fichero webos.xml del Head y del Tail
subsCriptionList:
Es el listado de eventos a los que se desea que se suscriba el plugin
para que se le llame cuando se den. El listado de eventos y su valor lo podemos consultar
en el chero:
EID:
src/includes/eid_table.h.
Indica un evento al que se suscribirá el plugin. Para suscribir el plugin a más de un
evento basta con repetir esta etiqueta cambiando el valor del atributo
path2cong:
valor .
En caso de que el plugin tenga un chero de conguración propio será aquí
donde indiquemos la ruta hasta su chero.
enabledOnBoot:
A pesar de estar cargado, un plugin puede estar deshabilitado por lo
que no se le llamará cuando se de uno de los eventos a los que se ha suscrito.
webos.xml
ip:
En el caso de existir varias interfaces, se le puede indicar al servidor por cual de ellas
queremos que quede a la escucha.
index_page:
En caso de no indicarle en el navegador el chero al que queremos acceder,
buscará el chero que pongamos aquí para mostrar su información.
htdocs_dir:
Es la ruta donde encontrará todos los documentos necesarios para la visua-
lización correcta de las páginas.
338
1
make
8
2
rmmod syshooker
3
insmod syshooker.ko sysCallTable=322395980
Cuadro 3.14: Fichero reload.sh del Syshooker
max_requests:
Para evitar en lo posible una ataque de denegación de servicio, es posible
indicar el número máximo de peticiones que se pueden atender simultáneamente.
port:
Puerto por el que quedará a la escucha el servidor web.
perl_executable:
logle:
Ruta hasta el interprete de perl que deseamos utilizar.
Ruta del chero donde se dejarán los mensajes de log.
cgi_pattern:
Es la extensión que tendrán los cheros que deseamos que sean ejecutados.
hostname:
Es el nombre de nuestra máquina.
max_age:
Para evitar que el servidor web se quede bloqueado debido a la ejecución de
un script que consuma muchos recursos debido a bucles innitos podemos especicar el
tiempo máximo de ejecución que tiene un script.
Ficheros de los Masters
Al igual que el Head y los Tails, los Masters disponen de sus propios cheros de conguración
con los que les indicaremos los datos necesarios para su funcionamiento.
Syshooker
Este Master se compone de dos aplicaciones, un LKM que se encarga de capturar las
syscalls generada por los procesos en ejecución, y un programa cliente que recibe esa información,
la procesa y la transmite al Head.
Existen pues dos cheros que deberemos congurar,
339
reload.sh
y
mastercong.xml .
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dfsu_master SYSTEM "mastercong.dtd">
<dfsu_master>
1
<name value="Master1"/>
2
<tentacleTimeOut value="3"/>
3
<headIp value="172.26.0.2"/>
4
<headTCPPort value="4320"/>
</dfsu_master>
Cuadro 3.15: Fichero mastercong.xml del Syshooker
Este primer chero no es más que un script para cargar el módulo que recoge las syscalls
en el sistema operativo de la máquina. El parámetro que se debe modicar se encuentra en la
línea tres, y es el número que aparece después de sysCallTable=. Para obtener dicho número
deberemos ejecutar el comando:
$ cat /boot/System.map |grep sys_call_table
que retornará un valor similar al siguiente:
C0484700 D sys_call_table
Este valor es la dirección de memoria en hexadecimal
donde el kernel ubica la tabla de syscalls, deberemos por tanto convertirla a decimal.
El chero
mastercong.cfg
name:
tiene las líneas de conguración que se explican a continuación:
Es el nombre con el que se identicará al Master.
tentacleTimeOut:
Este valor indica cuanto tiempo pasará antes de desconectarse y volver
a conectarse al Head desde la ultima recepción o el último envío de datos.
headIp: Como su propio nombre indica, aquí se especica la dirección de Red de la máquina
en la que se está ejecutando el Head.
headTCPPort:
Es el campo donde hay que poner el puerto de escucha del Head para que
la conexión sea posible.
Snort Modicado
run.sh .
Este Master dispone de dos cheros de conguración,
dfsumcong.cfg
y
En el primer de ellos especicaremos los datos necesarios para que el Master pueda
encontrar el Head y establecer la conexión:
340
1[SLAVE]
2
IP=127.0.0.1
3
PORT=4320
4
BUFFERSIZE=500
5
NAME=Master2
Cuadro 3.16: Fichero dfsumcon.cfg del Snort Modicado
src/snort -i eth2 -l /tmp/ -c etc/snort.conf -j dfsumcong.cfg -A console
Cuadro 3.17: Fichero run.sh del Snort Modicado
Su funcionamiento es muy simple ya que únicamente hay que editar las lineas 2 y 3 e indicar la
dirección de red y el puerto de la máquina que contiene el Head.
En el segundo chero solamente lo modicaremos para especicar la interfaz por la que se
monitorizará el tráco de red.
Escogiendo la estructura óptima
Es muy importante escoger bien la estructura que mejor se adapte a nuestras necesidades
en pos de obtener el mínimo coste. En caso de no estar seguros sobre cual es la más adecuada,
empezar por una estructura de tres capas con uno o dos Tails es lo más recomendable.
Mediante los indicadores de sobrecarga del sistema visibles en la interfaz web determinaremos
si necesitamos más capacidad de cálculo o no. En caso armativo el procedimiento a seguir
para solucionar el problema será el de ir añadiendo Tails de forma progresiva hasta lograr un
rendimiento adecuado.
Congurando el Master, el Head y el Tail
Una vez escogida la estructura que deseamos implementar en nuestra red, deberemos congurar el Head y los Tails correctamente. A continuación se explicarán con detalle todos los pasos
que se han de llevar a cabo para poner en funcionamiento la estructura de DFSU.
Ejemplo de conexión paso a paso
Al igual que en la hostelería, qué mejor método para explicar cómo llevar a cabo una tarea que
un ejemplo. Es por ello que en los siguientes pasos se creará una estructura completa, compuesta
de los siguientes ingredientes:
Un master de Host
Un master de Red
341
Un Head
Un Tail
Para este ejemplo se han utilizado tres máquinas, siendo cada una de ellas uno de los elementos
de la estructura, (Master, Head y Tail).
Así pues en la primera máquina hemos colocado tanto el Master de Red como el de Host, en
la segunda el Head y en la Tercera el Tail.
342
Editando los cheros de conguración
Como ya aprendimos en la sección de conguración, los primeros cheros que hemos de editar
son slaveconf.xml para el Head y el Tail, dfsumcong.cfg, run.sh para el Master de Snort
modicado y mastercong.xml para el Master de Host.
Lo primero que se debe saber, para poder entender las conguraciones elegidas en los cheros
de ejemplo, son los datos de red que tienen las máquinas que albergan los diferentes elementos:
Conguración de la máquina que contiene los Masters
Dirección de Red:
192.168.0.1
Máscara de Subred:
255.255.255.0
Dirección de Red eth2:
192.27.0.15
Máscara de Subred eth2:
255.255.255.0
Conguración máquina que contiene el Head
Direccion de Red:
192.168.0.2
Máscara de Subred:
255.255.255.0
Conguración de la máquina que contiene los Tails
Dirección de Red:
192.168.0.3
Máscara de Subred:
255.255.255.0
En caso de existir alguna duda sobre los datos que se han congurado en los cheros, es
recomendable volver a la sección
Comprendiendo los cheros de conguración.
Los campos más importantes que han sido modicados para poder realizar la conexión se
encuentran en negrita y los campos que no tienen sentido según se funcione como Head o como
Tail carecen de contenido.
Conguración del Master
1. Fichero dfsumcong.cfg:
Los parámetros más importantes que debemos indicar son la dirección de red y el puerto
de la máquina en la que se encuentra escuchando el Head.
2. Fichero run.sh:
En este chero hemos congurado el Snort modicado de manera que capture el tráco
que llega por la interfaz 2. La conexión hacia el Head se está lanzando por la interfaz de
red eth1.
343
[SLAVE]
IP=127.0.0.1
PORT=4320
BUFFERSIZE=500
NAME=Master2
Cuadro 3.18: Ejemplo de conguración del chero dfsumcong.cfg del Snort Modicado
src/snort -i eth2 -l /tmp/ -c etc/snort.conf -j dfsumcong.cfg -A console
Cuadro 3.19: Ejemplo de conguración del chero run.sh en el Snort Modicado
Conguración del chero mastercong.xml
como
Master1
Vemos que este master se identicará
y se intentará conectar a la ip y puertos que hemos congurado en la máquina
donde se está ejecutando el Head.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dfsu_master SYSTEM "mastercong.dtd">
<dfsu_master>
<name value="Master1"/>
<tentacleTimeOut value="3"/>
<headIp value="192.168.0.2"/>
<headTCPPort value="4320"/>
</dfsu_master>
Cuadro 3.20: Ejemplo de conguración del chero mastercong.xml en el Syshooker
Conguración del chero slaveconf.xml del Head
En el Head, lo más importante a denir en su chero de conguración es el primer campo, donde
se especica que funcionará como tal, y los campos de los puertos. A pesar de que en el ejemplo
los puertos BeaconPort y TCPPort son iguales, no es obligatorio que sea de ésta manera.
Conguración del chero slaveconf.xml del Tail
Además del primer campo que
dene su funcionamiento como Tail, es muy importante el campo del nombre y los campos de
conexión. Existe una restricción en los nombres que se asignan a los Tails y por el cual el Head
puede prohibir la conexión: El Head no dejará conectarse a un Tail si ya existe una conexión con
otro que tenga el mismo nombre congurado o si por nombre lleva la palabra Head.
En este punto ya tenemos correctamente congurados todos los elementos del sistema para
que la conexión sea posible. Los cheros de conguración de los plugins aún no los hemos con-
344
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dfsu_slave SYSTEM "slaveconf.dtd">
<dfsu_slave>
<workAsHead value="yes"/>
<name value=""/>
<verbose value="no"/>
<debug value="no"/>
<logPath value="logs/"/>
<webosPath2Cong value="src/webos/etc/webos.xml"/>
<oaPath2Cong value="etc/oaconf.xml"/>
<queuesSize value="500"/>
<tentacleTimeOut value="15"/>
<maxMasters value="15"/>
<maxTails value="15"/>
<headIp value=""/>
<headBeaconPort value=""/>
<localBeaconPort value="4320"/>
<localTCPPort value="4320"/>
</dfsu_slave>
Cuadro 3.21: Ejemplo de conguración del archivo slaveconf.xml en el Head
345
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dfsu_slave SYSTEM "slaveconf.dtd">
<dfsu_slave>
<workAsHead value="no"/>
<name value="Tail_1"/>
<verbose value="no"/>
<debug value="no"/>
<logPath value="logs/"/>
<webosPath2Cong value=""/>
<oaPath2Cong value="etc/oaconf.xml"/>
<queuesSize value="500"/>
<tentacleTimeOut value="15"/>
<maxMasters value="15"/>
<maxTails value="15"/>
<headIp value="192.168.0.2"/>
<headBeaconPort value="4320"/>
<localBeaconPort value="8000"/>
<localTCPPort value="8000"/>
</dfsu_slave>
Cuadro 3.22: Ejemplo de conguración del chero slaveconf.xml en el Tail
346
gurado pues lo primero es asegurarnos de que la estructura está operativa. Más adelante veremos
como congurar y detectar un ataque de manera detallada.
Lanzando las aplicaciones
Lanzando el Head
La
Pasemos ahora a lanzar las aplicaciones una a una:
Figura
3.65 muestra el resultado que deberemos obtener una vez que
hayamos lanzado las aplicaciones en el siguiente orden:
1. Lanzamos el Head: Para esto utilizamos el comando $ sh run.sh en la carpeta Head/ .
2. Lanzamos los Masters: En la máquina donde hemos colocado los Masters ejecutamos
sin importar cual de ellos se lance primero los siguientes comandos:
a ) snortMaster/: $ sh run.sh
b ) syshooker/: $ sh run.sh
3. Lanzamos el Tail: En la máquina donde tenemos el Tail, en el directorio raiz
ejecutamos el comando
$ sh run.sh.
Figura 3.65: Head con un tail y dos masters conectados
347
Head/
Figura 3.66: Plugins cargados en el Head
Figura 3.67: Plugins cargados en el Tail
Comprobando que todo funciona bien
Lo primero que comprobaremos es que la carga de
los plugins cmdOut y TrivialExpert ha sido realizada en el Head y en el Tail respectivamente.
Para ésto ejecutaremos el comando
ls -all
en las dos aplicaciones:
Aquí vemos como efectivamente en el Head el plugin cargado es el cmdOut y cómo el TrivialExpert se encuentra descargado.
No debe confundirnos el hecho de que el valor de
ENABLED
sea
YES
pues sólo se tiene
en cuenta una vez que el plugin se encuentra cargado.
En el Tail deberá aparecernos los contrario a lo que hemos visto en la imagen Figura 3.66:
Plugins cargados en el Head, encontrándose cargado el TrivialExpert y el cmdOut descargado.
348
Figura 3.68: Visualización de las alertas en el Head
Si ésto es correcto, entonces en la terminal de consola donde hemos ejecutado el Head deberían
estar apareciendo alertas como las de la siguiente gura:
Resumiendo
Hasta ahora hemos congurado y conectado dos Masters, un Head, un Tail
y se han generado alertas por los eventos recibidos desde los Masters.
Por si queda alguna duda se dará ahora una breve explicación de lo que ha pasado en el
sistema, empezando por recordar algunos aspectos del funcionamiento de cada elemento de la
estructura:
1. En el momento en el que los Masters se conectan al Head, éstos empiezan a enviarle datos
que están capturando.
2. Por defecto en el chero oaconf.xml del Head viene activo el plugin cmdOut que se encarga
de mostrar las alertas que llegan desde los Tails.
3. Por otra parte en el Tail el plugin TrivialExpert, que está activo de forma predeterminada,
trata a todo evento recibido como si fuese maligno.
Por lo tanto, en el momento en el que hemos conectado los Tails y los Masters al Head se han
empezado a generar alertas.
349
3.3.10. DFSU descripción de las interfaces
Habitualmente se utilizan dos tipos de interfaces, las grácas y los interpretes de comando.
Por lo general las interfaces grácas son más intuitivas y visuales pero carecen de la potencia
que proporciona un interprete de comandos.
Para no perder ninguna de las ventajas que cada interfaz aporta decidimos implementar en
DFSU los dos tipos. La interfaz gráca, que es opcional, es proporcionada por el servidor web
WebOs y el interprete de comandos se ejecuta de forma nativa cuando se arranca el sistema.
En este capítulo se explicarán las posibilidades que nos brindan éstas interfaces y como llevar
a cabo las tareas de mantenimiento y supervisión con su ayuda.
Interfaz Web: Servidor web integrado WebOs
El servidor WebOs solamente es posible activarla cuando se funciona en modo Head ya que
es aquí donde se concentra toda la información mostrada.
Presenta el siguiente aspecto:
Figura 3.69: Pantalla principal servidor WebOs
En la imagen Figura 1: Pantalla principal servidor WebOs se nos muestran de forma rápida
los elementos conectados al Head en cada momento (Masters y Tails) junto con su nombre, de
modo que podamos diferenciarlos.
En los grácos inferiores se muestra la carga que están soportando el Head y los Tails que
tiene conectado en la parte inferior mediante un gráco que varía en tamaño y color.
350
En el menú de la izquierda se nos ofrece la posibilidad de navegar por las opciones que
incluyen tanto la documentación y manual de usuario como la información referente al proyecto.
351
Existe la posibilidad de hacer click sobre las burbujas del Head y los Tails con lo que se nos
mostrara la siguiente información:
Figura 3.70: Graco del sysload
Desde esta pantalla se visualiza toda la información necesaria para poder administrar remotamente el Tail. Además de ver los plugins que aparecen en el chero oaconf.xml del Tail en
cuestión, se sabrá el estado en el que se encuentran con la posibilidad de modicarlo activando/desactivando, cargando y descargando.
Las estadísticas nos muestran el número y tipo de los paquetes recibidos y procesados por
el Tail, además de la carga del sistema. En el caso de que un Tail esté sobrecargado siempre se
puede desactivar el plugin más pesado hasta que se solucione el problema.
Figura 3.71: Pantalla de información gráca sobre el Tail
Por último se pueden modicar algunos de los parámetros del chero slaveconf.xml remota-
352
mente para que la próxima vez que se inicie el Tail se ejecute con la nueva conguración.
Interfaz de comandos: La consola
La consola se encuentra activa tanto en el Head como en los Tails y desde ella podemos ejecutar todos los comandos implementados en la interfaz gráca además de otros que se detallarán
ahora.
Cuando se arranca la aplicación se nos muestra la pantalla de bienvenida
de inicio de la consola
Figura 4: Pantalla
y se nos da la posibilidad de empezar a ejecutar comandos.
En este ejemplo se nos informa de que se han arrancado los plugins TrivialExpert y cmdOut,
además de que estamos funcionando como Head y que el servidor Web esta funcionando en el
puerto 81.
Figura 3.72: Pantalla de inicio de la consola
Como toda consola, disponemos del comando
help
que nos ayudará en la tarea de admi-
nistración informándonos de cuales son nuestras posibilidades Figura 1: Panta de ayuda de la
consola.
Comandos sobre plugins:
Al igual que en la interfaz web donde podemos ejecutar coman-
dos para administrar los plugins locales y remotos, según donde hiciéramos click, sobre el Head
(local) o sobre algún Tail (remoto), disponemos de los comandos
sable
para administración local y
rload , runload , renable
y
load , unload , enable y dirdisable
para control remoto.
La sintaxis es común para cada uno de los grupos, local o remoto, siendo la siguiente :
1. Locales:
<comando><nombre-plugin>
353
2. Remotos:
<comando><nombre-Tail><nombre-plugin>
Para conocer los plugins que hay en el sistema deberemos ejecutar el comando
ls -all.
Además de éstos, disponemos de la posibilidad de enviar órdenes directamente a los plugins
utilizando el comando
Su sintaxis es:
cmd .
cmd <nombre-plugin><orden-para-el-plugin>
/newpage
Comando para el servidor WebOs:
Existe un comando dedicado a la gestión del servidor web:
Figura 3.73: Comandos de consola para webOs
webos <opción>:
• status: Muestra el estado en el que se encuentra el servidor , en ejecución o detenido.
• start: Inicia la ejecución del servidor web.
• stop: Detiene la ejecución del servidor web.
• restart: Detiene el servidor web si está en ejecución y vuelve a iniciarlo.
Comandos sobre Tails:
comando
ls -tails ,
Podemos controlar que Tails tenemos conectados mediante el
pudiendo además prohibir la conexión y listar quienes la tienen prohibida,
expulsar y readmitir mediante los comandos ban , ls -banned , kick y unban respectivamente.
El comando
kickban
ejecuta esas dos acciones consecutivamente.
354
Figura 3.74: Pantalla de ayuda de la consola
Como se muestra en la imagen, la sintaxis es común para las órdenes ban , kick , unban
y kickban : <comando><nombre-Tail>
Siempre que ejecutemos el comando
nombre
Head ,
ls -banned
veremos por lo menos una entrada con el
pues como ya se ha comentado no se permite que ningún Tail se conecte con ese
nombre. No es posible ejecutar con éxito el comando
unban
sobre ese nombre.
Figura 3.75: Comandos de consola ls
Comandos de información general:
ls <opción>:
Lista información útil que varía según el parámetro introducido
• ls -sall: Muestra el listado de plugins de sistema.
355
• ls -uall: Muestra el listado de plugins de utilidad.
• ls -oall: Muestra el listado de plugins de salida.
• ls -eall: Muestra el listado de plugins expertos.
• ls -all: Muestra un listado con todos los plugins que conoce el sistema.
• ls -masters: Muestra un listado con los Master conectados.
• ls -tails: Muestra un listado con los Tails conectados.
• ls -banned: Muestra un listado con los Tails que han sido baneados del sistema.
set [verbose|debug] [on|o ]:
Con este comando podemos activar y desactivar el modo
verbose y debug que nos mostrarán más información de lo que ocurre por la consola.
mode:
Muestra la información con la que está congurada el sistema Figura 1: Pantalla
de consola comando Mode. Puede variar de la que contiene el chero
slaveconf.xml
si se
ha modicado alguno de los parámetros mediante comandos.
sys <comando shell>:
Da la posibilidad de ejecutar un comando de una terminal como
sobre la que se ha lanzado la propia aplicación.
exit, quit:
Finaliza la ejecución de la aplicación. También es posible nalizar mediante la
combinación de teclas ctrl+c.
3.4. Análisis
Una vez determinada la relación de parámetros de detección que deberán formar parte del
análisis, y desarrollada la solución de recogida de información pertinente, dichos parámetros están
listos para ser introducidos en la fase de Análisis.
Como se enuncia en el capítulo 1, el objetivo primordial del presente estudio consiste en el
desarrollo de un método de análisis basado en Detección de Anomalías que reporte su conocimiento a motores de Detección de Firmas, de modo que el tiempo de procesado y comprobación
requerido sea el más óptimo posible para los terminales en los que se implante el sistema. A este
respecto, y dado que las Redes Bayesianas han sido utilizadas en proyectos semejantes para Sistemas de Detección de Intrusiones basados en Host[95], se va a plantear y desarrollar un modelo
que englobe, sustituya y mejore a las técnicas existentes [399, 305, 13, 215, 47, 207, 331, 244].
3.4.1. Modelo General Operativo
Como se desprende del enunciado de los objetivos operacionales descritos en el capítulo 1,
la consecución del n último de la presente memoria pasa, en primer lugar, por la obtención de
un Modelo de Representación de Conocimiento. Éste, tomando en consideración el conjunto de
parámetros de detección enumerados en el apartados anteriores, hará uso de toda la potencia de
356
modelado e inferencia de las Redes Bayesianas. El objetivo principal es determinar la probabilidad
con la que pertenece al modelo de comportamiento del sistema operativo en estudio.
Para obtener la valoración nal del comportamiento correcto o anómalo de una determinada
aplicación se va a hacer uso de las técnicas de Redes Bayesianas Dinámicas para evaluación de
cadenas o secuencias de llamadas al sistema junto con un análisis ponderado de los parámetros
asociados a cada llamada en particular haciendo uso del algoritmo Bayesian Merging [308].
El aprendizaje de estructura de la Red Bayesiana Dinámica como tal no es necesario, dado
que está claramente jado en los papers revisados durante toda la memoria. Al n y al cabo el
objetivo en esta parte es validar que la secuencia de syscalls, que se están produciendo, pertenece
a un modelo aprendido de comportamiento correcto o no. Posteriormente ese experto, entendido
como la parte que se encarga de dotar a la infraestructura de Inteligencia Articial, generará una
regla procesable por la clase Cerebelum. Finalmente antes de acometerse una nueva investigación
mediante Inteligencia Articial en la secuencia de llamadas, si se descubre una coincidencia dentro
de las reglas inferidas y aprendidas por la infraestructura de una situación marcada anteriormente
como anómala, será indicado directamente. De esta forma se consigue aglutinar la rapidez de los
Sistemas de Detección de Intrusiones basados en rmas junto con la efectividad demostrada por
los Sistemas de Detección de Anomalías.
El administrador de la infraestructura podrá estudiar las reglas generadas por el motor de
Inteligencia Articial y cambiarlas o ampliarlas acorde a su conocimiento experto, pudiendo incluso obligar a la parte de IA a aprender esa regla como válida dentro del modelo de conocimiento
que tiene para una determinada aplicación.
3.4.2. Obtención de la Muestra Evidencial.
Se han desarrollado una serie de entidades software que se ocupan de la recogida en el
Sistema Operativo correspondiente de las llamadas al Sistema. Esta recogida se produce en la
forma comentada anteriormente y esos datos son enviados a la infraestructura DFSU desarrollada
para esta solución que se plantea. Una vez los paquetes llegan a la infraestructura son redirigidos
internamente hacia las entidades denominadas tails. Los Tails serán los encargados de trabajar
con el ujo de información entrante que llega desde los Masters. En ellos es donde se despliegan
los expertos basados en IA o en reglas que se encargan de comprobar los ujos de información
recibidos.
La infraestructura como se ha comentado tiene diferentes modos de funcionamiento, entre
ellos cabe destacar para la entrega de los mismos a los expertos los siguientes:
Modo BroadCast: Toda la información que entre en el sistema se distribuye por todos los
Tails.
Imaginando que se tiene un conjunto de terminales móviles de diferentes sistemas operativos,
la información que se obtenga será pasada en bloque a los diferentes Tails. Dentro de ellos
357
la información se repartirá acorde al tipo de evento al que estén suscritos estos expertos. El
comportamiento de la infraestructura en este caso sirve para poder tener diferentes expertos
repartidos por los tails que se encuentren disponibles, pero no es el más óptimo para la resolución
de la problemática planteada. Hay modos de funcionamiento mucho más precisos para la forma
de recogida de la información que se requiere.
Se indica que este modo no es el más óptimo dado que puede darse el caso de que existan
expertos suscritos a los Eventos de Host a los que llegaría la misma información y o bien se
encargan ellos de discernirlos para generar los diferentes modelos de conocimiento mediante
Redes Bayesianas Dinámicas o bien se procesarían los eventos recibidos varias veces.
Modo Usuario, modo origen, modo proceso y máquina.
Estos modos son los más adecuados a la funcionalidad deseada, dado que la infraestructura ha
sido diseñada para balancear carga y distribuir el procesado de los eventos que se introduzcan
al sistema. El bloque de información entra en el sistema y se va a distribuir acorde al modo de
funcionamiento en el que se encuentre. De esta forma se va a conseguir que cada Tail pueda
encargarse de lo acaecido en una máquina determinada, con un usuario concreto o de un origen
absoluto (denotar que la infraestructura no tiene intención de quedarse exclusivamente en la
Detección de Intrusiones basada en Host, si no que puede aceptar información de Red a la vez).
Esta forma de funcionamiento ha permitido el desarrollo e integración con la infraestructura
desarrollada en años anteriores por este equipo de investigación ESIDE-DEPIAN[42] encargada
del tratamiento de los eventos acaecidos en la red. El funcionar de esta manera permitirá la
correlación de eventos mediante clasicaciones bayesianas entre Host y Red como se detallará el
Capítulo 4 de Conclusiones y Retos Futuros.
Continuando con el proyecto que ilustra esta memoria, el funcionamiento en esta serie de
modos hace posible que un sistema de análisis no se sobrecargue con la información de varios
Host's. Los eventos llegarán acorde a su origen, al usuario que haya efectuado los mismos (o sus
aplicaciones) incluso de diferentes sistemas operativos, o desde una máquina en concreto. Una
vez obtenido el ujo de la forma deseada se discriminará basándose en la aplicación que haya
realizado una u otra llamada, de forma que los expertos inteligentes puedan aprender de la forma
correcta el modelo de comportamiento de la misma.
Las evidencias de host mantienen en su interior información sobre los siguientes campos:
Listing 3.23: Denición de la clase hEvent
2
#d e f i n e
TOH_LINUX
0
#d e f i n e
TOH_WINDOWS
1
#d e f i n e
TOH_WINMOV
2
#d e f i n e
TOH_SYMBIAN
3
typedef s t r u c t
MHEventHeader_
{
358
uint8_t toh ;
7
uint32_t numArgs ;
time_t etStamp ;
}MHEventHeader ;
12
typedef c l a s s
hEvent
{
MHEventHeader mheh ;
17
bool
error ;
char ∗
data ;
int
dataSize ;
Argument ∗ a r g s ;
public :
22
27
void
i n i t ( char ∗ data , i n t dataSize_ ) ;
bool
isError () ;
char ∗
getData ( ) ;
int
getDataSize () ;
void
setDataNull () ;
int
getNumArgumens ( ) ;
Argument ∗
getArgument ( i n t numArg ) ;
uint8_t getTypeOfHost ( ) ;
time_t getArrivalTimeStamp ( ) ;
char ∗
marshall ( int ∗ t S i z e ) ;
hEvent ( char ∗ data , i n t dataSize_ ) ;
32
~hEvent ( ) ;
};
En la denición anterior se observa la información a la que van a tener acceso los diferentes
plugins o expertos dentro de la infraestructura. Básicamente se divide por el tipo de sistema
operativo sobre el que está puesto el interceptor de las llamadas (syscalls):
Linux
Windows
Windows Mobile
Symbian
359
Posteriormente se dene el número de argumentos. Esta parte es importante para poder dimensionar el experto basado en IA (Redes Bayesianas Dinámicas junto con Bayesian Merging) y
empezar a crear el posible modelo que va a dar cabida a este tipo de información. Por cada
argumento se deberá crear un objeto Bayesian Merging que se encargará del modelado de cada
parámetro que acompañe a la llamada al sistema. Finalmente se tiene el timestamp, el momento
temporal de la captura, para poder relacionar en la línea de tiempos cuándo se han producido
las diferentes llamadas al sistema.
Fuera de la parte de cabecera que ayuda y simplica a la creación y mantenimiento de los
modelos se tiene el resto de parámetros de la clase Evento de Host, como pueden ser el valor de
retorno, el valor del error producido y la sucesión de argumentos propiamente dicha.
3.4.3. Aprendizaje e Inferencia de Expertos Mendizale
Una vez obtenidos los datos se procederá a realizar el estudio que permita adecuarse de la
manera más plausible posible a los requerimientos especicados. La primera fase es el aprendizaje
de los argumentos y su escalado para introducirse dentro del Modelo de Comportamiento general.
Se va a partir de un ejemplo de captura de un terminal Windows Mobile 2005 y en base al
mismo se va a desarrollar la forma en la que se manipula la información en el presente proyecto.
En este ejemplo en cuestión se han interceptado las siguientes librerías:
(1) API0119, número de veces llamada en la sesión: 890, número de argumentos: 11
(2) API0148, número de veces llamada en la sesión: 21, número de argumentos: 11
(3) API0177, número de veces llamada en la sesión: 0
(4) API079, número de veces llamada en la sesión: 7391, número de argumentos: 11
(5) API08, número de veces llamada en la sesión: 33, número de argumentos: 11
(6) API082, número de veces llamada en la sesión: 0
(7) API09, número de veces llamada en la sesión: 3, número de argumentos: 11
(8) API095, número de veces llamada en la sesión: 13, número de argumentos: 11
(9) API096, número de veces llamada en la sesión: 18, número de argumentos: 11
(10) API097, número de veces llamada en la sesión: 64, número de argumentos: 11
(11) API098, número de veces llamada en la sesión: 426, número de argumentos: 11
(12) API20116, número de veces llamada en la sesión: 0
(13) API20117, número de veces llamada en la sesión: 0
360
(14) API202, número de veces llamada en la sesión: 0
(15) API203, número de veces llamada en la sesión: 0
(16) API204, número de veces llamada en la sesión: 338, número de argumentos: 11
(17) API205, número de veces llamada en la sesión: 0
(18) API2063, número de veces llamada en la sesión: 0
(19) API209, número de veces llamada en la sesión: 0
El procesos implicados tienen los siguientes PID (Identicativo de Proceso)168 :
2d82b0aa: 1(1), 2(1), 10(7)
2dfe8262: 4(6920), 16(338)
4da96fd6: 4(6), 11(29)
4dc1d0f2: 1(7), 2(3), 4(225), 9(4)
6d696f6a: 1(114), 2(3), 4(2), 5(7), 8(2), 10(17), 11(94)
6da3cfb6: 1(8), 2(1), 10(7)
8dd76a22: 1(142), 2(4), 4(197), 5(5), 8(2), 9(14), 10(9), 11(121)
8dd76eea: 4(1)
ad6ba0da: 1(39), 2(2), 5(5), 8(2), 10(9), 11(21)
adde1b92: 11(11)
cdb96c92: 1(129), 2(4), 5(8), 8(2), 10(4), 11(118)
cdc13e46: 1(65), 2(3), 4(17), 5(8), 7(3), 8(5), 10(11), 11(32)
dfaa4ca: 4(23)
La primera escisión en el estudio es la unidad máquina:proceso. Esta unidad es para identicar
de forma única el modelo correspondiente tanto para aprendizaje como para cálculos posteriores
de validez. Esta unidad se reeja mediante la ip del host correspondiente y el PID del proceso a
modelar. Tomando por ejemplo el primer PID (Identicador de Proceso) que se ha puesto en la
lista y extrayendo de la captura un trozo de la misma tenemos la siguiente evolución:
168
Se indica el número interno de las librerías a las que llaman y entre paréntesis el número de veces que ha
sucedido en la sesión
361
PID2d82b0aaAPI10(210cc:,0,2,f000fdb0,c894,f000fe3c,0,1,21904,8dd7c6b0,1)
PID2d82b0aaAPI10(210b0:,0,2,f000fdb0,1eb8668,f000fe3c,0,1,2191c,8dd7c6b0,1)
PID2d82b0aaAPI10(2f91174:,0,2,f000fdb0,8dd7cea4,f000fe3c,0,1,2f94dd0,c894,f000fc)
PID2d82b0aaAPI10(2002fc90:,0,2,f000fdb0,0,f000fe3c,0,1,2fa265c,730074,720068)
PID2d82b0aaAPI10(2fc10b0:,0,2,f000fdb0,8dd61744,1eb6610,0,1,2fc3028,c894,f000fe3c)
PID2d82b0aaAPI10(2df101c:,0,2,f000fdb0,8da7c440,1e9d580,0,1,2df3634,c894,f000fe3c)
PID2d82b0aaAPI10(2002fc8c:,0,2,f000fdb0,0,1e9d580,0,1,2fa265c,720062,77006f)
PID2d82b0aaAPI1(2df16a0:,f000e0,2df16a0,2df17f8,2df17f8,1e9d6f0,1e9d71c,2df5608,1e9d71c,0,10)
PID2d82b0aaAPI2(8dd33cbc:,f000dc,8dd33cbc,0,1e9d604,0,0,2df6468,8da7c440,f000fe3c,2df3660)
Cuadro 3.23: Listado de llamadas al sistema por el PID 2d82b0aa
Recordando, dentro del listado anterior se tiene primero el identicativo PID, la librería o
función o llamada al sistema que realiza, los parámetros entre paréntesis y para nalizar se tiene
el valor de retorno (un entero de 32 bits) y el valor del error indicado por el sistema (si es que
se ha producido). Como se ha indicado anteriormente todas las llamadas llevan capturados 11
parámetros, no tiene por qué ser así en todos los sistemas operativos.
Aprendizaje y semejanza de parámetros de las llamadas al sistema.
Lo primero que debe realizarse es establecer dentro del modelo de parámetros es establecer
el orden correcto y la posición adecuada de los parámetros, así como traducir si son punteros a
cadenas de texto o arrays, para poder observar los valores convenientemente.
El orden de parámetros se ja dinámicamente dado que en la creación conforme se van leyendo
los parámetros se añaden al modelo general los modelos Bayesian Mergin que contendrán la
información correspondiente para ese parámetro en concreto. Si se plantea una solución como
por ejemplo en sistemas operativos GNU/Linux para realizar una escritura por pantalla, se le
debe pasar a la llamada que se encarga del mismo un descriptor (puntero único que hace referencia
a un chero del disco duro), el puntero a la cadena que se va a escribir y el tamaño de la cadena.
Así mismo para este caso si tenemos el siguiente código en ensamblador (en nomenclatura AT&T
para el ensamblador de GNU/Linux, GNU/Assembler).
Listing 3.24: Ejemplo para obtener el Identicativo de la CPU en ensamblador sobre sistemas
GNU/Linux en nomenclatura AT&T
. s e c t i o n .data
output :
. a s c i i " E l ID d e l v e n d e d o r e s ' x x x x x x x x x x x x ' \ n "
5
.section .text
. g l o b l _start
_start :
362
nop
10
movl $0 , %eax
cpuid
movl $output , %edi
movl %ebx , 23( % edi )
movl %edx , 27( % edi )
15
movl %ecx , 31( % edi )
movl $4 , %eax
movl $1 , %ebx
movl $output , %ecx
20
movl $37 , %edx
int
$0x80
movl $1 , %eax
movl $0 , %ebx
25
int
$0x80
En el código de la gura superior se escribe por pantalla el modelo de la CPU que se tiene,
haciendo uso de la instrucción de los procesadores compatibles IA-32: cpuid. Se tomarán los
valores que devuelva esta llamada y se introducirán dentro de un buer de texto creado a tal
efecto. Finalmente llega la parte que realmente interesaba mostrar, en la que se van introduciendo
los valores para realizar la llamada al sistema de escritura. Se introduce en el registro EAX el
valor de la llamada que se va a realizar, en este caso el valor entero de 32 bits 4. Igualmente se
introduce en el registro EBX el valor del descriptor de chero donde se va a realizar la escritura,
para esta ocasión el valor es 1 que indica que será escrito por la pantalla de usuario. Los dos
últimos valores, si bien también indican literales de 32 bits, uno de ellos lleva asociada una cadena
de texto dado que es un puntero a la misma. Estos valores son los que se tendrán que interceptar
de forma correcta y así mismo representar en los modelos que corresponda:
Número de Parámetro
Valor de Dicho Parámetro
Parámetro 2
Parámetro 3
Parámetro 4
1
El ID del vendedor es 'GenuineIntel'\n
37
Cuadro 3.24: Listado de parámetros para realizar una llamada write en GNU/Linux
Acorde a la tabla anterior el modelo que se iría generando es el siguiente:
363
Figura 3.76: Aprendizaje de Parámetros de las llamadas al Sistema
Como se puede ver en la gura anterior, los parámetros obligan al Experto Mendizale a
crear nuevos objetivos Bayesian Merging conforme se van leyendo nuevos. El parámetro 1 crea el
Objeto Modelo Bayesian Merging 1, el segundo el segundo modelo y así sucesivamente. De esta
forma se tienen modelados los parámetro de esa syscall y de ese proceso que se esta analizando.
Estos modelos se realizan por cada llamada al sistema que se produzca, de forma que todas
las llamadas tendrán una representación para sus parámetros. Conforme vayan llegando nuevos
parámetros para esa syscall y ese proceso seguirán el método de funcionamiento de las técnicas
Bayesian Merging desarrolladas por este equipo en el proyecto ESIDE-DEPIAN[42]. Esta técnica
innovadora en su momento para el análisis de los protocolos basados en texto se aplica de forma
pionera también en estos Sistemas de Inteligencia Articial, de forma que con los parámetros se
pueda precisar según la posición que ocupen (modelo de parámetro 1, modelo de parámetro 2...)
si realmente pertenecen al modelo o no.
Aparte se ha introducido una modicación importante, se parte siempre de un estado inicial
y se cierra siempre en una posición nal, de forma que se pueda controlar más especícamente
la progresión que puede soportar el parámetro correspondiente.
Como se puede ver un parámetro queda cuanticado probabilísticamente como Cadena de
Markov Oculta (HMM) indicando la probabilidad con la que se pasa de uno de sus caracteres (si
es un buer) al siguiente y se actualiza esta información con el modo de aprendizaje activo. Los
modelos autoaprenden cuando se le indica actualizando las tablas de probabilidades iniciales así
como las tablas de transición entre estados. Así mismo el cómputo de semejanza global para los
parámetros queda de la siguiente forma:
Likelihood(param1) = p(Estado1 → Estado2) · p(Emision_Simbolo1) · p(Estado2 →
Estado3)...
Y siguiendo en la misma línea, la probabilidad de semejanza y de ajuste de los parámetros
de esa llamada al sistema en concreto sería la siguiente.
Likelihood_T OT AL = Likelihood(param1) · Likelihood(param2) · Likelihood(param3)...
Hasta este punto se tiene una gramática que modeliza convenientemente las llamadas al
364
sistema, ésta permite que se sepa de antemano si hay alguna anomalía a nivel paramétrico en
las secuencias de syscalls.
Generalmente los sistemas de detección de Intrusiones no hacen uso de los parámetros pero
resultan muy signicativos en el estudio efectuado de los posibles ataques, sobre todo para
impedir sucesos como los detectados y creados con los ataques Mimicry.
El veredicto completo de este subsistema se integrará en el apartado completo del Modelo
Mendizale en el siguiente apartado.
Aprendizaje de secuencia de syscalls.
Muchos autores intentan jar una ventana para cada proceso en estudio y con ello poder
reejar una anomalía en la secuencia de syscalls que se van produciendo. Esta técnica ha tratado
siempre de ser modicada, mejorada y reestimada desde el documento que trató por primera vez
este secuenciamiento[134].
A este respecto en este documento se recurre a otra técnica: Las Redes Bayesianas Dinámicas.
No va a ser necesario estimar la ventana correspondiente para deslizarse sobre las secuencias de
llamadas al sistema como se ha realizado tradicionalmente. Tomando el ejemplo anterior de un
determinado proceso, se tenía la siguiente información del mismo:
PID2d82b0aaAPI10(210cc:,0,2,f000fdb0,c894,f000fe3c,0,1,21904,8dd7c6b0,1)
PID2d82b0aaAPI10(210b0:,0,2,f000fdb0,1eb8668,f000fe3c,0,1,2191c,8dd7c6b0,1)
PID2d82b0aaAPI10(2f91174:,0,2,f000fdb0,8dd7cea4,f000fe3c,0,1,2f94dd0,c894,f000fc)
PID2d82b0aaAPI10(2002fc90:,0,2,f000fdb0,0,f000fe3c,0,1,2fa265c,730074,720068)
PID2d82b0aaAPI10(2fc10b0:,0,2,f000fdb0,8dd61744,1eb6610,0,1,2fc3028,c894,f000fe3c)
PID2d82b0aaAPI10(2df101c:,0,2,f000fdb0,8da7c440,1e9d580,0,1,2df3634,c894,f000fe3c)
PID2d82b0aaAPI10(2002fc8c:,0,2,f000fdb0,0,1e9d580,0,1,2fa265c,720062,77006f)
PID2d82b0aaAPI1(2df16a0:,f000e0,2df16a0,2df17f8,2df17f8,1e9d6f0,1e9d71c,2df5608,1e9d71c,0,10)
PID2d82b0aaAPI2(8dd33cbc:,f000dc,8dd33cbc,0,1e9d604,0,0,2df6468,8da7c440,f000fe3c,2df3660)
Cuadro 3.25: Listado de llamadas al sistema por el PID 2d82b0aa (recordatorio)
Si traducimos la evolución de este proceso de llamadas tendría el siguiente aspecto:
Figura 3.77: Aprendizaje de Parámetros de las llamadas al Sistema
Para poder ilustrar el resto del comportamiento se va a usar una cadena más larga, como
podría ser: 10, 1, 2, 7, 15, 3, 10, 10, 10, 5, 15, 3, 10. Los trabajos tradicionales que se tienen
realizarían su función mediante una ventana deslizante por las mismas teniendo problema de
365
establecer el tamaño de la misma. La gran diferencia del método desarrollado en el presente
documento es que no requiere del conocimiento del número de la ventana deslizante de antemano.
Las evidencias se introducen en el modelo bayesiano dinámico de dos en dos para realizar el
aprendizaje paramétrico de las tablas de probabilidad internas, lo que no implicará más adelante
tener que seguir con una ventana de dimensión dos.
Una vez actualizado el sistema queda congurado de la siguiente forma:
Figura 3.78: Aprendizaje de Parámetros de las llamadas al Sistema
El modelo en modo aprendizaje ha actualizado las tablas de probabilidad internas conforme
a los datos de secuencias que se han ido introduciendo. Estas secuencias se introducen en el
modelo en una ventana deslizante de tamaño 2. Con esta evolución que parece sin memoria
más que del estado anterior como si fuera una cadena de Markov tradicional se consigue que el
366
modelo represente la realidad completamente del proceso en cuestión. La forma que tiene esta
red inicial DBN sigue las leyes de los HMM Autoregresivos, en los que las variables denominadas
Likelihood Parámetro N ayudan signicativamente a establecer a veracidad de resultados del
modelo.
La red DBN presentada se compone de un nodo padre con tantos estados como número de
librerías o de llamadas al sistema que se quiera modelar. Como hijo tiene el resultado de la
operación anterior de semejanza paramétrica de los parámetros que acompañen a esa llamada. Y
para completar la funcionalidad de DBN esto se repite enlazando tantas veces como sea necesario
esta estructura, conectando los padres entre sí y los hijos correspondientemente. Esta forma de
trabajo en DBN's se conoce como Unrollling.
Realizado el aprendizaje y el jado de la estructura que contendrá el modelo debidamente,
el siguiente paso es ajustar el número de etapas que va a tener el modelo a la hora de nalizar
el aprendizaje. Para ello se ha desarrollado una fase en la que se determina este valor, haciendo
uso de algoritmos EM y de la librería que subyace por debajo del sistema: PNL de Intel. Se
comienza con una ventana de dos nodos y se pide que se prediga el posible valor que tendría
acorde al modelo la syscall siguiente. Acorde a la secuencia planteada, se introducirían los valores
de llamada al sistema 10 y 1 observando si el siguiente valor que se ofrece es el 2. Caso de acertar
se desplazaría la ventana sobre los datos de aprendizaje para predecir (método Predict de la
librería de Intel) el siguiente estado, en esta caso se introduce 1 y 2, para ver si es 7. Si con este
tamaño de ventana se consiguen resultados apropiados este modelo sería congurado para un
tamaño de 2. En cambio si se produce un fallo en el diagnostico predictivo de la siguiente etapa,
en vez de introducir solo 2 valores de la secuencia se pasaría a introducir 3 valores y predecir
el 4o . De esta manera se consigue establecer el tamaño necesario para la inferencia de forma
adecuada y de manera automática.
Finalmente cuando se tiene el modelo completamente aprendido y actualizado se procede a
la puesta en ejecución y análisis del mismo, sobre el que se usan las metodologías de cálculo de
Semejanza. Es decir, establecido el modelo se introducen las nuevas evidencias sobre el tamaño
de ventana jado y se le indica al experto que reeje la probabilidad con la que esa secuencia
pertenece al modelo aprendido previamente. Este resultado por debajo de un umbral congurable
por el administrador será el índice sobre el que lanzarán las alertas correspondientes de Detección
de Anomalía.
3.4.4. Proceso de Razonamiento en la Red Naive de Unicación de Conclusiones
Por último, como se describe en el apartado anteriores, una vez obtenido el conjunto de
conclusiones parciales acondicionadas, resultado de cada uno de los diferentes procesos de razonamiento de los Motores Inteligente Mendizale para tratamiento de llamadas al sistema, puede
construirse una evidencia de alto nivel que presentar al motor de razonamiento correspondiente
367
al modelo de Red Naive de unicación de conclusiones parciales.
De este modo, dicho modelo podrá efectuar, en un segundo nivel jerárquico, el mismo ciclo
de inferencia y adaptación de sus homólogos especializados, con el objetivo de obtener una única
conclusión global nal que represente el valor de probabilidad a posteriori de la maldad inherente
a cada una de las evidencias recogidas en el sistema protegido, e introducidas al motor de análisis.
Debe denotarse que actualmente los ataques no solo involucran a una parte en concreto, si no que
generalmente llegan y se reproducen por la red, por lo que el sistema se integra con los expertos
bayesianos que se tenían de proyectos anteriores, con la nalidad de unicar y pre-detectar
los posibles ataques que se introduzcan. Por otro lado, es importante prestar especial atención
al hecho de que, dada la especialización presente en los diferentes modelos de Red Bayesiana
responsables de la representación de los diferentes tipos de parámetros, es posible la aparición de
situaciones en la que un determinado modelo no se encuentre en disposición de inferir conclusión
parcial alguna, por lo que el componente de inferencia del mencionado modelo de Red Naive debe
contemplar dicha posibilidad en su objetivo de obtención de la conclusión global. Asimismo, dicha
cuestión introduce idéntica consideración en el componente de adaptación.
Así, una vez construida la evidencia denitiva, puede procederse a la presentación de la misma al método de propagación de evidencia de Pearl. De esta manera, se obtiene nalmente un
valor continuo que representa la probabilidad de que una determinada evidencia sea maliciosa,
subversiva y anómala. Así, nalmente, dicho valor de probabilidad puede ser utilizado para efectuar la priorización de las noticaciones de alarma que se envían al operador humano encargado
de la administración y supervisión del sistema de detección. No obstante, una vez efectuada
dicha noticación, es necesario que el mencionado valor de probabilidad sea introducido en el
componente de adaptación, encargado de adaptar el conocimiento almacenado en el modelo de
Red Naive a las variaciones de conocimiento introducidas por dicha evidencia, por lo que se
precisa nuevamente de una etapa de acondicionamiento de la conclusión global. Así, en este caso,
la función de acondicionamiento aplicada al presente modelo de Red Bayesiana, se dene como
un valor umbral relativo169 .
De esta manera, los innitos valores que puede adoptar la mencionada probabilidad, una vez
acondicionada, quedan representados mediante los habituales dos posibles valores de normalidad
y legitimidad, o anomalía y subversión. Por su parte, a continuación, el componente de adaptación
no presenta ninguna diferencia con respecto a sus homólogos especializados, por lo que, una
vez inferida la probabilidad a posteriori de una determinada evidencia, puede procederse a la
aplicación de la variante secuencial del método de estimación de máxima verosimilitud utilizado
anteriormente, con el objetivo de adaptar el conocimiento almacenado en el modelo de Red
Bayesiana correspondiente a las variaciones de conocimiento introducidas por dicha evidencia.
169
El modelo de Red Naíve de unicación de conclusiones conlleva un proceso de inferencia de conclusiones
basado en la selección del estado nal más probable de la variable que representa la categoría, en este caso la
conclusión global. Por ello, el resultado nal obtenido por el componente de inferencia no es sino la probabilidad
a posteriori del estado más probable.
368
Una vez efectuada esta operación, el motor de razonamiento queda nuevamente dispuesto para
recibir la siguiente evidencia.
Finalmente el sistema automáticamente entrega las causas en forma de regla al administrador
correspondiente para que si lo desea sea introducida dentro del sistema. De esta forma se tiene
controlado en el propio ujo de la infraestructura si se ha producido, de forma que se realice
una captura temprana basada en aprendizajes anteriores. Esta captura indica al sistema no que
es requerido que vuelva a procesar esos mismos datos dado que ya se sabe el resultado que han
tenido con anterioridad. Queda a merced del administrador el hacer uso de esta funcionalidad y
de los periodos que se requieren de aprendizaje, así como de los niveles de umbrales que desea
en el sistema para indicar las posibles anomalías. Dependiendo de las necesidades concretas de
algún proceso o host, se pueden jar umbrales diferentes para la reacción de la infraestructura.
3.5. Respuesta
Los resultados obtenidos de la fase de análisis, se utilizan para tomar las decisiones que
conducirán a una respuesta. El conjunto de acciones y mecanismos que se pueden efectuar en esta
etapa es amplio. A continuación se describirán los requisitos y tipos de respuesta más comunes.
Una de las consideraciones a tener en cuenta al diseñar un mecanismo de respuesta es el
entorno operacional en el que se va a utilizar. Un sistema de detección que deba coordinar la
información de múltiples agentes, distribuidos a lo largo de una red de producción, no tiene
las mismas necesidades de alarma y noticación que un sistema no distribuido, instalado en un
ordenador personal. El elemento monitorizado juega, también, un papel importante en el modelo
de respuesta. Una de las razones por las que se proporcionan respuestas activas, como el bloqueo
de las conexiones del atacante, paralización de los procesos sospechosos de ser ataques, se debe
a la existencia de sistemas que proporcionan funciones o servicios críticos a los usuarios.
Por otra parte, las alarmas y avisos proporcionados por un mecanismo de respuesta deberían
presentar suciente información adicional para indicar las acciones a tomar en cada situación. Algunos productos de seguridad sólo indican el identicador del error mediante un simple mensaje,
siendo más útil añadir el posible origen del problema y cómo solucionarlo.
3.5.1. Tipos de respuestas
Las respuestas de un sistema de detección de intrusiones pueden ser de dos tipos: pasivas o
activas. Se pueden dar ambos tipos de respuestas en un sistema de detección, por lo que no son
excluyentes, más bien, son complementarias. Es posible que, en determinadas anomalías, sólo sea
necesario registrar la actividad ocurrida para su posterior examen, mientras que en intrusiones a
sistemas críticos haga falta una actuación más activa y urgente. Todo depende de las necesidades
de cada caso[85].
369
Respuestas pasivas
Son aquellas respuestas que consisten en el envío de información al responsable correspondiente, dejando recaer en él la toma de decisiones. En los primeros detectores de intrusiones,
todas las respuestas eran pasivas. Aunque la tecnología ha evolucionado mucho desde entonces,
las respuestas pasivas siguen existiendo. Y es que, por muy anados que sean los mecanismos
de respuesta automática, hay ocasiones en que un sistema no tiene la responsabilidad suciente
para tomar una decisión.
El mecanismo más común son las alarmas por pantalla, en los que un mensaje en una ventana
indica al usuario que se ha cometido una posible intrusión, acompañando a veces el mensaje con
información adicional, como la dirección del posible atacante, el protocolo usado, etc. El contenido
de estas alarmas se puede congurar en muchas ocasiones.
Otra forma de recibir respuestas pasivas es a través del correo electrónico o mensajes a un
teléfono móvil ?SMS, WAP push, etc-. La ventaja del segundo caso sobre el primero, es que se
puede recibir en cualquier lugar, cualidad muy apreciada entre administradores. No obstante, un
correo electrónico puede contener más información, proporcionando un mensaje más extenso, y
menos ambiguo, sobre la incidencia. El modelo presentado en este punto implementa el segundo
tipo de respuesta, a continuación se muestran algunas pantallas de los mensajes enviados ante
un ataque.
Figura 3.79: Ejemplo de envío de alerta de ataque al telefono móvil (Respuesta pasiva).
370
Por otra parte, algunos sistemas de detección de intrusiones están integrados con mecanismos
de gestión de redes. En estos casos se suele hacer uso de mensajes SNMP170 . La integración con
este sistema de comunicación permite utilizar canales ya existentes para el envío de incidencias.
No obstante, un uso excesivo por parte de detectores de intrusiones de estos canales, puede
perjudicar a otros sistemas que también hagan uso de ellos.
Respuestas activas
Este tipo de respuestas implican alguna acción en particular, como el bloqueo de un proceso,
el cierre inmediato de una cuenta, o la prohibición de ejecución de determinados comandos. Estas
acciones que pueden ser de diversa naturaleza se pueden clasicar básicamente en tres categorías
principales: Ejecución de acciones contra el intruso, Corrección del entorno y Recopilación de
información que se resumen a continuación.
La forma más directa de
Ejecución de acciones contra el intruso
consiste en identicar
el origen del ataque e impedirle el acceso al sistema, por ejemplo, en el caso de un sistema
de detección de intrusiones basado en red, la ejecución de acciones contra el usuario puede ser
desactivar una conexión de red o bloquear la máquina comprometida-, acciones menos drásticas
pueden ser, terminar la sesión TCP problemática o bloquear durante un intervalo de tiempo el
origen de las intrusiones. En cuanto a los sistemas HIDS, las acciones a tomar contra el usuario
pueden ser, por ejemplo impedimiento al proceso sospechoso de ejecutar más syscalls, eliminar los
procesos sospechosos, o incluso impedir al usuario involucrado en el evento sospechoso ejecutar
ningún programa más.
Como su nombre indica la
Corrección del entorno
consiste en efectuar las acciones perti-
nentes para restaurar el sistema y corregir los posibles problemas de seguridad existentes. En
muchas ocasiones, esta respuesta activa suele ser la acción más acertada. Aquellos sistemas que
cuentan con métodos de de auto-curación son capaces de identicar el problema y proporcionar los métodos adecuados para corregirlo. A menudo, este tipo de respuestas puede provocar
cambios en el motor de análisis o en los sistemas expertos, generalmente aumentando su sensibilidad e incrementando el nivel de sospecha ante posibles intrusiones, o ante usuarios o procesos
concretos.
La
Recopilación de más información
se utiliza en ocasiones para cumplir los requisitos de
información necesarios para poder tomar acciones legales contra posibles criminales. Normalmente se aplica en sistemas que proporcionan servicios críticos. Otra de las situaciones en las que se
puede dar este tipo de respuesta, es en máquinas o redes que imitan comportamientos y servicios
reales, para engañar a los intrusos. Tal es el caso de servidores trampa y honeypots por citar
algunos.
170
Simple Network Management Protocol
371
Prevención
Las respuestas activas, tienen varios problemas para con algunos tipos de ataque, en los cuales
la acción de la respuesta activa queda eliminada o minimizada.
Incapacidad de interactuar con ataque spoofeados171 , si un intruso lograse hacer pasar un
proceso con un nombre (por ejemplo
proceso
apache
apache ),
la respuesta activa puede encontrar a el
legítimo como un proceso sospechoso y tomas acciones para con él, como
puede ser pararlo, o suspenderlo, cuando se trata de un proceso legítimo.
Incapacidad de mantener Listas blancas de procesos, dado que los procesos son vulnerables
a ataques de overow, por lo que en los sistemas de host es imposible mantener este tipo
de listas.
Imposibilidad de bloquear el evento que ha disparado la alerta. Este es el mayor problema
del que adolecen los sistemas de respuesta activa, dado que hay ataques que únicamente
ejecutan una acción que puede ser sensible de ser localizada172 .
Figura 3.80: Problemática de la respuesta activa en sistemas NIDS
Por lo tanto, la prevención añade una solución a los problemas de la respuesta activa, aparte
de eliminar otro problema de la mísma que es dotar de la inteligencia necesaria al sistema de de
repuesta activa como para que tome acciones correctas contra los atacantes, dado que en este
tipo de sistemas [243, 342], sólamente atajan las syscalls173 , o los paquetes de red174 .
171
172
Ataques de suplantación
Como pueden ser por ejemplo los ataques ICMP en red, o un buer overow sobre un argumento de una
syscall.
173
174
En el caso de los sistemas HIDS (Sistemas de intrusión de host) como el que estamos tratando ahora mísmo
en el caso de los sistemas NIDS (Sistema de detección de intrusiones basado en red).
372
3.5.2. Respuesta implementada en ESIDE-Mendizale.
En el sistema de respuesta activa de ESIDE-Mendizale se encuentran implementados varios
tipos de respuesta activa explicados en el punto anterior, por una parte un sistema de respuesta
pasiva implementada dentro de la infraestrucutra del sistema, que permite realizar diferentes
alertas.
Por otra parte el sistema ofrece también la posibilidad de implementar respuesta activa, con
diferentes puntos de vista en la aplicación de la mísma.
Respuesta pasiva implementada en ESIDE-Mendizale
La respuesta pasiva implementada en el presente proyecto, se encuentra soportada por el sistema de respueta que está explícitamente implementado para el presente proyecto. Esta respuesta
pasiva, realiza un aviso, sobre el ataque o anomalía que se ha detectado.
Este tipo de respuesta es la más implementada en los sistemas convencionales, tanto por su
sencillez como por no tener que implementar una lógica de respuesta, la cuál se deja a manos de
el agente humano o administrador de sistemas que tome la acción necesaria para el evento que
se ha recogido.
La respuesta pasiva se implementa en varias versiones, mediante un mensaje SMS, que permite
informar al administrador de sistemas allí donde se encuentre, y tomar las acciones necesarias
al momento. Otra de las opciones implementadas es generar la salida mediante XML, para
un posíble data mining o procesado por parte de otros procesos este chero, que simplica y
estandariza el acceso a datos.
Respuesta activa implementada en ESIDE-Mendizale
La respuesta activa implementada en ESIDE-Mendizale, se encuentra dividida en dos grandes
partes: por una parte la respuesta activa implementada a nivel de proceso, y por otra parte la
respuesta activa implementada a nivel de usuario o usuario efectivo.
La respuesta activa a nivel de proceso, implica que una vez que se ha detectado que un
proceso es anómalo
175
, dicho proceso no pueda ejecutar ninguna llamada al sistemas más, es
decir, puede llamar a las librerías del sistema, pero éstas no pueden ejecutar ningúna llamada al
kernel de dicho proceso. Este sistema, permite
congelar
los procesos para que una aprobación
del administrador del sistema permita liberar dicho proceso. Este proceso se puede dar porque
el sistema de recolección de datos inserta una función
tranpolín
entre las llamadas legítimas y
las de nuestro sistema. Este sistema de recogida de datos posee absolutamente todo el control
sobre dichas llamadas, incluso si se ejecutan, si no se ejecutan o no se responden hasta que el
administrador de sistemas de un aviso de que el proceso puede seguir, en caso contrario puede
matar dicho proceso.
175
Alguna de sus systems calls ha generado una anomalía en algún experto del sistema.
373
Otra opción barajada para la respuesta activa a nivel de proceso, se trata de suspender a nivel
de kernel el proceso involucrado, cambiando el estado del proceso a suspendido, este sistema, al
nal no ha sido utilizado por la necesidad de estudiar el planicador de procesos de cada sistema
operativo, el cuál es conocido para GNU/Linux, pero no para el resto de sistema para los que se
ha implementado el sistema.
La otra opción dentro de la respuesta activa, es realizarla a nivel de usuario, es decir, que
si algún proceso de algún usuario realiza una acción que es detectada como una anomalía todos
los procesos de dicho usuario se mantienen bloqueados sin realizar ninguna syscall hasta que el
administrador de sistemas da el visto bueno a dicha anomalía, o en su defecto hace que dichos
procesos mueran. En cuanto a este tipo de respuesta activa, es en los sitemas GNU/Linux, existe
una opción que se ha barajado, que es extender este tipo de acciones no sólamente a los usuarios,
sino también a los usuarios efectivos176 , este tipo de usuario, existe en los sistemas GNU/Linux,
por el bit SUID177 , que permite que el chero que contiene dicho bit activo se ejecute con los
provilegios del creador. Por ejemplo el comando
ping
necesita acceder a dispositivos reales para
ejecutar mediante raw sockets su cometido, que es mandar mensajes ICMP. Por lo tanto en un
sistema sin SUID, ningún usuario, excepto el superusuario o root, podría ejecutar el comando ping
y que enviase mensajes ICMP al exterior, dado que para acceder para escritura a dispositivos
hace falta generalmente ser superusuario. Para solucionar este problema, existe el SUID, que
permite ejecutar el programa ping con los privilegios de su creador, en su caso, root. De esta
manera, se permite bloquear un usuario permanentemente en todos los niveles, incluso cuando
es otro usuario cuando ejecuta sus cheros.
Esta opción es justicada porque si un código vírico es ejecutado bajo un usuario, éste código
vírico puede infectar todos los cheros en los que puede escribir dicho usurio. Por lo tanto, si un
usuario queda infectado, todos sus cheros con el bit SUID también podrían quedar infectados
y ser ejecutados por otros usurios, de ahí que se limite la utilización del EUID.
Prevención implementada en ESIDE-Mendizale
La prevención no ha sido implementada en ESIDE-Mendizale, dado que no era uno de los
objetivos principales e implica grandes problemas técnicos en comparación con sistemas NIDS, de
todas maneras, se va a realizar una pequeña aproximación a cómo se implementaría la prevención
en sistemas HIDS, estudio que se llevó a cabo para descartar la implementación de la prevención.
La prevención en este tipo de sistemas, implicaría realizar un estudio de cada una de las
syscalls que se recolectan ántes de que se ejecuten. Esto requeríria ver si cada una de las syscalls
se ajusta al modelo realizado según el apartado
análisis,
y si éste se ajusta, dejar que la syscall
siga su camino.
Este sistema, debería de ser lo sucientemente rápido como para que la ejecución de el pro176
177
También conocidos como EUID, o Eective User IDencation.
Bit especial contemplado dentro de los bits de permisos del sistema GNU/Linux.
374
grama no se ralentize en exceso, dado que estamos haciendo que cada instrucción del programa
pase una vercación. Esta necesidad, haría necesario que el modelo de vercación de cada instrucción se ejecutase en el kernel a modo de LKM178 , para evitar la lentitud ocasionada por la
comunicadión de las zonas de usuario y de kernel.
3.6. Fortaleza
Los sistemas de deteccion de intrusiones son, desde el primer momento en que son implantados, el blanco de los ataques de los intrusos[117], por ello, el sistema de deteccion de intrusiones
debe de ser lo sucientemente able y seguro como para que este tipo de ataques no lleguen a
buen puerto y den una falsa sensacin de seguridad.
Dos de las partes de los sistemas de detección de intrusiones son particularmente sensibles a
este tipo de ataques, en concreto la parte de recogida de información y de almacenamiento de
los resultados obtenidos del proceso de análisis. De otra forma, la información de partida puede
ser objeto de subversión y el sistema de detección estaría proporcionando una falsa sensación de
seguridad.
Este aspecto de la seguridad de la fortaleza que el sistema IDS implementado en ESIDEMendizale, ha sido desarrollado mejorando la seguridad, transparencia y escalabilidad del sistema.
Por una parte, en cuanto a la transparencia de los sistemas, se ha realizado una ocultación de
los procesos y los módulos involucrados en el sistema. Esta solución es dependiente de cada uno
de los sistemas en los que se ha realizado el sistema de recolección de datos, y se ha utilizado el
control que otorga el lugar en el que se encuentra emplazado el sistema de recolección de datos
para esconder la existencia de los procesos y módulos involucrados en el sistema, sensibles a un
atacante externo. Esto se realiza, haciendo que el atacante no pueda ver los procesos existentes,
para ello se utilizan técnicas esencialmente víricas que sobreescriben las llamadas al sistema que
iplementan la escritura y la lectura (Dependiendo del sistema sobre el que se implemente se
modicará el funcionamiento de una o de otra). Estas llamadas se encuentran ya capturadas
mediante funciones
trampolín ,
que implementan la recolección de datos, por lo tanto para
esconder la existencia de dichos procesos, se elimina del buer del resultado los nombres de los
procesos y de los módulos implicados.
Con este sistema, conseguimos que los atacantes sean incapaces de conocer si en ese sistema
existe un sistema de auditoría, porque sencillamente, son incapaces de verlo.
Por otro lado, el uso de una superestructura paralelizable, como la explicada anteriormente,
permite evitar ataques de denegación de servicio basados en complejidad algorítmica. Según [25]
estos ataques se basan en explotar vulnerabilidades algorítmicas de muchos de los algoritmos
empleados en el software a atacar. La idea clave del ataque es que muchas de las estructuras
de datos y algoritmos empleados habitualmente, tienen un buen comportamiento en los casos
178
Loadable Kernel Module
375
normales, pero pueden degenerar a casos críticos -en consumo de memoria o de CPU- ante
situaciones patológicas. De esta forma, sí la superestructura se paraleliza para que se ejecute,
de forma distribuida, cada una en un equipo este ataque pasa a ser inocuo porque se podrá
sobrecargar uno o varios sistemas pero el resto siguen funcionando a pleno rendimiento.
Añadido a lo anterior el uso de una superestructura orientada a la poda de expertos, ya
comentado anteriormente, hace que se eviten ataques de denegación de servicio basados en complejidad algorítmica. Sí un experto se satura el propio modelo es capaz de "podar" esa rama,
que lo esta ralentizando, hasta que su situación vuelva a la normalidad.
Otra forma de dotar de fortaleza al sistema de detección es mediante la protección de la
recogida de información en base a la ubicación de los elementos de etiquetado y análisis en una
red privada virtual paralela a la infraestructura de comunicaciones a proteger. Un ejemplo de
esto puede verse en la siguiente gura:
Figura 3.81: Ejemplo de arquitectura del sistema, que asegura la fortaleza del sistema mediante
VPNs.
En esta gura se puede apreciar como los sistema de recolección de datos se comunican con
el resto de agentes, es aquí donde la comunicación se puede hacer cifrada mediante una VPN
-representadas por el candado-. Gracias a este cifrado que proporciona la VPN se consiguen tres
de los cuatro pilares básicos de la seguridad de la informacion, a saber: Autenticación -el que
envía la información es realmente quien dice ser-, Condencialidad - nadie en el punto intermedio
entre el snier y el analizador es capaz de ver la información que se esta transmitiendo- y por
último Integridad -los datos que se envían no sufren alteración ninguna en su camino-.
De esta manera, se ha conseguido un sistema que presenta una gran fortaleza contra todo
376
tipo de agresiones, tanto de ataques de denegación como de servicio (mediante la distribución
del cálculo y la posibilidad de poda de elementos sobrecargados), la transparencia de los agentes
de recolección de datos que se autoocultan para no aparecer a los ojos de los atacantes, y la
utilización de redes privadas virtuales (VPN) para la comunicación entre los diferentes elementos
de la red.
3.7. Cuestiones Operacionales
Este apartado, tal y como se ha descrito anteriormente trata sobre cuestiones como la escalabilidad, portabilidad, extensibilidad, así como otros aspectos como pueden ser la interoperabilidad
entre los diferentes componentes o incluso entre diferentes sistemas de detección de intrusiones.
Este tipo de cuestiones son de las más importantes para los usuarios de los sistemas de
detección de intrusiones, la facilidad de mantenimiento, reto establecido en el punto, se supera
ampliamente gracias a que el sistema genera sus salidas comparandolo con la normalidad lo que
dota al modelo de la capacidad de auto-adaptación a la realidad cambiante de la red reduciendo
al mínimo las labores administrativas, no como en otro tipo de sistemas expertos que necesitan
de un operado les inserte el conocimiento.
La portabilidad, entendida desde distintos sistemas operativos, máquinas y redes. Es decir, el
ids debe ser capaz de ejecutarse en distintos sistemas operativos, en distintas arquitecturas y distintas redes, este punto queda ámpliamente superado por la infraestructura de ESIDE-Mendizale,
dado que se ejecuta tanto en sistemas GNU/Linux como en Windows bajo la plataforma CygWin179 , y se adapta a todo tipo de conguraciones y de arquitecturas, gracias a su conguración
en tres capas, dando como lugar un sistema totalmente adapatable a la conguración del entorno
o a las necesidades del sistema a implantar.
La cuestion de la extensibilidad, muy ligada a la esclabilidad, queda de nuevo solventada por
la la estructura del sistema que permite conectar y desconectar nodos de computación (Tails) en
caliente,y cargar y /o descargar dinámicamente plugins en los Tails y Heads.
Cuestiones secundarias como el conocimiento requerido para su conguración y la interoperatibilidad con otros IDS no se han tenido en cuenta a la hora de desarrollar el sistema
ESIDE-Mendizale.
3.8. Aspectos sociales
Los aspectos sociales de un sistema de detección de intrusiones tiene dos vertientes bastante
diferencias, una relativa a los usuarios del entorno que protege y otro relativa a las acciones a
realizar contra los atacantes.
179
Cygwin se trata de la implementación del API de GNU/Linux bajo windows, se trata de una herraminetat
libre disponible en : http://www.cygwin.com/
377
En los aspectos relativos a los usuarios cabe hacerse preguntas del estilo a ¾Cómo afecta el ids
a la comunidad de usuarios que protege?, ¾Realmente evitará la consecución de intrusiones?, ¾Los
usuarios sentirán que sus datos se encuentran más protegidos?, ¾Verán los usuarios al sistema
como el ?gran hermano? que todo lo observa?. La respuesta a todas estas preguntas dependen
de que tipo de ids escoja la organización y que información/formación se les de a los usuarios.
Por tanto, como dependen totalmente del tipo de organización, su respuesta queda totalmente
fuera del ámbito de este proyecto y desde aquí solo se ha querido introducir estas cuestiones.
Por otro lado, la implementación de un sistema de detección de intrusiones implica, en muchas
ocasiones, el cumplimiento de una serie de requisitos impuestos por la ley. Cumplir con estas
obligaciones permite perseguir a los culpables mediante procesos legales o judiciales. Los registros
e informes proporcionados por el detector de intrusiones pueden constituir pruebas que ayuden
a localizar y condenar a los responsables. Sin embargo estos registros e informes pueden incluir
información considerada personal. Johnston establece, en su documento [286],que partes de la
información usada por un IDS se pueden considerar personal y por tanto entran dentro de
las leyes de privacidad. Por todo esto, aunque anteriormente se han presentado las respuestas
activas/reactivas, en el modelo no se hace una utilización, agresiva, de esta capacidad tan solo
se contempla la realización de un sistema de aviso de anomalías.
378
Capítulo 4
Conclusiones y líneas de investigación
futuras
Finalmente, una vez concluido el desarrollo de las diferentes tareas de investigación que
componen el presente estudio, y a la vista de los resultados obtenidos durante la fase de desarrollo
análisis de los resultados, es necesario determinar el grado de innovación con el que se alcanzan en
ESIDE- Depian las hipótesis fundamentales, planteadas en el capítulo 1. Además, por otro lado,
el desarrollo de las investigaciones conducentes a los objetivos marcados en la presente memoria
sirve asimismo para señalar las futuras líneas de trabajo a través de las cuales buscar solución a
ciertas cuestiones que aún permanecen por resolver y los nuevos retos que se plantean a raíz de
los estudios realizados. De este modo, se exponen a continuación tanto las conclusiones obtenidas
a lo largo de las diferentes partes que componen el presente trabajo de investigación, como las
futuras líneas de investigación que son susceptibles de abordarse a corto plazo, con el objetivo
de dar nuevos pasos en el desarrollo del área de conocimiento de la Detección de Intrusiones.
4.1. Conclusiones
Se ha desarrollado una infraestructura con la vista puesta en el futuro y en las siguientes
líneas de investigación. Esta infraestructura va a permitir alcanzar una integridad y unicidad,
aparte de la homogeinización de los resultados. Así mismo se han mezclado y unido las líneas de
investigación basadas en detección de rmas y detección de anomalías por medio de la infraestructura desarrollada: Heptopus. Se ha dedicado un gran esfuerzo en el desarrollo de la misma
para optimizar la rapidez de respuesta y la distribución de carga computacional de forma que se
permitan numerosas conguraciones e implantaciones acorde a los requisitos que sean requeridos.
Así mismo se ha dedicado un gran esfuerzo de trabajo en el desarrollo de una metodología de
trabajo para análisis de trazas de sistema que se espera dé resultados a corto plazo y se materialice
en diferentes proyectos comerciales. Las técnicas de inteligencia articial desarrolladas componen
un avance signicativo en el campo de detección de intrusiones automatizadas para entornos host.
379
El dinamismo y la automatización, así como la conclusión de reglas en base a los mismos hacen
de este proyecto un conjunto único y una nueva visión de desarrollo para las técnicas actuales
existentes en el campo hasta la fecha.
No queda más que indicar que todos estos objetivos no hubieran sido cubiertos sin la existencia
de una librería mantenida por la comunidad del software libre: PNL (subvencionada por Intel).
Sobre la misma se ha desarrollado un sistema software de adaptación, para facilitar el trabajo
con la librería anterior que ha llevado más de la mitad del tiempo de desarrollo del proyecto.
Esta adaptación permite acometer las formas de trabajo con la librería de Intel de forma sencilla
y automática, simplicando el uso de la misma y los requisitos de conocimiento necesarios para
realizar las mismas operaciones directamente con ella.
El equipo de investigación espera grandes resultados del trabajo de este periodo, conando en
la acogida de la comunidad investigadora con entusiasmo a esta nueva visión de la seguridad en
entornos de detección de intrusiones basados en red, en host e incluyendo los terminales móviles
y sus comunicaciones. Si bien el proyecto originariamente se desarrollo en vías a solventar las
problemáticas de este tipo de terminales, los dispositivos móviles, acorde a las hipótesis estas
técnicas pueden usarse indistintamente tanto en terminales móviles como en unidades cableadas.
En primer lugar, el objetivo operacional de desarrollo de un modelo de detección de intrusiones basado en anomalías para terminales móviles ha sido cubierto con creces. Dado que la
metodología de trabajo necesaria para acometer este trabajo en terminales móviles era paralela
a la desarrollada para sistemas informáticos cableados (mainframes, servidores, ordenadores de
sobremesa, portátiles, etc), el proyecto se amplió, introduciendo interceptores para los diferentes
sistemas operativos: Windows y Linux, así como para los sistemas operativos móviles: Symbian
OS, Linux para terminales móviles (Nokia N770 y derivados) y Windows Mobile. El sistema,
ampliado de miras ya, en las pruebas que se han realizado durante el desarrollo del software implementado en este periodo de trabajo ha dado resultados muy esperanzadores sobre el proyecto
desarrollado. La infraestructura ha demostrado acoger las líneas de trabajo anteriores de forma
válida y ha permitido la introducción de una distribución de carga necesaria y requerida para no
saturar los sistemas de detección.
Uno de los principales retos que se presentaron en la parte de retos era el modelado de
perles de usuario no supervisados, con objetivo directo en la detección de ataques noveles (zday attacks). Este objetivo ha sido estudiado en base a las áreas actuales de investigación a
nivel mundial y se ha conseguido mejorar las técnicas existentes para la tecnología actual. Este
modelo basado en Redes Bayesianas puede arrojar una llamada preventiva, dado que al generar
una regla se puede detectar prematuramente e incluso introducir este tipo de regla estáticas
dentro de los terminales móviles, evitando la necesidad de enviar información sobre patrones ya
conocidos como anómalos.
Fruto de un aprendizaje prematuro y una creación de un modelo incompleto se pueden
presentar tasas altas de falsos positivos, esta tasa se puede ajustar por medio de conocimiento
380
experto o volviendo a entrar en modo aprendizaje para los expertos basados en Redes Bayesianas.
Es conveniente observar la tasa de alertas que se van generando para poder garantizar la abilidad
del sistema, dado que puede tener un conocimiento incompleto sobre la aplicación en estudio.
Toda la base de conocimiento del sistema puede ser estudiada dado que sigue un formato
estandarizado en cheros XML que permiten creación, modicación o logeo de características
dentro de la infraestructura y de los propios expertos bayesianos. Además esta parte se aplica
incluyendo a las reglas de detección estática y los veredictos que entregan los expertos, pudiendo
realizarse integraciones con otras aplicaciones. Esta escalabilidad posibilita a los futuros usuarios
o administradores de esta infraestructura gestionarla en la forma que estimen más conveniente.
Un objetivo fundamental es la simplicación del trabajo de las personas dedicadas al tratamiento integral de la seguridad en organizaciones especícas. El prototipo que se ha desarrollado
si bien no esta en un estadio de madurez suciente como para realizar un producto comercial, no
dista mucho de un proyecto de estas características. El objetivo futuro que se plantea por el equipo de investigación es la conclusión de productos comerciales que permitan a los futuros usuarios
una forma sencilla de uso de la infraestructura. Además se les dota de medidas estudiadas y
contrastadas para la detección temprana y corrección de las anomalías que acaezcan.
4.2. Líneas de investigación futuras
Las líneas futuras en las que se esta trabajando actualmente para dar el prototipo por concluido es la medición de tasas de errores, tiempos de aprendizaje y jación de umbrales para
poder dar una visión menos subjetiva a los usuarios de conguración de la plataforma. Si bien es
ajustable en todos sus parámetros, conviene entregar una serie de datos y pruebas más extensa
que la que se dispone actualmente. En plazo corto se dispondrá de estos datos para poder dar el
prototipo por acabado.
Otra línea de investigación es la integración completa con los sistemas de detección de red,
para ello el despliegue de esta plataforma deberá realizarse del lado del operador de telefonía
móvil. Este operador será quien pueda tener acceso a las comunicaciones de los terminales vía
internet (llamadas de datos GSM/GPRS/UMTS) y podrá incorporan los sistemas desarrollados,
tanto para análisis del tráco de red, como para análisis de llamadas al sistema. Esta integración
homogénea y unicada de los datos corre a cargo de una parte fundamental de la plataforma, la
red bayesiana naive de unicación de resultados. Esta red permitirá sacar futuras conclusiones
sobre la concurrencia de que se produzca un ataque de red y se encuentren modicaciones en
el comportamiento de las aplicaciones en estudio y viceversa. Este paso futuro es la integración
fundamental, según la visión de la seguridad de este equipo de investigación, que deberá tenerse
instaurada en todo entorno informatizado para dotarlo de la seguridad requerida.
Líneas de investigación más rompedoras conllevan una modicación en la forma de trabajo
de los terminales móviles, como son la instrumentación de software y aplicaciones instaladas de
forma virtual. Este tipo de sistemas operativos virtualizados, llevados a terminales móviles, dotan
381
a los mismos de entornos seguros de aplicación y comportamiento estanco entre unas aplicaciones
y otras, si bien será necesario instrumentalizar y comprobar el comportamiento anómalo que se
produzcan incluso en el interior de este tipo de entornos.
El desarrollo de sistemas que permitan la instrumentación codicada de métodos implicaría
un fuerte incremento en el consumo de recursos del sistema, pero puede ser un paso adelante en
la instalación de aplicaciones. Esta medida se viene aplicando de forma reducida dentro de los
instaladores, vericando números de serie, funciones resumen criptográca (hash) o cheros de
conguración de permisos. Esto puede ser sobrepasado con la instalación de un sistema de seguridad, mediante una instrumentalización binaria criptográca, en la que se realice la instalación
controlada y la inclusión de los códigos necesarios en el sistema para que cuando se requiera una
funcionalidad del mismo se verique que todo siga bajo la normalidad.
Más puntos interesantes puede ser el estudio de ataques mimicry contra sistemas de detección
criptográcos existentes, un proyecto aparte puede llegar a ser el realizar un proyecto fuera de las
líneas de desarrollo habituales. Siguiendo la línea en la que un auditor de sistemas no desarrolla un
trabajo adecuado si no ha estado desarrollando al otro lado de la barrera, se considera necesario
dedicar un tiempo para desarrollar ataques e infecciones posibles contra los sistemas móviles
y la seguridad que conllevan. Este tipo de desarrollo puede ayudar con conocimiento experto
para los sistemas de detección de intrusiones como el que se ha realizado, introduciendo nuevas
conclusiones en el mismo o nuevas tesituras a tener en cuenta.
382
Bibliografía
[1]
Wikipedia, http://es.wikipedia.org/wiki/Ficherobinario.
[2]
Wikipedia, http://es.wikipedia.org/wiki/Exploit.
[3] R. e. neapolitan. probabilistic reasoning in expert systems: Theory and algorithms.
Interscience, New York,
Wiley-
1990.
[4] The bayesian information criterion (bic).
Disponible en département de mathématiques
de Besançon. http://www-math.univ-fcomte.fr/mixmod/statdoc/node21.html,
Septiembre
2005.
[5] Databases and articial intelligence. articial intelligence segment. hill-climbing .
ble en: http://www.cee.hw.ac.uk/ alison/,
[6] Hypertext
transfer
protocol
Disponi-
2005.
http/1.1.
2005.
Disponible
en
http://www.ietf.org/rfc/rfc2616.txt.
[7] Internet control message protocol. darpa internet program. protocol specication. 2005.
http://www.ietf.org/rfc/rfc768.txt.
[8] Internet protocol. darpa internet program. protocol specication. 2005. Disponible en
http://www.ietf.org/rfc/rfc791.txt.
[9] Multiple
imputation
for
missing
data.
http://support.sas.com/rnd/app/da/new/dami.html,
Disponible
en
Octubre 2005.
[10] Transport control protocol. darpa internet program. protocol specication. 2005. Disponible en http://www.ietf.org/rfc/rfc793.txt.
[11] User datagram protocol. darpa internet program. protocol specication. 2005. Disponible
en : http://www.ietf.org/rfc/rfc768.txt.
[12] Raftery A. Bayesian model selection in social research.
Methodology. Blackwells, Cambridge, MA,
1995.
383
In Marsden, P., editor, Sociological
[13] N. Abouzakhar, A. Gani, and Abuitbel M. y King D Manson G. Bayesian learning networks
approach to cybercrime detection.
Liverpool, UK,
Post Graduate Symposium, John Moore University,
Junio 2003.
[14] M. Schatz A.K. Ghosh, A. Schwartzbard. Using program behavior proles for intrusion
detection.
3rd SANS Workshop on Intrusion Detection and Response,
1999.
[15] J. Allen, A. Christie, Fithen W., McHugh J., Pickel J., and Stoner E. State of the practice of intrusion detection technologies.
Institute, Technical Report,
Carnegie Mellon University Software Engineering
2000.
[16] Intersect Alliance. Guide to snare epilog for unix, snareapache and snaresquid. 2006.
[17] P. Alípio, P. Carvalho, and J. Neves. Using clips to detect network intrusion.
Lecture
Notes in Computer Science, Vol. 2902/2003, Pag. 341-354, ISBN 0302-9743, SpringerVerlag,
Diciembre 2003.
[18] K. Anagnostakis, S. Antonatos, E. Markatos, and M. Polychronakis. E2xb: A domainspecic string matching algorithm for intrusion detection.
International Information Security Conference,
Proceeding of the 18th IFIP
Mayo 2003.
[19] D. Anderson, T. Frivold, A. Tamaru, and A. Valdés. Next generation intrusion detection
expert system (nides), software users manual.
tional,
Computer Science Laboratory, SRI Interna-
Mayo 1994.
[20] J. Anderson. Computer security threat monitoring and surveillance.
Washington, Pennsylvania,
Technical Report, Fort
Abril 1980.
[21] J. P. Anderson. Computer security threat monitoring and surveillance. 1980.
[22] Kamal Nigam Andrew McCallum. A comparison of event models for naive bayes text
classication.
School of Computer Science Carnegie Mellon University,
1998.
[23] Alerta Antivirus. Centro de alerta temprana sobre virus y seguridad informática. Disponible
en http://alerta-antivirus.red.es/portada/,
2006.
[24] W. A. Arbaugh, W. L. Fithen, and J. McHugh. Windows of vulnerability: A case study
analysis.
IEEE Computer,
December 2000.
[25] J. Avión. Denegación de servicio a través de ataques de complejidad algorítmica.
Disponible
http://www.computeridea.net/Actualidad/Noticias/Seguridad/Vulnerabilidades/20030729002,
2005.
[26] S. Axelsson. Intrusion detection systems: A survey and taxonomy.
Technical report 99-15,
Department of Computer Engineering, Chalmers University. Goteborg, Suecia,
384
2000.
[27] S. Axelsson. Visualization for intrusion detection: Hooking the worm.
Proceedings of the
8th European Symposium on Research in Computer Security, Vol. 2808 of Lecture Notes
in Computer Science, Springer-Verlag, Noruega,
Octubre 2003.
[28] R. Bace and P. Mell. Intrusion detection systems.
NIST Special Publication on Intrusion
Detection Systems. Disponible en http://csrc.nist.gov/publications/nistpubs/,
2001.
[29] Z. Baker and V. Prasanna. Automatic synthesis of ecient intrusion detection systems on
fpgas.
Proceedings of the International Conference on Field-Programmable Logic and its
Applications, Bélgica,
Septiembre 2004.
[30] J. Balasubramaniyan, J. Omar, D. Isaco, G. Spaord, and D. Zamboni. An architecture for
intrusion detection using autonomous agents.
Technical Report 98/05, COAST Laboratory,
Purdue University, West Lafayette, IN 47907-1398, USA,
[31] P. Bania. Windows syscall shellcode.
SecurityFocus,
Junio 1998.
2005.
[32] D. Barbará, N. Wu, and S. Jajodia. Detecting novel network intrusion using bayes estimators.
First SIAM International Conference on Data Mining,
2001.
[33] J. Barrus. A distributed autonomous-agent network-intrusion detection and response system.
Proceedings of the 1998 Command and Control Research and Technology Symposium,
Monterey, Canadá,
Julio 1998.
[34] E. Bauer, D. Koller, and Y. Singer. Udpate rules for parameter estimation in bayesian
networks.
Stanford University, AT&T Labs,
1996.
[35] S. Beattie, S. Arnold, C. Cowan, P. Wagle, C. Wright, and A. Shostack. Timing the
application of security patches for optimal uptime.
Systems Administration Conference (LISA).,
In Proceedings of the 2002. USENIX
November 2002.
[36] M. Bernaschi, E. Gabrielli, , and L. V. Mancini. Remus: a security-enhanced operating
system.
ACM Transactions on Information and System Security 5, 36 (Feb.),
2002.
[37] Massimo Bernaschi, Emanuele Gabrielli, and Luigi V. Mancini. Operating system enhancements to prevent the misuse of system calls.
Rome, Italy,
IAC-CNR. Viale del Policlinico, 137. 00161
2000.
[38] BlindView. Strace for windows. 2005.
[39] Charles S. Bos. Markov chain monte carlo methods: Implementation and comparison.
Tinbergen Institute & Vrije Universiteit Amsterdam. In Progress.,
Agosto 2004.
[40] S. Bridges and R. Vaughn. Fuzzy data mining and genetic algorithms applied to intrusion detection.
Proceedings of the 2000 National Information Systems Security Conference
(NISSC), Baltimore, USA,
Octubre 2000.
385
[41] S. Bridges and R. Vaughn. Intrusion detection via fuzzy data mining.
12th Annual Canadian Information Technology Security Symposium,
Proceedings of the
Junio 2000.
[42] P. García Bringas and J.L. Val Román. Eside-depian: Entorno de seguridad inteligente para la detección y prevención de intrusiones de red basado en anomalías.
Bizkaiko
Foru Aldundia - Diputación Foral de Bizkaia, Berrikuntza eta Ekonomi Sustapen Saila Departamento de Innovación y Promoción Económica. Informe-Solicitud aprobado por el
programa Bizkaitek,
2004.
[43] H. K. Browne, W. A. Arbaugh, J. McHugh, and W. L. Fithen. A trend analysis of exploitations.
In Proceedings of the 2001 IEEE Symposium on Security and Privacy,
May
2001.
[44] D. L. Bruening. Ecient, transparent, and comprehensive runtime code manipulation.
Ph.D., M.I.T. http://www.cag.lcs.mit.edu/dynamorio/,
2004.
[45] B. Buck and J. K. Hollingsworth. An api for runtime code patching.
The International
Journal of High Performance Computing Applications, 14(4):317 to 329.,
[46] W. Buntine. Learning classication trees.
2000.
In Articial Intelligence Frontiers in Statistics:
AI and statistics III. Chapman and Hall, New York,
1994.
[47] D. Burroughs, L. Wilson, and G. Cybenko. Analysis of distributed intrusion detection
systems using bayesian methods analysis of distributed intrusion detection systems using
bayesian methods. Proceedings of the 21th International Performance Computing and Communications Conference,
Abril 2002.
[48] M. Bykova and S. Ostermann. Staistical analisys of malformed packets and their origins
in the modern internet.
University,
School of Electrical Engineering and Computer Science, Ohio
2002.
[49] Kruegel C. Network alertness, towards an adaptative collaborating intrusion detection
system. 2002.
[50] Krügel C. Network alertness, towards an adaptative, collaborating intrusion detection
system.
Dissertation for the degree of Doctor of Philosophy, University of Wien, Austria,
2002.
[51] Siddhartha
C.
The
gibbs
sampling
algorithm.
http://www.quantlet.com/mdstat/scripts/csa/html/node28.html,
Disponible
en
Septiembre 2005.
[52] A. Ghosh C. Michael. Using nite automata to mine execution data for intrusion detection:
A preliminary report.
RAID 2000, LNCS 1907, pp.66-79,
386
2000.
[53] CAIDA.
Dynamic
graphs
of
the
nimda
http://www.caida.org/dynamic/analysis/security/nimda/,
worm.
Disponible
en
2001.
[54] J. Cannady and J. Mahaey. The application of articial intelligence to misuse detection.
Proceedings of the First Recent Advances in Intrusion Detection (RAID) Conference,
1998.
[55] Shapiro M. W. Cantrill, B. M. and A. H. Leventhal. Dynamic instrumentation of production
systems.
6th Symposium on Operating Systems Design and Implementation,pp. 15?28.,
2004.
[56] Jannette Cardoso and Heloisa Camargo.
Fuzziness in Petri Nets, Physica-Verlag.
98.
[57] E. Castillo, J.M. Gutiérrez, and A. Hadi. Sistemas expertos y modelos de redes probabilísticas.
Monografías de la Academia de Ingeniería, ISBN 8460093956,
1998.
[58] CERT Computer Emergency Response Team Coordination Center. Cert/cc overview incident and vulnerability trends.
trends/,
Disponible en http://www.cert.org/present/cert-overview-
2003.
[59] CERT Computer Emergency Response Team Coordination Center. Cert/cc statistics 19882005.
Disponible en http://www.cert.org/stats/certstats.html,
2005.
[60] CERT Coordination Center. Computer emergency response team coordination center home
page. http://www.cert.org/, 2006. Disponible en http://www.cert.org/.
[61] Jesús Cerquides and Ramón López de Mantaras. Tractable bayesian learning of tree augmented naive bayes classiers.
Instituto de Investigación en Inteligencia Articial, CSIC,
2003.
[62] S. N. Chari and P.-C. Cheng. Bluebox: A policy-driven, host-based intrusion detection
system.
In Proceedings of the 2002 ISOC Symposium on Network and Distributed System
Security (NDSS'02). San Diego, CA.,
2002.
[63] E. Charniak. Statistical languaje learning.
MIT Press, Cambridge, Massachusetts,
1993.
[64] S. Chavan, K. Shah, N. Dave, S. Mukherjee, A. Abraham, and S. Sanyal. Adaptative
neuro-fuzzy intrusion detection systems.
Proceedings of the 2004 International Conference
on Information Technology: Coding and Computing (ITCC), Vol. 1, Pag. 70,
2004.
[65] S. Chebrolu, A. Abraham, and J. Thomas. Feature deduction and ensemble design of
intrusion detection systems.
Elsevier Science,
Computers and Security Journal, Vol. 24/4, Pag. 295-307,
2005.
[66] P. Cheeseman and J. Stutz. Bayesian classication (autoclass): Theory and results.
puters and Security Journal, Vol. 24/4, Pag. 295-307, Elsevier Science,
387
1995.
Com-
[67] Jie Cheng and Russell Greiner. Learning bayesian belief network classiers: Algorithms and
systems.
Canadian Imperial Bank of Commerce, Toronto, Ontario, Canada. Department
of Computing Science, University of Alberta Edmonton, Alberta, Canada,
[68] Fredrik Valeur Giovanny Vigna Christopher Kruegel, Darren Mutz.
Anomalous System Call Arguments.
[69] CISCO.
Cisco
intrusion
2000.
On the Detection of
Springer Berlin / Heidelberg, 2003.
detection
home
http://www.cisco.com/warp/public/cc/pd/sqsw/sqidsz/,
[70] CMU. Carnegie mellon university home page.
page.
Disponible
en
2006.
Disponible en http://www.cmu.edu/,
2006.
[71] J. Conesa, M. Contero, and P. Company. Comportamiento de los algoritmos de optimización en la reconstrucción geométrica de sólidos.
Universitat Jaume I,
Univerisidad Politecnica de Cartagena.
2001.
[72] Cordis. Community research and development information service home page.
en http://www.cordis.lu/en/home.html,
Disponible
2006.
[73] Intel Corporation. Probabilistic network library: User guide and referente manual.
Technology Laboratories, Intel Corporation,
2004.
[74] Symantec Corporation. Ensuring your information is secure and available.
http://www.symantec.com/,
Systems
Disponible en
2006.
[75] E. Cox. The fuzzy systems handbook: A practitioner's guide to building, using, and maintaining fuzzy systems.
AP Professional, Primera edició, ISBN 0121942708,
Febrero 1994.
[76] M. Crosbie and G. Saord. Applying genetic programming to intrusion detection.
Working
Notes for the AAAI Symposium on Genetic Programming, Pag. 1-8, MIT, Cambridge,
USA,
Diciembre 1995.
[77] M. Crosbie and G. Spaord. Active defense of a computer system using autonomous agents.
Technical Report 95-008, COAST Group, Department of Computer Sciences, Purdue University, West Lafayette, Indiana, USA,
Febrero 1995.
[78] T. Crothers. Implementing intrusion detection systems: A hands-on guide for securing the
network.
John Whiley and Sons, Incorporated. ISBN 0764549499,
[79] CSI. Computer security institute home page.
[80] CSO.
Diciembre 2002.
Disponible en http://www.gocsi.com/,
Computer security ocer: The resource for security executives.
http://www.csoonline.com/,
2006.
Disponible en
2006.
[81] T. W. Curry. Proling and tracing dynamic library usage via interposition.
Summer 1994 Technical Conference, pages 267 to 278, Boston, MA.,
388
1994.
In USENIX
[82] Goldberg D. The design of innovation: Lessons from and for competent genetic algorithms.
Addison-Wesley, Primera edición, ISBN 1402070985,
[83] González
D.
Receive-only
utp
http://www.dgonzalez.net/pub/roc/,
[84] González D.
and
network
D.
Modelo
taps.
Disponible
en
2003.
Sistemas de deteccion de intrusiones.
http://www.dgonzalez.net/pub/ids/,
[85] Gonzalez
cables
Junio 2002.
Version 1.01, Disponible en
Julio 2003.
de
funcionamiento.
2005.
Disponible
en:http://www.dgonzalez.net/pub/ids/html/cap03.htm.
[86] Heckerman D. A tutorial on learning with bayesian networks. Marzo 1995.
[87] Lowd D. Naive bayes models for probability estimation.
and Engineering. University of Washington,
2005.
[88] Shannon C. Y Moore D. The spread of the witty worm.
2, N. 4,
Department of Computer Science
IEEE Security and Privacy, Vol
Julio Y Agosto 2004.
[89] Spaord E. Y Zamboni D. Intrusion detection using autonomous agents.
tworks, 34(4):547-570,
Computer Ne-
Octubre 2000.
[90] Upper D. Theory and algorithms for hidden markov models and generalized hidden markov
models.
Dissertation for the degree of Doctor of Philosophy, Mathematics Department,
University of California, Berkeley, USA,
Febrero 1997.
[91] Weakliem D. A critique of the bayesian information criterion for model selection. University
of Connecticut. Sociological Methods & Research, Vol. 27, No. 3, 359-397,
[92] Zamboni D. Using internal sensor for computer intrusion detection.
1999.
Center for Education
and Research in Information Assurance and Security. Thesis submitted to the Faculty of
Purdue University,
[93] DARPA.
2001.
Darpa
intrusion
http://www.ll.mit.edu/IST/ideval/,
[94] DARPA.
detection
evaluation.
en
Julio 2001.
Defense advanced research projects agency home page.
http://www.darpa.mil/,
Disponible
Disponible en
2006.
[95] GIOVANNI VIGNA CHRISTOPHER KRUEGEL DARREN MUTZ, FREDRIK VALEUR. Anomalous system call detection.
nical University of Vienna,
University of California, Santa Barbara - Tech-
February.
389
[96] D. Dasgupta and F. González. An immunity-based technique to characterize intrusions
in computer networks.
Pag. 1081-1088,
Transactions of the IEEE Evolutionary Computing, Vol. 6, No. 3,
Junio 2002.
[97] A.P. Dawid. Prequential data analysis.
In M. Ghosh and P. K. Pathak, editors, Current
Issues in Statistical Inference: Essays in Honor of D. Basu, IMS Lecture NotesMonographs
Series 17, pages 113126. Institute of Mathematical Statistics, Hayward, California,
1992.
[98] Red Iris: Red Española de Investigacion y Desarrollo. Servicio de seguridad iris-cert.
http://www.rediris.es/cert/, 2006. Disponible en http://www.rediris.es/cert/.
[99] Tatum Consultoría Comercial Y de Marketing. Informe de e-commerce (b2c).
en http://www.tatum.es/,
Disponible
2004.
[100] H. Debar, M. Dacier, and A. Wespi. Towards a taxonomy of intrusion-detection systems.
Computer Networks, Vol. 31, No. 8, Pag. 805-822,
Abril 1999.
[101] H. Debar, M. Dacier, and A. Wespi. A revised taxonomy for intrusion-detection systems.
Annales des Télécommunications, Vol. 55, Pag. 361-378,
2000.
[102] H. Debar, M. Huang, and D. Donahoo. Intrusion detection exchange format data model.
Disponible en http://www.ietf.org/internet-drafts/draft-ietf-idwg-datamodel-03.txt,
Ju-
nio 2000.
[103] Comision del Mercado de las Telecomunicaciones. Informe sobre el comercio electronico
en españa a través de entidades de medios de pago (4âo trimestre 2004).
http://www.cmt.es/cmt/centroinfo/publicaciones/index.htm,
Disponible en
2005.
[104] A. Dempster, N. Laird, and D. Rubin. Maximum likelihood from incomplete data via the
em algorithm.
Journal of the Royal Statistical Society, Series B, 39(1):138,
[105] D. Denning. An intrusion detection model.
13, 2 (Feb.), 222-232,
1977.
IEEE Transactions on Software Engineering
1987.
[106] J.E. Dickerson and J.A. Dickerson. Fuzzy network proling for intrusion detection.
Pro-
ceedings of the NAFIPS 19th International Conference of the North American Fuzzy Information Processing Society, Pag. 301-206, Atlanta, USA,
Julio 2000.
[107] J.E. Dickerson, J. Juslin, O. Koukousoula, and J.A. Dickerson. Fuzzy intrusion detection.
Proceedings of the IFSA World Congress and NAFIPS 20th International Conference of the
North American Fuzzy Information Processing Society, Vol. 3, Pag. 1506-1510, Vancouver,
Canada,
Julio 2001.
[108] Full Disclosure. An unmoderated mailing list for the discussion of security issues. Disponible
en https://lists.grok.org.uk/mailman/listinfo/full-disclosure,
390
2006.
[109] DoD.
United
states
department
http://www.defenselink.mil/,
of
defense
home
page.
Disponible
en
2006.
[110] P. Dokas, L. Ertoz, V. Kumar, A. Lazarevic, J. Srivastava, and P. Tan. Data mining for
network intrusion detection.
Mining, Baltimore, USA,
Proceedings of the NSF Workshop on Next Generation Data
Noviembre 2002.
[111] P. Domingos and M. Pazzani. On the optimality of the simple bayesian classier under
zero-one loss.
Machine Learning, 29:103-130,
1997.
[112] J. Doyle, I. Kohane, W. Long, H. Shrobe, and P. Szolovits. Event recognition beyond
signature and anomaly.
Proceedings of the 2001 IEEE Workshop on Information Assurance
and Security United States Military Academy, West Point, New York, USA,
[113] M. Druzdzel and H. Simon. Causality in bayesian belief networks.
Junio 2001.
Proceedings of the
9th Conference on Uncertainty in Articial Intelligence, Pag. 3-11, Washington, Morgan
Kaufmann, San Mateo, California, USA,
1993.
[114] F.J. Díez. Local conditioning in bayesian networks.
Articial Intelligence, 87:120,
[115] F.J. Díez. Introducción al razonamiento aproximado.
cial, Universidad de Educación a Distancia,
1996.
Departamento de Inteligencia Arti-
1998.
[116] Lundin E. Logging for intrusion and fraud detection.
Thesis for the degree of Doctor of
Philosophy, Department of Computer Engineering, Chalmers University, Göteborg, Suecia,
2004.
[117] Lunding E. Logging for intrusion and fraud detection.
Philosophy Department of Computer Engineering,
Thesis for the degree of Doctor of
2004.
[118] Spaord E. The internet worm: Crisis and aftermath.
32(6):678-687,
Communications of the ACM,
Junio 1989.
[119] S. Eckmann. Translating snort rules to statl scenarios.
Fourth International Symposium
on Recent Advances in Intrusion Detection, University of California Davis, Lecture Notes
in Computer Science 2212, Pag. 69-84,
Octubre 2001.
[120] S. Eckmann, G. Vigna, and R. Kemmerer. Statl: An attack languaje for state-based intrusion detection.
Technical Report, Department of Computer Science, University of Califor-
nia, Santa Barbara, USA,
2000.
[121] A. Eiben and J. Smith. Introduction to evolutionary computing. Springer, Primera edición,
ISBN 3540401849,
Noviembre 2003.
391
[122] D. Endler. Intrusion detection. applying machine learning to solaris audit data.
Proceedings
of the 14th Annual Computer Security Applications Conference (ACSAC), Pag. 268,
[123] esCERT.
1998.
Equipo de seguridad para la coordinacipn de emergencias en redes te-
lematicas.
http://www.escert.org/index.php/web/es/index.html, 2006.
Disponible en
http://www.escert.org/index.php/web/es/index.html.
[124] E. Eskin. Anomaly detection over noisy data using learned probability distributions.
Proceedings of ICML 2000, Menlo Park, CA, 2000. AAAI Press.,
In
2000.
[125] E. Eskin, W. N. Grundy, and Y. Singer. Protein family classication using sparse markov
transducers.
In Proceedings of the Eighth International Conference on Intelligent Systems
for Molecular Biology, Menlo Park, CA. AAAI Press.,
2000.
[126] Eleazar Eskin, Wenke Lee, J. Salvatore, and Stolfo. Modeling system calls for instrusion
detecction with dynamic window sizes. 2001.
[127] The Common Criteria Evaluation and Validation Scheme. Common criteria for information
technology security evaluation.
Version 3.0,
Junio 2005.
[128] FBI. Federal bureau of investigation home page.
[129] FBI/CSI.
Disponible en http://www.fbi.gov,
2005 fbi/csi computer crime and security survey.
http://www.gocsi.com/,
2006.
Disponible
en
2005.
[130] P. Felgaer, P. Britos, J. Sucre, A. Servetto, R. García-Martínez, and G. Perichinsky. Optimización de redes bayesianas basado en técnicas de aprendizaje por inducción. 1995.
[131] H. Feng, O. Kolesnikov, P. Fogla, and W. Lee. Anomaly detection using call stack information.
In Proceedings of the 2003 IEEE Symposium on Security and Privacy.,
[132] Security
Focus.
Bugtraq
mailing
http://www.securityfocus.com/archive/1,
[133] B.
Fonseca.
The
ips
list.
2003.
Disponible
en
2006.
question.
InfoWorld
Magazine.
http://www.infoworld.com/article/03/04/04/14ips1.html?security,
Disponible
en
Abril 2003.
[134] S. Forrest, S. A. Hofmeyr, A. Somayaji, and T. A. Longsta. A sense of self for unix
processes.
In Proceedings of the 1996 IEEE Symposium on Security and Privacy, pages ,
Los Alamitos, CA. IEEE Computer Society Press.,
1996.
[135] Friedman, Geiger, and Goldszmidt. Bayesian network classiers.
AT&T Labs,
University of California.
1997.
[136] N. Friedman and M. Goldszmidt. Sequential update of bayesian network structure.
versity of California, Computer Science Division. SRI International,
392
1995.
Uni-
[137] N. Friedman and Y. Singer. Ecient bayesian parameter estimation in large discrete
domains.
Computer Science Division University of California. AT&T Labs,
[138] Fyodor. The art of port scanning.
1997.
Disponible en http://www.insecure.org/nmap/,
1997.
[139] Wolf D. G. Statement before the house committee on government reform, subcommittee
on government eciency, nancial management and intergovernmental relations, and the
subcommittee for technology and procurement policy.
Act,
Federal Information Security Reform
2002.
[140] D.B. G. Hunt. Detours: Binary interception of win32 functions.
Microsoft Research,
1999.
[141] Debin Gao, Michael K. Reiter, and Dawn Song. Gray-box extraction of execution graphs
for anomaly detection.
nications security,
Proceedings of the 11th ACM conference on Computer and commu-
October 2004.
[142] T. Garnkel and M. Rosenblum. A virtual machine introspection based architecture for
intrusion detection.
In Proceedings of the 2003 Network and Distributed System Security
Symposium (NDSS),
February, 2003.
[143] A.E. Gelfand and A.F.M. Smith. Sampling-based approaches to calculating marginal densities.
Journal of the American Statistical Association, 85: 398-409,
1990.
[144] S. Geman and D. Geman. Stochastic relaxation, gibbs distributions and the bayesian
restoration of images.
12: 609-628,
IEEE Transactions on Pattern Analysis and Machine Intelligence,
1984.
[145] Zhihai Wang Geof Webb, Janice Boughton. Not so naive bayesian classication.
Monash
University, Melbourne, Australia.
[146] Wanken J. Ghosh, A. and F. Charron. Detecting anomalous and unknown intrusions
against programs.
In Proceedings of the Annual Computer Security Application Conference
(ACSAC'98). Scottsdale, AZ. 259-267,
1998.
[147] Golomb03. Intrusion detection methodologies demystied.
ted Technical Whitepaper,
Enterasys Networks Incorpora-
Diciembre 2003.
[148] Schwartzbard A. y Schatz M. Gosh A. Learning program behavior proles for intrusion
detection.
Proceedings of the rst USENIX Workshop on Intrusion Detection and Network
Monitoring, Santa Clara, California, USA,
Abril 1999.
[149] Ledesma B. y Brotons F. Grediaga A., Ibarra F. Utilización de redes neuronales para la detección de intrusos.
de Alicante,
Departamento de Tecnología Informática y Computación, Universidad
2002.
393
[150] Abraham A. y Han S. Grocan C. Mepids: Multi-expression programming for intrusion detection system.
International Work-Conference on the Interplay between Natural and Arti-
cial Computation (IWINAC), Lecture Notes in Computer Science, LNCS 3562, SpringerVerlag, Pag. 163-172, España,
2005.
[151] Oulu University Secure Programming Group. Glossary of vulnerability testing terminology.
Disponible en http://www.ee.oulu./research/ouspg/sage/glossary/,
2004.
[152] John Gulbrandsen. System call optimization with the sysenter instruction.
[153] Kim J. H. Convince: A conversational inference consolidation engine.
Computer Science, University of California, Los Angeles,
codeguru,
2004.
Tesis doctoral, Dept.
1983.
[154] Kvarnstram H. A survey of commercial tools for intrusion detection.
Technical Report
TR99-8, Department of Computer Engineering, Chalmers University of Technology, Goteborg, Suecia,
1999.
[155] Tijms H. Understanding probability: Chance rules in everyday life.
Press, ISBN 0521540364,
Cambrigde University
Agosto 2004.
[156] Zhang Z. Y Shen H. Online training of SVMs for real-time intrusion detection.
Proceedings
of the International Conference on Advanced Information Networking and Applications
(AINA), Vol. 1, Pag. 568,
2004.
[157] D. R. Simon H. J. Wang, C. Guo and A. Zugenmaier. Shield: Vulnerability-driven network lters for preventing known vulnerability exploits.
SIGCOMM Conference,
In Proceedings of the 2004 ACM
August, 2004.
[158] Mannila H. y Smyth P. Hand D. Principles of data mining.
Cambridge, Massachusetts, USA,
MIT Press, ISBN 026208290X,
2001.
[159] R. Hastings and B. Joyce. Purify: Fast detection of memory leaks and access errors.
Procedings of the Winter USENIX Technical Conference, San Francisco, CA.,
In
January
1992.
[160] Maccabe A. y Servilla M. Heady R., Luger G. The architecture of a network level intrusion
detection system.
Mexico, USA,
Technical Report, Department of Computer Science, University of New
Agosto 1990.
[161] Levitt K. N. Mukherjee B. Wood J. y Wolber D. Heberlein L.T., Dias G.V. A network
security monitor.
Pag. 296-304,
Proceeding of the IEEE Symposium on Research in Security and Privacy,
Mayo 1990.
394
[162] Keromytis A. y Stolfo S. Heller K., Svore K. One class support vector machines for detecting
anomalous windows registry accesses.
Proceedings of the ICDM Workshop on Data Mining
for Computer Security (SMSEC), Melbourne, Florida, USA,
Noviembre 2003.
[163] Honavar V. Miller L. y Wang Y. Helmer G., Wong J. Lightweight agents for intrusion
detection.
Elsevier Journal of Systems and Software, No. 67, Pag. 109-122,
2003.
[164] S. Y. Ho. Intrusion detection systems for today and tomorrow. SANS Institute. Information
Security Reading Room,
2001.
[165] Meier M. y König H. Holz T. High-ecient intrusion detection infraestructure.
ture. DFN-Arbeitstagung über Kommunikationsnetze, 217-232,
Infrastruc-
2003.
[166] R.A. Howard and J. Matheson. Readings on the principles and applications of decision
analysis.
Strategic Decisions Group, Menlo Park,
1981.
[167] Liao Y. y Vemuri R. Hu W. Robust support vector machines for anomaly detection in
computer security.
Proceedings of the 2003 International Conference on Machine Learning
and Applications (ICMLA), Los Angeles, California, USA,
Junio 2003.
[168] G. Hunt and D. Brubacher. Detours: Binary interception of win32 functions.
Windows NT Symposium,
USENIX
1999.
[169] IETF. Internet engineering task force home page.
Disponible en http://www.ietf.org/,
2006.
[170] Kemmerer R. y Porras P. Ilgun K. State transition analysis: A rule-based intrusion detection approach.
IEEE Transactions on Software Engineering, Vol. 21, No. 3, Pag. 181-199,
1995.
[171] Enterasys Networks Incorporated. Enterasys dragon intrusion defense.
http://www.enterasys.com/products/ids/,
Disponible en
2006.
[172] Forrester Incorporated. Forrester research: Technology research and advice home page.
Disponible en http://www.forrester.com/,
2006.
[173] Gartner Incorporated. Gartner group: It research and analysis home page.
http://www.gartner.com/,
2006.
[174] Tripwire Incorporated. Tripwire change auditing solutions home page.
http://www.tripwire.com/,
Disponible en
Disponible en
2006.
[175] INOUE, Hiroaki Akihisa Ikeno, Masaki Kondo, Junji Sakai, and Masato Edahiro. Virtus:
A new processor virtualization architecture for security-oriented next-generation mobile
terminals.
System Devices Research Laboratories, NEC Corporation, 1120, Shimokuzawa,
Sagamihara, Kanagawa, 229-1198 Japan. - NEC Informatec Systems, Ltd. 3-2-1, Sakado,
Takatsu-ku, Kawasaki, Kanagawa, 213-0012 Japan,
395
July, 2006.
[176] Ulrich Ultes-Nitsche. Inseon Yoo. Adaptative detection of worm/viruses in rewalls.
partament of Informatics, University of Fribourg, Switzerland,
De-
2002.
[177] SANS Institute. SANS glossary of terms used in security and intrusion detection. Disponible
en http://www.sans.org/resources/glossary.php,
2005.
[178] Red Iris. Red española de investigación y desarrollo.
Disponible en http://www.rediris.es/,
2006.
[179] IWS.
Top 20 countries with the highest number of internet users.
http://www.internetworldstats.com/top20.htm,
[180] IWS.
World
internet
users
and
http://www.internetworldstats.com/stats.htm,
[181] IWS. Internet world stats home page.
Disponible en
2005.
population
stats.
Disponible
en
2005.
Disponible en http://www.internetworldstats.com/,
2006.
[182] Giron F. J. Regresión logística y análisis discriminante robustos: un enfoque bayesiano.
Universidad de Málaga,
2005.
[183] Luo J. Integrating fuzzy logic with data mining methods for intrusion detection.
Report, Mississippi State University,
Technical
1999.
[184] McHugh J. The 1998 licoln laboratory ids evaluation: A critique.
Proceedings of the 3th
International Workshop on Recent Advances in Intrusion Detection, Vol. 1907 of Lecture
Notes in Computer Science, Springer-Verlag, Tolouse, Francia,
Octubre 2000.
[185] Pearl J. Reverend bayes on inference engines: A distributed hierarchical approach.
ceedings of the AAAI National Conference on AI, Pag. 133-136, Pittsburgh, PA,
Pro-
Agosto
1982.
[186] Pearl J. Fusion, propagation and structuring in belief networks.
29:241 288,
Articial Intelligence,
1986.
[187] Pearl J. Probabilistic reasoning in intelligent systems: Networks of plausible inference.
Morgan Kaufmann, ISBN 1558604790,
Septiembre 1988.
[188] Pearl J. From conditional oughts to qualitative decision theory.
Proceedings of the 9th Con-
ference on Uncertainty in Articial Intelligence, Pag. 12-20, Washington, Morgan Kaufmann, San Mateo, California, USA,
1993.
[189] Pearl J. Causal diagrams for empirical research.
Biometrika, 82:669-710,
1995.
[190] Robins J. A new approach to causal inference in mortality studies with sustained exposure
results. mathematical modelling.
7:1393-1512,
396
1986.
[191] Schenier B. Y Kelsey J. Secure audit logs to support computer forensics. ACM Transactions
on Information and System Security, 2(2),
Mayo 1999.
[192] B. Ravichandran J. B. D. Cabrera and R. K. Mehra. Statistical trac modeling for network
intrusion detection.
In Proceedings of the Eighth International Symposium on Modeling,
Analysis, and Simulation of Computer and Telecommunications Systems, pages 466-473,
San Francisco, CA. IEEE Computer Society.,
August, 2000.
[193] B. Karp J. Newsome and D. Song. Ploygraph: Automatically generating signatures for
polymorphic worms.
In Proceedings of the IEEE Symposium on Security and Privacy,
May, 2005.
[194] S. Jha J. T. Gin and B. P. Miller. Detecting manipulated remote call streams.
Security Symposium.,
USENIX
August 2002.
[195] S. Jha J. T. Gin and B. P. Miller. Ecient context-sensitive intrusion detection.
Annual Network and Distributed System Security Symposium.,
11th
February 2004.
[196] Karygiannis T. y Marks D. Jansen W., Mell P. Mobile agents in intrusion detection
and response.
Proceedings of the 12th Annual Canadian Information Technology Security
Symposium, Ottawa, Canadá,
2000.
[197] S. L. Lauritzen Jensen F. V. and K. G. Olesen. Bayesian updating in causal probabilistic
networks by local computations.
Computational Statistics Quarterly 4, 269282,
1990.
[198] Scott M. Lewandowski Robert K. Cunningham Jesse C. Rabek, Roger I. Khazan. Detection
of injected, dynamically generated, and obfuscated malicious code.
of Technology, Lincoln Laboratory, 244 Wood Street, Lexington.,
Massachusetts Institute
October 2003.
[199] Lundy Lewis Joao B. D. Cabrera and Raman K. Mehra. Detection and classication of
intrusions and faults using sequences of system calls.
Scientic Systems Company, 500
West Cummings Park, Suite 3000. Woburn MA 01801 USA,
December, 2001.
[200] M. B. Jones. Interposition agents: Transparently interposing user code at the system
interface.
In Proceedings of the Symposium on Operating Systems Principles, pages 80 to
93, Asheville, NC.,
1993.
[201] Chongkyung Kil Yan Zhai Chris Bookholt Jun Xu, Peng Ning. Automatic diagnosis and
response to memory corruption vulnerabilities.
Cyber Defense Laboratory. Department of
Computer Science. North Carolina, State University,
[202] Gubbels K. Hands in the honeypot.
November, 2005.
SANS Institute Information Security Reading Room.
GIAC Security Essentials Certication (GSEC), Practical Assignment, Version 1.4b,
397
2002.
[203] Ilgun K. Ustat: A real-time intrusion detection system for unix.
Proceedings of the IEEE
Symposium on Research on Security and Privacy, Oakland, USA,
[204] Jackson K. Intrusion detection system product survey.
Mayo 1993.
Technical Report LA-UR-99-3883.
Distributed Knowledge Systems Team, Computer Research and Applications Group, Los
Alamos National Laboratory, New Mexico,
Junio 1999.
[205] Julisch K. Using root cause analysis to handle intrusion detection alarms.
IBM Zurich
Research Laboratory. Dissertation for the degree of Doctor of Philosophy, University of
Dortmund, Alemania,
2003.
[206] Murphy K. An introduction to graphical models.
Corporation,
TechnicalReport, Intel Research, Intel
Mayo 2001.
[207] Valdés A. Y Skiner K. Probabilistic alert correlation.
Proceedings of the 4th International
Symposium on Recent Advances in Intrusion Detection, Pag. 54-68,
2001.
[208] Staniford-Chen S. y Tung B. Kahn C., Porras P. A common intrusion detection framework.
Journal of Computer Security,
Julio 1998.
[209] Tierney L. Kass, R. and J. Kadane. Asymptotics in bayesian computation.
In Bernardo,
J., DeGroot, M., Lindley, D., and Smith, A., editors, Bayesian Statistics 3, pages 261-278.
Oxford University Press,
1988.
[210] H. A. Kim and B. Karp. Autograph: Toward automated, distributed worm signature
detection.
In Proceedings of the 13th Usenix Security Symposium,
August, 2004.
[211] Nguyen H. y Park J. Kim D. Genetic algorithm to improve svm based network intrusion detection system.
Proceedings of the 19th International Conference on Advanced Information
Networking and Applications (AINA), Vol. 2, Pag. 155-158,
2005.
[212] Samuel T. King and Peter M. Chen. Backtracking intrusions.
Engineering and Computer Science. University of Michigan,
Department of Electrical
February, 2005.
[213] Ruschitzka M. y Levitt K. Ko C. Execution monitoring of security-critical programs in
distributed systems: A specication-based approach.
posium on Security and Privacy, Oakland, USA,
Proceedings of the 1997 IEEE Sym-
1997.
[214] C. Kreibich and J. Crowcroft. Honeycomb - creating intrusion detection signatures using
honeypots. In Proceedings of the Second Workshop on Hot Topics in Networks (HotNets-II),
November, 2003.
[215] Robertson W. y Valeur F. Krügel C., Mutz D. Bayesian event classication for intrusion
detection.
Vegas,
Proceedings of the 19th Annual Computer Security Applications Conference, Las
Diciembre 2003.
398
[216] Vigna G. y Kemmerer R. Krügel C., Valeur F. Stateful intrusion detection for high-speed
networks.
Proceedings of the IEEE Symposium on Security and Privacy, IEEE Press, Pag.
285-293, Oakland, USA,
Mayo 2002.
[217] G. Krügel. C, Vigna. Anomaly detection of web-based attacks.
University of California, Santa Barbara,
Reliable Software Group,
2003.
[218] R. Kuster. Three ways to inject your code into another process. 2003.
[219] Me L. Gassata, a genetic algorithm as an alternative tool for security audit trails analysis.
First International Workshop on the Recent Advances in Intrusion Detection, Louvain-laNeuve, Belgica,
Septiembre 1998.
[220] Skoudis E. Y Zeltser L. Malware: Fighting malicious code.
ISBN 0131014056,
Prentice Hall, Primera Edición,
Noviembre 2003.
[221] Spitzner L. Honeypots: Tracking hackers.
Addison-Wesley Professional, ISBN 0321108957,
2002.
[222] Kaspersky Lab. Premier protection against viruses, hackers and spam.
http://www.kaspersky.com/,
Disponible en
2006.
[223] L. C. Lam and T. Chiueh. Automatic extraction of highly accurate application-specic
sandboxing policy.
In Seventh International Symposium on Recent Advances in Intrusion
Detection, Sophia Antipolis, French Riviera, France.,
September 2004.
[224] Lap-Chung Lam, Wei Li, and Tzi cker Chiueh. Accurate and automated system call policybased intrusion prevention.
2006 International Conference on Dependable Systems and Ne-
tworks (DSN 2006), 25-28 June 2006, Philadelphia, Pennsylvania,USA, Proceedings .IEEE
Computer Society,
2006.
[225] J. Larus and E. Schnarr. Eel: Machine-independent executable editing. In Proceedings of the
ACM SIGPLAN '95 Conference on Programming Language Design and Implementation,
La Jolla, CA.,
June 1995.
[226] Dawson R. Lavori P.W. and Shera D. A multiple imputation strategy for clinical trials
with truncation of patient data.
Statistics in Medicine, 14, 19131925,
1995.
[227] Kumar V. Ozgur A. y Srivastava J. Lazarevic A., Ertoz L. A comparative study of anomaly
detection schemes in network intrusion detection.
Mining,
SIAM International Conference on Data
Mayo 2003.
[228] Chan P. Eskin E. Fan W. Miller M. Hershkop S. y Zhang J. Lee W., Stolfo S. Real time
data mining-based intrusion detection.
Proceedings of the second DARPA Information
Survivability Conference and Exposition,
2001.
399
[229] Stolfo S. y Mok K. Lee W. A data mining framework for building intrusion detection
models.
Proceedings of the IEEE Symposium on Security and Privacy, Pag. 120-132,
1999.
[230] Tseng S. y Lin S. Lin Y. An intrusion detection model based upon intrusion detection
markup languaje (idml).
Department of Computer and Information Science, National
Chiao Tung University, Taiwan,
Agosto 2001.
[231] U. Lindqvist and P. Porras. Detecting computer and network misuse with the production based expert system toolset (p-best).
Oakland, CA. 146-161.,
In IEEE Symposium on Security and Privacy.
1999.
[232] Fried D. Korba J. y Das K. Lippmann R., Haines J. The 1999 darpa o-line intrusion
detection evaluation.
Computer Networks, Vol. 34(4):579-595, Elsevier Science,
Octubre
2000.
[233] Zhen Liu and Susan M. Bridges. Dynamic learning of automata from the call stack log for
anomaly detection.
University,
Department of Computer Science and Engineering. Mississippi State
April, 2005.
[234] Cohn R. Muth R. Patil H. Klauser A. Lowney G. Wallace S. Reddi V. J. Luk, C. and
K. Hazelwoo. Pin: Building customized program analysis tools with dynamic instrumentation.
ACM SIGPLAN Conference on Programming Language Design and Implementation
(PLDI), Chicago, IL, USA, pp. 190?200.,
2005.
[235] T. F. Lunt. Detecting intruders in computer systems.
In Proceedings of the Sixth Annual
Symposium and Technical Displays on Physical and Electronic Security,,
1993.
[236] Teresa F. Lunt and R. Jagannathan. A prototipe real-time intrusion-detection expert
system.
IEEE Symposium on Security and Privacy,,
1988.
[237] Gilham F. Jagannathan R. Newumann P. y Jalali C. Lunt T., Tamaru A. Ides: A progress
report.
Proceedings of the 6th Annual Computer Security Applications Conference,
[238] Llorens M. Redes recongurables. modelizacion y vericacion.
1990.
Tesis Doctoral, Depar-
tamento de Sistemas Informaticos y Computacion, Universidad Politecnica de Valencia,
2003.
[239] Olmsted Scott M. On representing and solving decision problems.
Ph.D. thesis, Stanford
University, Department of Engineering-Economic Systems, Stanford, CA,
[240] Ranum M. Coverage in intrusion detection systems.
Incorporated Technical Publication,
Technical Publication. NFR Security
Junio 2001.
[241] Ranum M. Experiences benchmarking intrusion detection systems.
porated Technical Publication,
Diciembre 1983.
Diciembre 2001.
400
NFR Security Incor-
[242] Roesch M. Snort: Lightweight intrusion detection for networks.
13th Systems Administration Conference, Pag. 229-238,
Proceedings of LISA'99:
Noviembre 1999.
[243] Roesch M. Next-generation intrusion prevention: The pre-attack period. 2005. Disponible
en http://searchsecurity.techtarget.com/tip/1289483sid14gci112130700.html.
[244] Ye N. Y Xu M. Probabilistic networks with undirected links for anomaly detection.
Works-
hop on Information Assurance and Security, Proceedings of the IEEE, Pag. 175-179,
2000.
[245] N. Fakotakis G. Kokkinakis M. Maragoudakis, E. Kavallieratou. How conditional independence assumption aects handwritten character segmentation.
and Computer Engineering, University of Patras, Greece,
Department of Electrical
2000.
[246] Carla Marceau. Characterizing the behavior of a program using multiple-length n-grams.
Odyssey Research Associates. Ithaca, NY 14850,
February, 2001.
[247] Jose Ignacio Sánchez Martín. Técnicas de modelado de llamadas al sistema como aproximación a la detección de intrusiones en sistemas gnu/linux, microsoft windows 2000/xp y
microsoft windows mobile. 2006.
[248] Wes Masri and Andy Podgurski. Using dynamic information ow analysis to detect attacks against applications.
Computer Science Department. American University of Beirut.
Beirut, Lebanon 1107 2020 - Electrical Engineering and Computer Science Department.
Case Western Reserve University. Cleveland, OH 44106,
May, 2005.
[249] Lippmann R. Haines J. y Zissman M. Mell P., Hu V. An overview of issues in testing intrusion detection systems.
Technical report, National Institute of Standards and Technology,
Massachusetts Institute of Techonology Lincoln Laboratory, USA,
[250] M. Miller. Understanding windows shellcode.
nologin,
Junio 2003.
2003.
[251] MIT. Massachusetts institute of technology home page. Disponible en http://www.mit.edu/,
2006.
[252] Trevor Jim Richard Schlichting Mohan Rajagopalan, Matti Hiltunen. Authenticated system calls.
Department of Computer Science, The University of Arizona. AT and T Labs-
Research, 180 Park Avenue,
July, 2006.
[253] Savage S. Shannon C. Staniford-Chen S. y Weaver N. Moore D., Paxson V. The spread of
the sapphire/slammer worm.
IEEE Security and Privacy, Vol 1, N. 4,
Julio-Agosto 2003.
[254] Shannon C y Brown J. Moore D. Code-red: A case study on the spread and victims of an
internet worm.
Internet Measurement Workshop (IMW),
401
2002.
[255] Heberlein T. y Levitt K. Mukherjee B. Network intrusion detection.
8(3):26-41,
IEEE Network,
Junio 2004.
[256] Sung A. y Abraham A. Mukkamala S. Intrusion detection using an ensemble of intelligent
paradigms.
Science,
Journal of Network and Computer Applications, No. 28, Pag. 167-182, Elsevier
2005.
[257] N. Nethercote and J. Seward. Valgrind: A program supervision framework. In 3rd Workshop
on Runtime Verication,
2003.
[258] P. G. Neumann and P. A. Porras. Experience with emerald to date.
Usenix Workshop on Intrusion Detection,
In Proceedings of the
1999.
[259] James Newsome and Dawn Song. Dynamic taint analysis for automatic detection, analysis,
and signature generation of exploits on commodity software.
In Proceedings of the 12th
Annual Network and Distributed System Security Symposium (NDSS),
[260] NIST.
2005.
National institute of standards and technology home page.
http://www.nist.gov/,
Disponible en
2006.
[261] Novell. Linux audit-subsystem design documentation for kernel 2.6. 2004.
[262] NSA. National security agency home page.
Disponible en http://www.nsa.gov/,
[263] University of California. Lawrence livermore national laboratory home page.
en http://www.llnl.gov/,
2006.
Disponible
2006.
[264] University of California Davis. University of california davis home page.
http://www.ucdavis.edu/,
Disponible en
2006.
[265] CSO. Computer Security Ocer.
http://www.csoonline.com,
2005 e-crime watch survey.
Disponible
en
2005.
[266] Lauritzen S. y Jensen F. Olesen K. ahugin: A system creating adaptive causal probabilistic
networks.
Dubois et al. Eds, Pag. 223-229,
1992.
[267] United Nations. United Nations Conference on Trade and Development. E-commerce and
development report 2002. 2002.
[268] United Nations. United Nations Conference on Trade and Development. E-commerce and
development report 2004. 2004.
[269] A. One. Smashing the stack for fun and prot.
Phrack, 7(49):14,
[270] William Osser. Auditing in the solaris8 operating environment.
402
1996.
Sun BluePrints,
2002.
[271] Inella P. The evolution of intrusion detection systems.
http://www.securityfocus.com/infocus/1514,
2001. Security Focus. Disponible en
2001.
[272] Proctor P. Computer misuse detection system (cmds) concepts.
International Corporation (SAIC), Technical Paper,
Science Applications
1996.
[273] Wellman M. P. Fundamental concepts of qualitative probabilistic networks.
Intelligence, 44:257 303,
1990.
[274] Wellman M. P. Graphical inference in qualitative probabilistic networks.
701,
Articial
Networks, 20:687
1990.
[275] Winston P. Articial intelligence.
ción, ISBN 0201533774,
Addison Wesley, Reading, Massachusetts, Tercera Edi-
Enero 1992.
[276] K. Fraser S. Hand T. Harris A. Ho R. Neugebauer I. Pratt P. Barham, B. Dragovic and
A. Wareld. Xen and the art of virtualization.
Operating Systems Principles,
In Proceedings of the 2003 Symposium on
October, 2003.
[277] V. Paxson. Bro: A system for detecting network intruders in real-time.
7th USENIX Security Symposium. San Antonio, TX,
In Proceedings of
1998.
[278] Shachter R. D. Peot M.A. Fusion and propagation with multiple observations in belief
networks.
Articial Intelligence, 48:299318,
1991.
[279] J. Picciotto. The desing of an eective auditing subsystem.
Bedford, Massachusetts,
The MITRE Corporation,
1978.
[280] Elo J. y Venter H. Pillai M. An approach to implement a network intrusion detection
system using genetic algorithms.
Proceedings of the 2004 annual research conference of the
South African institute of computer scientists and information technologists on IT research
in developing countries, ACM International Conference Proceedings Series, Vol. 75,
2004.
[281] Uday Joshi Prem Uppuluri and Arnab Ray. Preventing race condition attacks on lesystems.
Dept. of Computer Science University of Missouri at Kansas City, MO, 641 10 -
Dept. of Computer Science State University of New York Stony Brook, NY, 11790,
[282] The Honeynet Project.
Know your enemy: Trend analysis.
http://honeynet.org/papers/kye.html,
2005.
Disponible
en
2004.
[283] The Honeynet Project. To learn tools, tactics and motives involved in computer and
network attacks, and share the lessons learned.
2006.
403
Disponible en http://project.honeynet.org/,
[284] Jeerson Provost. Naive bayes vs rule-learning in classication of email.
Computer Sciences, University of Texas, Austin,
Departmen of
1999.
[285] Xueyao Li Qingbo yin, Rubo Zhang. An new intrusion detection method based on linear
prediction.
2002 Symposium on Applications and the Internet,
2002.
[286] Johnston. S. R. The impact of privacy and data protection legislation on the sharing of
intrusion detection information.
In Proceedings of the 4th International Symposium on
Recent Advances in Intrusión Detection, Lecture Notes in Computer Science,
[287] Shachter R. Probabilistic inference and inuence diagrams.
Pag. 589-604,
[288] Shirey R.
2212, 2001.
Operations Research, No. 36,
1988.
Internet security glossary.
Internet RFC 2828. The Internet Society, Ne-
twork Working Group, GTE/BBN Technologies. Disponible en http://www.ietf.org/rfc/
/rfc2828.txt,
Mayo 2000.
[289] J. Gagnon R. K. Mukkamala and S. Jajodia. Integrating data mining techniques with
intrusion detection.
In V. Atluri and J. Hale, editors, Research Advances in Database and
Information Systems Security, pages 33-46. Kluwer Publishers,
2000.
[290] L. R. Rabiner. A tutorial on hidden markov models and selected applications in speech
recognition.
Proceedings of the IEEE, 77(2).,
1989.
[291] L. R. Rabiner and B. H. Juang. An introduction to hidden markov models.
Magazine, pages 4 to 16, Jannuary.,
IEEE ASSP
1986.
[292] RaiSe. Lkm rootkits en linux x86 v2.6.
enye-sec,
2005.
[293] Jan Vitek Rajeev Gopalakrishna, Eugene H. Spaord. Ecient intrusion detection using
automaton inlining.
Center for Education and Research in Information Assurance and
Security. Department of Computer Sciences. Purdue University,
May, 2005.
[294] Stolarchuk M. Sienkiewicz M. Lambeth A. y Wall E. Ranum M., Landeld K. Implementing
a generalized tool for network monitoring.
Conference, San Diego, California, USA,
Proceedings of the 11th Systems Administration
Octubre 1997.
[295] Red.es. Entidad pública empresarial red.es.
Disponible en http://red.es/,
2006.
[296] Cordis. Community Research and Development Information Service. Information society
technologies.
Disponible en http://www.cordis.lu/fp6/ist.htm,
2006.
[297] NATO Research and Technology Organisation. Intrusion detection: Generics and state-ofthe-art.
Technical Report 49,
2002.
404
[298] John Muray Reuter.
Inside Windows CE.
Microsoft Press, 1998.
[299] Culbert C. Donell B. Ly B. Ortiz C. Giarrantano J. y López F. Riley G., Savely R. Clips:
A tool for building expert systems.
Disponible en http://www.ghg.net/clips/CLIPS.html,
2005.
[300] Little R.J.A. and Rubin D.B. Statistical analysis with missing data.
York,
J. Wiley & Sons, New
1987.
[301] D.B. Rubin. Multiple imputation for nonresponse in surveys.
Sons, Inc.,
New York: John Wiley &
1987.
[302] Koller D. y Kanazawa K. Russellm S., Binder J. Local learning in probabilistic networks
with hidden variables.
In Proceedings of the Fourteenth International Joint Conference
on Articial Intelligence, Montreal, QU, pages 1146-1152. Morgan Kaufmann, San Mateo,
CA,
1995.
[303] Gould S. The structure of evolutionary theory.
0674006135,
Belknap Press, Primera edición, ISBN
Marzo 2002.
[304] Kumar S. Classication and detection of computer intrusions.
degree of Doctor of Philosophy, Purdue University, USA,
Thesis submitted for the
Agosto 1995.
[305] Scott S. A bayesian paradigm for designing intrusion detection systems.
Computational
Statistics and Data Analysis, Elsevier Science, Vol. 45, Issue. 1, Pag. 69-83,
[306] Smaha S. Haystack: An intrusion detection system.
Febrero 2004.
Proceedings of the 4th Aerospace
Computer Security Applications Conference, Orlando, FL,
Diciembre 1988.
[307] Smaha S. Y Snapp S. Method and system for detecting intrusion into and misuse of a data
processing system.
US 555742, US Patent Oce,
Septiembre 1996.
[308] Stolcke A. Y Omohundro S. Inducing probabilistic grammars by bayesian model merging.
Proceedings of the 1994 International Conference on Grammatical Inference, Pag. 999,
1994.
[309] S. Forrest S. A. Hofmeyr and A. Somayaji. Intrusion detecction using sequences of system
calls.
Journal of Computer Security, 6:151 to 180.,
1998.
[310] L. Allen R. Cherukuri S. Forrest, A.S. Perelson. Self-nonself discrimination in a computer.
IEEE Symposium on Security and Privacy,
1994.
[311] S.W. Boyd S. Sidiroglou, M.E. Locasto and A.D. Keromytis. Building a reactive immune
system for software services.
pages 149 - 161,
In Proceedings of USENIX Annual Technical Conference,
April, 2005.
405
[312] G. Varghese S. Singh, C.Estan and S. Savage. Automated worm ngerprinting.
In Procee-
dings of the 6th ACM/USENIX Symposium on Operating System Design and Implementation (OSDI),
December, 2004.
[313] Pablo Garaizar Sagarminaga. Linux 2.6 kernel hacking.
hackAndalus,
2004.
[314] Barbery F. Salido M.A. Stochastic local search for distributed constraint satisfaction
problems.
Universidad de Alicante, Universidad de Valencia,
[315] Querty Sandman. Pe infection under w32.
29a ezine,
2003.
1996.
[316] J.L. Schafer. Analysis of incomplete multivariate data.
New York: Chapman and Hall,
1997.
[317] Hanna M. Y Whitehurst R. Sebring M., Shellhouse E. Expert systems in intrusion detection, a case study.
Baltimore, USA,
Proceedings of the 11th National Computer Security Conference,
1988.
[318] Abdallah Abbey Sebyala, Temitope Olukemi, and Dr. Lionel Sacks. Active platform security through intrusion detection using naïve bayesian network for anomaly detection.
Departament of Electronic and Electrical Engineering, University Colleage London, Torrington Place, England, UK.,
2002.
[319] R. Sekar, M. Bendre, P. Bollineni, and D. Dhurjati. A fast automaton-based method for
detecting anomalous program behaviors.
144 to 155.,
IEEE Symposium on Security and Privacy, pages
2001.
[320] Pierce L. Y Matzner S. Sinclair C. An application of machine learning to network intrusion.
Proccedings of the 15th Annual Computer Security Applications Conference (ACSAC), Pag.
371,
1999.
[321] A. Smirnov and T. Chiueh. Dira: Automatic detection, identication, and repair of controlhijacking attacks.
In Proceedings of The 12th Annual Network and Distributed System
Security Symposium (NDSS '05),
February, 2005.
[322] Dias G. Goan T. Heberlein T. Ho C. Levitt K. Mukherjee B. Smaha S. Grance T. Teal D.
Y Mansur D. Snapp S., Brentano J. DIDS (distributed intrusion detection system) - motivation, architecture, and an early prototype.
Security Conference, Washington, DC,
Proceedings of the 14th National Computer
Octubre 1991.
[323] Snort. Snort: The facto standard for intrusion Detection/Prevention home page.
en http://www.snort.org/,
Disponible
2006.
[324] Panda Software. Protection against viruses, spyware, hackers, spam and other internet
threats.
Disponible en http://www.pandasoftware.com/,
406
2006.
[325] Hofmeyr S. Y Forrest S. Somayaji A. Principles of a computer immune system.
Proceedings
of the 1997 Meeting on New Security Paradigms, Pag. 75-82, Langdale, UK,
Septiembre
1997.
[326] Glymour C. Y Scheines R. Spirtes P. Causation, prediction and search.
MIT Press,
Adaptative Computation and Machine Learning, Segunda Edición, ISBN 0262194406,
[327] SRI. Stanford research institute home page.
Disponible en http://ww.sri.com/,
2000.
2006.
[328] A. Srivastava and A. Eustace. Atom - a system for building customized program analysis
tools.
In Proceesings of the Symposium on Programming Language Design and Implemen-
tation, pages 196 to 205, Orlando, FL.,
1994.
[329] R. Stallman. The free software foundation home page.
Disponible en http://www.fsf.org/,
2006.
[330] Cheung R. Crawford R. Dilger M. Frank J. Hoagland J. Levitt K. Wee C. Yip R. Y Zerkle D.
Staniford-Chen S., Chen S. GrIDS - a graph-based intrusion detection system for large
networks.
Proceedings of the 19th National Information Systems Security Conference,
1996.
[331] Hoagland J. Y Mc Alerney J. Staniford-Chen S. Practical automated detection of stealthy
portscans.
Proceedings of the 7th ACM Conference on Computer and Communications
Security, Atenas, Grecia,
2000.
[332] Paxson V. Y Weaver N. Staniford-Chen S., Moore D. The top speed of ash worms.
Proceedings of the ACM Workshop on Rapid Malcode (WORM),
2004.
[333] European Statistical Data Support. Internet usage by individuals and enterprises 2004.
Disponible en http://www.europa.eu.int/comm/eurostat/,
2005.
[334] Internet Security Systems. The evolution of intrusion detection technology.
White Paper,
Agosto 2001.
[335] Internet Security Systems.
http://www.iss.net/,
Real secure server sensor home page.
Disponible en
2006.
[336] Goeldenitz T. Ids today and tomorrow.
Room,
ISS Technical
SANS Institute Information Security Reading
Enero 2002.
[337] Holland T. Understanding ips and ids: Using ips and ids together for defense in depth.
SANS Institute Information Security Reading Room,
[338] Kohonen T. Self-organizing maps.
Febrero 2004.
Springer-Verlag, Berlin,
407
1997.
[339] Lane T. Machine learning techniques for the computer security domain of anomaly detection.
Thesis submitted for the degree of Doctor of Philosophy, Purdue University, USA,
Agosto 2000.
[340] Toth T. Improving intrusion detection systems.
Dissertation submitted for the degree of
Doctor of Philosophy, University of Vienna, Austria,
2003.
[341] Wickham T. Intrusion detection is dead. long live to intrusion prevention!
Information Security GIAC Certication Practical, version GSEC 1.4b,
Abril 2003.
[342] Wickman T. Intrusion detection is dead. long live to intrusion prevention!
Information Security GIAC Certication Practical,
SANS Institute
SANS Institute
2003.
[343] C.E. Brodley T. Lane. Sequence matching and learning in anomaly detection for computer
security. AAAI Workshop: AI Approaches to Fraud Detection and Risk Management, pp.4949,
1997.
[344] C.E. Brodley T. Lane. Temporal sequence learning and data reduction for anomaly detection.
ACM Trans. Information and System Security, vol. 2, no. 3, pp. 295-331,
1999.
[345] D. Lee A. Wolman W. Wong H. Levy T. Romer, G. Voelker and B. Bershad. Instrumentation and optimization of win32/intel executables using etch.
Workshop, Seattle, WA.,
In USENIX Windows NT
1997.
[346] K. Tan and R. Maxion. Why 6?? dening the operational limits of stide, an anomaly
based intrusion detector.
Oakland, CA. 188-202,
In Proceedings of the IEEE Symposium on Security and Privacy.
2002.
[347] K. Tan and R. Maxion. Determining the operational limits of an anomaly-based intrusion
detector.
IEEE Journal on selected areas in communications, 21(1):96?110.,
Jan. 2003.
[348] K. Tan, J. Mchugh, and K. Killourhy. Hiding intrusions: From the abnormal to the normal
and beyond.
In Proceedings of Information Hiding,
pages 117, 2002.
[349] Steinbach M. Y Kumar V. Tan P. Introduction to data mining.
Edición, ISBN 0321321367,
Addison Wesley, Primera
Mayo 2005.
[350] M.A. Tanner and W.H. Wong. The calculation of posterior distributions by data augmentation.
Journal of the American Statistical Association, 82: 528-549,
1987.
[351] CERT/In Indian Computer Emergency Response Team. Ids - intrusion detection system.
CERT/In Security Guideline CISG-2003-06,
2003.
[352] Security Telecommunications and Information Systems Security Committee. National information systems security glossary. 2000.
408
[353] Chen K. Y Lu S. Teng H. Adaptative real-time anomaly detection using inductively generated sequential patterns.
Proceedings of the 1990 IEEE Symposium on Research in Security
and Privacy, Oakland, USA,
Mayo 1990.
[354] D. Thain and M. Livny. Multiple bypass: Interposition agents for distributed computing.
Journal of Cluster Computing, 4(1):39 to 47.,
March 2001.
[355] B Thiesson. Accelerated quantication of bayesian networks with incomplete data.
In
Proceedings of First International Conference on Knowledge Discovery and Data Mining,
Montreal, QU, pages 306-311. Morgan Kaufmann,
[356] T.Hurman. Exploring windows ce shellcode.
[357] Open Source Tripwire.
1995.
Pentest,
2005.
Open source tripwire home page.
http://sourceforge.net/projects/tripwire/,
Disponible
en
2006.
[358] Lindqvist U. On the fundamentals of analysis and detection of computer misuse.
Thesis for
the degree of Doctor of Philosophy, Chalmers University of Technology. Göteborg, Suecia,
1999.
[359] International Telecommunication Union. Internet indicators: Hosts, users and number of
pcs.
Disponible en http://www.itu.int/ITU-D/ict/statistics/,
[360] Stanford University. Stanford encyclopedia of philosophy.
2005.
Consulta del término "Bayes'
Theorem". Disponible en http://plato.stanford.edu/entries/bayes-theorem/,
[361] Stanford University. Stanford encyclopedia of philosophy.
Consulta del término "Boolean
Algebra". Disponible en http://plato.stanford.edu/entries/boolalg-math/,
[362] USAF. United states air force home page.
2006.
2006.
Disponible en http://www.af.mil/,
2006.
[363] USSS. United states secret service home page. Disponible en http://www.secretservice.gov/,
2006.
[364] Mahoney M. V. and Chan P.K. Learning rules for anomaly detection of hostile network
trac. 2001.
[365] Vapnik V. The nature of statistical learning theory.
Springer-Verlag, ISBN 0387945598,
1995.
[366] Amit Vasudevan and Ramesh Yerraballi. Spike: Engineering malware analysis tools using
unobtrusive binary-instrumentation.
Department of Computer Science and Engineering.
University of Texas at Arlington, Box 19015, 416 Yates St., 300 Nedderman Hall, Arlington, TX 76019-0015, USA. Box 19015, 416 Yates St., 300 Nedderman Hall, Arlington, TX
76019-0015, USA.,
January, 2006.
409
[367] Eckman S. Y Kemmerer R. Vigna G. The STAT tool suite.
IEEE Press, Hilton Head, South Carolina,
Proceedings of DISCEX 2000,
Enero 2000.
[368] Li W. Using genetic algorithm for network intrusion detection.
Proceedings of the United
States Department of Energy Cyber Security Group 2004 Training Conference, Kansas
City, USA,
Mayo 2004.
[369] K. Mok W. Lee, S.J. Stolfo. A data mining framework for building intrusion detection
models.
IEEE Symposium on Security and Privacy,
1999.
[370] S. Stolfo W. Lee and K. Mok. Adaptive intrusion detection: A data mining approach.
Articial Intelligence Review,
December, 2000.
[371] D. Wagner and D. Dean. Intrusion detection via static analysis.
In Proceedings of the
IEEE Symposium on Security and Privacy. IEEE Press, Oakland, CA.,
2001.
[372] D. Wagner and P. Soto. Mimicry attacks on host-based intrusion detection systems.
In
Proceedings of the 9th ACM Conference on Computer and Communications Security. Washington DC. 255-264,
2002.
[373] Wagner T. Y Wolstenholme P. Wagner F., Schmuki R. Modelling software with nite state
machines: A practical approach.
Auerbach Publications, ISBN 0849380863,
Mayo 2006.
[374] Forrest S. Warrender, C. and B. Pearlmutter. Detecting intrusions using system calls:
Alternative data models.
In Proceedings of the IEEE Symposium on Security and Privacy.,
1999.
[375] Stephanie Forrest Warrender, Christina and Barak Pearlmutter. Detecting intrusions using
system calls: Alternative data models.
IEEE Synposium on security and privacy,
1999.
[376] Mahoney M. y Chan P. Phad: Packet header anomaly detection for identifying hostile
network trac.
Florida Tech. Techical Report,
Abril 2001.
[377] Gómez J. y Dasgupta D. Evolving fuzzy classiers for intrusion detection.
Proceedings
of the 2002 IEEE Workshop on Information Assurance, United States Military Academy,
West Point, Ney York, USA,
Junio 2001.
[378] Hou H. y Dozier G. Immunity-based intrusion detection system design, vulnerability analysis, and genertia's genetic arms race.
Proceedings of the 2005 ACM Symposium on Applied
Computing, Pag. 952-956, Santa Fe, New Mexico, USA,
2005.
[379] Lundin E. y Jonsson E. Setting the scene for intrusion detection.
Technical Report 04-
05. Department of Computer Engineering, Chalmers University of Technology. Göteborg,
Suecia,
Agosto 2004.
410
[380] Kantzavelou I. y Katsikas S. An attack detection system for secure computer systems outline of the solution.
Proceedings of the IFIP TC11 13th International Conference on
Information Security, Copenhagen, Dinamarca,
Mayo 1997.
[381] Porras P. y Kemmerer R. Penetration state transition analysis - a rule-based intrusion
detection approach.
Eighth Annual Computer Security Applications Conference, Pag. 220-
229, IEEE Computer Society Press,
Diciembre 1992.
[382] Ryan J. y Lin M. Intrusion detection with neural networks. Advances in Neural Information
Processing Systems, No. 10, MIT Press, Cambridge, Massachusetts, USA,
[383] Garvey T. y Lunt T. Model based intrusion detection.
Computer Security Conference, Pag. 372-385,
1998.
Proceedings of the 14th National
Octubre 1991.
[384] Porras P. y Neumann P. Emerald: Event monitoring enabling responses to anomalous live
disturbances.
Proceddings of the 20th NIST-NCSC National Information Systems Security
Conference, Pag. 353-365,
1997.
[385] Ptacek T. y Newsham T. Insertion, evasion and denial of service: Eluding intrusion detection.
Technical Report, Secure Networks Incorporated,
Enero 1998.
[386] Russell S. y Norvig P. Articial intelligence: A modern approach.
Hall, ISBN 0137903952,
Second Edition, Prentice
Diciembre 2002.
[387] Giarratano J. y Riley G. Expert systems: Principles and programming.
Cuarta Edicion, ISBN 0534384471,
Course Technology,
Octubre 2005.
[388] Jones A. y Sielken R. Computer system intrusion detection: A survey.
Computer Science Department, University of Virginia,
Technical Report,
2000.
[389] Kim G. y Spaord E. The design and implementation of tripwire: A le system integrity
checker.
ACM Conference on Computer and Communications Security, Pag. 18-29,
1994.
[390] Kumar S. y Spaord E. An application of pattern matching in intrusion detection. Technical
Report 94-013, Department of Computer Science, Purdue University,
Marzo 1994.
[391] Kumar S. y Spaord E. A pattern matching model for misuse intrusion detection.
dings of the 7th National Computer Security Conference, Baltimore, USA,
Procee-
Octubre 1994.
[392] Lauritzen S. y Spiegelhalter D. Local computations with probabilities on graphical structures and their application to expert systems.
Journal of the Royal Statistical Society, Series
B (Methodological), No. 50, Vol. 2, Pag. 157-224,
1988.
[393] Lee W. y Stolfo S. Data mining approaches for intrusion detection.
USENIX security symposium, Pag. 79-93, San Antonio, USA,
411
Proceedings of the 7th
Enero 1998.
[394] Mukkamala S. y Sung A. A comparative study of techniques for intrusion detection.
Proceedings of the 15th IEEE International Conference on Tools with Articial Intelligence
(ICTAI), Pag. 570,
2003.
[395] Liepins G. y Vaccaro H. Intrusion detection: Its role and validation.
Computers and
Security, Vol. 11, Pag. 347-355, Elsevier Science Publishers Limited, Oxford, UK,
[396] Javitz H. y Valdés A. The sri ides statistical anomaly detector.
IEEE Symposium on Research in Security and Privacy,
Proceedings of the 1991
Mayo 1991.
[397] Pearl J. y Verma T. A statistical semantics for causation.
2, Pag. 91-95,
1992.
Statistics and Computing, Vol.
1992.
[398] Kemmerer R. y Vigna G. Intrusion detection: A brief history and overview.
Reliable
Software Group, Computer Science Department, University of California Santa Barbara,
2002.
[399] Meyer T. y Whateley B. Spambayes: Eective open-source, bayesian based, email classication system.
Proceedings of the 2004 Conference on Email and Anti-Spam (CEAS),
Mountain View, California, USA,
Julio 2004.
[400] Yang C. Yuan. Multiple imputation for missing data: Concepts and new development.
Institute Inc., Rockville, MD,
SAS
1997.
[401] Jingyu Zhou and Giovanni Vigna. Detecting attacks that exploit application-logic errors
through application-level auditing.
University of California Santa Barbara, USA,
2004.
[402] Amitabha Das Zhuowei Li. Visualizing and identifying intrusion context from system
calls trace.
Proceedings of the 20th Annual Computer Security Applications Conference
(ACSAC'04), IEEE Computer Society,
December 2004.
412
Descargar