Regolare le regole WAF preconfigurate di Google Cloud Armor

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Google Cloud Armor fornisce regole WAF preconfigurate, ciascuna composta da più firme provenienti dal Set di regole di base (ModS) di ModSecurity. 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 la richiesta corrisponde a una delle firme associate alla regola WAF preconfigurata. Viene cercata 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à tra 0 e 4, anche se il livello di sensibilità 0 significa che nessuna regola è abilitata per impostazione predefinita.

Un livello di sensibilità più basso indica firme di affidabilità più elevate, che hanno meno probabilità di generare un falso positivo. Un livello di sensibilità più alto 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à di 1:

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

Disattiva firme 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, la regola può essere ottimizzata per disattivare le firme rumorose o non necessarie. Per disattivare le firme in una determinata regola WAF preconfigurata, fornisci un elenco degli ID delle firme indesiderate per l'espressione evaluatePreconfiguredWaf().

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

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

Quando si disattivano gli ID firma dai set di regole CRS preconfigurati, è necessario associare 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 legacy evaluatePreconfigureExpr(). Per ulteriori informazioni sulle espressioni delle regole WAF preconfigurate, consulta il riferimento per la lingua delle regole personalizzate.

Attiva le firme delle regole

Anziché disattivare le firme delle regole, puoi attivarle nei livelli di sensibilità disattivati. Ti consigliamo di attivare le firme delle regole quando ci sono meno firme che vuoi utilizzare in un determinato livello di sensibilità rispetto a quelle che vuoi disattivare. Per attivare le firme delle regole, il livello di sensibilità deve essere 0. L'esempio seguente disattiva tutte le cve-canary firme a tutti i livelli di sensibilità, quindi attiva in modo esplicito 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 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 tali campi dalla richiesta associando un elenco di esclusioni per i campi di richiesta alla 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 operativo e un valore di campo. Gli operatori di campi 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 dall'ispezione, seguiti da esempi.

Intestazioni della richiesta

Un elenco di nomi di intestazione della 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 è applicabile solo alle firme nel target che originariamente ispezionino il valore dell'intestazione della richiesta. Sono incluse le firme associate al seguente flag di richiesta nel set di regole di base ModSecurity:

  • REQUEST_HEADERS

Solo il valore delle intestazioni della richiesta specificate viene escluso dall'ispezione. Il nome è ancora controllato.

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 è applicabile solo alle firme nel target che ispezionano in origine il valore del cookie della richiesta. Sono incluse le firme associate al seguente flag di richiesta nel set di regole di base ModSecurity:

  • REQUEST_COOKIE

Solo il valore dei cookie della richiesta specificati è escluso dall'ispezione. Il nome è ancora controllato.

Parametri di richiesta query

Un elenco di nomi di 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 è applicabile solo alle firme nel target che ispezionano i parametri della richiesta in origine. Sono incluse le firme associate ai seguenti flag di richiesta nel set di regole di base ModSecurity:

  • ARGS
  • ARGS_GET
  • REQUEST_URI
  • REQUEST_URI_RAW
  • RICHIESTA_LINE

Solo il valore dei parametri di ricerca specificati viene escluso dall'ispezione, che può essere nella stringa di query o nel corpo del POST. Il nome è ancora ispezionato.

Poiché i parametri di ricerca fanno parte dell'URI e della riga di 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 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 su una firma che controlla l'intero corpo della richiesta se la richiesta ha un parametro "args" nel corpo del POST e il valore di "args".

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 è applicabile solo alle firme nel target che ispezionirebbero in origine l'URI della richiesta. Sono incluse le firme associate ai seguenti flag di richiesta nel set di regole di base ModSecurity:

  • REQUEST_URI
  • REQUEST_URI_RAW
  • RICHIESTA_LINE
  • RICHIESTA_FILE
  • RICHIESTA_BASENAME

Quando si esclude uno qualsiasi dei campi precedenti, il campo viene escluso interamente 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 alla base della regola WAF sqli-v33-stable, per escludere tutti i cookie della richiesta dall'ispezione:

gcloud beta 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 beta 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 di richiesta per gli ID di regola owasp-crs-v030301-id942110-sqli e owasp-crs-v030301-id942120-sqli in sqli-v33-stable.

gcloud beta 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

Quando si 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, 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 per i quali applicare l'analisi JSON. L'esempio seguente aggiorna il criterio di sicurezza POLICY_NAME per attivare 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 ulteriori informazioni, consulta i limiti relativi ai criteri di sicurezza.

  • Se i contenuti JSON superano i 8 kB, affinché 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 alcun risultato, potrebbe essere tentato l'analisi dell'URI. Se l'analizzatore sintattico URI non restituisce parametri nome-valore o solo parametri parziali nome-valore, l'intera stringa parziale o totale potrebbe essere considerata come il nome parametro per l'ispezione.

Passaggi successivi