함수

다음에서 지원:

이 섹션에서는 규칙, 검색, 대시보드 쿼리에서 사용할 수 있는 YARA-L 2.0 함수를 설명합니다.

대시보드를 위한 YARA-L 2.0 함수YARA-L 2.0을 사용한 검색의 통계 및 집계도 참고하세요.

이러한 함수는 YARA-L 쿼리의 다음 부분에서 사용할 수 있습니다.

arrays.concat

다음에서 지원:
arrays.concat(string_array, string_array)

설명

원본 문자열 배열에서 요소를 복사하여 새 문자열 배열을 반환합니다.

매개변수 데이터 유형

ARRAY_STRINGS, ARRAY_STRINGS

반환 유형

ARRAY_STRINGS

코드 샘플

예 1

다음 예시에서는 서로 다른 두 문자열 배열을 연결합니다.

arrays.concat(["test1", "test2"], ["test3"]) = ["test1", "test2", "test3"]
예 2

다음 예시에서는 빈 문자열로 배열을 연결합니다.

arrays.concat([""], [""]) = ["", ""]
예시 3

다음 예시에서는 빈 배열을 연결합니다.

arrays.concat([], []) = []

arrays.index_to_float

다음에서 지원:
arrays.index_to_float(array, index)

설명

배열의 지정된 색인에 있는 요소를 반환합니다. 해당 색인의 요소가 float로 반환됩니다.

색인은 배열에서 요소의 위치를 나타내는 정수 값입니다. 기본적으로 배열의 첫 번째 요소는 색인이 0이고 마지막 요소는 색인이 n-1입니다. 여기서 n은 배열의 크기입니다. 음수 색인을 사용하면 배열 끝을 기준으로 배열 요소에 액세스할 수 있습니다. 예를 들어 색인 -1은 배열의 마지막 요소를 참조하고 색인 -2는 배열의 마지막에서 두 번째 요소를 참조합니다.

매개변수 데이터 유형

ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT

반환 유형

FLOAT

코드 샘플

예 1

다음 예시에서는 부동 소수점 배열에서 색인 1의 요소를 가져옵니다.

arrays.index_to_float([1.2, 2.1, 3.5, 4.6], 1) // 2.1
예 2

다음 예시에서는 부동 소수점 배열에서 색인 -1의 요소를 가져옵니다.

arrays.index_to_float([1.2, 2.1, 3.5, 4.6], 0-1) // 4.6
예시 3

다음 예시에서는 배열 크기보다 큰 색인의 요소를 가져옵니다.

arrays.index_to_float([1.2, 2.1, 3.5, 4.6], 6) // 0.0
예 4

다음 예시에서는 빈 배열에서 요소를 가져옵니다.

arrays.index_to_float([], 0) // 0.0
예시 5

다음 예시에서는 문자열 배열에서 색인 1의 요소를 가져옵니다.

arrays.index_to_float(["1.2", "3.3", "2.4"], 1) // 3.3
예시 6

다음 예시에서는 정수 배열에서 색인 2의 요소를 가져옵니다.

arrays.index_to_float([1, 3, 2], 2) // 2.0

arrays.index_to_int

다음에서 지원:
arrays.index_to_int(array_of_inputs, index)

설명

배열에서 지정된 색인의 값을 정수로 반환합니다.

색인은 배열에서 요소의 위치를 나타내는 정수 값입니다. 기본적으로 배열의 첫 번째 요소는 색인이 0이고 마지막 요소는 색인이 n-1입니다. 여기서 n은 배열의 크기입니다. 음수 색인을 사용하면 배열 끝을 기준으로 배열 요소에 액세스할 수 있습니다. 예를 들어 색인 -1은 배열의 마지막 요소를 참조하고 색인 -2는 배열의 마지막에서 두 번째 요소를 참조합니다.

매개변수 데이터 유형

ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT

반환 유형

INT

코드 샘플

예 1

이 함수 호출은 색인의 값이 숫자가 아닌 문자열인 경우에 0을 반환합니다.

arrays.index_to_int(["str0", "str1", "str2"], 1) = 0
예 2

이 함수는 색인 -1의 요소를 반환합니다.

arrays.index_to_int(["44", "11", "22", "33"], 0-1) = 33
예시 3

범위를 벗어난 요소에는 0을 반환합니다.

arrays.index_to_int(["44", "11", "22", "33"], 5) = 0
예 4

이 함수는 색인 1의 부동 소수점 배열에서 요소를 가져옵니다.

arrays.index_to_int([1.100000, 1.200000, 1.300000], 1) = 1
예시 5

이 함수는 색인 0의 정수 배열에서 요소를 가져옵니다.

arrays.index_to_int([1, 2, 3], 0) = 1

arrays.index_to_str

다음에서 지원:
arrays.index_to_str(array, index)

설명

배열에서 지정된 색인의 요소를 문자열로 반환합니다. 색인은 배열의 요소 위치를 나타내는 정수 값입니다. 기본적으로 배열의 첫 번째 요소는 색인이 0이고 마지막 요소는 색인이 n-1입니다. 여기서 n은 배열의 크기입니다. 음수 색인을 사용하면 배열의 끝에서 배열 요소에 액세스할 수 있습니다. 예를 들어 색인 -1은 배열의 마지막 요소를 참조하고 색인 -2는 배열의 마지막에서 두 번째 요소를 참조합니다.

매개변수 데이터 유형

ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT

반환 유형

STRING

코드 샘플

예 1

다음 예시에서는 문자열 배열에서 색인 1의 요소를 가져옵니다.

arrays.index_to_str(["test1", "test2", "test3", "test4"], 1) // "test2"
예 2

다음 예시에서는 문자열 배열에서 색인 -1 (배열의 마지막 요소)의 요소를 가져옵니다.

arrays.index_to_str(["test1", "test2", "test3", "test4"], 0-1) // "test4"
예시 3

다음 예시에서는 배열 크기보다 큰 색인의 요소를 가져오므로 빈 문자열이 반환됩니다.

arrays.index_to_str(["test1", "test2", "test3", "test4"], 6) // ""
예 4

다음 예시에서는 빈 배열에서 요소를 가져옵니다.

arrays.index_to_str([], 0) // ""
예시 5

다음 예시에서는 부동 소수점 배열에서 색인 0의 요소를 가져옵니다. 출력은 문자열로 반환됩니다.

arrays.index_to_str([1.200000, 3.300000, 2.400000], 0) // "1.2"
예시 6

다음 예시에서는 정수 배열에서 색인 2의 요소를 가져옵니다. 출력은 문자열 형식입니다.

arrays.index_to_str([1, 3, 2], 2) // "2"

arrays.join_string

다음에서 지원:
arrays.join_string(array_of_strings, optional_delimiter)

설명

문자열 배열을 선택적 매개변수로 구분된 단일 문자열로 변환합니다. 구분 기호가 제공되지 않으면 빈 문자열이 사용됩니다.

매개변수 데이터 유형

ARRAY_STRINGS, STRING

반환 유형

STRING

코드 샘플

다음은 이 함수를 사용하는 방법에 대한 몇 가지 예시입니다.

예 1

이 예시에서는 null이 아닌 요소와 구분 기호가 있는 배열을 조인합니다.

arrays.join_string(["foo", "bar"], ",") = "foo,bar"
예 2

이 예시에서는 null 요소와 구분 기호로 배열을 조인합니다.

arrays.join_string(["foo", NULL, "bar"], ",") = "foo,bar"
예시 3

이 예시에서는 null이 아닌 요소가 있고 구분 기호가 없는 배열을 결합합니다.

arrays.join_string(["foo", "bar"]) = "foobar"

arrays.length

다음에서 지원:
arrays.length(repeatedField)

설명

반복 필드 요소의 수를 반환합니다.

매개변수 데이터 유형

LIST

반환 유형

NUMBER

코드 샘플

예 1

반복 필드 요소의 수를 반환합니다.

arrays.length($e.principal.ip) = 2
예 2

경로를 따라 반복 필드가 여러 개 있으면 반복 필드 요소의 총 개수를 반환합니다.

arrays.length($e.intermediary.ip) = 3

arrays.max

다음에서 지원:
arrays.max(array_of_ints_or_floats)

설명

배열의 최대 요소를 반환하거나 배열이 비어 있으면 0을 반환합니다.

매개변수 데이터 유형

ARRAY_INTS|ARRAY_FLOATS

반환 유형

FLOAT

코드 샘플

다음은 이 함수를 사용하는 방법에 대한 몇 가지 예시입니다.

예 1

이 예시에서는 정수 배열에서 더 큰 요소를 반환합니다.

arrays.max([10, 20]) = 20.000000
예 2

이 예시에서는 부동 소수점 배열에서 더 큰 요소를 반환합니다.

arrays.max([10.000000, 20.000000]) = 20.000000

arrays.min

다음에서 지원:
arrays.min(array_of_ints_or_floats[, ignore_zeros=false])

설명

배열에서 가장 작은 요소를 반환하거나 배열이 비어 있으면 0을 반환합니다. 선택사항인 두 번째 인수를 true로 설정하면 0과 같은 요소는 무시됩니다.

매개변수 데이터 유형

ARRAY_INTS|ARRAY_FLOATS, BOOL

반환 유형

FLOAT

코드 샘플

다음은 이 함수를 사용하는 방법에 대한 몇 가지 예시입니다.

예 1

이 예시에서는 정수 배열에서 가장 작은 요소를 반환합니다.

arrays.min([10, 20]) = 10.000000
예 2

이 예시에서는 부동 소수점 배열에서 가장 작은 요소를 반환합니다.

arrays.min([10.000000, 20.000000]) = 10.000000
예시 3

이 예시에서는 0을 무시하면서 부동 소수점 배열에서 가장 작은 요소를 반환합니다.

arrays.min([10.000000, 20.000000, 0.0], true) = 10.000000

arrays.size

다음에서 지원:
arrays.size( array )

설명

배열의 크기를 반환합니다. 빈 배열에는 0을 반환합니다.

