Recopila registros del WAF de Akamai

Se admite en los siguientes sistemas operativos:

En este documento, se explica cómo transferir registros del WAF de Akamai a Google Security Operations con el conector CEF de Akamai y Bindplane.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Una instancia de Google SecOps
  • Un host de Windows 2016 o posterior, o Linux con systemd para la instalación del agente de Bindplane
  • Un servidor Linux (se recomienda CentOS/RHEL/Ubuntu) con al menos 2 núcleos de CPU, 6 GB de RAM y 2 GB de espacio libre en el disco para el conector de CEF de Akamai
  • Java 8 (JRE 1.8) o una versión posterior instalada en el host del conector de CEF
  • Si se ejecuta detrás de un proxy, asegúrate de que los puertos del firewall estén abiertos según los requisitos del agente de Bindplane y de que las listas de entidades permitidas del proxy sean *.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 habilitados

Obtén el archivo de autenticación de transferencia de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará BindPlane.

Obtén el ID de cliente de Google SecOps

  1. Accede a 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.

Habilita la integración del SIEM en Akamai Control Center

  1. Accede a Akamai Control Center.
  2. En WEB & DATA CENTER SECURITY, haz clic en Security Configuration.
  3. Abre la configuración de seguridad y la versión adecuada para la que deseas recopilar datos del SIEM.
  4. Haz clic en Configuración avanzada y expande Recopilación de datos para las integraciones de SIEM.
  5. Haz clic en Activado para habilitar el SIEM.
  6. Elige las políticas de seguridad para las que deseas exportar datos:
    • Todas las políticas de seguridad: Selecciona esta opción para enviar datos del SIEM sobre los eventos que incumplen cualquiera de las políticas de seguridad o todas ellas dentro de la configuración de seguridad.
    • Políticas de seguridad específicas: Selecciona esta opción para enviar datos sobre una o más políticas de seguridad específicas. Selecciona las políticas adecuadas en la lista desplegable.
  7. Opcional: Si usas Account Protector y quieres incluir el nombre de usuario sin encriptar, activa la casilla de verificación Incluir nombre de usuario.
  8. Opcional: Si deseas recibir información de la huella digital de JA4 en los eventos de SIEM, activa la casilla de verificación Incluir la huella digital de TLS del cliente de JA4.
  9. Opcional: Si deseas excluir eventos que pertenecen a un tipo de protección y una acción específicos, haz clic en Agregar excepción. Selecciona la protección y las acciones asociadas que no quieres que recopile el 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, haz clic en Producción y, luego, en Activar.

Configura un usuario para administrar el SIEM en Akamai Control Center

  1. En Akamai Control Center, en ACCOUNT ADMIN, haz clic en Identity & access.
  2. En la pestaña Usuarios y clientes de API, busca el usuario al que deseas asignar el rol o haz clic en el botón Crear usuario.
  3. Para asignar el rol de SIEM a un usuario existente, haz lo siguiente:
    • 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 Administrar SIEM.
    • Haz clic en Enviar.
  4. Para asignar el rol de SIEM a un usuario nuevo, haz lo siguiente:
    • Haz clic en Crear usuario.
    • Ingresa la información básica del usuario y ve a la sección Assign Roles.
    • Busca el grupo adecuado, haz clic en el menú Roles y selecciona el rol Administrar SIEM.
    • Haz clic en Guardar.

Aprovisiona credenciales de la API del SIEM en Akamai Control Center

  1. Visita la página Create authentication credentials en la documentación de Akamai.
  2. Sigue los pasos para aprovisionar la API del SIEM para el usuario al que le asignaste la administración del SIEM.
  3. Copia y guarda las siguientes credenciales de forma segura:
    • Token de acceso (Access Token)
    • Token cliente
    • Client Secret (Secreto del cliente)
    • URL base

Instala el conector de CEF de Akamai

  1. En tu servidor Linux, descarga el paquete de distribución más reciente del conector de CEF desde el repositorio de GitHub de Akamai.
  2. Transfiere el paquete a tu servidor con wget o SFTP.
  3. Verifica el hash SHA256 del archivo descargado para garantizar su integridad.
  4. Extrae el paquete de distribución:

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

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

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

Configura el conector de CEF de Akamai

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

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

    sudo nano CEFConnector.properties
    
  3. Configura 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. Reemplaza los siguientes marcadores de posición por tus valores reales:

    • <YOUR_SECURITY_CONFIG_ID>: Es el ID de configuración de seguridad web que copiaste antes. Para varias configuraciones, separa los IDs con punto y coma (por ejemplo, 12345;67890).
    • <YOUR_ACCESS_TOKEN>: Es el token de acceso de las credenciales de la API de Akamai.
    • <YOUR_CLIENT_TOKEN>: Es el token del cliente de las credenciales de la API de Akamai.
    • <YOUR_CLIENT_SECRET>: El secreto del cliente de las credenciales de la API de Akamai
    • <YOUR_BASE_URL>: Es la URL base de las credenciales de la API de Akamai.
  5. Guarde y cierre el archivo.

