Funciones

Se admite en los siguientes sistemas operativos:

En esta sección, se describen las funciones de YARA-L 2.0 que puedes usar en las consultas de reglas, búsqueda y panel.

Consulta también Funciones de YARA-L 2.0 para paneles y Estadísticas y agregaciones en la búsqueda con YARA-L 2.0.

Estas funciones se pueden usar en las siguientes partes de una consulta de YARA-L:

arrays.concat

Se admite en los siguientes sistemas operativos:
arrays.concat(string_array, string_array)

Descripción

Devuelve un nuevo array de cadenas copiando elementos de los arrays de cadenas originales.

Tipos de datos de parámetros

ARRAY_STRINGS, ARRAY_STRINGS

Tipo de datos que se muestra

ARRAY_STRINGS

Muestras de código

Ejemplo 1

En el siguiente ejemplo, se concatenan dos arrays de cadenas diferentes.

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

En el siguiente ejemplo, se concatenan arrays con una cadena vacía.

arrays.concat([""], [""]) = ["", ""]
Ejemplo 3

En el siguiente ejemplo, se concatenan arrays vacíos.

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

arrays.index_to_float

Se admite en los siguientes sistemas operativos:
arrays.index_to_float(array, index)

Descripción

Devuelve el elemento en el índice determinado de un array. El elemento en ese índice se devuelve como un número de punto flotante.

El índice es un valor entero que representa la posición de un elemento en el array. De forma predeterminada, el primer elemento de un array tiene un índice de 0 y el último elemento tiene un índice de n-1, donde n es el tamaño del array. La indexación negativa permite acceder a los elementos del array en relación con el final del array. Por ejemplo, un índice de -1 hace referencia al último elemento del array y un índice de -2 hace referencia al penúltimo elemento del array.

Tipos de datos de parámetros

ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT

Tipo de datos que se muestra

FLOAT

Muestras de código

Ejemplo 1

En el siguiente ejemplo, se recupera un elemento en el índice 1 de un array de números de punto flotante.

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

En el siguiente ejemplo, se recupera un elemento en el índice -1 de un array de números de punto flotante.

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

En el siguiente ejemplo, se recupera un elemento para un índice mayor que el tamaño del array.

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

En el siguiente ejemplo, se recupera un elemento de un array vacío.

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

En el siguiente ejemplo, se recupera un elemento en el índice 1 de un array de cadenas.

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

En el siguiente ejemplo, se recupera un elemento en el índice 2 de un array de números enteros.

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

arrays.index_to_int

Se admite en los siguientes sistemas operativos:
arrays.index_to_int(array_of_inputs, index)

Descripción

Devuelve el valor en un índice determinado de un array como un número entero.

El índice es un valor entero que representa la posición de un elemento en el array. De forma predeterminada, el primer elemento de un array tiene un índice de 0 y el último elemento tiene un índice de n-1, donde n es el tamaño del array. La indexación negativa permite acceder a los elementos del array en relación con el final del array. Por ejemplo, un índice de -1 hace referencia al último elemento del array y un índice de -2 hace referencia al penúltimo elemento del array.

Tipos de datos de parámetros

ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT

Tipo de datos que se muestra

INT

Muestras de código

Ejemplo 1

Esta llamada a la función devuelve 0 cuando el valor en el índice es una cadena no numérica.

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

Esta función devuelve el elemento en el índice -1.

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

Devuelve 0 para el elemento fuera de los límites.

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

Esta función recupera el elemento del array de números de punto flotante en el índice 1.

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

Esta función recupera el elemento del array de números enteros en el índice 0.

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

arrays.index_to_str

Se admite en los siguientes sistemas operativos:
arrays.index_to_str(array, index)

Descripción

Devuelve el elemento en el índice determinado del array como una cadena. El índice es un valor entero que representa la posición de un elemento en el array. De forma predeterminada, el primer elemento de un array tiene un índice de 0 y el último elemento tiene un índice de n-1, donde n es el tamaño del array. La indexación negativa permite acceder a los elementos del array desde el final del array. Por ejemplo, un índice de -1 hace referencia al último elemento del array y un índice de -2 hace referencia al penúltimo elemento del array.

Tipos de datos de parámetros

ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

En el siguiente ejemplo, se recupera un elemento en el índice 1 de un array de cadenas.

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

En el siguiente ejemplo, se recupera un elemento en el índice -1 (último elemento del array) de un array de cadenas.

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

En el siguiente ejemplo, se recupera un elemento para un índice mayor que el tamaño del array, lo que devuelve una cadena vacía.

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

En el siguiente ejemplo, se recupera un elemento de un array vacío.

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

En el siguiente ejemplo, se recupera un elemento en el índice 0 de un array de números de punto flotante. El resultado se devuelve como una cadena.

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

En el siguiente ejemplo, se recupera un elemento en el índice 2 de un array de números enteros. El resultado se muestra en forma de una cadena.

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

arrays.join_string

Se admite en los siguientes sistemas operativos:
arrays.join_string(array_of_strings, optional_delimiter)

Descripción

Convierte un array de cadenas en una sola cadena separada por el parámetro opcional. Si no se proporciona un delimitador, se usa la cadena vacía.

Tipos de datos de parámetros

ARRAY_STRINGS, STRING

Tipo de datos que se muestra

STRING

Muestras de código

Estos son algunos ejemplos de cómo usar la función:

Ejemplo 1

En este ejemplo, se une un array con elementos que no son nulos y un delimitador.

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

En este ejemplo, se une un array con un elemento nulo y un delimitador.

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

En este ejemplo, se une un array con elementos no nulos y sin delimitador.

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

arrays.length

Se admite en los siguientes sistemas operativos:
arrays.length(repeatedField)

Descripción

Devuelve la cantidad de elementos del campo repetido.

Tipos de datos de parámetros

LIST

Tipo de datos que se muestra

NUMBER

Muestras de código

Ejemplo 1

Devuelve la cantidad de elementos del campo repetido.

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

Si hay varios campos repetidos a lo largo de la ruta, devuelve la cantidad total de elementos de campo repetidos.

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

arrays.max

Se admite en los siguientes sistemas operativos:
arrays.max(array_of_ints_or_floats)

Descripción

Devuelve el elemento más grande de un array o cero si el array está vacío.

Tipos de datos de parámetros

ARRAY_INTS|ARRAY_FLOATS

Tipo de datos que se muestra

FLOAT

Muestras de código

Estos son algunos ejemplos de cómo usar la función:

Ejemplo 1

En este ejemplo, se devuelve el elemento mayor en un array de números enteros.

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

En este ejemplo, se devuelve el elemento mayor en un array de números de punto flotante.

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

arrays.min

Se admite en los siguientes sistemas operativos:
arrays.min(array_of_ints_or_floats[, ignore_zeros=false])

Descripción

Devuelve el elemento más pequeño de un array o cero si el array está vacío. Si el segundo argumento opcional se establece en verdadero, se ignoran los elementos iguales a cero.

Tipos de datos de parámetros

ARRAY_INTS|ARRAY_FLOATS, BOOL

Tipo de datos que se muestra

FLOAT

Muestras de código

Estos son algunos ejemplos de cómo usar la función:

Ejemplo 1

En este ejemplo, se devuelve el elemento más pequeño de un array de números enteros.

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

En este ejemplo, se muestra el elemento más pequeño en un array de números de punto flotante.

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

En este ejemplo, se muestra el elemento más pequeño en un array de números de punto flotante, mientras se ignoran los ceros.

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

arrays.size

Se admite en los siguientes sistemas operativos:
arrays.size( array )

Descripción

Muestra el tamaño del arreglo. Muestra 0 para un arreglo vacío.

Tipos de datos de parámetros

ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS

Tipo de datos que se muestra

INT

Muestras de código

Ejemplo 1

En este ejemplo, se usa un array de cadenas que contiene dos elementos.

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

En este ejemplo, se usa un array de números enteros que contiene 3 elementos.

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

En este ejemplo, se usa un array de números de punto flotante que contiene 1 elemento.

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

