Automatización SIEM DHIS2

Escrito por:

Etiquetas:

Publicado en:

Comparte en:

Uno de los aspectos de una postura de seguridad madura es lo preparada que está la organización para detectar y responder a las ciberamenazas: debido a una combinación de factores que hacen que los ciberataques sean más fáciles de llevar a cabo y, por tanto, más comunes, construir el sistema para detectar con prontitud dichos ataques y responder adecuadamente se convierte cada vez más en una necesidad urgente y temprana.

Por eso hemos creado un sistema automático de gestión de eventos de información de seguridad (SIEM) system for DHIS2 on lxd server infrastructure in dhis2-tools-dab: mediante la introducción de las nuevas características fue fácil desarrollar un nuevo contenedor de tipo es_siem... aportando el poder de ElasticSearch en la plataforma.

SIEM & ElasticSearch

ElasticSearch ha sido una referencia en el espacio de recopilación de registros durante un tiempo y su facilidad de instalación y gestión, gracias también a la interfaz de usuario web llamada Kibana, hizo para nosotros la elección por defecto para este sistema, además de la conocida fiabilidad, flexibilidad y la gran comunidad detrás del proyecto.

Aunque ElasticSearch nació como una solución de gestión de registros, está en la posición adecuada para ofrecer un buen sistema de alertas de seguridad, aunque algunas de sus mejores características en este sentido vienen como una suscripción de pago (más sobre esto en la sección Limitaciones).

Dicho esto, una solución SIEM debe proporcionar una creación de reglas flexible, mecanismos de notificación y alertas fáciles de consultar, todas etas cosas que ElasticSearch hace bien, de forma gratuita.

Configuración de un SIEM en DHIS2

Así que vamos a sumergirnos en la configuración y algunas primeras impresiones.

Esta configuración se realiza gracias al es_siem tipo de contenedor introducido con dhis2-tools-dab.

Puede consultar la es_siem y es_siem_postsetup para saber más sobre cómo está configurado el sistema y reproducirlo manualmente.

La posdata se configura en cada contenedor sistema journaldque centraliza los registros en un archivo que luego es analizado por la aplicación filebeat agent, que en última instancia envía los datos a ElasticSearch para su almacenamiento y análisis ya en formato JSON.

Para empezar, vamos a añadir la entrada de tipo de contenedor en el archivo de configuración de contenedores.

dab@battlechine:~$ sudo cat /usr/local/etc/dhis/containers.json
{
  "fqdn":"192.168.130.130",
  "email": "davide@dab.solutions",
  "environment": {
          "TZ": "Europe/Madrid"
  },
  "network": "192.168.0.1/24",
  "monitoring": "munin",
  "apm": "glowroot",
  "proxy": "nginx",
  "containers": [
    {
      "name": "proxy",
      "ip": "192.168.0.2",
      "type": "nginx_proxy"
    },
    {
      "name": "postgres",
      "ip": "192.168.0.20",
      "type": "postgres"
    },
    {
     "name": "siem",
     "ip": "192.168.0.200",
     "type": "es_siem"
    }
  ]
}

Como puede ver, se ha añadido la nueva sección denominada "siem": al ejecutar ./create_containers.shse identifica y crea el nuevo contenedor que falta:

dab@battlechine:~/dhis2-tools-ng-dab/setup$ sudo ./create_containers.sh
Skipping adding existing rule
Skipping adding existing rule (v6)
Skipping adding existing rule
Skipping adding existing rule (v6)
Reading package lists... Done
Building dependency tree
Reading state information... Done
auditd is already the newest version (1:2.8.5-2ubuntu6).
apache2-utils is already the newest version (2.4.41-4ubuntu3.13).
unzip is already the newest version (6.0-25ubuntu1.1).
jq is already the newest version (1.6-1ubuntu0.20.04.1).
The following packages were automatically installed and are no longer required:
  libfwupdplugin1 libpython2-dev libpython2-stdlib libpython2.7 libpython2.7-dev libpython2.7-minimal libpython2.7-stdlib python2 python2-dev python2-minimal python2.7
  python2.7-dev python2.7-minimal
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 34 not upgraded.
[2023-02-20 23:19:03] [WARN] [create_containers.sh] Container proxy already exist, skipping
[2023-02-20 23:19:03] [WARN] [create_containers.sh] Container postgres already exist, skipping
[2023-02-20 23:19:03] [INFO] [create_containers.sh] Creating siem of type es_siem (ubuntu 20.04)
Creating siem
waiting for network
[2023-02-20 23:19:11] [INFO] [create_containers.sh] Running setup from containers/es_siem

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

[...]

