Recopilar registros de WAF de Akamai

Disponible en:

En este documento se explica cómo ingerir registros de WAF de Akamai en Google Security Operations mediante el conector CEF de Akamai y Bindplane.

Antes de empezar

Asegúrate de que cumples los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Un host con Windows 2016 o una versión posterior, o Linux con systemd para instalar el agente de Bindplane
  • Un servidor Linux (se recomienda CentOS, RHEL o Ubuntu) con al menos 2 núcleos de CPU, 6 GB de RAM y 2 GB de espacio libre en disco para el conector CEF de Akamai
  • Java 8 (JRE 1.8) o una versión posterior instalado en el host del conector CEF
  • Si se ejecuta a través de un proxy, asegúrese de que los puertos del cortafuegos estén abiertos según los requisitos del agente de Bindplane y de que el proxy permita las listas *.cloudsecurity.akamaiapis.net y *.luna.akamaiapis.net.
  • Acceso privilegiado a Akamai Control Center
  • Una configuración de seguridad de Akamai con App & API Protector, Kona Site Defender, Web Application Protector, Bot Manager o Account Protector habilitado

Obtener el archivo de autenticación de ingestión de Google SecOps

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recogida.
  3. Descarga el archivo de autenticación de ingestión. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.

Obtener el ID de cliente de Google SecOps

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. Copia y guarda el ID de cliente de la sección Detalles de la organización.

Habilitar la integración de SIEM en Akamai Control Center

  1. Inicia sesión en Akamai Control Center.
  2. En WEB & DATA CENTER SECURITY (SEGURIDAD DE WEB Y CENTRO DE DATOS), haz clic en Security Configuration (Configuración de seguridad).
  3. Abre la configuración de seguridad y la versión adecuada de la que quieras recoger datos de SIEM.
  4. Haga clic en Configuración avanzada y expanda Recogida de datos para integraciones de SIEM.
  5. Haz clic en Activado para habilitar SIEM.
  6. Elige las políticas de seguridad de las que quieras exportar datos:
    • Todas las políticas de seguridad: selecciona esta opción para enviar datos de SIEM de eventos que infrinjan alguna o todas las políticas de seguridad de la configuración de seguridad.
    • Políticas de seguridad específicas: selecciona esta opción para enviar datos sobre una o varias políticas de seguridad específicas. Selecciona las políticas correspondientes en la lista desplegable.
  7. Opcional: Si usas Account Protector y quieres incluir el nombre de usuario sin cifrar, activa la casilla Incluir nombre de usuario.
  8. Opcional: Si quiere recibir información de huellas digitales JA4 en eventos SIEM, active la casilla Incluir la huella digital TLS del cliente JA4.
  9. Opcional: Si quieres excluir eventos que pertenezcan a un tipo de protección y a una acción específicos, haz clic en Añadir excepción. Selecciona la protección y las acciones asociadas que no quieras que recoja SIEM. Haz clic en Guardar.
  10. Copia el valor del campo ID de configuración de seguridad web. Guarda este ID para usarlo más adelante.
  11. Haz clic en Activar para enviar los cambios de configuración de seguridad a la red de producción. En Red, haga clic en Producción y, a continuación, en Activar.

Configurar un usuario para gestionar SIEM en Akamai Control Center

  1. En Akamai Control Center, vaya a ACCOUNT ADMIN (ADMINISTRACIÓN DE CUENTAS) y haga clic en Identity & access (Identidad y acceso).
  2. En la pestaña Usuarios y clientes de API, busca el usuario al que quieras asignar el rol o haz clic en el botón Crear usuario.
  3. Para asignar el rol de SIEM a un usuario que ya existe, sigue estos pasos:
    • Abre la cuenta del usuario y haz clic en la pestaña Editar roles.
    • Busca el grupo adecuado, haz clic en el menú Roles y selecciona el rol Gestionar SIEM.
    • Haz clic en Enviar.
  4. Para asignar el rol de SIEM a un nuevo usuario, sigue estos pasos:
    • Haz clic en Crear usuario.
    • Introduce la información básica del usuario y ve a la sección Asignar roles.
    • Busca el grupo adecuado, haz clic en el menú Roles y selecciona el rol Gestionar SIEM.
    • Haz clic en Guardar.

Proporcionar credenciales de la API SIEM en Akamai Control Center

  1. Visita la página Crear credenciales de autenticación de la documentación de Akamai.
  2. Sigue los pasos para aprovisionar la API SIEM para el usuario al que has asignado la gestión de SIEM.
  3. Copia y guarda de forma segura las siguientes credenciales:
    • Token de acceso
    • Client Token
    • Secreto de cliente
    • URL base