En este ejemplo, se usa un array vacío.

arrays.size([]) = 0

bytes.to_base64

Se admite en los siguientes sistemas operativos:
bytes.to_base64(bytes, optional_default_string)

Descripción

La función convierte un valor bytes en un valor base64 encoded string. Las llamadas a funciones con valores que no se pueden convertir devuelven una cadena vacía de forma predeterminada.

Tipos de datos de parámetros

BYTES, STRING

Tipo de datos que se muestra

STRING

Muestras de código

Bytes binarios sin procesar a cadena codificada en Base64

La función convierte los bytes binarios sin procesar en una cadena codificada en base64.

bytes.to_base64(b'000000006f8ec5586d026f9ddac56e9f2fe15b8a0000000001000000cd000000) = "AAAAAG+OxVhtAm+d2sVuny/hW4oAAAAAAQAAAM0AAAA="
Conversión fallida (se establece de forma predeterminada en la cadena proporcionada de forma opcional)

La función usa el valor predeterminado "invalid bytes" cuando el valor de bytes proporcionado no es válido.

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

cast.as_bool

Se admite en los siguientes sistemas operativos:
cast.as_bool(string_or_int)

Descripción

La función convierte un valor int o string en un valor bool. Las llamadas a funciones con valores que no se pueden convertir devolverán FALSE. Devuelve VERDADERO solo para el número entero 1 y la cadena "true" que no distingue mayúsculas de minúsculas.

Tipos de datos de parámetros

INT|STRING

Tipo de datos que se muestra

BOOL

Muestras de código

Ejemplo 1

En este ejemplo, se muestra cómo convertir una cadena no booleana

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

Número entero verdadero (1)

cast.as_bool(1) = true
Ejemplo 3

Cadena verdadera

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

Cadena verdadera con mayúscula

cast.as_bool("TRUE") = true
Ejemplo 5

Número entero negativo

cast.as_bool(0-1) = false
Ejemplo 6

Número entero falso (0)

cast.as_bool(0) = false
Ejemplo 7

string vacía

cast.as_bool("") = false

cast.as_float

Se admite en los siguientes sistemas operativos:
cast.as_float(string_to_cast)

Descripción

Convierte una cadena numérica en un número de punto flotante. Cualquier llamada a una función con valores que no se puedan convertir devolverá 0. Los números de punto flotante mantienen la precisión hasta 7 dígitos decimales.

Tipos de datos de parámetros

STRING

Tipo de datos que se muestra

FLOAT

Muestras de código

Ejemplo 1

Si se convierte una cadena no numérica, se devuelve 0.

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

La conversión de una cadena vacía devuelve 0.

cast.as_float("") = 0.0000000
Ejemplo 3

La conversión de una cadena numérica válida devuelve un valor de número de punto flotante.

cast.as_float("1.012345678") = 1.0123456

cast.as_string

Se admite en los siguientes sistemas operativos:
cast.as_string(int_or_bytes_or_bool, optional_default_string)

Descripción

La función cast.as_string transforma un valor de INT, BYTES o BOOL en su representación de cadena. Puedes proporcionar un argumento default_string opcional para controlar los casos en los que falla la transmisión. Si omites el argumento default_string o si la entrada es una secuencia de bytes UTF-8 o BASE64 no válida, la función devuelve una cadena vacía.

Tipos de datos de parámetros

INT|BYTES|BOOL, STRING

Tipo de datos que se muestra

STRING

Muestras de código

Conversión de números enteros a cadenas

La función convierte el número entero 123 en la cadena "123".

cast.as_string(123) = "123"
Conversión de flotante a cadena

La función convierte el número de punto flotante 2.25 en la cadena "2.25".

cast.as_string(2.25) = "2.25"
Conversión de bytes a cadena

La función convierte el b'01 binario sin procesar en la cadena "\x01".

cast.as_string(b'01, "") = "\x01"
Conversión de booleano a cadena

La función convierte el valor booleano true en la cadena "true".

cast.as_string(true, "") = "true"
Conversión fallida (se establece de forma predeterminada en la cadena proporcionada de forma opcional)

La función usa de forma predeterminada la cadena "casting error" cuando el valor proporcionado no es válido.

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

Fingerprint

Se admite en los siguientes sistemas operativos:
hash.fingerprint2011(byteOrString)

Descripción

Esta función calcula el hash fingerprint2011 de una secuencia de bytes o una cadena de entrada. Esta función devuelve un valor INT sin signo en el rango [2, 0xFFFFFFFFFFFFFFFF].

Tipos de datos de parámetros

BTYE, STRING

Tipo de datos que se muestra

INT

Muestra de código

id_fingerprint = hash.fingerprint2011("user123")

grupo

Se admite en los siguientes sistemas operativos:
group(field1, field2, field3, ...)

Descripción

Agrupa los campos de un tipo similar en una variable de marcador de posición.

En la búsqueda de UDM, se usan campos agrupados para buscar en varios campos de un tipo similar. La función de grupo es similar a los campos agrupados, excepto que te permite seleccionar qué campos deseas agrupar para activar una detección. Puedes usar la función group para recopilar información sobre una entidad específica (por ejemplo, un nombre de host, una dirección IP o un ID de usuario) en diferentes tipos de sustantivos.

Muestras de código

Ejemplo 1

Agrupa todas las direcciones IP y proporciona un recuento descendente de la dirección IP más frecuente en el período analizado.

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

hash.sha256

Se admite en los siguientes sistemas operativos:
hash.sha256(string)

Descripción

Devuelve un hash SHA-256 de la cadena de entrada.

Tipos de datos de parámetros

STRING

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

En este ejemplo, se muestra el hash SHA-256 cuando la entrada es una cadena válida.

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

En este ejemplo, se muestra el hash SHA-256 cuando la entrada es una cadena vacía.

hash.sha256("") = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"

math.abs

Se admite en los siguientes sistemas operativos:
math.abs(numericExpression)

Descripción

Devuelve el valor absoluto de una expresión de número entero o de punto flotante.

Tipos de datos de parámetros

NUMBER

Tipo de datos que se muestra

NUMBER

Muestras de código

Ejemplo 1

Este ejemplo devuelve True si el evento ocurrió más de 5 minutos después de la hora especificada (en segundos desde la época de Unix), independientemente de si el evento ocurrió antes o después de la hora especificada. Una llamada a math.abs no puede depender de varias variables o marcadores de posición. Por ejemplo, no puedes reemplazar el valor de tiempo codificado de 1643687343 en el siguiente ejemplo por $e2.metadata.event_timestamp.seconds.

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

math.ceil

Se admite en los siguientes sistemas operativos:
math.ceil(number)

Descripción

Devuelve el número entero más pequeño que no es menor que el número determinado (redondeo hacia arriba). Devolverá 0 si la entrada es nula o demasiado grande para caber en un int64.

Tipos de datos de parámetros

FLOAT

Tipo de datos que se muestra

INT

Muestras de código

En esta sección, se incluyen ejemplos del uso de math.ceil.

Ejemplo 1

En este ejemplo, se devuelve el valor de ceil de un número entero.

math.ceil(2.000000) = 2
Ejemplo 2

En este ejemplo, se devuelve el valor de ceil de un número negativo.

math.ceil(0-1.200000) = -1
Ejemplo 3

En este ejemplo, se devuelve 0 como el límite superior de un número demasiado grande para un número entero de 64 bits.

math.ceil(184467440737095516160.0) = 0

math.floor

Se admite en los siguientes sistemas operativos:
math.floor(float_val)

Descripción

Devuelve el valor entero más grande que no es mayor que el valor proporcionado (redondeo hacia abajo). Devuelve 0 si la entrada es nula o demasiado grande para caber en un int64.

Tipos de datos de parámetros

FLOAT

Tipo de datos que se muestra

INT

Muestras de código

Ejemplo 1

En este ejemplo, se muestra un caso de número positivo.

math.floor(1.234568) = 1
Ejemplo 2

En este ejemplo, se muestra un caso de número negativo.

math.floor(0-1.234568) = -2
Ejemplo 3

En este ejemplo, se muestra un caso de cero.

math.floor(0.000000) = 0

math.geo_distance

Se admite en los siguientes sistemas operativos:
math.geo_distance(longitude1, latitude1, longitude2, latitude2))

Descripción

Devuelve la distancia entre dos ubicaciones geográficas (coordenadas) en metros. Devuelve -1 si las coordenadas no son válidas.

Tipos de datos de parámetros

FLOAT, FLOAT, FLOAT, FLOAT

Tipo de datos que se muestra

FLOAT

Muestras de código

Ejemplo 1

En el siguiente ejemplo, se devuelve la distancia cuando todos los parámetros son coordenadas válidas:

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

En el siguiente ejemplo, se muestra la distancia cuando uno de los parámetros es una coordenada truncada:

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

En el siguiente ejemplo, se devuelve -1 cuando uno de los parámetros es una coordenada no válida:

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

El siguiente ejemplo devuelve 0 cuando las coordenadas son las mismas:

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

math.is_increasing

Se admite en los siguientes sistemas operativos:
math.is_increasing(num1, num2, num3)

Descripción

Toma una lista de valores numéricos (números enteros o dobles) y devuelve True si los valores están en orden ascendente y False en caso contrario.

Tipos de datos de parámetros

INT|FLOAT, INT|FLOAT, INT|FLOAT

Tipo de datos que se muestra

BOOL

Muestras de código

Ejemplo 1

En este ejemplo, se incluyen valores similares a marcas de tiempo en segundos.

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

En este ejemplo, se incluyen un valor double negativo, un valor INT64 cero y un valor INT64 positivo.

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

En este ejemplo, se incluyen un valor de doble negativo, un valor de INT64 cero y un valor de INT64 negativo.

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

En este ejemplo, se incluyen dos números de punto flotante negativos de doble precisión y un valor INT64 de cero.

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

Este ejemplo incluye un número doble negativo y dos valores iguales.

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

math.log

Se admite en los siguientes sistemas operativos:
math.log(numericExpression)

Descripción

Devuelve el valor del logaritmo natural de una expresión de número entero o de punto flotante.

Tipos de datos de parámetros

NUMBER

Tipo de datos que se muestra

NUMBER

Muestras de código

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

math.pow

Se admite en los siguientes sistemas operativos:
math.pow(base, exponent)

Descripción

Devuelve el valor del primer argumento elevado a la potencia del segundo argumento. Devuelve 0 en caso de desbordamiento.

Tipos de datos de parámetros

Base: INT|FLOAT Exponente: INT|FLOAT

Tipo de datos que se muestra

FLOAT

Muestras de código

Ejemplo 1

En este ejemplo, se muestra un caso de números enteros.

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

En este ejemplo, se muestra un caso base de fracción.

math.pow(2.200000, 3) // 10.648
Ejemplo 3

En este ejemplo, se muestra un caso de base y potencia de fracciones.

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

En este ejemplo, se muestra un caso de potencia negativa.

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

En este ejemplo, se muestra un caso de potencia fraccionaria.

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

En este ejemplo, se muestra un caso base negativo.

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

En este ejemplo, se muestra un caso base cero.

math.pow(0, 3) // 0
Ejemplo 8

En este ejemplo, se muestra un caso de potencia cero.

math.pow(9223372036854775807, 0) // 1
Ejemplo 9

En este ejemplo, se muestra un caso base grande.

math.pow(9223372036854775807, 1.200000) // 57262152889751593549824

math.random

Se admite en los siguientes sistemas operativos:
math.random()

Descripción

Genera un valor seudoaleatorio de tipo DOUBLE en el rango de [0, 1), el cual incluye 0 pero no 1.

Tipo de datos que se muestra

FLOAT

Muestras de código

En el siguiente ejemplo, se verifica si el valor aleatorio se encuentra en el rango [0, 1). none if(math.random() >= 0 and math.random() < 1) = true

math.round

Se admite en los siguientes sistemas operativos:
math.round(numericExpression, decimalPlaces)

Descripción

Devuelve un valor redondeado al número entero más cercano o a la cantidad de posiciones decimales especificada.

Tipos de datos de parámetros

NUMBER

Tipo de datos que se muestra

NUMBER

Muestras de código

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

Se admite en los siguientes sistemas operativos:
math.sqrt(number)

Descripción

Devuelve la raíz cuadrada del número especificado. Devuelve 0 en caso de números negativos.

Tipos de datos de parámetros

INT|FLOAT

Tipo de datos que se muestra

FLOAT

Muestras de código

Ejemplo 1

En este ejemplo, se devuelve la raíz cuadrada de un argumento int.

math.sqrt(3) = 1.732051
Ejemplo 2

En este ejemplo, se devuelve la raíz cuadrada de un argumento int negativo.

math.sqrt(-3) = 0.000000
Ejemplo 3

En este ejemplo, se devuelve la raíz cuadrada del argumento cero.

math.sqrt(0) = 0.000000
Ejemplo 4

En este ejemplo, se devuelve la raíz cuadrada de un argumento de número de punto flotante.

math.sqrt(9.223372) = 3.037000
Ejemplo 5

En este ejemplo, se muestra la raíz cuadrada de un argumento de número de punto flotante negativo.

math.sqrt(0-1.200000) = 0.000000

métricas

Se admite en los siguientes sistemas operativos:

Las funciones de métricas pueden agregar grandes cantidades de datos históricos. Puedes usarlo en tu regla con metrics.functionName() en la sección de resultados.

Para obtener más información, consulta Métricas de YARA-L.

net.ip_in_range_cidr

Se admite en los siguientes sistemas operativos:
net.ip_in_range_cidr(ipAddress, subnetworkRange)

Descripción

Devuelve true cuando la dirección IP proporcionada se encuentra dentro de la subred especificada.

Puedes usar YARA-L para buscar eventos de UDM en todas las direcciones IP de una subred con la instrucción net.ip_in_range_cidr(). Se admiten IPv4 e IPv6.

Para buscar en un rango de direcciones IP, especifica un campo de UDM de IP y un rango de CIDR. YARA-L puede controlar campos de direcciones IP tanto singulares como repetidos.

Para buscar en un rango de direcciones IP, especifica un campo de ip UDM y un rango de enrutamiento entre dominios sin clases (CIDR). YARA-L puede controlar campos de direcciones IP tanto singulares como repetidos.

Tipos de datos de parámetros

STRING, STRING

Tipo de datos que se muestra

BOOL

Muestras de código

Ejemplo 1

Ejemplo de IPv4:

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

Ejemplo de IPv6:

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

Para ver un ejemplo de regla que usa la instrucción net.ip_in_range_cidr(), consulta la regla de ejemplo en Evento único dentro de un rango de direcciones IP.

re.regex

Se admite en los siguientes sistemas operativos:

Puedes definir la coincidencia de expresiones regulares en YARA-L 2.0 con cualquiera de las siguientes sintaxis:

  • Uso de la sintaxis de YARA-L: Se relaciona con los eventos. A continuación, se muestra una representación genérica de esta sintaxis:

    $e.field = /regex/
    
  • Usando la sintaxis de YARA-L: Como una función que toma los siguientes parámetros:

    • Campo al que se aplica la expresión regular.
    • Expresión regular especificada como una cadena.

    A continuación, se muestra una representación genérica de esta sintaxis:

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

Descripción

Esta función devuelve true si la cadena contiene una subcadena que coincide con la expresión regular proporcionada. No es necesario agregar .* al principio ni al final de la expresión regular.

Notas
  • Para que coincida la cadena exacta o solo un prefijo o sufijo, incluye los caracteres de anclaje ^ (inicial) y $ (final) en la expresión regular. Por ejemplo, /^full$/ coincide exactamente con "full", mientras que /full/ podría coincidir con "fullest", "lawfull" y "joyfully".
  • Si el campo de UDM incluye caracteres de salto de línea, regexp solo coincide con la primera línea del campo de UDM. Para aplicar la coincidencia completa de los campos de UDM, agrega un (?s) a la expresión regular. Por ejemplo, reemplaza /.*allUDM.*/ por /(?s).*allUDM.*/.
  • Puedes usar el modificador nocase después de las cadenas para indicar que la búsqueda debe ignorar el uso de mayúsculas.

Tipos de datos de parámetros

STRING, STRING

Tipos de expresiones de parámetros

ANY, ANY

Tipo de datos que se muestra

BOOL

Muestras de código

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

re.capture

Se admite en los siguientes sistemas operativos:
re.capture(stringText, regex)

Descripción

Captura (extrae) datos de una cadena con el patrón de expresión regular proporcionado en el argumento.

Esta función toma dos argumentos:

  • stringText: Es la cadena original en la que se realizará la búsqueda.
  • regex: Es la expresión regular que indica el patrón que se debe buscar.

La expresión regular puede contener 0 o 1 grupos de captura entre paréntesis. Si la expresión regular contiene 0 grupos de captura, la función devuelve la primera substring coincidente completa. Si la expresión regular contiene 1 grupo de captura, devuelve la primera substring coincidente para el grupo de captura. Si se definen dos o más grupos de captura, se muestra un error del compilador.

Tipos de datos de parámetros

STRING, STRING

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

En este ejemplo, si $e.principal.hostname contiene "aaa1bbaa2", lo siguiente sería verdadero, ya que la función devuelve la primera instancia. Este ejemplo no tiene grupos de captura.

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

En este ejemplo, se captura todo lo que se encuentra después del símbolo @ en un correo electrónico. Si el campo $e.network.email.from es test@google.com, el ejemplo devuelve google.com. El siguiente ejemplo contiene un grupo de captura.

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

Si la expresión regular no coincide con ninguna substring del texto, la función devuelve una cadena vacía. Puedes omitir los eventos en los que no se produce ninguna coincidencia excluyendo la cadena vacía, lo que es especialmente importante cuando usas re.capture() con una desigualdad:

// 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

Se admite en los siguientes sistemas operativos:
re.replace(stringText, replaceRegex, replacementText)

Descripción

Realiza un reemplazo de expresión regular.

Esta función toma tres argumentos:

  • stringText: Es la cadena original.
  • replaceRegex: Es la expresión regular que indica el patrón que se debe buscar.
  • replacementText: Es el texto que se insertará en cada coincidencia.

Devuelve una cadena nueva derivada de la stringText original, en la que todas las subcadenas que coinciden con el patrón en replaceRegex se reemplazan por el valor en replacementText. Puedes usar dígitos con escape de barras invertidas (\1 a \9) dentro de replacementText para insertar texto que coincida con el grupo entre paréntesis correspondiente en el patrón replaceRegex. Usa \0 para hacer referencia a todo el texto coincidente.

La función reemplaza las coincidencias no superpuestas y priorizará el reemplazo de la primera ocurrencia que se encuentre. Por ejemplo, re.replace("banana", "ana", "111") devuelve la cadena "b111na".

Tipos de datos de parámetros

STRING, STRING, STRING

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

En este ejemplo, se captura todo lo que se encuentra después del símbolo @ en un correo electrónico, se reemplaza com por org y, luego, se muestra el resultado. Observa el uso de funciones anidadas.

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

En este ejemplo, se usan dígitos con escape de barra invertida en el argumento replacementText para hacer referencia a coincidencias con el patrón 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"
                     )
