Raccogliere i log di AWS WAF

Supportato in:

Questo documento spiega come raccogliere i log del WAF (Web Application Firewall) AWS configurando un feed di Google Security Operations. L'analizzatore sintattico trasforma i log non elaborati in formato JSON in un formato strutturato conforme all'UDM di Google SecOps. Estrae campi come indirizzi IP, URL, user agent e dettagli delle regole di sicurezza, mappandoli ai campi UDM corrispondenti per una rappresentazione e un'analisi coerenti.

Prima di iniziare

  • Assicurati di avere un'istanza Google SecOps.
  • Assicurati di disporre dell'accesso con privilegi ad AWS.

Configura il bucket Amazon S3

  1. Crea un bucket Amazon S3 seguendo questa guida dell'utente: Creare un bucket
  2. Salva Nome e Regione del bucket per utilizzarli in un secondo momento.
  3. Crea un utente seguendo questa guida dell'utente: Creare un utente IAM.
  4. Seleziona l'utente creato.
  5. Seleziona la scheda Credenziali di sicurezza.
  6. Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
  7. Seleziona Servizio di terze parti come Caso d'uso.
  8. Fai clic su Avanti.
  9. (Facoltativo) Aggiungi il tag description.
  10. Fai clic su Crea chiave di accesso.
  11. Fai clic su Scarica file CSV per salvare la chiave di accesso e la chiave di accesso segreta per utilizzarle in un secondo momento.
  12. Fai clic su Fine.
  13. Seleziona la scheda Autorizzazioni.
  14. Fai clic su Aggiungi autorizzazioni nella sezione Norme relative alle autorizzazioni.
  15. Seleziona Aggiungi autorizzazioni.
  16. Seleziona Collega direttamente i criteri.
  17. Cerca e seleziona il criterio AmazonS3FullAccess.
  18. Fai clic su Avanti.
  19. Fai clic su Aggiungi autorizzazioni.

Crea un elenco di controllo dell'accesso (ACL) web WAF

Se non hai ancora configurato AWS WAF, devi creare un elenco di controllo dell'accesso (ACL) web WAF. Per le configurazioni esistenti, puoi passare alla procedura successiva.

  1. Nella console AWS, cerca e seleziona AWS WAF e Shield.
  2. Fai clic su Crea ACL web.
  3. Specifica le seguenti impostazioni:
    • Nome: assegna un nome all'ACL (ad esempio my-waf-web-acl).
    • Regione: scegli la regione in cui vuoi applicare il WAF.
    • Metriche CloudWatch: abilita la raccolta delle metriche per monitorare l'attività e le regole attivate.
  4. Una volta creata, seleziona l'ACL web per cui vuoi attivare il logging.

Configurare il logging di AWS WAF

  1. Nella console AWS WAF, vai alla scheda Logging dell'ACL web.
  2. Fai clic su Attiva il logging.
  3. Seleziona Amazon S3 come destinazione per i log.
  4. Scegli il bucket S3 creato in precedenza per archiviare i log.
  5. (Facoltativo) Configura un prefisso per organizzare i log (ad esempio waf-logs/).
  6. Fai clic su Salva.

Verifica le autorizzazioni per il bucket S3

Assicurati che il bucket S3 disponga delle autorizzazioni appropriate per consentire ad AWS WAF di scrivere i log.

  1. Vai alla console S3.
  2. Seleziona il bucket in cui verranno archiviati i log.
  3. Nella scheda Autorizzazioni, aggiungi il seguente criterio del bucket per consentire ad AWS WAF di scrivere i log:

    {
      "Version": "2012-10-17",
      "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
                "Service": "wafv2.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::your-log-bucket-name/*"
          }
      ]
    }
    
  1. Fai clic su Salva.