Configura el registro del conector de CEF

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

    sudo nano log4j2.xml
    
  3. Configura los siguientes parámetros para la salida de syslog 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. Reemplaza los marcadores de posición que se indican más abajo:

    • <BINDPLANE_IP_ADDRESS>: La dirección IP del servidor en el que está instalado el agente de Bindplane
    • <BINDPLANE_PORT>: Es el 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 de CEF envíe registros al servidor syslog remoto (BindPpane) configurando los parámetros 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. Guarde y cierre el archivo.

Inicia el conector de CEF de Akamai

  1. Inicia el servicio del conector de CEF:

    sudo /etc/init.d/AkamaiCEFConnector start
    
  2. Verifica que el servicio esté en ejecución:

    sudo /etc/init.d/AkamaiCEFConnector status
    
  3. Supervisa 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
    

Instala el agente de BindPlane

Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.

Instalación en Windows

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el comando siguiente:

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

Instalación en Linux

  1. Abre una terminal con privilegios de raíz o sudo.
  2. Ejecuta el comando siguiente:

    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

Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps

  1. Accede al archivo de configuración:

    1. Ubica el archivo config.yaml. Por lo general, 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 de Servicios o ingresar el siguiente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Verifica la transferencia de registros

  1. Accede a la consola de Google SecOps.
  2. Ve a Search o Raw Log Scan.
  3. Busca registros recientes del WAF de Akamai con la etiqueta de transferencia:

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

  5. Verifica que los campos de formato CEF se analicen y asignen correctamente al UDM.

Soluciona problemas

Problemas con el conector de CEF

  • No se extraen eventos: Revisa el archivo cefconnector.log en busca de errores. 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: Asegúrate de que la configuración del proxy (si corresponde) esté configurada correctamente y de que los dominios requeridos estén en la lista de entidades permitidas.
  • Restablecimiento de la base de datos: Si necesitas restablecer el seguimiento de la compensación, ejecuta el siguiente comando:

    sudo /etc/init.d/AkamaiCEFConnector resetdb
    

Problemas del agente de Bindplane

  • Los registros no llegan a BindPlane: Verifica que el conector CEF esté configurado para enviar syslog a la dirección IP y el puerto correctos de BindPlane. Verifica las reglas de firewall entre el conector de CEF y el agente de Bindplane.
  • Los registros no llegan a Google SecOps: Verifica el archivo de configuración de Bindplane, el ID de cliente y la ruta de autenticación de la transferencia. Revisa los registros de Bindplane en busca de errores:

    sudo journalctl -u observiq-otel-collector -f
    

Red y conectividad

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

Cómo recuperar eventos de seguridad anteriores

El conector de CEF de Akamai funciona en dos modos:

  • Basado en desfase (recomendado): El conector registra automáticamente los eventos de seguridad a medida que se recopilan casi en tiempo real. Este es el modo predeterminado cuando akamai.data.timebased se establece en false.
  • Basado en el tiempo: Te permite recuperar eventos que ocurrieron dentro de un período específico (hasta 12 horas en el pasado).

Para recuperar eventos de seguridad faltantes o anteriores, 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>
    
    • Reemplaza <EPOCH_START_TIME> por la hora de inicio en formato de época (en las últimas 12 horas).
    • Reemplaza <EPOCH_END_TIME> por la hora de finalización en formato de época (opcional; si se deja en blanco, se extraen los eventos hasta el presente).
  3. Reinicia el conector de CEF:

    sudo /etc/init.d/AkamaiCEFConnector restart
    
  4. Después de recuperar los datos históricos, vuelve al modo de desfase:

    akamai.data.timebased=false
    
  5. Reinicia el conector de CEF nuevamente.

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 realiza 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 que usa la solicitud entrante
requestMethod (httpMessage.method) network.http.method Método HTTP de la solicitud entrante (GET, POST, etcétera)
request (requestURL) target.url URL completa calculada a partir de los campos de httpMessage
cs1 (attackData.rules) security_result.rule_id IDs de las reglas que se activaron para esta solicitud
cs2 (attackData.ruleMessages) security_result.rule_name Mensajes de las reglas que se activaron
act (appliedAction) security_result.action Acción realizada (alerta, rechazo, anulación, etc.)
severity security_result.severity Gravedad calculada (5 para detectar, 10 para mitigar)
cs5 (attackData.clientReputation) security_result.threat_name Puntuaciones de IP de cliente para la reputación del cliente
cs6 (attackData.apiId) security_result.detection_fields ID de API para la protección de API
start (httpMessage.start) metadata.event_timestamp Fecha y hora en 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 firewall aplicada a esta solicitud
AkamaiSiemJA4 (identity.ja4) network.tls.client.ja3 Huella digital de TLS del cliente de JA4

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.