Share via


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:

  1. Passare al criterio WAF e selezionare Regole gestite.

  2. Selezionare Aggiungi esclusioni.

    Screenshot of the Azure portal that shows how to add a new per-rule exclusion for the W A F policy.

  3. In Si applica a selezionare il set di regole CRS a cui applicare l'esclusione, ad esempio OWASP_3.2.

    Screenshot of the Azure portal that shows the per-rule exclusion configuration for the W A F policy.

  4. Selezionare Aggiungi regole e selezionare le regole a cui applicare le esclusioni.

  5. 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:

  1. Passare al criterio WAF e selezionare Regole gestite.

  2. Selezionare Aggiungi esclusioni.

    Screenshot of the Azure portal that shows how to add a new global exclusion for the W A F policy.

  3. In Si applica a selezionare Globale

    Screenshot of the Azure portal that shows the global exclusion configuration for the W A F policy.

  4. 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