Ottimizzare le regole WAF preconfigurate di Google Cloud Armor

Google Cloud Armor fornisce regole WAF preconfigurate, ciascuna costituita da più firme provenienti dal Set di regole di base della sicurezza ModSecurity (CRS). 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() o evaluatePreconfiguredExpr() restituisce il valore true.

Scegli un livello di sensibilità

Ogni firma ha un livello di sensibilità che corrisponde a un livello di paranoia di ModSecurity. Puoi selezionare una sensibilità compresa tra 0 e 4, anche se il livello di sensibilità 0 significa che non sono state attivate regole per impostazione predefinita.

Un livello di sensibilità più basso indica firme di affidabilità più elevate, che difficilmente generano un falso positivo. Un livello di sensibilità più elevato aumenta la sicurezza, ma aumenta anche il rischio di generare un falso positivo. Quando selezioni un livello di sensibilità per la regola WAF, attivi le firme a livelli di sensibilità inferiori o uguali al livello di sensibilità selezionato. Nell'esempio seguente, puoi ottimizzare 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, può essere ottimizzata per disattivare le firme rumorose o non necessarie. Per disattivare le firme in una determinata regola WAF preconfigurata, fornisci un elenco di ID delle firme indesiderate all'espressione evaluatePreconfiguredWaf().

Nell'esempio seguente sono esclusi due ID regola CRS dalla regola WAF xss-v33-stable preconfigurata (CRS 3.3):

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

Quando disattivi gli ID firma dei set di regole CRS preconfigurati, devi evitare la versione dell'ID firma con la 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 legacy evaluatePreconfigureExpr(). Per ulteriori informazioni sulle espressioni preconfigurate delle regole WAF, consulta il riferimento per il linguaggio delle regole personalizzate.

Attivare le firme delle regole

Invece di disattivare le firme delle regole, puoi attivarle nei livelli di sensibilità disattivati in altro modo. Ti consigliamo di attivare le firme delle regole quando ci sono meno firme che vuoi utilizzare in un determinato livello di sensibilità rispetto alle regole che vuoi disattivare. Per attivare le firme per le regole, il livello di sensibilità deve essere 0. L'esempio seguente disattiva tutte le firme cve-canary a tutti i livelli di sensibilità, per poi attivarle esplicitamente in 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 campi di richiesta dall'ispezione

L'applicazione personalizzata potrebbe includere contenuti nei campi di richiesta (come intestazioni, cookie, parametri di ricerca o URI) che corrispondono alle firme nelle regole WAF preconfigurate, ma che sai che sono legittime. In questo caso, puoi ridurre i falsi positivi escludendo questi campi di richiesta dall'ispezione associando un elenco di esclusioni ai campi di richiesta con la regola del criterio di sicurezza.

Quando configuri l'esclusione di un campo di richiesta, lo 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 sul campo e un valore sul campo. Gli operatori di campo disponibili sono i seguenti:

  • EQUALS: l'operatore corrisponde se il valore del campo corrisponde 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 di richiesta che puoi escludere dal controllo, seguiti da esempi.

Intestazioni delle richieste

Un elenco di nomi delle intestazioni di richiesta (senza distinzione tra maiuscole e minuscole, dopo la trasformazione) il cui valore è escluso dall'ispezione durante la valutazione della regola WAF preconfigurata.

L'esclusione è valida solo per le firme nella destinazione che ispezionano in origine il valore dell'intestazione della richiesta. Queste includono le firme associate al seguente flag di richiesta nel set di regole principali ModSecurity:

  • RICHIESTE_INFORMAZIONI

Solo il valore delle intestazioni di richiesta specificate è escluso dal controllo. Il nome è ancora in fase di ispezione.

Richiedi cookie

Un elenco di nomi di cookie di richiesta (senza distinzione tra maiuscole e minuscole, dopo la trasformazione) il cui valore è escluso dall'ispezione durante la valutazione della regola WAF preconfigurata.

L'esclusione è valida solo per le firme nella destinazione che esaminano in origine il valore del cookie della richiesta. Sono incluse le firme associate al seguente flag di richiesta nel set di regole principali ModSecurity:

  • REQUEST_COOKIES

