Akamai WAF 로그 수집

다음에서 지원:

개요

이 파서는 syslog 및 CEF 형식을 모두 지원하는 Akamai 웹 애플리케이션 방화벽 (WAF) 로그를 처리합니다. IP 주소, URL, HTTP 메서드, 응답 코드, 사용자 에이전트, 보안 규칙 정보와 같은 필드를 추출하여 일관된 표현을 위해 UDM에 매핑합니다. 또한 파서는 attackDataclientReputation와 같은 특정 Akamai 필드를 처리하여 필요한 데이터 변환을 실행하고 UDM 출력을 보강합니다.

시작하기 전에

  • Google SecOps 인스턴스가 있는지 확인합니다.
  • AWS IAM 및 S3에 대한 액세스 권한이 있는지 확인합니다.
  • Akamai에 대한 권한이 있는지 확인합니다.

Amazon S3 버킷 구성

  1. 버킷 만들기 사용자 가이드에 따라 Amazon S3 버킷을 만듭니다.
  2. 나중에 참고할 수 있도록 버킷 이름리전을 저장합니다.
  3. IAM 사용자 만들기 사용자 가이드에 따라 사용자를 만듭니다.
  4. 만든 사용자를 선택합니다.
  5. 보안 사용자 인증 정보 탭을 선택합니다.
  6. 액세스 키 섹션에서 액세스 키 만들기를 클릭합니다.
  7. 사용 사례서드 파티 서비스를 선택합니다.
  8. 다음을 클릭합니다.
  9. 선택사항: 설명 태그를 추가합니다.
  10. 액세스 키 만들기를 클릭합니다.
  11. .csv 파일 다운로드를 클릭합니다. 나중에 참고할 수 있도록 액세스 키보안 비밀 액세스 키를 저장합니다.
  12. 완료를 클릭합니다.
  13. 권한 탭을 선택합니다.
  14. 권한 정책 섹션에서 권한 추가를 클릭합니다.
  15. 권한 추가를 선택합니다.
  16. Attach policies directly(정책 직접 연결)를 선택합니다.
  17. AmazonS3FullAccess 정책을 검색합니다.
  18. 정책을 선택합니다.
  19. 다음을 클릭합니다.
  20. 권한 추가를 클릭합니다.

Amazon S3로 로그를 전송하도록 Akamai WAF 구성

  1. Akamai Control Center에 로그인합니다.
  2. 보안 섹션으로 이동합니다.
  3. 로그를 선택합니다.
  4. 새 로그 전송을 구성합니다.

    • 로그 소스: WAF 구성을 선택합니다.
    • 전송 대상: Amazon S3를 선택합니다.
    • S3 버킷: 만든 S3 버킷의 이름을 지정합니다.
    • 리전: S3 버킷이 있는 AWS 리전을 선택합니다.
    • 액세스 키 ID 및 보안 비밀 액세스 키: 생성한 사용자 인증 정보를 입력합니다.
    • 로그 형식: 관련 로그 형식 (예: JSON)을 선택합니다.
    • 전송 빈도: 로그 전송에 적절한 빈도를 선택합니다 (예: 5분마다).
  5. 로그 전송 확인:

    • LDS를 구성한 후 S3 버킷에서 수신되는 로그 파일을 모니터링합니다.

