Jak jsem si udělal vlastní XDR/IDS z Raspberry Pi - 2. část

Raspberry Pi je připraveno, dalším krokem bude instalace Suricata. Tu jsem se rozhodl nechat běžet přímo na Ubuntu server, na rozdíl od dalších aplikací, které budou spouštěny přes Docker.

1. Instalace Suricata

# Přidání Suricata PPA repozitáře
sudo add-apt-repository ppa:oisf/suricata-stable -y
sudo apt update

# Instalace Suricata a pomocných nástrojů
sudo apt install -y suricata jq tcpdump

2. Zastavení služby před konfigurací

sudo systemctl stop suricata

3. Identifikace síťového rozhraní

ip a

Zapamatujte si název vašeho hlavního síťového rozhraní (pravděpodobně eth0).

4. Základní konfigurace

sudo nano /etc/suricata/suricata.yaml

V konfiguračním souboru proveďte následující úpravy:

Konfigurace síťového rozhraní

Najděte sekci af-packet (cca řádek 580) a upravte ji:

af-packet:
  - interface: eth0 # Nahraď svým rozhraním
    cluster-id: 99 # Unikátní ID pro klastrovací mechanismus
    cluster-type: cluster_flow # Distribuce paketů mezi vlákny
    defrag: yes # Povoluje defragmentaci IP paketů
    use-mmap: yes # Používá memory mapping pro efektivnější přenos dat
    tpacket-v3: yes # Používá novější verzi tpacket rozhraní
    buffer-size: 64mb # Pro Raspberry je vhodná menší hodnota
    disable-promisc: no # Povol promiskuitní režim

Konfigurace domácí sítě

Najděte sekci vars (na začátku souboru) a upravte definici domácí sítě:

vars:
  address-groups:
    HOME_NET: "[192.168.1.0/24]" # Upravte rozsah podle vlastní sítě
    EXTERNAL_NET: "!$HOME_NET"

Nastavení režimu detekce

Najděte default-mode a nastavte režim detekce:

default-mode: ids # IDS = pouze detekce, IPS = detekce a prevence

Pro potvrzení aktuálního režimu můžete zkusit:

sudo suricata --dump-config | grep mode

Konfigurace výstupů

Najděte sekci outputs a upravte ji podle svých potřeb:

outputs:
  - fast:
      enabled: yes
      filename: fast.log
      append: yes
  - eve-log:
      enabled: yes
      filetype: regular
      filename: eve.json
      types:
        - alert:
            metadata: yes
            tagged-packets: yes
        - http:
            extended: yes
        - dns:
            query: yes
            answer: yes
        - tls:
            extended: yes
        - files:
            force-magic: yes
        - ssh
        - flow
        - netflow
        - smtp
        - stats:
            totals: yes
            threads: yes
        - dhcp:
            enabled: yes
        - rdp

Pokud chcete zachytávat síťový provoz při detekci útoku, povolte také pcap-log:

- pcap-log:
    enabled: yes
    filename: log.pcap
    limit: 100mb
    max-files: 10

5. Konfigurace pravidel

5.1. Instalace nástroje suricata-update

sudo apt install -y python3-pip
sudo pip3 install --upgrade suricata-update

Pokud dostanete chybu o externě spravovaném prostředí, máme dvě alternativní řešení:

Varianta 1: Použití virtuálního prostředí a wrapper skriptu (doporučeno)

sudo apt install -y python3-venv python3-full

# Vytvořte virtuální prostředí
mkdir -p ~/suricata-env
mkdir -p ~/bin
python3 -m venv ~/suricata-env

# Aktivace prostředí
source ~/suricata-env/bin/activate

# Nainstalujte suricata-update
pip install suricata-update

# Vytvořte wrapper skript
echo '#!/bin/bash
source ~/suricata-env/bin/activate
~/suricata-env/bin/suricata-update "$@"' > ~/bin/suricata-update-wrapper
chmod +x ~/bin/suricata-update-wrapper

Pro opuštění virtuálního prostředí Python:

deactivate

Později tento wrapper skript můžete použít přes:

sudo ~/bin/suricata-update-wrapper

Varianta 2: Použití pipx (jednodušší)

sudo apt install -y pipx
pipx ensurepath

pipx install suricata-update

# Použití
# pipx run suricata-update

5.2. Konfigurace aktualizace pravidel

# Vytvoření konfiguračního adresáře
sudo mkdir -p /etc/suricata/update

# Konfigurace aktualizace
sudo nano /etc/suricata/update/enable.conf

Přidejte následující obsah:

et/open
tgreen/hunting
oisf/trafficid
sslbl/ssl-fp-blacklist
ptresearch/attackdetection

5.3. Stažení a aplikace pravidel

sudo suricata-update

5.4. Automatické aktualizace pravidel

sudo crontab -e

Přidejte řádek:

0 1 * * * /usr/bin/suricata-update

Pokud používáte wrapper skript, použijte místo toho:

0 1 * * * /home/tvoje_uživatelské_jméno/bin/suricata-update-wrapper

6. Konfigurace promiskuitního režimu

# Vytvořte nový soubor v systemd
sudo nano /etc/systemd/system/promiscuous-eth0.service

Obsah souboru (upravte podle vašeho rozhraní):

[Unit]
Description=Set Promiscuous Mode on eth0
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/ip link set dev eth0 promisc on
RemainAfterExit=yes
ExecStop=/usr/sbin/ip link set dev eth0 promisc off

[Install]
WantedBy=multi-user.target

Aktivace služby:

sudo systemctl daemon-reload
sudo systemctl enable promiscuous-eth0.service
sudo systemctl start promiscuous-eth0.service

7. Konfigurace systemd služby Suricata

sudo nano /etc/default/suricata

Upravte soubor:

# Konfigurace pro systemd službu
SURICATA_OPTIONS="-c /etc/suricata/suricata.yaml --af-packet"

8. Nastavení správných oprávnění pro logy

sudo chown -R suricata:suricata /var/log/suricata/
sudo chmod -R 750 /var/log/suricata/

9. Spuštění a povolení služby

sudo systemctl start suricata
sudo systemctl enable suricata

10. Ověření správné funkce

10.1. Kontrola stavu služby

sudo systemctl status suricata

10.2. Kontrola logů

sudo tail -f /var/log/suricata/suricata.log

10.3. Test detekce útoků

# Test detekce známých vzorků
curl http://testmynids.org/uid/index.html

10.4. Kontrola zachycených alertů

sudo tail -f /var/log/suricata/fast.log

10.5. Detailnější pohled na alerty v JSON formátu

sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="alert")'

10.6. Kontrola zachytávání síťového provozu

sudo tcpdump -i eth0 -n -c 100

Měli byste vidět pakety, které nepatří přímo vašemu Raspberry Pi, což potvrdí funkčnost port mirroringu.

11. Dodatečné nastavení (volitelné)

11.1. Konfigurace rotace logů

sudo nano /etc/logrotate.d/suricata

Obsah souboru:

/var/log/suricata/*.log /var/log/suricata/*.json {
    rotate 7
    daily
    missingok
    notifempty
    compress
    delaycompress
    create 640 suricata suricata
    sharedscripts
    postrotate
        systemctl restart suricata
    endscript
}

11.2. Optimalizace výkonu pro Raspberry Pi

sudo nano /etc/suricata/suricata.yaml

Najděte sekci threading a upravte ji podle možností Raspberry Pi 5:

threading:
  set-cpu-affinity: yes
  detect-thread-ratio: 1.0
  cpu-affinity:
    - management-cpu-set:
        cpu: [0]
    - receive-cpu-set:
        cpu: [0]
    - decode-cpu-set:
        cpu: [1]
    - stream-cpu-set:
        cpu: [2]
    - detect-cpu-set:
        cpu: ["3-"]

11.3. Restart a ověření po restartu

sudo reboot

Po restartu ověřte stav Suricata:

sudo systemctl status suricata

11.4. Sledování výkonu systému

Pro sledování zatížení systému můžete použít:

htop

nebo pro sledování I/O operací:

sudo apt install iotop
sudo iotop

12. Ověření automatického startu

Suricata by se měla po restartu Raspberry Pi automaticky spustit. Můžete si to ověřit pomocí následujícího příkazu:

sudo systemctl is-enabled suricata

Pokud vám příkaz vrátí “enabled”, znamená to, že Suricata je nastavena tak, aby se spouštěla automaticky při startu systému.


Poznámka k nastaveným pravidlům:

  • et/open - Emerging Threats Open ruleset, volně dostupná sada pravidel pro detekci různých typů útoků a malwaru
  • tgreen/hunting - Pravidla pro threat hunting zaměřená na identifikaci podezřelých aktivit
  • oisf/trafficid - Pravidla pro identifikaci různých typů síťového provozu a protokolů
  • sslbl/ssl-fp-blacklist - Pravidla identifikující podezřelá SSL/TLS spojení na základě známých otisků
  • ptresearch/attackdetection - Sada pravidel pro detekci aktivních útoků a exploitů

Užitečné příkazy pro správu pravidel

Seznam všech dostupných zdrojů pravidel:

suricata-update-wrapper list-sources

Seznam aktuálně povolených zdrojů pravidel:

suricata-update-wrapper list-enabled-sources

Detailní informace o zdroji pravidel:

suricata-update-wrapper describe-source et/open

Seznam všech aktuálně stažených a povolených pravidel:

suricata-update-wrapper list-rules
Maltego - komplexní nástroj pro získávání a analýzu informací
Newer post

Rozdrobené cookies

Rozdrobené cookies

Start the conversation