Instalar el conector CEF de Akamai

  1. En tu servidor Linux, descarga el paquete de distribución más reciente de CEF Connector del repositorio de GitHub de Akamai.
  2. Transfiere el paquete a tu servidor mediante wget o SFTP.
  3. Verifica el hash SHA-256 del archivo descargado para comprobar su integridad.
  4. Extrae el paquete de distribución:

    unzip CEFConnector-<version>.zip
    
  5. Ve al directorio extraído:

    cd CEFConnector-<version>
    
  6. Para instalar el servicio, crea un enlace simbólico a la secuencia de comandos de inicio:

    sudo ln -s /path/to/CEFConnector-<version>/bin/AkamaiCEFConnector.sh /etc/init.d/AkamaiCEFConnector
    

Configurar el conector CEF de Akamai

  1. Ve al directorio config dentro de la instalación del conector CEF:

    cd config
    
  2. Abre el archivo CEFConnector.properties con un editor de texto (por ejemplo, nano o vi):

    sudo nano CEFConnector.properties
    
  3. Configure los siguientes parámetros obligatorios:

    # Akamai API Configuration
    akamai.data.requesturlhost=https://cloudsecurity.akamaiapis.net
    akamai.data.configs=<YOUR_SECURITY_CONFIG_ID>
    akamai.data.timebased=false
    akamai.data.limit=200000
    
    # API Credentials (from Step: Provision SIEM API credentials)
    akamai.data.accesstoken=<YOUR_ACCESS_TOKEN>
    akamai.data.clienttoken=<YOUR_CLIENT_TOKEN>
    akamai.data.clientsecret=<YOUR_CLIENT_SECRET>
    akamai.data.baseurl=<YOUR_BASE_URL>
    
    # CEF Format Configuration
    akamai.cefformatheader=CEF:0|Akamai|akamai_siem|1.0|eventClassId()|name()|severity()
    
    akamai.cefformatextension=act=appliedAction() app=${httpMessage.protocol} c6a2=ipv6src() c6a2Label="Source IPv6 Address" cs1=${attackData.rules} cs1Label="Rules" cs2=${attackData.ruleMessages} cs2Label="Rule Messages" cs3=${attackData.ruleData} cs3Label="Rule Data" cs4=${attackData.ruleSelectors} cs4Label="Rule Selectors" cs5=${attackData.clientReputation} cs5Label="Client Reputation" cs6=${attackData.apiId} cs6Label="API ID" devicePayloadId=${httpMessage.requestId} dhost=${httpMessage.host} dpt=${httpMessage.port} flexString1=${attackData.configId} flexString1Label="Security Config ID" flexString2=${attackData.policyId} flexString2Label="Firewall Policy Id" out=${httpMessage.bytes} request=requestURL() requestMethod=${httpMessage.method} src=${attackData.clientIP} start=${httpMessage.start} AkamaiSiemSlowPostAction=${attackData.slowPostAction} AkamaiSiemSlowPostRate=${attackData.slowPostRate} AkamaiSiemRuleVersions=${attackData.ruleVersions} AkamaiSiemRuleTags=${attackData.ruleTags} AkamaiSiemJA4=${identity.ja4} AkamaiSiemRuleActions=${attackData.ruleActions}
    
    # Connector Pull Configuration
    connector.refresh.period=60
    connector.consumer.count=3
    connector.retry=5
    
    # Proxy Configuration (if applicable)
    # connector.proxy.host=
    # connector.proxy.port=
    
  4. Sustituye los siguientes marcadores de posición por tus valores reales:

    • <YOUR_SECURITY_CONFIG_ID>: el ID de configuración de seguridad web que has copiado anteriormente. Si hay varias configuraciones, separe los IDs con punto y coma (por ejemplo, 12345;67890).
    • <YOUR_ACCESS_TOKEN>: el token de acceso de las credenciales de la API de Akamai
    • <YOUR_CLIENT_TOKEN>: el token de cliente de las credenciales de la API de Akamai
    • <YOUR_CLIENT_SECRET>: el secreto de cliente de las credenciales de la API de Akamai
    • <YOUR_BASE_URL>: la URL base de las credenciales de la API de Akamai.
  5. Guarda y cierra el archivo.

