Usando AWS re:Post, accetti AWS re:Post Termini di utilizzo

Come posso analizzare i log di AWS WAF in CloudWatch?

6 minuti di lettura
0

Archivo i miei log di AWS WAF in Amazon CloudWatch. Voglio analizzare e filtrare questi log.

Risoluzione

Per analizzare e filtrare richieste di log specifiche in CloudWatch, usa Approfondimenti di CloudWatch Logs o il generatore di query in CloudWatch.

Usa Approfondimenti di CloudWatch Logs per analizzare i log di accesso di AWS WAF

Puoi usare Approfondimenti di CloudWatch Logs dalla console CloudWatch o dalla scheda CloudWatch Logs Insights nella console AWS WAF.

Da AWS WAF

Completa i passaggi seguenti:

  1. Apri la console AWS WAF.
  2. Nel pannello di navigazione, in AWS WAF, scegli Web ACLs (ACL web).
  3. In Regione seleziona la regione AWS che contiene la tua lista di controllo degli accessi web (ACL web).
    Nota: se l'ACL web è configurata per Amazon CloudFront, seleziona Globale.
  4. Seleziona la tua ACL web.
  5. Dalle schede nella parte superiore della pagina, accedi a CloudWatch Logs Insights.
  6. In Query editor inserisci la query. Usa la sintassi delle query per progettare le tue query. Puoi anche selezionare query dall'elenco Most frequently used queries (Query utilizzate più spesso).
  7. Scegli Esegui una query.
  8. Per visualizzare i risultati, scegli Log nel pannello di navigazione.

Da CloudWatch

Completa i passaggi seguenti:

  1. Apri la console CloudWatch.
  2. Nel pannello di navigazione, in Log, scegli Logs Insights.
  3. In Seleziona uno o più i gruppi di log seleziona dall'elenco uno o più gruppi di log su cui eseguire la query. In alternativa, vai su Scegli i gruppi di log e seleziona la query.
  4. (Facoltativo) Scegli un intervallo di tempo per il periodo in cui desideri eseguire la query.
  5. Usa la sintassi delle query per progettare le tue query.
  6. Per visualizzare i risultati, scegli Esegui una query.

Per filtrare informazioni specifiche, utilizza le query di esempio seguenti:

Principali indirizzi IP dei client

Per contare i principali indirizzi IP dei client che effettuano richieste alla tua risorsa protetta, esegui questa query:

fields httpRequest.clientIp
| stats count(*) as requestCount by httpRequest.clientIp
| sort requestCount desc

Principali paesi

Per contare i principali paesi da cui vengono inviate le richieste alla tua risorsa protetta, esegui questa query:

stats count(*) as RequestCount by httpRequest.country as Country
| sort RequestCount desc

Principali host

Per contare le intestazioni dei principali host che effettuano richieste alla tua risorsa protetta, esegui questa query:

parse @message /\"name\":\"[Hh]ost\",\"value\":\"(?Host[^\"]*)\"/
| stats count(*) as RequestCount by Host
| sort RequestCount desc

Principali metodi

Per contare i principali metodi HTTP utilizzati per effettuare richieste alla tua risorsa protetta, esegui questa query:

stats count(*)as RequestCount by httpRequest.httpMethod as Method
| sort RequestCount desc

Principali agenti utente

Per contare i principali agenti utente che effettuano richieste alla tua risorsa protetta, esegui questa query:

parse @message /\"name\":\"[Uu]ser\-[Aa]gent\",\"value\":\"(?UserAgent[^\"]*)\"/
| stats count(*) as RequestCount by UserAgent
| sort RequestCount desc

Principali percorsi URI

Per elencare i percorsi URI più visitati sulle tue risorse protette, esegui questa query:

fields httpRequest.uri
| stats count(*) as uriVisits by httpRequest.uri
| sort uriVisits desc
| limit 50

Principali regole di terminazione

Per contare le principali regole di terminazione nei tuoi log, esegui questa query:

stats count(*) as RequestCount by terminatingRuleId
| sort RequestCount desc

Filtra richieste bloccate

Per filtrare tutte le richieste bloccate con le regole di terminazione, i percorsi URI e gli indirizzi IP dei client, esegui questa query:

fields @timestamp, httpRequest.clientIp as ClientIP, httpRequest.uri as URI, terminatingRuleId as rule
| filter action = "BLOCK"
| sort @timestamp desc

Filtra per host

Per filtrare i log in base a un valore di intestazione host specifico, esegui questa query:

fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.uri as URI
| parse @message /\{"name":"[Hh]ost\",\"value":\"(?Host[^\"]*)\"/
| filter Host = "www.example.com"

Nota: sostituisci www.example.com con il nome del tuo host.

Filtra per un agente utente specifico

Per filtrare i log in base a un agente utente specifico, esegui questa query:

fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.httpMethod as Method,httpRequest.uri as URI
| parse @message /\"name\":\"[Hh]ost\",\"value\":\"(?Host[^\"]*)\"/
| parse @message /\"name\":\"[Uu]ser\-[Aa]gent\",\"value\":\"(?UserAgent[^\"]*)\"/
| filter @message like "Postman"
| display Rule, action, Country, ClientIP, Method, URI, Host, UserAgent
| sort action, URI desc

Nota: sostituisci Postman con il tuo agente utente.

Filtra le richieste POST

Per filtrare le richieste POST, esegui questa query:

fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.httpMethod as Method, httpRequest.uri as URI
| parse @message /\"name\":\"[Hh]ost\",\"value\":\"(?Host[^\"]*)\"/
| parse @message /\"name\":\"[Uu]ser\-[Aa]gent\",\"value\":\"(?UserAgent[^\"]*)\"/
| filter httpRequest.httpMethod ="POST"
| display Rule, action, Country, ClientIP, Method, URI, Host, UserAgent
| sort @timestamp desc

Filtra per paese

Per escludere tramite filtro le richieste che non provengono da un paese specifico, esegui questa query:

fields terminatingRuleId as Rule, action, httpRequest.country as Country, httpRequest.clientIp as ClientIP, httpRequest.uri as URI
| parse @message /\"name\":\"[Hh]ost\",\"value\":\"(?Host[^\"]*)\"/
| parse @message /\"name\":\"[Uu]ser\-[Aa]gent\",\"value\":\"(?UserAgent[^\"]*)\"/
| filter Country != "US"
| sort Country, action desc

Nota: sostituisci US con il prefisso internazionale che desideri escludere tramite filtro.

Filtra le richieste bloccate da regole basate sulla frequenza

Per filtrare le richieste bloccate da una regola basata sulla frequenza, esegui questa query:

fields @timestamp, httpRequest.clientIp as ClientIP, httpRequest.uri as URI, terminatingRuleId as rule, httpRequest.country as Country
| filter action = "BLOCK"
| filter terminatingRuleType = "RATE_BASED"
| sort @timestamp desc

Cross-site scripting (XSS) o iniezione SQL

Per trovare modelli che causano XSS o iniezione SQL nella regola di terminazione per una regola personalizzata o un gruppo di regole gestite da AWS, esegui questa query. La query restituisce voci con timestamp, indirizzo IP del client, paese di origine, dettagli sulla corrispondenza e ID della richiesta:

fields @timestamp
| parse @message ',"terminatingRuleMatchDetails":[*],' as terminatingRuleMatchData
| filter (terminatingRuleMatchData like /XSS/ or terminatingRuleMatchData like /SQL/)
| display @timestamp, httpRequest.clientIp, httpRequest.country, terminatingRuleMatchData, httpRequest.requestId

Filtra le richieste contate da una regola specifica in un gruppo di regole

Per filtrare le richieste contate da una regola specifica in un gruppo di regole e poi terminate dall'azione predefinita, esegui questa query:

fields @timestamp
| filter (@message like 'excludedRules":[{"exclusionType":"EXCLUDED_AS_COUNT","ruleId":"NoUserAgent_HEADER"}]}' and @message like 'terminatingRuleId":"Default_Action"')
| parse @message '"ruleId":*}]}' as ruleMatchDetails
| display @timestamp, httpRequest.clientIp, httpRequest.country, ruleMatchDetails, httpRequest.requestId

Nota: sostituisci ruleId con l'ID della tua regola.

Filtra le richieste con un CAPTCHA non valido

Per filtrare le prime 100 richieste con un CAPTCHA non valido, esegui questa query. La query restituisce l'ora in cui è stata effettuata la richiesta, l'indirizzo IP, l'ID della richiesta, il codice di risposta e l'intero messaggio:

fields @timestamp, httpRequest.clientIp, httpRequest.requestId, captchaResponse.failureReason, @message
| filter captchaResponse.failureReason ='TOKEN_MISSING'
| sort @timestamp desc
| limit 100

Nota: sostituisci 100 con il numero di richieste che desideri filtrare.

Usa il generatore di query in CloudWatch per analizzare i log di accesso di AWS WAF

Per usare l'IA generativa per analizzare i log degli accessi, esegui il generatore di query in CloudWatch.

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 mesi fa