Regole basate su firme con Snort e Suricata
Scrivere e leggere regole di rete.
Regole basate su firme con Snort e Suricata è una lezione Cyber Security Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cyber Security Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cyber Security Academy include 4 lezioni in totale.
Snort e Suricata
Snort e Suricata sono i due principali motori IDS/IPS open source. Condividono un linguaggio delle regole in gran parte compatibile, quindi una regola scritta per l'uno viene generalmente eseguita anche dall'altro.
Suricata aggiunge il multi-threading, parser nativi dei protocolli, l'estrazione dei file e un logging dettagliato (EVE JSON); Snort 3 ha modernizzato in modo analogo il proprio motore. Imparare una volta la sintassi delle regole consente di lavorare efficacemente con entrambi.
Struttura di una regola
Ogni regola è composta da due parti: un header e un corpo tra parentesi contenente le opzioni. L'header definisce l'azione, il protocollo e la direzione del traffico; il corpo specifica che cosa cercare e come segnalarlo.
alert tcp $EXTERNAL_NET any -> $HOME_NET 80 ( \
msg:"WEB suspicious request"; \
content:"/admin.php"; http_uri; \
sid:1000001; rev:1; )I campi dell'intestazione
L'intestazione si legge da sinistra a destra:
- azione — alert, drop, reject, pass
- protocollo — tcp, udp, icmp, ip (oppure i protocolli applicativi in Suricata: http, dns, tls)
- IP/porta di origine e IP/porta di destinazione
- direzione —
->unidirezionale oppure<>bidirezionale
Le variabili come $HOME_NET e $EXTERNAL_NET provengono dalla configurazione, così le regole restano portabili tra ambienti diversi.
drop tcp any any -> $HOME_NET 22 ( msg:"SSH blocked"; sid:1000002; rev:1; )Azioni: Alert vs Drop
L'azione determina il comportamento IDS o IPS della regola:
alert— registra e notifica, senza interrompere il traffico (IDS)drop— scarta silenziosamente il pacchetto (IPS, solo in modalità inline)reject— scarta il pacchetto e invia un reset TCP oppure un messaggio ICMP di destinazione irraggiungibilepass— consente esplicitamente il traffico, ignorando le regole successive
Lo stesso motore può funzionare come IDS o IPS a seconda che sia distribuito in modalità inline e delle azioni utilizzate.
Corrispondenza del contenuto
La parola chiave content cerca una sequenza di byte nel payload. Il testo è racchiuso tra virgolette; i dati binari sono racchiusi tra barre verticali e rappresentati in esadecimale.
Le parole chiave di ancoraggio rendono le corrispondenze più precise: offset, depth, distance e within limitano la posizione in cui può comparire il modello, migliorando sia l'accuratezza sia le prestazioni.
alert tcp any any -> $HOME_NET any ( \
msg:"Malware magic bytes"; \
content:"|4D 5A|"; offset:0; depth:2; \
sid:1000003; rev:1; )Buffer sticky
Le regole moderne cercano corrispondenze nei buffer consapevoli del protocollo anziché nel flusso grezzo. Dopo una parola chiave che seleziona un buffer, le successive corrispondenze content vengono applicate a quella parte del protocollo analizzato.
http_uri— l'URI della richiestahttp_header— le intestazioni della richiesta o della rispostahttp_user_agent— il valore User-Agenttls_sni/dns_query— il nome del server TLS / la query DNS
È molto più affidabile che cercare una sottostringa nell'intero pacchetto.
alert http any any -> any any ( \
msg:"Suspicious user agent"; \
http.user_agent; content:"sqlmap"; nocase; \
sid:1000004; rev:1; )PCRE e nocase
Quando le stringhe fisse non bastano, pcre introduce le espressioni regolari compatibili con Perl. Abbini un filtro preliminare content, poco costoso, a pcre, così l'espressione regolare viene eseguita solo sui pacchetti candidati, preservando le prestazioni.
Il modificatore nocase rende la corrispondenza del contenuto senza distinzione tra maiuscole e minuscole; è importante per le intestazioni e per i campi controllati dall'utente, che gli attaccanti possono variare.
alert http any any -> $HOME_NET any ( \
msg:"SQLi attempt in URI"; \
http.uri; content:"select"; nocase; \
pcre:"/union\s+select/i"; \
sid:1000005; rev:1; )Parole chiave per flusso e stato
L'opzione flow limita una regola allo stato e alla direzione della connessione, riducendo i falsi positivi e il costo di elaborazione.
established— solo nelle sessioni TCP completateto_server/to_client— direzione della richiesta o della risposta
Cercare le risposte del server solo quando la connessione è stabilita e la direzione è to_client evita di attivare la regola per pacchetti isolati o contraffatti.
alert tcp $HOME_NET any -> $EXTERNAL_NET any ( \
msg:"Beacon response"; \
flow:established,to_client; \
content:"|00 01 02 03|"; \
sid:1000006; rev:1; )Metadati: sid, rev, msg, reference
Le opzioni di gestione mantengono un ruleset facilmente manutenibile:
sid— ID univoco della signature (usi 1000000+ per le regole locali)rev— numero di revisione, da incrementare a ogni modificamsg— il testo dell'avviso visualizzato dagli analisticlasstype— categoria che determina la prioritàreference— collegamento a un CVE o a un avviso di sicurezza
sid stabili e rev incrementali consentono di monitorare e aggiornare le regole senza compromettere dashboard e soppressioni.
alert tcp any any -> $HOME_NET 445 ( \
msg:"EternalBlue exploit attempt"; \
flow:to_server,established; content:"|FF|SMB"; \
classtype:attempted-admin; \
reference:cve,2017-0144; sid:1000007; rev:2; )Differenze tra Snort e Suricata
Sebbene siano compatibili a livello di regole, i due motori offrono funzionalità diverse:
- Suricata è multithread, analizza nativamente i protocolli applicativi, estrae file, calcola JA3 e genera JSON EVE
- Snort 3 ha riscritto il proprio motore per migliorare le prestazioni e introdurre un sistema modulare di plugin
Alcune parole chiave sono specifiche del motore. Suricata aggiunge parole chiave del livello applicativo (tls.sni, dns.query, http.method) e funzionalità dataset/flowbits. Quando condivide le regole, punti al minimo comune denominatore oppure mantenga ruleset specifici per ciascun motore.
Filtri di frequenza e soglie
Per evitare che una regola inondi la console, applichi delle soglie. detection_filter si attiva solo dopo N eventi in una finestra temporale; threshold con limit limita il volume degli avvisi.
È essenziale per il rilevamento degli attacchi di forza bruta e delle scansioni, in cui un singolo evento non è significativo ma lo è una raffica di eventi.
alert tcp any any -> $HOME_NET 22 ( \
msg:"SSH brute force"; flow:to_server; \
detection_filter:track by_src, count 5, seconds 60; \
sid:1000008; rev:1; )Verifica rapida
Legga una regola e ne prevedա il comportamento.
Riepilogo
Ora è in grado di leggere e scrivere le signature Snort/Suricata:
- Una regola = intestazione (azione, protocollo, origine/destinazione, direzione) + opzioni del corpo
- L'azione determina IDS o IPS:
alert,drop,reject,pass contentcon offset/depth e corrispondenze esadecimali individua i byte del payload- I buffer sticky (http.uri, tls.sni, dns.query) confrontano i campi del protocollo analizzato
pcreenocasegestiscono modelli variabiliflowlimita la corrispondenza allo stato e alla direzionesid/rev/msg/referencemantengono le regole facilmente manutenibili- Le soglie riducono il rumore prodotto da attacchi di forza bruta e scansioni
Prossimo argomento: rilevare le minacce senza alcuna signature.
Domande Frequenti
La lezione «Regole basate su firme con Snort e Suricata» è gratuita?
Sì — il testo completo di «Regole basate su firme con Snort e Suricata» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cyber Security Academy, passa a CoddyKit PRO. Il corso Cyber Security Academy include 4 lezioni in totale.
Cosa imparerò in «Regole basate su firme con Snort e Suricata»?
Scrivere e leggere regole di rete. Eserciti Cyber Security Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Cyber Security Academy?
Non è richiesta alcuna esperienza precedente. Cyber Security Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Regole basate su firme con Snort e Suricata»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Cyber Security Academy?
Sì. Ogni lezione Cyber Security Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Concetti di IDS e IPS
- Regole basate su firme con Snort e Suricata
- Rilevamento di anomalie e comportamenti
- Ottimizzazione e distribuzione