Sintassi per le firme di prevenzione delle intrusioni personalizzate

Informazioni sulle sintassi e le convenzioni per le firme
Quando si scrive il contenuto per ogni firma IPS, è necessario utilizzare la seguente sintassi:
tipo-protocollo regola, [opzioni-protocollo,] [opzioni protocollo-IP,] "messaggio", "contenuto"...
È necessario cominciare ogni firma con la parola chiave
rule
, seguita dall'argomento del tipo di protocollo, dalle opzioni di protocollo, dalle opzioni protocollo IP, dagli argomenti msg e dagli argomenti content. Gli argomenti facoltativi sono racchiusi tra parentesi quadre. Digitare soltanto le informazioni all'interno delle parentesi; non digitare le parentesi. Gli argomenti che sono seguiti dai puntini di sospensione possono essere ripetuti. Fornire informazioni per gli argomenti, usando gli operatori supportati e le espressioni regolari.
Argomenti del tipo di protocollo
Questa parte della firma definisce il tipo di protocollo usando la seguente sintassi:
tipo-protocollo
dove
tipo-protocollo
è uno dei seguenti parametri:
  • tcp
  • udp
  • icmp
Il tipo di protocollo deve seguire immediatamente la parola
rule
.
Ad esempio:
rule udp
Ogni tipo di protocollo
tcp
,
udp
e
icmp
supporta il proprio set di argomenti facoltativi.
Argomenti del protocollo TCP
Per ulteriori dettagli sul protocollo TCP, consultare RFC 793:
Argomenti del protocollo TCP
Attributo
Descrizione
Sintassi
source
Porta TCP di origine
source operator (value)
dove
value
è un numero a 16 bit senza firma compreso tra 0 e 65535.
Esempio:
source=(180,2100)
Il valore deve essere racchiuso tra parentesi. Un valore 0 (zero) indica tutte le porte.
È possibile specificare un intervallo di porte usando un trattino fra due valori di porta (per esempio 3-5 corrisponde alle porte 3, 4 e 5). È possibile specificare più porte separandole con virgole.
dest
Porta TCP di destinazione
dest operator (value)
dove value è un numero a 16 bit senza firma compreso tra 0 e 65535.
Ad esempio:
dest=(120,125)
Il valore deve essere racchiuso tra parentesi. Un valore 0 (zero) indica tutte le porte.
È possibile specificare un intervallo di porte usando un trattino fra due valori di porta (per esempio 3-5 corrisponde alle porte 3, 4 e 5). È possibile specificare più porte separandole con virgole.
tcp_flag
Flag TCP presenti nel pacchetto
tcp_flag operator flag|[flag]...
dove
flag
è uno dei seguenti parametri:
  • fin: fine dei dati
  • syn: sincronizzare i numeri di sequenza
  • rst: ripristinare la connessione
  • psh: funzione push
  • ack: indicatore campo riconoscimento
  • urg: indicatore campo puntatore urgente
  • 0: corrispondenza con tutti i flag