Ejemplo 3

Ten en cuenta los siguientes casos cuando trabajes con cadenas vacías y re.replace():

Usa una cadena vacía como 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")

Para reemplazar una cadena vacía, puedes usar "^$" como 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

Se admite en los siguientes sistemas operativos:
optimization.sample_rate(byteOrString, rateNumerator, rateDenominator)

Descripción

Esta función determina si se debe incluir un evento según una estrategia de muestreo determinística. Esta función devuelve lo siguiente:

  • true para una fracción de los valores de entrada, equivalente a (rateNumerator / rateDenominator), lo que indica que el evento se debe incluir en la muestra.
  • false, que indica que el evento no se debe incluir en la muestra.

Esta función es útil para situaciones de optimización en las que solo deseas procesar un subconjunto de eventos. Equivale a:

hash.fingerprint2011(byteOrString) % rateDenominator < rateNumerator

Tipos de datos de parámetros

  • byteOrString: Expresión que se evalúa como BYTE o STRING.
  • rateNumerator: "INT"
  • rateDenominator: 'INT'

Tipo de datos que se muestra

BOOL

Muestra de código

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

Se admite en los siguientes sistemas operativos:
strings.base64_decode(encodedString)

Descripción

Devuelve una cadena que contiene la versión decodificada en base64 de la cadena codificada.

