Hace algunos meses ya teníamos la idea de implementar en la empresa un SIEM. Hace algunas semanas fue que nos liberamos un poco la agenda y pudimos dedicarle tiempo a esta tarea.

Cuando se busca por soluciones libres SIEM los clásicos son AlienVault OSSIM y SIEM Monster, pero de hace algunos años para acá hay uno que viene pisando fuerte (tanto así que hay soluciones pagadas usuandolo como backend) y es el que les presantamos hoy: Wazuh

Qué es un SIEM?

La gestión de eventos e información de seguridad (SIEM) es un campo dentro del campo de la seguridad informática, donde los productos y servicios de software combinan la gestión de información de seguridad (SIM) y la gestión de eventos de seguridad (SEM). Proporcionan análisis en tiempo real de alertas de seguridad generadas por aplicaciones y hardware de red. Los proveedores venden SIEM como software, dispositivos o servicios gestionados; estos productos también se utilizan para registrar datos de seguridad y generar informes con fines de cumplimiento. En pocas palabras: es un sistema que permite monitorizar y gestionar en tiempo real las alertas de seguridad en nuestro entorno.

1- Qué es Wazuh?

Wazuh es una plataforma gratuita y de código abierto para la detección de amenazas, monitoreo de seguridad, respuesta a incidentes y cumplimiento normativo. Se puede usar para monitorear puntos finales, servicios en la nube y contenedores, y para agregar y analizar datos de fuentes externas. Wazuh proporciona las siguientes capacidades:

  • Análisis de seguridad.
  • Detección de intrusos.
  • Monitoreo de Integridad de Archivos (FIM).
  • Detecciónde vulneribilidades.
  • Respuesta ante incidentes.
  • Seguridad a contenedores dockers.

El servidor Wazuh consta de 3 elementos:

  • El propio servidor: Analiza los datos recibidos de los agentes, los procesa a través de decodificadores y reglas, y usa inteligencia de amenazas para buscar indicadores de compromiso (IOC) conocidos. Un solo servidor puede analizar datos de cientos o miles de agentes y escalar horizontalmente cuando se configura como un clúster. El servidor también se utiliza para administrar los agentes, configurándolos y actualizándolos de forma remota cuando sea necesario.
  • Un agente: Instalado en terminales como portátiles, equipos de escritorio, servidores, instancias en la nube o máquinas virtuales, proporciona capacidades de prevención, detección y respuesta. Es compatible con las plataformas Windows, Linux, MacOS, HP-UX, Solaris y AIX.
  • Elastic stack: Indexa y almacena alertas generadas por el servidor Wazuh. Además, la integración entre Wazuh y Kibana proporciona una potente interfaz de usuario para la visualización y el análisis de datos. Esta interfaz también se usa para administrar la configuración de Wazuh y monitorear su estado.

Además de las capacidades de monitoreo basadas en agentes, la plataforma Wazuh puede monitorear dispositivos sin agentes, como firewalls, conmutadores, enrutadores o IDS de red, entre otros.

La plataforma Wazuh se utiliza para proteger y monitorear sistemas de diferentes maneras. Debido a todas sus capacidades, a menudo se usa para la prevención, detección y respuesta a amenazas.

2- Instalación del servidor

(El presente artículo sólo mostrará lo básico: instalación del servidor all-in-one y el agente en un cliente linux)

Wazuh puede ser desplegado con todos sus componentes en un mismo servidor (all-in-one, usualmente como prueba de concepto) o distribuido en la red. Si se va a realizar un despliegue (all-in-one) los requisitos mínimos para este tipo de despliegue son 4GB de RAM y 2 núcleos de CPU, y los recomendados son 16GB de RAM y 8 núcleos de CPU. Se requiere un sistema operativo de 64 bits (es instalable en muchos OSs: CentOS 7+, Debian8+, Ubuntu14+, Fedora31+, etc).

Se puede hacer el despliegue mediante el uso de un script que los buenos de Wazuh nos dejan aqui, pero a nosotros no nos funcionó, así que nos fuimos por la via manual.

En este escenario se realizará un despliegue all-in-one, usando como OS Ubuntu 20.04 y el servidor tendrá el IP: 192.168.43.101

Instalar todas las dependencias necesarias:

apt install curl apt-transport-https unzip wget libcap2-bin software-properties-common lsb-release gnupg2 default-jre -y

