Regles i alertes amb ElastAlert 2

Comença la festa com deia l'altre… us vau anar mostrant algunes cosetes que crec us van agradar per poder explotar els vostres logs i anar evolucionant el nostre SIEM en un SOC, temes molt interessants. De primer tenim ElastAlert2, que és una eina de codi obert que ens permetrà generar alertes basades en regles amb dades emmagatzemades a Elasticsearch.

Si guardes, per exemple logs a Elasticsearch, bé siguin logs del teu Directori Actiu, d' Entra, del teu firewall, dels teus servidors, llocs o altres cadells… podrem realitzar consultes de manera automatitzada mitjançant una sèrie de regles, per després alertar-nos si ens interessés d'alguna situació (o executar accions). Doncs ElastAlert 2 ha vingut per a això, per ajudar-nos, podrem crear (o importar) tantes regles com necessitem que facin les consultes que necessitem.

En aquest document veurem un exemple concret, no es, hi ha tantes possibilitats… vam intentar detectar quan el nostre sistema està compromès, detectant activitats sospitoses (o malicioses), al final es tracta de prevenir mals majors, bé sigui alertant-nos o generant accions que mitiguin l'escenari. Doncs això, en l'exemple que ens toca, intentarem detectar quan algú (per exemple) s'ha lloat en un firewall FortiGate de manera correcta. Com és un primer document farem això, detectar-ho, i generar una alerta per Telegram. En altres documents veurem moltes més cosiques que es poden fer.

Txapes a part, comencem! Què necessitem? Doncs el de sempre! paciència i Docker!🤣 Així que en una màquina amb un Linux que tinguem per a aquests menesters, i després d'instal·lar Docker i Docker Compose, doncs vam desplegar amb ell un contenidor, així de fàcil, aquest contenidor, ElastAlert2, serà l' encarregat de llegir els fitxers de regles que deixem en una carpeta i fer, el que hagi de fer 😅.

git clone https://github.com/jertel/elastalert2.git cd elastalert2 mkdir config mkdir rules

I creem el nostre docker-compose.yml amb alguna cosa com això:

version: '3.9'
services:
    elastalert2:
        image: 'jertel/elastalert2:latest'
        volumes:
            - './rules:/opt/elastalert/rules'
            - './config/elastalert.yaml:/opt/elastalert/config.yaml'
        container_name: elastalert restart: unless-stopped networks:
           red_elastalert2:

networks:
  red_elastalert2:
    driver: bridge

I abans de res, haurem d'editar també el fitxer de configuració d'ElastAlert2 './config/elastalert.yaml', on indicarem el servidor d'Elasticsearch, el seu port, els credencials d' accés… i ja que estem, vam posar-li ja les dades del nostre Telegram, ja que hem dit que volem rebre alertes d'aquest tipus.

es_host: "SERVIDOR_ELASTICSEARCH"
es_port: PORT es_username: USUARI es_password: CONTRASENYA rules_folder: rules run_every:
  minutes: 1
buffer_time:
  minutes: 1
writeback_index: elastalert_status alert_time_limit.days: 2

telegram_bot_token: "TOKEN_BOT_TELEGRAM"
telegram_room_id: "ID_GRUPO_TELEGRAM"
telegram_parse_mode: "html"
alert_text_type: alert_text_only

El tenim llest, no queda més que desplegar-lo, i us deixo sota el comandament per veure-li els logs per si teniu algun incident:

sudo docker compose up -d sudo docker logs elastalert -f

I ara queda la feina dura 🤠la part bonica 😍 que no és més que crear les regles que necessitem, tantes com, en aquest cas alertes volem rebre, això o importar regles existents 😉. Us deixo l'exemple d'una regla (./rules/OpenServicesIT-Fortinet-FortiGate-Inici-sesion-correcte.yaml) on veurem el que esperem, una regla que buscarà logs en un FortiGate amb Inicis de sessió correctes, això és, cada vegada que algú inicia sessió en un FortiGate, per GUI o CLI, de manera satisfactòria. Aquesta alerta és la que rebrem, en aquest cas per Telegram i només farem (per ara)….

name: Fortinet-FortiGate-Inicio-sesion-correcto type: frequency num_events: 1

index: filebeat-* threshold: 10
use_count_query: false timeframe:
  minutes: 3

filter:
- query:
    query_string:
      query: 'tags: fortigate AND fortinet.firewall.action: login AND rule.description: "login successful"'

alert:
  - telegram alert_subject: <b>FortiGate - Inici de sessió</b>

alert_text: |
  Ha iniciat sessió correctament un administrador al FortiGate, més info:
  Usuari: {0}
  Mètode: {1}
  Adreça IP origen: {2}
  Nom del FW: {3}
alert_text_args: ["source.user.name", "fortinet.firewall.method", "source.ip", "observer.name"]

Com veieu, té un format de la regla que haurem de complir de manera minuciosa, hi ha moltes possibilitats, en aquest cas en particular cada 1 minuts farem una query d'Elasticsearch i quan tinguem 1 esdeveniment, doncs generarà una alerta així de bonica a Telegram. Tampoc torneu al Telegram amb alertes 'tontas’ que per això tindrem altres eines de gestió d'incidents, però resulta un exemple molt pràctic de mostrar.

Una vegada creada la nostra regla, o quan les modifiquem, ElastAlert2 les recarregarà de manera automàtica, no cal que reiniciem res. I així de fàcil, això es posarà a buscar el que necessitem al nostre Elasticsearch! Segurament us posi alguns altres exemples de regles curioses que es poden fer amb ElastAlert2, com sigui comprovar contra llistes negres, detecció de viatges impossibles o el viatger del temps (o com es digui), integracions amb decisions de Crowdsec… hi ha tela que tallar…

Desitjant que us vagi fenomenal, us cuideu, i com sempre, paraigües per a la pluja i ombra per al sol 😅 quines frases de vell… una abraçada! 🫂

Posts recomanats

Autor

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, no dubtis a contactar amb mi, us intentareu ajudar sempre que pugui, compartir és viure ;) . Gaudir dels documents!!!