이벤트 섹션 문법

다음에서 지원:

events 섹션은 규칙에서 meta 섹션 바로 뒤에 와야 합니다. 쿼리에서 검사해야 하는 이벤트와 잠재적 탐지와 관련이 있는 것으로 간주되기 위해 해당 이벤트가 보유해야 하는 특정 속성을 정의합니다.

events 섹션은 규칙에는 필수이지만 검색 및 대시보드에는 선택사항입니다.

events 섹션을 사용하여 다음을 지정하는 조건자를 나열합니다.

  • 변수 선언
  • 이벤트 변수 필터
  • 이벤트 변수 조인

이벤트 섹션 정의

하나의 이벤트 유형에만 초점을 맞춘 규칙과 쿼리에는 다음과 같은 단일 이벤트 변수가 포함될 수 있습니다.

events:
  $e.metadata.event_type = "USER_LOGIN" // 'e' is the common convention for a single event

두 개 이상의 서로 다른 이벤트 유형 (예: 사용자 로그인 후 파일 수정) 간의 상관관계가 필요한 규칙 및 쿼리에는 각 이벤트 유형의 변수가 필요합니다.

events:
  $login.metadata.event_type = "USER_LOGIN" // Event 1: User Login
  $file_op.metadata.event_type = "FILE_MODIFICATION" // Event 2: File Modification

이벤트 변수가 선언되면 이를 접두사로 사용하여 해당 이벤트 유형의 특정 필드에 액세스합니다. 예를 들어 다음 event 섹션은 Okta의 로그인 실패 이벤트를 필터링합니다.

events:
   $e.metadata.vendor_name = "Okta"
   $e.metadata.event_type = "USER_LOGIN"
   $e.security_result.action = "FAIL"

변수 선언

변수 선언의 경우 다음 문법을 사용합니다.

  • <EVENT_FIELD> = <VAR>
  • <VAR> = <EVENT_FIELD>

다음 예시에 표시된 것처럼 두 항목은 서로 동일합니다.

  • $e.source.hostname = $hostname
  • $userid = $e.principal.user.userid

이 선언에서 이 변수는 이벤트 변수에 대해 지정된 필드를 나타냅니다. 이벤트 필드가 반복되는 필드이면 match 변수가 해당 배열의 임의 값을 나타낼 수 있습니다. 단일 일치 또는 자리표시자 변수에 여러 이벤트 필드를 지정할 수도 있습니다. 이를 전이적 조인 조건이라고 합니다.

예를 들면 다음과 같습니다.

  • $e1.source.ip = $ip
  • $e2.target.ip = $ip

위 문법은 아래 문법과 동일합니다.

  • $e1.source.ip = $ip
  • $e1.source.ip = $e2.target.ip

변수가 사용된 경우 변수 선언을 통해 변수를 선언해야 합니다. 선언 없이 변수가 사용되면 컴파일 오류가 발생합니다.

변수에 대한 자세한 내용은 표현식, 연산자, 기타 구조를 참고하세요.

이벤트 변수 필터

단일 이벤트 변수에서 작동하는 불리언 표현식은 필터로 간주됩니다.

이벤트 변수 조인

규칙에서 사용되는 모든 이벤트 변수는 다음 방법 중 하나로 다른 모든 이벤트 변수와 조인해야 합니다.

  • 조인된 두 이벤트 변수(예: $e1.field = $e2.field)의 이벤트 필드 간에 동등 비교를 통해 직접 조인해야 합니다. 표현식에는 산술 연산 (예: $\text{+, -, *, /}$)이 포함되어서는 안 됩니다.

  • 이벤트 필드만 포함된 전이적 조인을 통해 간접적으로 조인해야 합니다('전이적 조인'의 정의는 변수 선언 참조). 표현식에 산술이 포함되어서는 안 됩니다.

예를 들어 $e1, $e2, $e3이 규칙에 사용된다고 가정하면 다음 events 섹션이 유효합니다.

events:
  $e1.principal.hostname = $e2.src.hostname // $e1 joins with $e2
  $e2.principal.ip = $e3.src.ip // $e2 joins with $e3
events:
  // $e1 joins with $e2 using function to event comparison
  re.capture($e1.src.hostname, ".*") = $e2.target.hostname
events:
  // $e1 joins with $e2 using an `or` expression
  $e1.principal.hostname = $e2.src.hostname
  or $e1.principal.hostname = $e2.target.hostname
  or $e1.principal.hostname = $e2.principal.hostname
events:
  // all of $e1, $e2 and $e3 are transitively joined using the placeholder variable $ip
  $e1.src.ip = $ip
  $e2.target.ip = $ip
  $e3.about.ip = $ip
events:
  // $e1 and $e2 are transitively joined using function to event comparison
  re.capture($e2.principal.application, ".*") = $app
  $e1.principal.hostname = $app

하지만 다음 예시는 잘못된 events 섹션을 보여줍니다.

events:
  // Event to arithmetic comparison is an invalid join condition for $e1 and $e2.
  $e1.principal.port = $e2.src.port + 1
events:
  $e1.src.ip = $ip
  $e2.target.ip = $ip
  $e3.about.ip = "192.1.2.0" //$e3 is not joined with $e1 or $e2.
events:
  $e1.src.port = $port

  // Arithmetic to placeholder comparison is an invalid transitive join condition.
  $e2.principal.port + 800 = $port

다음 단계

추가 정보

도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.