收集 Akamai WAF 日志

支持的平台:

本文档介绍了如何使用 Akamai CEF 连接器和 Bindplane 将 Akamai WAF 日志注入到 Google Security Operations。

准备工作

请确保满足以下前提条件:

  • Google SecOps 实例
  • 安装 Bindplane 代理的 Windows 2016 或更高版本或 Linux 主机(带 systemd)
  • 一台 Linux 服务器(建议使用 CentOS/RHEL/Ubuntu),至少具有 2 个 CPU 核心、6GB RAM、2GB 可用磁盘空间(用于 Akamai CEF 连接器)
  • 在 CEF 连接器主机上安装了 Java 8 (JRE 1.8) 或更高版本
  • 如果 Bindplane 在代理后面运行,请确保防火墙端口根据 Bindplane 代理要求处于开放状态,并且代理许可名单包含 *.cloudsecurity.akamaiapis.net*.luna.akamaiapis.net
  • 对 Akamai 控制中心的特权访问权限
  • 启用了 App & API Protector、Kona Site Defender、Web Application Protector、Bot Manager 或 Account Protector 的 Akamai 安全配置

获取 Google SecOps 注入身份验证文件

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 收集代理
  3. 下载注入身份验证文件。将文件安全地保存在将要安装 Bindplane 的系统上。

获取 Google SecOps 客户 ID

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 个人资料
  3. 复制并保存组织详细信息部分中的客户 ID

在 Akamai Control Center 中启用 SIEM 集成

  1. 登录 Akamai 控制中心
  2. 网站和数据中心安全下,点击安全配置
  3. 打开安全配置以及要收集 SIEM 数据的相应版本。
  4. 点击高级设置,然后展开 SIEM 集成的数据收集
  5. 点击开启以启用 SIEM。
  6. 选择要导出哪些安全政策的数据:
    • 所有安全政策:选择此选项可针对违反安全配置中任何或所有安全政策的事件发送 SIEM 数据。
    • 特定安全政策:选择此选项可发送与一项或多项特定安全政策相关的数据。从下拉列表中选择相应政策。
  7. 可选:如果您使用账号保护器,并希望包含未加密的用户名,请选中包含用户名复选框。
  8. 可选:如果您想在 SIEM 事件中接收 JA4 指纹信息,请选中包含 JA4 客户端 TLS 指纹复选框。
  9. 可选:如果您想排除属于特定保护类型和操作的事件,请点击添加例外情况。选择您不希望 SIEM 收集的保护措施和相关操作。点击保存
  10. 复制网络安全配置 ID 字段中的值。保存此 ID 以供日后使用。
  11. 点击激活,将安全配置更改推送到生产网络。在网络下,点击正式版,然后点击激活

设置用户以在 Akamai Control Center 中管理 SIEM

  1. Akamai Control Center 中,点击账号管理下的身份与访问权限
  2. 用户和 API 客户端标签页中,找到您要向其分配角色的用户,或点击创建用户按钮。
  3. 如需将 SIEM 角色分配给现有用户,请执行以下操作:
    • 打开用户的账号,然后点击修改角色标签页。
    • 找到相应群组,点击角色菜单,然后选择 Manage SIEM 角色。
    • 点击提交
  4. 如需为新用户分配 SIEM 角色,请执行以下操作:
    • 点击创建用户
    • 输入用户的基本信息,然后前往分配角色部分。
    • 找到相应群组,点击角色菜单,然后选择 Manage SIEM 角色。
    • 点击保存

在 Akamai 控制中心内预配 SIEM API 凭据

  1. 请访问 Akamai 文档中的创建身份验证凭据页面。
  2. 按照相应步骤为分配了 SIEM 管理权限的用户配置 SIEM API。
  3. 复制并妥善保存以下凭据:
    • Access Token
    • 客户端令牌
    • 客户端密钥 (Client Secret)
    • 基础网址