Akamai WAF 로그를 수집하도록 Google SecOps에서 피드 구성

  1. SIEM 설정 > 피드로 이동합니다.
  2. 새로 추가를 클릭합니다.
  3. 피드 이름 필드에 피드 이름을 입력합니다 (예: Akamai WAF 로그).
  4. 소스 유형으로 Amazon S3를 선택합니다.
  5. 로그 유형으로 Akamai WAF를 선택합니다.
  6. 다음을 클릭합니다.
  7. 다음 입력 매개변수의 값을 지정합니다.

    • 리전: Amazon S3 버킷이 있는 리전입니다.
    • S3 URI: 버킷 URI입니다. s3:/BUCKET_NAME 다음을 바꿉니다.
      • BUCKET_NAME: 버킷의 이름입니다.
    • URI: 로그 스트림 구성에 따라 단일 파일 | 디렉터리 | 하위 디렉터리가 포함된 디렉터리 중에서 URI 유형을 선택합니다.
    • 소스 삭제 옵션: 원하는 삭제 옵션을 선택합니다.
    • 액세스 키 ID: S3 버킷에 대한 액세스 권한이 있는 사용자 액세스 키입니다.
    • 보안 비밀 액세스 키: S3 버킷에 액세스할 수 있는 사용자 보안 비밀 키입니다.
    • 애셋 네임스페이스: 애셋 네임스페이스입니다.
    • 수집 라벨: 이 피드의 이벤트에 적용할 라벨입니다.
  8. 다음을 클릭합니다.

  9. 확정 화면에서 새 피드 구성을 검토한 다음 제출을 클릭합니다.

UDM 매핑 표

