Ottimizza le regole WAF preconfigurate di Cloud Armor

Cloud Armor fornisce regole WAF preconfigurate, ognuna delle quali è costituita da più firme provenienti dal core rule set (CRS) OWASP. Ogni firma corrisponde a una regola di rilevamento degli attacchi nel set di regole. Le richieste in entrata vengono valutate in base alle regole WAF preconfigurate. Una richiesta corrisponde a una regola WAF preconfigurata se corrisponde a una delle firme associate alla regola WAF preconfigurata. Viene trovata una corrispondenza quando l'espressione evaluatePreconfiguredWaf() restituisce il valore true.

Scegli un livello di sensibilità

Ogni firma ha un livello di sensibilità che corrisponde a un livello di paranoia OWASP. Puoi selezionare una sensibilità compresa tra 0 e 4, anche se il livello di sensibilità 0 significa che nessuna regola è attivata per impostazione predefinita.

Un livello di sensibilità inferiore indica firme con un'attendibilità maggiore, che hanno meno probabilità di generare un falso positivo. Un livello di sensibilità più alto aumenta la sicurezza, ma anche il rischio di generare un falso positivo. Quando selezioni un livello di sensibilità per la regola WAF preconfigurata, attivi le firme ai livelli di sensibilità inferiori o uguali al livello di sensibilità selezionato. Nell'esempio seguente, ottimizzi una regola WAF preconfigurata selezionando il livello di sensibilità 1:

evaluatePreconfiguredWaf(
  'sqli-v33-stable',
  {
    'sensitivity': 1
  }
)

Disattiva le firme delle regole

Se ritieni che una regola WAF preconfigurata corrisponda a più richieste del necessario o se la regola blocca il traffico che deve essere consentito, può essere ottimizzata per disattivare le firme irrilevanti o altrimenti non necessarie. Per disattivare le firme in una determinata regola WAF preconfigurata, fornisci un elenco di ID delle firme non desiderate all'espressione evaluatePreconfiguredWaf().

L'esempio seguente esclude due ID regola CRS dalla regola WAF preconfigurata sqli-v33-stable (CRS 3.3):

evaluatePreconfiguredWaf(
  'sqli-v33-stable',
  {
    'sensitivity': 4,
    'opt_out_rule_ids': ['owasp-crs-v030301-id942350-sqli', 'owasp-crs-v030301-id942360-sqli']
  }
)

Quando disattivi gli ID firma dai set di regole CRS preconfigurati, devi abbinare la versione dell'ID firma alla versione del set di regole (CRS 3.0 o 3.3) per evitare errori di configurazione.

Puoi anche disattivare gli ID firma utilizzando l'espressione precedente evaluatePreconfigureExpr(). Per saperne di più sulle espressioni delle regole WAF preconfigurate, consulta il riferimento per il linguaggio delle regole personalizzate.

Attiva le firme delle regole

Anziché disattivare le firme delle regole, puoi attivarle nei livelli di sensibilità altrimenti disattivati. Ti consigliamo di attivare le firme delle regole quando il numero di firme che vuoi utilizzare in un determinato livello di sensibilità è inferiore al numero di regole che vuoi disattivare. Per attivare le firme delle regole, il livello di sensibilità deve essere 0. L'esempio seguente disattiva tutte le firme cve-canary a tutti i livelli di sensibilità, quindi attiva esplicitamente owasp-crs-v030001-id044228-cve e owasp-crs-v030001-id144228-cve:

evaluatePreconfiguredWaf(
  'cve-canary',
  {
    'sensitivity': 0,
    'opt_in_rule_ids': ['owasp-crs-v030001-id044228-cve', 'owasp-crs-v030001-id144228-cve']
  }
)

Escludi i campi di richiesta dall'ispezione

La tua applicazione personalizzata potrebbe contenere contenuti nei campi della richiesta (ad esempio intestazioni, cookie, parametri di query o URI) che corrispondono alle firme nelle regole WAF preconfigurate, ma che sai essere legittimi. In questo caso, puoi ridurre i falsi positivi escludendo questi campi di richiesta dall'ispezione associando un elenco di esclusioni per i campi di richiesta alla regola della policy di sicurezza. Tieni presente che quando a una regola WAF è associata un'esclusione di campi della richiesta, non puoi utilizzare l'azione allow.

Quando configuri un'esclusione di campi della richiesta, la associ a una destinazione, che può essere un'intera regola WAF preconfigurata o un elenco di firme in una regola WAF preconfigurata. Puoi specificare una corrispondenza esatta o parziale utilizzando un operatore di campo e un valore di campo. Gli operatori di campo disponibili sono i seguenti:

  • EQUALS: l'operatore corrisponde se il valore del campo è uguale al valore specificato.
  • STARTS_WITH: l'operatore corrisponde se il valore del campo inizia con il valore specificato.
  • ENDS_WITH: l'operatore corrisponde se il valore del campo termina con il valore specificato.
  • CONTAINS: l'operatore corrisponde se il valore del campo contiene il valore specificato.
  • EQUALS_ANY: l'operatore corrisponde se il valore del campo è un valore qualsiasi.

