Jpcozar TFM0620 Memoria
Jpcozar TFM0620 Memoria
Jpcozar TFM0620 Memoria
IMPLEMENTACIÓN DE WAZUH
EN UNA ORGANIZACIÓN PÚBLICA
Junio 2020
Esta obra está sujeta a una licencia de Reconocimiento-NoComercial-SinObraDerivada 3.0
España (CC BY-NC-ND 3.0 ES) de Creative Commons
AGRADECIMIENTOS
A Rosa, por el apoyo, la paciencia y el tiempo dedicado a la familia mientras realizaba este
trabajo en particular y el Máster en general.
A Pau del Canto Rodrigo, director del TFM, por sus consejos y guía durante su desarrollo.
A Juan Luis Garrido Castro, por los consejos aportados y por permitirme realizar este
trabajo en la organización.
Resumen del trabajo (máximo 250 palabras): Con la finalidad, contexto de aplicación,
metodología, resultados y conclusiones del trabajo
Data have turned into the most valuable resource in the world and we must make an effort
to protect them, improving our cyber attack detection capabilities. SIEMs can help us to
achieve it so they can become very important tools to secure and protect enterprise assets
and network traffic.
In this Master’s thesis we have deployed the Wazuh and ELK Stack architecture in our
organization, allowing us to protect it in a multidisciplinary way: corrective (through
vulnerability detection), preventive (through server hardening), reactive (through active
response mechanisms which are triggered when alerts are generated) and customized
(being able of monitoring agentless devices and creating our own rules and decoders).
We have discovered a very complete open source solution. Due to the fact that our organi-
zation is a public administration, it will help us to accomplish with the National Security
Framework (ENS), which is mandatory since the year 2010.
Í NDICE
Glosario XV
1 Introducción 1
1.1 Contexto y justificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1 Objetivos generales . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.2 Objetivos específicos . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Metodología . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Planificación: fases y tareas . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5 Recursos software y hardware . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5.1 Recursos software . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5.2 Recursos hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.6 Estado del arte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.7 Estructura del documento . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2 Investigación y Análisis 9
2.1 Estudio y análisis general de los SIEM . . . . . . . . . . . . . . . . . . . . 9
2.1.1 Definición de un SIEM . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.2 Definición de un IDS . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.3 Arquitectura general de un SIEM . . . . . . . . . . . . . . . . . . 10
2.2 Necesidad de un SIEM en la empresa . . . . . . . . . . . . . . . . . . . . . 11
2.3 Requisitos del SIEM a implantar . . . . . . . . . . . . . . . . . . . . . . . 12
2.4 Elección del SIEM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5 Análisis del SIEM elegido: Wazuh + Elk Stack . . . . . . . . . . . . . . . 16
2.5.1 Capacidades de Wazuh . . . . . . . . . . . . . . . . . . . . . . . . 16
2.5.2 Componentes de Wazuh . . . . . . . . . . . . . . . . . . . . . . . . 17
2.5.3 Arquitectura de Wazuh . . . . . . . . . . . . . . . . . . . . . . . . 18
4 Instalación 29
4.1 Instalación en pruebas del SIEM . . . . . . . . . . . . . . . . . . . . . . . 29
4.1.1 Instalación de Wazuh Server . . . . . . . . . . . . . . . . . . . . . 29
4.1.2 Instalación del servidor ELK Stack . . . . . . . . . . . . . . . . . 30
4.1.3 Actualización de la versión de Wazuh y de ELK . . . . . . . . . . . 30
4.1.4 Problemas de seguridad en una instalación por defecto . . . . . . . 30
4.2 Instalación en producción del SIEM securizado . . . . . . . . . . . . . . . . 31
4.2.1 Securizar la API de Wazuh . . . . . . . . . . . . . . . . . . . . . . . 31
4.2.2 Securizar Elastic Stack . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2.3 Autenticación para Elastic Stack . . . . . . . . . . . . . . . . . . . 36
4.3 Monitorización de los servidores Wazuh en Nagios . . . . . . . . . . . . . 39
5 Despliegue 41
5.1 Despliegue automático de agentes . . . . . . . . . . . . . . . . . . . . . . . 41
5.2 Despliegue automático en sistemas Linux . . . . . . . . . . . . . . . . . . . 41
5.3 Despliegue automático en sistemas Windows . . . . . . . . . . . . . . . . 45
5.3.1 Despliegue del agente Wazuh por GPO . . . . . . . . . . . . . . . 45
5.4 Creación de grupos en Wazuh . . . . . . . . . . . . . . . . . . . . . . . . 45
6 Casos de uso 47
6.1 File Integrity Monitoring: FIM . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.2 Auditoría mediante who-data . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.2.1 Auditoría who-data en Linux . . . . . . . . . . . . . . . . . . . . . 50
6.2.2 Auditoría who-data en Windows . . . . . . . . . . . . . . . . . . . 52
6.3 Detección de vulnerabilidades . . . . . . . . . . . . . . . . . . . . . . . . 54
6.3.1 Detección de vulnerabilidades en servidores Ubuntu . . . . . . . . 54
6.3.2 Detección de vulnerabilidades en servidores Windows . . . . . . . 56
6.4 Configuración centralizada . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.5 Integración con VirusTotal . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.5.1 Usar FIM para monitorizar un directorio . . . . . . . . . . . . . . . 60
6.6 Monitorización sin agente (agentless) . . . . . . . . . . . . . . . . . . . . 62
6.6.1 Creación del decoder . . . . . . . . . . . . . . . . . . . . . . . . . 63
6.6.2 Creación de reglas: atomic y composite rules . . . . . . . . . . . . 64
6.7 Active Response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
6.7.1 Detección del ataque . . . . . . . . . . . . . . . . . . . . . . . . . 68
6.7.2 Definición del comando . . . . . . . . . . . . . . . . . . . . . . . 68
6.7.3 Definir la respuesta activa . . . . . . . . . . . . . . . . . . . . . . 69
6.7.4 Generar una alerta cuando se dispara una respuesta activa . . . . . . 69
6.8 Bastionado de servidores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.8.1 Monitorización de políticas de seguridad con SCA . . . . . . . . . . 71
6.9 Notificaciones de alertas y generación de informes . . . . . . . . . . . . . 75
6.9.1 Notificación de alertas . . . . . . . . . . . . . . . . . . . . . . . . 75
6.9.2 Envío de informes diarios . . . . . . . . . . . . . . . . . . . . . . 76
VI
ÍNDICE
7 Conclusiones y mejoras 81
7.1 Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7.2 Mejoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Bibliografía 85
Libros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Artículos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Recursos web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Apéndices
Apéndice A Hyper-V A-1
A.1 Creación de switch virtual en Hyper-V . . . . . . . . . . . . . . . . . . . . . A-1
A.2 Creación de máquinas virtuales . . . . . . . . . . . . . . . . . . . . . . . . A-2
A.2.1 Servidor Wazuh en pruebas . . . . . . . . . . . . . . . . . . . . . A-2
A.2.2 Servidor Wazuh en producción . . . . . . . . . . . . . . . . . . . . A-3
A.2.3 Servidor ELK Stack en pruebas . . . . . . . . . . . . . . . . . . . A-3
A.2.4 Servidor ELK Stack en producción . . . . . . . . . . . . . . . . . A-3
A.3 Clúster de conmutación por error: alta disponibilidad . . . . . . . . . . . . A-4
VII
ÍNDICE
VIII
Í NDICE DE FIGURAS
X
Í NDICE DE TABLAS
HA High Availability 19
HIDS Host Intrusion Detection System 10, 17
XIV
G LOSARIO
Docker Compose Compose es una herramienta para definir y ejecutar aplicaciones Docker
de múltiples contenedores. 24
Docker Desktop es una aplicación para MacOS y Windows para construir y compartir
aplicaciones en contenedores y microservicios. 24
Docker Toolbox es una solución obsoleta para utilizar Docker en sistemas Mac y Windows
antiguos que no cumplen los requisitos de Docker Desktop. 24
endpoint es un dispositivo informático remoto que se comunica con una red a la que está
conectado. Por ejemplo: ordenadores de escritorio, portátiles, teléfonos móviles, tablets,
servidores, estaciones de trabajo, etc. . . 26, 41
Incoming Webhook es una manera sencilla de enviar mensajes desde las aplicaciones a
Slack. Al crear un Incoming Webhook se obtiene una URL única a la que envíar un
payload JSON con el mensaje de texto y algunas opciones. 79
indicador de compromiso Los Indicadores de Compromiso o Indicators of Compromise
(IOCs) hacen referencia a una tecnología estandarizada que consiste en definir las
características técnicas de una amenaza por medio de las evidencias existentes en un
equipo comprometido, de manera que puedan servir para identificar otros ordenadores
afectados por la misma amenaza o prevenirlos de la misma. 17
GLOSARIO
Nginx es un servidor web/proxy inverso ligero de alto rendimiento y un proxy para protocolos
de correo electrónico. 34
snapshot una copia instantánea de volumen o snapshot es una instántanea o foto del estado
de un sistema en un momento determinado 29
X-Pack es una extensión de Elastic Stack que proporciona seguridad, alerta, monitorización,
informes, aprendizaje automático y muchas otras capacidades. 34
XVI
1
I NTRODUCCIÓN
1.2. Objetivos
Podemos distinguir entre objetivos generales y específicos.
2
1.3. Metodología
• Realizar diferentes casos de uso que demuestren los beneficios del sistema: integridad
de ficheros, detección de malware, detección de ataques, etc. . .
• Tener una herramienta de detección de intrusos que nos permita realizar notificaciones a
los usuarios o grupos de usuarios correspondientes cuando se produzca una incidencia.
1.3. Metodología
La metodología que seguiremos en el presente TFM3 será la siguiente:
1. Se establecerá un plan de trabajo realista y ajustado a la planificación preestablecida
por la asignatura.
2. Se analizarán los distintos SIEMs existentes en el mercado y se elegirá el que mejor se
adapte a nuestra organización.
3. Una vez elegido, se diseñará el mejor método de implantación (virtual, físico o mediante
contenedor) y se determinará la arquitectura de red más adecuada.
4. Se instalará dicho sistema en nuestra organización, securizándolo de la mejor manera
posible e intentando obtener el máximo partido de él; primero en un entorno de pruebas
y luego en producción.
5. Una vez implantado, se visualizarán los resultados y los beneficios obtenidos con su
implantación.
6. Se extraerán las conclusiones pertinentes y posibles mejoras que reflejaremos en la
memoria final.
3
CAPÍTULO 1. INTRODUCCIÓN
2.6 Revisión y corrección del Plan de Trabajo por el director 4 04/03/20 07/03/20
5.4 Entrega Fase de Análisis, Diseño e Instalación (PEC2) HITO 31/03/20 31/03/20
4
1.4. Planificación: fases y tareas
6.8 Entrega Fase de Despliegue y Casos de Uso (PEC3) HITO 28/04/20 28/04/20
5
2020
Definición y Planificación Análisis, Diseño e Instalación Despliegue y Casos Uso Memoria Vídeo Defensa
7
CAPÍTULO 1. INTRODUCCIÓN
8
2
I NVESTIGACIÓN Y
A NÁLISIS
Un SIEM es una herramienta que nos permite centralizar la interpretación de los registros
relevantes de seguridad.
Las amenazas que detectan los SIEMs se engloban en algunos de los siguientes grupos:
• Vulnerabilidades
• Protocolos vulnerables
• Fallos de configuración por parte de los administradores
• Introducción de errores por el usuario de forma consciente o no
• Amenazas internas
• Amenazas externas
10
2.2. Necesidad de un SIEM en la empresa
Monitorización de las
Análisis de logs
actividades del usuario
Tableros visualización
Correlación de logs
(Dashboards)
11
CAPÍTULO 2. INVESTIGACIÓN Y ANÁLISIS
1. Marco organizativo
2. Marco operacional
3. Medidas de protección.
Dentro del marco operacional, que son las medidas a tomar para proteger la operación del
sistema como un conjunto integral de componentes, se encuentra la Monitorización del
Sistema. En dicho apartado se nos indica que para sistemas de categoría media y alta, se
dispondrán de herramientas de detección o de prevención de intrusión. Por lo tanto, la
implementación de dicho sistema, nos ayudará a cumplir con el ENS.
Por otra parte, y centrándonos en nuestra organización, la obligatoriedad del cumplimiento
del ENS implica la necesidad de que el organismo tenga una política de seguridad estable-
cida; lo cual fue plasmado en el Decreto 1/2011 de 11 de Enero del BOJA3 por el que se
establece la política de seguridad de las tecnologías de la información y comunicaciones en
la Administración de la Junta de Andalucía. En dicho decreto se indica que cada entidad
deberá establecer su propia política de seguridad. Es en octubre del 2019 cuando se aprueba
la política de seguridad de la información de la Consejería en la Orden de 21 de Octubre
de 2019, BOJA nº 211 de 31/10/2019. Concretamente y relacionado con la temática de este
trabajo se indica en el artículo 25, apartado 2:
2. Dado que los servicios pueden degradarse rápidamente debido a incidentes, aquellos deben
estar sometidos a monitorización de manera continua para detectar anomalías en sus niveles de
prestación y así poder actuar con celeridad.
Por lo tanto, es evidente que la monitorización de sistemas y la implementación de un SIEM
(que englobe a un sistema de detección y prevención de intrusos) es una necesidad en nuestra
organización.
12
2.4. Elección del SIEM
Dichos SIEM no cumplen los dos requisitos fundamentales de la sección 2.3: que sean
software libre (open source) y que no tengan coste asociado, por lo que se desestiman.
Hemos considerado los siguientes SIEM open source:
1. AlienVault OSSIM
2. Apache Metron (anteriormente OpenSOC de Cisco)
13
CAPÍTULO 2. INVESTIGACIÓN Y ANÁLISIS
3. MozDef
4. Prelude OSS
Los analizamos en las tablas 2.1, 2.2, 2.3, 2.4, 2.5 y 2.6.
AlientVault OSSIM
Ventajas Desventajas
Construido sobre proyectos open source probados Falta de muchas características de versión de pago
Gran comunidad de usuarios y desarrolladores No soporta plataformas en la nube como AWS/Azure
Sin gestión de logs, visualizaciones, automatización
o integraciones con terceros
Arquitectura de servidor centralizado
Problemas en el escalado
Apache Metron
Ventajas Desventajas
Construido sobre proyectos open source probados Versión limitada: 100 Endpoints y 2 informes
Falta documentación online
Interfaces poco homogéneas
14
2.4. Elección del SIEM
Prelude OSS
Ventajas Desventajas
Probado en el tiempo: desarrollado desde 1998 Mucho más limitado que otras soluciones open sour-
ce en cuanto a rendimiento, características y escala-
bilidad
Soporta un amplio rango de formatos de logs Destinado a pruebas, evaluaciones y pequeños es-
cenarios
Normaliza datos al formato IDMEF 1 (útil para inter-
cambio con otros IDS)
1
Intrusion Detection Message Exchange Format
MozDef
Ventajas Desventajas
Sin agente: logs JSON como entrada Nuevo y menos estable que otras soluciones
Fácil escalado basado en el volumen de eventos Sólo instalable via docker o en CentOS 7
Soporta orígenes de datos basados en la nube Configuración y aprendizaje de uso elevados
(AWS CloudTrail y GuardDuty)
Desarrollado por Mozilla, de confianza en el mundo
open source
Wazuh
Ventajas Desventajas
Basado y compatible con OSSEC Requiere un despliegue de ELK Stack además del
servidor Wazuh
Soporta despliegues Docker, Puppet, Chef y Ansible
Soporta monitorización infraestructura en la nube
(de pago) (AWS y Azure)
Conjunto de reglas que detecta muchos tipos de
ataques comunes
Cumplimiento con PCI DSS v3.1 y CIS
Detección de vulnerabilidades
Arquitectura centralizada o distribuida
Excelente documentación online actualizada
15
CAPÍTULO 2. INVESTIGACIÓN Y ANÁLISIS
16
2.5. Análisis del SIEM elegido: Wazuh + Elk Stack
guías de bastionado. Los agentes llevan a cabo escaneos periódicos para detectar las
aplicaciones que se conoce que son vulnerables, no parcheadas o configuradas de
forma insegura. Además, los chequeos pueden personalizarse y hacerse a medida para
adecuarse a nuestra organización.
Respuesta a incidentes Wazuh proporciona una seria de respuestas ya preparadas para usar,
que llevan a cabo contramedidas que gestionan amenazas activas, tales como bloquear
el acceso a un sistema del origen de la amenaza cuando se cumple cierto criterio.
Además, Wazuh puede usarse para ejecutar comandos remotamente o consultas al
sistema, identificando indicadores de compromiso (IOCs) y ayudando a otras actividades
forenses o tareas de respuesta a incidentes.
Wazuh es una solución integral que consta de tres componentes principales: OSSEC HIDS,
OpenSCAP y Elastic Stack.
OSSEC HIDS es un sistema de detección de intrusos HIDS que se usa para la detección,
visibilidad y monitorización del cumplimiento de eventos de seguridad. Está basado en un
agente multiplataforma que envía datos del sistema (mensajes de logs, hashes de ficheros,
anomalías detectadas) a un gestor central, donde posteriormente se analiza y procesa, dando
como resultado las alertas de seguridad. Los agentes envían su información a través de canales
seguros y autenticados.
5
Guía 13 de Buenas Prácticas
6
Reglamento General de Protección de Datos
17
CAPÍTULO 2. INVESTIGACIÓN Y ANÁLISIS
2.5.2.2. OpenSCAP
OpenSCAP es un intérprete de OVAL7 y XCCDF8 que se usa para chequear las configura-
ciones del sistema y para detectar aplicaciones vulnerables. Es una herramienta diseñada
para chequear el cumplimiento de seguridad y el bastionado de los sistemas al usar guías de
seguridad estándar en la industria para entornos empresariales.
Elastic Stack es un conjunto de software (Filebeat, Elasticsearch, Kibana) que se usa para
recolectar, comparar, indexar, almacenar, buscar y presentar datos de logs. Proporciona un
entorno web que da una vista a un alto nivel mediante paneles de control (dashboards) de los
eventos que nos permite realizar análisis avanzados y minería de datos.
18
2.5. Análisis del SIEM elegido: Wazuh + Elk Stack
9
High Availability
19
CAPÍTULO 2. INVESTIGACIÓN Y ANÁLISIS
20
3
D ISEÑO Y TOMA DE
DECISIONES
1
Virtual Private Network
2
Remote Desktop Protocol
Acceso remoto por RCJA
VPN Red Corporativa Junta de Andalucía Internet
RCJA 0.0.0.0/0
W
Locator
Status LED Act
M ode
Fan FDx
Test * Spd
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Console
Lenovo
HP Switch
2530-48G * Spd M ode: Off = 10 M bps, flash = 100 M bps, on = 1000+ M bps 10/ 100/ 1000Base-T Ports (1 - 48) All RJ-45 Ports (1 - 48) are Auto-M DIX
heartbeat
HP 2530-48G
J9775A
Sw itch
Link 1 M ode 3 5 7 9 11 Link 13 M ode 15 17 19 21 23 Link 25 M ode 27 29 31 33 35 Link 37 M ode 39 41 43 45 47 Link 49 M ode 51
J9775A
Pila Switches
P A
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Console
A P HP Switch
2530-48G
J9775A
HP 2530-48G
Sw itch
J9775A
* Spd M ode:
Link 1 M ode
Off = 10 M bps,
3 5
flash = 100 M bps,
7
on = 1000+ M bps
9 11 Link 13 M ode 15 17 19 21
10/ 100/ 1000Base-T Ports (1 - 48)
23 Link 25 M ode 27 29 31 33
All RJ-45 Ports (1 - 48) are Auto-M DIX
35 Link 37 M ode 39 41 43 45 47 Link 49 M ode 51
CTOX3650M5
Status LED
M ode
Fan FDx
Test * Spd
HP 2530-J9772A
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Console
3250 M6
N
0 1 2 3 4 5 6 7
N
3250 M6
10.66.128.0/23
LAN LAN Acceso
Servidores Hyper-V W2012R2 WAN2
WAN2 WAN1
WAN1
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Console
Switch Core
Servidores Hyper-V Ubuntu14.x/16.x/18.x
HP 2530-J9772A Core 2ª PLANTA HP Switch
2530-48G HP 2530-48G * Spd M ode: Off = 10 M bps, flash = 100 M bps, on = 1000+ M bps 10/ 100/ 1000Base-T Ports (1 - 48) All RJ-45 Ports (1 - 48) are Auto-M DIX
J9775A
Sw itch
Link 1 M ode 3 5 7 9 11 Link 13 M ode 15 17 19 21 23 Link 25 M ode 27 29 31 33 35 Link 37 M ode 39 41 43 45 47 Link 49 M ode 51
J9775A
Pila Switches
Locator
Status LED Act
M ode
Fan FDx
Test * Spd
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Console
HP Switch
2530-48G HP 2530-48G * Spd M ode: Off = 10 M bps, flash = 100 M bps, on = 1000+ M bps 10/ 100/ 1000Base-T Ports (1 - 48) All RJ-45 Ports (1 - 48) are Auto-M DIX
J9775A
Sw itch
Link 1 M ode 3 5 7 9 11 Link 13 M ode 15 17 19 21 23 Link 25 M ode 27 29 31 33 35 Link 37 M ode 39 41 43 45 47 Link 49 M ode 51
J9775A
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Console
HP 2530-J9772A HP Switch
2530-48G
J9775A
HP 2530-48G
Sw itch
J9775A
* Spd M ode:
Link 1 M ode
Off = 10 M bps,
3
flash = 100 M bps,
5 7
on = 1000+ M bps
9 11 Link 13 M ode 15 17 19 21
10/ 100/ 1000Base-T Ports (1 - 48)
23 Link 25 M ode 27 29 31 33
All RJ-45 Ports (1 - 48) are Auto-M DIX
35 Link 37 M ode 39 41 43 45 47 Link 49 M ode 51
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Console
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Console
Virtual 10.66.128.0/23
Cabina
EMC VNX5200
HP Switch
2530-48G
J9775A
HP 2530-48G
Sw itch
J9775A
* Spd M ode:
Link 1 M ode
Off = 10 M bps,
3
flash = 100 M bps,
5 7
on = 1000+ M bps
9 11 Link 13 M ode 15 17 19 21
10/ 100/ 1000Base-T Ports (1 - 48)
23 Link 25 M ode 27 29 31 33
All RJ-45 Ports (1 - 48) are Auto-M DIX
35 Link 37 M ode 39 41 43 45 47 Link 49 M ode 51
Acceso
Use only supported transceivers
Pow er Console
Fault
Locator
Status LED Act
M ode
Fan FDx
Test * Spd
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Pila Switches
Console
HP Switch
2530-48G HP 2530-48G * Spd M ode: Off = 10 M bps, flash = 100 M bps, on = 1000+ M bps 10/ 100/ 1000Base-T Ports (1 - 48) All RJ-45 Ports (1 - 48) are Auto-M DIX
J9775A
Sw itch
Link 1 M ode 3 5 7 9 11 Link 13 M ode 15 17 19 21 23 Link 25 M ode 27 29 31 33 35 Link 37 M ode 39 41 43 45 47 Link 49 M ode 51
J9775A
Use only supported transceivers
Pow er Console
Fault
Locator
Status LED Act
M ode
Fan FDx
Test * Spd
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Console
HP Switch
2530-48G HP 2530-48G * Spd M ode: Off = 10 M bps, flash = 100 M bps, on = 1000+ M bps 10/ 100/ 1000Base-T Ports (1 - 48) All RJ-45 Ports (1 - 48) are Auto-M DIX
J9775A
Sw itch Link 1 M ode 3 5 7 9 11 Link 13 M ode 15 17 19 21 23 Link 25 M ode 27 29 31 33 35 Link 37 M ode 39 41 43 45 47 Link 49 M ode 51
J9775A
Use only supported transceivers
Pow er
HP 2530-J9772A
Console
Fault
Locator
Status LED Act
M ode
Fan FDx
Test * Spd
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Console
10.66.128.0/23
1ª PLANTA
HP Switch
2530-48G HP 2530-48G
J9775A
Sw itch
J9775A
HP Switch
2530-48G HP 2530-48G * Spd M ode: Off = 10 M bps, flash = 100 M bps, on = 1000+ M bps 10/ 100/ 1000Base-T Ports (1 - 48) All RJ-45 Ports (1 - 48) are Auto-M DIX
J9775A
Sw itch
Link 1 M ode 3 5 7 9 11 Link 13 M ode 15 17 19 21 23 Link 25 M ode 27 29 31 33 35 Link 37 M ode 39 41 43 45 47 Link 49 M ode 51
J9775A
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Console
HP Switch
2530-48G HP 2530-48G * Spd M ode: Off = 10 M bps, flash = 100 M bps, on = 1000+ M bps 10/ 100/ 1000Base-T Ports (1 - 48) All RJ-45 Ports (1 - 48) are Auto-M DIX
J9775A
Sw itch Link 1 M ode 3 5 7 9 11 Link 13 M ode 15 17 19 21 23 Link 25 M ode 27 29 31 33 35 Link 37 M ode 39 41 43 45 47 Link 49 M ode 51
J9775A
Pila Switches
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Console
HP 2530-48G
Sw itch
J9775A
HP Switch
2530-48G HP 2530-48G * Spd M ode: Off = 10 M bps, flash = 100 M bps, on = 1000+ M bps 10/ 100/ 1000Base-T Ports (1 - 48) All RJ-45 Ports (1 - 48) are Auto-M DIX
J9775A
Sw itch
Link 1 M ode 3 5 7 9 11 Link 13 M ode 15 17 19 21 23 Link 25 M ode 27 29 31 33 35 Link 37 M ode 39 41 43 45 47 Link 49 M ode 51
J9775A
VLAN-id
Status LED Act
M ode
Fan FDx
Test * Spd
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Console
HP 2530-48G
Sw itch
J9775A
HP Switch
2530-48G HP 2530-48G * Spd M ode: Off = 10 M bps, flash = 100 M bps, on = 1000+ M bps 10/ 100/ 1000Base-T Ports (1 - 48) All RJ-45 Ports (1 - 48) are Auto-M DIX
J9775A
Sw itch
Link 1 M ode 3 5 7 9 11 Link 13 M ode 15 17 19 21 23 Link 25 M ode 27 29 31 33 35 Link 37 M ode 39 41 43 45 47 Link 49 M ode 51
J9775A
HP 2530-J9772A
Datos interna: 20
Test * Spd
Reset Clear Link 2 M ode 4 6 8 10 12 Link 14 M ode 16 18 20 22 24 Link 26 M ode 28 30 32 34 36 Link 38 M ode 40 42 44 46 48 Link 50 M ode 52
Console
Voz: 21
HP Switch
2530-48G
J9775A
PC Windows 7
Servidores
CPD
Físico
Router 10.66.250.1
Windows 2012 R2
HP XW4600
10.66.250.0/24
AULA 3 - INFORMÁTICA
SECRETARÍA Profesor
AULA 1 AULA 2
Profesor Profesor
alumnos
En base a estos esquemas de red, se tomará la decisión de cómo implantar Wazuh en nuestra
organización.
Por otra parte, sería posible utilizar Wazuh con Docker en Windows mediante la tecnología
de Oracle VirtualBox a través de Docker Toolbox, pero se utilizarían versiones antiguas de
VirtualBox (versión 5.2.0) y, realmente estaríamos utilizando una máquina virtual dentro
de VirtualBox. Para eso es más sencillo y eficiente utilizar directamente VirtualBox con la
imagen .ova que tiene preparada Wazuh.
Todo lo anterior hace que desechemos utilizar contenedores Docker ya que nuestra infraestruc-
tura trabaja con servidores Windows 2012 R2 con tecnología Hyper-V para la virtualización,
lo cual no es soportado actualmente por los contenedores Linux en general y de Wazuh en
particular.
24
3.2. Elección de implantación: virtual, física o contenedor
• CentOS 7
• Wazuh 3.11.4
• Wazuh API 3.11.4
• Elasticsearch 7.6.1
• Filebeat 7.6.1
• Kibana 7.6.1
• Wazuh app 3.11.4-7.6.1
Además con las características de máquina virtual indicada en la sección siguiente
(3.2.3.2).
• 4 GB RAM
• RedHat 64 bits
• 4 procesadores
• 16 MB Pantalla RAM
• 40 GB disco duro (dinámico)
b) VMware: Utilizar la versión precompilada de Wazuh para VMware (extensión
.ovf+.vmdk) con el mismo contenido anterior.
c) Hyper-V: No existe imagen precompilada de Wazuh para Hyper-V (extensión
.vhdx) pero existen tutoriales en Internet para convertir imágenes de VMware a
Hyper-V. Es un proceso que no es trivial y dependemos de terceras herramientas
como Microsoft Virtual Machine Converter, dsfok tools y scripts de Powershell.
Hemos tenido que solucionar algunos errores pero ha sido posible importar la
imagen vmdk a un PC de pruebas con Hyper-V siguiendo los enlaces siguientes:
• Convertir VMware a Hyper-V
• Errores al convertir VMware a Hyper-V.
Desechamos las dos primeras opciones porque en nuestra organización no utilizamos ni
la tecnología de VirtualBox ni de VMware, sino que utilizamos Hyper-V.
2. Instalar desde cero Wazuh + ELK Stack en una o varias máquinas virtuales en nuestro
entorno.
25
CAPÍTULO 3. DISEÑO Y TOMA DE DECISIONES
26
3.4. Diseño final de implantación y arquitectura
número de endpoints es de sobra manejado sin necesidad de utilizar el cluster de Wazuh (con
un maestro y varios trabajadores, además de un balanceador). Su utilización es recomendable
y necesaria cuando vamos a desplegar cientos o miles de endpoints, que no es nuestro caso.
En cuanto a la disponibilidad, hay que destacar que el cluster de Wazuh no proporciona
alta disponibilidad, ya que si cae el Master se cae el sistema, como vimos en el apartado
2.5.3.1. Por lo tanto, no es una razón para desplegarlo. En nuestro caso, la alta disponibilidad
quedará cubierta ya que instalaremos las máquinas virtuales en producción en el cluster de
conmutación por error que tenemos desplegado en los servidores Windows 2012 R2, para
que, en el caso de que se caiga uno de los dos nodos físicos (servidores Lenovo), se pasen al
otro las máquinas virtuales y no se caiga el sistema.
27
CAPÍTULO 3. DISEÑO Y TOMA DE DECISIONES
3250 M6
CTOX3650M5 3250 M6
0 1 2 3 4 5 6 7
Virtual
Servidores Hyper-V W2012R2
Agentes Wazuh
Servidores Windows
hacosv01 hacosv02 hacosv03 hacosv04
Servidores Ubuntu
Agentes Wazuh
Kibana Filebeat
28
4
I NSTALACIÓN
En principio para una instalación en pruebas y viendo que la versión de los repositorios está
actualizada y es la misma que si la instalamos desde código fuente, optamos por la primera
opción que es más sencilla y rápida. Dicha instalación está documentada en el anexo C.
3. Se están usando usuarios por defecto (usuario:foo y contraseña: bar) para acceder a la
API de Wazuh.
Debido a que para securizar el sistema tenemos que generar certificados a través de nuestra
CA2 , establecer FQDNs para los servidores en el servidor de nombres, etc. . . , esto ya lo
haremos en producción.
Por otra parte, hemos comprobado que la instalación inicial del servidor Wazuh (Ubuntu+
Wazuh Server) ocupa < 3 GB y la del servidor con ELK Stack ocupa < 8 GB. Dicho espacio
irá creciendo paulatinamente debido a los logs, eventos, etc. . . pero nos da una idea del tamaño
inicial adecuado para las máquinas virtuales. También hemos observado que la máquina de
Elastic consume toda la memoria suministrada y quizás en producción debamos aumentarla.
2
Autoridad Certificadora
30
4.2. Instalación en producción del SIEM securizado
// HTTPS Certificates
config.https_key = "configuration/ssl/wazuh-server.key"
config.https_cert = "configuration/ssl/wazuh-server.crt"
config.https_use_ca = "yes"
config.https_ca = "configuration/ssl/rootCA.pem"
31
CAPÍTULO 4. INSTALACIÓN
Y reiniciamos el servicio:
Ahora nos debemos ir al servidor ELK y decirle al plugin de Wazuh de Kibana que vamos a
usar https en lugar de http. Editamos el fichero: /usr/share/kibana/optimize/wazuh/
config/wazuh.yml y cambiamos a https lo que estaba en http:
hosts:
- default:
url: https://10.x.x.57
port: 55000
user: foo
password: bar
root@wazuh-server:~# cd /var/ossec/api/configuration/auth
root@wazuh-server:/var/ossec/api/configuration/auth# node htpasswd -Bc -C 10 user WazuhCor
New password:
Re-type new password:
Adding password for user WazuhCor.
Luego nos iríamos al servidor ELK y editaríamos el fichero de configuración del plugin de
Wazuh para Kibana, /usr/share/kibana/optimize/wazuh/config/wazuh.yml y pon-
dríamos el usuario WazuhCor y la nueva contraseña:
hosts:
- default:
url: https://10.x.x.57
port: 55000
user: WazuhCor
password: <contraseña>
32
4.2. Instalación en producción del SIEM securizado
hosts:
- default:
url: https://10.x.x.57
port: 55999
user: WazuhCor
password: <contraseña>
33
CAPÍTULO 4. INSTALACIÓN
1. X-Pack
2. Search Guard
3. Nginx como proxy inverso para Kibana (autenticación sencilla y con SSL)
4.2.2.2. X-Pack
Hemos elegido X-Pack porque añade autenticación y encriptación de forma nativa. Anterior-
mente era una característica por la que había que pagar (en ese caso se utilizaba Search Guard
que no tenía coste asociado) pero a partir de la version 7.1.0 la seguridad puede configurarse
sin coste alguno. (https://www.elastic.co/es/blog/security-for-elasticsearch-is-now-free).
En la documentación de Wazuh (Wazuh, 2020), se utiliza una herramienta que genera todos
los certificados necesarios, incluyendo una CA, llamada elasticsearch-certutil. Como
nosotros ya tenemos una CA en nuestra organización que además se añade por directivas de
grupo a los navegadores de los equipos y ya hemos generado el certificado del servidor Wazuh
en el apartado 4.2.1, únicamente tendríamos que generar un certificado para el servidor Elk
(wazuh-elk). Esto lo hemos realizado en el anexo E en el apartado E.2.
Por tanto, en primer lugar copiamos la clave pública del certificado CA y la privada y pública
del servidor ELK al directorio de Elasticsearch y configuramos los permisos:
Añadimos las configuraciones para las capas de transporte y de http en el fichero /etc/
elasticsearch/elasticsearch.yml:
34
4.2. Instalación en producción del SIEM securizado
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.key: /etc/elasticsearch/certs/wazuh-elk.key
xpack.security.transport.ssl.certificate: /etc/elasticsearch/certs/wazuh-elk.crt
xpack.security.transport.ssl.certificate_authorities: [ "/etc/elasticsearch/certs/ca/rootCA.pem" ]
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.verification_mode: certificate
xpack.security.http.ssl.key: /etc/elasticsearch/certs/wazuh-elk.key
xpack.security.http.ssl.certificate: /etc/elasticsearch/certs/wazuh-elk.crt
xpack.security.http.ssl.certificate_authorities: [ "/etc/elasticsearch/certs/ca/rootCA.pem" ]
Reiniciamos Elasticsearch
output.elasticsearch.hosts: ['10.x.x.40:9200']
output.elasticsearch.protocol: https
output.elasticsearch.ssl.certificate: "/etc/filebeat/certs/wazuh-server.crt"
output.elasticsearch.ssl.key: "/etc/filebeat/certs/wazuh-server.key"
output.elasticsearch.ssl.certificate_authorities: ["/etc/filebeat/certs/ca/rootCA.pem"]
Podemos probar Filebeat con el comando "filebeat test output" para ver que nos conec-
tamos de forma segura y encriptada al servidor de Elasticsearch:
35
CAPÍTULO 4. INSTALACIÓN
talk to server... OK
version: 7.6.2
elasticsearch.hosts: ["https://10.x.x.40:9200"]
elasticsearch.ssl.certificateAuthorities: ["/etc/kibana/certs/ca/rootCA.pem"]
elasticsearch.ssl.certificate: "/etc/kibana/certs/wazuh-elk.crt"
elasticsearch.ssl.key: "/etc/kibana/certs/wazuh-elk.key"
server.ssl.enabled: true
server.ssl.certificate: "/etc/kibana/certs/wazuh-elk.crt"
server.ssl.key: "/etc/kibana/certs/wazuh-elk.key"
Reiniciamos Kibana
Una vez hecho esto ya tendríamos comunicación https entre todas las partes implicadas. A
continuación, añadiríamos la autenticación.
xpack.security.enabled: true
36
4.2. Instalación en producción del SIEM securizado
• Anotamos la contraseña del usuario elastic y guardamos todas las demás en un lugar
seguro.
• Establecemos las credenciales del usuario elastic en Filebeat. Para ello, editamos el
fichero /etc/filebeat/filebeat.yml (en la máquina wazuh-server) y:
output.elasticsearch.username: "elastic"
output.elasticsearch.password: "password_generated_for_elastic"
• Reiniciamos Filebeat:
xpack.security.enabled: true
elasticsearch.username: "elastic"
elasticsearch.password: "password_generated_for_elastic"
• Reiniciamos Kibana:
37
CAPÍTULO 4. INSTALACIÓN
38
4.3. Monitorización de los servidores Wazuh en Nagios
3
Nagios Remote Plugin Executor
39
5
D ESPLIEGUE
Ahora podríamos instalar cualquiera de los roles que nos hemos descargado.
jpcozar@wazuh-server:~$ cd /etc/ansible/roles/wazuh-ansible
jpcozar@wazuh-server:/etc/ansible/roles/wazuh-asinble$ ls -l playbooks
total 24
-rw-r--r-- 1 root root 430 abr 6 12:16 wazuh-agent.yml
-rw-r--r-- 1 root root 2750 abr 6 12:16 wazuh-elastic_stack-distributed.yml
-rw-r--r-- 1 root root 446 abr 6 12:16 wazuh-elastic_stack-single.yml
-rw-r--r-- 1 root root 163 abr 6 12:16 wazuh-elastic.yml
-rw-r--r-- 1 root root 145 abr 6 12:16 wazuh-kibana.yml
-rw-r--r-- 1 root root 210 abr 6 12:16 wazuh-manager.yml
---
- hosts: hacolx05, hacolx06, hacolx07, hacolx08, hacolx09, hacolx10
roles:
- ../roles/wazuh/ansible-wazuh-agent
vars:
wazuh_managers:
- address: 10.x.x.57
port: 1514
protocol: udp
api_port: 55999
42
5.2. Despliegue automático en sistemas Linux
api_proto: 'https'
api_user: WazuhCor
wazuh_agent_authd:
registration_address: 10.x.x.57
enable: true
port: 1515
ssl_agent_ca: null
ssl_auto_negotiate: 'no'
environment:
http_proxy: http://10.x.x.x:3128
https_proxy: http://10.x.x.x:3128
Y ahora ya podemos ejecutar el comando de Ansible para instalar el rol en cada uno de los
servidores:
jpcozar@wazuh-server:/etc/ansible/roles/wazuh-ansible/playbooks$ ansible-playbook
↪→ wazuh-agent.yml -b -K
SUDO password:
Una vez ejecutado con éxito, obtendremos una imagen como la de la figura 5.1.
En el servidor de Wazuh, ejecutamos el siguiente comando para ver que se han registrado los
agentes:
root@wazuh-server:~# /var/ossec/bin/manage_agents -l
Available agents:
ID: 001, Name: hacolx05, IP: 10.x.x.x
ID: 002, Name: hacolx06, IP: 10.x.x.x
ID: 003, Name: hacolx07, IP: 10.x.x.x
ID: 004, Name: hacolx09, IP: 10.x.x.x
43
CAPÍTULO 5. DESPLIEGUE
Y en cada uno de los servidores que tienen el agente podríamos ver que está instalado y
ejecutándose con el comando:
44
5.3. Despliegue automático en sistemas Windows
PS D:\Wazuh-agent.\wazuh-agent-3.12.0-1.msi /q WAZUH_MANAGER="10.x.x.57"
↪→ WAZUH_REGISTRATION_SERVER="10.x.x.57"
Una vez ejecutada la directiva y el comando anterior, tendríamos todos los servidores Windows
registrados, como vemos en la figura 5.4.
45
6
C ASOS DE USO
<syscheck>
....
<directories >/mnt/KEEPASS</directories>
<skip_nfs>no</skip_nfs>
...
</syscheck>
Para poder chequear recursos NFS o CIFS necesitamos utilizar la opción <skip_nfs>. Hay
que notar que no podemos utilizar la opción de chequear los ficheros en tiempo real (como
haremos al usar VirusTotal) porque se utiliza inotify en Linux para detectar los cambios.
Si modificamos el fichero del recurso CIFS desde Linux donde está montado, si veríamos la
modificación en tiempo real. Pero lo normal será hacer la modificación desde Windows que
CAPÍTULO 6. CASOS DE USO
es donde tenemos instalado el programa Keepass. Por tanto, inotify no detectará el cambio
y no funcionará la notificación en tiempo real. Lo que haremos será reducir el intervalo de
syscheck a 15 minutos.
Una vez hecho esto, reiniciamos el agente y probamos a modificar el fichero:
Además podemos generar una alerta que nos avise con un determinado nivel de severidad. Para
ello creamos una regla en el fichero /var/ossec/etc/local_rules.xml con el siguiente
contenido:
<group name="local,syscheck,ossec">
<rule id="100004" level="12">
<if_group>syscheck</if_group>
<match>/mnt/KEEPASS/contraseñas.kdbx</match>
<description>Changes to contraseñas.kdbx - Critical file!</description>
</rule>
</group>
Y cuando se produzca el evento anterior, nos emitirá una alerta de nivel 12, con un ID de regla
de 100004, como vemos en la figura 6.2
Veremos otro ejemplo de la monitorización de la integridad del sistema de ficheros en la
integración con VirusTotal en el apartado 6.5.
A continuación vemos una extensión del FIM, que nos permite, aparte de monitorizar el fichero,
hacer una auditoría de quién y cómo lo hizo. Esta característica se denomina who-data y está
disponible tanto para Windows como para Linux.
48
6.1. File Integrity Monitoring: FIM
49
CAPÍTULO 6. CASOS DE USO
<agent_config>
...
<syscheck>
<directories check_all="yes" whodata="yes"
↪→ recursion_level="0">/etc</directories>
</syscheck>
...
</agent_config>
Le indicamos que queremos monitorizar quién accede a qué del directorio /etc pero sólo
del primer nivel (recursión 0). Una vez hecho esto, verificamos la configuración del agente y
reiniciamos el servicio de wazuh-manager en el servidor y los agentes de forma remota:
root@wazuh-server:# /var/ossec/bin/verifiy-agent-conf
root@wazuh-server:# systemctl restart wazuh-manager
root@wazuh-server:# /var/ossec/bin/agent_control -R -a
Ahora en uno de los agentes Linux, podemos comprobar si se está aplicando la regla:
50
6.2. Auditoría mediante who-data
51
CAPÍTULO 6. CASOS DE USO
<agent_config>
...
<syscheck>
...
<directories check_all="yes" whodata="yes">%WINDIR%\SysNative\drivers\etc</directories>
</syscheck>
...
</agent_config>
Una vez hecho esto, verificamos la configuración del agente y reiniciamos el servicio de
wazuh-manager en el servidor y los agentes de forma remota:
root@wazuh-server:# /var/ossec/bin/verifiy-agent-conf
root@wazuh-server:# systemctl restart wazuh-manager
root@wazuh-server:# /var/ossec/bin/agent_control -R -a
Y la alerta con la auditoría indicando quién (el Administrador), cómo (usando el notepad) y
cuándo se modificó el fichero, como vemos en la figura 6.5
52
6.2. Auditoría mediante who-data
53
CAPÍTULO 6. CASOS DE USO
...
<vulnerability-detector>
<enabled>yes</enabled>
<interval>5m</interval>
<ignore_time>6h</ignore_time>
<run_on_start>yes</run_on_start>
...
Y en el mismo bloque xml, deberíamos activar los sistemas (llamados providers) para los
que queremos que se detecten vulnerabilidades. Podemos indicarlo por el nombre de versión
o por el número. Como vamos a monitorizar servidores Ubuntu 14.x (Trusty Tahr), 16.x
(Xenial) y 18.x (Bionic) estos son los que habilitaremos únicamente:
...
<provider name="canonical">
<enabled>yes</enabled>
<os>trusty</os>
<os>xenial</os>
<os>bionic</os>
<update_interval>1h</update_interval>
</provider>
...
Estas opciones lo que hacen es descargarse los ficheros para Bionic, Xenial y Trusty, respecti-
vamente:
• https://people.canonical.com/~ubuntu-security/oval/com.ubuntu.bionic.cve.oval.xml
• https://people.canonical.com/~ubuntu-security/oval/com.ubuntu.xenial.cve.oval.xml
• https://people.canonical.com/~ubuntu-security/oval/com.ubuntu.trusty.cve.oval.xml
1
National Vulnerability Database
54
6.3. Detección de vulnerabilidades
2. Creamos un script que realice las descargas y descompresión de los ficheros para
Ubuntu que llamamos ubuntu-generator.sh:
#!/bin/bash
##############################################################
# Uso: Script para descargar los feeds de Canonical en xml.bz2
# Fecha: Abril 2020
# Autor: Javier Polo Cózar
##############################################################
WGET=`which wget`
BUNZIP2=`which bunzip2`
DIR="/var/ossec/offline-vulnerabilities/ubuntu"
URL="https://people.canonical.com/~ubuntu-security/oval/"
pre="com.ubuntu."
pos=".cve.oval.xml"
3. Ahora, ponemos una tarea en el crontab, que los descargue cada hora por ejemplo:
@hourly /var/ossec/offline-vulnerabilities/ubuntu-generator.sh >/dev/null
<os path="/var/ossec/offline-vulnerabilities/ubuntu/com.ubuntu.xenial.cve.oval.xml"> ⌋
↪→ xenial</os>
<os path="/var/ossec/offline-vulnerabilities/ubuntu/com.ubuntu.bionic.cve.oval.xml"> ⌋
↪→ bionic</os>
<update_interval>1h</update_interval>
</provider>
2
El problema fue resuelto por el equipo de Wazuh en la versión 3.12.1
55
CAPÍTULO 6. CASOS DE USO
<wodle name="syscollector">
<disabled>no</disabled>
<interval>1h</interval>
<scan_on_start>yes</scan_on_start>
<hardware>yes</hardware>
<os>yes</os>
<network>yes</network>
<packages>yes</packages>
<ports all="no">yes</ports>
<processes>yes</processes>
</wodle>
wazuh_modules.debug=2
Coomo observamos en la figura 6.6 van apareciendo las vulnerabilidades encontradas en los
servidores Ubuntu de nuestra organización, pudiendo filtrar por servidor, vulnerabilidad CVE,
paquete afectado, etc. . .
56
6.3. Detección de vulnerabilidades
<provider name="nvd">
<enabled>yes</enabled>
<update_from_year>2010</update_from_year>
<update_interval>1h</update_interval>
</provider>
<wodle name="syscollector">
<disabled>no</disabled>
<interval>1h</interval>
<scan_on_start>yes</scan_on_start>
<hardware>yes</hardware>
3
Se consideró finalmente un bug en la documentación de Wazuh
4
rodeo
57
CAPÍTULO 6. CASOS DE USO
<os>yes</os>
<network>yes</network>
<packages>yes</packages>
<ports all="no">yes</ports>
<processes>yes</processes>
<hotfixes>yes</hotfixes>
</wodle>
Es la que trae por defecto, a excepción del tag <hotfixes>yes</hotfixes> que nos permite
detectar los hotfixes aplicados. Como debemos realizar dicho cambio en cada uno de los
servidores Windows monitorizados, en vez de hacerlo a mano, vamos a utilizar de nuevo la
configuración centralizada.
<agent_config os="Windows">
</agent_config>
Y en pocos minutos tendríamos en cada uno de los servidores Windows, dicho fichero en la
ruta C:\Program Files (x86)\ossec-agent\shared. Para comprobar que el agente con
ID 007 - Servidor Windows, está sincronizado ejecutamos:
Una vez desplegado, ya empezaría a detectar las vulnerabilidades en los sistemas Windows
como vemos en la figura 6.7.
A modo de ejemplo, hemos instalado el software Adobe Reader XI y Google Chrome, para
comprobar que no sólo detecta parches para el sistema operativo, sino también vulnerabilida-
58
6.5. Integración con VirusTotal
des en el software. Esto lo hace a través del CPE (Common Platform Enumeration), creando
Wazuh un diccionario auxiliar que traduce el inventario realizado por Syscollector de los
agentes Windows a un formato válido para los feeds obtenidos de la National Vulnerability
Database.
59
CAPÍTULO 6. CASOS DE USO
<ossec_config>
...
<integration>
<name>virustotal</name>
<api_key>"API_GENERADA"</api_key>
<group>syscheck</group>
<alert_format>json</alert_format>
</integration>
...
</ossec_config>
<syscheck>
...
<directories check_all="yes"
↪→ realtime="yes">/var/www/html/wiki-sief/images</directories>
...
</syscheck>
Existen ficheros de prueba con malware que nos permiten testear los sistemas antivirus. Uno
de ellos está disponible para descarga en la web https://www.eicar.org/. El problema es que
los ficheros allí suministrados tienen extensión .com, .txt o .zip, con lo cual no valdrían
para subirlo al wiki ya que no tienen la extensión permitida y cambiarla nos indicará un error
de tipo MIME ya que Mediawiki realiza una comprobación de la extensión del fichero con la
cabecera.
Pero un usuario malintencionado podría incrustar dicho malware en un fichero doc y con-
vertirlo a pdf, que ha sido la solución que hemos encontrado aquí. Este fichero pdf es el que
hemos usado como pruebas. Una vez subido al Mediawiki, vemos que es detectado, tanto en
las alertas (figura 6.8) como en la interfaz del agente en concreto (figura 6.9).
60
6.5. Integración con VirusTotal
61
CAPÍTULO 6. CASOS DE USO
<remote>
<connection>syslog</connection>
<allowed-ips>10.x.x.246</allowed-ips>
</remote>
Y para comprobar que nos están llegando los eventos, en el servidor de Wazuh tenemos que
activar temporalmente la opción logall en el fichero /var/ossec/ossec.conf:
<ossec_config>
<global>
...
<logall>yes</logall>
...
</global>
</ossec_config>
Una vez hecho esto, ya deberíamos ver los intentos de autenticación erróneos en el switch en
el fichero /var/ossec/logs/archives/archives.log
62
6.6. Monitorización sin agente (agentless)
2020 Apr 07 15:49:00 wazuh-server->10.x.x.246 Apr 7 17:49:00 10.x.x.246 00419 auth: Invalid
↪→ user name/password on SSH session User 'admin' is trying to login from 10.x.x.x
Existe una parte de encabezado que la inserta Wazuh y que hay que eliminar para construir
correctamente el decoder:
Apr 7 17:49:00 10.x.x.246 00419 auth: Invalid user name/password on SSH session User 'admin'
↪→ is trying to login from 10.x.x.x
También hay que tener cuenta al construir el decoder el espacio en blanco al principio.
Para crear el decoder, abrimos el fichero /var/ossec/etc/decoders/local_decoder.xml
y creamos el siguiente decodificador:
<decoder name="hp">
<prematch> \w+\s+\d+ \d+\d+:\d+\d+:\d+\d+ </prematch>
<regex offset="after_prematch">(\d+.\d+.\d+.\d+) \d+ auth: Invalid user name/password on SSH
↪→ session User '(\S+)' is trying to login from (\d+.\d+.\d+.\d+)</regex>
<order>dstip,user,srcip</order>
</decoder>
Las expresiones regulares (OSSEC, 2020)5 utilizadas las vemos en la tabla 6.1
Expresiones utilizadas
Modificadores
63
CAPÍTULO 6. CASOS DE USO
\w+\s+\d+ Apr 7
\d+\d+:\d+\d+:\d+\d+ 17:49:00
Como vemos, utiliza el decoder que hemos creado y obtiene los campos que queríamos.
64
6.6. Monitorización sin agente (agentless)
la configuración por defecto de Wazuh, debe ser mayor de 3 para ser registrada) y con un ID
de 100002 (las reglas de usuario deben crearse a partir de la 100000).
<group name="hp,sshd,syslog">
<rule id="100002" level="5">
<decoded_as>hp</decoded_as>
<description>sshd: authentication failed HP Switch</description>
<group>authentication_failed</group>
</rule>
</group>
Y ahora, si lanzamos la herramienta de test de logs de nuevo, se habría añadido una nueva
fase que es la que nos indica que nos lanzaría una alerta de nivel 5:
Una vez hecho esto, si intentamos autenticarnos de forma errónea en el switch, deberíamos
ver la alerta tanto en los ficheros alerts.(json|log)
65
CAPÍTULO 6. CASOS DE USO
66
6.6. Monitorización sin agente (agentless)
Como vemos, para que esta regla se ejecute, se tiene que cumpliar la regla atómica con SID
100002 definida anteriormente, con una frecuencia de 5 veces en un tiempo de 600 segundos,
o sea 10 minutos desde la misma ip (<same_source_ip />).
Como vemos, funciona correctamente y se genera una alerta de nivel 10. Ahora lo ponemos
en práctica, intentando logarnos en el switch 5 veces desde la misma IP de forma errónea y
vemos que se genera la alerta tanto en los logs:
Figura 6.11: Alerta regla compuesta: 5 intentos de acceso ssh en 10 minutos switch HP
67
CAPÍTULO 6. CASOS DE USO
Y la regla compuesta con ID 5712, que se lanza si ha saltado la regla 5710 8 veces, en un
tiempo de 2 minutos y se ignorará durante 1 minuto.
68
6.7. Active Response
<command>
<name>firewall-drop</name>
<executable>firewall-drop.sh</executable>
<expect>srcip</expect>
<timeout_allowed>yes</timeout_allowed>
</command>
<active-response>
<command>firewall-drop</command>
<location>local</location>
<rules_id>5712</rules_id>
<timeout>300</timeout>
</active-response>
69
CAPÍTULO 6. CASOS DE USO
<localfile>
<log_format>syslog</log_format>
<location>/var/ossec/logs/active-responses.log</location>
</localfile>
Ahora si volvemos a realizar la misma operación, además, podremos verlo tanto en el fichero
de alertas de Wazuh (sabiendo que la regla que saltará será la de ossec de active response, la
601) como en Kibana (figura 6.12).
70
6.8. Bastionado de servidores
71
CAPÍTULO 6. CASOS DE USO
Una vez descargadas y establecido el usuario ossec como propietario, las podemos distribuir
a los servidores con la configuración centralizada, como vimos en el apartado 6.4. Pero antes,
tenemos que crear dos nuevos grupos dentro de los servidores Windows, distinguiendo si
son controladores de dominio o servidores miembro. No aplicaremos dichas políticas ni al
servidor Windows 2008 ni al servidor independiente.
Los nuevos grupos serán:
2012DomainControllerServers contiene a HACOSV01 y HACOSV02
2012DomainMemberServers contiene a HACONF11, HACONF12, HACOSV03 y HACOSV04.
Ahora ya podemos añadir al fichero de configuración agent.conf de cada grupo, las políticas
correspondientes. Por ejemplo, para los servidores miembros del dominio, editamos el fiche-
ro /var/ossec/etc/shared/2012DomainMemberServers/agent.conf y lo dejamos po-
niendo el path relativo donde se copiarán en los agentes. Será en C:\Archivos de programa (x86)
\ossec-agent\shared ya que originalmente las busca en C:\Archivos de programa (x86)
\ossec-agent\ruleset\sca.
<agent_config>
<sca>
<policies>
<policy>/../../shared/sca-policies/cis_win2012r2_memberL1.yml</policy>
<policy>/../..//shared/sca-policies/cis_win2012r2_memberL2.yml</policy>
</policies>
</sca>
</agent_config>
<agent_config>
<sca>
<policies>
<policy>/../../shared/sca-policies/cis_win2012r2_domainL1.yml</policy>
<policy>/../..//shared/sca-policies/cis_win2012r2_domainL2.yml</policy>
</policies>
</sca>
</agent_config>
Estas configuraciones se mezclarán con las existentes en el bloque sca de cada agente
y se añadirán a la antigua configuración. Al cabo de poco tiempo, tendremos evualadas
dichas políticas, que nos aparecerán en Kibana en una nueva pestaña llamada SCA den-
tro de cada uno de los agentes en el apartado: Auditing and Policy Monitoring →
Security Configuration Assessment.
72
6.8. Bastionado de servidores
Como vemos en la figura 6.13 nos muestra las tres políticas SCA que le está aplicando al
servidor. La de por defecto y las dos nuevas que hemos añadido.
Si hacemos clic en cada política, vemos en detalle el resultado de cada test: failed, passed
o not applicable. Esto lo vemos en la figura 6.14.
73
CAPÍTULO 6. CASOS DE USO
74
6.9. Notificaciones de alertas y generación de informes
<ossec_config>
<globlal>
...
<email_notification>yes</email_notification>
<smtp_server>hacolx05</smtp_server>
<email_from>[email protected]</email_from>
<email_to>[email protected]</email_to>
75
CAPÍTULO 6. CASOS DE USO
<email_maxperhour>12</email_maxperhour>
<email_log_source>alerts.log</email_log_source>
</global>
...
</ossec_config>
Y luego definimos el nivel de alertas a partir del cual, queremos que se nos envíen mensajes
en el mismo fichero. Por ejemplo, como queremos que se nos envíen las alertas de los intentos
de ataque de fuerza bruta por ssh que hicimos en la sección 6.7 que tenía un nivel 10, lo
dejamos así:
<alerts>
<email_alert_level>10</email_alert_level>
</alerts>
Con la configuración anterior, todas las alertas de nivel ≥ 10 le llegarían al usuario indicado.
Wazuh permite una mayor granularidad y podríamos hacer que las alertas de un determinado
servidor le llegaran a un correo específico. Por ejemplo, realizamos el ataque ssh en el servidor
hacolx07 y queremos que le llegue al usuario usuario_recepcion. En el mismo fichero
haríamos:
<email_alerts>
<event_location>hacosv07</event_location>
<do_not_delay />
</email_alerts>
Probamos a hacer el ataque ssh y recibiríamos el correo que vemos en la figura 6.17
<ossec_config>
<reports>
<level>10</level>
<title>Informe diario: Alertas con nivel mayor que 10</title>
<email_to>[email protected]</email_to>
</reports>
</ossec_config>
Esta configuración enviaría un informe diario de las alertas generadas con un nivel ≥ 10,
como vemos en la figura 6.18.
76
6.9. Notificaciones de alertas y generación de informes
Figura 6.17: Alerta de ataque por fuerza bruta ssh por correo
77
CAPÍTULO 6. CASOS DE USO
78
6.10. Integración con APIs externas: Slack
<integration>
<name>slack</name>
<hook_url>https://hooks.slack.com/services/"hook_url_individual"</hook_url> ⌋
↪→
<level>12</level>
Y al cabo de poco tiempo nos llegarán al canal #wazuh de nuestro espacio de trabajo las
notificaciones con el nivel de alerta indicado, como podemos ver en la figura 6.19.
6
Más información en https://api.slack.com/messaging/webhooks
79
7
C ONCLUSIONES Y
MEJORAS
7.1. Conclusiones
Se han realizado los siguientes objetivos propuestos:
✓ Se ha podido seguir la planificación establecida.
✓ Se ha estudiado y determinado el mejor método de implantación de Wazuh en nuestra
organización.
✓ Se han instalado los servidores Wazuh y ELK Stack con una arquitectura distribuida.
✓ Se han securizado los servidores Wazuh y ELK Stack (incluido la autenticación en el
acceso al portal web Kibana) y las comunicaciones entre ellos utilizando la tecnología
X-Pack para la parte de ELK.
✓ Se han integrado los servidores Wazuh y Elastic en la herramienta Nagios de monitoriza-
ción de nuestra organización.
✓ Se han desplegado de forma automática los agentes de Wazuh tanto en servidores Windows
(mediante directivas de grupo) como Linux (mediante Ansible).
✓ Se ha utilizado la configuración centralizada que propone Wazuh para distribuir opciones
específicas a los agentes de forma automática en vez de ir uno por uno de forma manual.
✓ Se han monitorizado ficheros considerados críticos, alertándonos de su alteración en tiempo
real cuando ha sido posible. También se ha realizado la auditoría de dichas modificaciones,
CAPÍTULO 7. CONCLUSIONES Y MEJORAS
7.2. Mejoras
• La instalación por defecto de Wazuh genera muchas alertas e información de monitori-
zación (por ejemplo cada logado con éxito en un sistema Windows) que es necesario
que depuremos para separar lo realmente importante y no sobrecargar el sistema así
como eliminar los falsos positivos.
• Al cabo de poco tiempo de estar en producción el sistema (1 mes aproximadamente),
el espacio ocupado por los datos de Elasticsearch en /var/data/elasticsearch, ha
crecido bastante, con lo que hemos tenido que migrar los datos a una nueva unidad
virtual /mnt/es_data/lib/elasticsearch para mantenerla independiente del ser-
vidor y monitorizada por Nagios. Además hemos tenido que configurar la rotación y
eliminación de índices a través de Kibana. Es necesaria una planificación y estudio más
exhaustivo de este tema para evitar cuellos de botella.
82
7.2. Mejoras
• Existen características adicionales de Wazuh (por ejemplo Osquery) que podrían sernos
útiles en nuestro entorno y que implementaremos en el futuro.
• Será necesario personalizar Kibana generando dashboards propios para nuestra organi-
zación que nos avisen de alertas definidas por nosotros (por ejemplo los ataques por ssh
a los servidores Linux, o intentos de logado erróneo a los switches, etc. . . ).
• Habrá que aplicar el caso de uso del switch HP (sección 6.6) al resto de switches de la
organización y crear reglas o decodificadores adicionales si es necesario.
• Estudiar la posibilidad de utilizar Wazuh para monitorizar los dispositivos en los que
compartimos la gestión (firewall y cabina de almacenamiento), previo acuerdo con el
resto de administradores.
• Realizar un manual o guía de usuario del entorno web instalado (Kibana+plugin Wazuh)
para los operadores e implementar dashboards preparados específicamente para ellos.
83
B IBLIOGRAFÍA
Libros
Bray, R., Cid, D. y Hay, A. (2008, 9 de abril). OSSEC Host-Based Intrusion Detection Guide
(Edición: Pap/Cdr). Syngress. (Vid. pág. 62).
Chhajed, S. (2015, 26 de noviembre). Learning ELK Stack: Build mesmerizing visualizations,
analytics, and logs from your data using Elasticsearch, Logstash, and Kibana. Packt
Publishing.
Gormley, C. y Tong, Z. (2015, 7 de febrero). Elasticsearch: The Definitive Guide (Edición: 1).
O’Reilly Media.
Kruegel, C., Valeur, F. y Vigna, G. (2005). Intrusion detection and correlation: Challenges
and solutions. Springer US. https://doi.org/10.1007/b101493
Lhotsky, B. (2013, 1 de enero). Instant OSSEC host-based intrusion detection system [Google-
Books-ID: X80hLF8zL4EC]. Packt Publishing Ltd.
Miell, I. y Sayers, A. H. (2019, 28 de febrero). Docker in Practice, Second Edition (Edición:
2nd). Manning.
Miller, D. R., Harris, S., Harper, A., VanDyke, S. y Blask, C. (2010, 5 de noviembre). Security
Information and Event Management (Edición: 1). McGraw-Hill Education.
Northcutt, S. y Novak, J. (2002, 6 de septiembre). Network Intrusion Detection (3 edition).
Sams Publishing.
Paro, A. (2019, 30 de abril). Elasticsearch 7.0 Cookbook: Over 100 recipes for fast, scalable,
and reliable search for your enterprise, 4th Edition. Packt Publishing.
Shukla, P. y N, S. K. M. (2019, 31 de mayo). Learning Elastic Stack 7.0: Distributed search,
analytics, and visualization using Elasticsearch, Logstash, Beats, and Kibana, 2nd
Edition (Edición: 2). Packt Publishing.
BIBLIOGRAFÍA
Artículos
Mokalled, H., Catelli, R., Casola, V., Debertol, D., Meda, E. y Zunino, R. (2019). The
Applicability of a SIEM Solution: Requirements and Evaluation. 2019 IEEE 28th
International Conference on Enabling Technologies: Infrastructure for Collaborative
Enterprises (WETICE), Enabling Technologies: Infrastructure for Collaborative En-
terprises (WETICE), 2019 IEEE 28th International Conference on, WETICE, 132-137.
https://doi.org/10.1109/WETICE.2019.00036 (vid. pág. 7)
Podzins, O. y Romanovs, A. (2019). Why SIEM is Irreplaceable in a Secure IT Environment?
2019 Open Conference of Electrical, Electronic and Information Sciences (eStream),
Electrical, Electronic and Information Sciences (eStream), 2019 Open Conference of,
1-5. https://doi.org/10.1109/eStream.2019.8732173 (vid. pág. 1)
Recursos web
A2Secure. (2019, 12 de febrero). Sistemas IDS, IPS, HIDS, NIPS, SIEM ¿Qué son? [A2Secure]
[Library Catalog: www.a2secure.com Section: Blog]. Consultado el 3 de marzo de
2020, desde https://www.a2secure.com/blog/ids-ips-hids-nips-siem-que-es-esto/
Casetto, O. (2019, 7 de febrero). A SIEM security primer: Evolution and next-gen capabilities
[Exabeam] [Library Catalog: www.exabeam.com Section: SIEM]. Consultado el 28
de febrero de 2020, desde https://www.exabeam.com/siem/a-siem-security-primer-
evolution-and-next-gen-capabilities/. (Vid. pág. 8)
OSSEC. (2020). OSSEC HIDS documentation. Consultado el 25 de febrero de 2020, desde
https://ossec-documentation.readthedocs.io/en/latest/. (Vid. pág. 63)
Red Hat. (2020). Ansible Documentation. Consultado el 25 de febrero de 2020, desde https:
//docs.ansible.com/ansible/latest/user_guide/. (Vid. pág. G-1)
Verizon. (2019, mayo). 2019 data breach investigations report [Verizon enterprise solutions]
[Library Catalog: enterprise.verizon.com]. Consultado el 25 de febrero de 2020, desde
https://enterprise.verizon.com/resources/reports/2019-data-breach-investigations-
report.pdf. (Vid. pág. 1)
Wazuh. (2020). Wazuh documentation. Consultado el 25 de febrero de 2020, desde https:
//documentation.wazuh.com/3.11/. (Vid. págs. 29, 34, D-4)
86
Apéndices
A
H YPER -V
1
Network Address Translation - Traducción de direcciones de red
APÉNDICE A. HYPER-V
• Nombre: wazuh-server-pruebas
• Ubicación: D:\Wazuh-pruebas
• Generación: 1
• Procesadores: 1 procesador virtual
• Memoria RAM: 2 GB
• Marcar: Usar la memoria dinámica para esta máquina virtual
• Conexión: External vSwitch (creado en el apartado A.1).
• Crear un disco duro virtual: Wazuh-server-pruebas.vhdx - 40 GB
• Instalar un sistema operativo desde un CD/DVD ROM de arranque - Archivo de
imagen ISO: ubuntu-18.04.4-live-server-amd64.iso
• Arrancamos la máquina virtual y debe empezar a instalar la ISO de Ubuntu Server
• Seguir los pasos indicados en el anexo B
A-2
A.2. Creación de máquinas virtuales
A-3
APÉNDICE A. HYPER-V
A continuación, seleccionamos las dos máquinas que queremos que tengan alta disponibilidad,
como vemos en la figura A.3
Por último, comprobamos que se han agregado dos nuevos roles en el administrador de clúster
de conmutación por error, uno por cada máquina virtual como vemos en la figura A.4.
Ahora, en el caso de que se produzca una caída del nodo propietario de las máquinas virtuales,
se transferirán dichas máquinas al otro nodo.
A-4
A.3. Clúster de conmutación por error: alta disponibilidad
A-5
B
U BUNTU S ERVER
18.04.4 LTS
network:
ethernets:
eth0:
addresses:
- 10.x.x.x/23
gateway4: 10.x.x.x
nameservers:
addresses:
- 10.x.x.x
- 10.x.x.x
B-2
B.2. Configurar Ubuntu 18.04.4 LTS
search:
- <dominio>
version: 2
Para las máquinas en producción, es necesario que, aparte de la IP, tengan configurado
correctamente su nombre de dominio. Esto será necesario para la creación de certificados,
resolución de nombres directa e inversa, etc. . . . Para ello, hacemos lo siguiente:
Nombre: wazuh-elk.<dominio>
Address: 10.x.x.40
Nombre: wazuh-elk.<dominio>
Address: 10.x.x.40
Ya tendríamos las máquinas virtuales listas para comenzar la instalación del SIEM.
B-3
APÉNDICE B. UBUNTU SERVER 18.04.4 LTS
B-4
B.2. Configurar Ubuntu 18.04.4 LTS
jpcozar@wazuh-server:~$ timedatectl
B-5
C
I NSTALACIÓN DE
WAZUH S ERVER
jpcozar@wazuh-server-pruebas:~$ sudo su -
root@wazuh-server-pruebas:~# apt-get update
root@wazuh-server-pruebas:~# apt-get install curl apt-transport-https lsb-release gnupg2
Luego instalamos la llave GPG2 para que nos permita instalar los paquetes. Para ello usaremos
la herramienta curl. Esta herramienta accederá a Internet y necesitamos establecer el proxy
para que pueda salir. Para establecerlo de forma permanente, creamos el fichero ~/.curlrc
con el siguiente contenido:
1
super user do
2
Gnu Privacy Guard
APÉNDICE C. INSTALACIÓN DE WAZUH SERVER
proxy=10.x.x.x:3128
C-2
C.1. Instalación desde repositorios
2. Instalamos Filebeat:
C-3
APÉNDICE C. INSTALACIÓN DE WAZUH SERVER
root@wazuh-server-pruebas:~# curl -s
↪→ https://packages.wazuh.com/3.x/filebeat/wazuh-filebeat-0.1.tar.gz | sudo tar -xvz -C
↪→ /usr/share/filebeat/module
output.elasticsearch.hosts: ['http://10.x.x.x:9200']
C-4
D
I NSTALACIÓN DEL
SERVIDOR ELK S TACK
Como estamos en otra máquina virtual, tenemos que establecer el proxy corporativo (crear
el fichero ~/.curlrc, instalar los paquetes que son prerrequisitos, así como la clave GPG y
añadir el repositorio de Elastic. Todo esto lo haremos con el usuario root.
jpcozar@wazuh-elk-pruebas:~$ sudo su -
[sudo] password for jpcozar:
root@wazuh-elk-pruebas:~# apt-get install curl apt-transport-https
root@wazuh-elk-pruebas:~# curl -s https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key
↪→ add -
OK
root@wazuh-elk-pruebas:~# echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" |
↪→ tee /etc/apt/sources.list.d/elastic-7.x.list
root@wazuh-elk-pruebas:~# apt-get update
D.2. Elasticsearch
1. Instalar el paquete de Elasticsearch
network.host: 10.x.x.x
3. Además tenemos que indicar los nodos del cluster (en este caso sólo habrá uno). Para
ello, cambiamos o añadimos las líneas siguientes en el mismo fichero:
node.name: nodo1-pruebas
cluster.initial_master_nodes: ["nodo1-pruebas"]
5. Una vez que Elasticsearch está levantado, se recomienda cargar la plantilla de Filebeat
donde esté instalado. En nuestro caso, está en el servidor de Wazuh, en la otra máquina
virtual. Nos vamos a dicha máquina y ejecutamos:
6. Ahora comprobamos, por ejemplo desde el servidor de Wazuh, que Elasticsearch está
escuchando en el puerto 9200:
D-2
D.3. Kibana
D.3. Kibana
Kibana es el interfaz web que utilizaremos para visualizar los eventos y archivos almacenados
en Elasticsearch.
root@wazuh-elk-pruebas:~# cd /usr/share/kibana/
root@wazuh-elk-pruebas:~# sudo -u kibana https_proxy="http://10.x.x.x:3128"
↪→ bin/kibana-plugin install
↪→ https://packages.wazuh.com/wazuhapp/wazuhapp-3.11.4_7.6.1.zip
3. Kibana solo escuchará en el localhost por defecto. Para poder acceder a Kibana desde
fuera, tenemos que modificar el fichero /etc/kibana/kibana.yml y descomentar y
establecer la variable server.host y cambiar su valor:
server.host: "10.x.x.x"
elasticsearch.hosts: ["http://10.x.x.x:9200"]
D-3
APÉNDICE D. INSTALACIÓN DEL SERVIDOR ELK
hosts:
- default:
url: http://10.x.x.x
port: 55000
user: foo
password: bar
6. Por último, al igual que para el servidor de Wazuh, vamos a bloquear (hold) los paquetes
de Elasticsearch y de Kibana para que no se actualicen automáticamente, pero que nos
permita actualizarlo manualmente:
NODE_OPTIONS="--max-old-space-size=4096"
D-4
D.5. Actualización Kibana y Elasticsearch
Una vez hecho esto, reiniciamos el servicio con sudo systemctl restart kibana y ya
vemos el entorno de Kibana, en concreto el plugin de Wazuh, como observamos en la figura
D.2.
También habrá que actualizar el plugin de Kibana de Wazuh como se indica en la sección
siguiente (D.6).
jpcozar@wazuh-elk:~$ sudo su -
root@wazuh-elk:~# systemctl stop kibana
D-5
APÉNDICE D. INSTALACIÓN DEL SERVIDOR ELK
root@wazuh-elk:~# cd /usr/share/kibana
root@wazuh-elk:~# sudo -u kibana bin/kibana-plugin remove wazuh
root@wazuh-elk:~# rm -rf /usr/share/kibana/optimize/bundles
root@wazuh-elk:~# cd /usr/share/kibana
root@wazuh-elk:~# sudo -u kibana https_proxy="http://10.x.x.x:3128" bin/kibana-plugin
↪→ install https://packages.wazuh.com/wazuhapp/wazuhapp-3.12.0_7.6.2.zip
• El último paso ya lo tenemos realizado debido al error que nos daba Kibana, que
consiste en incrementar el tamaño de la pila de Kibana:
• Reiniciamos Kibana
D-6
E
C ERTIFICADOS
DIGITALES
[req]
default_bits=2048
prompt=no
req_extensions=san
distinguished_name=dn
x509_extensions=san
extensions=san
[dn]
C=ES
ST=Cordoba
L=Cordoba
O=<O>
OU=<OU>
emailAddress=<email_address>
CN=wazuh-server.<dominio>
[san]
APÉNDICE E. CERTIFICADOS DIGITALES
subjectAltName = @alt_names
[alt_names]
DNS.1=wazuh-server.<dominio>
IP.1=10.x.x.57
Ahora, generamos la clave privada y la petición de certificado de una vez con el fichero
anterior:
root@wazuh-server:~# openssl req -new -sha256 -nodes -out wazuh-server.csr -newkey rsa:2048
↪→ -keyout wazuh-server.key -config wazuh-server_csr.txt
...
Requested Extensions:
X509v3 Subject Alternative Name:
DNS:wazuh-server.<dominio>, IP Address:10.x.x.57
...
root@wazuh-server:~# openssl x509 -req -in wazuh-server.csr -CA ./rootCA.pem -CAkey ./rootCA.key
↪→ -out wazuh-server.crt -days 730 -sha256 --extensions san --extfile wazuh-server_csr.txt
↪→ -CAcreateserial
[req]
default_bits=2048
prompt=no
req_extensions=san
E-2
E.2. Generación de certificados para wazuh-elk
distinguished_name=dn
x509_extensions=san
extensions=san
[dn]
C=ES
ST=Cordoba
L=Cordoba
O=<O>
OU=<OU>
emailAddress=<email_address>
CN=wazuh-elk.<dominio>
[san]
subjectAltName=@alt_names
[alt_names]
DNS.1=wazuh-elk.<dominio>
IP.1=10.x.x.40
root@wazuh-server:~# openssl req -new -sha256 -nodes -out wazuh-elk.csr -newkey rsa:2048 -keyout
↪→ wazuh-elk.key -config wazuh-elk_csr.txt
root@wazuh-server:~# openssl x509 -req -in wazuh-elk.csr -CA ./rootCA.pem -CAkey ./rootCA.key
↪→ -out wazuh-elk.crt -days 730 -sha256 --extensions san --extfile wazuh-elk_csr.txt
↪→ -CAcreateserial
Ya tenemos el par de claves para el servidor de la pila ELK, los ficheros wazuh-elk.crt y
wazuh-elk.key.
E-3
F
M ONITORIZACIÓN CON
N AGIOS
Para poder monitorizar los servidores con Nagios, en primer lugar necesitamos tener instalados
sus plugins.
Una vez instalados, para poder chequearlos remotamente, necesitamos el plugin NRPE
(Nagios Remote Plugin Executor). En el servidor de Nagios en producción ya está instalado,
así que solo tenemos que instalar el cliente en cada uno de los servidores a monitorizar.
Copiamos del servidor Nagios el script check_mem que no viene en la instalación por defecto
de los plugins para poder chequear la memoria utilizada (un parámetro crítico en los servidores
ELK Stack):
Ahora desde el servidor Nagios hacolx05 comprobamos que podemos chequear tanto el
servidor Wazuh (10.x.x.57) como el Elk (10.x.x.40):
Una vez tenemos todo instalado, es el momento de añadir los servidores de Wazuh a Nagios.
Para ello, editamos el fichero /usr/local/nagios/etc/objects/linux.cfg y añadimos
las siguientes entradas para cada uno de los servidores:
define host{
use linux-server
host_name wazuh-elk
alias wazuh-elk.<dominio>
address 10.x.x.40
}
F-2
F.2. Instalación cliente NRPE v3.2.1
define host{
use linux-server
host_name wazuh-server
alias wazuh-server.<dominio>
address 10.x.x.57
}
define service{
use local-service ; Name of service template to use
host_name wazuh-server
service_description wazuh-manager
check_command check_tcp!1515
}
define service{
use local-service ; Name of service template to use
host_name wazuh-server
service_description wazuh-api
check_command check_tcp!55999
}
define service{
use local-service
host_name wazuh-elk
service_description kibana
check_command check_tcp!5601
}
define service{
use local-service
F-3
APÉNDICE F. MONITORIZACIÓN CON NAGIOS
host_name wazuh-elk
service_description elasticsearch-REST
check_command check_tcp!9200
}
define service{
use local-service
host_name wazuh-elk
service_description elasticsearch-nodos
check_command check_tcp!9300
}
Ya tendríamos monitorizados los servidores, como vemos en las figuras F.1 y F.2:
F-4
G
A NSIBLE
Para realizar este anexo, hemos utilizado la documentación online de Ansible (Red Hat, 2020).
jpcozar@wazuh-server:~$ ssh-keygen
A continuación, enviamos la clave pública al usuario jpcozar que existe en todos los servi-
dores Linux en los que queremos instalar los agentes. Serán los indicados en la figura 3.3:
hacolx05, hacolx06, hacolx07, hacolx08, hacolx09 y hacolx10. Usaremos el comando
ssh-copy-id:
Una vez hecho esto, ya podríamos logarnos en dichos servidores con este usuario sin que nos
pidiera contraseña desde el servidor de Wazuh.
[wazuh-agents]
hacolx05 ansible_ssh_user=jpcozar
hacolx06 ansible_ssh_user=jpcozar
hacolx07 ansible_ssh_user=jpcozar
hacolx08 ansible_ssh_user=jpcozar
hacolx09 ansible_ssh_user=jpcozar
hacolx10 ansible_ssh_user=jpcozar
Comprobamos que todos los servidores están accesibles por Ansible con el comando:
G-2
G.3. Instalación de Audit
tasks:
environment:
http_proxy: http://10.x.x.x:3128
https_proxy: http://10.x.x.x:3128
G-3
APÉNDICE G. ANSIBLE
Y tendríamos el servicio de auditoría instalado en todos los servidores Linux, como vemos en
la figura G.2.
G-4
H
D ESPLIEGUE DEL
AGENTE WAZUH POR
GPO
que nos pedirá un reinicio y ya tendríamos los agentes de Wazuh de los servidores Windows
instalados y registrados en el servidor Wazuh y visibles en Kibana.
H-2