Ad esempio:
tcp_flag&ack|ps
La maggior parte delle prove del tcp_flag utilizza l'operatore & (AND bit per bit) come maschera (significa che un pacchetto deve avere i flag specificati impostati ma può anche avere impostati altri flag).
È possibile specificare più flag in una prova separando i flag con un carattere barra verticale (|).
window
Dimensione della finestra di TCP
window operator size
dove
operator size
corrisponde a un numero a 16 bit senza firma compreso tra 0 e 65535.
Ad esempio:
window=16384
Argomenti del protocollo UDP
Per ulteriori dettagli sul protocollo UDP, consultare RFC 768:
Argomenti del protocollo UDP
Attributo
Descrizione
Sintassi
source
Porta di origine UDP
source operator (value)
dove
value
è un numero a 16 bit senza firma compreso tra 0 e 65535.
Ad esempio:
source=(180,2100)
Il valore deve essere racchiuso tra parentesi. Un valore 0 (zero) indica tutte le porte.
È possibile specificare un intervallo di porte usando un trattino fra due valori di porta (per esempio 3-5 corrisponde alle porte 3, 4 e 5). È possibile specificare più porte separandole con virgole.
dest
Porta destinazione UDP
dest operator (value)
dove
value
è un numero a 16 bit senza firma compreso tra 0 e 65535.
Ad esempio:
dest=(120)
Il valore deve essere racchiuso tra parentesi. Un valore 0 (zero) indica tutte le porte.
È possibile specificare un intervallo di porte usando un trattino fra due valori di porta (per esempio 3-5 corrisponde alle porte 3, 4 e 5). È possibile specificare più porte separandole con virgole.
Argomenti del protocollo ICMP
Consultare i RFC 792 e 1256 per descrizioni dettagliate delle combinazioni ICMP valide di tipo protocollo e codice:
ICMPv4 e ICMPv6 sono supportati per le regole ICMP.
ICMPv6 è supportato a partire dalla versione 14.2.
Argomenti del protocollo ICMP
Attributo
Descrizione
Sintassi
tipo
Tipo di protocollo ICMP
type operator value
dove
value
corrisponde a un numero a 8 bit compreso tra 0 e 255.
Ad esempio:
type=0
code
Tipo di protocollo ICMP
code operator value
dove
value
corrisponde a un numero a 8 bit compreso tra 0 e 255.
Ad esempio:
code<=10
Argomenti del protocollo IP
Gli argomenti del protocollo IP sono indipendenti dagli argomenti del tipo di protocollo e sono validi per i tipi di protocollo TCP, UDP e ICMP.
Per ulteriori dettagli sul protocollo IP, consultare RFC 791:
Argomenti del protocollo IP
Attributo
Descrizione
Sintassi
saddr
Indirizzo IP di origine
saddr=(value/CIDR)
dove:
  • value
    è un indirizzo IPv4 o IPv6 che specifica l'indirizzo IP del computer su cui è in esecuzione il client oppure la variabile $LOCALHOST.
    IPv6 è supportato a partire dalla versione 14.2.
  • CIDR
    è una notazione classless di routing interdominio indicante quanti bit sono utilizzati per il prefisso di rete.
Ad esempio:
saddr=(127.0.0.0/25)
Qui vengono utilizzati 25 bit dell'indirizzo IPv4 per identificare la rete univoca ed i bit restanti per identificare l'host.
saddr=(2001:0db8::0001/32)
Qui vengono utilizzati 32 bit dell'indirizzo IPv6 per identificare la rete univoca ed i bit restanti per identificare l'host.
daddr
Indirizzo di destinazione IP
daddr=(value/CIDR)
dove:
  • value
    è un indirizzo IPv4 o IPv6 che specifica l'indirizzo IP del computer su cui è in esecuzione il client oppure la variabile $LOCALHOST.
    IPv6 è supportato a partire dalla versione 14.2.
  • CIDR
    è una notazione classless di routing interdominio indicante quanti bit sono utilizzati per il prefisso di rete.