Esta función toma una cadena codificada en base64 como argumento. Si encodedString no es una cadena codificada en base64 válida, la función devuelve encodedString sin cambios.

Tipos de datos de parámetros

STRING

Tipo de datos que se muestra

STRING

Muestras de código

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

strings.coalesce

Se admite en los siguientes sistemas operativos:
strings.coalesce(a, b, c, ...)

Descripción

Esta función toma una cantidad ilimitada de argumentos y devuelve el valor de la primera expresión que no se evalúa como una cadena vacía (por ejemplo, "valor distinto de cero"). Si todos los argumentos se evalúan como una cadena vacía, la llamada a la función devuelve una cadena vacía.

Los argumentos pueden ser literales, campos de eventos o llamadas a funciones. Todos los argumentos deben ser del tipo STRING. Si algún argumento es un campo de evento, los atributos deben ser del mismo evento.

Tipos de datos de parámetros

STRING

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

En el siguiente ejemplo, se incluyen variables de cadena como argumentos. La condición se evalúa como verdadera cuando (1) $e.network.email.from es suspicious@gmail.com o (2) $e.network.email.from está vacío y $e.network.email.to es suspicious@gmail.com.

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

En el siguiente ejemplo, se llama a la función coalesce con más de dos argumentos. Esta condición compara la primera dirección IP no nula del evento $e con los valores de la lista de referencia ip_watchlist. El orden en que se fusionan los argumentos en esta llamada es el mismo en que se enumeran en la condición de la regla:

  1. Primero se evalúa $e.principal.ip.
  2. A continuación, se evalúa $e.src.ip.
  3. A continuación, se evalúa $e.target.ip.
  4. Por último, la cadena "No IP" se devuelve como un valor predeterminado si los campos ip anteriores no están establecidos.
strings.coalesce($e.principal.ip, $e.src.ip, $e.target.ip, "No IP") in %ip_watchlist
Ejemplo 3

En el siguiente ejemplo, se intenta fusionar principal.hostname del evento $e1 y el evento $e2. Mostrará un error del compilador porque los argumentos son variables de eventos diferentes.

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

strings.concat

Se admite en los siguientes sistemas operativos:
strings.concat(a, b, c, ...)

Descripción

Devuelve la concatenación de una cantidad ilimitada de elementos, cada uno de los cuales puede ser una cadena, un número entero o un número de punto flotante.

Si algún argumento es un campo de evento, los atributos deben ser del mismo evento.

Tipos de datos de parámetros

STRING, FLOAT, INT

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

En el siguiente ejemplo, se incluyen una variable de cadena y una variable de número entero como argumentos. Tanto principal.hostname como principal.port provienen del mismo evento, $e, y se concatenan para devolver una cadena.

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

En el siguiente ejemplo, se incluyen una variable de cadena y un literal de cadena como argumentos.

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

En el siguiente ejemplo, se incluyen una variable de cadena y un literal de número de punto flotante como argumentos. Cuando se representan como cadenas, los números de punto flotante que son números enteros se formatean sin el punto decimal (por ejemplo, 1.0 se representa como "1"). Además, los números de punto flotante que superan los dieciséis dígitos decimales se truncan en el decimosexto lugar decimal.

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

En el siguiente ejemplo, se incluyen una variable de cadena, un literal de cadena, una variable de número entero y un literal de número de punto flotante como argumentos. Todas las variables provienen del mismo evento, $e, y se concatenan con los literales para devolver una cadena.

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