Limite di esclusione dell'ottimizzazione

Il limite di esclusione della messa a punto predefinito è 100 per le policy di backend a livello di servizio (sia globali sia regionali). Questo limite si applica per destinazione e controlla il numero massimo di esclusioni che puoi configurare all'interno di una regola deille policy di sicurezza. Un target è la combinazione di un insieme di regole e un ID regola. Il limite si applica alle esclusioni per i seguenti campi:

Ad esempio, se hai una regola WAF preconfigurata (ad esempio evaluatePreconfiguredWaf('sqli-v33-stable')) e vuoi escludere i campi della richiesta in una destinazione specifica (ad esempio owasp-crs-v030301-id942100-sqli in sqli-v33-stable), puoi configurare fino a 100 intestazioni della richiesta, 100 cookie della richiesta, 100 parametri di query della richiesta e 100 URI della richiesta da escludere per questa destinazione.

Le sezioni seguenti forniscono maggiori informazioni sui campi della richiesta che puoi escludere dall'ispezione, seguite da esempi.

Intestazioni della richiesta

Un elenco di nomi di intestazioni della richiesta il cui valore è escluso dal controllo durante la valutazione delle regole WAF preconfigurate.

L'esclusione è applicabile solo alle firme nella destinazione che ispezionerebbero originariamente il valore dell'intestazione della richiesta. Ciò include le firme associate al seguente flag di richiesta nel core rule set OWASP:

  • REQUEST_HEADERS

Solo il valore delle intestazioni della richiesta specificate è escluso dall'ispezione. Il nome è ancora in fase di ispezione.

Cookie della richiesta

Un elenco di nomi di cookie della richiesta il cui valore è escluso dall'ispezione durante la valutazione delle regole WAF preconfigurate.

L'esclusione è applicabile solo alle firme nella destinazione che avrebbero dovuto ispezionare originariamente il valore del cookie della richiesta. Ciò include le firme associate al seguente flag di richiesta nel core rule set OWASP:

  • REQUEST_COOKIES

Solo il valore dei cookie di richiesta specificati è escluso dall'ispezione. Il nome è ancora in fase di ispezione.

Parametri di query della richiesta

Un elenco di nomi di parametri di query della richiesta il cui valore è escluso dall'ispezione durante la valutazione della regola WAF preconfigurata.

L'esclusione è applicabile solo alle firme nella destinazione che ispezionerebbero originariamente i parametri della richiesta. Ciò include le firme associate ai seguenti flag di richiesta nel core rule set OWASP:

  • ARGS
  • ARGS_GET
  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE

Dall'ispezione vengono esclusi solo i valori dei parametri di query specificati, che possono trovarsi nella stringa di query o nel corpo della richiesta. Il nome è ancora in fase di ispezione.

Poiché i parametri di query fanno parte dell'URI e della riga di richiesta, questi campi vengono riassemblati per l'ispezione dopo aver escluso i parametri di query specificati. Tuttavia, per le firme che esaminano l'intero corpo della richiesta (come le firme associate al flag di richiesta REQUEST_BODY), l'esclusione per i parametri di ricerca non viene applicata.

Ad esempio, se escludi un parametro di query denominato "args", potresti comunque vedere una corrispondenza in una firma che esamina l'intero corpo della richiesta se la richiesta ha un parametro "args" nel corpo della richiesta e il valore di "args" corrisponde.

URI della richiesta

Un elenco di URI dalla riga della richiesta, esclusi i dati della stringa di query da escludere dall'ispezione durante la valutazione della regola WAF preconfigurata.

L'esclusione è applicabile solo alle firme nella destinazione che in origine avrebbero ispezionato l'URI della richiesta. Ciò include le firme associate ai seguenti flag di richiesta nel core rule set OWASP:

  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE
  • REQUEST_FILENAME
  • REQUEST_BASENAME

Quando escludi uno dei campi precedenti, il campo viene escluso completamente dall'ispezione e non viene eseguito alcun riassemblaggio.

Valori del campo

Devi specificare un valore del campo se utilizzi un operatore di campo diverso da EQUALS_ANY.

Per le intestazioni della richiesta, i cookie della richiesta e i parametri di query della richiesta, il set di caratteri consentiti per i valori dei campi include i seguenti caratteri:

  • !, #, $, %, &, *, +, -, ., ^, _, `, |, ~
  • Caratteri alfabetici da A a Z (sia minuscoli che maiuscoli)
  • Caratteri numerici da 0 a 9

