Raccogliere i log di Akamai WAF
Panoramica
Questo parser gestisce i log del Web Application Firewall (WAF) di Akamai, supportando sia i formati syslog che CEF. Estrae campi come indirizzi IP, URL, metodi HTTP, codici di risposta, user agent e informazioni sulle regole di sicurezza, mappandoli all'UDM per una rappresentazione coerente. Il parser gestisce anche campi Akamai specifici come attackData
e clientReputation
, eseguendo le trasformazioni dei dati necessarie e arricchendo l'output UDM.
Prima di iniziare
- Assicurati di avere un'istanza Google SecOps.
- Assicurati di disporre dell'accesso con privilegi ad AWS IAM e S3.
- Assicurati di disporre dell'accesso privilegiato ad Akamai.
Configura il bucket Amazon S3
- Crea un bucket Amazon S3 seguendo questa guida dell'utente: Creare un bucket
- Salva Name (Nome) e Region (Regione) del bucket per riferimento futuro.
- Crea un utente seguendo questa guida dell'utente: Creare un utente IAM.
- Seleziona l'utente creato.
- Seleziona la scheda Credenziali di sicurezza.
- Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
- Seleziona Servizio di terze parti come Caso d'uso.
- Fai clic su Avanti.
- (Facoltativo) Aggiungi un tag di descrizione.
- Fai clic su Crea chiave di accesso.
- Fai clic su Scarica file .csv. (Salva Chiave di accesso e Chiave di accesso segreta per riferimento futuro).
- Fai clic su Fine.
- Seleziona la scheda Autorizzazioni.
- Fai clic su Aggiungi autorizzazioni nella sezione Norme relative alle autorizzazioni.
- Seleziona Aggiungi autorizzazioni.
- Seleziona Collega direttamente i criteri.
- Cerca il criterio AmazonS3FullAccess.
- Seleziona il criterio.
- Fai clic su Avanti.
- Fai clic su Aggiungi autorizzazioni.
Configurare Akamai WAF per inviare i log ad Amazon S3
- Accedi al Control Center di Akamai.
- Vai alla sezione Sicurezza.
- Seleziona Log.
Configura un nuovo invio di log:
- Origine log:seleziona la configurazione del WAF.
- Destinazione di caricamento:scegli Amazon S3.
- Bucket S3:specifica il nome del bucket S3 che hai creato.
- Regione:seleziona la regione AWS in cui si trova il bucket S3.
- ID chiave di accesso e chiave di accesso segreta:fornisci le credenziali che hai generato.
- Formato log:scegli il formato del log pertinente (ad es. JSON).
- Frequenza di invio:seleziona la frequenza appropriata per l'invio dei log (ad esempio ogni 5 minuti).
Verifica la pubblicazione dei log:
- Dopo aver configurato LDS, monitora il bucket S3 per i file di log in entrata.
Configura un feed in Google SecOps per importare i log WAF di Akamai
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuova.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio Log WAF di Akamai).
- Seleziona Amazon S3 come Tipo di origine.
- Seleziona Akamai WAF come Tipo di log.
- Fai clic su Avanti.
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:/BUCKET_NAME
Sostituisci quanto segue:BUCKET_NAME
: il nome del bucket.
- L'URI è un: seleziona il TIPO DI URI in base alla configurazione dello stream di log: File singolo | Directory | 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.
Fai clic su Avanti.
Rivedi la configurazione del nuovo feed nella schermata Concludi e poi fai clic su Invia.
Tabella di mappatura UDM
Campo log (crescente) | Mappatura UDM | Logica |
---|---|---|
attackData.clientIP |
principal.ip , principal.asset.ip |
Indirizzo IP del client che avvia la richiesta. Estratto dal campo attackData.clientIP nei log akamai_siem. |
attackData.configId |
metadata.product_log_id |
ID configurazione di sicurezza. Estratto dal campo attackData.configId nei log akamai_siem. È stato aggiunto anche come detection_field nell'oggetto security_result. |
attackData.policyId |
N/D | Utilizzato nella logica del parser per compilare security_result.summary con il valore "PolicyId:[value]". |
attackData.ruleActions |
security_result.action , security_result.action_details |
Azioni intraprese in base alla regola attivata. Estratto dal campo attackData.ruleActions nei log akamai_siem. "deny" viene mappato a BLOCK, mentre gli altri valori ("alert", "monitor", "allow", "tarpit") vengono mappati a ALLOW. Il valore originale viene memorizzato anche in action_details . |
attackData.ruleData |
security_result.detection_fields |
Dati associati alla regola attivata. Estratto dal campo attackData.ruleData nei log akamai_siem. Aggiunto a security_result.detection_fields con la chiave "RuleData". |
attackData.ruleMessages |
security_result.threat_name |
Messaggi associati alla regola attivata. Estratto dal campo attackData.ruleMessages nei log akamai_siem. |
attackData.ruleSelectors |
security_result.detection_fields |
Selettori associati alla regola attivata. Estratto dal campo attackData.ruleSelectors nei log akamai_siem. Aggiunta a security_result.detection_fields con la chiave "RuleSelector". |
attackData.ruleTags |
security_result.category_details |
Tag associati alla regola attivata. Estratto dal campo attackData.ruleTags nei log akamai_siem. |
attackData.ruleVersions |
security_result.detection_fields |
Versioni delle regole attivate. Estratto dal campo attackData.ruleVersions nei log akamai_siem. Aggiunta a security_result.detection_fields con la chiave "Versione regola". |
clientReputation |
principal.labels |
Informazioni sulla reputazione del cliente. Estratto dal campo clientReputation nei log akamai_siem. Aggiunto come etichetta all'entità con chiave "reputation". |
cliIP , cli_ip , principal_ip |
principal.ip , principal.asset.ip |
Indirizzo IP client. Estratto da cliIP o cli_ip o principal_ip a seconda del formato del log. |
cp |
additional.fields |
Codice CP. Estratto dal campo cp . Aggiunto a additional.fields con la chiave "cp". |
eventId |
metadata.product_log_id |
ID evento. Estratto dal campo eventId . |
eventTime , log_date |
metadata.event_timestamp |
Timestamp dell'evento. Estratto da eventTime o analizzato da log_date a seconda del formato del log. |
eventType.eventDefinition.eventDefinitionId |
target.resource.product_object_id |
ID definizione evento. Estratto da eventType.eventDefinition.eventDefinitionId . |
eventType.eventDefinition.eventDescription |
metadata.description |
Descrizione dell'evento. Estratto da eventType.eventDefinition.eventDescription . |
eventType.eventDefinition.eventName |
metadata.product_event_type |
Nome dell'evento. Estratto da eventType.eventDefinition.eventName . |
eventType.eventTypeId |
additional.fields |
ID tipo di evento. Estratto da eventType.eventTypeId . Aggiunto a additional.fields con la chiave "eventTypeId". |
eventType.eventTypeName |
additional.fields |
Nome del tipo di evento. Estratto da eventType.eventTypeName . Aggiunto a additional.fields con la chiave "eventTypeName". |
format |
N/D | Utilizzato dall'analizzatore per determinare il formato del log. |
geo.asn |
principal.location.name |
Numero di sistema autonomo (ASN). Estratto da geo.asn o AkamaiSiemASN a seconda del formato del log. Il valore è preceduto dal prefisso "ASN ". |
geo.city |
principal.location.city |
Città. Estratto da geo.city o AkamaiSiemCity a seconda del formato del log. |
geo.country |
principal.location.country_or_region |
Paese. Estratto da geo.country o AkamaiSiemContinent a seconda del formato del log. |
httpMessage.bytes |
network.sent_bytes |
Byte inviati nel messaggio HTTP. Estratto da httpMessage.bytes . |
httpMessage.host |
target.hostname , target.asset.hostname |
Nome host. Estratto da httpMessage.host o reqHost a seconda del formato del log. |
httpMessage.method |
network.http.method |
Metodo HTTP. Estratto da httpMessage.method o network_http_method o reqMethod a seconda del formato del log. Convertito in maiuscolo. |
httpMessage.path |
target.url |
Percorso richiesta. Estratto da httpMessage.path o target_url o reqPath a seconda del formato del log. Se httpMessage.query è presente, viene aggiunto al percorso con un separatore "?". |
httpMessage.port |
target.port |
Porta. Estratto da httpMessage.port o reqPort a seconda del formato del log. |
httpMessage.protocol |
N/D | Utilizzato dal parser per determinare il protocollo. |
httpMessage.query |
N/D | Utilizzato nella logica del parser per essere aggiunto a httpMessage.path , se presente. |
httpMessage.requestId |
network.session_id |
ID richiesta. Estratto da httpMessage.requestId o reqId a seconda del formato del log. |
httpMessage.requestHeaders , AkamaiSiemRequestHeaders |
additional.fields |
Intestazioni delle richieste. Estratto da httpMessage.requestHeaders o AkamaiSiemRequestHeaders a seconda del formato del log. Aggiunto a additional.fields con la chiave "AkamaiSiemRequestHeaders". |
httpMessage.responseHeaders , AkamaiSiemResponseHeaders |
additional.fields |
Intestazioni di risposta. Estratto da httpMessage.responseHeaders o AkamaiSiemResponseHeaders a seconda del formato del log. Aggiunto a additional.fields con la chiave "AkamaiSiemResponseHeaders". |
httpMessage.status , AkamaiSiemResponseStatus , network_http_response_code , statusCode |
network.http.response_code |
Codice di risposta HTTP. Estratto da httpMessage.status o AkamaiSiemResponseStatus o network_http_response_code o statusCode a seconda del formato del log. |
httpMessage.tls , AkamaiSiemTLSVersion , tlsVersion |
network.tls.version |
Versione TLS. Estratto da httpMessage.tls o AkamaiSiemTLSVersion o tlsVersion a seconda del formato del log. |
httpMessage.useragent , network_http_user_agent , UA , useragent |
network.http.user_agent |
User agent. Estratto da httpMessage.useragent o network_http_user_agent o UA o useragent a seconda del formato del log. |
log_description |
metadata.description |
Descrizione del log. Estratto da log_description . |
log_rule |
security_result.rule_name |
Regola di log. Estratto da log_rule . |
message |
N/D | Il messaggio del log non elaborato. Utilizzato dal parser per varie estrazioni. |
network_http_referral_url |
network.http.referral_url |
URL del referral HTTP. Estratto da network_http_referral_url . |
proto |
N/D | Utilizzato nella logica del parser per compilare security_result.summary se attackData.policyId non è presente. |
reqHost |
target.hostname , target.asset.hostname |
Richiedi l'host. Estratto da reqHost . |
reqId |
metadata.product_log_id , network.session_id |
ID richiesta. Estratto da reqId . |
reqMethod |
network.http.method |
Metodo di richiesta. Estratto da reqMethod . |
reqPath |
target.url |
Percorso richiesta. Estratto da reqPath . |
reqPort |
target.port |
Richiedi porta. Estratto da reqPort . |
rspContentType |
target.file.mime_type |
Tipo di contenuti della risposta. Estratto da rspContentType . |
securityRules |
security_result.rule_name , security_result.about.resource.attribute.labels |
Regole di sicurezza. Estratto da securityRules . La prima parte viene mappata a rule_name e il resto viene aggiunto come etichette con le chiavi "non_deny_rules" e "deny_rule_format". |
statusCode |
network.http.response_code |
Codice di stato. Estratto da statusCode . |
state |
principal.location.state , target.user.personal_address.state |
Stato. Estratto da state . |
tlsVersion |
network.tls.version |
Versione TLS. Estratto da tlsVersion . |
type |
metadata.product_event_type |
Tipo di evento. Estratto da type . |
UA |
network.http.user_agent |
User agent. Estratto da UA . |
version |
metadata.product_version , principal.asset.software.version |
Versione. Estratto da version . |
N/D | metadata.event_timestamp |
Il timestamp dell'evento è ricavato dal campo _ts nei log akamai_lds, dal campo httpMessage.start nei log akamai_siem o dal campo log_date in altri formati. |
N/D | metadata.vendor_name |
Hardcoded su "Akamai". |
N/D | metadata.product_name |
Hardcoded su "Kona". |
N/D | metadata.log_type |
Hardcoded su "AKAMAI_WAF". |
N/D | network.application_protocol |
Imposta su "HTTP" per i log akamai_siem e akamai_lds oppure su "DNS" per altri formati. |
N/D | security_result.severity |
Imposta il valore su MEDIO per l'azione "avviso", su CRITICO per l'azione "nega" e su ALTO per le altre azioni. |
N/D | event.idm.read_only_udm.metadata.event_type |
Impostato su "NETWORK_HTTP" per la maggior parte dei formati di log, "GENERIC_EVENT" per gli eventi con campi eventId o eventData oppure "STATUS_UPDATE" per gli eventi con cli_ip o p_ip , ma senza reqHost . |
Modifiche
2024-05-21
- Miglioramento
- "rules.data" è stato mappato a "security_result.detection_fields".
- Sono stati mappati "rules.action", "rules.selector" e "rules.version" a "security_result.action_details".
- "rules.id" è stato mappato a "security_result.rule_id",
- "rules.tag" è stato mappato a "security_result.category_details".
- "rules.message" è stato mappato a "security_result.threat_name".
2024-03-01
- Miglioramento
- "attackData.configId" è stato mappato a "metadata.product_log_id" e "security_result.detection_fields".
2023-10-27
- Miglioramento
- "rule.id" è stato mappato a "security_result.rule_id".
- Quando "httpMessage.host" non è presente, il valore impostato in "metadata.event_type" è passato da "NETWORK_HTTP" a "GENERIC_EVENT".
- È stato aggiunto il supporto per l'analisi di "attackData" quando "attackData.rules" è un array.
2023-04-24
- Miglioramento
- Log analizzati importati in formato CEF.
2023-04-04
- Miglioramento
- "reqHost" è stato mappato a "target.hostname".
- "reqPort" è stato mappato a "target.port".
- "reqPath" è stato mappato a "target.url".
- "reqId" è stato mappato a "network.session_id".
- È stata mappata la colonna "statusCode" a "network.http.response_code".
- "reqMethod" è stato mappato a "network.http.method".
- "UA" è stato mappato a "network.http.user_agent".
- "bytes" è stato mappato a "network.sent_bytes".
- "reqMethod" è stato mappato a "network.http.method".
- Log con errori analizzati in formato syslog.
- Sono stati aggiunti controlli delle condizioni per "attackData.rules" per l'analisi corretta.
- Ove possibile, è stato modificato il valore "metadata.event_type" in "NETWORK_HTTP" da "STATUS_UPDATE".
2022-08-12
- Miglioramento
- "security_policy_id" è stato mappato a security_result.rule_name.
- "non_deny_rules" è stato mappato a security_result.about.resource.attribute.labels.
- "deny_rule_format" è stato mappato a security_result.about.resource.attribute.labels.
2022-11-07
- Miglioramento
- Aggiorna SecurityRules per controllare ["-"] anche nei dati.
2022-06-14
- Miglioramento
- Regole di sicurezza mappate a security_result.rule_name.
- La città è stata mappata a principal.location.city.
- Paese mappato a principal.location.country_or_region.
- È stato mappato cli_ip a principal.ip.
- Stato mappato a target.user.personal_address.state.
- Versione mappata a metadata.product_version.
- Useragent mappato a network.http.user_agent.
2022-06-14
- Enhancement-
- Proto mappato a security_result.summary.
- Regole di sicurezza mappate a security_result.rule_name.
- La città è stata mappata a principal.location.city.
- Paese mappato a principal.location.country_or_region.
- cliIP è stato mappato a principal.ip.
- È stato mappato il cp a event.idm.read_only_udm.additional.fields.
- Ho mappato reqId a metadata.product_log_id.
- È stato mappato rspContentType a target.file.mime_type.
- Stato mappato a target.user.personal_address.state.
- Versione mappata a principal.asset.software.version.
2022-03-23
- Bugfix: correzione dell'errore di analisi dei dati con tutti i pattern di corrispondenza.
- Sono state aggiunte mappature per i nuovi campi.
- eventId mappato a metadata.product_log_id.
- eventDefinitionId mappato a target.resource.product_object_id.
- eventDescription mappato a metadata.description.
- eventName mappato a metadata.product_event_type.
- eventTypeName mappato a additional.fields.
- eventTypeId mappato a additional.fields.
- eventData mappato a additional.fields.