Funções
Esta seção descreve as funções da YARA-L 2.0 que podem ser usadas em consultas de regras, pesquisa e painel.
Consulte também Funções da YARA-L 2.0 para painéis e Estatísticas e agregações na pesquisa usando a YARA-L 2.0.
Essas funções podem ser usadas nas seguintes partes de uma consulta YARA-L:
- Seção
events BOOL_CLAUSEde uma condicional na seção de resultados
arrays.concat
arrays.concat(string_array, string_array)
Descrição
Retorna uma nova matriz de strings copiando elementos das matrizes de strings originais.
Tipos de dados de parâmetros
ARRAY_STRINGS, ARRAY_STRINGS
Tipo de retorno
ARRAY_STRINGS
Amostras de código
Exemplo 1
O exemplo a seguir concatena duas matrizes de strings diferentes.
arrays.concat(["test1", "test2"], ["test3"]) = ["test1", "test2", "test3"]
Exemplo 2
O exemplo a seguir concatena matrizes com uma string vazia.
arrays.concat([""], [""]) = ["", ""]
Exemplo 3
O exemplo a seguir concatena matrizes vazias.
arrays.concat([], []) = []
arrays.index_to_float
arrays.index_to_float(array, index)
Descrição
Retorna o elemento no índice especificado de uma matriz. O elemento nesse índice é retornado como um ponto flutuante.
O índice é um valor inteiro que representa a posição de um elemento na matriz. Por padrão, o primeiro elemento de uma matriz tem um índice de 0, e o último elemento tem um índice de n-1, em que n é o tamanho da matriz. Com a indexação negativa, é possível acessar elementos da matriz em relação ao final dela. Por exemplo, um índice de -1 se refere ao último elemento da matriz, e um índice de -2 se refere ao penúltimo elemento da matriz.
Tipos de dados de parâmetros
ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT
Tipo de retorno
FLOAT
Amostras de código
Exemplo 1
O exemplo a seguir busca um elemento no índice 1 de uma matriz de números de ponto flutuante.
arrays.index_to_float([1.2, 2.1, 3.5, 4.6], 1) // 2.1
Exemplo 2
O exemplo a seguir busca um elemento no índice -1 de uma matriz de números de ponto flutuante.
arrays.index_to_float([1.2, 2.1, 3.5, 4.6], 0-1) // 4.6
Exemplo 3
O exemplo a seguir busca um elemento para um índice maior que o tamanho da matriz.
arrays.index_to_float([1.2, 2.1, 3.5, 4.6], 6) // 0.0
Exemplo 4
O exemplo a seguir busca um elemento de uma matriz vazia.
arrays.index_to_float([], 0) // 0.0
Example 5
O exemplo a seguir busca um elemento no índice 1 de uma matriz de strings.
arrays.index_to_float(["1.2", "3.3", "2.4"], 1) // 3.3
Exemplo 6
O exemplo a seguir busca um elemento no índice 2 de uma matriz de números inteiros.
arrays.index_to_float([1, 3, 2], 2) // 2.0
arrays.index_to_int
arrays.index_to_int(array_of_inputs, index)
Descrição
Retorna o valor em um determinado índice em uma matriz como um número inteiro.
O índice é um valor inteiro que representa a posição de um elemento na matriz. Por padrão, o primeiro elemento de uma matriz tem um índice de 0, e o último elemento tem um índice de n-1, em que n é o tamanho da matriz. Com a indexação negativa, é possível acessar elementos da matriz em relação ao final dela. Por exemplo, um índice de -1 se refere ao último elemento da matriz, e um índice de -2 se refere ao penúltimo elemento da matriz.
Tipos de dados de parâmetros
ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT
Tipo de retorno
INT
Amostras de código
Exemplo 1
Essa chamada de função retorna 0 quando o valor no índice é uma string não numérica.
arrays.index_to_int(["str0", "str1", "str2"], 1) = 0
Exemplo 2
Essa função retorna o elemento no índice -1.
arrays.index_to_int(["44", "11", "22", "33"], 0-1) = 33
Exemplo 3
Retorna 0 para o elemento fora dos limites.
arrays.index_to_int(["44", "11", "22", "33"], 5) = 0
Exemplo 4
Essa função busca o elemento da matriz de ponto flutuante no índice 1.
arrays.index_to_int([1.100000, 1.200000, 1.300000], 1) = 1
Example 5
Essa função busca o elemento da matriz de números inteiros no índice 0.
arrays.index_to_int([1, 2, 3], 0) = 1
arrays.index_to_str
arrays.index_to_str(array, index)
Descrição
Retorna o elemento no índice especificado da matriz como uma string. O índice é um valor inteiro que representa a posição de um elemento na matriz. Por padrão, o primeiro elemento de uma matriz tem um índice de 0, e o último elemento tem um índice de n-1, em que n é o tamanho da matriz. Com a indexação negativa, é possível acessar elementos da matriz do final para o início. Por exemplo, um índice de -1 se refere ao último elemento da matriz, e um índice de -2 se refere ao penúltimo elemento da matriz.
Tipos de dados de parâmetros
ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS, INT
Tipo de retorno
STRING
Amostras de código
Exemplo 1
O exemplo a seguir busca um elemento no índice 1 de uma matriz de strings.
arrays.index_to_str(["test1", "test2", "test3", "test4"], 1) // "test2"
Exemplo 2
O exemplo a seguir busca um elemento no índice -1 (último elemento da matriz) de uma matriz de strings.
arrays.index_to_str(["test1", "test2", "test3", "test4"], 0-1) // "test4"
Exemplo 3
O exemplo a seguir busca um elemento para um índice maior que o tamanho da matriz, o que retorna uma string vazia.
arrays.index_to_str(["test1", "test2", "test3", "test4"], 6) // ""
Exemplo 4
O exemplo a seguir busca um elemento de uma matriz vazia.
arrays.index_to_str([], 0) // ""
Example 5
O exemplo a seguir busca um elemento no índice 0 de uma matriz de números de ponto flutuante. A saída é retornada como uma string.
arrays.index_to_str([1.200000, 3.300000, 2.400000], 0) // "1.2"
Exemplo 6
O exemplo a seguir busca um elemento no índice 2 de uma matriz de números inteiros. A saída está no formato de uma string.
arrays.index_to_str([1, 3, 2], 2) // "2"
arrays.join_string
arrays.join_string(array_of_strings, optional_delimiter)
Descrição
Converte uma matriz de strings em uma única string separada pelo parâmetro opcional. Se nenhum delimitador for fornecido, a string vazia será usada.
Tipos de dados de parâmetros
ARRAY_STRINGS, STRING
Tipo de retorno
STRING
Amostras de código
Confira alguns exemplos de como usar a função:
Exemplo 1
Este exemplo une uma matriz com elementos não nulos e um delimitador.
arrays.join_string(["foo", "bar"], ",") = "foo,bar"
Exemplo 2
Este exemplo une uma matriz com um elemento nulo e um delimitador.
arrays.join_string(["foo", NULL, "bar"], ",") = "foo,bar"
Exemplo 3
Este exemplo une uma matriz com elementos não nulos e sem delimitador.
arrays.join_string(["foo", "bar"]) = "foobar"
arrays.length
arrays.length(repeatedField)
Descrição
Retorna o número de elementos de campo repetidos.
Tipos de dados de parâmetros
LIST
Tipo de retorno
NUMBER
Amostras de código
Exemplo 1
Retorna o número de elementos de campo repetidos.
arrays.length($e.principal.ip) = 2
Exemplo 2
Se houver vários campos repetidos ao longo do caminho, vai retornar o número total de elementos de campo repetidos.
arrays.length($e.intermediary.ip) = 3
arrays.max
arrays.max(array_of_ints_or_floats)
Descrição
Retorna o maior elemento em uma matriz ou zero se a matriz estiver vazia.
Tipos de dados de parâmetros
ARRAY_INTS|ARRAY_FLOATS
Tipo de retorno
FLOAT
Amostras de código
Confira alguns exemplos de como usar a função:
Exemplo 1
Este exemplo retorna o elemento maior em uma matriz de números inteiros.
arrays.max([10, 20]) = 20.000000
Exemplo 2
Este exemplo retorna o elemento maior em uma matriz de números de ponto flutuante.
arrays.max([10.000000, 20.000000]) = 20.000000
arrays.min
arrays.min(array_of_ints_or_floats[, ignore_zeros=false])
Descrição
Retorna o menor elemento em uma matriz ou zero se a matriz estiver vazia. Se o segundo argumento opcional for definido como "true", os elementos iguais a zero serão ignorados.
Tipos de dados de parâmetros
ARRAY_INTS|ARRAY_FLOATS, BOOL
Tipo de retorno
FLOAT
Amostras de código
Confira alguns exemplos de como usar a função:
Exemplo 1
Este exemplo retorna o menor elemento em uma matriz de números inteiros.
arrays.min([10, 20]) = 10.000000
Exemplo 2
Este exemplo retorna o menor elemento em uma matriz de números de ponto flutuante.
arrays.min([10.000000, 20.000000]) = 10.000000
Exemplo 3
Este exemplo retorna o menor elemento em uma matriz de números de ponto flutuante, ignorando os zeros.
arrays.min([10.000000, 20.000000, 0.0], true) = 10.000000
arrays.size
arrays.size( array )
Descrição
Retorna o tamanho da matriz. Retorna 0 para uma matriz vazia.
Tipos de dados de parâmetros
ARRAY_STRINGS|ARRAY_INTS|ARRAY_FLOATS
Tipo de retorno
INT
Amostras de código
Exemplo 1
Este exemplo usa uma matriz de strings que contém dois elementos.
arrays.size(["test1", "test2"]) = 2
Exemplo 2
Este exemplo usa uma matriz de números inteiros com três elementos.
arrays.size([1, 2, 3]) = 3
Exemplo 3
Este exemplo usa uma matriz de ponto flutuante que contém um elemento.
arrays.size([1.200000]) = 1
Exemplo 4
Este exemplo usa uma matriz vazia.
arrays.size([]) = 0
bytes.to_base64
bytes.to_base64(bytes, optional_default_string)
Descrição
A função converte um valor bytes em um base64 encoded string. As chamadas de função com valores que não podem ser convertidos retornam uma string vazia por padrão.
Tipos de dados de parâmetros
BYTES, STRING
Tipo de retorno
STRING
Amostras de código
Bytes binários brutos para string codificada em base64
A função converte os bytes binários brutos em uma string codificada em base64.
bytes.to_base64(b'000000006f8ec5586d026f9ddac56e9f2fe15b8a0000000001000000cd000000) = "AAAAAG+OxVhtAm+d2sVuny/hW4oAAAAAAQAAAM0AAAA="
Falha na conversão (o padrão é a string fornecida opcionalmente)
A função usa o valor padrão "invalid bytes" quando o valor de bytes fornecido não é válido.
bytes.to_base64(b'000000006f8ec5586d", "invalid bytes") = "invalid bytes"
cast.as_bool
cast.as_bool(string_or_int)
Descrição
A função converte um valor int ou string em um valor booleano. As chamadas de função com valores que não podem ser convertidos vão retornar FALSE. Retorna TRUE somente para o número inteiro 1 e a string "true" sem diferenciação de maiúsculas e minúsculas.
Tipos de dados de parâmetros
INT|STRING
Tipo de retorno
BOOL
Amostras de código
Exemplo 1
Este exemplo mostra como converter uma string não booleana
cast.as_bool("123") = false
Exemplo 2
Número inteiro verdadeiro (1)
cast.as_bool(1) = true
Exemplo 3
String verdadeira
cast.as_bool("true") = true
Exemplo 4
String verdadeira em maiúsculas
cast.as_bool("TRUE") = true
Example 5
Número inteiro negativo
cast.as_bool(0-1) = false
Exemplo 6
Número inteiro falso (0)
cast.as_bool(0) = false
Exemplo 7
String vazia
cast.as_bool("") = false
cast.as_float
cast.as_float(string_to_cast)
Descrição
Converte uma string numérica em um ponto flutuante. Todas as chamadas de função com valores que não podem ser convertidos retornam 0. Os números de ponto flutuante mantêm a precisão de até sete casas decimais.
Tipos de dados de parâmetros
STRING
Tipo de retorno
FLOAT
Amostras de código
Exemplo 1
A conversão de uma string não numérica retorna 0.
cast.as_float("str") = 0.0000000
Exemplo 2
A conversão de uma string vazia retorna 0.
cast.as_float("") = 0.0000000
Exemplo 3
A transmissão de uma string numérica válida retorna um valor de ponto flutuante.
cast.as_float("1.012345678") = 1.0123456
cast.as_string
cast.as_string(int_or_bytes_or_bool, optional_default_string)
Descrição
A função cast.as_string transforma um valor INT, BYTES ou BOOL na representação de string dele. Você pode fornecer um argumento default_string opcional para lidar com casos em que a transmissão falha. Se você omitir o argumento default_string ou se a entrada for uma sequência de bytes UTF-8 ou BASE64 inválida, a função vai retornar uma string vazia.
Tipos de dados de parâmetros
INT|BYTES|BOOL, STRING
Tipo de retorno
STRING
Amostras de código
Conversão de número inteiro para string
A função converte o número inteiro 123 na string "123".
cast.as_string(123) = "123"
Conversão de ponto flutuante para string
A função converte o ponto flutuante 2.25 na string "2.25".
cast.as_string(2.25) = "2.25"
Conversão de bytes para string
A função converte o b'01 binário bruto na string "\x01".
cast.as_string(b'01, "") = "\x01"
Conversão de booleano para string
A função converte o booleano true na string "true".
cast.as_string(true, "") = "true"
Falha na conversão (o padrão é a string fornecida opcionalmente)
A função usa a string "casting error" como padrão quando o valor fornecido é inválido.
cast.as_string(9223372036854775808, "casting error") = "casting error"
Impressão digital
hash.fingerprint2011(byteOrString)
Descrição
Essa função calcula o hash fingerprint2011 de uma sequência de bytes ou string de entrada. Essa função retorna um valor INT sem sinal no intervalo [2, 0xFFFFFFFFFFFFFFFF].
Tipos de dados de parâmetros
BTYE, STRING
Tipo de retorno
INT
Exemplo de código
id_fingerprint = hash.fingerprint2011("user123")
grupo
group(field1, field2, field3, ...)
Descrição
Agrupe campos de um tipo semelhante em uma variável de marcador de posição.
Na pesquisa da UDM, os campos agrupados são usados para pesquisar em vários campos de um tipo semelhante. A função "grupo" é semelhante aos campos agrupados, mas permite selecionar quais campos você quer agrupar para acionar uma detecção. Use a função de grupo para coletar informações sobre uma entidade específica (por exemplo, um nome de host, endereço IP ou ID de usuário) em diferentes tipos de substantivo.
Amostras de código
Exemplo 1
Agrupe todos os endereços IP e forneça uma contagem decrescente do endereço IP mais frequente no período verificado.
$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)
Descrição
Retorna um hash SHA-256 da string de entrada.
Tipos de dados de parâmetros
STRING
Tipo de retorno
STRING
Amostras de código
Exemplo 1
Este exemplo mostra o hash SHA-256 quando a entrada é uma string válida.
hash.sha256("str") = "8c25cb3686462e9a86d2883c5688a22fe738b0bbc85f458d2d2b5f3f667c6d5a"
Exemplo 2
Este exemplo mostra o hash SHA-256 quando a entrada é uma string vazia.
hash.sha256("") = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
math.abs
math.abs(numericExpression)
Descrição
Retorna o valor absoluto de uma expressão de número inteiro ou ponto flutuante.
Tipos de dados de parâmetros
NUMBER
Tipo de retorno
NUMBER
Amostras de código
Exemplo 1
Esse exemplo retorna "True" se o evento ocorreu mais de 5 minutos antes ou depois do horário especificado (em segundos desde a época Unix). Uma chamada para math.abs não pode depender de várias variáveis ou marcadores de posição. Por exemplo, não é possível substituir o valor de tempo codificado de 1643687343 no exemplo a seguir por $e2.metadata.event_timestamp.seconds.
300 < math.abs($e1.metadata.event_timestamp.seconds - 1643687343)
math.ceil
math.ceil(number)
Descrição
Retorna o menor número inteiro que não é menor que o número fornecido (arredondamento para cima). Retornará 0 se a entrada for nula ou muito grande para caber em um int64.
Tipos de dados de parâmetros
FLOAT
Tipo de retorno
INT
Amostras de código
Esta seção contém exemplos de como usar math.ceil.
Exemplo 1
Este exemplo retorna o teto de um número inteiro.
math.ceil(2.000000) = 2
Exemplo 2
Este exemplo retorna o teto de um número negativo.
math.ceil(0-1.200000) = -1
Exemplo 3
Este exemplo retorna 0 como o teto de um número muito grande para um inteiro de 64 bits.
math.ceil(184467440737095516160.0) = 0
math.floor
math.floor(float_val)
Descrição
Retorna o maior valor inteiro que não é maior que o valor fornecido (arredondamento para baixo). Retorna 0 se a entrada for nula ou muito grande para caber em um int64.
Tipos de dados de parâmetros
FLOAT
Tipo de retorno
INT
Amostras de código
Exemplo 1
Este exemplo mostra um caso de número positivo.
math.floor(1.234568) = 1
Exemplo 2
Este exemplo mostra um caso de número negativo.
math.floor(0-1.234568) = -2
Exemplo 3
Este exemplo mostra um caso zero.
math.floor(0.000000) = 0
math.geo_distance
math.geo_distance(longitude1, latitude1, longitude2, latitude2))
Descrição
Retorna a distância entre dois locais geográficos (coordenadas) em metros. Retorna -1 se as coordenadas forem inválidas.
Tipos de dados de parâmetros
FLOAT, FLOAT, FLOAT, FLOAT
Tipo de retorno
FLOAT
Amostras de código
Exemplo 1
O exemplo a seguir retorna a distância quando todos os parâmetros são coordenadas válidas:
math.geo_distance(-122.020287, 37.407574, -122.021810, 37.407574) = 134.564318
Exemplo 2
O exemplo a seguir retorna a distância quando um dos parâmetros é uma coordenada truncada:
math.geo_distance(-122.000000, 37.407574, -122.021810, 37.407574) = 1926.421905
Exemplo 3
O exemplo a seguir retorna -1 quando um dos parâmetros é uma coordenada inválida:
math.geo_distance(0-122.897680, 37.407574, 0-122.021810, 97.407574) = -1.000000
Exemplo 4
O exemplo a seguir retorna 0 quando as coordenadas são iguais:
math.geo_distance(-122.897680, 37.407574, -122.897680, 37.407574) = 0.000000
math.is_increasing
math.is_increasing(num1, num2, num3)
Descrição
Usa uma lista de valores numéricos (inteiros ou de ponto flutuante) e retorna True se os valores estiverem em ordem crescente e False caso contrário.
Tipos de dados de parâmetros
INT|FLOAT, INT|FLOAT, INT|FLOAT
Tipo de retorno
BOOL
Amostras de código
Exemplo 1
Este exemplo inclui valores semelhantes a carimbos de data/hora em segundos.
math.is_increasing(1716769112, 1716769113, 1716769114) = true
Exemplo 2
Este exemplo inclui um valor double negativo, um INT64 zero e um INT64 positivo.
math.is_increasing(-1.200000, 0, 3) = true
Exemplo 3
Este exemplo inclui um valor double negativo, um INT64 zero e um INT64 negativo.
math.is_increasing(0-1.200000, 0, 0-3) = false
Exemplo 4
Este exemplo inclui dois números de ponto flutuante negativos e um valor INT64 zero.
math.is_increasing(0-1.200000, 0-1.50000, 0) = false
Example 5
Este exemplo inclui um número de ponto flutuante negativo e dois valores iguais.
math.is_increasing(0-1.200000, 0, 0) = false
math.log
math.log(numericExpression)
Descrição
Retorna o valor do logaritmo natural de uma expressão de número inteiro ou ponto flutuante.
Tipos de dados de parâmetros
NUMBER
Tipo de retorno
NUMBER
Amostras de código
Exemplo 1
math.log($e1.network.sent_bytes) > 20
math.pow
math.pow(base, exponent)
Descrição
Retorna o valor do primeiro argumento elevado à potência do segundo argumento. Retorna 0 em caso de estouro.
Tipos de dados de parâmetros
base: INT|FLOAT
exponent: INT|FLOAT
Tipo de retorno
FLOAT
Amostras de código
Exemplo 1
Este exemplo mostra um caso de número inteiro.
math.pow(2, 2) // 4.00
Exemplo 2
Este exemplo mostra um caso básico de fração.
math.pow(2.200000, 3) // 10.648
Exemplo 3
Este exemplo mostra uma base fracionária e um caso de potência.
math.pow(2.200000, 1.200000) // 2.575771
Exemplo 4
Este exemplo mostra um caso de potência negativa.
math.pow(3, 0-3) // 0.037037
Example 5
Este exemplo mostra um caso de potência fracionária.
math.pow(3, 0-1.200000) // 0.267581
Exemplo 6
Este exemplo mostra um caso de base negativo.
math.pow(0-3, 0-3) // -0.037037
Exemplo 7
Este exemplo mostra um caso de base zero.
math.pow(0, 3) // 0
Exemplo 8
Este exemplo mostra um caso de potência zero.
math.pow(9223372036854775807, 0) // 1
Exemplo 9
Este exemplo mostra um caso de base grande.
math.pow(9223372036854775807, 1.200000) // 57262152889751593549824
math.random
math.random()
Descrição
Gera um valor pseudoaleatório do tipo DOUBLE no intervalo de [0, 1), incluindo 0 e excluindo 1.
Tipo de retorno
FLOAT
Amostras de código
O exemplo a seguir verifica se o valor aleatório está no intervalo [0, 1).
none
if(math.random() >= 0 and math.random() < 1) = true
math.round
math.round(numericExpression, decimalPlaces)
Descrição
Retorna um valor arredondado para o número inteiro mais próximo ou para o número especificado de casas decimais.
Tipos de dados de parâmetros
NUMBER
Tipo de retorno
NUMBER
Amostras 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
math.sqrt(number)
Descrição
Retorna a raiz quadrada do número especificado. Retorna 0 em caso de números negativos.
Tipos de dados de parâmetros
INT|FLOAT
Tipo de retorno
FLOAT
Amostras de código
Exemplo 1
Este exemplo retorna a raiz quadrada de um argumento int.
math.sqrt(3) = 1.732051
Exemplo 2
Este exemplo retorna a raiz quadrada de um argumento int negativo.
math.sqrt(-3) = 0.000000
Exemplo 3
Este exemplo retorna a raiz quadrada do argumento zero.
math.sqrt(0) = 0.000000
Exemplo 4
Este exemplo retorna a raiz quadrada de um argumento de ponto flutuante.
math.sqrt(9.223372) = 3.037000
Example 5
Este exemplo retorna a raiz quadrada de um argumento de ponto flutuante negativo.
math.sqrt(0-1.200000) = 0.000000
métricas
As funções de métricas podem agregar grandes quantidades de dados históricos. Você pode usar isso na sua regra usando metrics.functionName() na seção de resultado.
Para mais informações, consulte Métricas da YARA-L.
net.ip_in_range_cidr
net.ip_in_range_cidr(ipAddress, subnetworkRange)
Descrição
Retorna true quando o endereço IP fornecido está dentro da sub-rede especificada.
Você pode usar o YARA-L para pesquisar eventos da UDM em todos os endereços IP de uma sub-rede usando a instrução net.ip_in_range_cidr().
Os dois são compatíveis.
Para pesquisar em um intervalo de endereços IP, especifique um campo UDM de IP e um intervalo CIDR. O YARA-L pode processar campos de endereço IP únicos e repetidos.
Para pesquisar em um intervalo de endereços IP, especifique um campo ip da UDM e um intervalo de roteamento entre domínios sem classe (CIDR). O YARA-L pode processar campos de endereço IP únicos e repetidos.
Tipos de dados de parâmetros
STRING, STRING
Tipo de retorno
BOOL
Amostras de código
Exemplo 1
Exemplo de IPv4:
net.ip_in_range_cidr($e.principal.ip, "192.0.2.0/24")
Exemplo 2
Exemplo de IPv6:
net.ip_in_range_cidr($e.network.dhcp.yiaddr, "2001:db8::/32")
Para ver um exemplo de regra usando a instrução net.ip_in_range_cidr(), consulte o exemplo em Evento único em um intervalo de endereços IP.
re.regex
Você pode definir a correspondência de expressões regulares na YARA-L 2.0 usando uma das seguintes sintaxes:
Usando a sintaxe YARA-L — relacionada a eventos. Confira a seguir uma representação genérica dessa sintaxe:
$e.field = /regex/Usando a sintaxe YARA-L como uma função que recebe os seguintes parâmetros:
- Campo em que a expressão regular é aplicada.
- Expressão regular especificada como uma string.
Confira a seguir uma representação genérica dessa sintaxe:
re.regex($e.field, `regex`)
Descrição
Essa função retorna true se a string contiver uma substring que corresponda à expressão regular fornecida. Não é necessário adicionar .* ao início ou ao fim da expressão regular.
Observações
- Para corresponder à string exata ou apenas a um prefixo ou sufixo, inclua os caracteres âncora
^(inicial) e$(final) na expressão regular. Por exemplo,/^full$/corresponde exatamente a"full", enquanto/full/pode corresponder a"fullest","lawfull"e"joyfully". - Se o campo da UDM incluir caracteres de nova linha, o
regexpsó vai corresponder à primeira linha do campo. Para forçar a correspondência completa do campo UDM, adicione um(?s)à expressão regular. Por exemplo, substitua/.*allUDM.*/por/(?s).*allUDM.*/. - É possível usar o modificador
nocasedepois das strings para indicar que a pesquisa deve ignorar a capitalização.
Tipos de dados de parâmetros
STRING, STRING
Tipos de expressões de parâmetro
ANY, ANY
Tipo de retorno
BOOL
Amostras de código
Exemplo 1
// Equivalent to $e.principal.hostname = /google/
re.regex($e.principal.hostname, "google")
re.capture
re.capture(stringText, regex)
Descrição
Captura (extrai) dados de uma string usando o padrão de expressão regular fornecido no argumento.
Essa função usa dois argumentos:
stringText: a string original a ser pesquisada.regex: a expressão regular que indica o padrão a ser pesquisado.
A expressão regular pode conter 0 ou 1 grupo de captura entre parênteses. Se a expressão regular contiver zero grupos de captura, a função vai retornar a primeira substring correspondente inteira. Se a expressão regular contiver um grupo de captura, ela vai retornar a primeira substring correspondente. Definir dois ou mais grupos de captura retorna um erro do compilador.
Tipos de dados de parâmetros
STRING, STRING
Tipo de retorno
STRING
Amostras de código
Exemplo 1
Neste exemplo, se $e.principal.hostname contiver "aaa1bbaa2", o seguinte será verdadeiro porque a função
retorna a primeira instância. Este exemplo não tem grupos de captura.
"aaa1" = re.capture($e.principal.hostname, "a+[1-9]")
Exemplo 2
Este exemplo captura tudo depois do símbolo @ em um e-mail. Se o campo
$e.network.email.from for test@google.com, o exemplo vai retornar
google.com. O exemplo a seguir contém um grupo de captura.
"google.com" = re.capture($e.network.email.from , "@(.*)")
Exemplo 3
Se a expressão regular não corresponder a nenhuma substring no texto, a função vai retornar uma string vazia. Você pode omitir eventos em que não há correspondência excluindo a string vazia, o que é especialmente importante quando você usa re.capture() com uma desigualdade:
// 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)
Descrição
Executa uma substituição de expressão regular.
Essa função usa três argumentos:
stringText: a string original.replaceRegex: a expressão regular que indica o padrão a ser pesquisado.replacementText: o texto a ser inserido em cada correspondência.
Retorna uma nova string derivada da stringText original, em que todas as substrings que correspondem ao padrão em replaceRegex são substituídas pelo valor em replacementText. Use dígitos de escape com barra invertida (\1 a \9) em
replacementText para inserir um texto correspondente ao grupo entre parênteses
no padrão replaceRegex. Use \0 para indicar o texto correspondente inteiro.
A função substitui correspondências não sobrepostas e prioriza a substituição da primeira ocorrência encontrada. Por exemplo, re.replace("banana", "ana", "111") retorna a string "b111na".
Tipos de dados de parâmetros
STRING, STRING, STRING
Tipo de retorno
STRING
Amostras de código
Exemplo 1
Este exemplo captura tudo após o símbolo @ em um e-mail, substitui com
por org e retorna o resultado. Observe o uso de funções aninhadas.
"email@google.org" = re.replace($e.network.email.from, "com", "org")
Exemplo 2
Este exemplo usa dígitos de escape com barra invertida no argumento replacementText para
referenciar correspondências ao padrão 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"
)
Exemplo 3
Observe os seguintes casos ao lidar com strings vazias e re.replace():
Usar uma string vazia 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 substituir uma string vazia, use "^$" 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
optimization.sample_rate(byteOrString, rateNumerator, rateDenominator)
Descrição
Essa função determina se um evento será incluído com base em uma estratégia de amostragem determinista. Essa função retorna:
truepara uma fração de valores de entrada, equivalente a (rateNumerator/rateDenominator), indicando que o evento deve ser incluído na amostra.falseindicando que o evento não deve ser incluído na amostra.
Essa função é útil para cenários de otimização em que você quer processar apenas um subconjunto de eventos. Equivalente a:
hash.fingerprint2011(byteOrString) % rateDenominator < rateNumerator
Tipos de dados de parâmetros
- byteOrString: expressão avaliada como
BYTEouSTRING. - rateNumerator: 'INT'
- rateDenominator: 'INT'
Tipo de retorno
BOOL
Exemplo 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
strings.base64_decode(encodedString)
Descrição
Retorna uma string que contém a versão decodificada em base64 da string codificada.
Essa função usa uma string codificada em base64 como argumento. Se encodedString não for uma string codificada em base64 válida, a função vai retornar encodedString sem alterações.
Tipos de dados de parâmetros
STRING
Tipo de retorno
STRING
Amostras de código
Exemplo 1
"test" = strings.base64_decode($e.principal.domain.name)
strings.coalesce
strings.coalesce(a, b, c, ...)
Descrição
Essa função usa um número ilimitado de argumentos e retorna o valor da primeira expressão que não é avaliada como uma string vazia (por exemplo, "valor diferente de zero"). Se todos os argumentos forem avaliados como uma string vazia, a chamada de função vai retornar uma string vazia.
Os argumentos podem ser literais, campos de eventos ou chamadas de função. Todos os argumentos precisam ser do tipo STRING. Se algum argumento for um campo de evento, os atributos precisarão ser do mesmo evento.
Tipos de dados de parâmetros
STRING
Tipo de retorno
STRING
Amostras de código
Exemplo 1
O exemplo a seguir inclui variáveis de string como argumentos. A condição é avaliada como verdadeira quando (1) $e.network.email.from é suspicious@gmail.com ou (2) $e.network.email.from está vazio e $e.network.email.to é suspicious@gmail.com.
"suspicious@gmail.com" = strings.coalesce($e.network.email.from, $e.network.email.to)
Exemplo 2
O exemplo a seguir chama a função coalesce com mais de dois
argumentos. Essa condição compara o primeiro endereço IP não nulo do evento $e com os valores na lista de referência ip_watchlist. A ordem em que os argumentos são agrupados nessa chamada é a mesma em que são enumerados na condição da regra:
$e.principal.ipé avaliado primeiro.- Em seguida,
$e.src.ipé avaliado. - Em seguida,
$e.target.ipé avaliado. - Por fim, a string "No IP" será retornada como um valor padrão se os campos
ipanteriores não estiverem definidos.
strings.coalesce($e.principal.ip, $e.src.ip, $e.target.ip, "No IP") in %ip_watchlist
Exemplo 3
O exemplo a seguir tenta unir principal.hostname do evento $e1 e do evento $e2. Ele vai retornar um erro do compilador porque os argumentos são variáveis de eventos diferentes.
// returns a compiler error
"test" = strings.coalesce($e1.principal.hostname, $e2.principal.hostname)
strings.concat
strings.concat(a, b, c, ...)
Descrição
Retorna a concatenação de um número ilimitado de itens, cada um dos quais pode ser uma string, um número inteiro ou um ponto flutuante.
Se algum argumento for um campo de evento, os atributos precisarão ser do mesmo evento.
Tipos de dados de parâmetros
STRING, FLOAT, INT
Tipo de retorno
STRING
Amostras de código
Exemplo 1
O exemplo a seguir inclui uma variável de string e uma variável de número inteiro como argumentos. principal.hostname e principal.port são do mesmo evento, $e, e são concatenados para retornar uma string.
"google:80" = strings.concat($e.principal.hostname, ":", $e.principal.port)
Exemplo 2
O exemplo a seguir inclui uma variável de string e um literal de string como argumentos.
"google-test" = strings.concat($e.principal.hostname, "-test") // Matches the event when $e.principal.hostname = "google"
Exemplo 3
O exemplo a seguir inclui uma variável de string e um literal de ponto flutuante como argumentos. Quando representados como strings, os números de ponto flutuante inteiros são formatados sem o ponto decimal (por exemplo, 1,0 é representado como "1"). Além disso, os números de ponto flutuante que excedem 16 casas decimais são truncados na 16ª casa decimal.
"google2.5" = strings.concat($e.principal.hostname, 2.5)
Exemplo 4
O exemplo a seguir inclui uma variável de string, um literal de string, uma variável de número inteiro e um literal de ponto flutuante como argumentos. Todas as variáveis são do mesmo evento, $e, e são concatenadas com os literais para retornar uma string.
"google-test802.5" = strings.concat($e.principal.hostname, "-test", $e.principal.port, 2.5)
Example 5
O exemplo a seguir tenta concatenar "principal.port" do evento $e1 com principal.hostname do evento $e2. Ele vai retornar um erro do compilador porque os argumentos são variáveis de eventos diferentes.
// Will not compile
"test" = strings.concat($e1.principal.port, $e2.principal.hostname)
strings.contains
strings.contains( str, substr )
Descrição
Retorna verdadeiro se uma determinada string contiver a substring especificada. Caso contrário, ele retornará "false".
Tipos de dados de parâmetros
STRING, STRING
Tipo de retorno
BOOL
Amostras de código
Exemplo 1
Este exemplo retorna "true" porque a string tem uma substring "is".
strings.contains("thisisastring", "is") = true
Exemplo 2
Este exemplo retorna "false" porque a string não tem a substring "that".
strings.contains("thisisastring", "that") = false
strings.count_substrings
strings.count_substrings(string_to_search_in, substring_to_count)
Descrição
Quando recebe uma string e uma substring, retorna um int64 da contagem de ocorrências não sobrepostas da substring na string.
Tipos de dados de parâmetros
STRING, STRING
Tipo de retorno
INT
Amostras de código
Esta seção contém exemplos que calculam o número de vezes que uma substring aparece em uma determinada string.
Exemplo 1
Este exemplo usa uma string não nula e um caractere de substring único não nulo.
strings.count_substrings("this`string`has`four`backticks", "`") = 4
Exemplo 2
Este exemplo usa uma string não nula e uma substring não nula com mais de um caractere.
strings.count_substrings("str", "str") = 1
Exemplo 3
Este exemplo usa uma string não nula e uma substring vazia.
strings.count_substrings("str", "") = 0
Exemplo 4
Este exemplo usa uma string vazia e uma substring não nula com mais de um caractere.
strings.count_substrings("", "str") = 0
Example 5
Este exemplo usa uma string e uma substring vazias.
strings.count_substrings("", "") = 0
Exemplo 6
Este exemplo usa uma string não nula e uma substring não nula com mais de um caractere e mais de uma ocorrência.
strings.count_substrings("fooABAbarABAbazABA", "AB") = 3
Exemplo 7
Este exemplo usa uma string não nula e uma substring não nula com mais de um caractere e mais de uma ocorrência. Ele destaca a limitação com ocorrências de substrings sobrepostas.
strings.count_substrings("ABABABA", "ABA") = 2
strings.ends_with
strings.ends_with(value, suffix)
Descrição
A função usa duas strings (value, suffix). Retorna verdadeiro se o sufixo não estiver vazio e estiver no final do valor.
Tipos de dados de parâmetros
STRING, STRING
Tipo de retorno
BOOL
Amostras de código
Os exemplos de código a seguir ilustram algumas maneiras de usar a função
strings.ends_with.
Exemplo: retorna "true"
Retorna "true" quando o sufixo é encontrado no final do valor.
strings.ends_with(target.hostname, "com") = true
Exemplo: retorna "false"
Retorna "false" quando o sufixo não está no fim do valor.
strings.ends_with(target.hostname, "com") = false
Exemplo: retorna "false" quando idêntico
Retorna "false" quando o sufixo e o valor são idênticos.
target.hostname != "example.com"
strings.ends_with("str", "str") = true
Exemplo: retorna "false" quando o sufixo está vazio
Retorna "false" quando o sufixo é uma string vazia.
target.hostname != "example.com"
strings.ends_with("str", "") = false
Exemplo: retorna "false" quando o valor está vazio
Retorna "false" quando o valor é uma string vazia.
target.hostname != "example.com"
strings.ends_with("", "str") = false
Exemplo: retorna "false" quando o sufixo e o valor estão vazios
Retorna "false" quando o sufixo e o valor são strings vazias.
target.hostname != "example.com"
strings.ends_with("", "") = false
strings.extract_domain
strings.extract_domain(url_string)
Descrição
Extrai o domínio de uma string.
Tipos de dados de parâmetros
STRING
Tipo de retorno
STRING
Amostras de código
Exemplo 1
Este exemplo mostra uma string vazia
strings.extract_domain("") = ""
Exemplo 2
string aleatória, não um URL
strings.extract_domain("1234") = ""
Exemplo 3
várias barras invertidas
strings.extract_domain("\\\\") = ""
Exemplo 4
Caracteres não alfabéticos tratados de maneira prática
strings.extract_domain("http://例子.卷筒纸.中国") = "卷筒纸.中国"
Example 5
processamento de URIs
strings.extract_domain("mailto:?to=&subject=&body=") = ""
Exemplo 6
vários caracteres antes do URL real
strings.extract_domain(" \t !$5*^)&dahgsdfs;http://www.google.com") = "google.com"
Exemplo 7
caracteres especiais no URI #
strings.extract_domain("test#@google.com") = ""
Exemplo 8
caracteres especiais no URL #
strings.extract_domain("https://test#@google.com") = ""
Exemplo 9
caso de teste positivo
strings.extract_domain("https://google.co.in") = "google.co.in"
strings.extract_hostname
strings.extract_hostname(string)
Descrição
Extrai o nome do host de uma string. Essa função diferencia maiúsculas de minúsculas.
Tipos de dados de parâmetros
STRING
Tipo de retorno
STRING
Amostras de código
Exemplo 1
Este exemplo retorna uma string vazia.
strings.extract_hostname("") = ""
Exemplo 2
string aleatória, não um URL
strings.extract_hostname("1234") = "1234"
Exemplo 3
várias barras invertidas
strings.extract_hostname("\\\\") = ""
Exemplo 4
tratamento adequado de caracteres que não são do inglês
strings.extract_hostname("http://例子.卷筒纸.中国") = "例子.卷筒纸.中国"
Example 5
processamento de URIs
strings.extract_hostname("mailto:?to=&subject=&body=") = "mailto"
Exemplo 6
vários caracteres antes do URL real
strings.extract_hostname(" \t !$5*^)&dahgsdfs;http://www.google.com") = "www.google.com"
Exemplo 7
caracteres especiais no URI #
strings.extract_hostname("test#@google.com") = "test"
Exemplo 8
caracteres especiais no URL #
strings.extract_hostname("https://test#@google.com") = "test"
strings.from_base64
strings.from_base64(base64_encoded_string)
Descrição
A função converte um valor STRING codificado em base64 em um valor BYTES binário bruto. As chamadas de função com valores que não podem ser convertidos retornam um BYTES vazio por padrão.
Tipos de dados de parâmetros
STRING
Tipo de retorno
BYTES
Amostras de código
Conversão de string codificada em base64 para bytes
A função converte uma string codificada em base64 na representação de bytes binários brutos.
strings.from_base64("AAAAAG+OxVhtAm+d2sVuny/hW4oAAAAAAQAAAM0AAAA=") = b'000000006f8ec5586d026f9ddac56e9f2fe15b8a0000000001000000cd000000
Falha na conversão (padrão para bytes vazios)
A função usa bytes vazios como padrão se o valor fornecido for inválido.
strings.from_base64("invalid-value") = b'
strings.from_hex
strings.from_hex(hex_string)
Descrição
Retorna os bytes associados à string hexadecimal especificada.
Tipos de dados de parâmetros
STRING
Tipo de retorno
BYTES
Amostras de código
Recebe bytes associados a uma determinada string hexadecimal.
Exemplo 1
Este exemplo mostra conversões de caracteres não hexadecimais.
strings.from_hex("str") // returns empty bytes
Exemplo 2
Este exemplo mostra uma entrada com uma string vazia.
strings.from_hex("") // returns empty bytes
Exemplo 3
Este exemplo mostra a conversão de strings hexadecimais.
strings.from_hex("1234") // returns 1234 bytes
Exemplo 4
Este exemplo mostra a conversão de caracteres não ASCII.
strings.from_hex("筒纸.中国") // returns empty bytes
strings.ltrim
strings.ltrim(string_to_trim, cutset)
Descrição
Corta os espaços em branco à esquerda de uma determinada string. Essa função remove os caracteres iniciais presentes nesse conjunto de corte.
Tipos de dados de parâmetros
STRING, STRING
Tipo de retorno
STRING
Amostras de código
Confira alguns exemplos de casos de uso.
Exemplo 1
Este exemplo usa o mesmo primeiro e segundo argumento.
strings.ltrim("str", "str") = ""
Exemplo 2
Este exemplo usa uma string vazia como segundo argumento.
strings.ltrim("str", "") = "str"
Exemplo 3
Este exemplo usa uma string vazia como o primeiro argumento e uma string como o segundo.
strings.ltrim("", "str") = ""
Exemplo 4
Este exemplo usa strings que contêm espaços em branco e uma string como o segundo argumento.
strings.ltrim("a aastraa aa ", " a") = "straa aa "
strings.reverse
strings.reverse(STRING)
Descrição
Retorna uma string que é o inverso da string de entrada.
Tipos de dados de parâmetros
STRING
Tipo de retorno
STRING
Amostras de código
Exemplo 1
O exemplo a seguir transmite uma string curta.
strings.reverse("str") = "rts" // The function returns 'rts'.
Exemplo 2
O exemplo a seguir transmite uma string vazia.
strings.reverse("") = ""
Exemplo 3
O exemplo a seguir transmite um palíndromo.
strings.reverse("tacocat") = "tacocat"
strings.rtrim
strings.rtrim(string_to_trim, cutset)
Descrição
Corta os espaços em branco à direita de uma determinada string. Remove os caracteres finais presentes nesse conjunto de corte.
Tipos de dados de parâmetros
STRING, STRING
Tipo de retorno
STRING
Amostras de código
Confira alguns exemplos de casos de uso.
Exemplo 1
O exemplo a seguir transmite a mesma string como o primeiro e o segundo argumento.
strings.rtrim("str", "str") = ""
Exemplo 2
O exemplo a seguir transmite uma string vazia como o segundo argumento.
strings.rtrim("str", "") = "str"
Exemplo 3
O exemplo a seguir transmite uma string vazia como o primeiro argumento e uma string não vazia como o segundo argumento.
strings.rtrim("", "str") = ""
Exemplo 4
O exemplo a seguir transmite uma string que contém espaços em branco como o primeiro argumento e uma string não vazia como o segundo argumento.
strings.rtrim("a aastraa aa ", " a") = "a aasstr"
strings.split
strings.split(string, delimiter)
Descrição
Divide o valor da string usando o argumento delimitador. O delimitador padrão é uma vírgula (,).
Tipos de dados de parâmetros
STRING, STRING
Tipo de retorno
ARRAY_STRINGS
Amostras de código
Os exemplos de código a seguir ilustram algumas maneiras de usar a função
strings.split.
Exemplo: dividir string com padrão
O exemplo a seguir divide a string usando o delimitador padrão, que é uma vírgula.
strings.split("a,b,c,d") = ["a", "b", "c", "d"]
Exemplo: dividir string com dois-pontos
O exemplo a seguir divide a string em cada dois-pontos (:).
strings.split("a:b:c:d", ":") = ["a", "b", "c", "d"]
Exemplo: delimitador ausente
No exemplo a seguir, falta o delimitador no valor da string.
strings.split("a,b,c,d", ":") = ["a,b,c,d"]
Exemplo: delimitador vazio
O exemplo a seguir tem uma string delimitadora vazia.
strings.split("abc", "") = ["a", "b", "c"]
strings.to_lower
strings.to_lower(stringText)
Descrição
Essa função usa uma string de entrada e retorna uma string depois de mudar todos os caracteres para minúsculas.
Tipos de dados de parâmetros
STRING
Tipo de retorno
STRING
Amostras de código
Exemplo 1
O exemplo a seguir retorna true.
"test@google.com" = strings.to_lower($e.network.email.to)
strings.to_upper
strings.to_upper(string_val)
Descrição
Retorna a string original com todos os caracteres alfabéticos em maiúsculas.
Tipos de dados de parâmetros
STRING
Tipo de retorno
STRING
Amostras de código
Exemplo 1
O exemplo a seguir retorna o argumento fornecido em letras maiúsculas.
strings.to_upper("example") = "EXAMPLE"
strings.trim
strings.trim(string_to_trim, cutset)
Descrição
Corta os espaços em branco à esquerda e à direita de uma determinada string. Além disso, remova caracteres indesejados (especificados pelo argumento "cutset") da string de entrada.
Tipos de dados de parâmetros
STRING, STRING
Tipo de retorno
STRING
Amostras de código
Confira alguns exemplos de casos de uso.
Exemplo 1
No exemplo a seguir, a mesma string é transmitida como a string de entrada e o conjunto de corte, o que resulta em uma string vazia.
strings.trim("str", "str") // ""
Exemplo 2
No exemplo a seguir, uma string vazia é transmitida como o conjunto de corte, o que resulta na string original "str" porque não há caracteres especificados no conjunto de corte para remover.
strings.trim("str", "") = "str"
Exemplo 3
No exemplo a seguir, a função gera uma string vazia porque a string de entrada já está vazia e não há caracteres para remover.
strings.trim("", "str") = ""
Exemplo 4
No exemplo a seguir, a função gera "str" porque a função "trim" remove o seguinte:
- espaço em branco à direita em "a aastraa aa "
- os caracteres especificados no conjunto de corte (espaço, a)
strings.trim("a aastraa aa ", " a") = "str"
strings.url_decode
strings.url_decode(url_string)
Descrição
Dada uma string de URL, decodifique os caracteres de escape e processe os caracteres UTF-8 que foram codificados. Retorna uma string vazia se a decodificação falhar.
Tipos de dados de parâmetros
STRING
Tipo de retorno
STRING
Amostras de código
Exemplo 1
Este exemplo mostra um caso de teste positivo.
strings.url_decode("three%20nine%20four") = "three nine four"
Exemplo 2
Este exemplo mostra um caso de string vazia.
strings.url_decode("") // ""
Exemplo 3
Este exemplo mostra o processamento de caracteres não alfabéticos.
strings.url_decode("%E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B") // "上海+中國"
Exemplo 4
Este exemplo mostra uma decodificação de URL de amostra.
strings.url_decode("http://www.google.com%3Fparam1%3D%22+1+%3E+2+%22%26param2%3D2%3B") // 'http://www.google.com?param1="+1+>+2+"¶m2=2;'
timestamp.as_unix_seconds
timestamp.as_unix_seconds(timestamp [, time_zone])
Descrição
Essa função retorna um número inteiro que representa o número de segundos após uma época Unix para a string de carimbo de data/hora especificada.
timestampé uma string que representa um carimbo de data/hora de época válido. O formato precisa ser%F %T.time_zoneé opcional e é uma string que representa um fuso horário. Se omitido, o padrão seráGMT. É possível especificar fusos horários usando literais de string. As opções são:- O nome do banco de dados TZ, por exemplo,
America/Los_Angeles. Para mais informações, consulte a lista de fusos horários do banco de dados tz na Wikipédia. - O ajuste do fuso horário em relação ao UTC, no formato
(+|-)H[H][:M[M]], por exemplo: "-08:00".
- O nome do banco de dados TZ, por exemplo,
Confira exemplos de especificadores time_zone válidos, que podem ser transmitidos como o segundo argumento para funções de extração de tempo:
"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 dados de parâmetros
STRING, STRING
Tipo de retorno
INT
Amostras de código
Exemplo 1
Carimbo de data/hora de época válido
timestamp.as_unix_seconds("2024-02-22 10:43:00") = 1708598580
Exemplo 2
Carimbo de data/hora de época válido com o fuso horário America/New_York
timestamp.as_unix_seconds("2024-02-22 10:43:00", "America/New_York") = 1708616580
timestamp.current_seconds
timestamp.current_seconds()
Descrição
Retorna um número inteiro que representa a hora atual em segundos Unix. Isso é aproximadamente igual ao carimbo de data/hora da detecção e se baseia em quando a regra é executada. Essa função é um sinônimo da função timestamp.now().
Tipos de dados de parâmetros
NONE
Tipo de retorno
INT
Amostras de código
Exemplo 1
O exemplo a seguir retorna true se o certificado tiver expirado há mais de 24 horas. Ele calcula a diferença de tempo subtraindo os segundos Unix atuais e comparando usando um operador "maior que".
86400 < timestamp.current_seconds() - $e.network.tls.certificate.not_after
timestamp.get_date
timestamp.get_date(unix_seconds [, time_zone])
Descrição
Essa função retorna uma string no formato YYYY-MM-DD, representando o dia em que um carimbo de data/hora está.
unix_secondsé um número inteiro que representa o número de segundos desde a época Unix, como$e.metadata.event_timestamp.seconds, ou um marcador de posição que contém esse valor.time_zoneé opcional e é uma string que representa um time_zone. Se omitido, o padrão será "GMT". É possível especificar fusos horários usando literais de string. As opções são:- O nome do banco de dados de fuso horário, por exemplo, "America/Los_Angeles". Para mais informações, consulte a coluna "Nome do banco de dados de fuso horário" desta página.
- O ajuste do fuso horário em relação ao UTC, no formato
(+|-)H[H][:M[M]], por exemplo: "-08:00".
Confira exemplos de especificadores de time_zone válidos, que podem ser transmitidos como o segundo argumento para funções de extração de tempo:
"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 dados de parâmetros
INT, STRING
Tipo de retorno
STRING
Amostras de código
Exemplo 1
Neste exemplo, o argumento time_zone é omitido, então o padrão é "GMT".
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_date($ts) = "2024-02-19"
Exemplo 2
Este exemplo usa uma string literal para definir o 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])
Descrição
Essa função retorna um número inteiro no intervalo [0, 59] que representa o minuto.
unix_secondsé um número inteiro que representa o número de segundos desde a época Unix, como$e.metadata.event_timestamp.seconds, ou um marcador de posição que contém esse valor.time_zoneé opcional e é uma string que representa um fuso horário. Se omitido, o padrão será "GMT". É possível especificar fusos horários usando literais de string. As opções são:- O nome do banco de dados de fuso horário, por exemplo, "America/Los_Angeles". Para mais informações, consulte a coluna "Nome do banco de dados de fuso horário" desta página.
- O ajuste do fuso horário em relação ao UTC, no formato
(+|-)H[H][:M[M]], por exemplo: "-08:00".
Confira exemplos de especificadores time_zone válidos, que podem ser transmitidos como o segundo argumento para funções de extração de tempo:
"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 dados de parâmetros
INT, STRING
Tipo de retorno
INT
Amostras de código
Exemplo 1
Neste exemplo, o argumento time_zone é omitido, então o padrão é "GMT".
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_hour($ts) = 15
Exemplo 2
Este exemplo usa uma string literal para definir o 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])
Descrição
Essa função retorna um número inteiro no intervalo [0, 23] que representa a hora.
unix_secondsé um número inteiro que representa o número de segundos desde a época Unix, como$e.metadata.event_timestamp.seconds, ou um marcador de posição que contém esse valor.time_zoneé opcional e é uma string que representa um fuso horário. Se omitido, o padrão será "GMT". É possível especificar fusos horários usando literais de string. As opções são:- O nome do banco de dados de fuso horário, por exemplo, "America/Los_Angeles". Para mais informações, consulte a coluna "Nome do banco de dados de fuso horário" desta página.
- O ajuste do fuso horário em relação ao UTC, no formato
(+|-)H[H][:M[M]], por exemplo: "-08:00".
Confira exemplos de especificadores time_zone válidos, que podem ser transmitidos como o segundo argumento para funções de extração de tempo:
"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 dados de parâmetros
INT, STRING
Tipo de retorno
INT
Amostras de código
Exemplo 1
Neste exemplo, o argumento time_zone é omitido, então o padrão é "GMT".
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_hour($ts) = 15
Exemplo 2
Este exemplo usa uma string literal para definir o 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])
Descrição
Essa função retorna um número inteiro no intervalo [1, 7] que representa o dia da semana, começando pelo domingo. Por exemplo, 1 = domingo e 2 = segunda-feira.
unix_secondsé um número inteiro que representa o número de segundos desde a época Unix, como$e.metadata.event_timestamp.seconds, ou um marcador de posição que contém esse valor.time_zoneé opcional e é uma string que representa um time_zone. Se omitido, o padrão será "GMT". É possível especificar fusos horários usando literais de string. As opções são:- O nome do banco de dados de fuso horário, por exemplo, "America/Los_Angeles". Para mais informações, consulte a coluna "Nome do banco de dados de fuso horário" desta página.
- O ajuste do fuso horário em relação ao UTC, no formato
(+|-)H[H][:M[M]], por exemplo: "-08:00".
Confira exemplos de especificadores de time_zone válidos, que podem ser transmitidos como o segundo argumento para funções de extração de tempo:
"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 dados de parâmetros
INT, STRING
Tipo de retorno
INT
Amostras de código
Exemplo 1
Neste exemplo, o argumento time_zone é omitido, então o padrão é "GMT".
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_day_of_week($ts) = 6
Exemplo 2
Este exemplo usa uma string literal para definir o 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)
Descrição
Essa função retorna uma string no formato YYYY-MM-DD, representando o dia em que um carimbo de data/hora está.
unix_secondsé um número inteiro que representa o número de segundos desde a época Unix, como$e.metadata.event_timestamp.seconds, ou um marcador de posição que contém esse valor.timestamp_formaté opcional e é uma string que representa o formato do carimbo de data/hora. Se omitido, o padrão é%F %T. É possível especificar o formato usando uma string de formato de data e hora ou uma das seguintes granularidades de tempo:SECOND,MINUTE,HOUR,DATE,WEEK,MONTHouYEAR. Para mais opções de formatação, consulte Formatar elementos para partes de data e hora.time_zoneé opcional e é uma string que representa um fuso horário. Se omitido, o padrão seráGMT. É possível especificar fusos horários usando literais de string. As opções são:- O nome do banco de dados de fuso horário (TZ) da IANA. Por exemplo,
America/Los_Angeles. Para mais informações, consulte a lista de fusos horários do banco de dados tz na Wikipédia. - O ajuste do fuso horário em relação ao UTC, no formato
(+|-)H[H][:M[M]], por exemplo, "-08:00".
- O nome do banco de dados de fuso horário (TZ) da IANA. Por exemplo,
Confira exemplos de especificadores time_zone válidos, que podem ser transmitidos como o segundo argumento para funções de extração de tempo:
"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 dados de parâmetros
INT, STRING, STRING
Tipo de retorno
STRING
Amostras de código
Exemplo 1
Neste exemplo, o argumento time_zone é omitido, então o padrão é GMT.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_timestamp($ts) = "2024-02-22 10:43:51"
Exemplo 2
Este exemplo usa uma string literal para definir o time_zone.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_timestamp($ts, "%F %T", "America/Los_Angeles") = "2024-02-22 10:43:51"
Exemplo 3
Este exemplo usa uma string literal para definir o timestamp_format.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_timestamp($ts, "%Y-%m", "GMT") = "2024-02"
Exemplo 4
Este exemplo formata um carimbo de data/hora do Unix como uma string com granularidade de segundo.
timestamp.get_timestamp(1708598631, "SECOND", "GMT") = "2024-02-22 10:43:51"
Example 5
Este exemplo formata um carimbo de data/hora do Unix como uma string com granularidade de minutos.
timestamp.get_timestamp(1708598631, "MINUTE", "GMT") = "2024-02-22 10:43"
Exemplo 6
Este exemplo formata um carimbo de data/hora Unix como uma string com granularidade de hora.
timestamp.get_timestamp(1708598631, "HOUR", "GMT") = "2024-02-22 10"
Exemplo 7
Este exemplo formata um carimbo de data/hora Unix como uma string com granularidade diária.
timestamp.get_timestamp(1708598631, "DATE", "GMT") = "2024-02-22"
Exemplo 8
Este exemplo formata um carimbo de data/hora do Unix como uma string na granularidade de semana.
timestamp.get_timestamp(1708598631, "WEEK", "GMT") = "2024-02-18"
Exemplo 9
Este exemplo formata um carimbo de data/hora Unix como uma string na granularidade mensal.
timestamp.get_timestamp(1708598631, "MONTH", "GMT") = "2024-02"
Exemplo 10
Este exemplo formata um carimbo de data/hora Unix como uma string na granularidade anual.
timestamp.get_timestamp(1708598631, "YEAR", "GMT") = "2024"
timestamp.get_week
timestamp.get_week(unix_seconds [, time_zone])
Descrição
Essa função retorna um número inteiro no intervalo [0, 53] que representa a semana do ano. As semanas começam no domingo. As datas anteriores ao primeiro domingo do ano estão na semana 0.
unix_secondsé um número inteiro que representa o número de segundos desde a época Unix, como$e.metadata.event_timestamp.seconds, ou um marcador de posição que contém esse valor.time_zoneé opcional e é uma string que representa um fuso horário. Se omitido, o padrão será "GMT". É possível especificar fusos horários usando literais de string. As opções são:- O nome do banco de dados de fuso horário, por exemplo, "America/Los_Angeles". Para mais informações, consulte a coluna "Nome do banco de dados de fuso horário" desta página.
- O ajuste do fuso horário em relação ao UTC, no formato
(+|-)H[H][:M[M]], por exemplo: "-08:00".
Confira exemplos de especificadores time_zone válidos, que podem ser transmitidos como o segundo argumento para funções de extração de tempo:
"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 dados de parâmetros
INT, STRING
Tipo de retorno
INT
Amostras de código
Exemplo 1
Neste exemplo, o argumento time_zone é omitido, então o padrão é "GMT".
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_week($ts) = 0
Exemplo 2
Este exemplo usa uma string literal para definir o time_zone.
$ts = $e.metadata.collected_timestamp.seconds
timestamp.get_week($ts, "America/Los_Angeles") = 0
timestamp.now
timestamp.now()
Descrição
Retorna o número de segundos desde 1970-01-01 00:00:00 UTC. Isso também é conhecido como horário da época Unix.
Tipo de retorno
INT
Amostras de código
Exemplo 1
O exemplo a seguir retorna um carimbo de data/hora para o código executado em 22 de maio de 2024 às 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])
Descrição
Retorna a média dos valores de entrada (que podem ser números inteiros ou de ponto flutuante). Definir o segundo argumento opcional como "true" ignora os valores zero.
Tipos de dados de parâmetros
INT|FLOAT
Tipo de retorno
FLOAT
Amostras de código
Exemplo 1
Este exemplo mostra a média de números inteiros.
// 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
Exemplo 2
Este exemplo mostra a média de ponto flutuante.
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
Exemplo 3
Média de entrada negativa
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
Exemplo 4
0 retorna 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
Example 5
Ignorando 0 valores
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)
Descrição
Essa função de agregação retorna um valor de string derivado de um evento com o menor valor inteiro correlacionado na janela de correspondência. Um exemplo de caso de uso é extrair o userId do evento com o carimbo de data/hora mais antigo na janela de correspondência.
Tipos de dados de parâmetros
INT, STRING
Tipo de retorno
STRING
Amostras de código
Receba um valor de string derivado de um evento com o menor valor inteiro correlacionado na janela de correspondência.
// 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)
Descrição
Essa função de agregação retorna um valor de string derivado de um evento com o maior valor int correlacionado na janela de correspondência. Um exemplo de caso de uso é receber o userid do evento com o carimbo de data/hora mais baixo na janela de correspondência (carimbo de data/hora mais alto).
Tipos de dados de parâmetros
INT, STRING
Tipo de retorno
STRING
Amostras de código
Recebe um valor de string derivado de um evento com o maior valor inteiro correlacionado na janela de correspondência.
// 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)
Descrição
Retorna a mediana dos valores de entrada. Se houver dois valores medianos, apenas um será escolhido de forma não determinística como o valor de retorno.
Tipos de dados de parâmetros
INT|FLOAT, BOOL
Tipo de retorno
FLOAT
Amostras de código
Exemplo 1
Este exemplo retorna a mediana quando os valores de entrada não são zero.
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
}
Exemplo 2
Este exemplo retorna a mediana quando a entrada inclui alguns valores zero que não devem ser ignorados.
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
}
Exemplo 3
Este exemplo retorna a mediana quando a entrada inclui alguns valores zero que devem ser ignorados.
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
}
Exemplo 4
Este exemplo retorna a mediana quando a entrada inclui todos os valores zero que devem ser ignorados.
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
}
Example 5
Este exemplo mostra que, quando há várias medianas, apenas uma é retornada.
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)
Descrição
Retorna a moda dos valores de entrada. Se houver vários valores de modo possíveis, apenas um deles será escolhido de forma não determinística como o valor de retorno.
Tipos de dados de parâmetros
INT|FLOAT|STRING
Tipo de retorno
STRING
Amostras de código
Exemplo 1
Recebe o modo dos valores na janela de correspondência.
// 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)
Descrição
Retorna o intervalo dos valores de entrada encontrados (mínimo e máximo inclusivos). Cada valor pode ser um número inteiro ou de ponto flutuante. Definir o segundo argumento opcional como "true" ignora os valores zero.
Tipos de dados de parâmetros
INT|FLOAT, BOOL
Tipo de retorno
ARRAY_FLOATS
Amostras de código
Os exemplos de código a seguir ilustram algumas maneiras de usar a função
window.range.
Exemplo: número inteiro mínimo e máximo
Este exemplo mostra o valor inteiro mínimo e máximo.
window.range([1, 2, 3, 4], false) = [1.000000, 4.000000]
Exemplo: ponto flutuante mínimo e máximo
Este exemplo mostra o pontuação flutuante mínimo e máximo.
window.range([1.100000, 39.400000, 2.400000], false) = [1.100000, 39.400000]
Exemplo: número inteiro negativo mínimo e máximo
Este exemplo mostra o valor inteiro negativo mínimo e máximo.
window.range([-1.100000, 1.100000, 0.000000, 2.400000], false) = [-1.100000, 2.400000]
Exemplo: valor 0 ignorado
Este exemplo mostra como os valores 0 são ignorados quando você define o segundo parâmetro.
window.range([0, 0, 0, 394, 1], true) = [1.000000, 394.000000]
window.stddev
window.stddev(numeric_values)
Descrição
Retorna o desvio padrão dos valores de entrada em uma janela de correspondência.
Tipos de dados de parâmetros
INT|FLOAT
Tipo de retorno
FLOAT
Amostras de código
Exemplo 1
Este exemplo retorna o desvio padrão de números inteiros em uma janela de correspondência.
// 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
Exemplo 2
Este exemplo retorna o desvio padrão de números de ponto flutuante em uma janela de correspondência.
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
Exemplo 3
Este exemplo retorna o desvio padrão em uma janela de correspondência que contém 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
Exemplo 4
Este exemplo retorna com desvio padrão zero quando todos os valores na janela de correspondência são iguais.
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
Example 5
Este exemplo retorna o desvio padrão de uma janela de correspondência que contém números positivos e 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
window.variance(values)
Descrição
Essa função retorna a variância especificada dos valores de entrada.
Tipos de dados de parâmetros
INT|FLOAT
Tipo de retorno
FLOAT
Amostras de código
Exemplo 1
Este exemplo retorna a variância de todos os números inteiros.
// 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
Exemplo 2
Este exemplo retorna a variância de todos os números de ponto flutuante.
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
Exemplo 3
Este exemplo retorna a variância de 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
Exemplo 4
Este exemplo retorna um valor de variância pequeno.
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
Example 5
Este exemplo retorna uma variância zero.
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
Exemplo 6
Este exemplo retorna a variância de números positivos e 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
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.