Configura un feed in Google SecOps per importare i log AWS WAF

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo.
  3. Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log AWS WAF).
  4. Seleziona Amazon S3 come Tipo di origine.
  5. Seleziona AWS WAF come Tipo di log.
  6. Fai clic su Avanti.
  7. Specifica i valori per i seguenti parametri di input:

    • Regione: la regione in cui si trova il bucket Amazon S3.
    • URI S3: l'URI del bucket.
      • s3://your-log-bucket-name/waf-logs/
        • Sostituisci quanto segue:
          • your-log-bucket-name: il nome effettivo del bucket.
    • L'URI è una: seleziona Directory o Directory che include sottodirectory.
    • Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
    • ID chiave di accesso: la chiave di accesso utente con accesso al bucket S3.
    • Chiave di accesso segreta: la chiave segreta dell'utente con accesso al bucket S3.
    • Spazio dei nomi degli asset: lo spazio dei nomi degli asset.
    • Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
  8. Fai clic su Avanti.

  9. Rivedi la configurazione del nuovo feed nella schermata Concludi e poi fai clic su Invia.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
azione security_result.action Se l'azione è ALLOW, imposta security_result.action su ALLOW e security_result.severity su INFORMATIONAL. Se l'azione è BLOCK, imposta security_result.action su BLOCK. Se action è CAPTCHA e captchaResponse.responseCode è 405, imposta security_result.action su BLOCK e security_result.action_details su "CAPTCHA {captchaResponse.failureReason}".
captchaResponse.failureReason security_result.action_details Utilizzato in combinazione con action e captchaResponse.responseCode per determinare security_result.action_details.
captchaResponse.responseCode security_result.action_details Utilizzato in combinazione con action e captchaResponse.failureReason per determinare security_result.action_details.
httpRequest.clientIp principal.ip, principal.asset.ip Mappato direttamente a principal.ip e principal.asset.ip.
httpRequest.headers target.hostname, target.asset.hostname, network.http.user_agent, network.http.parsed_user_agent, network.http.referral_url, target.location.country_or_region, target.resource.attribute.labels, target.user.userid Esegue l'iterazione di ogni intestazione in httpRequest.headers. Se il nome dell'intestazione è "host" o "Host", il valore viene mappato a target.hostname e target.asset.hostname. Se il nome dell'intestazione è "User-Agent" o "user-agent", il valore viene mappato a network.http.user_agent e analizzato in network.http.parsed_user_agent. Se il nome dell'intestazione è "Referer" o "referer", il valore viene mappato a network.http.referral_url. Se il nome dell'intestazione è "(?i)time-zone", il valore viene mappato a target.location.country_or_region. Se il nome dell'intestazione è "authorization", il valore viene decodificato e il nome utente viene estratto e mappato a target.user.userid. Tutte le altre intestazioni vengono aggiunte come coppie chiave-valore a target.resource.attribute.labels.
httpRequest.httpMethod network.http.method Mappato direttamente a network.http.method.
httpRequest.requestId network.session_id Mappato direttamente a network.session_id.
httpRequest.uri target.url Mappato direttamente a target.url.
httpSourceId target.resource.name Mappato direttamente a target.resource.name.
httpSourceName metadata.product_event_type Mappato direttamente a metadata.product_event_type.
etichette security_result.rule_labels Esegue l'iterazione di ogni etichetta in etichette. Se il nome dell'etichetta non è vuoto, viene aggiunto come coppia chiave-valore a security_result.rule_labels.
nonTerminatingMatchingRules security_result.action_details, security_result.rule_labels Esegue l'iterazione di ogni regola in nonTerminatingMatchingRules. Se l'azione è ALLOW e l'azione della regola è CAPTCHA, imposta security_result.action_details su "CAPTCHA SUCCESSFUL" e aggiungi l'ID regola a security_result.rule_labels con la chiave "nonTerminatingCaptchaRuleName". Se l'azione è BLOCCA o PERMETTI e l'azione della regola è CONTA, imposta security_result.action_details su "REGOLA CONTA" e aggiungi l'ID regola a security_result.rule_labels con la chiave "nonTerminatingCountRuleName". Se l'azione è BLOCCA o PERMETTI e l'azione della regola è PROVA, imposta security_result.action_details su "REGOLA COUNT" e aggiungi l'ID regola a security_result.rule_labels con la chiave "nonTerminatingChallengeRuleName".
rateBasedRuleList security_result.rule_id, security_result.rule_name, security_result.description Se terminatingRuleType è "RATE_BASED", esegue l'iterazione di ogni regola in rateBasedRuleList. Se terminatingRuleId corrisponde al nome della regola, l'ID regola, il nome della regola e la descrizione vengono mappati rispettivamente a security_result.rule_id, security_result.rule_name e security_result.description.
responseCodeSent network.http.response_code Mappato direttamente a network.http.response_code e convertito in un numero intero.
ruleGroupList intermediary.labels, security_result.rule_id, security_result.rule_name, security_result.description, security_result.detection_fields Esegue l'iterazione di ogni gruppo di regole in ruleGroupList. L'ID gruppo di regole viene aggiunto come coppia chiave-valore a intermediary.labels. Se terminatingRuleType è "MANAGED_RULE_GROUP" e terminatingRuleId corrisponde all'ID gruppo di regole, l'ID regola, il nome e la descrizione della regola vengono mappati rispettivamente a security_result.rule_id, security_result.rule_name e security_result.description. Se terminatingRuleType è "GROUP", l'ID regola di terminazione viene estratto e mappato a security_result.rule_name e security_result.description. L'ID gruppo di regole di terminazione viene aggiunto a security_result.rule_labels con la chiave "terminatingRuleGroupName". Se terminatingRuleType è "REGOLARE", l'azione della regola di terminazione viene estratta e aggiunta ai campisecurity_result.detection con la chiave "terminatingRuleAction{index}".
terminatingRuleId security_result.rule_id, security_result.rule_name, security_result.description Se terminatingRuleType è "RATE_BASED", "MANAGED_RULE_GROUP" o "REGULAR", terminatingRuleId viene mappato a security_result.rule_id, security_result.rule_name e utilizzato per creare security_result.description.
terminatingRuleMatchDetails security_result.description, security_result.category_details, security_result.detection_fields Esegue l'iterazione di ogni corrispondenza in terminatingRuleMatchDetails. Imposta security_result.description su "Regola di terminazione". Se il tipo di condizione non è vuoto, viene aggiunto a security_result.category_details. Se la posizione non è vuota, viene aggiunta a security_result.detection_fields con la chiave "location". Per ogni elemento di dati corrispondente, viene aggiunto a security_result.detection_fields con la chiave "matchedData".
terminatingRuleType security_result.rule_type Mappato direttamente a security_result.rule_type.
timestamp metadata.event_timestamp Convertito in un timestamp e mappato a metadata.event_timestamp.
webaclId intermediary.resource.name Mappato direttamente a intermediary.resource.name.
metadata.vendor_name Impostato su "AMAZON".
metadata.product_name Imposta su "AWS Web Application Firewall".
metadata.log_type Imposta su "AWS_WAF".
network.application_protocol Imposta su "HTTP".
metadata.event_type Impostato su "NETWORK_HTTP" se httpRequest.headers contiene un'intestazione "host" o "Host". In caso contrario, imposta il valore su "STATUS_UPDATE".

