Configurazione di Suricata come sistema di prevenzione delle intrusioni (IPS)

Con la crescente popolarità dei crimini informatici, c’è un urgente bisogno che le aziende abbiano una migliore protezione contro gli hacker. Un Sistema di Prevenzione delle Intrusioni (IPS) è uno dei migliori modi per difendersi dagli attacchi informatici. Ma prima di cercare su internet un IPS, prova Suricata.

In questo tutorial, imparerai come configurare un IPS Suricata completamente funzionale su un server Linux per proteggere la tua rete da minacce online.

Pronto? Continua a leggere e inizia a proteggere la tua rete!

Prerequisiti

Questo tutorial sarà una dimostrazione pratica. Se desideri seguire il procedimento, assicurati di avere quanto segue:

  • A Linux server – This demo uses Ubuntu 20.04 LTS, but any Linux distribution will work.
  • A non-root user with sudo privileges.
  • A seconda della configurazione della tua rete e del modo in cui intendi utilizzare Suricata, potresti aver bisogno di più o meno CPU e RAM per il tuo server. In generale, più traffico hai intenzione di ispezionare, più risorse allocerai a Suricata. In un ambiente di sviluppo, pianifica di utilizzare almeno 2 CPU e 8 GB di RAM per iniziare, in modo che Suricata possa svolgere le sue attività senza compromettere la qualità del servizio per tutti gli utenti.

Installazione di Suricata e Aggiunta del Repository PPA

Suricata non viene installato di default su Ubuntu, ma l’installazione di Suricata è simile all’installazione di altri pacchetti nel sistema.

1. Esegui il comando apt update per aggiornare i pacchetti disponibili nel sistema.

sudo apt update -y
Updating the list of available packages

2. Successivamente, esegui il comando add-apt-repository per aggiungere il repository PPA mantenuto dall’Open Information Security Foundation (OISF). Aggiungendo il repository PPA, otterrai la versione più recente e stabile di Suricata (ppa:oisf/suricata-stable).

sudo add-apt-repository ppa:oisf/suricata-stable
Adding the PPA repository for Suricata

3. Esegui nuovamente il comando sudo apt update per caricare il repository Suricata appena aggiunto nell’indice dei pacchetti del tuo sistema.

sudo apt update -y

4. Ora, esegui il comando sudo apt policy per verificare di aver aggiunto correttamente il repository Suricata PPA. Assicurati di vedere il PPA di Suricata nell’elenco come mostrato di seguito prima di installare Suricata

sudo apt policy
Running the sudo apt policy

5. Esegui il seguente comando per installare suricata nel tuo sistema.

sudo apt install suricata -y
Installing Suricata on your system

6. Una volta completata l’installazione, esegui il comando systemctl status di seguito per verificare lo stato del servizio suricata.

sudo systemctl status suricata

Sotto, puoi vedere che il servizio Suricata è attivo (in esecuzione).

Checking the Suricata service status

Configurazione di Suricata

Il pacchetto Suricata viene fornito con un file di configurazione chiamato suricata.yaml situato nella directory /etc/suricata. Questo file di configurazione contiene molte impostazioni diverse per molti altri casi d’uso. Ma tieni presente che ci sono alcune impostazioni nel file di configurazione predefinito che devi modificare prima di utilizzare Suricata.

La modalità predefinita per Suricata è la modalità di rilevamento delle intrusioni (IDS), che registra, ma non elimina il traffico. Questa modalità viene utilizzata durante la configurazione e la familiarizzazione con Suricata. Una volta che ti senti più a tuo agio con Suricata e comprendi meglio i tipi di traffico di cui Suricata ti avviserà, puoi optare per attivare la modalità IPS.

Suricata aggiunge un campo nel suo formato JSON (ID di flusso della comunità). L’ID di flusso della comunità è un campo di 8 byte che ti consente di correlare i record generati da altre strumenti. Questa funzionalità è utile quando si utilizza Suricata in combinazione con altri strumenti come Bro o Elasticsearch.

1. Apri il file /etc/suricata/suricata.yaml nel tuo editor di testo preferito.

2. Trova una riga che contiene community-id: false e cambiala in community-id: true. Salva le modifiche ed esci dall’editor di testo.

Ogni volta che esaminerai gli eventi, vedrai l’ID del flusso della comunità nel loro output JSON.

Enabling Community ID

In seguito, esegui il seguente comando per trovare un dispositivo con una route predefinita nel tuo sistema (route show default). Il flag -p indica al comando ip di stampare il dispositivo in un formato leggibile dall’utente, mentre il flag -j stampa l’output in formato JSON.

Di default, Suricata è configurato per intercettare pacchetti da qualsiasi interfaccia di rete disponibile. Tuttavia, puoi modificare questo comportamento e specificare un’interfaccia su cui Suricata dovrà ascoltare all’avvio.

 ip -p -j route show default