安装 Akamai CEF 连接器

  1. 在 Linux 服务器上,从 Akamai GitHub 代码库下载最新的 CEF 连接器分发软件包。
  2. 使用 wget 或 SFTP 将软件包转移到您的服务器。
  3. 验证下载文件的 SHA256 哈希值,以确保完整性。
  4. 提取分发软件包:

    unzip CEFConnector-<version>.zip
    
  5. 导航到提取的目录:

    cd CEFConnector-<version>
    
  6. 如需安装该服务,请创建指向启动脚本的符号链接:

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

配置 Akamai CEF 连接器

  1. 导航到 CEF 连接器安装中的 config 目录:

    cd config
    
  2. 使用文本编辑器(例如 nanovi)打开 CEFConnector.properties 文件:

    sudo nano CEFConnector.properties
    
  3. 配置以下必需参数:

    # 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. 将以下占位符替换为您的实际值:

    • <YOUR_SECURITY_CONFIG_ID>:您之前复制的 Web 安全配置 ID。对于多个配置,请用英文分号分隔 ID(例如 12345;67890)。
    • <YOUR_ACCESS_TOKEN>:Akamai API 凭据中的访问令牌
    • <YOUR_CLIENT_TOKEN>:来自 Akamai API 凭据的客户端令牌
    • <YOUR_CLIENT_SECRET>:Akamai API 凭据中的客户端密钥
    • <YOUR_BASE_URL>:来自 Akamai API 凭据的基础网址
  5. 保存并关闭文件。

