Wazuh SIEM, Suricata IDS, OpenWRT

Suricata to popularny system wykrywania intruzów (IDS), który monitoruje ruch sieciowy pod kątem podejrzanych działań. Z kolei Wazuh XDR (Extended Detection and Response) jest to narzędzie, które umożliwia gromadzenie, analizowanie i korelowanie danych z różnych źródeł, takich jak systemy operacyjne, urządzenia sieciowe, aplikacje, bazy danych i inne.. Integracja tych dwóch systemów działających na oddzielnych maszynach wirtualnych umożliwia stworzenie rozwiązania do monitorowania bezpieczeństwa. W tym artykule omówię, jak połączyć Wazuh SIEM z Suricata IDS, uruchomionych na osobnej maszynie wirtualnej, która otrzymuje ruch sieciowy przekierowany z routera OpenWRT za pomocą iptables i modułu 'TEE' który służy do klonowania pakietów sieciowych i przesyłania ich do innego hosta lub interfejsu sieciowego.

Osobiście korzystam z Proxmox jako platformy do zarządzania wirtualizacją, która umożliwia uruchamianie i zarządzanie maszynami wirtualnymi (VM) oraz kontenerami (LXC) na serwerze fizycznym. Dzięki gotowym obrazom OVA (Open Virtual Appliance), instalacja Wazuh może być znacznie uproszczona. Musimy tylko przekonwertować plik OVA do formatu zgodnego z Proxmox.

Kolejnym krokiem jest konfiguracja VM (Debian) dla Suricata IDS z dodatkowym interfejsem sieciowym używanym wyłącznie do nasłuchiwania pakietów przekazywanych przez OpenWRT (iptables-mod-tee). Konfiguracje dodatkowego mostka sieciowego w Proxmox, który zachowuje się jak HUB uzyskujemy poprzez parametr 'bridge_ageing 0'

auto vmbr1
iface vmbr1 inet static
        address 172.16.0.2/24
        bridge-ports enp0s25
        bridge-stp off
        bridge-fd 0
        bridge_ageing 0

/etc/network/interfaces

Do maszyny wirtualnej podpinam dodatkowy interfejs sieciowy 'vmbr1' oraz uruchamiam Suricata w kontenerze Docker, co umożliwia łatwą instalację oraz zarządzanie.

Suricata (VM) NIC
services:
  suricata:
    image: jasonish/suricata:latest
    container_name: suricata
    cap_add:
      - NET_ADMIN
      - NET_RAW
      - SYS_NICE
    network_mode: "host"
    environment:
      TZ: 'Europe/Warsaw'
    volumes:
      - /opt/suricata/etc:/etc/suricata
      - /opt/suricata/logs:/var/log/suricata
    command: -i ens19
    restart: always

docker-compose.yml

Potrzebujemy jeszcze zainstalować agenta Wazuh czyli lekki program kliencki, który jest instalowany na systemach końcowych (serwerach, komputerach stacjonarnych, maszynach wirtualnych, kontenerach itp.) w celu monitorowania, zbierania danych oraz zapewnienia ochrony przed zagrożeniami na naszej maszynie gdzie uruchomiony jest IDS.

Podstawowa konfiguracja agenta Wazuh jak wskazanie pliku 'eve.json' czyli głównego pliku dziennika używanego przez Suricata do zapisywania zdarzeń związanych z analizą ruchu sieciowego oraz Suricata gdzie musimy wskazać odpowiedni interfejs sieciowy jest opisana tutaj.

Ostatnim krokiem jest konfiguracja naszego routera czyli w tym przypadku OpenWRT aby duplikował pakiety sieciowe i przekazywał do maszyny wirtualnej gdzie uruchomiona jest Suricata za pomocą modułu 'TEE' w iptables.

iptables -t mangle -A POSTROUTING -j TEE --gateway 172.16.0.3

OpenWRT iptables traffic mirror

Teraz możemy sprawdzić czy pakiety są poprawnie duplikowane na docelowej maszynie za pomocą 'tcpdump' czyli narzędziu służącym do przechwytywania i analizowania pakietów sieciowych.

kamil@spelunca-deb:~$ curl testmyids.com
uid=0(root) gid=0(root) groups=0(root)

Maszyna w lokalnej sieci

