일치 섹션 구문
match 섹션은 여러 관련 이벤트를 하나의 감지로 상호 연관시키는 데 필요한 매개변수를 제공합니다. 두 개 이상의 서로 다른 이벤트를 연결하는 규칙에만 필요합니다. 이를 사용하여 다음을 지정하여 이 상관관계의 기준을 정의합니다.
그룹화 필드 (키): 이벤트가 논리적으로 연결되려면 동일한 값을 공유해야 하는 이벤트의 특정 필드 (
events섹션에 정의됨)입니다.시간 제약: 단일 완전한 일치를 구성하기 위해 관련 이벤트가 발생해야 하는 연속된 시간 범위입니다. 이는 규칙에만 필요하며 검색 및 대시보드에는 필요하지 않습니다.
일치 섹션 정의
규칙에는 일치 변수가 event 섹션에 정의된 자리표시자여야 합니다. 검색 및 대시보드에서 event 필드를 지정할 수도 있습니다.
events 섹션에 정의된 자리표시자 변수를 사용하여 이벤트가 발생해야 하는 시간 범위를 지정합니다. 지정된 기간 외에 발생하는 일치하는 이벤트는 해당 감지 그룹에서 무시됩니다.
over 키워드와 <number><m/h/d> 구문 (여기서 m/h/d는 분, 시간, 일)을 사용하여 시간 창을 지정합니다. 최소 1분에서 최대 48시간까지 지정할 수 있습니다.
이 예시 규칙은 10분 이내에 발생하는 로그인 실패를 감지합니다. 단기간에 여러 번의 로그인 실패가 발생하는 것은 무차별 대입 공격 또는 무단 액세스 시도를 나타내는 경우가 많습니다.
rule failed_logins
{
meta:
author = "Security Team"
description = "Detects multiple failed user logins within 10-minute windows."
severity = "HIGH"
events:
$e.metadata.event_type = "USER_LOGIN"
$e.security_result.action = "FAIL"
$user = $e.target.user.userid
match:
$user over 10m
condition:
#e >= 5
}
match 섹션은 10분 간격으로 새 위치에서 로그인에 실패한 사용자를 찾습니다.
match:
$user over 10m
일치 섹션의 0 값
Google SecOps는 match 섹션에 사용된 모든 자리 표시자의 0 값 (문자열의 경우 "", 숫자의 경우 0, 불리언의 경우 false, 열거 유형의 경우 위치 0의 값)을 암시적으로 필터링합니다.
예: 0 값 필터링
다음 예시는 0 값을 필터링하는 쿼리를 보여줍니다.
rule ZeroValuePlaceholderExample {
meta:
events:
// Because $host is used in the match section, the query behaves
// as if the following predicate was added to the events section:
// $host != ""
$host = $e.principal.hostname
// Because $otherPlaceholder was not used in the match,
// there is no implicit filtering of zero values for $otherPlaceholder.
$otherPlaceholder = $e.principal.ip
match:
$host over 5m
condition:
$e
}하지만 자리표시자가 함수에 할당되면 쿼리가 match 섹션에 사용된 자리표시자의 0값을 암시적으로 필터링하지 않습니다.
0값의 암시적 필터링을 사용 중지하려면 옵션 섹션에서 allow_zero_values 옵션을 사용하면 됩니다. allow_zero_values 옵션은 규칙에서만 사용할 수 있습니다.
예: 0 값 허용
다음 예시는 match 섹션에 사용된 자리표시자의 0값을 암시적으로 필터링하지 않는 쿼리를 보여줍니다.
rule ZeroValueFunctionPlaceholder {
meta:
events:
// Even though $ph is used in the match section, there is no
// implicit filtering of zero values for $ph, because $ph is assigned to a function.
$ph = re.capture($e.principal.hostname, "some-regex")
match:
$ph over 5m
condition:
$e
}지원되는 기간
지원되는 다음 창 중 하나를 사용하여 match 섹션의 이벤트 필드와 자리표시자를 지정된 시간 세분성으로 그룹화할 수 있습니다.
- 홉 윈도우 (중복 윈도우)
- 텀블링 윈도우 (중복되지 않는 윈도우)
- 슬라이딩 기간 (피벗으로 생성된 기간)
홉 기간
홉 창은 이벤트가 발생하는 순서와 관계없이 지정된 기간 내에 쿼리의 기준과 일치하는 이벤트를 그룹화하는 다중 이벤트 쿼리 유형입니다. 기본적으로 match 섹션이 있는 YARA-L 쿼리는 홉 기간을 사용하여 시간 경과에 따른 여러 이벤트를 연결합니다. 쿼리 실행 기간은 겹치는 홉 기간 집합으로 분할됩니다. 각각의 홉 기간 집합은 match 섹션에 지정된 기간을 사용합니다. 그런 다음 각 홉 창 내에서 이벤트에 대해 상관관계가 지정됩니다.
예를 들어 [1:00, 2:00] 기간 동안 실행되는 쿼리의 경우 30m 동안 match 섹션을 사용하면 [1:00, 1:30], [1:03, 1:33], [1:06, 1:36]과 같이 겹치는 홉 기간 집합이 생성될 수 있습니다.
이러한 기간은 여러 이벤트를 연결하는 데 사용됩니다.
텀블링 윈도우
텀블링 윈도우는 데이터 스트림을 고정 크기이며 겹치지 않는 연속 시간 간격으로 분할합니다. 각 데이터 이벤트는 하나의 윈도우에만 할당됩니다. 이는 시간 간격이 겹칠 수 있는 슬라이딩 또는 홉 윈도우와 대조됩니다.
예를 들어 30분 텀블링 윈도우를 사용하면 1:00:00~1:29:59 사이에 발생하는 이벤트가 함께 처리됩니다. 그런 다음 1시 30분 00초부터 1시 59분 59초까지의 다음 이벤트 세트가 별도로 처리됩니다.
슬라이딩 기간
특정 상대적 순서로 발생하는 이벤트 (예: e1이 e2 이후 최대 2분 뒤에 발생)를 검색해야 하는 경우 슬라이딩 기간이 매우 효과적입니다. 지정된 피벗 이벤트 변수로 시간 제약이 시작되거나 종료될 때 슬라이딩 기간이 생성됩니다. 이 변수는 특정 피벗 이벤트 변수를 기준으로 이벤트 시퀀스와 타이밍을 동적으로 추적합니다.
그런 후 각 슬라이딩 창 내에서 이벤트에 대해 상관관계가 지정됩니다. 이렇게 하면 e1이 e2에서 최대 2분 후에 발생하는 등 특정 순서로 발생하는 이벤트를 검색하는 것이 가능하게 됩니다. e1 이벤트 발생과 e2 이벤트 발생은 e2 이벤트 후 슬라이딩 기간 내에 e1 이벤트가 발생할 때 상관관계가 지정됩니다.
- 슬라이딩 기간은 피벗 이벤트 변수 (
pivot-event-var)를 기반으로 합니다. before키워드를 사용하여 각 피벗 이벤트가 발생하는 것으로 끝나는 슬라이딩 기간을 생성합니다.after키워드를 사용하여 각 피벗 이벤트가 발생하는 것으로 시작하는 슬라이딩 기간을 생성합니다.
다음과 같이 쿼리의 match 섹션에 슬라이딩 기간을 지정합니다.
<match-var-1>, <match-var-2>, ... over <duration> before|after <pivot-event-var>
다음 예시는 유효한 슬라이딩 기간을 보여줍니다.
$var1, $var2 over 5m after $e1
$user over 1h before $e2
참고:
- 추가 슬라이딩 구간 예시
홉 창 대신 슬라이딩 창을 사용하면 성능이 느려지는 것으로 알려져 있습니다. 이벤트 순서가 절대적으로 필요하거나 부재 이벤트를 검색할 때와 같이 특별한 경우에만 슬라이딩 기간을 사용하는 것이 좋습니다.
슬라이딩 기간은 여러 이벤트를 감지하도록 설계되었으므로 단일 이벤트 쿼리에는 슬라이딩 기간을 사용하지 않는 것이 좋습니다. 대신 다음 해결 방법 중 하나를 사용하세요.
- 여러 이벤트 변수를 사용하도록 쿼리를 변환하고 쿼리에 두 번 이상의 이벤트 발생이 필요한 경우 조건 섹션을 업데이트합니다.
- 필요한 경우 슬라이딩 기간을 사용하는 대신 타임스탬프 필터를 추가할 수 있습니다. 예:
$permission_change.metadata.event_timestamp.seconds < $file_creation.metadata.event_timestamp.seconds - 슬라이딩 기간을 삭제합니다.
다음 단계
추가 정보
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.