En el siguiente ejemplo, se intenta concatenar principal.port del evento $e1 con principal.hostname del evento $e2. Mostrará un error del compilador porque los argumentos son variables de eventos diferentes.

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

strings.contains

Se admite en los siguientes sistemas operativos:
strings.contains( str, substr )

Descripción

Devuelve verdadero si una cadena determinada contiene la subcadena especificada. De lo contrario, devuelve false.

Tipos de datos de parámetros

STRING, STRING

Tipo de datos que se muestra

BOOL

Muestras de código

Ejemplo 1

Este ejemplo devuelve verdadero porque la cadena tiene una subcadena "is".

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

Este ejemplo devuelve "false" porque la cadena no tiene la subcadena "that".

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

strings.count_substrings

Se admite en los siguientes sistemas operativos:
strings.count_substrings(string_to_search_in, substring_to_count)

Descripción

Cuando se le proporciona una cadena y una subcadena, devuelve un valor int64 del recuento de ocurrencias no superpuestas de la subcadena dentro de la cadena.

Tipos de datos de parámetros

STRING, STRING

Tipo de datos que se muestra

INT

Muestras de código

En esta sección, se incluyen ejemplos que calculan la cantidad de veces que aparece una subcadena en una cadena determinada.

Ejemplo 1

En este ejemplo, se usa una cadena no nula y un carácter de subcadena único no nulo.

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

En este ejemplo, se usa una cadena no nula y una subcadena no nula de más de un carácter.

strings.count_substrings("str", "str") = 1
Ejemplo 3

En este ejemplo, se usa una cadena no nula y una subcadena vacía.

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

En este ejemplo, se usa una cadena vacía y una subcadena no nula de más de un carácter.

strings.count_substrings("", "str") = 0
Ejemplo 5

En este ejemplo, se usan una cadena vacía y una subcadena vacía.

strings.count_substrings("", "") = 0
Ejemplo 6

En este ejemplo, se usa una cadena no nula y una subcadena no nula que tiene más de un carácter y más de una ocurrencia.

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

En este ejemplo, se usa una cadena no nula y una subcadena no nula que tiene más de un carácter y más de una ocurrencia. Destaca la limitación con las ocurrencias de subcadenas superpuestas

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

strings.ends_with

Se admite en los siguientes sistemas operativos:
strings.ends_with(value, suffix)

Descripción

La función toma dos cadenas (value, suffix). Devuelve verdadero si el sufijo no está vacío y se encuentra al final del valor.

Tipos de datos de parámetros

STRING, STRING

Tipo de datos que se muestra

BOOL

Muestras de código

En los siguientes ejemplos de código, se ilustran algunas de las formas en que puedes usar la función strings.ends_with.

Ejemplo: Devuelve verdadero

Devuelve verdadero cuando el sufijo se encuentra al final del valor.

strings.ends_with(target.hostname, "com") = true
Ejemplo: Devuelve falso

Devuelve falso cuando el sufijo no está al final del valor.

strings.ends_with(target.hostname, "com") = false
Ejemplo: Devuelve "false" cuando son idénticos

Devuelve falso cuando el sufijo y el valor son idénticos.

target.hostname != "example.com"
strings.ends_with("str", "str") = true
Ejemplo: Devuelve falso cuando el sufijo está vacío

Devuelve falso cuando el sufijo es una cadena vacía.

target.hostname != "example.com"
strings.ends_with("str", "") = false
Ejemplo: Devuelve falso cuando el valor está vacío

Devuelve falso cuando el valor es una cadena vacía.

target.hostname != "example.com"
strings.ends_with("", "str") = false
Ejemplo: Muestra falso cuando el sufijo y el valor están vacíos

Devuelve falso cuando el sufijo y el valor son cadenas vacías.

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

strings.extract_domain

Se admite en los siguientes sistemas operativos:
strings.extract_domain(url_string)

Descripción

Extrae el dominio de una cadena.

Tipos de datos de parámetros

STRING

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

En este ejemplo, se muestra una cadena vacía.

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

Cadena aleatoria, no es una URL

strings.extract_domain("1234") = ""
Ejemplo 3

Varias barras inversas

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

Los caracteres que no son alfabéticos se controlan correctamente.

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

Cómo controlar URIs

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

Varios caracteres antes de la URL real

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

Caracteres especiales en el URI #

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

caracteres especiales en la URL #

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

caso de prueba positivo

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

strings.extract_hostname

Se admite en los siguientes sistemas operativos:
strings.extract_hostname(string)

Descripción

Extrae el nombre de host de una cadena. Esta función distingue mayúsculas de minúsculas.

Tipos de datos de parámetros

STRING

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

En este ejemplo, se devuelve una cadena vacía.

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

Cadena aleatoria, no es una URL

strings.extract_hostname("1234") = "1234"
Ejemplo 3

Varias barras inversas

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

Los caracteres que no son en inglés se controlan con facilidad.

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

Cómo controlar URIs

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

Varios caracteres antes de la URL real

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

Caracteres especiales en el URI #

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

caracteres especiales en la URL #

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

strings.from_base64

Se admite en los siguientes sistemas operativos:
strings.from_base64(base64_encoded_string)

Descripción

La función convierte un valor STRING codificado en base64 en un valor BYTES binario sin procesar. Las llamadas a funciones con valores que no se pueden convertir devuelven un BYTES vacío de forma predeterminada.

Tipos de datos de parámetros

STRING

Tipo de datos que se muestra

BYTES

Muestras de código

Conversión de cadenas codificadas en Base64 a bytes

La función convierte una cadena codificada en base64 en su representación de bytes binarios sin procesar.

strings.from_base64("AAAAAG+OxVhtAm+d2sVuny/hW4oAAAAAAQAAAM0AAAA=") = b'000000006f8ec5586d026f9ddac56e9f2fe15b8a0000000001000000cd000000
Conversión fallida (el valor predeterminado es bytes vacíos)

Si el valor proporcionado no es válido, la función se establece de forma predeterminada en bytes vacíos.

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

strings.from_hex

Se admite en los siguientes sistemas operativos:
strings.from_hex(hex_string)

Descripción

Devuelve los bytes asociados con la cadena hexadecimal determinada.

Tipos de datos de parámetros

STRING

Tipo de datos que se muestra

BYTES

Muestras de código

Obtiene los bytes asociados con una cadena hexadecimal determinada.

Ejemplo 1

En este ejemplo, se muestran las conversiones de caracteres no hexadecimales.

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

En este ejemplo, se muestra una entrada con una cadena vacía.

strings.from_hex("") // returns empty bytes
Ejemplo 3

En este ejemplo, se muestra la conversión de cadenas hexadecimales.

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

En este ejemplo, se muestra la conversión de caracteres no ASCII.

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

strings.ltrim

Se admite en los siguientes sistemas operativos:
strings.ltrim(string_to_trim, cutset)

Descripción

Quita los espacios en blanco iniciales de una cadena determinada. Esta función quita los caracteres iniciales presentes en ese conjunto de caracteres.

Tipos de datos de parámetros

STRING, STRING

Tipo de datos que se muestra

STRING

Muestras de código

A continuación, se incluyen ejemplos de casos de uso.

Ejemplo 1

En este ejemplo, se usan el mismo primer y segundo argumento.

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

En este ejemplo, se usa una cadena vacía como segundo argumento.

strings.ltrim("str", "") = "str"
Ejemplo 3

En este ejemplo, se usa una cadena vacía como primer argumento y una cadena como segundo argumento.

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

En este ejemplo, se usan cadenas que contienen espacios en blanco y una cadena como segundo argumento.

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

strings.reverse

Se admite en los siguientes sistemas operativos:
strings.reverse(STRING)

Descripción

Devuelve una cadena que es la inversa de la cadena de entrada.

Tipos de datos de parámetros

STRING

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

En el siguiente ejemplo, se pasa una cadena corta.

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

En el siguiente ejemplo, se pasa una cadena vacía.

strings.reverse("") = ""
Ejemplo 3