root@NIDS:~# tcpdump -i ens19 tcp port http and dst 192.168.1.80 -X
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens19, link-type EN10MB (Ethernet), capture size 262144 bytes
12:46:21.962264 IP 217-160-0-187.elastic-ssl.ui-r.com.http > spelunca-deb.home.arpa.35586: Flags [P.], seq 1:299, ack 78, win 16, options [nop,nop,TS val 2255107924 ecr 101690976], length 298: HTTP: HTTP/1.1 200 OK
        0x0000:  4540 015e 95f4 4000 3906 0e12 d9a0 00bb  E@.^[email protected].......
        0x0010:  c0a8 0150 0050 8b02 8c05 257b 705f 1143  ...P.P....%{p_.C
        0x0020:  8018 0010 6313 0000 0101 080a 866a 3754  ....c........j7T
        0x0030:  060f ae60 4854 5450 2f31 2e31 2032 3030  ...`HTTP/1.1.200
        0x0040:  204f 4b0d 0a43 6f6e 7465 6e74 2d54 7970  .OK..Content-Typ
        0x0050:  653a 2074 6578 742f 6874 6d6c 0d0a 436f  e:.text/html..Co
        0x0060:  6e74 656e 742d 4c65 6e67 7468 3a20 3339  ntent-Length:.39
        0x0070:  0d0a 436f 6e6e 6563 7469 6f6e 3a20 6b65  ..Connection:.ke
        0x0080:  6570 2d61 6c69 7665 0d0a 4b65 6570 2d41  ep-alive..Keep-A
        0x0090:  6c69 7665 3a20 7469 6d65 6f75 743d 3135  live:.timeout=15
        0x00a0:  0d0a 4461 7465 3a20 4d6f 6e2c 2030 3220  ..Date:.Mon,.02.
        0x00b0:  5365 7020 3230 3234 2031 303a 3436 3a32  Sep.2024.10:46:2
        0x00c0:  3120 474d 540d 0a53 6572 7665 723a 2041  1.GMT..Server:.A
        0x00d0:  7061 6368 650d 0a4c 6173 742d 4d6f 6469  pache..Last-Modi
        0x00e0:  6669 6564 3a20 4d6f 6e2c 2031 3520 4a61  fied:.Mon,.15.Ja
        0x00f0:  6e20 3230 3037 2032 333a 3131 3a35 3520  n.2007.23:11:55.
        0x0100:  474d 540d 0a45 5461 673a 2022 3237 2d34  GMT..ETag:."27-4
        0x0110:  3237 3163 3566 3161 6334 6330 220d 0a41  271c5f1ac4c0"..A
        0x0120:  6363 6570 742d 5261 6e67 6573 3a20 6279  ccept-Ranges:.by
        0x0130:  7465 730d 0a0d 0a75 6964 3d30 2872 6f6f  tes....uid=0(roo
        0x0140:  7429 2067 6964 3d30 2872 6f6f 7429 2067  t).gid=0(root).g
        0x0150:  726f 7570 733d 3028 726f 6f74 290a       roups=0(root).

tcpdump -i ens19 tcp port http and dst 192.168.1.80

Zdarzenie widzimy również w logach Suricata w pliku 'fast.log' czyli dzienniku używanym do zapisywania alertów wykrywanych przez silnik IDS.

root@NIDS:/opt/suricata/logs# tail -f fast.log
09/02/2024-12:41:30.737578  [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 217.160.0.187:80 -> 192.168.1.80:39640

Suricata - fast.log

Incydenty przekazywane są również do interfejsu użytkownika w platformie Wazuh w celu wizualizacji danych.

Wazuh dashboard
Wazuh dashboard

Integracja Suricata IDS z Wazuh przynosi wiele korzyści, takich jak centralizacja zarządzania bezpieczeństwem, zaawansowana analiza zagrożeń oraz automatyzacja reakcji na incydenty. Dzięki połączeniu tych narzędzi możliwa jest konsolidacja danych z różnych źródeł, co ułatwia identyfikację i korelację zdarzeń, wspomagając wykrywanie bardziej złożonych ataków. Wazuh umożliwia również automatyczne działania naprawcze, powiadomienia o incydentach i monitorowanie zgodności z przepisami, co pomaga w spełnieniu wymogów audytowych.


Jeśli na interfejsie sieciowym, który służy do przechwytywania pakietów nie widzicie żadnego ruchu to problem może występować z trasowaniem ruchu oraz z dwoma domyślnymi bramami - rozwiązanie problem jest tutaj