로그 필드 (오름차순) UDM 매핑 논리
attackData.clientIP principal.ip, principal.asset.ip 요청을 시작한 클라이언트의 IP 주소입니다. akamai_siem 로그의 attackData.clientIP 필드에서 추출됩니다.
attackData.configId metadata.product_log_id 보안 구성 ID입니다. akamai_siem 로그의 attackData.configId 필드에서 추출됩니다. security_result 객체에 detection_field로 추가되었습니다.
attackData.policyId 해당 사항 없음 파서 로직에서 security_result.summary를 'PolicyId:[value]' 값으로 채우는 데 사용됩니다.
attackData.ruleActions security_result.action, security_result.action_details 트리거된 규칙에 따라 취해진 조치입니다. akamai_siem 로그의 attackData.ruleActions 필드에서 추출됩니다. 'deny'는 BLOCK에 매핑되고 다른 값 ('alert', 'monitor', 'allow', 'tarpit')은 ALLOW에 매핑됩니다. 원래 값은 action_details에도 저장됩니다.
attackData.ruleData security_result.detection_fields 트리거된 규칙과 연결된 데이터입니다. akamai_siem 로그의 attackData.ruleData 필드에서 추출됩니다. 'RuleData' 키로 security_result.detection_fields에 추가되었습니다.
attackData.ruleMessages security_result.threat_name 트리거된 규칙과 연결된 메시지입니다. akamai_siem 로그의 attackData.ruleMessages 필드에서 추출됩니다.
attackData.ruleSelectors security_result.detection_fields 트리거된 규칙과 연결된 선택자입니다. akamai_siem 로그의 attackData.ruleSelectors 필드에서 추출됩니다. 'RuleSelector' 키로 security_result.detection_fields에 추가되었습니다.
attackData.ruleTags security_result.category_details 트리거된 규칙과 연결된 태그입니다. akamai_siem 로그의 attackData.ruleTags 필드에서 추출됩니다.
attackData.ruleVersions security_result.detection_fields 트리거된 규칙의 버전입니다. akamai_siem 로그의 attackData.ruleVersions 필드에서 추출됩니다. 'Rule Version' 키로 security_result.detection_fields에 추가되었습니다.
clientReputation principal.labels 고객 평판 정보 akamai_siem 로그의 clientReputation 필드에서 추출됩니다. 'reputation' 키를 사용하여 사용자에게 라벨로 추가되었습니다.
cliIP, cli_ip, principal_ip principal.ip, principal.asset.ip 클라이언트 IP 주소입니다. 로그 형식에 따라 cliIP, cli_ip 또는 principal_ip에서 추출됩니다.
cp additional.fields CP 코드 cp 필드에서 추출됩니다. 'cp' 키로 additional.fields에 추가되었습니다.
eventId metadata.product_log_id 이벤트 ID eventId 필드에서 추출됩니다.
eventTime, log_date metadata.event_timestamp 이벤트 타임스탬프 로그 형식에 따라 eventTime에서 추출되거나 log_date에서 파싱됩니다.
eventType.eventDefinition.eventDefinitionId target.resource.product_object_id 이벤트 정의 ID입니다. eventType.eventDefinition.eventDefinitionId에서 추출되었습니다.
eventType.eventDefinition.eventDescription metadata.description 이벤트 설명 eventType.eventDefinition.eventDescription에서 추출되었습니다.
eventType.eventDefinition.eventName metadata.product_event_type 이벤트 이름 eventType.eventDefinition.eventName에서 추출되었습니다.
eventType.eventTypeId additional.fields 이벤트 유형 ID입니다. eventType.eventTypeId에서 추출했습니다. 'eventTypeId' 키로 additional.fields에 추가되었습니다.
eventType.eventTypeName additional.fields 이벤트 유형 이름입니다. eventType.eventTypeName에서 추출되었습니다. 'eventTypeName' 키로 additional.fields에 추가되었습니다.
format 해당 사항 없음 파서에서 로그 형식을 결정하는 데 사용됩니다.
geo.asn principal.location.name 자율 시스템 번호 (ASN) 로그 형식에 따라 geo.asn 또는 AkamaiSiemASN에서 추출됩니다. 값의 접두사는 'ASN '입니다.
geo.city principal.location.city 도시. 로그 형식에 따라 geo.city 또는 AkamaiSiemCity에서 추출됩니다.
geo.country principal.location.country_or_region 국가 로그 형식에 따라 geo.country 또는 AkamaiSiemContinent에서 추출됩니다.
httpMessage.bytes network.sent_bytes HTTP 메시지로 전송된 바이트입니다. httpMessage.bytes에서 추출되었습니다.
httpMessage.host target.hostname, target.asset.hostname 호스트 이름 로그 형식에 따라 httpMessage.host 또는 reqHost에서 추출됩니다.
httpMessage.method network.http.method HTTP 메서드 로그 형식에 따라 httpMessage.method, network_http_method 또는 reqMethod에서 추출됩니다. 대문자로 변환됩니다.
httpMessage.path target.url 요청 경로입니다. 로그 형식에 따라 httpMessage.path, target_url 또는 reqPath에서 추출됩니다. httpMessage.query가 있는 경우 '?' 구분자로 경로에 추가됩니다.
httpMessage.port target.port 포트 로그 형식에 따라 httpMessage.port 또는 reqPort에서 추출됩니다.
httpMessage.protocol 해당 사항 없음 파서에서 프로토콜을 결정하는 데 사용됩니다.
httpMessage.query 해당 사항 없음 파서 로직에서 httpMessage.path에 추가하는 데 사용됩니다(있는 경우).
httpMessage.requestId network.session_id 요청 ID입니다. 로그 형식에 따라 httpMessage.requestId 또는 reqId에서 추출됩니다.
httpMessage.requestHeaders, AkamaiSiemRequestHeaders additional.fields 요청 헤더 로그 형식에 따라 httpMessage.requestHeaders 또는 AkamaiSiemRequestHeaders에서 추출됩니다. additional.fields에 'AkamaiSiemRequestHeaders' 키로 추가되었습니다.
httpMessage.responseHeaders, AkamaiSiemResponseHeaders additional.fields 응답 헤더 로그 형식에 따라 httpMessage.responseHeaders 또는 AkamaiSiemResponseHeaders에서 추출됩니다. 'AkamaiSiemResponseHeaders' 키로 additional.fields에 추가되었습니다.
httpMessage.status, AkamaiSiemResponseStatus, network_http_response_code, statusCode network.http.response_code HTTP 응답 코드입니다. 로그 형식에 따라 httpMessage.status 또는 AkamaiSiemResponseStatus 또는 network_http_response_code 또는 statusCode에서 추출됩니다.
httpMessage.tls, AkamaiSiemTLSVersion, tlsVersion network.tls.version TLS 버전 로그 형식에 따라 httpMessage.tls, AkamaiSiemTLSVersion 또는 tlsVersion에서 추출됩니다.
httpMessage.useragent, network_http_user_agent, UA, useragent network.http.user_agent 사용자 에이전트 로그 형식에 따라 httpMessage.useragent 또는 network_http_user_agent 또는 UA 또는 useragent에서 추출됩니다.
log_description metadata.description 로그 설명 log_description에서 추출되었습니다.
log_rule security_result.rule_name 로그 규칙 log_rule에서 추출되었습니다.
message 해당 사항 없음 원시 로그 메시지입니다. 파서에서 다양한 추출에 사용합니다.
network_http_referral_url network.http.referral_url HTTP 추천 URL network_http_referral_url에서 추출되었습니다.
proto 해당 사항 없음 attackData.policyId가 없는 경우 security_result.summary를 채우기 위해 파서 로직에서 사용됩니다.
reqHost target.hostname, target.asset.hostname 호스트를 요청합니다. reqHost에서 추출되었습니다.
reqId metadata.product_log_id, network.session_id 요청 ID입니다. reqId에서 추출되었습니다.
reqMethod network.http.method 요청 메서드 reqMethod에서 추출되었습니다.
reqPath target.url 요청 경로입니다. reqPath에서 추출되었습니다.
reqPort target.port 포트를 요청합니다. reqPort에서 추출되었습니다.
rspContentType target.file.mime_type 응답 콘텐츠 유형입니다. rspContentType에서 추출되었습니다.
securityRules security_result.rule_name, security_result.about.resource.attribute.labels 보안 규칙을 선택합니다. securityRules에서 추출되었습니다. 첫 번째 부분은 rule_name에 매핑되고 나머지는 'non_deny_rules' 및 'deny_rule_format' 키가 있는 라벨로 추가됩니다.
statusCode network.http.response_code 상태 코드 statusCode에서 추출되었습니다.
state principal.location.state, target.user.personal_address.state 주/도 state에서 추출했습니다.
tlsVersion network.tls.version TLS 버전 tlsVersion에서 추출되었습니다.
type metadata.product_event_type 이벤트 유형입니다. type에서 추출되었습니다.
UA network.http.user_agent 사용자 에이전트 UA에서 추출되었습니다.
version metadata.product_version, principal.asset.software.version 버전 version에서 추출되었습니다.
해당 사항 없음 metadata.event_timestamp 이벤트 타임스탬프는 akamai_lds 로그의 _ts 필드, akamai_siem 로그의 httpMessage.start 필드 또는 다른 형식의 log_date 필드에서 가져옵니다.
해당 사항 없음 metadata.vendor_name 'Akamai'로 하드코딩됨
해당 사항 없음 metadata.product_name 'Kona'로 하드코딩되었습니다.
해당 사항 없음 metadata.log_type 'AKAMAI_WAF'로 하드코딩되었습니다.
해당 사항 없음 network.application_protocol akamai_siem 및 akamai_lds 로그의 경우 'HTTP'로, 다른 형식의 경우 'DNS'로 설정합니다.
해당 사항 없음 security_result.severity '알림' 작업의 경우 MEDIUM, '거부' 작업의 경우 CRITICAL, 기타 작업의 경우 HIGH로 설정합니다.
해당 사항 없음 event.idm.read_only_udm.metadata.event_type 대부분의 로그 형식의 경우 'NETWORK_HTTP', eventId 또는 eventData 필드가 있는 이벤트의 경우 'GENERIC_EVENT', cli_ip 또는 p_ip 필드가 있지만 reqHost 필드가 없는 이벤트의 경우 'STATUS_UPDATE'로 설정합니다.

