Ottimizzare le regole WAF preconfigurate di Google Cloud Armor

Google Cloud Armor fornisce regole WAF preconfigurate, ognuna composta da più firme provenienti dal set di regole di base (CRS) OWASP. Ogni firma corrisponde a una regola di rilevamento degli attacchi nel ruleset. 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.

Scegliere 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, scegli le firme con 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
  }
)

Disattivare le firme delle regole

Se decidi che una regola WAF preconfigurata corrisponde a più richieste del necessario o se la regola blocca il traffico che deve essere consentito, puoi ottimizzarla per disattivare le firme rumorose o altrimenti non necessarie. Per disattivare le firme in una determinata regola WAF preconfigurata, fornisci un elenco di ID delle firme indesiderate 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 ulteriori informazioni sulle espressioni delle regole WAF preconfigurate, consulta la guida di riferimento al linguaggio delle regole personalizzate.

Firme delle regole di attivazione

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']
  }
)

Escludere i campi di richiesta dall'ispezione

La tua applicazione personalizzata potrebbe contenere contenuti nei campi della richiesta (ad esempio intestazioni, cookie,parametri di ricercay 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 dei criteri 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.

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

Intestazioni delle richieste

Un elenco di nomi di intestazioni di richieste 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. Sono incluse le firme associate al seguente flag di richiesta nel set di regole di base OWASP:

  • REQUEST_HEADERS

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

Cookie di richiesta

Un elenco di nomi di cookie di 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 set di regole di base OWASP:

  • REQUEST_COOKIES

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

Parametri di ricerca della richiesta

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

L'esclusione è applicabile solo alle firme nella destinazione che ispezionerebbero originariamente i parametri della richiesta. Sono incluse le firme associate ai seguenti flag di richiesta nel set di regole di base OWASP:

  • ARGS
  • ARGS_GET
  • REQUEST_URI
  • REQUEST_URI_RAW
  • REQUEST_LINE

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

Poiché parametri di ricerca fanno parte dell'URI e della riga di richiesta, questi campi vengono riassemblati per l'ispezione dopo l'esclusione deiparametri di ricercary specificati. Tuttavia, per le firme che esaminano l'intero corpo della richiesta (come le firme associate al flag della 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 visualizzare una corrispondenza in una firma che esamina l'intero corpo della richiesta se la richiesta ha un parametro "args" nel corpo POST e il valore di "args" corrisponde.

URI di 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 set di regole di base 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 delle richieste, i cookie delle richieste e i parametri di ricerca delle richieste, il set di caratteri consentiti per i valori dei campi include i seguenti caratteri:

  • !, #, $, %, &, *, +, -, ., ^, _, `, |, ~
  • Caratteri alfabetici 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 delle richieste, il valore del campo deve essere specificato nel formato URI nel seguente modo:

  • È 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 delle richieste, 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 di richiesta possono essere relativi o assoluti. Tieni presente questo aspetto quando configuri le esclusioni per gli URI delle richieste.

Esempi

Il primo esempio aggiorna la regola nel criterio di sicurezza POLICY_1 in PRIORITY per aggiungere una configurazione di esclusione per tutte le firme nella regola WAF sqli-v33-stable, in modo da escludere tutti i cookie di 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 nel criterio 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 xss-v33-stable, per escludere dall'ispezione le intestazioni delle richieste 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 nel criterio di sicurezza POLICY_3 in PRIORITY per aggiungere una configurazione di esclusione per tutte le firme nella regola WAF sqli-v33-stable. Vengono esclusi dall'ispezione parametri di ricerca della richiesta (analizzati dalla stringa di query URI o dal payload del corpo) 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 nel criterio di sicurezza POLICY_4 in PRIORITY per aggiungere una configurazione di esclusione per la firma owasp-crs-v030301-id930100-lfi nella regola WAF lfi-v33-stable. Esclude dall'ispezione gli URI delle richieste 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 nel criterio 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 Google Cloud Armor valuta il corpo POST in base alle regole WAF preconfigurate, l'intestazione Content-Type indica il formato dei dati nel corpo della richiesta. Per impostazione predefinita, Google Cloud Armor considera i contenuti del corpo POST come una stringa, che è idonea per l'ispezione e la corrispondenza con le regole WAF preconfigurate. Tuttavia, puoi configurare un'analisi più precisa se le richieste in entrata hanno una codifica diversa. Google Cloud Armor supporta i seguenti tipi di codifica:

  • JSON
  • GraphQL

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

Passaggi successivi