Configurar el registro del conector CEF

  1. Ve al directorio config dentro de la instalación del conector CEF.
  2. Abre el archivo log4j2.xml con un editor de texto:

    sudo nano log4j2.xml
    
  3. Configure los siguientes parámetros para que syslog envíe datos a Bindplane:

    <!-- Syslog Appender Configuration -->
    <Syslog name="SyslogAppender" 
            host="<BINDPLANE_IP_ADDRESS>" 
            port="<BINDPLANE_PORT>" 
            protocol="<PROTOCOL>" 
            facility="LOCAL0"
            format="RFC5424">
        <PatternLayout pattern="%m%n"/>
    </Syslog>
    
  4. Sustituye los siguientes marcadores de posición:

    • <BINDPLANE_IP_ADDRESS>: la dirección IP del servidor en el que está instalado el agente de Bindplane.
    • <BINDPLANE_PORT>: número de puerto en el que escucha el agente de Bindplane (por ejemplo, 514 para UDP o 601 para TCP).
    • <PROTOCOL>: selecciona UDP o TCP.
  5. Asegúrate de que el conector CEF envíe los registros al servidor syslog remoto (BindPpane) configurando los ajustes específicos de CEF:

    # In CEFConnector.properties, ensure these are set:
    # Note: These settings are typically in log4j2.xml but referenced here for clarity
    
  6. Guarda y cierra el archivo.

Iniciar el conector CEF de Akamai

  1. Inicia el servicio CEF Connector:

    sudo /etc/init.d/AkamaiCEFConnector start
    
  2. Comprueba que el servicio se está ejecutando:

    sudo /etc/init.d/AkamaiCEFConnector status
    
  3. Monitoriza los registros para asegurarte de que el conector extrae eventos de Akamai y los envía a Bindplane:

    tail -f /path/to/CEFConnector-<version>/bin/logs/cefconnector.log
    

Instalar el agente de Bindplane

Instala el agente Bindplane en tu sistema operativo Windows o Linux siguiendo las instrucciones que se indican a continuación.

Instalación de ventanas

  1. Abre la petición de comando o PowerShell como administrador.
  2. Ejecuta el siguiente comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalación de Linux

  1. Abre un terminal con privilegios de root o sudo.
  2. Ejecuta el siguiente comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Recursos de instalación adicionales

Configurar el agente de Bindplane para ingerir Syslog y enviarlo a Google SecOps

  1. Accede al archivo de configuración:

    1. Busca el archivo config.yaml. Normalmente, se encuentra en el directorio /etc/bindplane-agent/ en Linux o en el directorio de instalación en Windows.
    2. Abre el archivo con un editor de texto (por ejemplo, nano, vi o Bloc de notas).
  2. Edita el archivo config.yaml de la siguiente manera:

    receivers:
        udplog:
          # Replace the port and IP address as required
          listen_address: "0.0.0.0:514"
        tcplog:
          # Alternative TCP receiver if using TCP protocol
          listen_address: "0.0.0.0:601"
    
    exporters:
      chronicle/chronicle_w_labels:
        compression: gzip
        # Adjust the path to the credentials file you downloaded in the Get ingestion authentication file section
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        # Replace with your actual customer ID from the Get customer ID section
        customer_id: <YOUR_CUSTOMER_ID>
        # Select the appropriate regional endpoint based on where your Google SecOps instance is provisioned
        # For regional endpoints, see: https://cloud.google.com/chronicle/docs/reference/ingestion-api#regional_endpoints
        endpoint: malachiteingestion-pa.googleapis.com
        # Set the log_type to ensure the correct parser is applied
        log_type: 'AKAMAI_WAF'
        raw_log_field: body
        # Add optional ingestion labels for better organization
        ingestion_labels:
    
    service:
      pipelines:
        logs/source0__chronicle_w_labels-0:
          receivers:
            - udplog
            # - tcplog  # Uncomment if using TCP
          exporters:
            - chronicle/chronicle_w_labels
    

Reinicia el agente de Bindplane para aplicar los cambios

  • Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar el agente de Bindplane en Windows, puedes usar la consola Servicios o introducir el siguiente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Verificar la ingestión de registros

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Búsqueda o Análisis de registros sin procesar.
  3. Busca registros recientes de Akamai WAF mediante la etiqueta de ingestión:

    metadata.log_type = "AKAMAI_WAF"
    
  4. Verifica que los registros aparecen con los campos y las marcas de tiempo esperados.

  5. Comprueba que los campos de formato CEF se analizan correctamente y se asignan a UDM.

Solución de problemas