변경사항

2024-05-21

  • 개선
  • 'rules.data'가 'security_result.detection_fields'에 매핑되었습니다.
  • 'rules.action', 'rules.selector', 'rules.version'이 'security_result.action_details'에 매핑되었습니다.
  • 'rules.id'가 'security_result.rule_id'에 매핑되었습니다.
  • 'rules.tag'가 'security_result.category_details'에 매핑되었습니다.
  • 'rules.message'가 'security_result.threat_name'에 매핑되었습니다.

2024-03-01

  • 개선
  • 'attackData.configId'가 'metadata.product_log_id' 및 'security_result.detection_fields'에 매핑되었습니다.

2023-10-27

  • 개선
  • 'rule.id'가 'security_result.rule_id'에 매핑되었습니다.
  • 'httpMessage.host'가 없는 경우 'metadata.event_type'에 설정된 값을 'NETWORK_HTTP'에서 'GENERIC_EVENT'로 변경했습니다.
  • 'attackData.rules'가 배열인 경우 'attackData'를 파싱하는 지원을 추가했습니다.

2023-04-24

  • 개선
  • CEF 형식으로 처리된 파싱된 로그

2023-04-04

  • 개선
  • 'reqHost'가 'target.hostname'에 매핑되었습니다.
  • 'reqPort'가 'target.port'에 매핑되었습니다.
  • 'reqPath'를 'target.url'에 매핑했습니다.
  • 'reqId'가 'network.session_id'에 매핑되었습니다.
  • 'statusCode'를 'network.http.response_code'에 매핑했습니다.
  • 'reqMethod'가 'network.http.method'에 매핑되었습니다.
  • 'UA'가 'network.http.user_agent'에 매핑되었습니다.
  • 'bytes'가 'network.sent_bytes'에 매핑되었습니다.
  • 'reqMethod'를 'network.http.method'에 매핑했습니다.
  • syslog 형식의 오류 로그를 파싱했습니다.
  • 올바른 파싱을 위해 'attackData.rules'에 대한 조건 검사를 추가했습니다.
  • 가능한 경우 'metadata.event_type'을 'STATUS_UPDATE'에서 'NETWORK_HTTP'로 수정했습니다.