Agregar llave GPG y el repo:

curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | sudo apt-key add - && \
echo "deb https://packages.wazuh.com/4.x/apt/ stable main" | sudo tee /etc/apt/sources.list.d/wazuh.list
Debe devolver lo siguiente:
OK

Instalar Wazuh manager:

apt update && \
apt install wazuh-manager -y

Habilitar, iniciar el servicio y verificar su estado:

systemctl daemon-reload && \
systemctl enable --now wazuh-manager && \
systemctl status wazuh-manager

2.1- Instalación de Elasticsearch

Instalar Elasticsearch desde Open Distro ofrece seguridad avanzada, alertas, profundas mejoras de análisis, gestión de indexación y muchas otras mejoras.

Instalar Elasticsearch OSS y Open Distro para Elasticsearch:

apt install elasticsearch-oss opendistroforelasticsearch -y

Correr el siguiente comando para descargar el fichero de configuración /etc/elasticsearch/elasticsearch.yml:

curl -so /etc/elasticsearch/elasticsearch.yml https://packages.wazuh.com/resources/4.2/open-distro/elasticsearch/7.x/elasticsearch_all_in_one.yml

Se necesita agregar usuarios y roles para poder usar Wazuh Kibana adecuadamente. Correr los siguientes comandos para agregar los usuarios de Wazuh y los roles adicionales a Kibana:

curl -so /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/roles.yml https://packages.wazuh.com/resources/4.2/open-distro/elasticsearch/roles/roles.yml && \
curl -so /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/roles_mapping.yml https://packages.wazuh.com/resources/4.2/open-distro/elasticsearch/roles/roles_mapping.yml && \
curl -so /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml https://packages.wazuh.com/resources/4.2/open-distro/elasticsearch/roles/internal_users.yml

Los siguientes usuarios de Wazuh fueron agregados, con los comandos anteriores:

  • wazhur_user: Es creado para usuarios que necesiten solo permisos de solo lectura para acceder al Wazuh Kibana plugin.
  • wazuh_admin: Es recomendado para usuarios que necesitan permisos administrativos.

Roles adicionales agregados al Kibana para dar los permisos apropiados a los usuarios:

  • wazuh_ui_user: Provee al usuario wazhur_user de permisos para leer los indices de Wazuh.
  • wazuh_ui_admin: Permite al usuario wazuh_admin a ejecutar lectura, escritura, gestión y tareas de indexación en los índices de Wazuh.

Estos usuarios y roles estan diseñados para operar junto con el plugin Wazuh Kibana, pero están protegidos y no pueden ser modificados desde la interfaz de Kibana. Para modificarlos o agregar nuevos usuarios o roles, el script securityadmin se debe correr.

2.2- Creación de Certificados

Remover los certificados de la demo:

rm /etc/elasticsearch/esnode-key.pem /etc/elasticsearch/esnode.pem /etc/elasticsearch/kirk-key.pem /etc/elasticsearch/kirk.pem /etc/elasticsearch/root-ca.pem -f

Descargar el script wazuh-cert-tool.sh:

curl -so ~/wazuh-cert-tool.sh https://packages.wazuh.com/resources/4.2/open-distro/tools/certificate-utility/wazuh-cert-tool.sh && \
curl -so ~/instances.yml https://packages.wazuh.com/resources/4.2/open-distro/tools/certificate-utility/instances_aio.yml

Ejecutar el script wazuh-cert-tool.sh:

bash ~/wazuh-cert-tool.sh

Lo cual debe de devolver:

02/01/2022 17:19:50 INFO: Configuration file found. Creating certificates...
02/01/2022 17:19:51 INFO: Creating the Elasticsearch certificates...
02/01/2022 17:19:51 INFO: Creating Wazuh server certificates...
02/01/2022 17:19:51 INFO: Creating Kibana certificate...
02/01/2022 17:19:51 INFO: Certificates creation finished. They can be found in ~/certs.

Mover los crtificados de Elasticsearch para su correspondiente destino:

mkdir /etc/elasticsearch/certs/ && \
mv ~/certs/elasticsearch* /etc/elasticsearch/certs/ && \
mv ~/certs/admin* /etc/elasticsearch/certs/ && \
cp ~/certs/root-ca* /etc/elasticsearch/certs/

Agregar la siguiente configuración para mitigar la vulnerabilidad Apache Log4j2 Remote Code Execution (RCE) – CVE-2021-44228 – ESA-2021-31:

mkdir -p /etc/elasticsearch/jvm.options.d && \
echo '-Dlog4j2.formatMsgNoLookups=true' > /etc/elasticsearch/jvm.options.d/disabledlog4j.options && \
chmod 2750 /etc/elasticsearch/jvm.options.d/disabledlog4j.options && \
chown root:elasticsearch /etc/elasticsearch/jvm.options.d/disabledlog4j.options

Habilitar el servicio e iniciarlo:

systemctl daemon-reload && \
systemctl enable --now elasticsearch && \
systemctl status elasticsearch

Correr el script securityadmin de Elasticsearch para cargar la nueva información de los certificados e iniciar el servicio:

export JAVA_HOME=/usr/share/elasticsearch/jdk/ && \
/usr/share/elasticsearch/plugins/opendistro_security/tools/securityadmin.sh \
-cd /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/ \
-nhnv -cacert /etc/elasticsearch/certs/root-ca.pem \
-cert /etc/elasticsearch/certs/admin.pem \
-key /etc/elasticsearch/certs/admin-key.pem

Debe devolver, algo como lo siguiente:

Open Distro Security Admin v7
Will connect to localhost:9300 ... done
Connected as CN=admin,OU=Docu,O=Wazuh,L=California,C=US
Elasticsearch Version: 7.10.2
Open Distro Security Version: 1.13.1.0
Contacting elasticsearch cluster 'elasticsearch' and wait for YELLOW clusterstate ...
Clustername: elasticsearch
Clusterstate: GREEN
Number of nodes: 1
Number of data nodes: 1
.opendistro_security index does not exists, attempt to create it ... done (0-all replicas)
Populate config from /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/
Will update '_doc/config' with /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/config.yml
SUCC: Configuration for 'config' created or updated
Will update '_doc/roles' with /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/roles.yml
SUCC: Configuration for 'roles' created or updated
Will update '_doc/rolesmapping' with /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/roles_mapping.yml
SUCC: Configuration for 'rolesmapping' created or updated
Will update '_doc/internalusers' with /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
SUCC: Configuration for 'internalusers' created or updated
Will update '_doc/actiongroups' with /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/action_groups.yml
SUCC: Configuration for 'actiongroups' created or updated
Will update '_doc/tenants' with /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/tenants.yml
SUCC: Configuration for 'tenants' created or updated
Will update '_doc/nodesdn' with /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/nodes_dn.yml
SUCC: Configuration for 'nodesdn' created or updated
Will update '_doc/whitelist' with /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/whitelist.yml
SUCC: Configuration for 'whitelist' created or updated
Will update '_doc/audit' with /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/audit.yml
SUCC: Configuration for 'audit' created or updated
Done with success

Correr el siguiente comando para asegurar que la instalacion fue exitosa:

curl -X GET https://192.168.43.101:9200 -u admin:admin -k

Debe devolver lo siguiente:

{
"name" : "node-1",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "qLythfIZQLGNv798eGcTpA",
"version" : {
"number" : "7.10.2",
"build_flavor" : "oss",
"build_type" : "deb",
"build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
"build_date" : "2021-01-13T00:42:12.435326Z",
"build_snapshot" : false,
"lucene_version" : "8.7.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

El plugin analizador de desempeño OpenDistro para Elasticsearch está instalado por defecto y puede tener un impacto negativo en los recursos del sistema. Se recomienda removerlo con el siguiente comando:

/usr/share/elasticsearch/bin/elasticsearch-plugin remove opendistro-performance-analyzer

Reiniciar el servicio de elasticsearch:

systemctl restart elasticsearch

2.3- Instalación de FileBeat

Filebeat es una herramienta en el servidor Wazuh que reenviará, de manera segura, las alertas y eventos archivados a Elasticsearch.

apt install filebeat -y

Descargar la preconfiguración de Filebeat usada para reenviar las alertas de Wazuh a Elasticsearch:

curl -so /etc/filebeat/filebeat.yml https://packages.wazuh.com/resources/4.2/open-distro/filebeat/7.x/filebeat_all_in_one.yml

Descargar las plantillas para alertas de Elasticsearch:

curl -so /etc/filebeat/wazuh-template.json https://raw.githubusercontent.com/wazuh/wazuh/4.2/extensions/elasticsearch/7.x/wazuh-template.json && \
chmod go+r /etc/filebeat/wazuh-template.json

Descargar el módulo de Wazuh para Filebeat:

curl -s https://packages.wazuh.com/4.x/filebeat/wazuh-filebeat-0.1.tar.gz | tar -xvz -C /usr/share/filebeat/module

Debe devolver lo siguiente:

wazuh/
wazuh/module.yml
wazuh/archives/
wazuh/archives/config/
wazuh/archives/config/archives.yml
wazuh/archives/ingest/
wazuh/archives/ingest/pipeline.json
wazuh/archives/manifest.yml
wazuh/alerts/
wazuh/alerts/config/
wazuh/alerts/config/alerts.yml
wazuh/alerts/ingest/
wazuh/alerts/ingest/pipeline.json
wazuh/alerts/manifest.yml
wazuh/_meta/
wazuh/_meta/config.yml
wazuh/_meta/fields.yml
wazuh/_meta/docs.asciidoc

Copiar los certificados de Elasticsearch en el directorio /etc/filebeat/certs:

mkdir /etc/filebeat/certs && \
cp ~/certs/root-ca.pem /etc/filebeat/certs/ && \
mv ~/certs/filebeat* /etc/filebeat/certs/

Habilitar e iniciar el servicio de filebeat:

systemctl daemon-reload && \
systemctl enable --now filebeat && \
systemctl status filebeat

Para asegurarse de que el agente funciona, correr lo siguiente:

filebeat test output

2.3- Instalación de Kibana

Instalar Kibana:

apt install opendistroforelasticsearch-kibana -y

Descargar el fichero de configuración de Kibana:

curl -so /etc/kibana/kibana_all_in_one.yml https://packages.wazuh.com/resources/4.2/open-distro/kibana/7.x/kibana_all_in_one.yml && \
cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml.orig && \
cp /etc/kibana/kibana_all_in_one.yml /etc/kibana/kibana.yml
En el fichero de configuración /etc/kibana/kibana.yml la opción server.host tiene el valor 0.0.0.0. Esto significa que Kibana podrá ser accedido desde afuera y aceptar todas las IPs disponibles en el host. Este valor puede ser cambiado por una dirección IP especifica, si es necesario.

Crear el directorio /usr/share/kibana/data:

mkdir /usr/share/kibana/data && \
chown -R kibana:kibana /usr/share/kibana/data

Instalar el plugin Wazuh Kibana. La instalación del plugin debe hacerse desde el directorio home de Kibana, como sigue:

cd /usr/share/kibana && \
/usr/share/kibana/bin/kibana-plugin install https://packages.wazuh.com/4.x/ui/kibana/wazuh_kibana-4.2.5_7.10.2-1.zip --allow-root

Debe devolver lo siguiente:

Attempting to transfer from https://packages.wazuh.com/4.x/ui/kibana/wazuh_kibana-4.2.5_7.10.2-1.zip
Transferring 33111704 bytes....................
Transfer complete
Retrieving metadata from plugin archive
Extracting plugin archive
Extraction complete
Plugin installation complete

Copiar los certificados de Elasticsearch en el directorio /etc/kibana/certs:

mkdir /etc/kibana/certs && \
cp ~/certs/root-ca.pem /etc/kibana/certs/ && \
mv ~/certs/kibana* /etc/kibana/certs/ && \
chown kibana:kibana /etc/kibana/certs/*

Enlazar el socket de Kibana al puerto privilegiado 443:

setcap 'cap_net_bind_service=+ep' /usr/share/kibana/node/bin/node

Habilitar e iniciar el servicio de Kibana:

systemctl daemon-reload && \
systemctl enable --now kibana && \
systemctl status kibana

Acceder a la interfaz web:
– URL: https://<wazuh_server_ip>
– user: admin
– password: admin

3- Instalación del agente en Linux

El agente corre en el host que se desea monitorear y se comunica con el Wazuh manager, enviando datos casi en tiempo real a traves de un canal encriptado y autenticado. El despliegue de un agente Wazuh en sistemas Linux usa variables de despliegue que facilitan la tarea de instalaciUn, registro y configuración del agente.

El agente también puede desplegarse en hosts windows.

Entonces, en la PC/VM que se desee monitorear:

Instalar la llave GPG y agregar el repo:

curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | apt-key add - && \ 
echo "deb https://packages.wazuh.com/4.x/apt/ stable main" | tee -a /etc/apt/sources.list.d/wazuh.list
Debe devolver:
OK

Actualizar la informacion de paquetes:

apt update

3.1- Registro del agente por el método de inscripción

Wazuh incluye un proceso de registro que provee al usuario con mecanismo automatizado para inscribir agentes con pasos mínimos de configuración. Esta característica está disponible para Wazuh >=4.0.0

Editar la variable WAZUH_MANAGER y especificar la dirección IP o el hostname del servidor, así como el nombre del agente (en este caso wazuh-server):

WAZUH_MANAGER="192.168.43.101" apt install wazuh-agent

Modificar el fichero de configuración del agente:

cp /var/ossec/etc/ossec.conf /var/ossec/etc/ossec.conf.orig
nano /var/ossec/etc/ossec.conf

Dejar el bloque de configuración del cliente, como sigue:

# [...]
<client>
<server>
<address>192.168.43.101</address>
<port>1514</port>
<protocol>tcp</protocol>
</server>
<config-profile>ubuntu, ubuntu20, ubuntu20.04</config-profile>
<notify_time>10</notify_time>
<time-reconnect>60</time-reconnect>
<auto_restart>yes</auto_restart>
<crypto_method>aes</crypto_method>
<enrollment>
<agent_name>client1</agent_name>
</enrollment>
</client>
# [...]

Habilitar e iniciar el agente:

systemctl daemon-reload
systemctl enable --now wazuh-agent

Y ya podremos ver en la web los agentes desplegados.

5- Ideas finales

En muchas empresas es una necesidad imperiosa tener un SIEM. Wazuh no solo trae como opciones el monitoreo de archivos sensibles, las alertas en caso de malware, detección de vulnerabilidades (al más puro estilo de GVM), sino que además puede ser integrado con Suricata, con VirusTotal, IPAbuse

Autores:

  • Frank Morales
  • Franco Díaz

¿De cuánta utilidad te ha parecido este contenido?

Frank Morales

Ver comentarios

  • Excelente post y guia de instalacion, estoy iniciandome con esta herramienta de siem, donde lo tengo montado es en aws y pues necesito integrar https pero unicamente en la red interna no para tener acceso de manera publica, tengo unos certificados pero al momento de implementarlos ya no levanto el servicio trate reestablecerlo y ya no funciono jaja elimine y monte uno nuevo pero si necesito que desde un equipo (en la misma red interna de aws) poder acceder al wazuh por https valido....

  • En estos momentos lo que tengo desplegado en mis infraestructuras es Splunk que es el SIEM nativo de Snort, pero debido a las leyes del embargo es un dolor de cabeza adquirir las licencias y demas, gracias a los autores de este tutorial, y de todos los otros que hay en esta maravillosa pagina

  • Hola, es un gusto saber que se ha puesto el empeño de implementar esta solucion, contrarestando los efectos negativos de los cyberataques, creo que esta solucion no es un simple SIEM, es mas bien a mi parecer ademas de ser un SIEM es un EDR.

    Saludos y agradecido por su esfuerzo.

  • Saludos hermano muy bueno e manual, es una gran herramienta.
    Veo que usas un certificado autogenerado por un script de la herramienta, seria bueno que hicieran uno con una entidad certificadora propia. Y si pudieran seguir la serie con la configuración de los parámetros de detección de intrusiones contra MITRE,o algo practico de la integración con Suricata,VT. o IPAbuse. ??

Compartir
Publicado por
Frank Morales
Etiquetas: SIEM

Entradas recientes

Alta disponibilidad de sus base de datos con Percona XtraDB Cluster en Kubernetes

Uno de los grandes retos al que nos podemos enfrentar cuando una aplicación crece, es…

8 meses hace

Home automation (Parte 3) – ESPHome

Qué es lo que deseo hacer en este capítulo? Básicamente un sonoff, quiero encender/apagar las…

1 año hace

Home automation (Parte 2) – Home Assistant

Hace algunos meses estoy escuchando hablar del proyecto Home Assistant (HA). En palabras literales del…

1 año hace

Home automation (Parte 1)

Desde hace varios meses vengo con la idea de automatizar la casa donde vivo. Poco…

1 año hace

Cocinando una imagen personalizada de OpenWRT

El artículo describe el uso para un caso particular de OpenWRT y la creación de…

1 año hace