Per motivi di discussione, supponiamo che tu ti stia riferendo alla regola menzionata da Mark nel suo commento. Questo funziona bene da quando ho eseguito una ricerca a testo integrale del tuo testo tra tutte le regole VRT e ET, è l'unico che ho trovato. È sid 1390, trovato nel file shellcode,rules
per quelli che tengono traccia a casa.
Il testo completo della regola è:
alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:"SHELLCODE x86 inc ebx NOOP"; content:"CCCCCCCCCCCCCCCCCCCCCCCC"; classtype:shellcode-detect; sid:1390; rev:9;)
Per fortuna, questa è una regola carina e semplice. A parità di analisi, supponiamo anche che questo dispositivo si trovi sul tuo confine e che le variabili IP siano state configurate correttamente.
Quindi, questa regola viene controllata rispetto a tutti i pacchetti IP che entrano nella tua organizzazione. Sembra già piuttosto rumoroso. Sembra nella sezione del payload del pacchetto per una stringa contenente 25 caratteri "C" consecutivi. La ragione di ciò è che questo carattere si associa all'istruzione inc ebx
per l'architettura x86 (come implicito dal nome della regola). Nell'architettura x86 questa istruzione è funzionalmente equivalente a NOP e, come tale, può essere usata come parte di una diapositiva NOOP, ma è leggermente meno ovvia.
Questa regola specifica e molte delle regole del codice shell in effetti sono noti generatori di falsi positivi poiché possono essere generati spesso scaricando file binari. Il consiglio di tuning tradizionale è di disabilitare queste regole sulle porte web.
Quindi, in base alla soglia di rischio, puoi
- Disattiva completamente le regole
- Modifica la regola per ignorare i pacchetti su "porte web"
Disabilitare le regole è facile, e qualcosa che dovresti conoscere bene se stai tentando di fare un uso ragionevole di un IDS. La modifica può essere un po 'più complicata.
Ottimizzazione per filtraggio porta
A seconda della versione di Snort, dovresti già avere due variabili impostate in snort.conf
che saranno utili. Uno è HTTP_PORTS
e l'altro è SHELLCODE_PORTS
. Per impostazione predefinita, sono impostati su valori di base.
# Ports you run web servers on
portvar HTTP_PORTS [80,8080]
# Ports you want to look for SHELLCODE on.
portvar SHELLCODE_PORTS !80
Quello che raccomanderei è cambiare HTTP_PORTS
in qualunque cosa tu usi nel tuo ambiente, e quindi impostare SHELLCODE_PORTS
al contrario di, quindi qualcosa del tipo:
# Ports you run web servers on
portvar HTTP_PORTS [80,8080]
# Ports you want to look for SHELLCODE on.
portvar SHELLCODE_PORTS !$HTTP_PORTS
Quindi puoi modificare la firma dello Snort per usare la variabile di porta appropriata.
alert ip $EXTERNAL_NET $SHELLCODE_PORTS -> $HOME_NET any (msg:"SHELLCODE x86 inc ebx NOOP"; content:"CCCCCCCCCCCCCCCCCCCCCCCC"; classtype:shellcode-detect; sid:1390; rev:9;)
Quindi ora questo escluderà qualsiasi dato proveniente da da un server web esterno, quindi di scaricare un eseguibile dal sito Web di un fornitore. È meglio tenere presente che poiché questa regola è non di stato, un utente malintenzionato potrebbe creare il proprio exploit in modo tale da evitare la regola.
Ottimizzazione del tracciamento dello stato
In alternativa, potremmo stringere la regola forzandola invece a dare uno stato. Rimuovere la restrizione della porta e restringere la regola solo alla comunicazione avviata dall'esterno aggiungendo la parola chiave flow, trasformando quella regola in:
alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:"SHELLCODE x86 inc ebx NOOP"; flow:to_server,established; content:"CCCCCCCCCCCCCCCCCCCCCCCC"; classtype:shellcode-detect; sid:1390; rev:9;)
Quindi ora la regola cercherà almeno 25 caratteri "C" consecutivi su qualsiasi comunicazione avviata dall'esterno. Quindi, mentre ora vedremo i casi in cui l'utente malintenzionato spoofa le loro porte di origine, nel tentativo di aggirare le restrizioni del firewall, perderemo i casi in cui il codice di exploit viene scaricato da un host locale.
Analisi paralisi
In entrambi i casi, ci sono modi ovvi per bypassare la routine di rilevamento, quindi la direzione che scegli dipende interamente dal tuo profilo di rischio e dalla tua soglia di accettazione.