매개변수 데이터 유형

ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS

반환 유형

INT

코드 샘플

예 1

이 예에서는 두 요소를 포함하는 문자열 배열을 사용합니다.

arrays.size(["test1", "test2"]) = 2
예 2

이 예에서는 3개의 요소를 포함하는 int 배열을 사용합니다.

arrays.size([1, 2, 3]) = 3
예시 3

이 예에서는 요소 1개를 포함하는 부동 소수점 배열을 사용합니다.

arrays.size([1.200000]) = 1
예 4

이 예시에서는 빈 배열을 사용합니다.

arrays.size([]) = 0

bytes.to_base64

다음에서 지원:
bytes.to_base64(bytes, optional_default_string)

설명

함수는 bytes 값을 base64 encoded string로 변환합니다. 캐스팅할 수 없는 값이 있는 함수 호출은 기본적으로 빈 문자열을 반환합니다.

매개변수 데이터 유형

BYTES, STRING

반환 유형

STRING

코드 샘플

원시 바이너리 바이트를 Base64로 인코딩된 문자열로 변환

이 함수는 원시 바이너리 바이트를 base64로 인코딩된 문자열로 변환합니다.

bytes.to_base64(b'000000006f8ec5586d026f9ddac56e9f2fe15b8a0000000001000000cd000000) = "AAAAAG+OxVhtAm+d2sVuny/hW4oAAAAAAQAAAM0AAAA="
실패한 전환 (선택적으로 제공된 문자열이 기본값임)

제공된 바이트 값이 유효하지 않으면 함수는 기본적으로 "invalid bytes"로 설정됩니다.

bytes.to_base64(b'000000006f8ec5586d", "invalid bytes") = "invalid bytes"

cast.as_bool

다음에서 지원:
cast.as_bool(string_or_int)

설명

함수는 int 또는 문자열 값을 부울 값으로 변환합니다. 캐스팅할 수 없는 값이 있는 함수 호출은 FALSE를 반환합니다. 정수 1과 대소문자를 구분하지 않는 문자열 'true'에 대해서만 TRUE를 반환합니다.

매개변수 데이터 유형

INT|STRING

반환 유형

BOOL

코드 샘플

예 1

이 예시에서는 불리언이 아닌 문자열을 변환하는 방법을 보여줍니다.

cast.as_bool("123") = false
예 2

참 정수(1)

cast.as_bool(1) = true
예시 3

Truthy 문자열

cast.as_bool("true") = true
예 4

대문자 참 문자열

cast.as_bool("TRUE") = true
예시 5

음수 정수

cast.as_bool(0-1) = false
예시 6

거짓 정수(0)

cast.as_bool(0) = false
예시 7

빈 문자열

cast.as_bool("") = false

cast.as_float

다음에서 지원:
cast.as_float(string_to_cast)

설명

숫자 문자열을 부동 소수점 수로 변환합니다. 캐스팅할 수 없는 값이 있는 함수 호출은 0을 반환합니다. 부동 소수점은 소수점 이하 7자리까지 정밀도를 유지합니다.

매개변수 데이터 유형

STRING

반환 유형

FLOAT

코드 샘플

예 1

숫자가 아닌 문자열을 변환하면 0이 반환됩니다.

cast.as_float("str") = 0.0000000
예 2

빈 문자열을 캐스팅하면 0이 반환됩니다.

cast.as_float("") = 0.0000000
예시 3

유효한 숫자 문자열을 캐스팅하면 부동 소수점 값이 반환됩니다.

cast.as_float("1.012345678") = 1.0123456

cast.as_string

다음에서 지원:
cast.as_string(int_or_bytes_or_bool, optional_default_string)

설명

cast.as_string 함수는 INT, BYTES 또는 BOOL 값을 문자열 표현으로 변환합니다. 선택적 default_string 인수를 제공하여 전송이 실패하는 경우를 처리할 수 있습니다. default_string 인수를 생략하거나 입력이 잘못된 UTF-8 또는 BASE64 바이트 시퀀스인 경우 함수는 빈 문자열을 반환합니다.

매개변수 데이터 유형

INT|BYTES|BOOL, STRING

반환 유형

STRING

코드 샘플

정수에서 문자열로 변환

이 함수는 정수 123를 문자열 "123"로 변환합니다.

cast.as_string(123) = "123"
부동 소수점-문자열 변환

이 함수는 부동 소수점 수 2.25를 문자열 "2.25"로 변환합니다.

cast.as_string(2.25) = "2.25"
바이트를 문자열로 변환

이 함수는 원시 바이너리 b'01를 문자열 "\x01"로 변환합니다.

cast.as_string(b'01, "") = "\x01"
불리언을 문자열로 변환

이 함수는 불리언 true를 문자열 "true"로 변환합니다.

cast.as_string(true, "") = "true"
실패한 전환 (선택적으로 제공된 문자열이 기본값임)

제공된 값이 잘못된 경우 함수는 기본적으로 "casting error" 문자열을 사용합니다.

cast.as_string(9223372036854775808, "casting error") = "casting error"

디지털 지문

다음에서 지원:
hash.fingerprint2011(byteOrString)

설명

이 함수는 입력 바이트 시퀀스 또는 문자열의 fingerprint2011 해시를 계산합니다. 이 함수는 [2, 0xFFFFFFFFFFFFFFFF] 범위의 부호 없는 INT 값을 반환합니다.

매개변수 데이터 유형

BTYE, STRING

반환 유형

INT

코드 샘플

id_fingerprint = hash.fingerprint2011("user123")

그룹

다음에서 지원:
group(field1, field2, field3, ...)

설명

유사한 유형의 필드를 자리표시자 변수로 그룹화합니다.

UDM 검색에서 그룹화된 필드는 비슷한 유형의 여러 필드를 검색하는 데 사용됩니다. 그룹 함수는 감지를 트리거하기 위해 함께 그룹화할 필드를 선택할 수 있다는 점을 제외하면 그룹화된 필드와 유사합니다. 그룹 함수를 사용하여 여러 명사 유형에서 특정 항목(예: 호스트 이름, IP 주소 또는 userid)에 대한 정보를 수집할 수 있습니다.

코드 샘플

예시 1

모든 IP 주소를 함께 그룹화하고 스캔된 기간 동안 가장 많이 사용되는 IP 주소의 개수를 내림차순으로 제공합니다.

$ip = group(principal.ip, about.ip, target.ip)
$ip != ""
match:
  $ip
outcome:
  $count = count_distinct(metadata.id)
order:
  $count desc

hash.sha256

다음에서 지원:
hash.sha256(string)

설명

입력 문자열의 SHA-256 해시를 반환합니다.

매개변수 데이터 유형

STRING

반환 유형

STRING

코드 샘플

예 1

이 예에서는 입력이 유효한 문자열인 경우의 SHA-256 해시를 보여줍니다.

hash.sha256("str") = "8c25cb3686462e9a86d2883c5688a22fe738b0bbc85f458d2d2b5f3f667c6d5a"
예 2

이 예에서는 입력이 빈 문자열일 때의 SHA-256 해시를 보여줍니다.

hash.sha256("") = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"

math.abs

다음에서 지원:
math.abs(numericExpression)

설명

정수 또는 부동 소수점 표현식의 절댓값을 반환합니다.

매개변수 데이터 유형

NUMBER

반환 유형

NUMBER

코드 샘플

예 1

이 예시는 이벤트가 지정된 시간 전후에 발생했는지 여부에 관계없이 이벤트가 지정된 시간부터 5분을 초과하면(초 단위, 유닉스 시간 기준) True를 반환합니다. math.abs 호출은 여러 변수나 자리표시자에 따라 달라질 수 없습니다. 예를 들어 다음 예시에서 하드코딩된 시간 값 1643687343을 $e2.metadata.event_timestamp.seconds로 바꿀 수 없습니다.

300 < math.abs($e1.metadata.event_timestamp.seconds - 1643687343)

math.ceil

다음에서 지원:
math.ceil(number)

설명

제공된 숫자보다 작지 않은 가장 작은 정수를 반환합니다 (올림). 입력이 null이거나 int64에 맞지 않을 만큼 큰 경우에는 0을 반환합니다.

매개변수 데이터 유형

FLOAT

반환 유형

INT

코드 샘플

이 섹션에는 math.ceil 사용 예가 포함되어 있습니다.

예 1

이 예시에서는 정수의 올림을 반환합니다.

math.ceil(2.000000) = 2
예 2

이 예시에서는 음수의 올림을 반환합니다.

math.ceil(0-1.200000) = -1
예시 3

이 예에서는 64비트 정수보다 큰 숫자의 올림으로 0을 반환합니다.

math.ceil(184467440737095516160.0) = 0

math.floor

다음에서 지원:
math.floor(float_val)

설명

제공된 값보다 크지 않은 가장 큰 정수 값을 반환합니다(내림). 입력이 null이거나 int64에 맞지 않을 만큼 큰 경우에는 0을 반환합니다.

매개변수 데이터 유형

FLOAT

반환 유형

INT

코드 샘플

예 1

이 예시에서는 양수 사례를 보여줍니다.

math.floor(1.234568) = 1
예 2

이 예시에서는 음수 사례를 보여줍니다.

math.floor(0-1.234568) = -2
예시 3

이 예시에서는 0 사례를 보여줍니다.

math.floor(0.000000) = 0

math.geo_distance

다음에서 지원:
math.geo_distance(longitude1, latitude1, longitude2, latitude2))

설명

두 지리적 위치 (좌표) 간의 거리를 미터 단위로 반환합니다. 좌표가 잘못된 경우 -1을 반환합니다.

매개변수 데이터 유형

FLOAT, FLOAT, FLOAT, FLOAT

반환 유형

FLOAT

코드 샘플

예 1

다음 예시에서는 모든 매개변수가 유효한 좌표인 경우 거리를 반환합니다.

math.geo_distance(-122.020287, 37.407574, -122.021810, 37.407574) = 134.564318
예 2

다음 예시에서는 파라미터 중 하나가 잘린 좌표인 경우에 거리를 반환합니다.

math.geo_distance(-122.000000, 37.407574, -122.021810, 37.407574) = 1926.421905
예시 3

다음 예시에서는 파라미터 중 하나가 잘못된 좌표인 경우 -1를 반환합니다.

math.geo_distance(0-122.897680, 37.407574, 0-122.021810, 97.407574) = -1.000000
예 4

다음 예시에서는 좌표가 같으면 0를 반환합니다.

math.geo_distance(-122.897680, 37.407574, -122.897680, 37.407574) = 0.000000

math.is_increasing

다음에서 지원:
math.is_increasing(num1, num2, num3)

설명

숫자 값(정수 또는 배수) 목록을 사용하고 값이 오름차순이면 True를, 그렇지 않으면 False를 반환합니다.

매개변수 데이터 유형

INT|FLOAT, INT|FLOAT, INT|FLOAT

반환 유형

BOOL

코드 샘플

예 1

이 예시에는 타임스탬프와 유사한 값(단위: 초)이 포함되어 있습니다.

math.is_increasing(1716769112, 1716769113, 1716769114) = true
예 2

이 예시에는 음수 실수 값 1개, 0 INT64 값 1개, 양수 INT64 값 1개가 포함되어 있습니다.

math.is_increasing(-1.200000, 0, 3) = true
예시 3

이 예시에는 음수 실수 값 1개, 0 INT64 값 1개, 음수 INT64 값 1개가 포함되어 있습니다.

math.is_increasing(0-1.200000, 0, 0-3) = false
예 4

이 예시에는 음수 실수 값 2개와 0 INT64 값 1개가 포함되어 있습니다.

math.is_increasing(0-1.200000, 0-1.50000, 0) = false
예시 5

이 예시에는 음수 실수 값 1개와 동일한 값 2개가 포함되어 있습니다.

math.is_increasing(0-1.200000, 0, 0) = false

math.log

다음에서 지원:
math.log(numericExpression)

설명

정수 또는 부동 소수점 표현식의 자연 로그 값을 반환합니다.

매개변수 데이터 유형

NUMBER

반환 유형

NUMBER

코드 샘플

예 1
math.log($e1.network.sent_bytes) > 20

math.pow

다음에서 지원:
math.pow(base, exponent)

설명

첫 번째 인수 값을 두 번째 인수의 거듭제곱으로 곱한 값을 반환합니다. 오버플로의 경우 0을 반환합니다.

매개변수 데이터 유형

기수: INT|FLOAT 지수: INT|FLOAT

반환 유형

FLOAT

코드 샘플

예 1

이 예시에서는 정수 사례를 보여줍니다.

math.pow(2, 2) // 4.00
예 2

이 예시는 분수 기수 사례를 보여줍니다.

math.pow(2.200000, 3) // 10.648
예시 3

이 예시에서는 분수 기수와 거듭제곱 사례를 보여줍니다.

math.pow(2.200000, 1.200000) // 2.575771
예 4

이 예시에서는 음수 거듭제곱 사례를 보여줍니다.

math.pow(3, 0-3) // 0.037037
예시 5

이 예시에서는 분수 거듭제곱 사례를 보여줍니다.

math.pow(3, 0-1.200000) // 0.267581
예시 6

이 예시에서는 음수 기수 사례를 보여줍니다.

math.pow(0-3, 0-3) // -0.037037
예시 7

이 예시에서는 0 기수 사례를 보여줍니다.

math.pow(0, 3) // 0
예시 8

이 예시에서는 0 거듭제곱 사례를 보여줍니다.

math.pow(9223372036854775807, 0) // 1
예시 9

이 예시에서는 큰 기수 사례를 보여줍니다.

math.pow(9223372036854775807, 1.200000) // 57262152889751593549824

math.random

다음에서 지원:
math.random()

설명

0을 포함하고 1을 제외하는 [0, 1) 범위에 있는 실수 유형의 의사 난수 값을 생성합니다.

반환 유형

FLOAT

코드 샘플

다음 예시에서는 난수 값이 [0, 1) 범위 내에 있는지 확인합니다. none if(math.random() >= 0 and math.random() < 1) = true

math.round

다음에서 지원:
math.round(numericExpression, decimalPlaces)

설명

가장 가까운 정수 또는 지정된 소수점 이하 자릿수로 반올림된 값을 반환합니다.

매개변수 데이터 유형

NUMBER

반환 유형

NUMBER

코드 샘플

math.round(10.7) // returns 11
math.round(1.2567, 2) // returns 1.25
math.round(0-10.7) // returns -11
math.round(0-1.2) // returns -1
math.round(4) // returns 4, math.round(integer) returns the integer

math.sqrt

다음에서 지원:
math.sqrt(number)

설명

주어진 숫자의 제곱근을 반환합니다. 음수의 경우 0을 반환합니다.

매개변수 데이터 유형

INT|FLOAT

반환 유형

FLOAT

코드 샘플

예 1

이 예시에서는 int 인수의 제곱근을 반환합니다.

math.sqrt(3) = 1.732051
예 2

이 예시에서는 음수 int 인수의 제곱근을 반환합니다.

math.sqrt(-3) = 0.000000
예시 3

이 예시에서는 0 인수 제곱근을 반환합니다.

math.sqrt(0) = 0.000000
예 4

이 예시에서는 부동 소수점 인수의 제곱근을 반환합니다.

math.sqrt(9.223372) = 3.037000
예시 5

이 예시에서는 음수 부동 소수점 인수의 제곱근을 반환합니다.

math.sqrt(0-1.200000) = 0.000000

측정항목

다음에서 지원:

측정항목 함수는 대량의 과거 데이터를 집계할 수 있습니다. 결과 섹션에서 metrics.functionName()을 사용하여 규칙에 이를 사용할 수 있습니다.

자세한 내용은 YARA-L 측정항목을 참조하세요.

net.ip_in_range_cidr

다음에서 지원:
net.ip_in_range_cidr(ipAddress, subnetworkRange)

설명

제공된 IP 주소가 지정된 서브네트워크 내에 있으면 true를 반환합니다.

YARA-L을 사용하면 net.ip_in_range_cidr() 문을 사용하여 서브네트워크 내에서 모든 IP 주소로 UDM 이벤트를 검색할 수 있습니다. IPv4 및 IPv6 모두 지원됩니다.

IP 주소 범위로 검색하려면 IP UDM 필드와 CIDR 범위를 지정합니다. YARA-L은 단일 및 반복되는 IP 주소 필드를 모두 처리할 수 있습니다.

IP 주소 범위로 검색하려면 ip UDM 필드와 클래스 없는 도메인 간 라우팅(CIDR) 범위를 지정합니다. YARA-L은 단일 및 반복되는 IP 주소 필드를 모두 처리할 수 있습니다.

매개변수 데이터 유형

STRING, STRING

반환 유형

BOOL

코드 샘플

예 1

IPv4 예시:

net.ip_in_range_cidr($e.principal.ip, "192.0.2.0/24")
예 2

IPv6 예시:

net.ip_in_range_cidr($e.network.dhcp.yiaddr, "2001:db8::/32")

net.ip_in_range_cidr() 문을 사용하는 예시 규칙은 IP 주소 범위 내의 단일 이벤트의 예시 규칙을 참조하세요.

re.regex

다음에서 지원:

다음 문법 중 하나를 사용하여 YARA-L 2.0에서 정규 표현식 일치를 정의할 수 있습니다.

  • YARA 문법 사용–이벤트와 관련되어 있습니다. 다음은 이 문법의 일반적인 표현입니다.

    $e.field = /regex/
    
  • YARA-L 문법 사용–다음 문법에서 함수로 사용됩니다.

    • 정규 표현식이 적용되는 필드입니다.
    • 문자열로 지정된 정규 표현식입니다.

    다음은 이 문법의 일반적인 표현입니다.

    re.regex($e.field, `regex`)
    

설명

이 함수는 문자열에 제공된 정규 표현식과 일치하는 하위 문자열이 포함되면 true를 반환합니다. 정규 표현식의 시작 또는 끝 부분에 .*를 추가할 필요는 없습니다.

참고
  • 정확한 문자열 또는 프리픽스나 서픽스만 일치하는 항목을 찾으려면 정규 표현식에 ^(시작) 및 $(종료) 앵커 문자를 포함하세요. 예를 들어 /^full$/"full"과 정확하게 일치하지만 /full/"fullest", "lawfull", "joyfully"와 일치할 수 있습니다.
  • UDM 필드에 줄바꿈 문자가 포함되면 regexp는 UDM 필드의 첫 번째 줄만 일치합니다. 전체 UDM 필드 일치를 적용하려면 (?s)를 정규 표현식에 추가합니다. 예를 들어 /.*allUDM.*//(?s).*allUDM.*/으로 바꿉니다.
  • 문자열 다음에 nocase 한정자를 사용하여 검색 시 대소문자를 무시하도록 지정할 수 있습니다.

매개변수 데이터 유형

STRING, STRING

매개변수 표현식 유형

ANY, ANY

반환 유형

BOOL

코드 샘플

예 1
// Equivalent to $e.principal.hostname = /google/
re.regex($e.principal.hostname, "google")

re.capture

다음에서 지원:
re.capture(stringText, regex)

설명

인수에 제공된 정규 표현식 패턴을 사용하여 문자열에서 데이터를 캡처(추출)합니다.

이 함수에는 두 개의 인수가 사용됩니다.

  • stringText: 검색할 원래 문자열입니다.
  • regex: 검색할 패턴을 나타내는 정규 표현식입니다.

정규 표현식은 0 또는 1 캡처 그룹을 괄호로 포함할 수 있습니다. 정규 표현식에 0 캡처 그룹이 포함된 경우 함수가 첫 번째 전체 일치 하위 문자열을 반환합니다. 정규 표현식에 1 캡처 그룹이 포함된 경우 캡처 그룹의 첫 번째 일치 하위 문자열을 반환합니다. 캡처 그룹을 2개 이상 정의하면 컴파일 오류가 반환됩니다.

매개변수 데이터 유형

STRING, STRING

반환 유형

STRING

코드 샘플

예 1

이 예시에서 $e.principal.hostname에 'aaa1bbaa2'가 포함되면 함수가 첫 번째 인스턴스를 반환하므로 다음이 True입니다. 이 예시에는 캡처 그룹이 없습니다.

"aaa1" = re.capture($e.principal.hostname, "a+[1-9]")
예 2

이 예시에서는 이메일에서 @ 기호 다음에 있는 모든 내용을 캡처합니다. $e.network.email.from 필드가 test@google.com이면 예시에서 google.com을 반환합니다. 다음 예시에는 캡처 그룹 하나가 포함되어 있습니다.

"google.com" = re.capture($e.network.email.from , "@(.*)")
예 3

정규 표현식이 텍스트의 하위 문자열과 일치하지 않으면 함수는 빈 문자열을 반환합니다. 빈 문자열을 제외하여 일치하는 항목이 없는 이벤트를 생략할 수 있습니다. 이는 re.capture()를 불일치로 사용하는 경우에 특히 중요합니다.

// Exclude the empty string to omit events where no match occurs.
"" != re.capture($e.network.email.from , "@(.*)")

// Exclude a specific string with an inequality.
"google.com" != re.capture($e.network.email.from , "@(.*)")

re.replace

다음에서 지원:
re.replace(stringText, replaceRegex, replacementText)

설명

정규 표현식 교체를 수행합니다.

이 함수에는 3개의 인수가 있습니다.

  • stringText: 원래 문자열입니다.
  • replaceRegex: 검색할 패턴을 나타내는 정규 표현식입니다.
  • replacementText: 각 일치 항목에 삽입할 텍스트입니다.

원래 stringText에서 파생된 새 문자열을 반환합니다. 여기서 replaceRegex의 패턴과 일치하는 모든 하위 문자열은 replacementText의 값으로 바뀝니다. replacementText 내에 백슬래시로 이스케이프 처리된 숫자(\1~\9)를 사용하여 replaceRegex 패턴에서 괄호로 묶인 해당 그룹과 일치하는 텍스트를 삽입할 수 있습니다. 전체 일치 텍스트를 나타내려면 \0을 사용합니다.

이 함수는 겹치지 않는 일치 항목을 교체하며 발견된 첫 번째 일치 항목을 교체하는 데 우선순위를 둡니다. 예를 들어 re.replace("banana", "ana", "111")는 'b111na' 문자열을 반환합니다.

매개변수 데이터 유형

STRING, STRING, STRING

반환 유형

STRING

코드 샘플

예 1

이 예시에서는 이메일에서 @ 기호 다음에 있는 모든 것을 캡처하고 comorg로 바꾼 후 해당 결과를 반환합니다. 중첩 함수 사용을 확인하세요.

"email@google.org" = re.replace($e.network.email.from, "com", "org")
예 2

이 예시에서는 replacementText 인수에 백슬래시로 이스케이프 처리된 숫자를 사용하여 replaceRegex 패턴과의 일치 항목을 참조합니다.

"test1.com.google" = re.replace(
                       $e.principal.hostname, // holds "test1.test2.google.com"
                       "test2\.([a-z]*)\.([a-z]*)",
                       "\\2.\\1"  // \\1 holds "google", \\2 holds "com"
                     )
예 3

빈 문자열과 re.replace()를 처리할 때는 다음 사례에 유의하세요.

빈 문자열을 replaceRegex로 사용:

// In the function call below, if $e.principal.hostname contains "name",
// the result is: 1n1a1m1e1, because an empty string is found next to
// every character in `stringText`.
re.replace($e.principal.hostname, "", "1")

빈 문자열을 바꾸려면 "^$"replaceRegex로 사용:

// In the function call below, if $e.principal.hostname contains the empty
// string, "", the result is: "none".
re.replace($e.principal.hostname, "^$", "none")

sample_rate

다음에서 지원:
optimization.sample_rate(byteOrString, rateNumerator, rateDenominator)

설명

이 함수는 결정론적 샘플링 전략에 따라 이벤트를 포함할지 여부를 결정합니다. 이 함수는 다음을 반환합니다.

  • 입력 값의 일부에 대해 true (rateNumerator / rateDenominator)를 반환하여 이벤트가 샘플에 포함되어야 함을 나타냅니다.
  • false: 이벤트가 샘플에 포함되지 않음을 나타냅니다.

이 함수는 이벤트의 하위 집합만 처리하려는 최적화 시나리오에 유용합니다. 다음과 같습니다.

hash.fingerprint2011(byteOrString) % rateDenominator < rateNumerator

매개변수 데이터 유형

  • byteOrString: BYTE 또는 STRING으로 평가되는 표현식입니다.
  • rateNumerator: 'INT'
  • rateDenominator: 'INT'

반환 유형

BOOL

코드 샘플

events:
    $e.metadata.event_type = "NETWORK_CONNECTION"
    $asset_id = $e.principal.asset.asset_id
    optimization.sample_rate($e.metadata.id, 1, 5) // Only 1 out of every 5 events

  match:
    $asset_id over 1h

  outcome:
    $event_count = count_distinct($e.metadata.id)
  // estimate the usage by multiplying by the inverse of the sample rate
    $usage_past_hour = sum(5.0 * $e.network.sent_bytes)

 condition:
  // Requiring a certain number of events after sampling avoids bias (e.g. a
  // device with just 1 connection will still show up 20% of the time and
  // if we multiply that traffic by 5, we'll get an incorrect estimate)
  $e and ($usage_past_hour > 1000000000) and $event_count >= 100

strings.base64_decode

다음에서 지원:
strings.base64_decode(encodedString)

설명

인코딩된 문자열을 base64로 디코딩한 버전이 포함된 문자열을 반환합니다.

이 함수는 하나의 base64 인코딩 문자열을 인수로 사용합니다. encodedString이 올바른 base64로 인코딩된 문자열이 아니면 함수에서 encodedString을 변경하지 않고 반환합니다.

매개변수 데이터 유형

STRING

반환 유형

STRING

코드 샘플

예 1
"test" = strings.base64_decode($e.principal.domain.name)

strings.coalesce

다음에서 지원:
strings.coalesce(a, b, c, ...)

설명

이 함수는 인수를 무제한으로 사용하고 빈 문자열로 평가되지 않는 첫 번째 표현식의 값을 반환합니다(예: '0이 아닌 값'). 모든 인수가 빈 문자열로 평가되면 함수 호출에서 빈 문자열을 반환합니다.

인수는 리터럴, 이벤트 필드 또는 함수 호출일 수 있습니다. 모든 인수는 STRING 유형이어야 합니다. 인수가 이벤트 필드인 경우 속성은 동일한 이벤트에서 생성되어야 합니다.

매개변수 데이터 유형

STRING

반환 유형

STRING

코드 샘플

예 1

다음 예시에는 문자열 변수를 인수로 포함합니다. (1) $e.network.email.fromsuspicious@gmail.com이거나 (2) $e.network.email.from이 비어 있고 $e.network.email.tosuspicious@gmail.com이면 조건이 True로 평가됩니다.

"suspicious@gmail.com" = strings.coalesce($e.network.email.from, $e.network.email.to)
예 2

다음 예시에서는 인수가 3개 이상 있는 coalesce 함수를 호출합니다. 이 조건은 $e 이벤트에서 null이 아닌 첫 번째 IP 주소를 참조 목록 ip_watchlist의 값과 비교합니다. 이 호출에서 인수가 병합되는 순서는 규칙 조건에 열거되는 순서와 같습니다.

  1. $e.principal.ip가 먼저 평가됩니다.
  2. $e.src.ip가 다음에 평가됩니다.
  3. $e.target.ip가 다음에 평가됩니다.
  4. 마지막으로, 이전 ip 필드가 설정되지 않은 경우 'No IP' 문자열이 기본값으로 반환됩니다.
strings.coalesce($e.principal.ip, $e.src.ip, $e.target.ip, "No IP") in %ip_watchlist
예 3

다음 예시에서는 이벤트 $e1 및 이벤트 $e2principal.hostname을 병합하려고 시도합니다. 인수가 서로 다른 이벤트 변수이므로 컴파일러 오류가 반환됩니다.

// returns a compiler error
"test" = strings.coalesce($e1.principal.hostname, $e2.principal.hostname)

strings.concat

다음에서 지원:
strings.concat(a, b, c, ...)

설명

무제한 항목 연결을 반환합니다. 각 항목은 문자열, 정수 또는 부동 소수점 수일 수 있습니다.

인수가 이벤트 필드인 경우 속성은 동일한 이벤트에서 생성되어야 합니다.

매개변수 데이터 유형

STRING, FLOAT, INT

반환 유형

STRING

코드 샘플

예 1

다음 예시에는 문자열 변수와 정수 변수가 인수로 포함됩니다. principal.hostnameprincipal.port 모두 같은 이벤트인 $e에서 생성 및 연결되어 문자열을 반환합니다.

"google:80" = strings.concat($e.principal.hostname, ":", $e.principal.port)
예 2

다음 예시에는 문자열 변수와 문자열 리터럴이 인수로 포함됩니다.

"google-test" = strings.concat($e.principal.hostname, "-test") // Matches the event when $e.principal.hostname = "google"
예 3

다음 예시에는 문자열 변수와 부동 소수점 리터럴이 인수로 포함됩니다. 문자열로 표현될 경우 정수인 부동 소수점 수는 소수점 없이 형식으로 지정됩니다(예: 1.0은 '1'로 표시). 또한 16자리를 초과하는 부동 소수점 수는 소수점 이하 16번째 자리에서 잘립니다.

"google2.5" = strings.concat($e.principal.hostname, 2.5)
예 4

다음 예시에는 문자열 변수, 문자열 리터럴, 정수 변수, 부동 리터럴이 인수로 포함됩니다. 모든 변수는 같은 이벤트인 $e에서 생성되고 리터럴과 연결되어 문자열을 반환합니다.

"google-test802.5" = strings.concat($e.principal.hostname, "-test", $e.principal.port, 2.5)
예시 5

다음 예시에서는 이벤트 $e1의 principal.port를 이벤트 $e2principal.hostname과 연결하려고 시도합니다. 인수가 서로 다른 이벤트 변수이므로 컴파일러 오류가 반환됩니다.

// Will not compile
"test" = strings.concat($e1.principal.port, $e2.principal.hostname)

strings.contains

다음에서 지원:
strings.contains( str, substr )

설명

지정된 문자열에 지정된 하위 문자열이 포함되어 있으면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.

매개변수 데이터 유형

STRING, STRING

반환 유형

BOOL

코드 샘플

예 1

이 예시에서는 문자열에 하위 문자열 'is'가 있으므로 true를 반환합니다.

strings.contains("thisisastring", "is") = true
예 2

이 예시에서는 문자열에 하위 문자열 'that'이 없으므로 false를 반환합니다.

strings.contains("thisisastring", "that") = false

strings.count_substrings

다음에서 지원:
strings.count_substrings(string_to_search_in, substring_to_count)

설명

문자열과 하위 문자열이 주어지면 문자열 내에서 하위 문자열이 겹치지 않는 부분의 개수를 int64로 반환합니다.

매개변수 데이터 유형

STRING, STRING

반환 유형

INT

코드 샘플

이 섹션에는 지정된 문자열에 하위 문자열이 표시되는 횟수를 계산하는 예가 포함되어 있습니다.

예 1

이 예에서는 null이 아닌 문자열과 null이 아닌 단일 하위 문자열 문자를 사용합니다.

strings.count_substrings("this`string`has`four`backticks", "`") = 4
예 2

이 예시에서는 null이 아닌 문자열과 2자 이상인 null이 아닌 하위 문자열을 사용합니다.

strings.count_substrings("str", "str") = 1
예시 3

이 예시에서는 null이 아닌 문자열과 빈 하위 문자열을 사용합니다.

strings.count_substrings("str", "") = 0
예 4

이 예에서는 빈 문자열과 1자보다 큰 null이 아닌 하위 문자열을 사용합니다.

strings.count_substrings("", "str") = 0
예시 5

이 예시에서는 빈 문자열과 빈 하위 문자열을 사용합니다.

strings.count_substrings("", "") = 0
예시 6

이 예에서는 null이 아닌 문자열과 null이 아닌 하위 문자열을 사용합니다. 하위 문자열은 2자 이상이고 2개 이상 발생합니다.

strings.count_substrings("fooABAbarABAbazABA", "AB") = 3
예시 7

이 예에서는 null이 아닌 문자열과 null이 아닌 하위 문자열을 사용합니다. 하위 문자열은 2자 이상이고 2개 이상 발생합니다. 중복되는 하위 문자열 발생의 제한사항을 강조합니다.

strings.count_substrings("ABABABA", "ABA") = 2

strings.ends_with

다음에서 지원:
strings.ends_with(value, suffix)

설명

함수는 두 개의 문자열 (value, suffix)을 사용합니다. 서픽스가 비어 있지 않고 값의 끝에 있으면 true를 반환합니다.

매개변수 데이터 유형

STRING, STRING

반환 유형

BOOL

코드 샘플

다음 코드 샘플은 strings.ends_with 함수를 사용할 수 있는 몇 가지 방법을 보여줍니다.

예: true를 반환합니다.

접미사가 값의 끝에서 발견되면 true를 반환합니다.

strings.ends_with(target.hostname, "com") = true
예: false를 반환합니다.

서픽스가 값의 끝에 있지 않으면 false를 반환합니다.

strings.ends_with(target.hostname, "com") = false
예: 동일한 경우 false 반환

접미사와 값이 동일하면 false를 반환합니다.

target.hostname != "example.com"
strings.ends_with("str", "str") = true
예: 접미사가 비어 있으면 false를 반환합니다.

접미사가 빈 문자열인 경우 false를 반환합니다.

target.hostname != "example.com"
strings.ends_with("str", "") = false
예: 값이 비어 있으면 false를 반환합니다.

값이 빈 문자열이면 false를 반환합니다.

target.hostname != "example.com"
strings.ends_with("", "str") = false
예: 접미사와 값이 비어 있으면 false를 반환합니다.

접미사와 값이 빈 문자열인 경우 false를 반환합니다.

target.hostname != "example.com"
strings.ends_with("", "") = false

strings.extract_domain

다음에서 지원:
strings.extract_domain(url_string)

설명

문자열에서 도메인을 추출합니다.

매개변수 데이터 유형

STRING

반환 유형

STRING

코드 샘플

예 1

이 예시에서는 빈 문자열을 보여줍니다.

strings.extract_domain("") = ""
예 2

URL이 아닌 임의 문자열

strings.extract_domain("1234") = ""
예시 3

백슬래시 여러 개

strings.extract_domain("\\\\") = ""
예 4

알파벳이 아닌 문자가 적절하게 처리됨

strings.extract_domain("http://例子.卷筒纸.中国") = "卷筒纸.中国"
예시 5

URI 처리

strings.extract_domain("mailto:?to=&subject=&body=") = ""
예시 6

실제 URL 앞에 문자가 여러 개 있음

strings.extract_domain("     \t   !$5*^)&dahgsdfs;http://www.google.com") = "google.com"
예시 7

URI #의 특수문자

strings.extract_domain("test#@google.com") = ""
예시 8

URL #의 특수문자

strings.extract_domain("https://test#@google.com") = ""
예시 9

긍정적인 테스트 사례

strings.extract_domain("https://google.co.in") = "google.co.in"

strings.extract_hostname

다음에서 지원:
strings.extract_hostname(string)

설명

문자열에서 호스트 이름을 추출합니다. 이 함수는 대소문자를 구분합니다.

매개변수 데이터 유형

STRING

반환 유형

STRING

코드 샘플

예 1

이 예시에서는 빈 문자열을 반환합니다.

strings.extract_hostname("") = ""
예 2

URL이 아닌 임의 문자열

strings.extract_hostname("1234") = "1234"
예시 3

백슬래시 여러 개

strings.extract_hostname("\\\\") = ""
예 4

영어가 아닌 문자가 적절하게 처리됨

strings.extract_hostname("http://例子.卷筒纸.中国") = "例子.卷筒纸.中国"
예시 5

URI 처리

strings.extract_hostname("mailto:?to=&subject=&body=") = "mailto"
예시 6

실제 URL 앞에 문자가 여러 개 있음

strings.extract_hostname("     \t   !$5*^)&dahgsdfs;http://www.google.com") = "www.google.com"
예시 7

URI #의 특수문자

strings.extract_hostname("test#@google.com") = "test"
예시 8

URL #의 특수문자

strings.extract_hostname("https://test#@google.com") = "test"

strings.from_base64

다음에서 지원:
strings.from_base64(base64_encoded_string)

설명

함수는 base64로 인코딩된 STRING 값을 원시 바이너리 BYTES 값으로 변환합니다. 캐스팅할 수 없는 값이 있는 함수 호출은 기본적으로 빈 BYTES을 반환합니다.

매개변수 데이터 유형

STRING

반환 유형

BYTES

코드 샘플

Base64 인코딩 문자열을 바이트로 변환

이 함수는 base64로 인코딩된 문자열을 원시 바이너리 바이트 표현으로 변환합니다.

strings.from_base64("AAAAAG+OxVhtAm+d2sVuny/hW4oAAAAAAQAAAM0AAAA=") = b'000000006f8ec5586d026f9ddac56e9f2fe15b8a0000000001000000cd000000
변환 실패 (기본값은 빈 바이트)

제공된 값이 유효하지 않으면 함수는 기본적으로 빈 바이트를 사용합니다.

strings.from_base64("invalid-value") = b'

strings.from_hex

다음에서 지원:
strings.from_hex(hex_string)

설명

지정된 16진수 문자열과 연결된 바이트를 반환합니다.

매개변수 데이터 유형

STRING

반환 유형

BYTES

코드 샘플

지정된 16진수 문자열과 연결된 바이트를 가져옵니다.

예 1

이 예에서는 16진수 이외의 문자 전환을 보여줍니다.

strings.from_hex("str") // returns empty bytes
예 2

이 예시에서는 빈 문자열이 있는 입력을 보여줍니다.

strings.from_hex("") // returns empty bytes
예시 3

이 예에서는 16진수 문자열 전환을 보여줍니다.

strings.from_hex("1234") // returns 1234 bytes
예 4

이 예에서는 비ASCII 문자 전환을 보여줍니다.

strings.from_hex("筒纸.中国") // returns empty bytes

strings.ltrim

다음에서 지원:
strings.ltrim(string_to_trim, cutset)

설명

지정된 문자열에서 선행 화이트 스페이스를 자릅니다. 이 함수는 해당 컷셋에 있는 선행 문자를 삭제합니다.

매개변수 데이터 유형

STRING, STRING

반환 유형

STRING

코드 샘플

다음은 사용 사례 예시입니다.

예 1

이 예시에서는 동일한 첫 번째 인수와 두 번째 인수를 사용합니다.

strings.ltrim("str", "str") = ""
예 2

이 예시에서는 빈 문자열을 두 번째 인수로 사용합니다.

strings.ltrim("str", "") = "str"
예시 3

이 예시에서는 빈 문자열을 첫 번째 인수로, 문자열을 두 번째 인수로 사용합니다.

strings.ltrim("", "str") = ""
예 4

이 예에서는 공백이 포함된 문자열과 문자열을 두 번째 인수로 사용합니다.

strings.ltrim("a aastraa aa ", " a") = "straa aa "

strings.reverse

다음에서 지원:
strings.reverse(STRING)

설명

입력 문자열의 역순인 문자열을 반환합니다.

매개변수 데이터 유형

STRING

반환 유형

STRING

코드 샘플

예 1

다음 예시에서는 짧은 문자열을 전달합니다.

strings.reverse("str") = "rts"  // The function returns 'rts'.
예 2

다음 예시에서는 빈 문자열을 전달합니다.

strings.reverse("") = ""
예시 3

다음 예시에서는 회문을 전달합니다.

strings.reverse("tacocat") = "tacocat"

strings.rtrim

다음에서 지원:
strings.rtrim(string_to_trim, cutset)

설명

지정된 문자열에서 후행 화이트 스페이스를 자릅니다. 해당 컷셋에 있는 후행 문자를 삭제합니다.

매개변수 데이터 유형

STRING, STRING

반환 유형

STRING

코드 샘플

다음은 사용 사례 예시입니다.

예 1

다음 예시에서는 같은 문자열을 첫 번째 인수 및 두 번째 인수로 전달합니다.

strings.rtrim("str", "str") = ""
예 2

다음 예시에서는 빈 문자열을 두 번째 인수로 전달합니다.

strings.rtrim("str", "") = "str"
예시 3

다음 예시에서는 빈 문자열을 첫 번째 인수로, 비어 있지 않은 문자열을 두 번째 인수로 전달합니다.

strings.rtrim("", "str") = ""
예 4

다음 예시에서는 화이트 스페이스가 포함된 문자열을 첫 번째 인수로, 비어 있지 않은 문자열을 두 번째 인수로 전달합니다.

strings.rtrim("a aastraa aa ", " a") = "a aasstr"

strings.split

다음에서 지원:
strings.split(string, delimiter)

설명

구분자 인수를 사용하여 문자열 값을 분할합니다. 기본 구분 기호는 쉼표 (,)입니다.

매개변수 데이터 유형

STRING, STRING

반환 유형

ARRAY_STRINGS

코드 샘플

다음 코드 샘플은 strings.split 함수를 사용할 수 있는 몇 가지 방법을 보여줍니다.

예: 기본값으로 문자열 분할

다음 예에서는 쉼표인 기본 구분 기호를 사용하여 문자열을 분할합니다.

strings.split("a,b,c,d") = ["a", "b", "c", "d"]
예: 콜론으로 문자열 분할

다음 예에서는 각 콜론 (:)에서 문자열을 분할합니다.

strings.split("a:b:c:d", ":") = ["a", "b", "c", "d"]
예: 구분 기호 누락

다음 예시에서는 문자열 값에 구분 기호가 누락되었습니다.

strings.split("a,b,c,d", ":") = ["a,b,c,d"]
예: 빈 구분 기호

다음 예시에는 빈 구분 기호 문자열이 있습니다.

strings.split("abc", "") = ["a", "b", "c"]

strings.to_lower

다음에서 지원:
strings.to_lower(stringText)

설명

이 함수는 입력 문자열을 가져와 모든 문자를 소문자로 변경한 후 문자열을 반환합니다.

매개변수 데이터 유형

STRING

반환 유형

STRING

코드 샘플

예 1

다음 예시에서는 true를 반환합니다.

"test@google.com" = strings.to_lower($e.network.email.to)

strings.to_upper

다음에서 지원:
strings.to_upper(string_val)

설명

모든 알파벳 문자가 대문자인 원본 문자열을 반환합니다.

매개변수 데이터 유형

STRING

반환 유형

STRING

코드 샘플

예 1

다음 예시에서는 제공된 인수를 대문자로 반환합니다.

strings.to_upper("example") = "EXAMPLE"

strings.trim

다음에서 지원:
strings.trim(string_to_trim, cutset)

설명

지정된 문자열에서 선행 및 후행 화이트 스페이스를 자릅니다. 또한 입력 문자열에서 원치 않는 문자 (cutset 인수로 지정됨)를 삭제합니다.

매개변수 데이터 유형

STRING, STRING

반환 유형

STRING

코드 샘플

다음은 사용 사례 예시입니다.

예 1

다음 예에서는 동일한 문자열이 입력 문자열과 cutset으로 전달되어 빈 문자열이 생성됩니다.

strings.trim("str", "str") // ""
예 2

다음 예시에서는 빈 문자열이 cutset으로 전달되므로 삭제할 문자가 cutset에 지정되지 않아 원래 문자열 str이 결과로 생성됩니다.

strings.trim("str", "") = "str"
예시 3

다음 예시에서는 입력 문자열이 이미 비어 있고 삭제할 문자가 없으므로 함수가 빈 문자열을 생성합니다.

strings.trim("", "str") = ""
예 4

다음 예에서 trim 함수는 다음을 삭제하므로 함수는 str을 생성합니다.

  • 'a aastraa aa '의 후행 공백
  • 컷셋에 지정된 문자 (공백, a)
strings.trim("a aastraa aa ", " a") = "str"

strings.url_decode

다음에서 지원:
strings.url_decode(url_string)

설명

URL 문자열이 지정되면 이스케이프 문자를 디코딩하고 인코딩된 UTF-8 문자를 처리합니다. 디코딩이 실패하면 빈 문자열을 반환합니다.

매개변수 데이터 유형

STRING

반환 유형

STRING

코드 샘플

예 1

이 예시에서는 양수 테스트 사례를 보여줍니다.

strings.url_decode("three%20nine%20four") = "three nine four"
예 2

이 예시에서는 빈 문자열 사례를 보여줍니다.

strings.url_decode("") // ""
예시 3

이 예시에서는 알파벳이 아닌 문자 처리를 보여줍니다.

strings.url_decode("%E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B") // "上海+中國"
예 4

이 예시에서는 샘플 URL 디코딩을 보여줍니다.

strings.url_decode("http://www.google.com%3Fparam1%3D%22+1+%3E+2+%22%26param2%3D2%3B") // 'http://www.google.com?param1="+1+>+2+"&param2=2;'

timestamp.as_unix_seconds

다음에서 지원:
timestamp.as_unix_seconds(timestamp [, time_zone])

설명

이 함수는 지정된 타임스탬프 문자열의 유닉스 시간 이후 경과된 시간을 초 단위로 나타내는 정수를 반환합니다.

  • timestamp은 유효한 에포크 타임스탬프를 나타내는 문자열입니다. 형식은 %F %T이어야 합니다.
  • time_zone은 선택사항이며 시간대를 나타내는 문자열입니다. 생략할 경우 기본값은 GMT입니다. 문자열 리터럴을 사용하여 시간대를 지정할 수 있습니다. 옵션은 다음과 같습니다.

다음은 시간 추출 함수에 두 번째 인수로 전달할 수 있는 다른 올바른 time_zone 지정자의 예시입니다.

"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"

매개변수 데이터 유형

STRING, STRING

반환 유형

INT

코드 샘플

예 1

유효한 에포크 타임스탬프

timestamp.as_unix_seconds("2024-02-22 10:43:00") = 1708598580
예 2

America/New_York 시간대의 유효한 에포크 타임스탬프

timestamp.as_unix_seconds("2024-02-22 10:43:00", "America/New_York") = 1708616580

timestamp.current_seconds

다음에서 지원:
timestamp.current_seconds()

설명

Unix 초로 현재 시간을 나타내는 정수를 반환합니다. 발견 항목 타임스탬프와 대략적으로 동일하고 규칙이 실행된 시간을 기반으로 합니다. 이 함수는 timestamp.now() 함수의 동의어입니다.

매개변수 데이터 유형

NONE

반환 유형

INT

코드 샘플

예 1

다음 예시에서는 인증서가 24시간을 초과하여 만료되면 true를 반환합니다. 현재 Unix 초를 빼고 크거나 같음 연산자를 사용하여 비교하는 방식으로 시간 차이를 계산합니다.

86400 < timestamp.current_seconds() - $e.network.tls.certificate.not_after

timestamp.get_date

다음에서 지원:
timestamp.get_date(unix_seconds [, time_zone])

설명

이 함수는 타임스탬프가 있는 날짜를 나타내는 YYYY-MM-DD 형식의 문자열을 반환합니다.

  • unix_seconds는 유닉스 시간을 기준으로 지난 초 수(예: $e.metadata.event_timestamp.seconds)를 나타내는 정수이거나 해당 값을 포함하는 자리표시자입니다.
  • time_zone은 선택사항이며 time_zone을 나타내는 문자열입니다. 생략한 경우 기본값은 'GMT'입니다. 문자열 리터럴을 사용하여 시간대를 지정할 수 있습니다. 옵션은 다음과 같습니다.

다음은 시간 추출 함수에 두 번째 인수로 전달할 수 있는 다른 올바른 time_zone 지정자의 예시입니다.

"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"

매개변수 데이터 유형

INT, STRING

반환 유형

STRING

코드 샘플

예 1

이 예시에서는 time_zone 인수가 생략되었으므로 기본값은 'GMT'입니다.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_date($ts) = "2024-02-19"
예 2

이 예시에서는 문자열 리터럴을 사용하여 time_zone을 정의합니다.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_date($ts, "America/Los_Angeles") = "2024-02-20"

timestamp.get_minute

다음에서 지원:
timestamp.get_minute(unix_seconds [, time_zone])

설명

이 함수는 분을 나타내는 [0, 59] 범위의 정수를 반환합니다.

  • unix_seconds는 유닉스 시간을 기준으로 지난 초 수(예: $e.metadata.event_timestamp.seconds)를 나타내는 정수이거나 해당 값을 포함하는 자리표시자입니다.
  • time_zone은 선택사항이며 시간대를 나타내는 문자열입니다. 생략한 경우 기본값은 'GMT'입니다. 문자열 리터럴을 사용하여 시간대를 지정할 수 있습니다. 옵션은 다음과 같습니다.

다음은 시간 추출 함수에 두 번째 인수로 전달할 수 있는 다른 올바른 time_zone 지정자의 예시입니다.

"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"

매개변수 데이터 유형

INT, STRING

반환 유형

INT

코드 샘플

예 1

이 예시에서는 time_zone 인수가 생략되었으므로 기본값은 'GMT'입니다.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_hour($ts) = 15
예 2

이 예시에서는 문자열 리터럴을 사용하여 time_zone을 정의합니다.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_hour($ts, "America/Los_Angeles") = 15

timestamp.get_hour

다음에서 지원:
timestamp.get_hour(unix_seconds [, time_zone])

설명

이 함수는 시간을 나타내는 [0, 23] 범위의 정수를 반환합니다.

  • unix_seconds는 유닉스 시간을 기준으로 지난 초 수(예: $e.metadata.event_timestamp.seconds)를 나타내는 정수이거나 해당 값을 포함하는 자리표시자입니다.
  • time_zone은 선택사항이며 시간대를 나타내는 문자열입니다. 생략한 경우 기본값은 'GMT'입니다. 문자열 리터럴을 사용하여 시간대를 지정할 수 있습니다. 옵션은 다음과 같습니다.

다음은 시간 추출 함수에 두 번째 인수로 전달할 수 있는 다른 올바른 time_zone 지정자의 예시입니다.

"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"

매개변수 데이터 유형

INT, STRING

반환 유형

INT

코드 샘플

예 1

이 예시에서는 time_zone 인수가 생략되었으므로 기본값은 'GMT'입니다.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_hour($ts) = 15
예 2

이 예시에서는 문자열 리터럴을 사용하여 time_zone을 정의합니다.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_hour($ts, "America/Los_Angeles") = 15

timestamp.get_day_of_week

다음에서 지원:
timestamp.get_day_of_week(unix_seconds [, time_zone])

설명

이 함수는 일요일부터 시작하는 한 주의 요일을 나타내는 [1, 7] 범위의 정수를 반환합니다. 예를 들어 1은 일요일, 2는 월요일입니다.

  • unix_seconds는 유닉스 시간을 기준으로 지난 초 수(예: $e.metadata.event_timestamp.seconds)를 나타내는 정수이거나 해당 값을 포함하는 자리표시자입니다.
  • time_zone은 선택사항이며 time_zone을 나타내는 문자열입니다. 생략한 경우 기본값은 'GMT'입니다. 문자열 리터럴을 사용하여 시간대를 지정할 수 있습니다. 옵션은 다음과 같습니다.

다음은 시간 추출 함수에 두 번째 인수로 전달할 수 있는 다른 올바른 time_zone 지정자의 예시입니다.

"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"

매개변수 데이터 유형

INT, STRING

반환 유형

INT

코드 샘플

예 1

이 예시에서는 time_zone 인수가 생략되었으므로 기본값은 'GMT'입니다.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_day_of_week($ts) = 6
예 2

이 예시에서는 문자열 리터럴을 사용하여 time_zone을 정의합니다.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_day_of_week($ts, "America/Los_Angeles") = 6

timestamp.get_timestamp

다음에서 지원:
timestamp.get_timestamp(unix_seconds, optional timestamp_format/time_granularity, optional timezone)

설명

이 함수는 타임스탬프가 있는 날짜를 나타내는 YYYY-MM-DD 형식의 문자열을 반환합니다.

  • unix_seconds는 유닉스 시간을 기준으로 지난 초 수(예: $e.metadata.event_timestamp.seconds)를 나타내는 정수이거나 해당 값을 포함하는 자리표시자입니다.
  • timestamp_format은 선택사항이며 타임스탬프 형식을 나타내는 문자열입니다. 생략할 경우 기본값은 %F %T입니다. 날짜 시간 형식 문자열 또는 SECOND, MINUTE, HOUR, DATE, WEEK, MONTH, YEAR 시간 단위 중 하나를 사용하여 형식을 지정할 수 있습니다. 형식 지정 옵션에 대한 자세한 내용은 날짜 및 시간 부분의 형식 요소 지정을 참고하세요.
  • time_zone은 선택사항이며 시간대를 나타내는 문자열입니다. 생략할 경우 기본값은 GMT입니다. 문자열 리터럴을 사용하여 시간대를 지정할 수 있습니다. 옵션은 다음과 같습니다.
    • IANA 시간대(TZ) 데이터베이스 이름입니다(예: America/Los_Angeles). 자세한 내용은 Wikipedia의 tz 데이터베이스 시간대 목록을 참조하세요.
    • UTC의 시간대 오프셋은 (+|-)H[H][:M[M]] 형식으로 지정됩니다(예: '-08:00').

다음은 시간 추출 함수에 두 번째 인수로 전달할 수 있는 다른 올바른 time_zone 지정자의 예시입니다.

"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"

매개변수 데이터 유형

INT, STRING, STRING

반환 유형

STRING

코드 샘플

예 1

이 예시에서는 time_zone 인수가 생략되었으므로 기본값으로 GMT가 설정됩니다.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_timestamp($ts) = "2024-02-22 10:43:51"
예 2

이 예시에서는 문자열 리터럴을 사용하여 time_zone을 정의합니다.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_timestamp($ts, "%F %T", "America/Los_Angeles") = "2024-02-22 10:43:51"
예시 3

이 예시에서는 문자열 리터럴을 사용하여 timestamp_format을 정의합니다.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_timestamp($ts, "%Y-%m", "GMT") = "2024-02"
예 4

이 예에서는 초 단위로 Unix 타임스탬프를 문자열로 형식화합니다.

timestamp.get_timestamp(1708598631, "SECOND", "GMT") = "2024-02-22 10:43:51"
예시 5

이 예에서는 분 단위로 유닉스 타임스탬프를 문자열로 형식화합니다.

timestamp.get_timestamp(1708598631, "MINUTE", "GMT") = "2024-02-22 10:43"
예시 6

이 예에서는 시간 세부사항으로 Unix 타임스탬프의 형식을 문자열로 지정합니다.

timestamp.get_timestamp(1708598631, "HOUR", "GMT") = "2024-02-22 10"
예시 7

이 예에서는 일 단위로 UNIX 타임스탬프를 문자열로 형식화합니다.

timestamp.get_timestamp(1708598631, "DATE", "GMT") = "2024-02-22"
예시 8

이 예에서는 주 단위로 UNIX 타임스탬프의 형식을 문자열로 지정합니다.

timestamp.get_timestamp(1708598631, "WEEK", "GMT") = "2024-02-18"
예시 9

이 예에서는 Unix 타임스탬프를 월 단위로 문자열로 형식화합니다.

timestamp.get_timestamp(1708598631, "MONTH", "GMT") = "2024-02"
예 10

이 예에서는 연도 단위로 유닉스 타임스탬프를 문자열로 형식화합니다.

timestamp.get_timestamp(1708598631, "YEAR", "GMT") = "2024"

timestamp.get_week

다음에서 지원:
timestamp.get_week(unix_seconds [, time_zone])

설명

이 함수는 해당 연도의 주를 나타내는 [0, 53] 범위의 정수를 반환합니다. 주는 일요일부터 시작됩니다. 해당 연도의 첫 번째 일요일 이전의 날짜는 주 0에 포함됩니다.

  • unix_seconds는 유닉스 시간을 기준으로 지난 초 수(예: $e.metadata.event_timestamp.seconds)를 나타내는 정수이거나 해당 값을 포함하는 자리표시자입니다.
  • time_zone은 선택사항이며 시간대를 나타내는 문자열입니다. 생략한 경우 기본값은 'GMT'입니다. 문자열 리터럴을 사용하여 시간대를 지정할 수 있습니다. 옵션은 다음과 같습니다.

다음은 시간 추출 함수에 두 번째 인수로 전달할 수 있는 다른 올바른 time_zone 지정자의 예시입니다.

"America/Los_Angeles", or "-08:00". ("PST" is not supported)
"America/New_York", or "-05:00". ("EST" is not supported)
"Europe/London"
"UTC"
"GMT"

매개변수 데이터 유형

INT, STRING

반환 유형

INT

코드 샘플

예 1

이 예시에서는 time_zone 인수가 생략되었으므로 기본값은 'GMT'입니다.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_week($ts) = 0
예 2

이 예시에서는 문자열 리터럴을 사용하여 time_zone을 정의합니다.

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_week($ts, "America/Los_Angeles") = 0

timestamp.now

다음에서 지원:
timestamp.now()

설명

1970-01-01 00:00:00 UTC 이후의 초 수를 반환합니다. 이를 Unix 에포크 시간이라고도 합니다.

반환 유형

INT

코드 샘플

예 1

다음 예에서는 2024년 5월 22일 18시 16분 59초에 실행된 코드의 타임스탬프를 반환합니다.

timestamp.now() = 1716401819 // Unix epoch time in seconds for May 22, 2024 at 18:16:59

window.avg

다음에서 지원:
window.avg(numeric_values [, should_ignore_zero_values])

설명

입력 값(정수 또는 부동 소수점일 수 있음)의 평균을 반환합니다. 선택사항인 두 번째 인수를 true로 설정하면 0 값이 무시됩니다.

매개변수 데이터 유형

INT|FLOAT

반환 유형

FLOAT

코드 샘플

예 1

이 예시에서는 정수 평균을 보여줍니다.

// This rule sets the outcome $size_mode to the average
// file size in the 5 minute match window.
events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $size_mode = window.avg($e.file.size) // yields 2.5 if the event file size values in the match window are 1, 2, 3 and 4
예 2

이 예시에서는 부동 소수점 평균을 보여줍니다.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $size_mode = window.avg($e.file.size) // yields 1.75 if the event file size values in the match window are 1.1 and 2.4
예시 3

음수 입력 평균

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $size_mode = window.avg($e.file.size) // yields 0.6 if the event file size values in the match window are -1.1, 1.1, 0.0 and 2.4
예 4

0은 0을 반환

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $size_mode = window.avg($e.file.size) // yields 0 if the event file size values in the match window is 0
예시 5

0 값 무시

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $size_mode = window.avg($e.file.size, true) // yields 394 if the event file size values in the match window are 0, 0, 0 and 394

window.first

다음에서 지원:
window.first(values_to_sort_by, values_to_return)

설명

이 집계 함수는 일치 기간에서 상관성이 가장 낮은 정수 값을 가진 이벤트에서 파생된 문자열 값을 반환합니다. 일치 기간(최초 이벤트)에서 타임스탬프가 가장 낮은 이벤트에서 사용자 ID를 가져오는 것이 사용 사례의 예시입니다.

매개변수 데이터 유형

INT, STRING

반환 유형

STRING

코드 샘플

일치 기간에서 상관성이 가장 낮은 정수 값을 가진 이벤트에서 파생된 문자열 값을 가져옵니다.

// This rule sets the outcome $first_event to the lowest correlated int value
// in the 5 minute match window.
events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $first_event = window.first($e.metadata.timestamp.seconds, $e.metadata.event_type) // yields v1 if the events in the match window are 1, 2 and 3 and corresponding values v1, v2, and v3.

window.last

다음에서 지원:
window.last(values_to_sort_by, values_to_return)

설명

이 집계 함수는 일치 기간에서 상관성이 가장 높은 정수 값을 가진 이벤트에서 파생된 문자열 값을 반환합니다. 일치 기간 (최고 타임스탬프)에서 타임스탬프가 가장 낮은 이벤트에서 사용자 ID를 가져오는 것이 사용 사례의 예시입니다.

매개변수 데이터 유형

INT, STRING

반환 유형

STRING

코드 샘플

일치 기간에서 상관성이 가장 높은 정수 값을 가진 이벤트에서 파생된 문자열 값을 가져옵니다.

// This rule sets the outcome $last_event to the highest correlated int value
// in the 5 minute match window.
events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $last_event = window.first($e.metadata.timestamp.seconds, $e.metadata.event_type) // yields v3 if the events in the match window are 1, 2 and 3 and corresponding values v1, v2, and v3.

window.median

다음에서 지원:
window.median(numeric_values, should_ignore_zero_values)

설명

입력 값의 중앙값을 반환합니다. 중앙값이 2개인 경우 1개만 반환 값으로 비결정적으로 선택됩니다.

매개변수 데이터 유형

INT|FLOAT, BOOL

반환 유형

FLOAT

코드 샘플

예 1

이 예에서는 입력 값이 0이 아닌 경우 중앙값을 반환합니다.

rule median_file_size {
    meta:
    events:
      $e.metadata.event_type = "FILE_COPY"
        $userid = $e.principal.user.userid
    match:
      $userid over 1h
    outcome:
      $median_file_size = window.median($e.principal.file.size) // returns 2 if the file sizes in the match window are [1, 2, 3]
  condition:
      $e
}
예 2

이 예에서는 무시해서는 안 되는 0 값이 입력에 포함된 경우 입력의 중앙값을 반환합니다.

rule median_file_size {
    meta:
    events:
      $e.metadata.event_type = "FILE_COPY"
        $userid = $e.principal.user.userid
    match:
      $userid over 1h
    outcome:
      $median_file_size = window.median($e.principal.file.size) // returns 1 if the file sizes in the match window are [0,0, 1, 2, 3]
  condition:
      $e
}
예시 3

이 예에서는 무시해야 하는 0 값이 입력에 일부 포함된 경우 입력의 중앙값을 반환합니다.

rule median_file_size {
    meta:
    events:
      $e.metadata.event_type = "FILE_COPY"
        $userid = $e.principal.user.userid
    match:
      $userid over 1h
    outcome:
      $median_file_size = window.median($e.principal.file.size, true) // returns 2 if the file sizes in the match window are [0,0, 1, 2, 3]
  condition:
      $e
}
예 4

이 예에서는 무시해야 하는 0 값이 입력에 모두 포함된 경우 입력의 중앙값을 반환합니다.

rule median_file_size {
    meta:
    events:
      $e.metadata.event_type = "FILE_COPY"
        $userid = $e.principal.user.userid
    match:
      $userid over 1h
    outcome:
      $median_file_size = window.median($e.principal.file.size) // returns 0 if the file sizes in the match window are [0,0]
  condition:
      $e
}
예시 5

이 예에서는 중앙값이 여러 개 있는 경우 하나의 중앙값만 반환된다는 것을 보여줍니다.

rule median_file_size {
    meta:
    events:
      $e.metadata.event_type = "FILE_COPY"
        $userid = $e.principal.user.userid
    match:
      $userid over 1h
    outcome:
      $median_file_size = window.median($e.principal.file.size) // returns 1 if the file sizes in the match window are [1, 2, 3, 4]
  condition:
      $e
}

window.mode

다음에서 지원:
window.mode(values)

설명

입력 값 모드를 반환합니다. 가능한 모드 값이 여러 개인 경우 이러한 값 중 하나만 반환 값으로 비결정적으로 선택됩니다.

매개변수 데이터 유형

INT|FLOAT|STRING

반환 유형

STRING

코드 샘플

예 1

일치 기간의 값 모드를 가져옵니다.

// This rule sets the outcome $size_mode to the most frequently occurring
// file size in the 5 minute match window.
events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $size_mode = window.mode($e.file.size) // yields 1.6 if the event file size values in the match window are 1.6, 2, and 1.6

window.range

다음에서 지원:
window.range(numeric_values, optional should_ignore_zero_values)

설명

입력 값에서 찾은 값의 범위를 반환합니다 (최소값, 최대값 포함). 각 값은 정수 또는 부동 소수점일 수 있습니다. 선택사항인 두 번째 인수를 true로 설정하면 0 값이 무시됩니다.

매개변수 데이터 유형

INT|FLOAT, BOOL

반환 유형

ARRAY_FLOATS

코드 샘플

다음 코드 샘플은 window.range 함수를 사용할 수 있는 몇 가지 방법을 보여줍니다.

예: 최소 및 최대 정수

이 예에서는 최소 및 최대 정수 값을 보여줍니다.

window.range([1, 2, 3, 4], false) = [1.000000, 4.000000]
예: 최소 및 최대 부동 소수점

이 예에서는 최소 및 최대 부동 소수점 값을 보여줍니다.

window.range([1.100000, 39.400000, 2.400000], false) = [1.100000, 39.400000]
예: 최소 및 최대 음수 정수

이 예시에서는 최소 및 최대 음수 정수 값을 보여줍니다.

window.range([-1.100000, 1.100000, 0.000000, 2.400000], false) = [-1.100000, 2.400000]
예: 0 값 무시

이 예에서는 두 번째 매개변수를 설정할 때 0 값이 무시되는 방법을 보여줍니다.

window.range([0, 0, 0, 394, 1], true) = [1.000000, 394.000000]

window.stddev

다음에서 지원:
window.stddev(numeric_values)

설명

일치 기간의 입력 값 표준 편차를 반환합니다.

매개변수 데이터 유형

INT|FLOAT

반환 유형

FLOAT

코드 샘플

예 1

이 예시에서는 일치 기간 내의 정수 표준편차를 반환합니다.

// This rule creates a detection when the file size stddev in 5 minutes for a user is over a threshold.
events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.stddev($e.file.size) // yields 4.0 if the event file size values in the match window are [10, 14, 18].
condition:
  $e and #p1 > 2
예 2

이 예시에서는 일치 기간 내의 부동 소수점 표준 편차를 반환합니다.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.stddev($e.file.size) // yields 4.488686 if the event file size values in the match window are [10.00, 14.80, 18.97].
condition:
  $e and #p1 > 2
예시 3

이 예시에서는 음수가 포함된 일치 기간의 표준 편차를 반환합니다.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.stddev($e.file.size) // yields 48.644972 if the event file size values in the match window are [-1, -56, -98].
condition:
  $e and #p1 > 2
예 4

이 예시에서는 일치 기간의 모든 값이 같으면 표준 편차를 0으로 반환합니다.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.stddev($e.file.size) // yields 0.000000 if the event file size values in the match window are [1, 1, 1].
condition:
  $e and #p1 > 2
예시 5

이 예시에서는 양수와 음수가 포함된 일치 기간의 표준 편차를 반환합니다.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.stddev($e.file.size) // yields 1.000000 if the event file size values in the match window are [1, 0, -1].
condition:
  $e and #p1 > 10

window.variance

다음에서 지원:
window.variance(values)

설명

이 함수는 입력 값의 지정된 분산을 반환합니다.

매개변수 데이터 유형

INT|FLOAT

반환 유형

FLOAT

코드 샘플

예 1

이 예시에서는 모든 정수의 분산을 반환합니다.

// This rule creates a detection when the file size variance in 5 minutes for a user is over a threshold.
events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.variance($e.file.size) // yields 16 if the event file size values in the match window are [10, 14, 18].
condition:
  $e and #p1 > 10
예 2

이 예시에서는 모든 부동 소수점의 분산을 반환합니다.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.variance($e.file.size) // yields 20.148300 if the event file size values in the match window are [10.00, 14.80, 18.97].
condition:
  $e and #p1 > 10
예시 3

이 예시에서는 음수의 분산을 반환합니다.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.variance($e.file.size) // yields 2366.333333 if the event file size values in the match window are [-1, -56, -98].
condition:
  $e and #p1 > 10
예 4

이 예에서는 작은 분산 값을 반환합니다.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.variance($e.file.size) // yields 0.000000 if the event file size values in the match window are [0.000000, 0.000000, 0.000100].
condition:
  $e and #p1 > 10
예시 5

이 예시에서는 분산이 0으로 반환됩니다.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.variance($e.file.size) // yields 0.000000 if the event file size values in the match window are [1, 1, 1].
condition:
  $e and #p1 > 10
예시 6

이 예시에서는 양수와 음수의 분산을 반환합니다.

events:
 $e.user.userid = $userid
match:
 $userid over 5m
outcome:
  $p1 = window.variance($e.file.size) // yields 1.000000 if the event file size values in the match window are [1, 0, -1].
condition:
  $e and #p1 > 10

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