Share via


Risolvere i problemi relativi a Web Application Firewall (WAF) per il gateway di app Azure lication

Esistono alcune operazioni che è possibile eseguire se le richieste che devono passare attraverso web application firewall (WAF) vengono bloccate.

Prima di tutto, assicurarsi di aver letto la panoramica di WAF e i documenti di configurazione di WAF. Assicurarsi inoltre di aver abilitato il monitoraggio di WAF Questi articoli illustrano come funzionano i waf, il funzionamento dei set di regole WAF e come accedere ai log WAF.

I set di regole OWASP sono progettati per essere rigidi e ottimizzati per soddisfare le esigenze specifiche dell'applicazione o dell'organizzazione che usano WAF. È del tutto normale, e previsto in molti casi, creare esclusioni, regole personalizzate e persino disabilitare regole che potrebbero causare problemi o falsi positivi. I criteri per sito e per URI consentono di apportare queste modifiche solo a siti/URI specifici. Pertanto, eventuali modifiche non devono influire su altri siti che potrebbero non essere in esecuzione negli stessi problemi.

Informazioni sui log di WAF

Lo scopo dei log waf è mostrare ogni richiesta che WAF corrisponde o blocca. Si tratta di un libro mastro di tutte le richieste valutate corrispondenti o bloccate. Se si nota che WAF blocca una richiesta che non deve (un falso positivo), è possibile eseguire alcune operazioni. Prima di tutto, restringere e trovare la richiesta specifica. Esaminare i log per trovare l'URI, il timestamp o l'ID transazione specifici della richiesta. Quando si trovano le voci di log associate, è possibile iniziare a agire sui falsi positivi.

Si supponga, ad esempio, di avere un traffico legittimo contenente la stringa 1=1 che si vuole passare attraverso il WAF. Se si prova la richiesta, WAF blocca il traffico che contiene la 1=1 stringa in qualsiasi parametro o campo. Si tratta di una stringa spesso associata a un attacco SQL injection. È possibile esaminare i log e visualizzare il timestamp della richiesta e le regole bloccate/corrispondenti.

Nell'esempio seguente è possibile notare che quattro regole vengono attivate durante la stessa richiesta (usando il campo TransactionId). Il primo indica che corrisponde perché l'utente ha usato un URL numerico/IP per la richiesta, che aumenta il punteggio di anomalia di tre perché è un avviso. La regola successiva corrispondente è 942130, ovvero quella che si sta cercando. È possibile visualizzare nel 1=1details.data campo . Questo aumenta ulteriormente il punteggio di anomalia di tre volte, perché è anche un avviso. In genere, ogni regola con l'azione Matched aumenta il punteggio di anomalia e a questo punto il punteggio di anomalia sarà sei. Per altre informazioni, vedere Modalità di assegnazione dei punteggi anomalie.

Le due voci di log finali mostrano che la richiesta è stata bloccata perché il punteggio di anomalia è stato sufficientemente elevato. Queste voci hanno un'azione diversa rispetto alle altre due. Mostrano che hanno effettivamente bloccato la richiesta. Queste regole sono obbligatorie e non possono essere disabilitate. Non dovrebbero essere considerati come regole, ma più come infrastruttura di base degli interni WAF.

