Come faccio a caricare file bloccati da AWS WAF?

7 minuti di lettura
0

Desidero caricare (POST) un file che utilizza un'estensione bloccata da AWS WAF.

Breve descrizione

Per capire perché AWS WAF potrebbe bloccare una richiesta POST, tieni presente i seguenti punti:

  • Le regole gestite di AWS WAF\ _BODY controllano il corpo della richiesta solo fino alla dimensione limite del corpo prevista dalla lista di controllo degli accessi (ACL). Il limite è di 8 KB per le ACL Web regionali e di 16 KB per le ACL Web di Amazon CloudFront. Per le ACL Web di CloudFront, è possibile aumentare il limite fino a 64 KB nella configurazione ACL Web.
  • Le regole di iniezione SQL e scripting cross-site (XSS) sono sensibili ai file con caratteri casuali nei metadati. Questi caratteri casuali potrebbero richiamare regole ACL Web a causa della loro somiglianza con una vera firma XSS o iniezione SQL in AWS WAF.

Innanzitutto, verifica le regole comuni che potrebbero bloccare i caricamenti di file. Se una regola comune non blocca il caricamento, prendi in considerazione opzioni aggiuntive per consentire i file bloccati.
Le seguenti regole bloccano in genere i caricamenti di file:

  • CrossSiteScripting_BODY
  • SQLi\ _BODY
  • WindowsShellCommands_BODY
  • GenericLFI_BODY
  • SizeRestrictions_BODY

Soluzione

Caricamenti di file bloccati dalle regole SQLi\ _BODY e CrossSiteScripting\ _BODY

Controlla il campo terminatingRuleMatchDetails nei log completi di AWS WAF per le informazioni sulle regole.

Nota: il campo terminatingRuleMatchDetails viene popolato solo per gli attacchi SQLi_BODY e CrossSiteScripting_BODY.

Di seguito è riportato un esempio di matchedData per CrossSiteScripting_BODY:

"terminatingRuleMatchDetails": [{
        "conditionType": "XSS",
        "location": "BODY",
        "matchedData": [
            "<?",
            "`"
        ]

Di seguito è riportato un esempio di matchedData per SQLi\ _BODY:

"terminatingRuleMatchDetails": [{
        "conditionType": "SQL_INJECTION",
        "location": "BODY",
        "matchedData": [
            ")",
            "*",
            "(",
            "0"
        ]

Per risolvere i caricamenti bloccati da SQLi_BODY o CrossSiteScripting_BODY, scegli una delle seguenti opzioni:

Aggiungi indirizzi IP noti a una lista sicura
Se conosci l'intervallo di indirizzi IP che accede all'applicazione, aggiungi indirizzi IP noti a una regola di lista sicura con condizioni di corrispondenza IP. Per istruzioni, consulta la sezione Working with IP match conditions.

Usa una lista sicura con una condizione di corrispondenza
Usa una lista sicura con una condizione di corrispondenza di stringa o espressione regolare (regex) per consentire la richiesta. Puoi creare una lista sicura basata su un URI, intestazioni HTTP o una frase associata al CORPO dei file AWS WAF.

Per creare la tua lista sicura, crea una nuova regola personalizzata. Questa regola blocca i vettori XSS o SQLi con una condizione di eccezione basata sui dati corrispondenti degli attributi di richiesta validi per il caricamento. Assicurati di ignorare l'azione per le regole specifiche all'interno dei gruppi di regole gestiti che causano il falso positivo: SQLi_BODY e CrossSiteScripting_BODY.

Per creare questa regola personalizzata, completa i seguenti passaggi:

  1. Apri la console AWS WAF.
  2. Nel riquadro di navigazione, in AWS WAF, scegli ACL Web.
  3. In Regione, scegli la regione AWS in cui hai creato l’ACL Web.
    Nota: seleziona Globale se l'ACL Web è configurata per Amazon CloudFront.
  4. Seleziona la tua ACL Web. Quindi, nella scheda Regole dell’ACL Web, scegli Regole.
  5. Scegli Aggiungi regole, quindi scegli Aggiungi regole e gruppi di regole personali.
  6. Per Nome, inserisci il nome di regola, quindi scegli Regola normale.
  7. Per Se una richiesta, scegli corrisponde a tutte le istruzioni (AND).
  8. Completa l’Istruzione 1 con i seguenti campi:
    Per Ispeziona, seleziona Ha un'etichetta.
    Per Ambito corrispondenza, seleziona Etichetta.
    Per Chiave corrispondenza, inserisci l'etichetta della regola che crea il falso positivo. Ad esempio, se la regola CrossSiteScripting_BODY crea il falso positivo, inserisci awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body.
  9. Completa l’Istruzione 2 con i seguenti campi:
    Seleziona la casella di controllo Nega i risultati dell'istruzione.
    Per Ispeziona, seleziona Corpo.
    Per Tipo di corrispondenza, seleziona Contiene una stringa.
    Per Stringa per la corrispondenza, inserisci il valore che desideri abbinare alla regola.
  10. (Facoltativo) Per Trasformazione del testo, scegli una Trasformazione del testo o Nessuna.
  11. Per Azione, scegli Blocca. Quindi, scegli Aggiungi regola.
  12. Per Imposta priorità regola, sposta la regola sotto il gruppo di regole gestite che blocca la richiesta. In tal modo, si imposta l'etichetta della regola gestita innanzitutto per l'ispezione del gruppo di regole, prima che AWS WAF utilizzi l'etichetta nella priorità della regola successiva.
  13. Scegli Salva.

Importante: è consigliabile testare le regole in un ambiente non di produzione con l'Azione impostata su Conteggio. Per valutare la regola, utilizza le metriche di Amazon CloudWatch combinate con richieste campionate o log AWS WAF. Quando la regola si comporta come previsto, cambia l'Azione in Blocca.

Caricamenti di file bloccati dalle regole WindowsShellCommands_BODY, GenericLFI_BODY o SizeRestrictions_BODY

Effettua l’acquisizione di un file HTTP Archive (HAR) quando il file viene caricato. Quindi, verifica la presenza delle regole WindowsShellCommands_BODY, GenericLFI_BODY o SizeRestrictions_BODY. Per istruzioni, consulta la sezione Come posso creare un file HAR dal mio browser per un caso di Supporto AWS?

Per consentire i falsi positivi per WindowsShellCommands_BODY, GenericLFI_BODY o SizeRestrictions_BODY, imposta innanzitutto la regola corrispondente sulla modalità Conteggio. Per istruzioni, consulta la sezione Overriding a rule group's evaluation result to Count.

Quindi, crea una regola personalizzata per la regola gestita specifica che causa il falso positivo:

  1. Apri la console AWS WAF.
  2. Nel riquadro di navigazione, in AWS WAF, scegli ACL Web.
  3. In Regione, scegli la regione AWS in cui hai creato l’ACL Web.
    Nota: seleziona Globale se l'ACL Web è configurata per Amazon CloudFront.
  4. Seleziona la tua ACL Web. Quindi, nella scheda Regole dell’ACL Web, scegli Regole.
  5. Scegli Aggiungi regole, quindi scegli Aggiungi regole e gruppi di regole personali.
  6. Per Nome, inserisci il nome di regola, quindi scegli Regola normale.
  7. Per Se una richiesta, scegli corrisponde a tutte le istruzioni (AND).
  8. Completa l’Istruzione 1 con i seguenti campi:
    Per Ispeziona, seleziona Ha un'etichetta.
    Per Ambito corrispondenza, seleziona Etichetta.
    Per Chiave corrispondenza, inserisci l'etichetta della regola che crea il falso positivo. Ad esempio, se la regola WindowsShellCommands_BODY crea il falso positivo, inserisci awswaf:managed:aws:windows-os:WindowsShellCommands_Body.
  9. Completa l’Istruzione 2 con i seguenti campi:
    Seleziona la casella di controllo Nega i risultati dell'istruzione.
    Per Ispeziona, seleziona il **Percorso URI **.
    Per Tipo di corrispondenza, seleziona Corrisponde esattamente alla stringa.
    Per Stringa per la corrispondenza, inserisci il percorso URI in cui vengono effettuate le richieste.
  10. (Facoltativo) Per Trasformazione del testo, scegli una Trasformazione del testo o Nessuna.
  11. Per Azione, scegli Blocca.
  12. Scegli Aggiungi regola.
  13. Per Imposta priorità regola, sposta la regola sotto la regola gestita che ha bloccato la richiesta.
  14. Scegli Salva.

Importante: è consigliabile testare le regole in un ambiente non di produzione con l'Azione impostata su Conteggio. Valuta la regola con le metriche di CloudWatch combinate con richieste campionate o log AWS WAF. Quando la regola si comporta come previsto, cambia l'Azione in Blocca.

Opzioni aggiuntive per consentire i file bloccati

Nota: le regole vengono elaborate nello stesso ordine dell'ACL Web. Per i seguenti suggerimenti, assicurati di riordinare le priorità delle regole in base alle esigenze.
Scegli il metodo migliore per il tuo caso d'uso:

  • Applica l'esclusione selettiva con un'istruzione della regola di corrispondenza delle stringhe (AWS WAF) o una condizione di corrispondenza delle stringhe (AWS WAF Classic). Aggiungi frasi specifiche associate al CORPO dei file alla tua lista sicura. Se si verificano falsi positivi su un determinato percorso URI, aggiungi il percorso alla lista sicura.
  • Usa un dominio separato per il caricamento dei file. Assicurati di considerare se l'opzione risulta conveniente per il tuo caso d'uso.
  • Esegui la scansione (scrub) di file e immagini per identificare codice e dati incorporati. È possibile eseguire questa azione sul lato client prima di caricare i file. In alternativa, se crei una regola di esclusione, puoi eseguire questa azione sul backend dopo avere caricato i file.
  • Comprimi i file prima di caricarli.
    Attenzione: assicurati di non comprimere file dannosi.
  • Se il caricamento avviene da un intervallo di indirizzi IP noti, aggiungili alla tua lista di indirizzi IP sicuri.
  • Usa la codifica base64 per codificare tutti i dati delle immagini in modo che AWS WAF non richiami XSS o SQLi sulle immagini.
    Attenzione: assicurati di evitare la codifica di immagini dannose.
  • Implementa tecniche di ottimizzazione delle immagini, come la rimozione dei blocchi o la randomizzazione dei bit.
AWS UFFICIALE
AWS UFFICIALEAggiornata 4 mesi fa