Modifiche

2024-03-14

  • Gestione migliorata dei caratteri di escape non validi nei messaggi di log per garantire la corretta formattazione JSON.

2023-12-29

  • È stata standardizzata la mappatura delle informazioni "user-agent" al campo UDM appropriato.
  • ID utente estratti dall'intestazione "authorization" nelle richieste HTTP.

2023-12-08

  • Sono stati corretti diversi bug relativi alla mappatura dei nomi host, all'estrazione dell'URL di destinazione e all'elaborazione delle regole.
  • È stata migliorata la gestione degli errori in sezioni specifiche dell'analizzatore.

2023-12-11

  • È stato aggiunto il supporto per un nuovo formato di log introducendo un nuovo pattern Grok.

2023-08-16

  • È stata migliorata la mappatura delle azioni delle regole di sicurezza al campo UDM per i campi di rilevamento.

2022-12-16

  • Logica di filtro delle date ottimizzata e gestione migliorata dei dati JSON non validi.
  • Informazioni sullo user agent mappate dalle intestazioni HTTP a un campo UDM dedicato.

2022-12-11

  • È stata rimossa la logica non necessaria per la gestione dei log dei messaggi CSV e SYSLOG.

2022-07-22

  • Questo ha segnato la creazione iniziale dell'analizzatore.

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.