[2023-02-20 23:23:08] [INFO] [create_containers.sh] Configuring Elasticsearch and Kibana
[2023-02-20 23:23:08] [INFO] [create_containers.sh] Waiting for Kibana to be up&running (sleep 10s)
[2023-02-20 23:23:19] [INFO] [create_containers.sh] Waiting for Kibana to be up&running (sleep 10s)
[2023-02-20 23:23:51] [INFO] [create_containers.sh] Configuring journal for 'postgres'
[2023-02-20 23:23:52] [INFO] [dhis2-set-journal] Configuring postgres to log to journal
[2023-02-20 23:23:52] [INFO] [create_containers.sh] Configuring filebeat for 'postgres'
[2023-02-20 23:23:53] [INFO] [dhis2-set-elasticsearch] Retrieving filebeat 8.4.1 (arm64)
[2023-02-20 23:23:53] [INFO] [dhis2-set-elasticsearch] Installing filebeat
Selecting previously unselected package filebeat.
(Reading database ... 38331 files and directories currently installed.)
Preparing to unpack /tmp/filebeat.deb ...
Unpacking filebeat (8.4.1) ...
Setting up filebeat (8.4.1) ...
[2023-02-20 23:23:58] [INFO] [dhis2-set-elasticsearch] Configuring filebeat
Synchronizing state of filebeat.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable filebeat
Created symlink /etc/systemd/system/multi-user.target.wants/filebeat.service → /lib/systemd/system/filebeat.service.
[2023-02-20 23:24:01] [INFO] [dhis2-set-elasticsearch] Filebeat configured. All good
[2023-02-20 23:24:01] [INFO] [create_containers.sh] Configuring journal for 'proxy'
[2023-02-20 23:24:02] [INFO] [dhis2-set-journal] Configuring nginx to log to journal error logs and HTTP access logs
[2023-02-20 23:24:03] [INFO] [create_containers.sh] Configuring filebeat for 'proxy'
[2023-02-20 23:24:04] [INFO] [dhis2-set-elasticsearch] Retrieving filebeat 8.4.1 (arm64)
[2023-02-20 23:24:04] [INFO] [dhis2-set-elasticsearch] Installing filebeat
Selecting previously unselected package filebeat.
(Reading database ... 34741 files and directories currently installed.)
Preparing to unpack /tmp/filebeat.deb ...
Unpacking filebeat (8.4.1) ...
Setting up filebeat (8.4.1) ...
[2023-02-20 23:24:10] [INFO] [dhis2-set-elasticsearch] Configuring filebeat
Synchronizing state of filebeat.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable filebeat
Created symlink /etc/systemd/system/multi-user.target.wants/filebeat.service → /lib/systemd/system/filebeat.service.
[2023-02-20 23:24:13] [INFO] [dhis2-set-elasticsearch] Filebeat configured. All good
[2023-02-20 23:24:13] [INFO] [create_containers.sh] Configuring Kibana proxy access
[2023-02-20 23:24:14] [INFO] [create_containers.sh] Done configuring SIEM
[2023-02-20 23:24:14] [WARN] [create_containers.sh] Monitor container not existing or running. Skipping
dab@battlechine:~/dhis2-tools-ng-dab/setup$

Si todo va como se espera, debería poder acceder a la página web de Kibana:

Features built-ins

Puede obtener las credenciales a través de get_creds :

dab@battlechine:~/dhis2-tools-ng-dab/setup$ source libs.sh
dab@battlechine:~/dhis2-tools-ng-dab/setup$ get_creds elasticsearch
{ "service": "elasticsearch", "username": "elastic", "password": "c_2odlH7BoNAB=juUUkg" }
dab@battlechine:~/dhis2-tools-ng-dab/setup$

El es_siem_postscript configura automáticamente las siguientes funciones:

  • Rutina de transformación que transforma los registros procedentes de los contenedores en datos significativos;
  • Dos reglas de seguridad para alertar cuando se han realizado 3 intentos fallidos de inicio de sesión contra una instancia de DHIS2;
  • Un índice para almacenar esas alertas;
  • Dos cuadros de mando: uno para las alertas y otro para todos los registros.

Limitaciones

Intentemos activar la regla de "intentos fallidos de inicio de sesión": He realizado 4 intentos fallidos de inicio de sesión para el usuario admin at a DHIS2 instance. After few seconds, we will see the alert triggered in the alerta vista de datos:

Todos los registros se pueden ver en el principal data view and tweaks can be to further filter data:

There are some limitations that come with this predefined setup.

First, its ease of setup and management comes at a cost: some of the most interesting features around security comes at a price of a license, which means another added cost.

The built in rules are great as a starting point, but the information available is sometimes limited. Each connector exposes different values that can be used to craft enrich an alert: just to give an example, the email y es query connectors expose the actual logs that trigger the alert, while for the log threshold connector, only the triggered values are reported.

You may want to explore free alternatives like the ElasticSearch forked version OpenSearch.

From a purely technical point of view, a SIEM, by its nature, stores logs coming from every container, and the more activity there is, the more logs are generated and sent to ElasticSearch. The outcome is an increase amount of disk storage to keep up with the database entries. There are several ways you can avoid that, beside the ones officially recommended:

Another issue regards how DHIS2 manages logs and log entries: it’s not always clear how the logging and audit systems behave, therefore some experimentation is needed. Appropriately assign log entries to their severity level is another issue DHIS2 should address to make logs useful and concise.

Beyond

Having a SIEM system is just the first step to a thorough detection and response platform.

We strongly recommend developing your own detection rules that tie into your environment and workflow.

If you want to share them with us, please do so by opening a ticket in our Github repository.

From here, you can think about adding Kibana connectors, to build complex workflows like with a webhook notification used to integrate into a messaging application like Slack, Telegram or WhatsApp to receive real-time alerts notification, or to kick of immediate actions through a SOAR.

If you need more information or need assistance with setting up DHIS2 SIEM automation, don’t hesitate to contact us!

es_ESES