Elenchi di esclusione di web application firewall
Il Web application firewall del gateway applicazione di Azure (WAF) protegge le Applicazioni Web. Questo articolo descrive la configurazione per gli elenchi di esclusione WAF. Queste impostazioni si trovano nei criteri WAF associati al gateway applicazione. Per maggiori informazioni sui criteri WAF, vedere Web application firewall di Azure nel gateway applicazione di Azure e Creare criteri web application firewall per il gateway applicazione.
A volte WAF potrebbe bloccare una richiesta che si vuole consentire per l'applicazione. Gli elenchi di esclusione di Web Application firewall consentono agli utenti di omettere determinati attributi di richiesta da una valutazione di WAF. Il resto della richiesta viene valutato come normale.
Ad esempio, Active Directory inserisce i token usati per l'autenticazione. Se usato in un'intestazione di richiesta, questi token possono contenere caratteri speciali che potrebbero attivare un rilevamento falso positivo dalle regole WAF. Aggiungendo l'intestazione a un elenco di esclusione, è possibile configurare WAF perin modo che ignori l'intestazione, ma WAF valuta comunque il resto della richiesta.
È possibile configurare le esclusioni da applicare quando vengono valutate regole WAF specifiche, oppure da applicare a globalmente quando vengono valutate tutte le regole WAF. Le regole di esclusione si applicano all'intera applicazione Web.
Identificare gli attributi della richiesta da escludere
Quando si configura un'esclusione WAF, è necessario specificare gli attributi della richiesta che devono essere esclusi dalla valutazione WAF. È possibile configurare un'esclusione WAF per gli attributi di richiesta seguenti:
- Intestazioni delle richieste
- Cookie della richiesta
- Il nome dell'attributo della richiesta (args) può essere aggiunto come elemento di esclusione, ad esempio:
- Nome campo modulo
- Entità JSON
- Stringa di query URL args
È possibile specificare un'esatta intestazione di richiesta, un corpo, un cookie o una corrispondenza dell'attributo stringa della query. In alternativa, è possibile specificare corrispondenze parziali. Usare gli operatori seguenti per configurare l'esclusione:
- Uguale a: questo operatore viene usato per una corrispondenza esatta. Ad esempio, per selezionare un'intestazione denominata bearerToken, usare l'operatore uguale a con il selettore impostato come bearerToken.
- Inizia con: questo operatore corrisponde a tutti i campi che iniziano con il valore del selettore specificato.
- Termina con: questo operatore corrisponde a tutti i campi di richiesta che terminano con il valore del selettore specificato.
- Contiene: questo operatore corrisponde a tutti i campi di richiesta che contengono il valore del selettore specificato.
- Uguale a qualsiasi: questo operatore mette in corrispondenza tutti i campi della richiesta. * sarà il valore del selettore. Ad esempio, questo operatore viene usato quando non si conoscono i valori esatti per una determinata variabile di corrispondenza, ma si desidera che il traffico della richiesta venga comunque escluso dalla valutazione delle regole.
Quando si elaborano le esclusioni, il motore WAF esegue una corrispondenza con distinzione tra maiuscole e minuscole in base alla tabella seguente. Inoltre, le espressioni regolari non sono consentite perché i selettori e i corpi delle richieste XML non sono supportati.
Parte del corpo della richiesta | CRS 3.1 e versioni precedenti | CRS 3.2 e versioni successive |
---|---|---|
Intestazione* | Case Insensitive | Case Insensitive |
Cookie* | Case Insensitive | Distinzione maiuscole/minuscole |
Stringa Query* | Case Insensitive | Distinzione maiuscole/minuscole |
Corpo codificato con URL | Case Insensitive | Distinzione maiuscole/minuscole |
Corpo JSON | Case Insensitive | Distinzione maiuscole/minuscole |
Corpo XML | Non supportato | Non supportato |
Corpo multiparte | Case Insensitive | Distinzione maiuscole/minuscole |
*A seconda dell'applicazione, i nomi e i valori delle intestazioni, dei cookie e degli args di query possono fare distinzione tra maiuscole e minuscole oppure no.
Nota
Per maggiori informazioni e per la risoluzione dei problemi, vedere Risoluzione dei problemi di WAF.
Richiesta attributi per chiavi e valori
Quando si configura un'esclusione, è necessario determinare se si vuole escludere la chiave o il valore dalla valutazione WAF.
Ad esempio, si prenda un caso in cui le richieste includano questa intestazione:
My-Header: 1=1
Il valore dell'intestazione (1=1
) potrebbe essere rilevato come un attacco da parte del WAF. Tuttavia, se si sa che si tratta di un valore legittimo per lo scenario, è possibile configurare un'esclusione per il valore dell'intestazione. A tale scopo, usare la variabile di corrispondenza RequestHeaderValues, l'operatore contienee il selettore (My-Header
). Questa configurazione arresta la valutazione di tutti i valori per l'intestazione My-Header
.
Nota
Gli attributi della richiesta per chiave e valori sono disponibili solo in CRS 3.2 o versioni successive, e Bot Manager 1.0 o versioni successive.
Gli attributi della richiesta in base ai nomi funzionano allo stesso modo degli attributi della richiesta in base ai valori e sono inclusi per la compatibilità con le versioni precedenti con CRS 3.1 e versioni precedenti. Si consiglia di usare gli attributi della richiesta in base ai valori, anziché gli attributi in base ai nomi. Ad esempio, usare RequestHeaderValues anziché RequestHeaderNames.
Al contrario, se WAF rileva il nome dell'intestazione (My-Header
) come attacco, è possibile configurare un'esclusione per la chiavedi intestazione usando l'attributo della richiesta RequestHeaderKeys. L'attributo RequestHeaderKeys è disponibile solo in CRS 3.2 o versioni successive e Bot Manager 1.0 o versioni successive.
Esempi di attributi di richiesta
La tabella qui in basso illustra alcuni esempi di come strutturare l'esclusione per una determinata variabile di corrispondenza.
Attributo da escludere | matchVariable | selectorMatchOperator | Selettore di esempio | Richiesta di esempi | Cosa viene escluso |
---|---|---|---|---|---|
Stringa di query | RequestArgKeys | Equals | /etc/passwd |
Uri: http://localhost:8080/?/etc/passwd=test |
/etc/passwd |
Stringa di query | RequestArgKeys | EqualsAny | N/D | Uri: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 |
/etc/passwd e .htaccess |
Stringa di query | RequestArgNames | Equals | text |
Uri: http://localhost:8080/?text=/etc/passwd |
/etc/passwd |
Stringa di query | RequestArgNames | EqualsAny | N/D | Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc |
/etc/passwd e .cshrc |
Stringa di query | RequestArgValues | Equals | text |
Uri: http://localhost:8080/?text=/etc/passwd |
/etc/passwd |
Stringa di query | RequestArgValues | EqualsAny | N/D | Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc |
/etc/passwd e .cshrc |
Corpo della richiesta | RequestArgKeys | Contiene | sleep |
Corpo della richiesta: {"sleep(5)": "test"} |
sleep(5) |
Corpo della richiesta | RequestArgKeys | EqualsAny | N/D | Corpo della richiesta: {".zshrc": "value", "sleep(5)":"value2"} |
.zshrc e sleep(5) |
Corpo della richiesta | RequestArgNames | Equals | test |
Corpo della richiesta: {"test": ".zshrc"} |
.zshrc |
Corpo della richiesta | RequestArgNames | EqualsAny | N/D | Corpo della richiesta: {"key1": ".zshrc", "key2":"sleep(5)"} |
.zshrc e sleep(5) |
Corpo della richiesta | RequestArgValues | Equals | test |
Corpo della richiesta: {"test": ".zshrc"} |
.zshrc |
Corpo della richiesta | RequestArgValues | EqualsAny | N/D | Corpo della richiesta: {"key1": ".zshrc", "key2":"sleep(5)"} |
.zshrc e sleep(5) |
Intestazione | RequestHeaderKeys | Equals | X-Scanner |
Intestazione: {"X-Scanner": "test"} |
X-scanner |
Intestazione | RequestHeaderKeys | EqualsAny | N/D | Intestazione: {"X-Scanner": "test", "x-ratproxy-loop": "value"} |
X-Scanner e x-ratproxy-loop |
Intestazione | RequestHeaderNames | Equals | head1 |
Intestazione: {"head1": "X-Scanner"} |
X-scanner |
Intestazione | RequestHeaderNames | EqualsAny | N/D | Intestazione: {"head1": "myvar=1234", "User-Agent": "(hydra)"} |
myvar=1234 e (hydra) |
Intestazione | RequestHeaderValues | Equals | head1 |
Intestazione: {"head1": "X-Scanner"} |
X-scanner |
Intestazione | RequestHeaderValues | EqualsAny | N/D | Intestazione: {"head1": "myvar=1234", "User-Agent": "(hydra)"} |
myvar=1234 e (hydra) |
Cookie | RequestCookieKeys | Contiene | /etc/passwd |
Intestazione: {"Cookie": "/etc/passwdtest=hello1"} |
/etc/passwdtest |
Cookie | RequestCookieKeys | EqualsAny | N/D | Intestazione: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"} |
/etc/passwdtest e .htaccess |
Cookie | RequestCookieNames | Equals | arg1 |
Intestazione: {"Cookie": "arg1=/etc/passwd"} |
/etc/passwd |
Cookie | RequestCookieNames | EqualsAny | N/D | Intestazione: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} |
/etc/passwd e .cshrc |
Cookie | RequestCookieValues | Equals | arg1 |
Intestazione: {"Cookie": "arg1=/etc/passwd"} |
/etc/passwd |
Cookie | RequestCookieValues | EqualsAny | N/D | Intestazione: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} |
/etc/passwd e .cshrc |
Nota
Se si crea un'esclusione usando selectorMatchOperator EqualsAny
, qualsiasi elemento inserito nel campo del selettore viene convertito in "*" dal back-end quando viene creata l'esclusione.
Ambiti di esclusione
Le esclusioni possono essere configurate per essere applicate a un set specifico di regole WAF, a set di regole o a livello globale in tutte le regole.
Suggerimento
È consigliabile rendere le esclusioni più precise e specifiche possibili, per evitare di lasciare accidentalmente modo agli utenti malintenzionati di sfruttare il sistema. Quando si necessita aggiungere una regola di esclusione, usare le esclusioni per regola laddove possibile.
Esclusioni per regola
È possibile configurare un'esclusione per una regola, un gruppo di regole o un set di regole specifico. È necessario specificare la regola o le regole a cui si applica l'esclusione. È anche necessario specificare l'attributo della richiesta che deve essere escluso dalla valutazione WAF. Per escludere un gruppo completo di regole, specificare solo il ruleGroupName
parametro, il rules
parametro è utile solo quando si vuole limitare l'esclusione a regole specifiche di un gruppo.
Le esclusioni per regola sono disponibili quando si usa il set di regole OWASP (CRS) versione 3.2 o successive o il set di regole di Bot Manager versione 1.0 o successive.
Esempio
Ad esempio, si desidera che WAF ignori il valore dell'User-Agent
intestazione della richiesta. L'intestazione User-Agent
contiene una stringa caratteristica che consente ai peer del protocollo di rete di identificare il tipo di applicazione, il sistema operativo, il fornitore del software o la versione software del richiedente agente utente del software. Per maggiori informazioni, vedere User-Agent.
Possono esserci diversi motivi per disabilitare la valutazione di questa intestazione. Potrebbe esserci una stringa che il WAF rileva e interpreta come dannoso. Ad esempio, l'User-Agent
intestazione potrebbe includere l'attacco x=x
SQL injection classico in una stringa. In alcuni casi, questo può essere un traffico legittimo. Si potrebbe pertanto avere la necessità di escludere questa intestazione dalla valutazione WAF.
È possibile usare gli approcci seguenti per escludere l'intestazione User-Agent
dalla valutazione da tutte le regole SQL injection:
Per configurare un'esclusione per regola usando il portale di Azure, seguire questi passaggi:
Passare al criterio WAF e selezionare Regole gestite.
Selezionare Aggiungi esclusioni.
In Applicare a, selezionare il set di regole CRS a cui applicare l'esclusione, come ad esempio OWASP_3.2.
Selezionare Aggiungi regolee selezionare le regole a cui si desidera applicare le esclusioni.
Configurare la variabile di corrispondenza, l'operatore e il selettore. Quindi selezionare Salva.
È possibile configurare più esclusioni.
È anche possibile escludere l'intestazione User-Agent
dalla valutazione solo in base alla regola 942270:
Seguire i passaggi descritti nell'esempio precedente e selezionare la regola 942270 nel passaggio 4.
Esclusioni globali
È possibile configurare un'esclusione da applicare in tutte le regole WAF.
Esempio
Si supponga di voler escludere il valore nel parametro utente passato nella richiesta tramite l'URL. Si supponga, ad esempio, che nel proprio ambiente sia normale che l' user
argomento della stringa di query contenga una stringa che il WAF visualizza come contenuto dannoso, quindi lo blocca. È possibile escludere tutti gli argomenti della stringa di query in cui il nome inizia con la parola user
, in modo che WAF non valuti il valore del campo.
Nell'esempio seguente viene illustrato come escludere l' user
argomento della stringa di query dalla valutazione:
Per configurare un'esclusione globale tramite il portale di Azure, seguire questi passaggi:
Passare al criterio WAF e selezionare Regole gestite.
Selezionare Aggiungi esclusioni.
In Applicare a, selezionare Globale
Configurare la variabile di corrispondenza, l'operatore e il selettore. Quindi selezionare Salva.
È possibile configurare più esclusioni.
Pertanto, se l'URL http://www.contoso.com/?user%3c%3e=joe
viene analizzato dal WAF, non verrà valutata la stringa joe, ma verrà comunque valutato il nome del parametro user%3c%3e.
Passaggi successivi
- Dopo aver configurato le impostazioni di WAF, viene descritto come visualizzare i log WAF. Per altre informazioni, vedere Diagnostica del gateway applicazione.
- Altre informazioni sulla sicurezza di rete di Azure