Recopila registros de la WAF de Akamai
Descripción general
Este analizador controla los registros del firewall de aplicaciones web (WAF) de Akamai y admite los formatos syslog y CEF. Extrae campos como direcciones IP, URLs, métodos HTTP, códigos de respuesta, usuarios-agentes y la información de las reglas de seguridad, y los asigna a la UDM para obtener una representación coherente. El analizador también controla campos específicos de Akamai, como attackData
y clientReputation
, realiza las transformaciones de datos necesarias y enriquece el resultado de la UDM.
Antes de comenzar
- Asegúrate de tener una instancia de Google SecOps.
- Asegúrate de tener acceso con privilegios a AWS IAM y S3.
- Asegúrate de tener acceso con privilegios a Akamai.
Configura el bucket de Amazon S3
- Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Cómo crear un bucket
- Guarda el Nombre y la Región del bucket para usarlos como referencia en el futuro.
- Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
- Selecciona el Usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- Haz clic en Crear clave de acceso en la sección Claves de acceso.
- Selecciona Servicio de terceros como Caso de uso.
- Haz clic en Siguiente.
- Opcional: Agrega una etiqueta de descripción.
- Haz clic en Crear clave de acceso.
- Haz clic en Descargar archivo .csv. (Guarda la Clave de acceso y la Clave de acceso secreta para usarlas como referencia en el futuro).
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- Haz clic en Agregar permisos en la sección Políticas de permisos.
- Selecciona Agregar permisos.
- Selecciona Adjuntar políticas directamente.
- Busca la política AmazonS3FullAccess.
- Selecciona la política.
- Haz clic en Siguiente.
- Haz clic en Agregar permisos.
Configura el WAF de Akamai para enviar registros a Amazon S3
- Accede al Control Center de Akamai.
- Ve a la sección Seguridad.
- Selecciona Registros.
Configura una nueva entrega de registros:
- Fuente de registro: Selecciona tu configuración de WAF.
- Destino de publicación: Elige Amazon S3.
- Bucket de S3: Especifica el nombre del bucket de S3 que creaste.
- Región: Selecciona la región de AWS en la que se encuentra tu bucket de S3.
- ID de clave de acceso y clave de acceso secreta: Proporciona las credenciales que generaste.
- Formato de registro: Elige el formato de registro relevante (por ejemplo, JSON).
- Frecuencia de entrega: Selecciona la frecuencia adecuada para la entrega de registros (por ejemplo, cada 5 minutos).
Verifica la entrega de registros:
- Después de configurar LDS, supervisa el bucket de S3 en busca de archivos de registro entrantes.
Configura un feed en Google SecOps para transferir registros de Akamai WAF
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar nueva.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros de Akamai WAF).
- Selecciona Amazon S3 como el Tipo de fuente.
- Selecciona Akamai WAF como el Tipo de registro.
- Haz clic en Siguiente.
Especifica valores para los siguientes parámetros de entrada:
- Región: Es la región en la que se encuentra el bucket de Amazon S3.
- URI de S3: Es el URI del bucket.
s3:/BUCKET_NAME
Reemplaza lo siguiente:BUCKET_NAME
: el nombre del bucket.
- URI es un: Selecciona el TIPO DE URI según la configuración del flujo de registro: Archivo único | Directorio | Directorio que incluye subdirectorios.
- Opciones de eliminación de fuentes: Selecciona la opción de eliminación según tus preferencias.
- ID de clave de acceso: Es la clave de acceso del usuario con acceso al bucket de S3.
- Clave de acceso secreta: Es la clave secreta del usuario con acceso al bucket de S3.
- Espacio de nombres de recursos: Es el espacio de nombres de recursos.
- Etiquetas de transferencia: Es la etiqueta que se aplicará a los eventos de este feed.
Haz clic en Siguiente.
Revisa la configuración de tu nuevo feed en la pantalla Finalizar y, luego, haz clic en Enviar.
Tabla de asignación de UDM
Campo de registro (en orden ascendente) | Asignación de UDM | Lógica |
---|---|---|
attackData.clientIP |
principal.ip , principal.asset.ip |
Es la dirección IP del cliente que inicia la solicitud. Se extrae del campo attackData.clientIP en los registros de akamai_siem. |
attackData.configId |
metadata.product_log_id |
ID de configuración de seguridad Se extrae del campo attackData.configId en los registros de akamai_siem. También se agregó como detection_field en el objeto security_result. |
attackData.policyId |
N/A | Se usa en la lógica del analizador para propagar security_result.summary con el valor "PolicyId:[value]". |
attackData.ruleActions |
security_result.action , security_result.action_details |
Acciones que se realizan en función de la regla activada. Se extrae del campo attackData.ruleActions en los registros de akamai_siem. “deny” se asigna a BLOCK, y otros valores ("alert", "monitor", "allow", "tarpit") se asignan a ALLOW. El valor original también se almacena en action_details . |
attackData.ruleData |
security_result.detection_fields |
Datos asociados con la regla activada. Se extrae del campo attackData.ruleData en los registros de akamai_siem. Se agregó a security_result.detection_fields con la clave "RuleData". |
attackData.ruleMessages |
security_result.threat_name |
Son los mensajes asociados con la regla activada. Se extrae del campo attackData.ruleMessages en los registros de akamai_siem. |
attackData.ruleSelectors |
security_result.detection_fields |
Son los selectores asociados con la regla activada. Se extrae del campo attackData.ruleSelectors en los registros de akamai_siem. Se agregó a security_result.detection_fields con la clave "RuleSelector". |
attackData.ruleTags |
security_result.category_details |
Etiquetas asociadas con la regla activada. Se extrae del campo attackData.ruleTags en los registros de akamai_siem. |
attackData.ruleVersions |
security_result.detection_fields |
Versiones de las reglas activadas. Se extrae del campo attackData.ruleVersions en los registros de akamai_siem. Se agregó a security_result.detection_fields con la clave "Rule Version". |
clientReputation |
principal.labels |
Información de reputación del cliente Se extrae del campo clientReputation en los registros de akamai_siem. Se agregó como etiqueta al principal con la clave "reputation". |
cliIP , cli_ip , principal_ip |
principal.ip , principal.asset.ip |
Dirección IP del cliente. Se extrae de cliIP , cli_ip o principal_ip , según el formato del registro. |
cp |
additional.fields |
Código de CP Se extrae del campo cp . Se agregó a additional.fields con la clave "cp". |
eventId |
metadata.product_log_id |
ID del evento. Se extrae del campo eventId . |
eventTime , log_date |
metadata.event_timestamp |
Marca de tiempo del evento. Se extrae de eventTime o se analiza desde log_date según el formato del registro. |
eventType.eventDefinition.eventDefinitionId |
target.resource.product_object_id |
Es el ID de la definición del evento. Se extrajo de eventType.eventDefinition.eventDefinitionId . |
eventType.eventDefinition.eventDescription |
metadata.description |
Descripción del evento. Se extrajo de eventType.eventDefinition.eventDescription . |
eventType.eventDefinition.eventName |
metadata.product_event_type |
Nombre del evento. Se extrajo de eventType.eventDefinition.eventName . |
eventType.eventTypeId |
additional.fields |
Es el ID del tipo de evento. Se extrajo de eventType.eventTypeId . Se agregó a additional.fields con la clave "eventTypeId". |
eventType.eventTypeName |
additional.fields |
Es el nombre del tipo de evento. Se extrajo de eventType.eventTypeName . Se agregó a additional.fields con la clave "eventTypeName". |
format |
N/A | El analizador lo usa para determinar el formato del registro. |
geo.asn |
principal.location.name |
Número de sistema autónomo (ASN). Se extrae de geo.asn o AkamaiSiemASN , según el formato del registro. El valor tiene el prefijo “ASN”. |
geo.city |
principal.location.city |
Ciudad. Se extrae de geo.city o AkamaiSiemCity , según el formato del registro. |
geo.country |
principal.location.country_or_region |
País Se extrae de geo.country o AkamaiSiemContinent , según el formato del registro. |
httpMessage.bytes |
network.sent_bytes |
Bytes enviados en el mensaje HTTP. Se extrajo de httpMessage.bytes . |
httpMessage.host |
target.hostname , target.asset.hostname |
Nombre de host. Se extrae de httpMessage.host o reqHost , según el formato del registro. |
httpMessage.method |
network.http.method |
Método HTTP. Se extrae de httpMessage.method , network_http_method o reqMethod , según el formato del registro. Se convirtió en mayúsculas. |
httpMessage.path |
target.url |
Ruta de la solicitud. Se extrae de httpMessage.path , target_url o reqPath , según el formato del registro. Si httpMessage.query está presente, se agrega a la ruta con un separador "?". |
httpMessage.port |
target.port |
Puerto Se extrae de httpMessage.port o reqPort , según el formato del registro. |
httpMessage.protocol |
N/A | El analizador lo usa para determinar el protocolo. |
httpMessage.query |
N/A | Se usa en la lógica del analizador para adjuntarse a httpMessage.path si está presente. |
httpMessage.requestId |
network.session_id |
ID de la solicitud. Se extrae de httpMessage.requestId o reqId , según el formato del registro. |
httpMessage.requestHeaders , AkamaiSiemRequestHeaders |
additional.fields |
Encabezados de la solicitud Se extrae de httpMessage.requestHeaders o AkamaiSiemRequestHeaders , según el formato del registro. Se agregó a additional.fields con la clave "AkamaiSiemRequestHeaders". |
httpMessage.responseHeaders , AkamaiSiemResponseHeaders |
additional.fields |
Encabezados de respuesta. Se extrae de httpMessage.responseHeaders o AkamaiSiemResponseHeaders , según el formato del registro. Se agregó a additional.fields con la clave "AkamaiSiemResponseHeaders". |
httpMessage.status , AkamaiSiemResponseStatus , network_http_response_code , statusCode |
network.http.response_code |
Código de respuesta HTTP. Se extrae de httpMessage.status , AkamaiSiemResponseStatus , network_http_response_code o statusCode , según el formato del registro. |
httpMessage.tls , AkamaiSiemTLSVersion , tlsVersion |
network.tls.version |
Versión de TLS Se extrae de httpMessage.tls , AkamaiSiemTLSVersion o tlsVersion , según el formato del registro. |
httpMessage.useragent , network_http_user_agent , UA , useragent |
network.http.user_agent |
Usuario-agente. Se extrae de httpMessage.useragent , network_http_user_agent , UA o useragent , según el formato del registro. |
log_description |
metadata.description |
Descripción del registro. Se extrajo de log_description . |
log_rule |
security_result.rule_name |
Regla de registro. Se extrajo de log_rule . |
message |
N/A | El mensaje de registro sin formato. El analizador lo usa para varias extracciones. |
network_http_referral_url |
network.http.referral_url |
URL de referencia HTTP. Se extrajo de network_http_referral_url . |
proto |
N/A | Se usa en la lógica del analizador para propagar security_result.summary si no está presente attackData.policyId . |
reqHost |
target.hostname , target.asset.hostname |
Solicitar host Se extrajo de reqHost . |
reqId |
metadata.product_log_id , network.session_id |
ID de la solicitud. Se extrajo de reqId . |
reqMethod |
network.http.method |
Método de solicitud. Se extrajo de reqMethod . |
reqPath |
target.url |
Ruta de la solicitud. Se extrajo de reqPath . |
reqPort |
target.port |
Puerto de solicitud Se extrajo de reqPort . |
rspContentType |
target.file.mime_type |
Tipo de contenido de la respuesta. Se extrajo de rspContentType . |
securityRules |
security_result.rule_name , security_result.about.resource.attribute.labels |
Reglas de seguridad Se extrajo de securityRules . La primera parte se asigna a rule_name y el resto se agrega como etiquetas con las claves "non_deny_rules" y "deny_rule_format". |
statusCode |
network.http.response_code |
Código de estado. Se extrajo de statusCode . |
state |
principal.location.state , target.user.personal_address.state |
Estado. Se extrajo de state . |
tlsVersion |
network.tls.version |
Versión de TLS Se extrajo de tlsVersion . |
type |
metadata.product_event_type |
Tipo de evento. Se extrajo de type . |
UA |
network.http.user_agent |
Usuario-agente. Se extrajo de UA . |
version |
metadata.product_version , principal.asset.software.version |
Versión. Se extrajo de version . |
N/A | metadata.event_timestamp |
La marca de tiempo del evento se obtiene del campo _ts en los registros de akamai_lds, del campo httpMessage.start en los registros de akamai_siem o del campo log_date en otros formatos. |
N/A | metadata.vendor_name |
Está codificado de forma fija en "Akamai". |
N/A | metadata.product_name |
Se codifica en “Kona”. |
N/A | metadata.log_type |
Está codificado de forma fija en "AKAMAI_WAF". |
N/A | network.application_protocol |
Se establece en "HTTP" para los registros akamai_siem y akamai_lds, o en "DNS" para otros formatos. |
N/A | security_result.severity |
Establece el valor en MEDIUM para la acción "alert", CRITICAL para la acción "deny" y HIGH para otras acciones. |
N/A | event.idm.read_only_udm.metadata.event_type |
Establece el valor en "NETWORK_HTTP" para la mayoría de los formatos de registro, "GENERIC_EVENT" para eventos con campos eventId o eventData , o "STATUS_UPDATE" para eventos con cli_ip o p_ip , pero sin reqHost . |
Cambios
2024-05-21
- Mejora
- Se asignó "rules.data" a "security_result.detection_fields".
- Se asignaron "rules.action", "rules.selector" y "rules.version" a "security_result.action_details".
- Se asignó "rules.id" a "security_result.rule_id".
- Se asignó "rules.tag" a "security_result.category_details".
- Se asignó "rules.message" a "security_result.threat_name".
2024-03-01
- Mejora
- Se asignó "attackData.configId" a "metadata.product_log_id" y "security_result.detection_fields".
2023-10-27
- Mejora
- Se asignó "rule.id" a "security_result.rule_id".
- Cuando no está presente "httpMessage.host", se cambió el valor establecido en "metadata.event_type" de "NETWORK_HTTP" a "GENERIC_EVENT".
- Se agregó compatibilidad para analizar "attackData" cuando "attackData.rules" es un array.
2023-04-24
- Mejora
- Registros analizados transferidos en formato CEF
2023-04-04
- Mejora
- Se asignó "reqHost" a "target.hostname".
- Se asignó "reqPort" a "target.port".
- Se asignó "reqPath" a "target.url".
- Se asignó "reqId" a "network.session_id".
- Se asignó "statusCode" a "network.http.response_code".
- Se asignó "reqMethod" a "network.http.method".
- Se asignó "UA" a "network.http.user_agent".
- Se asignó "bytes" a "network.sent_bytes".
- Se asignó "reqMethod" a "network.http.method".
- Se analizaron los registros con errores en formato syslog.
- Se agregaron verificaciones de condiciones para "attackData.rules" para un análisis correcto.
- Se modificó "metadata.event_type" de "STATUS_UPDATE" a "NETWORK_HTTP" siempre que fue posible.
2022-08-12
- Mejora
- Se asignó "security_policy_id" a security_result.rule_name.
- Se asignó "non_deny_rules" a security_result.about.resource.attribute.labels.
- Se asignó "deny_rule_format" a security_result.about.resource.attribute.labels.
2022-11-07
- Mejora
- Se actualizó SecurityRules para verificar ["-"] también en los datos.
2022-06-14
- Mejora
- Se asignó security_rules a security_result.rule_name.
- Ciudad asignada a principal.location.city.
- País asignado a principal.location.country_or_region.
- Se asignó cli_ip a principal.ip.
- Se asignó el estado a target.user.personal_address.state.
- Versión asignada a metadata.product_version.
- Se asignó el usuario-agente a network.http.user_agent.
2022-06-14
- Enhancement-
- Se asignó el proto a security_result.summary.
- Se asignó securityRules a security_result.rule_name.
- Ciudad asignada a principal.location.city.
- País asignado a principal.location.country_or_region.
- Se asignó cliIP a principal.ip.
- Se asignó cp a event.idm.read_only_udm.additional.fields.
- Se asignó reqId a metadata.product_log_id.
- Se asignó rspContentType a target.file.mime_type.
- Se asignó el estado a target.user.personal_address.state.
- Versión asignada a principal.asset.software.version.
2022-03-23
- Se corrigió el error que se producía cuando no se podían analizar los datos con todos los patrones de coincidencia.
- Se agregaron asignaciones para campos nuevos.
- eventId asignado a metadata.product_log_id.
- eventDefinitionId asignado a target.resource.product_object_id.
- eventDescription asignado a metadata.description.
- eventName asignado a metadata.product_event_type
- eventTypeName asignado a additional.fields
- eventTypeId asignado a additional.fields.
- eventData asignado a additional.fields