En el siguiente ejemplo, se pasa un palíndromo.

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

strings.rtrim

Se admite en los siguientes sistemas operativos:
strings.rtrim(string_to_trim, cutset)

Descripción

Quita los espacios en blanco finales de una cadena determinada. Quita los caracteres finales que están presentes en ese conjunto de corte.

Tipos de datos de parámetros

STRING, STRING

Tipo de datos que se muestra

STRING

Muestras de código

A continuación, se incluyen ejemplos de casos de uso.

Ejemplo 1

En el siguiente ejemplo, se pasa la misma cadena como el primer y el segundo argumento.

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

En el siguiente ejemplo, se pasa una cadena vacía como segundo argumento.

strings.rtrim("str", "") = "str"
Ejemplo 3

En el siguiente ejemplo, se pasa una cadena vacía como primer argumento y una cadena no vacía como segundo argumento.

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

En el siguiente ejemplo, se pasa una cadena que contiene espacios en blanco como el primer argumento y una cadena no vacía como el segundo argumento.

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

strings.split

Se admite en los siguientes sistemas operativos:
strings.split(string, delimiter)

Descripción

Divide el valor de cadena con el argumento de delimitador. El delimitador predeterminado es una coma (,).

Tipos de datos de parámetros

STRING, STRING

Tipo de datos que se muestra

ARRAY_STRINGS

Muestras de código

En los siguientes ejemplos de código, se ilustran algunas de las formas en que puedes usar la función strings.split.

Ejemplo: Divide una cadena con el valor predeterminado

En el siguiente ejemplo, se divide la cadena con el delimitador predeterminado, que es una coma.

strings.split("a,b,c,d") = ["a", "b", "c", "d"]
Ejemplo: Divide la cadena con dos puntos

En el siguiente ejemplo, la cadena se divide en cada dos puntos (:).

strings.split("a:b:c:d", ":") = ["a", "b", "c", "d"]
Ejemplo: Falta el delimitador

En el siguiente ejemplo, falta el delimitador en el valor de la cadena.

strings.split("a,b,c,d", ":") = ["a,b,c,d"]
Ejemplo: Delimitador vacío

En el siguiente ejemplo, se muestra una cadena de delimitador vacía.

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

strings.to_lower

Se admite en los siguientes sistemas operativos:
strings.to_lower(stringText)

Descripción

Esta función toma una cadena de entrada y devuelve una cadena después de cambiar todos los caracteres a minúsculas.

Tipos de datos de parámetros

STRING

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

En el siguiente ejemplo, se devuelve true.

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

strings.to_upper

Se admite en los siguientes sistemas operativos:
strings.to_upper(string_val)

Descripción

Devuelve la cadena original con todos los caracteres alfabéticos en mayúsculas.

Tipos de datos de parámetros

STRING

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

En el siguiente ejemplo, se devuelve el argumento proporcionado en mayúsculas.

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

strings.trim

Se admite en los siguientes sistemas operativos:
strings.trim(string_to_trim, cutset)

Descripción

Recorta los espacios en blanco iniciales y finales de una cadena determinada. También quita los caracteres no deseados (especificados por el argumento cutset) de la cadena de entrada.

Tipos de datos de parámetros

STRING, STRING

Tipo de datos que se muestra

STRING

Muestras de código

A continuación, se incluyen ejemplos de casos de uso.

Ejemplo 1

En el siguiente ejemplo, se pasa la misma cadena como la cadena de entrada y el conjunto de corte, lo que genera una cadena vacía.

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

En el siguiente ejemplo, se pasa una cadena vacía como el conjunto de corte, lo que genera la cadena original str porque no se especifican caracteres en el conjunto de corte para quitar.

strings.trim("str", "") = "str"
Ejemplo 3

En el siguiente ejemplo, la función genera una cadena vacía porque la cadena de entrada ya está vacía y no hay caracteres para quitar.

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

En el siguiente ejemplo, la función genera str porque la función trim quita lo siguiente:

  • Espacio en blanco final en "a aastraa aa "
  • Los caracteres especificados en el conjunto de corte (espacio, a)
strings.trim("a aastraa aa ", " a") = "str"

strings.url_decode

Se admite en los siguientes sistemas operativos:
strings.url_decode(url_string)

Descripción

Dada una cadena de URL, decodifica los caracteres de escape y controla los caracteres UTF-8 que se codificaron. Devuelve una cadena vacía si falla la decodificación.

Tipos de datos de parámetros

STRING

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

En este ejemplo, se muestra un caso de prueba positivo.

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

En este ejemplo, se muestra un caso de cadena vacía.

strings.url_decode("") // ""
Ejemplo 3

En este ejemplo, se muestra el manejo de caracteres no alfabéticos.

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

En este ejemplo, se muestra una muestra de decodificación de 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

Se admite en los siguientes sistemas operativos:
timestamp.as_unix_seconds(timestamp [, time_zone])

Descripción

Esta función devuelve un número entero que representa la cantidad de segundos transcurridos desde un ciclo de entrenamiento de Unix para la cadena de marca de tiempo determinada.

  • timestamp es una cadena que representa una marca de tiempo de época válida. El formato debe ser %F %T.
  • time_zone es opcional y es una cadena que representa una zona horaria. Si se omite, el valor predeterminado es GMT. Puedes especificar zonas horarias con literales de cadena. Las opciones son las siguientes:

Estos son ejemplos de especificadores de time_zone válidos que puedes pasar como segundo argumento a las funciones de extracción de tiempo:

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

Tipos de datos de parámetros

STRING, STRING

Tipo de datos que se muestra

INT

Muestras de código

Ejemplo 1

Marca de tiempo de época válida

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

Marca de tiempo de época válida con la zona horaria America/New_York

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

timestamp.current_seconds

Se admite en los siguientes sistemas operativos:
timestamp.current_seconds()

Descripción

Devuelve un número entero que representa la hora actual en segundos de Unix. Esta fecha es aproximadamente igual a la marca de tiempo de detección y se basa en el momento en que se ejecuta la regla. Esta función es sinónimo de la función timestamp.now().

Tipos de datos de parámetros

NONE

Tipo de datos que se muestra

INT

Muestras de código

Ejemplo 1

En el siguiente ejemplo, se muestra true si el certificado venció hace más de 24 horas. Calcula la diferencia de tiempo restando los segundos Unix actuales y, luego, realiza la comparación con un operador mayor que.

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

timestamp.get_date

Se admite en los siguientes sistemas operativos:
timestamp.get_date(unix_seconds [, time_zone])

Descripción

Esta función devuelve una cadena con el formato YYYY-MM-DD, que representa el día en el que se encuentra una marca de tiempo.

  • unix_seconds es un número entero que representa la cantidad de segundos transcurridos desde la época de Unix, como $e.metadata.event_timestamp.seconds, o un marcador de posición que contiene ese valor.
  • time_zone es opcional y es una cadena que representa una zona horaria. Si se omite, el valor predeterminado es "GMT". Puedes especificar zonas horarias con literales de cadena. Las opciones son las siguientes:
    • Nombre de la base de datos de la zona horaria, por ejemplo, "America/Los_Angeles". Para obtener más información, consulta la columna "Nombre de la base de datos de TZ" de esta página.
    • Es el desplazamiento de zona horaria desde UTC, en el formato(+|-)H[H][:M[M]], por ejemplo, "-08:00".

A continuación, se muestran ejemplos de especificadores de time_zone válidos que puedes pasar como segundo argumento a las funciones de extracción de tiempo:

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

Tipos de datos de parámetros

INT, STRING

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

En este ejemplo, se omite el argumento time_zone, por lo que se establece de forma predeterminada en "GMT".

$ts = $e.metadata.collected_timestamp.seconds

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

En este ejemplo, se usa un literal de cadena para definir el time_zone.

$ts = $e.metadata.collected_timestamp.seconds

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

timestamp.get_minute

Se admite en los siguientes sistemas operativos:
timestamp.get_minute(unix_seconds [, time_zone])

Descripción