Problemas con el conector CEF

  • No se extraen eventos: comprueba si hay errores en el archivo cefconnector.log. Verifica que las credenciales de la API de Akamai sean correctas y que los IDs de configuración de seguridad sean válidos.
  • Errores de conexión: compruebe que los ajustes de proxy (si procede) estén configurados correctamente y que los dominios necesarios estén incluidos en la lista de permitidos.
  • Restablecimiento de la base de datos: si necesitas restablecer el seguimiento de la diferencia horaria, ejecuta el siguiente comando:

    sudo /etc/init.d/AkamaiCEFConnector resetdb
    

Problemas con el agente de Bindplane

  • Los registros no llegan a Bindplane: comprueba que el conector CEF esté configurado para enviar syslog a la dirección IP y al puerto correctos de Bindplane. Comprueba las reglas de cortafuegos entre el conector CEF y el agente de Bindplane.
  • Los registros no llegan a Google SecOps: comprueba el archivo de configuración de Bindplane, el ID de cliente y la ruta de autenticación de la ingestión. Comprueba si hay errores en los registros de Bindplane:

    sudo journalctl -u observiq-otel-collector -f
    

Red y conectividad

  • Verifica que el conector CEF pueda acceder a los endpoints de la API SIEM de Akamai.
  • Verifica que el agente de Bindplane pueda acceder al endpoint de ingestión de Google SecOps (malachiteingestion-pa.googleapis.com).
  • Comprueba que todos los puertos de firewall necesarios estén abiertos.

Recuperar eventos de seguridad anteriores

El conector CEF de Akamai funciona de dos formas:

  • Basado en el desplazamiento (opción recomendada): el conector registra automáticamente los eventos de seguridad a medida que se recogen casi en tiempo real. Este es el modo predeterminado cuando akamai.data.timebased está configurado como false.
  • Basada en el tiempo: te permite recuperar eventos que se hayan producido en un periodo concreto (hasta 12 horas).

Para recuperar eventos de seguridad que faltan o que se han producido en el pasado, sigue estos pasos:

  1. Abre el archivo de configuración del conector:

    sudo nano /path/to/CEFConnector-<version>/config/CEFConnector.properties
    
  2. Cambia la configuración basada en el tiempo:

    akamai.data.timebased=true
    akamai.data.timebased.from=<EPOCH_START_TIME>
    akamai.data.timebased.to=<EPOCH_END_TIME>
    
    • Sustituye <EPOCH_START_TIME> por la hora de inicio en formato de época (en las últimas 12 horas).
    • Sustituye <EPOCH_END_TIME> por la hora de finalización en formato de época (opcional; si se deja en blanco, se obtienen los eventos hasta el presente).
  3. Reinicia el conector CEF:

    sudo /etc/init.d/AkamaiCEFConnector restart
    
  4. Una vez que se hayan recuperado los datos históricos, vuelve al modo de desfase:

    akamai.data.timebased=false
    
  5. Vuelve a reiniciar el conector CEF.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
src (attackData.clientIP) principal.ip Dirección IP de origen del cliente que hace la solicitud.
c6a2 (ipv6src) principal.ip Dirección IPv6 de origen si attackData.clientIP está en formato IPv6
dhost (httpMessage.host) target.hostname Nombre de host del encabezado HTTP HOST
dpt (httpMessage.port) target.port Número de puerto utilizado por la solicitud entrante.
requestMethod (httpMessage.method) network.http.method Método HTTP de la solicitud entrante (GET, POST, etc.)
request (requestURL) target.url Calcula la URL completa a partir de los campos httpMessage.
cs1 (attackData.rules) security_result.rule_id IDs de las reglas que se han activado en esta solicitud
cs2 (attackData.ruleMessages) security_result.rule_name Mensajes de las reglas que se han activado
act (appliedAction) security_result.action Acción realizada (alerta, denegación, cancelación, etc.)
severity security_result.severity Gravedad calculada (5 para detectar y 10 para mitigar)
cs5 (attackData.clientReputation) security_result.threat_name Puntuaciones de IP de cliente para la reputación de cliente
cs6 (attackData.apiId) security_result.detection_fields ID de API para la protección de APIs
start (httpMessage.start) metadata.event_timestamp Hora en la que el servidor perimetral inició la conexión (formato de época).
devicePayloadId (httpMessage.requestId) metadata.product_log_id ID único global del mensaje.
flexString1 (attackData.configId) security_result.detection_fields ID de la configuración de seguridad aplicada a esta solicitud
flexString2 (attackData.policyId) security_result.detection_fields ID de la política de cortafuegos aplicada a esta solicitud.
AkamaiSiemJA4 (identity.ja4) network.tls.client.ja3 Huella digital TLS de cliente JA4

¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.