Ad esempio:
daddr=(128.0.0.0/4)
Qui vengono utilizzati quattro bit di IPv4 per identificare la rete univoca ed i bit restanti per identificare l'host.
daddr=(2001:0db8::0002/120)
Qui vengono utilizzati 120 bit dell'indirizzo IPv6 per identificare la rete univoca ed i bit restanti per identificare l'host.
tos
Tipo di flag di servizio presente nel pacchetto
Questo attributo è valida solo per gli indirizzi IPv4.
tos operator value
dove
value
è una costante numerica in formato decimale, esadecimale o ottale.
Ad esempio:
tos=0x4
Per visualizzare i valori tos IP validi, vedere valori TOS IP validi.
Per provare valori tos IP multipli in un pacchetto, l'argomento tos dovrà essere la somma dei valori che devono essere provati. In genere l'operatore è = o &. Non è possibile combinare questi flag utilizzando la barra verticale (|).
tot_len
Lunghezza totale del pacchetto
Questo attributo è valida solo per gli indirizzi IPv4.
tot_len operator value
dove
value
è un numero a 16 bit compreso tra 0 e 65535 che specifica la lunghezza totale del pacchetto.
Ad esempio:
tot_len>1445
Quando si specifica il valore, va considerato il tipo di protocollo della regola per calcolare correttamente la lunghezza da verificare. Per aiutare nel calcolo di tot_len per ciascuno dei tipi di protocollo supportati, le lunghezze intestazione sono le seguenti:
TCP: 20-60 byte
UDP: 8 byte
ICMP: 8-20 byte
ttl
Time to Live (TTL) del pacchetto
Questo attributo è valida solo per gli indirizzi IPv4.
ttl operator value
dove
value
è un valore a 8 bit compreso tra 0 e 255 che specifica la caratteristica TTL del pacchetto.
ip_flag
Valore offset di frammentazione del pacchetto
Questo attributo è valida solo per gli indirizzi IPv4.
ip_flag operator value
dove
value
è un valore a 13 bit che specifica il valore offset di frammentazione del pacchetto.
Gli offset di frammentazione si presentano su limiti a 8 byte; quindi, ogni valore di bit nell'offset di frammentazione rappresenta tre bit.
Valori validi per tos IP
Dec
Hex
Opzione
2
0 x 2
Riduci il costo monetario
4
0 x 4
Eleva l'affidabilità
8
0 x 8
Eleva la velocità effettiva
24
0 x 18
Riduci i ritardi
Argomenti msg
Quando una firma IPS abbina il contenuto del pacchetto con le condizioni di verifica della regola, il messaggio è specificato nell'argomento msg. L'argomento msg appare nel registro sicurezza sia sul client che sul server. Soltanto un argomento msg può essere incluso in ciascuna firma IPS.
Sintassi:
msg="messaggio di avviso"
Il messaggio di avviso deve essere racchiuso tra virgolette e non può contenere punteggiatura. Le virgolette singole non sono consentite. Lo scopo del messaggio di avviso è di consentire la facile identificazione di un evento nella rete mediante consultazione del registro sicurezza. Di conseguenza, tutte le firme IPS devono contenere messaggi di avviso concisi ma descrittivi nell'argomento msg.
Esempio:
msg=" Vulnerabilità trasversale Unicode IIS"
Argomenti content
Gli argomenti content specificano un criterio per la ricerca all'interno di un pacchetto. L'argomento content può comparire più volte in una firma IPS. Il valore del contento deve essere racchiuso tra doppie virgolette (" "). Le virgolette singole (' ') non sono consentite.
Sintassi:
content="value"
dove
value
è un criterio specificato come costante letterale di stringa o costante letterale binaria racchiusa tra virgolette.
una costante letterale di stringa è un gruppo di caratteri consecutivi, compresi gli spazi. Una stringa può contenere qualsiasi carattere tranne le virgolette ("), la barra rovesciata (\), o la sequenza di escape del carattere di nuova linea \n: Esempio:
content="system32"
Una costante letterale binaria è un gruppo di byte consecutivi in formato esadecimale, dove la sequenza di escape \x precede ogni byte. Esempio:
content="\x04\x20\x20\x20\xBF"
Il seguente esempio specifica il contenuto come costante letterale binaria "\x04\x20\x20\x20\xBF".
Le costanti letterali di stringa possono essere unite con le costanti letterali binarie per creare criteri complessi. Esempio:
content="\x0DLocation\x3A"
Argomenti content facoltativi
È possibile utilizzare gli argomenti content facoltativi per qualificare ulteriormente il contenuto nei seguenti modi:
  • Rilevamento di maiuscole e minuscole
  • Decodifica HTTP
  • Profondità e offset
Rilevamento di maiuscole e minuscole
È possibile specificare un flag facoltativo C per il rilevamento di maiuscole e minuscole in ciascun argomento content. Quando si utilizza questo flag, la stringa del criterio dell'argomento content corrisponde solo se l'uso delle maiuscole/minuscole nei caratteri nella stringa corrisponde all'uso delle maiuscole/minuscole nei dati del pacchetto.
Per esempio, è possibile utilizzare la seguente sintassi:
content="valore"C
content="\x0DLocation\x3A"C
Decodifica HTTP
È possibile utilizzare il flag facoltativo di decodifica HTTP H in ogni argomento content. Se si utilizza il flag di decodifica HTTP H, i caratteri codificati sono convertiti in una costante letterale binaria prima della ricerca di una corrispondenza del criterio. È inoltre possibile utilizzare HTTP H dopo un flag C per il rilevamento di maiuscole/minuscole. Gli URI HTTP utilizzano caratteri codificati. Quando la corrispondenza del criterio viene tentata e normalizzata, i dati normalizzati sono confrontati con la costante letterale o di stringa nell'argomento content. Nella maggior parte delle circostanze, il flag H è utilizzato soltanto per le regole TCP che si riferiscono ad un'applicazione che utilizza il protocollo HTTP.
Per esempio, è possibile utilizzare la seguente sintassi:
content="valore"H
content="\x6f\x6e\x4c\x6f\x61\x64\x3d\x22\x61\x6c\x65\x72\x74\x28"H
Offset e profondità
È possibile utilizzare il valore offset e un valore di profondità come argomenti facoltativi nel contenuto. Il valore offset è specificato per primo, seguito dal valore di profondità.
Per esempio, è possibile utilizzare la seguente sintassi:
content="valore"(offset,profondità)
Sintassi
Descrizione
valore
Criterio specificato come valore letterale stringa o come valore letterale binario racchiuso tra virgolette.
offset
Un numero intero positivo in notazione decimale.
L'offset specifica una posizione alternativa per l'inizio di una corrispondenza del criterio. L'offset specifica anche quanti byte ignorare prima che la firma tenti la corrispondenza del criterio.
Quando un argomento offset non è presente o ha valore 0, il criterio dell'argomento content tenta di definire una corrispondenza. Il criterio tenta di definire una corrispondenza con:
  • Il contenuto all'inizio del payload del pacchetto
  • La parte del pacchetto che segue l'intestazione di protocollo per il primo argomento del content
Ogni argomento content successivo tenta automaticamente la verifica di corrispondenze del criterio a partire dalla fine della corrispondenza del criterio trovata precedente.
profondità
Un numero intero positivo in notazione decimale. La profondità specifica il numero massimo di byte da cercare quando si cerca la corrispondenza di un criterio in un argomento content.
Quando un argomento profondità ha il valore 0, il criterio che è contenuto nell'argomento content cerca di trovare una corrispondenza dall'offset alla fine del pacchetto. Il valore dell'argomento profondità non può essere più piccolo del numero di byte specificati come criterio di corrispondenza all'interno dell'argomento content.
content="\x04\x20\x20\x20\xBF"(4,5)
Questo esempio ignora quattro byte in avanti dalla precedente corrispondenza del criterio o dall'inizio del payload del pacchetto. Quindi confronta i cinque byte successivi con la costante letterale binaria che è contenuta nell'argomento del content.
Argomenti streamdepth
È possibile utilizzare l'argomento streamdepth per limitare la lunghezza del flusso in cui la regola di prevenzione delle intrusioni verifica una firma. Streamdepth può essere utilizzato per migliorare le prestazioni delle regole di prevenzione delle intrusioni personalizzate. L'argomento streamdepth è facoltativo.
Sintassi:
streamdepth=
valore
Ad esempio, se si sospetta che esista una firma nei primi 10 KB di un flusso da 1 MB, è possibile utilizzare la seguente sintassi:
streamdepth=10240
Durante il download del file, la regola di prevenzione delle intrusioni con questo valore di streamdepth smette di verificare la firma dopo i primi 10 KB. Poiché la verifica viene limitata ai primi 10 KB, le prestazioni di download risultano migliori.
Se lo streamdepth viene impostato su 0, la prevenzione delle intrusioni applica la regola all'intero flusso.
Operatori supportati
Molti argomenti nella sintassi della firma richiedono un operatore, indicante il tipo di verifica che deve essere effettuata per questo tipo di tentativo.
Gli operatori supportati utilizzati nelle firme IPS descrivono gli operatori supportati.
Operatori supportati utilizzati nelle firme IPS
Operatore
Descrizione
<
Minore di
>
Maggiore di
=
Uguale a
&
AND bit per bit
Nella libreria delle firme, il carattere e commerciale & a volte è rappresentato utilizzando il carattere HTML equivalente &
<=
Minore o uguale a
>=
Maggiore o uguale a
Sintassi personalizzata di firma IPS campione
È possibile creare firme IPS personalizzate di campione per rilevare tentativi di acceso e download di file MP3 mediante browser Web o FTP.
A causa del formato risulta difficile rilevare file MP3 nel traffico di rete. Tuttavia, è possibile visualizzare i pacchetti TCP per individuare i comandi e i protocolli utilizzati per recuperare i file MP3. È possibile quindi utilizzare tali informazioni per creare la sintassi per una firma IPS personalizzata.
Per rilevare un file MP3 e bloccarne l'accesso, salvare due firme. Una firma rileva un file MP3 tramite il servizio HTTP. La seconda firma rileva file MP3 tramite il servizio FTP.
Quando si crea una firma IPS personalizzata, è necessario digitare il contenuto della firma con il seguente formato:
rule
protocol-type
, [
protocol-options,
] [
ip-protocol option,
] msg, content...
Durante una sessione FTP o HTTP, il server e il client scambiano dati. Tali dati sono contenuti nei pacchetti TCP destinati al servizio appropriato nel server. Il servizio HTTP utilizza la porta 80 e il servizio FTP utilizza la porta 21. I pacchetti TCP contengono i dati richiesti in un componente del payload.
I browser Web utilizzano il comando HTTP GET per scaricare i file MP3. Il client FTP utilizza il comando FTP RETR per scaricare i file. Il comando FTP è utilizzato quando più file vengono recuperati mediante il comando MGET. Il nome del file e la rispettiva estensione mp3 sono presenti in entrambe le richieste. Entrambi i protocolli inseriscono caratteri [CR] [LF] per indicare la fine della richiesta
La sintassi della firma deve inoltre contenere diversi parametri, tra cui un'espressione regolare che identifica i comandi specifici che devono essere bloccati. Le espressioni regolari sono profili di caratteri che vengono confrontati con i contenuti del pacchetto. I comandi da bloccare sono contenuti in questi pacchetti. Se non si conosce il nome di un determinato file, è possibile utilizzare il carattere jolly (*) per eguagliare il numero sconosciuto di caratteri tra il comando e il nome del file. Il comando deve essere in lettere minuscole, ma l'estensione del file può essere sia in maiuscole che in minuscole.
Il contenuto della firma HTTP contiene la seguente sintassi:
rule tcp, dest=(80,443), saddr=$LOCALHOST, msg="MP3 GET in HTTP detected", regexpcontent="[Gg][Ee][Tt] .*[Mm][Pp]3 .*"
Il contenuto della firma FTP contiene la seguente sintassi:
rule tcp, dest=(21), tcp_flag&ack, saddr=$LOCALHOST, msg="MP3 GET in FTP detected", regexpcontent="[Rr][Ee][Tt][Rr] .*[Mm][Pp]3\x0d\x0a"
La sintassi di firma HTTP e FTP spiega la sintassi per la firma HTTP e per la firma FTP.
Sintassi della firma HTTP e della firma FTP
Utilizzare la seguente sintassi
Per eseguire la seguente attività
Per la firma HTTP:
rule tcp dest=(80,443)
Per la firma FTP:
rule tcp dest=(21)
Dice al motore basato su pacchetti quale traffico cercare. In questo modo, il motore non cerca il traffico inutile e non esaurisce le risorse di sistema. Più sono dettagliate le informazioni fornite, migliori saranno le prestazioni del motore basato su pacchetti.
Questo argomento limita le porte di destinazione a 80 e a 443 per il servizio HTTP e a 21 per il servizio FTP.
Per la firma FTP:
tcp_flag&ack
Riduce i falsi positivi.
saddr=$LOCALHOST
Si assicura che la richiesta abbia origine sull'host.
Per la firma HTTP:
msg="MP3 GET in HTTP"
Per la firma FTP:
msg="MP3 GET in FTP"
Visualizza il nome per la firma quando la firma è attivata. Il nome viene visualizzato nel registro di sicurezza. Utilizzare una stringa descrittiva in modo da identificare la firma attivata nel registro.
Per la firma HTTP:
regexpcontent="[Gg][Ee][Tt] .*[Mm][Pp]3 .*"
Per la firma FTP:
regexpcontent="[Rr][Ee][Tt][Rr] .*[Mm][Pp]3\x0d\x0a"
Trova la corrispondenza di questa stringa nel traffico HTTP o nel traffico FTP con il payload nei pacchetti TCP. Per ridurre falsi positivi, utilizzare questo argomento con attenzione.
La stringa corrisponde con il testo ASCII del pacchetto TCP, che è "GET [.*].mp3[CR][LF]" per la firma HTTP e "RETR [.*].mp3[CR][LF]" per la firma FTP.
La stringa è scritta in modo che non vi sia distinzione tra maiuscole e minuscole nel testo.