Esta función devuelve un número entero en el rango [0, 59] que representa el minuto.

  • unix_seconds es un número entero que representa la cantidad de segundos transcurridos desde la época de Unix, como $e.metadata.event_timestamp.seconds, o un marcador de posición que contiene ese valor.
  • time_zone es opcional y es una cadena que representa una zona horaria. Si se omite, el valor predeterminado es "GMT". Puedes especificar zonas horarias con literales de cadena. Las opciones son las siguientes:
    • Nombre de la base de datos de la zona horaria, por ejemplo, "America/Los_Angeles". Para obtener más información, consulta la columna "Nombre de la base de datos de TZ" de esta página.
    • Es el desplazamiento de zona horaria desde UTC, en el formato(+|-)H[H][:M[M]], por ejemplo, "-08:00".

Estos son ejemplos de especificadores de time_zone válidos que puedes pasar como segundo argumento a las funciones de extracción de tiempo:

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

Tipos de datos de parámetros

INT, STRING

Tipo de datos que se muestra

INT

Muestras de código

Ejemplo 1

En este ejemplo, se omite el argumento time_zone, por lo que se establece de forma predeterminada en "GMT".

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_hour($ts) = 15
Ejemplo 2

En este ejemplo, se usa un literal de cadena para definir el time_zone.

$ts = $e.metadata.collected_timestamp.seconds

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

timestamp.get_hour

Se admite en los siguientes sistemas operativos:
timestamp.get_hour(unix_seconds [, time_zone])

Descripción

Esta función devuelve un número entero en el rango [0, 23] que representa la hora.

  • unix_seconds es un número entero que representa la cantidad de segundos transcurridos desde la época de Unix, como $e.metadata.event_timestamp.seconds, o un marcador de posición que contiene ese valor.
  • time_zone es opcional y es una cadena que representa una zona horaria. Si se omite, el valor predeterminado es "GMT". Puedes especificar zonas horarias con literales de cadena. Las opciones son las siguientes:
    • Nombre de la base de datos de la zona horaria, por ejemplo, "America/Los_Angeles". Para obtener más información, consulta la columna "Nombre de la base de datos de TZ" de esta página.
    • Es el desplazamiento de zona horaria desde UTC, en el formato(+|-)H[H][:M[M]], por ejemplo, "-08:00".

Estos son ejemplos de especificadores de time_zone válidos que puedes pasar como segundo argumento a las funciones de extracción de tiempo:

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

Tipos de datos de parámetros

INT, STRING

Tipo de datos que se muestra

INT

Muestras de código

Ejemplo 1

En este ejemplo, se omite el argumento time_zone, por lo que se establece de forma predeterminada en "GMT".

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_hour($ts) = 15
Ejemplo 2

En este ejemplo, se usa un literal de cadena para definir el time_zone.

$ts = $e.metadata.collected_timestamp.seconds

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

timestamp.get_day_of_week

Se admite en los siguientes sistemas operativos:
timestamp.get_day_of_week(unix_seconds [, time_zone])

Descripción

Esta función devuelve un número entero en el rango [1, 7] que representa el día de la semana, comenzando por el domingo. Por ejemplo, 1 = domingo y 2 = lunes.

  • unix_seconds es un número entero que representa la cantidad de segundos transcurridos desde la época de Unix, como $e.metadata.event_timestamp.seconds, o un marcador de posición que contiene ese valor.
  • time_zone es opcional y es una cadena que representa una zona horaria. Si se omite, el valor predeterminado es "GMT". Puedes especificar zonas horarias con literales de cadena. Las opciones son las siguientes:
    • Nombre de la base de datos de la zona horaria, por ejemplo, "America/Los_Angeles". Para obtener más información, consulta la columna "Nombre de la base de datos de TZ" de esta página.
    • Es el desplazamiento de zona horaria desde UTC, en el formato(+|-)H[H][:M[M]], por ejemplo, "-08:00".

A continuación, se muestran ejemplos de especificadores de time_zone válidos que puedes pasar como segundo argumento a las funciones de extracción de tiempo:

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

Tipos de datos de parámetros

INT, STRING

Tipo de datos que se muestra

INT

Muestras de código

Ejemplo 1

En este ejemplo, se omite el argumento time_zone, por lo que se establece de forma predeterminada en "GMT".

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_day_of_week($ts) = 6
Ejemplo 2

En este ejemplo, se usa un literal de cadena para definir el time_zone.

$ts = $e.metadata.collected_timestamp.seconds

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

timestamp.get_timestamp

Se admite en los siguientes sistemas operativos:
timestamp.get_timestamp(unix_seconds, optional timestamp_format/time_granularity, optional timezone)

Descripción

Esta función devuelve una cadena con el formato YYYY-MM-DD, que representa el día en el que se encuentra una marca de tiempo.

  • unix_seconds es un número entero que representa la cantidad de segundos transcurridos desde la época de Unix, como $e.metadata.event_timestamp.seconds, o un marcador de posición que contiene ese valor.
  • timestamp_format es opcional y es una cadena que representa el formato de la marca de tiempo. Si se omite, el valor predeterminado es %F %T. Puedes especificar el formato con una cadena de formato de fecha y hora o con una de las siguientes granularidades de tiempo: SECOND, MINUTE, HOUR, DATE, WEEK, MONTH o YEAR. Para obtener más opciones de formato, consulta Elementos de formato para partes de fecha y hora
  • time_zone es opcional y es una cadena que representa una zona horaria. Si se omite, el valor predeterminado es GMT. Puedes especificar zonas horarias con literales de cadena. Las opciones son las siguientes:
    • Nombre de la base de datos de zona horaria (TZ) de IANA, por ejemplo, America/Los_Angeles. Para obtener más información, consulta la lista de zonas horarias de la base de datos tz en Wikipedia.
    • Es el desplazamiento de zona horaria desde UTC, en el formato (+|-)H[H][:M[M]], por ejemplo, "-08:00".

Estos son ejemplos de especificadores de time_zone válidos que puedes pasar como segundo argumento a las funciones de extracción de tiempo:

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

Tipos de datos de parámetros

INT, STRING, STRING

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

En este ejemplo, se omite el argumento time_zone, por lo que se establece de forma predeterminada en GMT.

$ts = $e.metadata.collected_timestamp.seconds

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

En este ejemplo, se usa un literal de cadena para definir el time_zone.

$ts = $e.metadata.collected_timestamp.seconds

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

En este ejemplo, se usa un literal de cadena para definir el timestamp_format.

$ts = $e.metadata.collected_timestamp.seconds

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

En este ejemplo, se da formato a una marca de tiempo de Unix como una cadena con una granularidad de segundos.

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

En este ejemplo, se da formato a una marca de tiempo de Unix como una cadena con un nivel de detalle por minuto.

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

En este ejemplo, se da formato a una marca de tiempo de Unix como una cadena con una granularidad de horas.

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

En este ejemplo, se le da formato a una marca de tiempo Unix como una cadena con granularidad diaria.

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

En este ejemplo, se da formato a una marca de tiempo de Unix como una cadena con una granularidad semanal.

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

En este ejemplo, se da formato a una marca de tiempo de Unix como una cadena con una granularidad mensual.

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

En este ejemplo, se da formato a una marca de tiempo de Unix como una cadena con una granularidad anual.

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

timestamp.get_week

Se admite en los siguientes sistemas operativos:
timestamp.get_week(unix_seconds [, time_zone])

Descripción

Esta función devuelve un número entero en el rango [0, 53] que representa la semana del año. Las semanas comienzan el domingo. Las fechas anteriores al primer domingo del año están en la semana 0.

  • unix_seconds es un número entero que representa la cantidad de segundos transcurridos desde la época de Unix, como $e.metadata.event_timestamp.seconds, o un marcador de posición que contiene ese valor.
  • time_zone es opcional y es una cadena que representa una zona horaria. Si se omite, el valor predeterminado es "GMT". Puedes especificar zonas horarias con literales de cadena. Las opciones son las siguientes:
    • Nombre de la base de datos de la zona horaria, por ejemplo, "America/Los_Angeles". Para obtener más información, consulta la columna "Nombre de la base de datos de TZ" de esta página.
    • Es el desplazamiento de zona horaria desde UTC, en el formato(+|-)H[H][:M[M]], por ejemplo, "-08:00".