Come puoi vedere di seguito, il parametro dev specifica l’interfaccia che Suricata utilizzerà per intercettare i pacchetti. In questa demo, l’interfaccia è eth0, ma la tua interfaccia potrebbe essere diversa, ad esempio tun0, wlan0 e così via.

Previewing the Network Interface

4. Infine, apri il file di configurazione /etc/suricata/suricata.yaml, individua il parametro interface sotto la sezione af-packet e modificalo di conseguenza. In questa demo, viene utilizzata eth0 come interfaccia per intercettare i pacchetti.

Salva le modifiche, ma mantieni aperto l’editor di testo per ora.

Editing the /etc/suricata/suricata.yaml configuration file

Configurazione della funzione di ricarica delle regole in tempo reale.

Hai configurato Suricata, ma questo è solo l’inizio della protezione della tua rete. Di solito, vorresti aggiungere regole all’istante e ricaricare automaticamente le regole. Come? La funzione di ricarica delle regole live di Suricata ti consente di aggiornare le regole al volo. Di conseguenza, non è necessario riavviare manualmente Suricata affinché le nuove regole abbiano effetto.

Apri il file /etc/suricata/suricata.yaml, copia/incolla le seguenti direttive alla fine del contenuto del file e salva le modifiche. Queste direttive ti consentono di abilitare la funzione di ricarica delle regole live.

Con questa impostazione in atto, quando modifichi/aggiorni i tuoi set di regole, le modifiche avranno effetto senza riavviare il servizio Suricata.

detect-engine:
  - rule-reload: true
Setting up the Live Rule Reloading

Ora esegui il comando kill riportato di seguito per notificare al tuo processo Suricata ($(pidof suricata)) di aggiornare le regole senza riavviare.

Il comando invia un segnale definito dall’utente (-usr2) all’ID del processo specificato, quindi Suricata esegue automaticamente le seguenti operazioni:

  • Carica la nuova configurazione per aggiornare le variabili e i valori delle regole.
  • Carica le nuove regole.
  • Costruisci un nuovo motore di rilevamento.
  • Scambia i vecchi e i nuovi motori di rilevamento.
  • Assicurati che tutti i thread siano aggiornati.
  • Rilascia il vecchio motore di rilevamento.
sudo kill -usr2 $(pidof suricata)

Aggiornamento dei set di regole di Suricata.

La funzione di ricarica delle regole live è pronta, ma non avrà uno scopo se non aggiorni i tuoi set di regole. Per impostazione predefinita, il pacchetto Suricata ha un set di regole limitato che rileva solo i protocolli Internet più comuni presenti nella directory /etc/suricata/rules.

A questo punto, riceverai un messaggio di errore Nessun file di regole corrisponde al pattern, come quello riportato di seguito, ogni volta che provi a avviare e utilizzare il tuo servizio Suricata. Questo messaggio di errore indica che non ci sono set di regole da utilizzare con Suricata.

Previewing Error Message when No Rulesets Exist

Per risolvere questo errore, fornisci file di set di regole alla tua istanza di Suricata. Fortunatamente, Suricata dispone di uno strumento chiamato suricata-update che ti aiuterà a ottenere ulteriori set di regole da fornitori terzi.

1. Esegui il comando seguente per ottenere un aggiornamento per la tua istanza di Suricata.

sudo suricata-update

Come puoi vedere di seguito, l’output indica che il comando suricata-update ha scaricato le regole connettendosi a https://rules.emergingthreats.net/open/. Il comando salva quindi le nuove regole nella directory /var/lib/suricata/rules/.

L’output stampa anche quanto segue:

  • Il numero totale (31737) di set di regole
  • Il numero di regole abilitate (24355)
  • Il numero di regole aggiunte (31737)/rimosse (0).
Updating Your Suricata Rulesets

Successivamente, esegui il comando seguente per elencare tutti i fornitori di set di regole (list-sources).

Il comando suricata-update scarica set di regole da molti fornitori, inclusi fornitori gratuiti e commerciali.

sudo suricata-update list-sources

Di seguito, puoi vedere una piccola parte della lista. Fai attenzione al nome del set di regole da cui desideri che Suricata scarichi specificamente i set di regole. In questo tutorial, verranno scaricati i set di regole et/open per dimostrazione (passaggio tre).

Listing all ruleset providers

3. Esegui il comando di seguito per recuperare e includere (enable-source) i set di regole et/open alle tue regole di Suricata.

sudo suricata-update enable-source et/open
Fetching the et/open rulesets

Infine, esegui nuovamente il comando suricata-update per caricare il nuovo set di regole selezionato.

sudo suricata-update

