Akamai WAF 로그 수집

다음에서 지원:

이 문서에서는 Akamai CEF 커넥터와 Bindplane을 사용하여 Akamai WAF 로그를 Google Security Operations로 수집하는 방법을 설명합니다.

시작하기 전에

다음 기본 요건이 충족되었는지 확인합니다.

  • Google SecOps 인스턴스
  • Bindplane 에이전트 설치를 위한 systemd가 있는 Windows 2016 이상 또는 Linux 호스트
  • CPU 코어가 2개 이상이고, RAM이 6GB이며, Akamai CEF 커넥터용 여유 디스크 공간이 2GB인 Linux 서버 (CentOS/RHEL/Ubuntu 권장)
  • CEF 커넥터 호스트에 Java 8 (JRE 1.8) 이상 설치
  • 프록시 뒤에서 실행하는 경우 Bindplane 에이전트 요구사항에 따라 방화벽 포트가 열려 있고 프록시 허용 목록 *.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. 웹 및 데이터 센터 보안에서 보안 구성을 클릭합니다.
  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 CenterACCOUNT ADMIN에서 Identity & access를 클릭합니다.
  2. 사용자 및 API 클라이언트 탭에서 역할을 할당할 사용자를 찾거나 사용자 만들기 버튼을 클릭합니다.
  3. 기존 사용자에게 SIEM 역할을 할당하려면 다음 단계를 따르세요.
    • 사용자의 계정을 열고 역할 수정 탭을 클릭합니다.
    • 적절한 그룹을 찾아 역할 메뉴를 클릭하고 SIEM 관리 역할을 선택합니다.
    • 제출을 클릭합니다.
  4. 새 사용자에게 SIEM 역할을 할당하려면 다음 단계를 따르세요.
    • 사용자 만들기를 클릭합니다.
    • 사용자의 기본 정보를 입력하고 역할 할당 섹션으로 이동합니다.
    • 적절한 그룹을 찾아 역할 메뉴를 클릭하고 SIEM 관리 역할을 선택합니다.
    • 저장을 클릭합니다.

Akamai Control Center에서 SIEM API 사용자 인증 정보 프로비저닝

  1. Akamai 문서의 인증 사용자 인증 정보 만들기 페이지를 참고하세요.
  2. SIEM을 관리하도록 할당된 사용자에 대해 SIEM API를 프로비저닝하는 단계를 따릅니다.
  3. 다음 사용자 인증 정보를 복사하여 안전하게 저장합니다.
    • Access Token(액세스 토큰)
    • 클라이언트 토큰
    • 클라이언트 보안 비밀번호
    • 기준 URL

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. 텍스트 편집기 (예: nano, vi)를 사용하여 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 사용자 인증 정보의 기본 URL
  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>: UDP 또는 TCP 선택
  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. 루트 또는 sudo 권한으로 터미널을 엽니다.
  2. 다음 명령어를 실행합니다.

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

추가 설치 리소스

Syslog를 수집하여 Google SecOps로 전송하도록 Bindplane 에이전트 구성

  1. 구성 파일에 액세스합니다.

    1. config.yaml 파일을 찾습니다. 일반적으로 Linux에서는 /etc/bindplane-agent/ 디렉터리에 있고 Windows에서는 설치 디렉터리에 있습니다.
    2. 텍스트 편집기 (예: nano, vi, 메모장)를 사용하여 파일을 엽니다.
  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 커넥터가 올바른 Bindplane IP 주소 및 포트로 syslog를 전송하도록 구성되어 있는지 확인합니다. 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.timebasedfalse로 설정된 경우 기본 모드입니다.
  • 시간 기반: 특정 기간 (최대 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>을 epoch 형식의 종료 시간으로 바꿉니다 (선택사항, 비워 두면 현재까지의 일정을 가져옴).
  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 필드에서 계산된 전체 URL
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 서버가 연결을 시작한 시간 (에포크 형식)
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 전문가에게 문의하여 답변을 받으세요.