配置 CEF 连接器日志记录

  1. 前往 CEF 连接器安装中的 config 目录。
  2. 使用文本编辑器打开 log4j2.xml 文件:

    sudo nano log4j2.xml
    
  3. 为发送到 Bindplane 的 syslog 输出配置以下参数:

    <!-- 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. 替换以下占位符:

    • <BINDPLANE_IP_ADDRESS>:安装了 Bindplane 代理的服务器的 IP 地址
    • <BINDPLANE_PORT>:Bindplane 代理监听的端口号(例如,UDP 为 514,TCP 为 601
    • <PROTOCOL>:选择 UDPTCP
  5. 通过配置特定于 CEF 的设置,确保 CEF 连接器将日志发送到远程 syslog 服务器 (BindPpane):

    # In CEFConnector.properties, ensure these are set:
    # Note: These settings are typically in log4j2.xml but referenced here for clarity
    
  6. 保存并关闭文件。

启动 Akamai CEF 连接器

  1. 启动 CEF 连接器服务:

    sudo /etc/init.d/AkamaiCEFConnector start
    
  2. 验证服务是否正在运行:

    sudo /etc/init.d/AkamaiCEFConnector status
    
  3. 监控日志,确保连接器从 Akamai 拉取事件并将其发送到 Bindplane:

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

安装 Bindplane 代理

按照以下说明在 Windows 或 Linux 操作系统上安装 Bindplane 代理。

Windows 安装

  1. 以管理员身份打开命令提示符PowerShell
  2. 运行以下命令:

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

Linux 安装

  1. 打开具有 root 或 sudo 权限的终端。
  2. 运行以下命令:

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

其他安装资源

  • 如需了解其他安装选项,请参阅此安装指南

配置 Bindplane 代理以注入 Syslog 并将其发送到 Google SecOps

  1. 访问配置文件:

    1. 找到 config.yaml 文件。通常,它位于 Linux 上的 /etc/bindplane-agent/ 目录中或 Windows 上的安装目录中。
    2. 使用文本编辑器(例如 nanovi 或记事本)打开该文件。
  2. 按如下方式修改 config.yaml 文件:

    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
    

重启 Bindplane 代理以应用更改

  • 如需在 Linux 中重启 Bindplane 代理,请运行以下命令:

    sudo systemctl restart bindplane-agent
    
  • 如需在 Windows 中重启 Bindplane 代理,您可以使用服务控制台,也可以输入以下命令:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

验证日志注入

  1. 登录 Google SecOps 控制台。
  2. 前往搜索原始日志扫描
  3. 使用提取标签搜索最近的 Akamai WAF 日志:

    metadata.log_type = "AKAMAI_WAF"
    
  4. 验证日志是否显示,以及是否包含预期字段和时间戳。

  5. 检查 CEF 格式字段是否已正确解析并映射到 UDM。

问题排查

CEF 连接器问题

  • 未提取任何事件:检查 cefconnector.log 文件是否存在错误。验证 Akamai API 凭证是否正确,以及安全配置 ID 是否有效。
  • 连接错误:确保代理设置(如果适用)已正确配置,并且所需网域已列入许可名单。
  • 数据库重置:如果您需要重置偏移量跟踪,请运行:

    sudo /etc/init.d/AkamaiCEFConnector resetdb
    

Bindplane 代理问题

  • 日志未到达 Bindplane:验证 CEF 连接器是否已配置为将 syslog 发送到正确的 Bindplane IP 地址和端口。检查 CEF 连接器与 Bindplane 代理之间的防火墙规则。
  • 日志未到达 Google SecOps:验证 Bindplane 配置文件、客户 ID 和注入身份验证路径。检查 Bindplane 日志是否存在错误:

    sudo journalctl -u observiq-otel-collector -f
    

网络和连接

  • 验证 CEF 连接器是否可以访问 Akamai SIEM API 端点。
  • 验证 Bindplane 代理是否可以访问 Google SecOps 注入端点 (malachiteingestion-pa.googleapis.com)。
  • 检查所有必需的防火墙端口是否已打开。

检索过往安全事件

Akamai CEF 连接器以两种模式运行:

  • 基于偏移量(推荐):连接器会自动记录收集到的安全性事件,近乎实时。当 akamai.data.timebased 设置为 false 时,此为默认模式。
  • 基于时间:可用于检索在特定时间段内(最长为过去 12 小时)发生的事件。

如需检索丢失或过往的安全事件,请执行以下操作:

  1. 打开连接器的配置文件:

    sudo nano /path/to/CEFConnector-<version>/config/CEFConnector.properties
    
  2. 更改基于时间的配置:

    akamai.data.timebased=true
    akamai.data.timebased.from=<EPOCH_START_TIME>
    akamai.data.timebased.to=<EPOCH_END_TIME>
    
    • <EPOCH_START_TIME> 替换为以纪元格式表示的开始时间(在过去 12 小时内)。
    • <EPOCH_END_TIME> 替换为以纪元格式表示的结束时间(可选;如果留空,则提取截至目前的所有事件)。
  3. 重启 CEF 连接器:

    sudo /etc/init.d/AkamaiCEFConnector restart
    
  4. 检索到历史数据后,恢复为偏移模式:

    akamai.data.timebased=false
    
  5. 再次重启 CEF 连接器。

UDM 映射表

日志字段 UDM 映射 逻辑
src (attackData.clientIP) principal.ip 发出请求的客户端的来源 IP 地址
c6a2 (ipv6src) principal.ip 如果 attackData.clientIP 采用 IPv6 格式,则为来源 IPv6 地址
dhost (httpMessage.host) target.hostname 来自 HTTP HOST 标头的主机名
dpt (httpMessage.port) target.port 入站请求使用的端口号
requestMethod (httpMessage.method) network.http.method 传入请求的 HTTP 方法(GET、POST 等)
request (request网址) target.url 根据 httpMessage 字段计算出的完整网址
cs1 (attackData.rules) security_result.rule_id 为此请求触发的规则的规则 ID
cs2 (attackData.ruleMessages) security_result.rule_name 触发的规则的消息
act (appliedAction) security_result.action 采取的操作(提醒、拒绝、中止等)
severity security_result.severity 计算出的严重程度(检测为 5,缓解为 10)
cs5 (attackData.clientReputation) security_result.threat_name 客户端信誉的客户端 IP 得分
cs6(attackData.apiId) security_result.detection_fields API 保护的 API ID
start (httpMessage.start) metadata.event_timestamp 边缘服务器发起连接的时间(纪元格式)
devicePayloadId (httpMessage.requestId) metadata.product_log_id 消息的全局唯一 ID
flexString1 (attackData.configId) security_result.detection_fields 应用于相应请求的安全配置的 ID
flexString2 (attackData.policyId) security_result.detection_fields 应用于相应请求的防火墙政策的 ID
AkamaiSiemJA4 (identity.ja4) network.tls.client.ja3 JA4 客户端 TLS 指纹

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。