{ 
    "resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2", 
    "operationName": "ApplicationGatewayFirewall", 
    "category": "ApplicationGatewayFirewallLog", 
    "properties": { 
        "instanceId": "appgw_3", 
        "clientIp": "167.220.2.139", 
        "clientPort": "", 
        "requestUri": "\/", 
        "ruleSetType": "OWASP_CRS", 
        "ruleSetVersion": "3.0.0", 
        "ruleId": "920350", 
        "message": "Host header is a numeric IP address", 
        "action": "Matched", 
        "site": "Global", 
        "details": { 
            "message": "Warning. Pattern match \\\"^[\\\\\\\\d.:]+$\\\" at REQUEST_HEADERS:Host. ", 
            "data": "40.90.218.160", 
            "file": "rules\/REQUEST-920-PROTOCOL-ENFORCEMENT.conf\\\"", 
            "line": "791" 
        }, 
        "hostname": "vm000003", 
        "transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt" 
    } 
} 
{ 
    "resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2", 
    "operationName": "ApplicationGatewayFirewall", 
    "category": "ApplicationGatewayFirewallLog", 
    "properties": { 
        "instanceId": "appgw_3", 
        "clientIp": "167.220.2.139", 
        "clientPort": "", 
        "requestUri": "\/", 
        "ruleSetType": "OWASP_CRS", 
        "ruleSetVersion": "3.0.0", 
        "ruleId": "942130", 
        "message": "SQL Injection Attack: SQL Tautology Detected.", 
        "action": "Matched", 
        "site": "Global", 
        "details": { 
            "message": "Warning. Pattern match \\\"(?i:([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)([\\\\\\\\d\\\\\\\\w]++)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?:(?:=|\\u003c=\\u003e|r?like|sounds\\\\\\\\s+like|regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)\\\\\\\\2|(?:!=|\\u003c=|\\u003e=|\\u003c\\u003e|\\u003c|\\u003e|\\\\\\\\^|is\\\\\\\\s+not|not\\\\\\\\s+like|not\\\\\\\\s+regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?!\\\\\\\\2)([\\\\\\\\d\\\\\\\\w]+)))\\\" at ARGS:text1. ", 
            "data": "Matched Data: 1=1 found within ARGS:text1: 1=1", 
            "file": "rules\/REQUEST-942-APPLICATION-ATTACK-SQLI.conf\\\"", 
            "line": "554" 
        }, 
        "hostname": "vm000003", 
        "transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt" 
    } 
} 
{ 
    "resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2", 
    "operationName": "ApplicationGatewayFirewall", 
    "category": "ApplicationGatewayFirewallLog", 
    "properties": { 
        "instanceId": "appgw_3", 
        "clientIp": "167.220.2.139", 
        "clientPort": "", 
        "requestUri": "\/", 
        "ruleSetType": "", 
        "ruleSetVersion": "", 
        "ruleId": "0", 
        "message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Score: 8)", 
        "action": "Blocked", 
        "site": "Global", 
        "details": { 
            "message": "Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. ", 
            "data": "", 
            "file": "rules\/REQUEST-949-BLOCKING-EVALUATION.conf\\\"", 
            "line": "57" 
        }, 
        "hostname": "vm000003", 
        "transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt" 
    } 
} 
{ 
    "resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2", 
    "operationName": "ApplicationGatewayFirewall", 
    "category": "ApplicationGatewayFirewallLog", 
    "properties": { 
        "instanceId": "appgw_3", 
        "clientIp": "167.220.2.139", 
        "clientPort": "", 
        "requestUri": "\/", 
        "ruleSetType": "", 
        "ruleSetVersion": "", 
        "ruleId": "0", 
        "message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Inbound Score: 8 - SQLI=5,XSS=0,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): SQL Injection Attack: SQL Tautology Detected.", 
        "action": "Blocked", 
        "site": "Global", 
        "details": { 
            "message": "Warning. Operator GE matched 5 at TX:inbound_anomaly_score. ", 
            "data": "", 
            "file": "rules\/RESPONSE-980-CORRELATION.conf\\\"", 
            "line": "73" 
        }, 
        "hostname": "vm000003", 
        "transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt" 
    }
}

Correzione di falsi positivi

Con queste informazioni e la conoscenza che la regola 942130 è quella corrispondente alla 1=1 stringa, è possibile eseguire alcune operazioni per impedire il blocco del traffico:

  • Usare un elenco di esclusione

    Per altre informazioni sugli elenchi di esclusione, vedere Configurazione waf.

  • Disabilitare la regola.

Uso di un elenco di esclusione

Per prendere una decisione informata sulla gestione di un falso positivo, è importante acquisire familiarità con le tecnologie usate dall'applicazione. Si supponga, ad esempio, che non sia presente un server SQL nello stack di tecnologie e che si ottengano falsi positivi correlati a tali regole. La disabilitazione di queste regole non indeboli necessariamente la sicurezza.

Un vantaggio dell'uso di un elenco di esclusione è che solo una parte specifica di una richiesta è disabilitata. Ciò significa tuttavia che un'esclusione specifica è applicabile a tutto il traffico che passa attraverso il WAF perché si tratta di un'impostazione globale. Ad esempio, questo potrebbe causare un problema se 1=1 è una richiesta valida nel corpo di una determinata app, ma non per altri. Un altro vantaggio è che è possibile scegliere tra corpo, intestazioni e cookie da escludere se viene soddisfatta una determinata condizione, anziché escludere l'intera richiesta.