Estos son ejemplos de especificadores de time_zone válidos que puedes pasar como segundo argumento a las funciones de extracción de tiempo:

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

Tipos de datos de parámetros

INT, STRING

Tipo de datos que se muestra

INT

Muestras de código

Ejemplo 1

En este ejemplo, se omite el argumento time_zone, por lo que se establece de forma predeterminada en "GMT".

$ts = $e.metadata.collected_timestamp.seconds

timestamp.get_week($ts) = 0
Ejemplo 2

En este ejemplo, se usa un literal de cadena para definir el time_zone.

$ts = $e.metadata.collected_timestamp.seconds

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

timestamp.now

Se admite en los siguientes sistemas operativos:
timestamp.now()

Descripción

Devuelve la cantidad de segundos desde 1970-01-01 00:00:00 UTC. También se conoce como hora de la época de Unix.

Tipo de datos que se muestra

INT

Muestras de código

Ejemplo 1

En el siguiente ejemplo, se devuelve una marca de tiempo para el código ejecutado el 22 de mayo de 2024 a las 18:16:59.

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

window.avg

Se admite en los siguientes sistemas operativos:
window.avg(numeric_values [, should_ignore_zero_values])

Descripción

Devuelve el promedio de los valores de entrada (que pueden ser números enteros o números de punto flotante). Si se configura el segundo argumento opcional como verdadero, se ignoran los valores cero.

Tipos de datos de parámetros

INT|FLOAT

Tipo de datos que se muestra

FLOAT

Muestras de código

Ejemplo 1

En este ejemplo, se muestra el promedio de números enteros.

// 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
Ejemplo 2

En este ejemplo, se muestra el promedio de flotación.

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
Ejemplo 3

Promedio de entrada negativo

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
Ejemplo 4

0 devoluciones 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
Ejemplo 5

Se ignoran los valores 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

Se admite en los siguientes sistemas operativos:
window.first(values_to_sort_by, values_to_return)

Descripción

Esta función de agregación devuelve un valor de cadena derivado de un evento con el valor int correlacionado más bajo en la ventana de coincidencia. Un ejemplo de caso de uso es obtener el ID de usuario del evento con la marca de tiempo más baja en el período de correlación (el evento más antiguo).

Tipos de datos de parámetros

INT, STRING

Tipo de datos que se muestra

STRING

Muestras de código

Obtén un valor de cadena derivado de un evento con el valor int correlacionado más bajo en la ventana de coincidencia.

// 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

Se admite en los siguientes sistemas operativos:
window.last(values_to_sort_by, values_to_return)

Descripción

Esta función de agregación devuelve un valor de cadena derivado de un evento con el valor int correlacionado más alto en la ventana de coincidencia. Un ejemplo de caso de uso es obtener el ID de usuario del evento con la marca de tiempo más baja en la ventana de coincidencia (marca de tiempo más alta).

Tipos de datos de parámetros

INT, STRING

Tipo de datos que se muestra

STRING

Muestras de código

Obtén un valor de cadena derivado de un evento con el valor int correlacionado más alto en la ventana de coincidencia.

// 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

Se admite en los siguientes sistemas operativos:
window.median(numeric_values, should_ignore_zero_values)

Descripción

Devuelve la mediana de los valores de entrada. Si hay 2 valores de mediana, solo se elegirá 1 de forma no determinística como valor de devolución.

Tipos de datos de parámetros

INT|FLOAT, BOOL

Tipo de datos que se muestra

FLOAT

Muestras de código

Ejemplo 1

En este ejemplo, se devuelve la mediana cuando los valores de entrada no son cero.

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
}
Ejemplo 2

En este ejemplo, se devuelve la mediana cuando la entrada incluye algunos valores cero que no se deben ignorar.

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
}
Ejemplo 3

En este ejemplo, se devuelve la mediana cuando la entrada incluye algunos valores cero que se deben ignorar.

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
}
Ejemplo 4

En este ejemplo, se devuelve la mediana cuando la entrada incluye todos los valores cero que se deben ignorar.

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
}
Ejemplo 5

En este ejemplo, se muestra que, cuando hay varias medianas, solo se devuelve una.

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

Se admite en los siguientes sistemas operativos:
window.mode(values)

Descripción

Devuelve la moda de los valores de entrada. En caso de que haya varios valores de modo posibles, solo se elegirá uno de ellos de forma no determinística como valor de devolución.

Tipos de datos de parámetros

INT|FLOAT|STRING

Tipo de datos que se muestra

STRING

Muestras de código

Ejemplo 1

Obtiene la moda de los valores en la ventana de coincidencia.

// 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

Se admite en los siguientes sistemas operativos:
window.range(numeric_values, optional should_ignore_zero_values)

Descripción

Devuelve el rango de los valores de entrada encontrados (mínimo y máximo incluidos). Cada valor puede ser un número entero o de punto flotante. Si se configura el segundo argumento opcional como verdadero, se ignoran los valores cero.

Tipos de datos de parámetros

INT|FLOAT, BOOL

Tipo de datos que se muestra

ARRAY_FLOATS

Muestras de código

En los siguientes ejemplos de código, se ilustran algunas de las formas en que puedes usar la función window.range.

Ejemplo: Número entero mínimo y máximo

En este ejemplo, se muestran los valores mínimo y máximo de números enteros.

window.range([1, 2, 3, 4], false) = [1.000000, 4.000000]
Ejemplo: Punto flotante mínimo y máximo

En este ejemplo, se muestran los valores de punto flotante mínimo y máximo.

window.range([1.100000, 39.400000, 2.400000], false) = [1.100000, 39.400000]
Ejemplo: Número entero negativo mínimo y máximo

En este ejemplo, se muestran los valores mínimo y máximo de números enteros negativos.

window.range([-1.100000, 1.100000, 0.000000, 2.400000], false) = [-1.100000, 2.400000]
Ejemplo: Se ignoró el valor 0

En este ejemplo, se muestra cómo se ignoran los valores 0 cuando configuras el segundo parámetro.

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

window.stddev

Se admite en los siguientes sistemas operativos:
window.stddev(numeric_values)

Descripción

Devuelve la desviación estándar de los valores de entrada en una ventana de coincidencia.

Tipos de datos de parámetros

INT|FLOAT

Tipo de datos que se muestra

FLOAT

Muestras de código

Ejemplo 1

En este ejemplo, se devuelve la desviación estándar de los números enteros en una ventana de coincidencia.

// 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
Ejemplo 2

En este ejemplo, se devuelve la desviación estándar de los números de punto flotante en una ventana de coincidencia.

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
Ejemplo 3

En este ejemplo, se muestra la desviación estándar en una ventana de coincidencia que contiene números negativos.

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
Ejemplo 4

Este ejemplo devuelve una desviación estándar de cero cuando todos los valores de la ventana de coincidencia son iguales.

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
Ejemplo 5

En este ejemplo, se devuelve la desviación estándar de una ventana de coincidencia que contiene números positivos y negativos.

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

Se admite en los siguientes sistemas operativos:
window.variance(values)

Descripción

Esta función devuelve la varianza especificada de los valores de entrada.

Tipos de datos de parámetros

INT|FLOAT

Tipo de datos que se muestra

FLOAT

Muestras de código

Ejemplo 1

En este ejemplo, se devuelve la varianza de todos los números enteros.

// 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
Ejemplo 2

En este ejemplo, se devuelve la varianza de todos los números de punto flotante.

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
Ejemplo 3

En este ejemplo, se devuelve la varianza de los números negativos.

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
Ejemplo 4

En este ejemplo, se devuelve un valor de varianza pequeño.

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
Ejemplo 5

En este ejemplo, se devuelve una varianza de cero.

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
Ejemplo 6

En este ejemplo, se devuelve la varianza de los números positivos y negativos.

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

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.