Solo il valore dei cookie della richiesta specificati è escluso dal controllo. Il nome è ancora in fase di ispezione.

Richiedi parametri di ricerca

Un elenco di nomi dei parametri di ricerca delle richieste (senza distinzione tra maiuscole e minuscole, dopo la trasformazione) il cui valore è escluso dall'ispezione durante la valutazione della regola WAF preconfigurata.

L'esclusione è valida solo per le firme nella destinazione che ispezionano in origine i parametri della richiesta. Sono incluse le firme associate ai seguenti flag di richiesta nel set di regole principali ModSecurity:

  • ARGS
  • ARGS_GET
  • URI REQUEST_
  • REQUEST_URI_RAW
  • RICHIESTA_LINE

Solo il valore dei parametri di ricerca specificati è escluso dal controllo, che può essere nella stringa di query o nel corpo POST. Il nome è ancora controllato.

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

Ad esempio, se escludi un parametro di ricerca denominato "args", potresti comunque visualizzare una corrispondenza in una firma che controlla 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 della riga di richiesta esclusi i dati della stringa di query (senza distinzione tra maiuscole e minuscole, dopo la trasformazione) da escludere dall'ispezione durante la valutazione della regola WAF preconfigurata.

L'esclusione è valida solo per le firme nella destinazione che ispezionano in origine l'URI della richiesta. Sono incluse le firme associate ai seguenti flag di richiesta nel set di regole Core ModSecurity:

  • URI REQUEST_
  • REQUEST_URI_RAW
  • RICHIESTA_LINE
  • NOME_RICHIESTA
  • REQUEST_BASENAME

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

Esempi

Il primo esempio aggiorna la regola nel criterio di sicurezza POLICY_1 all'indirizzo PRIORITY per aggiungere una configurazione di esclusione per tutte le firme nella regola WAF sqli-v33-stable, al fine di 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 nel criterio di sicurezza POLICY_2 all'indirizzo PRIORITY per aggiungere una configurazione di esclusione per le firme owasp-crs-v030301-id941140-xss e owasp-crs-v030301-id941270-xss nella regola xss-v33-stable WAF, per escludere le intestazioni delle richieste che iniziano con abc o terminano con xyz dall'ispezione:

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 all'indirizzo 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 sotto sqli-v33-stable.

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

Applica l'analisi JSON ai valori di intestazione Content-Type personalizzati

Durante la valutazione del corpo POST in base alle regole WAF preconfigurate, l'intestazione Content-Type indica il formato dei dati nel corpo della richiesta. Per impostazione predefinita, l'analisi JSON viene applicata solo quando l'analisi JSON è abilitata e l'intestazione Content-Type è impostata su application/json. Tuttavia, puoi configurare un elenco di valori di intestazione Content-Type personalizzati a cui applicare l'analisi JSON. L'esempio seguente aggiorna il criterio di sicurezza POLICY_NAME per abilitare l'analisi JSON e specifica i tipi di contenuti application/json, application/vnd.api+json, application/vnd.collection+json e application/vnd.hyper+json:

gcloud compute security-policies update POLICY_NAME \
    --json-parsing STANDARD \
    --json-custom-content-types "application/json,application/vnd.api+json,application/vnd.collection+json,application/vnd.hyper+json"

L'ispezione del corpo POST è ancora limitata ai primi 8 kB. Per scoprire di più, consulta Limitazioni dei criteri di sicurezza.

  • Se i contenuti JSON sono superiori a 8 kB, in modo che l'analizzatore sintattico JSON restituisca un elenco parziale di parametri nome-valore, i risultati analizzati finora vengono utilizzati per l'ispezione dei parametri.

  • Se l'analizzatore sintattico JSON non restituisce risultati, potrebbe essere tentato l'analisi URI. Se l'analizzatore sintattico URI non restituisce parametri nome-valore o solo parametri parametro valore-valore, l'intera stringa parziale potrebbe essere considerata come il nome parametro per l'ispezione.

Passaggi successivi