2022-08-12

  • 개선
  • 'security_policy_id'가 security_result.rule_name에 매핑되었습니다.
  • 'non_deny_rules'가 security_result.about.resource.attribute.labels에 매핑되었습니다.
  • 'deny_rule_format'이 security_result.about.resource.attribute.labels에 매핑되었습니다.

2022-11-07

  • 개선
  • 데이터에서도 ['-'] 을 확인하도록 SecurityRules를 업데이트합니다.

2022-06-14

  • 개선
  • security_rules를 security_result.rule_name에 매핑했습니다.
  • 도시를 principal.location.city에 매핑했습니다.
  • 국가가 principal.location.country_or_region에 매핑되었습니다.
  • cli_ip를 principal.ip에 매핑했습니다.
  • state가 target.user.personal_address.state에 매핑되었습니다.
  • 버전을 metadata.product_version에 매핑했습니다.
  • useragent를 network.http.user_agent에 매핑했습니다.

2022-06-14

  • Enhancement-
  • proto를 security_result.summary에 매핑했습니다.
  • securityRules를 security_result.rule_name에 매핑했습니다.
  • 도시를 principal.location.city에 매핑했습니다.
  • 국가가 principal.location.country_or_region에 매핑되었습니다.
  • cliIP를 principal.ip에 매핑했습니다.
  • cp를 event.idm.read_only_udm.additional.fields에 매핑했습니다.
  • reqId가 metadata.product_log_id에 매핑되었습니다.
  • rspContentType이 target.file.mime_type에 매핑되었습니다.
  • state가 target.user.personal_address.state에 매핑되었습니다.
  • 버전을 principal.asset.software.version에 매핑했습니다.

2022-03-23

  • 버그 수정: 모든 일치 패턴으로 데이터를 파싱하지 못하는 문제 수정
  • 새 필드에 대한 매핑이 추가되었습니다.
  • eventId가 metadata.product_log_id에 매핑되었습니다.
  • eventDefinitionId가 target.resource.product_object_id에 매핑되었습니다.
  • eventDescription이 metadata.description에 매핑됨
  • eventName이 metadata.product_event_type에 매핑되었습니다.
  • eventTypeName이 additional.fields에 매핑되었습니다.
  • eventTypeId가 additional.fields에 매핑되었습니다.
  • eventData가 additional.fields에 매핑되었습니다.