In alcuni casi, in alcuni casi, i parametri specifici vengono passati nel WAF in modo che non siano intuitivi. Ad esempio, è presente un token che viene passato durante l'autenticazione usando l'ID Microsoft Entra. Questo token, __RequestVerificationToken, in genere viene passato come cookie di richiesta. Tuttavia, in alcuni casi in cui i cookie sono disabilitati, questo token viene passato anche come attributo di richiesta o arg. In questo caso, è necessario assicurarsi che __RequestVerificationToken venga aggiunto anche all'elenco di esclusione come nome dell'attributo Request.

Esclusioni

In questo esempio si vuole escludere il nome dell'attributo Request uguale a text1. Questo è evidente perché è possibile visualizzare il nome dell'attributo nei log del firewall: dati: dati corrispondenti: 1=1 trovati in ARGS:text1: 1=1. L'attributo è text1. È anche possibile trovare il nome di questo attributo in altri modi, vedere Ricerca dei nomi degli attributi della richiesta.

Elenchi di esclusione di WAF

È possibile creare esclusioni per WAF in gateway applicazione a livelli di ambito diversi. Per altre informazioni, vedere Elenchi di esclusione di Web Application Firewall.

Disabilitazione delle regole

Un altro modo per aggirare un falso positivo consiste nel disabilitare la regola corrispondente all'input che il WAF pensava fosse dannoso. Poiché sono stati analizzati i log waf e la regola è stata ridotta a 942130, è possibile disabilitarla nel portale di Azure. Vedere Personalizzare le regole web application firewall tramite il portale di Azure.

Un vantaggio della disabilitazione di una regola è che se si conosce tutto il traffico che contiene una determinata condizione che normalmente è bloccata è traffico valido, è possibile disabilitare tale regola per l'intero WAF. Tuttavia, se si tratta solo di traffico valido in un caso d'uso specifico, si apre una vulnerabilità disabilitando tale regola per l'intero WAF perché si tratta di un'impostazione globale.

Per usare Azure PowerShell, vedere Personalizzare le regole del web application firewall tramite PowerShell. Per usare l'interfaccia della riga di comando di Azure, vedere Personalizzare le regole web application firewall tramite l'interfaccia della riga di comando di Azure.

Regole di WAF

Ricerca dei nomi degli attributi della richiesta

Con l'aiuto di Fiddler, è possibile esaminare le singole richieste e determinare quali campi specifici di una pagina Web vengono chiamati. Ciò consente di escludere determinati campi dall'ispezione usando elenchi di esclusione.

In questo esempio è possibile notare che il campo in cui è stata immessa la stringa 1=1 è denominato text1.

Screenshot del debugger Web Progress Telerik Fiddler. Nella scheda Raw 1 = 1 è visibile dopo il nome text1.

Si tratta di un campo che è possibile escludere. Per altre informazioni sugli elenchi di esclusione, vedere Elenchi di esclusione del web application firewall. È possibile escludere la valutazione in questo caso configurando l'esclusione seguente:

Esclusione waf

È anche possibile esaminare i log del firewall per ottenere le informazioni necessarie per visualizzare gli elementi da aggiungere all'elenco di esclusione. Per abilitare la registrazione, vedere Integrità back-end, log delle risorse e metriche per gateway applicazione.

Esaminare il log del firewall e visualizzare il file PT1H.json per l'ora in cui si desidera controllare la richiesta.

In questo esempio è possibile osservare che sono presenti quattro regole con lo stesso TransactionID e che si sono verificate tutte nello stesso momento:

-	{
-	    "resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
-	    "operationName": "ApplicationGatewayFirewall",
-	    "category": "ApplicationGatewayFirewallLog",
-	    "properties": {
-	        "instanceId": "appgw_3",
-	        "clientIp": "167.220.2.139",
-	        "clientPort": "",
-	        "requestUri": "\/",
-	        "ruleSetType": "OWASP_CRS",
-	        "ruleSetVersion": "3.0.0",
-	        "ruleId": "920350",
-	        "message": "Host header is a numeric IP address",
-	        "action": "Matched",
-	        "site": "Global",
-	        "details": {
-	            "message": "Warning. Pattern match \\\"^[\\\\\\\\d.:]+$\\\" at REQUEST_HEADERS:Host. ",
-	            "data": "40.90.218.160",
-	            "file": "rules\/REQUEST-920-PROTOCOL-ENFORCEMENT.conf\\\"",
-	            "line": "791"
-	        },
-	        "hostname": "vm000003",
-	        "transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
-	    }
-	}
-	{
-	    "resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
-	    "operationName": "ApplicationGatewayFirewall",
-	    "category": "ApplicationGatewayFirewallLog",
-	    "properties": {
-	        "instanceId": "appgw_3",
-	        "clientIp": "167.220.2.139",
-	        "clientPort": "",
-	        "requestUri": "\/",
-	        "ruleSetType": "OWASP_CRS",
-	        "ruleSetVersion": "3.0.0",
-	        "ruleId": "942130",
-	        "message": "SQL Injection Attack: SQL Tautology Detected.",
-	        "action": "Matched",
-	        "site": "Global",
-	        "details": {
-	            "message": "Warning. Pattern match \\\"(?i:([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)([\\\\\\\\d\\\\\\\\w]++)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?:(?:=|\\u003c=\\u003e|r?like|sounds\\\\\\\\s+like|regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)\\\\\\\\2|(?:!=|\\u003c=|\\u003e=|\\u003c\\u003e|\\u003c|\\u003e|\\\\\\\\^|is\\\\\\\\s+not|not\\\\\\\\s+like|not\\\\\\\\s+regexp)([\\\\\\\\s'\\\\\\\"`\\\\\\\\(\\\\\\\\)]*?)(?!\\\\\\\\2)([\\\\\\\\d\\\\\\\\w]+)))\\\" at ARGS:text1. ",
-	            "data": "Matched Data: 1=1 found within ARGS:text1: 1=1",
-	            "file": "rules\/REQUEST-942-APPLICATION-ATTACK-SQLI.conf\\\"",
-	            "line": "554"
-	        },
-	        "hostname": "vm000003",
-	        "transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
-	    }
-	}
-	{
-	    "resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
-	    "operationName": "ApplicationGatewayFirewall",
-	    "category": "ApplicationGatewayFirewallLog",
-	    "properties": {
-	        "instanceId": "appgw_3",
-	        "clientIp": "167.220.2.139",
-	        "clientPort": "",
-	        "requestUri": "\/",
-	        "ruleSetType": "",
-	        "ruleSetVersion": "",
-	        "ruleId": "0",
-	        "message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Score: 8)",
-	        "action": "Blocked",
-	        "site": "Global",
-	        "details": {
-	            "message": "Access denied with code 403 (phase 2). Operator GE matched 5 at TX:anomaly_score. ",
-	            "data": "",
-	            "file": "rules\/REQUEST-949-BLOCKING-EVALUATION.conf\\\"",
-	            "line": "57"
-	        },
-	        "hostname": "vm000003",
-	        "transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
-	    }
-	}
-	{
-	    "resourceId": "/SUBSCRIPTIONS/A6F44B25-259E-4AF5-888A-386FED92C11B/RESOURCEGROUPS/DEMOWAF_V2/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/DEMOWAF-V2",
-	    "operationName": "ApplicationGatewayFirewall",
-	    "category": "ApplicationGatewayFirewallLog",
-	    "properties": {
-	        "instanceId": "appgw_3",
-	        "clientIp": "167.220.2.139",
-	        "clientPort": "",
-	        "requestUri": "\/",
-	        "ruleSetType": "",
-	        "ruleSetVersion": "",
-	        "ruleId": "0",
-	        "message": "Mandatory rule. Cannot be disabled. Inbound Anomaly Score Exceeded (Total Inbound Score: 8 - SQLI=5,XSS=0,RFI=0,LFI=0,RCE=0,PHPI=0,HTTP=0,SESS=0): SQL Injection Attack: SQL Tautology Detected.",
-	        "action": "Blocked",
-	        "site": "Global",
-	        "details": {
-	            "message": "Warning. Operator GE matched 5 at TX:inbound_anomaly_score. ",
-	            "data": "",
-	            "file": "rules\/RESPONSE-980-CORRELATION.conf\\\"",
-	            "line": "73"
-	        },
-	        "hostname": "vm000003",
-	        "transactionId": "AcAcAcAcAKH@AcAcAcAcAyAt"
-	    }
-	}

Con la conoscenza del funzionamento dei set di regole CRS e del funzionamento del set di regole CRS 3.0 con un sistema di assegnazione dei punteggi anomalie (vedere Web Application Firewall per app Azure lication Gateway) si sa che le due regole inferiori con l'azione: La proprietà bloccata si blocca in base al punteggio totale delle anomalie. Le regole su cui concentrarsi sono le prime due.

