Test di Suricata 🛡️

📋 Introduzione

Suricata è un motore open source ad alte prestazioni per Network Intrusion Detection (IDS), Intrusion Prevention (IPS) e Network Security Monitoring (NSM), sviluppato e mantenuto dalla Open Information Security Foundation (OISF).
Questo repository mette a disposizione un ambiente chiavi in mano, basato su Docker e Docker Compose, per schierare Suricata in modalità IDS (con opzione IPS) su una rete industriale simulata. Potrai così sperimentare regole di rilevamento personalizzate, generare traffico realistico e visualizzare gli allarmi in tempo reale.

🎯 Scopo

Configurare Suricata in modalità IDS (e IPS, se serve) per proteggere una rete industriale simulata.

🛠️ Caratteristiche principali

  • Modalità flessibile: Suricata può funzionare in IDS per il monitoraggio passivo o in IPS inline per bloccare automaticamente il traffico sospetto.
  • Regole personalizzate: Definisci e testa firme in custom.rules, da semplici scansioni di porte fino ad anomalie di protocolli industriali.
  • Simulazione del traffico: Gli script nella cartella scripts/ creano traffico sia legittimo che malevolo, simulando workstation (A, B), host non autorizzati (U) e un nodo attaccante (M).
  • Architettura modulare: Ogni componente gira in un container dedicato, per estendere facilmente la topologia o sostituire parti con configurazioni più avanzate.
  • Visualizzazione in tempo reale: Gli allarmi vengono inviati a Elasticsearch e mostrati in una dashboard Kibana (template inclusi), così da monitorare le rilevazioni e analizzare i trend di traffico.

🌐 Topologia di rete

 +-----+         +-----+   +-----+
 |  A  |         |  B  |   |  U  |
 +-----+         +-----+   +-----+ 
     \             /         /
      \           /---------
       \         /
         +-----+           +-----+
         |  S  | --------- |  M  |
         +-----+           +-----+
            ⇅            /
      .~~~~~~~~~~~.     /
   .~~   INTERNET   ~~.
  '~~~~~~~~~~~~~~~~~~~'
  • A e B: workstation legittime che generano traffico normale.
  • U: host non autorizzato, le cui richieste dovrebbero scatenare allarmi.
  • M: macchina malevola che esegue exploit e scansioni.
  • S: container Suricata, funge da router e sensore IDS/IPS; il traffico è replicato verso Suricata senza modificare il flusso principale.

🚀 Avvio

  1. Costruisci e avvia i container:

    make
    

    oppure:

    docker-compose up -d --build
    
  2. Apri l’interfaccia grafica:
    Vai su http://localhost:3000.

⚙️ Funzionamento

  1. Cattura dei pacchetti: Suricata sfrutta AF‑Packet o NFQueue in modalità promiscua per replicare tutto il traffico dal router “S”.
  2. Verifica delle regole: Ogni pacchetto viene confrontato con le firme in custom.rules; le corrispondenze generano allarmi (o, in IPS, il blocco del pacchetto).
  3. Ingestione dei log: Allarmi e flussi vengono scritti in JSON su eve.json, raccolti da Filebeat e inviati a Elasticsearch tramite Logstash.
  4. Dashboard: Con i template Kibana inclusi puoi esplorare:
    • Le firme più attivate
    • Mappe di calore degli indirizzi IP
    • Andamento temporale degli allarmi
    • Suddivisione per protocollo

🧪 Test

Nel container Malicious (M), esegui gli script .sh presenti in scripts/ per simulare minacce ICS (fuzzing Modbus/TCP, scansioni di porte, ecc.) e verificare il rilevamento da parte di Suricata.

📊 Dashboard (GUI)

La GUI, disponibile su http://localhost:3000, offre una vista interattiva dei dati di Elasticsearch.
Per configurarla:

  1. Aggiungi una nuova fonte dati in Elasticsearch: http://elasticsearch:9200.
  2. Importa il file JSON della dashboard (cartella dashboards/, se presente).
  3. Personalizza i grafici (numero di allarmi, regole principali, volume di traffico).

suricata-gui