Convalida della configurazione di Suricata

Hai configurato Suricata e aggiunto set di regole, quindi è ora di convalidare le tue modifiche ed assicurarti che tutto funzioni come previsto. Il pacchetto Suricata dispone di un servizio di convalida integrato che consente di visualizzare eventuali deviazioni dalla configurazione corrente.

Esegui il comando suricata di seguito per convalidare le modifiche nel file di configurazione di Suricata (-c /etc/suricata/suricata.yaml). Il comando visualizza anche tutti i messaggi di convalida (-v).

Il flag -T indica a Suricata di eseguire in modalità “test” e “top down”. Entrambe le modalità hanno regole più rigorose per il matching dei pacchetti e sono meno inclini a generare falsi positivi.

sudo suricata -T -c /etc/suricata/suricata.yaml -v

Dato che Suricata è un firewall altamente configurabile, il test potrebbe richiedere diversi minuti per essere completato. Se non ci sono errori, vedrai un output simile a quello riportato di seguito che mostra un messaggio completo.

Validating Your Suricata Configuration: complete

Se il tuo file di configurazione presenta errori simili a quello riportato di seguito, Suricata stamperà ogni errore, indicando le linee specifiche che causano problemi. Se si ricevono questi errori, correggere ogni problema di configurazione uno per uno fino a quando la convalida avrà successo.

Validating Your Suricata Configuration: errors

Test delle regole di Suricata

Ora che i file di configurazione di Suricata sono stati convalidati, puoi eseguire Suricata per verificare che funzionino correttamente. Utilizzerai Suricata per testare l’ET Open (2100498) con il comando curl per rilevare attività/traffico sospetto.

Al momento, la tua istanza di Suricata dispone di oltre 30.000 regole che Suricata ha recuperato da vari set di regole. Quindi un test completo di tutte le regole con la loro spiegazione non rientrerà in questo tutorial.

1. Esegui il comando curl di seguito per generare del traffico/richieste HTTP/attività dal sito web TestMyNIDS. TestMyNIDS è un progetto di e-learning dedicato al supporto dei test, alla convalida e al confronto di NIDS. Il sito web fornisce una piattaforma unica per l’analisi comparativa di NIDS e strumenti correlati.

Puoi utilizzare questo sito web per testare qualsiasi attività/traffico sospetto al fine di verificare se il tuo set di regole configurato funziona come previsto.

curl http://testmynids.org/uid/index.html

I dati di risposta sono progettati per generare un falso allarme, fingendo di essere un utente root Linux/Unix. E questo utente root si trova su un sistema che potrebbe essere compromesso.

Testing Your Suricata Rules

In seguito, esegui il comando grep di seguito per esaminare il file fast.log nella directory /var/log/suricata/ alla ricerca di un messaggio di allarme corrispondente 2100498. Questo comando controlla il file di log per l’allerta dell’utente.

Oltre al file fast.log, un altro file di registro da tenere d’occhio è il file eve.log nella stessa directory.

grep 2100498 /var/log/suricata/fast.log

Vedrai un output simile a quello di seguito che mostra l’indirizzo IPv4 pubblico del tuo sistema.

Examining the fast.log file

3. Ora, esegui il comando jq di seguito per esaminare il file eve.log. Il file eve.log viene utilizzato anche per registrare eventi, ma in formato JSON (/var/log/suricata/eve.json). Sono i file eve.json e fast.log a cui farai riferimento per il traffico sospetto e i tentativi bloccati. Una volta trovati, agisci di conseguenza.

jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json

Sotto, puoi vedere “signature_id”: 2100498 nell’output, che è l’ID di firma di allarme specificato nel comando.

Puoi anche vedere il “community_id”: “1:ETRbv54GHTVCayHTUR5OIovK4gh2=” nell’output, che è l’ID di flusso della comunità che hai configurato nel file /etc/suricata/suricata.yaml.

Questo community_id è utile quando si utilizza Suricata in combinazione con altri strumenti come Elasticsearch per ottenere una “stacca di monitoraggio della sicurezza” completa a un costo ragionevolmente basso.

Examining the eve.log file

Conclusione

In questo tutorial, hai imparato come installare e configurare Suricata con i set di regole per proteggere la tua rete. Hai anche eseguito il test dei set di regole verificando se funzionano generando traffico sulla tua rete.

A questo punto, Suricata sta funzionando perfettamente con il tuo set di regole personalizzato per rilevare attività/traffico sospetti sulla tua rete.

Ora, perché non costruire su questa nuova conoscenza? Forse inizia con l’installazione e configurazione di Suricata, Zeek, lo stack Elasticsearch per creare un completo “stack per il monitoraggio della sicurezza”?

Source:
https://adamtheautomator.com/suricata/