La prima voce viene registrata perché l'utente ha usato un indirizzo IP numerico per passare al gateway applicazione, che in questo caso può essere ignorato.

Il secondo (regola 942130) è quello interessante. È possibile visualizzare nei dettagli che corrisponde a un criterio (1=1)e il campo è denominato text1. Seguire gli stessi passaggi precedenti per escludere il nome dell'attributo della richiesta uguale 1=1a .

Ricerca dei nomi di intestazione della richiesta

Fiddler è uno strumento utile ancora una volta per trovare i nomi delle intestazioni delle richieste. Nello screenshot seguente è possibile visualizzare le intestazioni per questa richiesta GET, che includono Content-Type, User-Agent e così via.

Screenshot del debugger Web Progress Telerik Fiddler. Nella scheda Raw sono elencati i dettagli dell'intestazione della richiesta, ad esempio la connessione, il tipo di contenuto e l'agente utente.

Un altro modo per visualizzare le intestazioni di richiesta e risposta consiste nell'esaminare gli strumenti di sviluppo di Chrome. È possibile premere F12 o fare clic con il pulsante destro del mouse su ->Inspect ->Developer Tools e selezionare la scheda Rete . Caricare una pagina Web e selezionare la richiesta da esaminare.

Chrome F12

Se la richiesta contiene cookie, è possibile selezionare la scheda Cookie per visualizzarle in Fiddler.

Limitare i parametri globali per eliminare i falsi positivi

  • Disabilitare l'ispezione del corpo della richiesta

    Impostando Inspect request body su off, i corpi delle richieste del traffico non vengono valutati dal WAF. Questo può essere utile se si sa che i corpi della richiesta non sono dannosi per l'applicazione.

    Quando si disabilita questa opzione, solo il corpo della richiesta ignora l'ispezione. Le intestazioni e i cookie vengono ancora controllati, a meno che i singoli utenti non vengano esclusi usando la funzionalità dell'elenco di esclusione.

  • Disabilitare il limite massimo del corpo della richiesta

    Disabilitando il limite massimo del corpo della richiesta, i corpi delle richieste di grandi dimensioni possono essere elaborati dal WAF senza essere rifiutati per essere troppo grandi. Questo può essere utile se si hanno regolarmente richieste di grandi dimensioni.

    Quando si disabilita questa opzione, il corpo della richiesta verrà controllato solo fino al limite massimo di ispezione del corpo della richiesta. Se nella richiesta è presente contenuto dannoso oltre il limite massimo di ispezione del corpo della richiesta, il WAF non lo rileverà.

  • Disabilitare i limiti massimi per le dimensioni dei file

    Disabilitando i limiti delle dimensioni dei file per WAF, è possibile caricare file di grandi dimensioni senza che il WAF rifiuti questi caricamenti di file. Consentendo il caricamento di file di grandi dimensioni, aumenta il rischio che il back-end venga sovraccaricato. Se si conosce la dimensione massima che un caricamento di file può essere, è possibile impostare un limite di dimensioni per i caricamenti di file leggermente superiore alle dimensioni massime previste. Limitare le dimensioni del file a un caso d'uso normale per l'applicazione è un altro modo per evitare attacchi. Tuttavia, se i caricamenti dei file superano regolarmente il limite massimo di dimensioni di caricamento dei file applicabili, potrebbe essere necessario disabilitare completamente i limiti delle dimensioni di caricamento dei file per evitare falsi positivi.

    Nota

    Se sai che l'app non richiederà mai alcun caricamento di file superiore a una determinata dimensione, puoi limitarlo impostando un limite.

Metriche del firewall (solo WAF_v1)

Per i web application firewall v1, nel portale sono ora disponibili le metriche seguenti:

  1. Conteggio richieste bloccate di Web Application Firewall Numero di richieste bloccate
  2. Web Application Firewall Blocked Rule Count All rules that were matched and the request was blocked rule count All rules that were matched and the request was blocked rule count All rules that were matched and the request was blocked blocked rule count All rules that were matched and the
  3. Distribuzione totale regole di Web Application Firewall Tutte le regole corrispondenti durante la valutazione

Per abilitare le metriche, selezionare la scheda Metriche nel portale e selezionare una delle tre metriche.

Passaggi successivi

Vedere Come configurare web application firewall in gateway applicazione.