收集 Akamai WAF 記錄

支援的國家/地區:

本文說明如何使用 Akamai CEF 連接器和 Bindplane,將 Akamai WAF 記錄擷取至 Google Security Operations。

事前準備

請確認您已完成下列事前準備事項:

  • Google SecOps 執行個體
  • Windows 2016 以上版本或 Linux 主機,並使用 systemd 安裝 Bindplane 代理程式
  • Linux 伺服器 (建議使用 CentOS/RHEL/Ubuntu),至少有 2 個 CPU 核心、6 GB RAM,以及 2 GB 的可用磁碟空間 (供 Akamai CEF 連接器使用)
  • 在 CEF 連接器主機上安裝 Java 8 (JRE 1.8) 以上版本
  • 如果透過 Proxy 執行,請確認防火牆通訊埠已根據 Bindplane 代理程式需求開啟,且 Proxy 允許清單 *.cloudsecurity.akamaiapis.net*.luna.akamaiapis.net
  • Akamai Control Center 的特殊存取權
  • 啟用 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 Control Center
  2. 在「WEB & DATA CENTER SECURITY」下方,按一下「Security Configuration」
  3. 開啟安全設定,以及要收集 SIEM 資料的適當版本。
  4. 按一下「進階設定」,然後展開「SIEM 整合的資料收集」
  5. 按一下「開啟」即可啟用 SIEM。
  6. 選擇要匯出資料的安全政策:
    • 所有安全性政策:選取這個選項,即可傳送違反安全性設定中任何或所有安全性政策的事件 SIEM 資料。
    • 特定安全性政策:選取這個選項,即可傳送一或多項特定安全性政策的相關資料。從下拉式選單中選取適當的政策。
  7. 選用:如果您使用帳戶保護功能,並想加入未加密的使用者名稱,請勾選「包含使用者名稱」核取方塊。
  8. 選用:如要在 SIEM 事件中接收 JA4 指紋資訊,請勾選「Include the JA4 Client TLS Fingerprint」(包含 JA4 用戶端 TLS 指紋) 核取方塊。
  9. 選用:如要排除屬於特定保護措施類型和動作的事件,請按一下「新增例外狀況」。選取您不希望 SIEM 收集的防護措施和相關動作。然後按一下 [儲存]
  10. 複製「網站安全設定 ID」欄位中的值。請儲存這組 ID,稍後會用到。
  11. 按一下「啟用」,將安全性設定變更推送至正式網路。在「網路」下方,依序點選「正式版」和「啟用」

設定使用者在 Akamai Control Center 中管理 SIEM

  1. Akamai Control Center 的「ACCOUNT ADMIN」下方,按一下「Identity & access」
  2. 在「使用者和 API 用戶端」分頁中,找出要指派角色的使用者,或按一下「建立使用者」按鈕。
  3. 如要將 SIEM 角色指派給現有使用者:
    • 開啟使用者的帳戶,然後按一下「編輯角色」分頁標籤。
    • 找出適當的群組,按一下「角色」選單,然後選取「管理 SIEM」角色。
    • 按一下「提交」
  4. 如要將 SIEM 角色指派給新使用者:
    • 按一下「建立使用者」
    • 輸入使用者的基本資訊,然後前往「指派角色」專區。
    • 找出適當的群組,按一下「角色」選單,然後選取「管理 SIEM」角色。
    • 按一下 [儲存]

在 Akamai Control Center 中佈建 SIEM API 憑證

  1. 請參閱 Akamai 說明文件中的「建立驗證憑證」頁面。
  2. 按照步驟,為指派管理 SIEM 的使用者佈建 SIEM API。
  3. 複製並妥善儲存下列憑證:
    • 存取權杖
    • 用戶端憑證
    • 用戶端密碼
    • 基準網址

安裝 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>:您先前複製的網路安全設定 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 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>:選取「UDP」或「TCP
  5. 請設定 CEF 專屬設定,確保 CEF 連接器將記錄檔傳送至遠端系統記錄檔伺服器 (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. 開啟具備根層級或 sudo 權限的終端機。
  2. 執行下列指令:

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

其他安裝資源

設定 Bindplane 代理程式,擷取系統記錄檔並傳送至 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 有效。
  • 連線錯誤:確認 Proxy 設定 (如適用) 正確無誤,且必要網域已加入許可清單。
  • 重設資料庫:如要重設偏移追蹤,請執行:

    sudo /etc/init.d/AkamaiCEFConnector resetdb
    

Bindplane 代理程式問題

  • 記錄檔未傳送至 Bindplane:確認 CEF 連接器已設定為將系統記錄檔傳送至正確的 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 格式的結束時間取代 <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 (requestURL) 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 Edge 伺服器啟動連線的時間 (epoch 格式)
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 專業人員尋求答案。