Elenchi di esclusione di web application firewall
Il web application firewall (WAF) del gateway di app Azure lication offre protezione per 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 altre informazioni sui criteri WAF, vedere Web application firewall di Azure nel gateway di app Azure lication e Creare criteri web application firewall per 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 di consueto.
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 per ignorare l'intestazione, ma WAF valuta comunque il resto della richiesta.
È possibile configurare le esclusioni da applicare quando vengono valutate regole WAF specifiche o da applicare a livello globale alla valutazione di 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
- Richiedere i cookie
- Il nome dell'attributo request (args) può essere aggiunto come elemento di esclusione, ad esempio:
- Nome campo modulo
- Entità JSON
- Argomenti della stringa di query URL
È 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 corrisponde a 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 vuole assicurarsi che il traffico della richiesta venga comunque escluso dalla valutazione delle regole.
Quando l'elaborazione delle esclusioni del motore WAF esegue una corrispondenza con distinzione tra maiuscole e minuscole o senza 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 tra maiuscole e minuscole |
Stringa di query* | Case Insensitive | Distinzione tra maiuscole e minuscole |
Corpo codificato con URL | Case Insensitive | Distinzione tra maiuscole e minuscole |
Corpo JSON | Case Insensitive | Distinzione tra maiuscole e minuscole |
Corpo XML | Non supportato | Non supportato |
Corpo multipart | Case Insensitive | Distinzione tra maiuscole e minuscole |
*A seconda dell'applicazione, i nomi e i valori delle intestazioni, dei cookie e degli argomenti di query possono essere distinzione tra maiuscole e minuscole o senza distinzione tra maiuscole e minuscole.
Nota
Per altre informazioni e informazioni sulla risoluzione dei problemi, vedere Risoluzione dei problemi di WAF.
Richiedere attributi per chiavi e valori
Quando si configura un'esclusione, è necessario determinare se si vuole escludere la chiave o il valore dalla valutazione WAF.
Si supponga, ad esempio, che le richieste includano questa intestazione:
My-Header: 1=1
Il valore dell'intestazione (1=1
) potrebbe essere rilevato come 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 contiene e 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 versione successiva e Bot Manager 1.0 o versione successiva.
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. È consigliabile usare gli attributi della richiesta in base ai valori anziché agli 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 chiave di intestazione usando l'attributo request RequestHeaderKeys. L'attributo RequestHeaderKeys è disponibile solo in CRS 3.2 o versione successiva e Bot Manager 1.0 o versione successiva.
Esempi di attributi di richiesta
La tabella seguente 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 | Uguale a | /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 | Uguale a | 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 | Uguale a | 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 | Uguale a | 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 | Uguale a | 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 | Uguale a | 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 | Uguale a | 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 | Uguale a | 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 | Uguale a | 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 | Uguale a | 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 l'applicazione 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ù strette e specifiche possibili, per evitare di lasciare spazio accidentalmente agli utenti malintenzionati per sfruttare il sistema. Quando è necessario 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 successiva o del set di regole di Bot Manager versione 1.0 o successiva.
Esempio
Si supponga di voler ignorare il valore dell'intestazione della User-Agent
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 dell'agente utente software richiedente. Per altre informazioni, vedere User-Agent.
Esistono diversi motivi per disabilitare la valutazione di questa intestazione. Potrebbe esserci una stringa che il WAF rileva e presuppone che sia dannoso. Ad esempio, l'intestazione User-Agent
potrebbe includere l'attacco x=x
SQL injection classico in una stringa. In alcuni casi, questo può essere traffico legittimo. Potrebbe quindi essere necessario 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 questa procedura:
Passare al criterio WAF e selezionare Regole gestite.
Selezionare Aggiungi esclusioni.
In Si applica a selezionare il set di regole CRS a cui applicare l'esclusione, ad esempio OWASP_3.2.
Selezionare Aggiungi regole e selezionare le regole a cui 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 nell'ambiente sia comune che l'argomento user
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'argomento della user
stringa di query dalla valutazione:
Per configurare un'esclusione globale usando il portale di Azure, seguire questa procedura:
Passare al criterio WAF e selezionare Regole gestite.
Selezionare Aggiungi esclusioni.
In Si applica 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 valuterà la stringa joe, ma valuta comunque 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