Quando applichi le esclusioni per questi campi della richiesta, i valori dei campi configurati vengono confrontati così come sono con i valori (senza distinzione tra maiuscole e minuscole, dopo la trasformazione) della richiesta. Non è necessario eseguire una codifica aggiuntiva se vuoi escludere un carattere specifico che non fa parte del set di caratteri consentiti.

Per gli URI della richiesta, il valore del campo deve essere fornito in formato URI come segue:

  • È consentito uno schema, ma è limitato solo a http o https.
  • È consentito un host, che può essere un indirizzo IP.
  • È consentita una porta.
  • È consentito un percorso.
  • Una query non è consentita.
  • Un frammento non è consentito.

Quando applichi le esclusioni per gli URI della richiesta, i valori dei campi configurati vengono confrontati così come sono con gli URI (senza distinzione tra maiuscole e minuscole, dopo la trasformazione) dalla riga della richiesta, escludendo la stringa di query. Gli URI della riga della richiesta possono essere relativi o assoluti. Tieni presente questo aspetto quando configuri le esclusioni per gli URI della richiesta.

Esempi

Il primo esempio aggiorna la regola nella policy di sicurezza POLICY_1 in PRIORITY per aggiungere una configurazione di esclusione per tutte le firme nella regola WAF preconfigurata sqli-v33-stable, in modo da escludere tutti i cookie della richiesta dall'ispezione:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_1 \
    --target-rule-set "sqli-v33-stable" \
    --request-cookie-to-exclude "op=EQUALS_ANY"

Il secondo esempio aggiorna la regola nella policy di sicurezza POLICY_2 in PRIORITY per aggiungere una configurazione di esclusione per le firme owasp-crs-v030301-id941140-xss e owasp-crs-v030301-id941270-xss nella regola WAF preconfigurata xss-v33-stable, per escludere dall'ispezione le intestazioni della richiesta che iniziano con abc o terminano con xyz:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_2 \
    --target-rule-set "xss-v33-stable" \
    --target-rule-ids "owasp-crs-v030301-id941140-xss,owasp-crs-v030301-id941270-xss" \
    --request-header-to-exclude "op=STARTS_WITH,val=abc" \
    --request-header-to-exclude "op=ENDS_WITH,val=xyz"

Il terzo esempio aggiorna la regola nella policy di sicurezza POLICY_3 in PRIORITY per aggiungere una configurazione di esclusione per tutte le firme nella regola WAF preconfigurata sqli-v33-stable. Vengono esclusi dall'ispezione i parametri di query della richiesta (analizzati dalla stringa di query URI o dal payload del corpo) che sono uguali a bad-param:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_3 \
    --target-rule-set "sqli-v33-stable" \
    --request-query-param-to-exclude "op=EQUALS,val=bad-param"

Il quarto esempio aggiorna la regola nella policy di sicurezza POLICY_4 in PRIORITY per aggiungere una configurazione di esclusione per la firma owasp-crs-v030301-id930100-lfi nella regola WAF preconfigurata lfi-v33-stable. Esclude dall'ispezione gli URI della richiesta che contengono /bad-path:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_4 \
    --target-rule-set "lfi-v33-stable" \
    --target-rule-ids "owasp-crs-v030301-id930100-lfi" \
    --request-uri-to-exclude "op=CONTAINS,val=/bad-path"

Il quinto esempio aggiorna la regola nella policy di sicurezza POLICY_5 in PRIORITY per rimuovere tutte le esclusioni dei campi della richiesta per gli ID regola owasp-crs-v030301-id942110-sqli e owasp-crs-v030301-id942120-sqli in sqli-v33-stable.

gcloud compute security-policies rules remove-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_5 \
    --target-rule-set "sqli-v33-stable" \
    --target-rule-ids "owasp-crs-v030301-id942110-sqli,owasp-crs-v030301-id942120-sqli"

Applica l'analisi ai valori delle intestazioni Content-Type personalizzate

Quando Cloud Armor valuta il corpo della richiesta rispetto alle regole WAF preconfigurate, l'intestazione Content-Type indica il formato dei dati nel corpo della richiesta. Per impostazione predefinita, Cloud Armor considera i contenuti del corpo della richiesta come una stringa, tutti idonei all'ispezione e alla corrispondenza con le regole WAF preconfigurate. Tuttavia, puoi configurare un'analisi più precisa se le richieste in entrata hanno una codifica diversa. Cloud Armor supporta i seguenti tipi di codifica:

  • JSON
  • GraphQL

Per maggiori informazioni, consulta Analisi dei contenuti del corpo della richiesta.

Passaggi successivi