Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
As regras de deteção do Splunk são componentes de gestão de informações e eventos de segurança (SIEM) que se comparam às regras de análise no Microsoft Sentinel. Este artigo descreve os conceitos usados para identificar, comparar e migrar regras de deteção de Splunk para o Microsoft Sentinel. A melhor forma de migrar as regras de deteção de Splunk para o Microsoft Sentinel é começar pela experiência de migração SIEM, que identifica regras de análise prontas a usar (OOTB) para tradução automática.
Se quiser migrar a implantação do Splunk Observability, obtenha mais informações sobre como migrar do Splunk para o Azure Monitor Logs.
Regras de auditoria
Microsoft Sentinel utiliza a análise de machine learning para criar incidentes acionáveis e de alta fidelidade. Algumas das tuas deteções de Splunk existentes podem ser redundantes no Microsoft Sentinel, por isso não migres todas as deteções de Splunk às cegas. Revise as seguintes considerações sobre auditoria de regras enquanto identifica as suas regras de deteção existentes.
- Certifique-se de que seleciona casos de utilização que justificam a migração de regras, considerando a prioridade comercial e a eficiência.
- Verifique se compreende os tipos de regras do Microsoft Sentinel.
- Verifique se compreende a terminologia da regra.
- Reveja as regras desatualizadas que não têm alertas nos últimos 6 a 12 meses e determine se ainda são relevantes.
- Elimine alertas ou ameaças de baixo nível que ignora regularmente.
- Microsoft Sentinel Analytics requer que o tipo de dados esteja presente na área de trabalho do Log Analytics antes de uma regra ser ativada. Confirme que as fontes de dados necessárias estão ligadas e reveja os métodos de ligação de dados. Revisite as conversações de recolha de dados para garantir a profundidade e a amplitude dos dados em todos os casos de utilização que planeia detetar. Em seguida, utilize a experiência de migração SIEM para garantir que as origens de dados são mapeadas adequadamente.
Migrar regras
Depois de identificar as deteções do Splunk que pretende migrar, reveja as seguintes considerações sobre o processo de migração:
- Compare a funcionalidade existente das regras de análise OOTB do Microsoft Sentinel com os seus casos de utilização atuais. Utilize a experiência de migração SIEM para ver que deteções do Splunk são convertidas automaticamente em modelos OOTB.
- Traduzir deteções que não se alinham com as regras analíticas OOTB. A melhor forma de traduzir automaticamente deteções do Splunk é com a experiência de migração SIEM.
- Descubra mais algoritmos para os seus casos de utilização ao explorar recursos da comunidade, como o Marketplace de Deteção de Ameaças Principais do SOC.
- Traduzir manualmente as deteções se as regras incorporadas não estiverem disponíveis ou não forem traduzidas automaticamente. Crie as novas consultas KQL e reveja o mapeamento de regras.
Para obter mais informações, veja melhores práticas para migrar regras de deteção.
Passos de migração de regras
Siga estes passos para validar, traduzir e testar cada regra de deteção de Splunk durante a migração para o Microsoft Sentinel.
Verifique se tem um sistema de teste implementado para cada regra que pretende migrar.
Prepare um processo de validação para as regras migradas, incluindo scripts e cenários de teste completos.
Certifique-se de que a sua equipa tem recursos úteis para testar as regras migradas.
Confirme que tem as origens de dados necessárias ligadas e reveja os métodos de ligação de dados.
Verifique se as deteções estão disponíveis como modelos OOTB no Microsoft Sentinel:
Utilize a experiência de migração SIEM para automatizar a tradução e a instalação dos modelos OOTB.
Para obter mais informações, veja Utilizar a experiência de migração SIEM.
Se tiver casos de utilização não refletidos nas deteções, crie regras para a sua própria área de trabalho com modelos de regras OOTB.
Em Microsoft Sentinel, aceda ao Hub de conteúdos.
Filtrar Tipo de conteúdo para modelos de regra de análise.
Encontrar e Instalar/Atualizar cada solução correspondente do Content hub ou modelo autónomo de regra de análise.
Para obter mais informações, consulte Detetar ameaças fora da caixa.
Se tiver deteções que não estão abrangidas pelas regras OOTB de Microsoft Sentinel, experimente primeiro a experiência de migração SIEM para tradução automática.
Se nem as regras OOTB nem a migração SIEM traduzirem completamente a deteção, crie a regra manualmente. Use os seguintes passos para criar a sua regra:
Identifique as origens de dados que pretende utilizar na regra. Identifique as tabelas de Microsoft Sentinel que pretende consultar ao criar uma tabela de mapeamento entre origens de dados e tabelas de dados.
Identifique quaisquer atributos, campos ou entidades nos seus dados que pretenda utilizar nas suas regras.
Identifique os critérios e a lógica da regra. Ao identificar os seus critérios de regras e a lógica, considere usar modelos de regras como exemplos para construir as suas consultas KQL.
Considere filtros, regras de correlação, listas ativas, conjuntos de referência, listas de observação, anomalias de deteção, agregações, etc. Pode utilizar referências fornecidas pelo siEM legado para compreender como mapear melhor a sintaxe da consulta.
Identifique a condição de acionamento e a ação da regra e, em seguida, crie e reveja a consulta KQL. Ao analisar a sua consulta, considere os recursos com orientações para otimização do KQL.
Teste a regra com cada um dos seus casos de utilização relevantes. Se não fornecer os resultados esperados, reveja e edite o KQL e teste-o novamente.
Quando estiver satisfeito, considere a regra migrada. Crie um guia de procedimentos para a ação da sua regra, se necessário. Para obter mais informações, veja Automatizar a resposta a ameaças com manuais de procedimentos no Microsoft Sentinel.
Saiba mais sobre as regras de análise:
- Crie regras de análise personalizadas para detetar ameaças. Utilize o agrupamento de alertas para reduzir a fadiga dos alertas ao agrupar alertas que ocorrem dentro de um determinado período de tempo.
- Mapeie campos de dados para entidades no Microsoft Sentinel para permitir que os engenheiros do SOC definam entidades como parte das provas a controlar durante uma investigação. O mapeamento de entidades também permite que os analistas do SOC beneficiem de um [gráfico de investigação](investigate-cases.md#use-the-investigation-graph-to-deep-dive) intuitivo, que pode ajudar a reduzir o tempo e o esforço necessários.
- Investigue incidentes com dados UEBA, como exemplo de como utilizar provas para ver eventos, alertas e quaisquer marcadores associados a um incidente específico no painel de pré-visualização de incidentes.
- Linguagem de Consulta Kusto (KQL), que pode utilizar para enviar pedidos de leitura para a sua base de dados do Log Analytics para processar os dados e devolver os resultados. O KQL também é utilizado noutros serviços Microsoft, como o Microsoft Defender para Endpoint e o Application Insights.
Comparar a terminologia das regras
A tabela comparativa seguinte esclarece como uma regra baseada em KQL no Microsoft Sentinel corresponde a uma deteção baseada em SPL no Splunk.
| Splunk | Microsoft Sentinel | |
|---|---|---|
| Tipo de regra | • Agendado • Em tempo real |
• Consulta agendada • Fusão • Segurança Microsoft • Análise Comportamental do Machine Learning (ML) |
| Critérios | Definir em SPL | Definir no KQL |
| Condição do acionador | • Número de resultados • Número de anfitriões • Número de origens • Personalizado |
Limiar: número de resultados da consulta |
| Ação | • Adicionar aos alertas acionados • Registo de Evento • Apresentar resultados para consulta • E muito mais |
• Criar alerta ou incidente • Integra-se com o Logic Apps |
Mapear e comparar exemplos de regras
Use as tabelas de exemplo SPL-para-KQL e exemplos nesta secção para comparar e mapear regras do Splunk para o Microsoft Sentinel em vários cenários.
Compare comandos comuns de pesquisa Splunk com exemplos de KQL
Esta tabela mapeia comandos comuns de pesquisa SPL para os seus equivalentes KQL no Microsoft Sentinel.
| Comando SPL | Descrição | Operador KQL | Exemplo de KQL |
|---|---|---|---|
chart/ timechart |
Devolve resultados numa saída tabular para gráficos de série temporal. | operador de composição | … | render timechart |
dedup |
Remove os resultados subsequentes que correspondem a um critério especificado. | • distinto • resumir |
… | summarize by Computer, EventID |
eval |
Calcula uma expressão. Saiba mais sobre comandos comunseval. |
expandir | T | extend duration = endTime - startTime |
fields |
Remove campos dos resultados da pesquisa. | • projeto • Projeto Fora |
T | project cost=price*quantity, price |
head/tail |
Devolve o primeiro ou último N resultados. | superior | T | top 5 by Name desc nulls last |
lookup |
Adiciona valores de campo de uma origem externa. | • dados externos • pesquisa |
Exemplo de comando de pesquisa KQL |
rename |
Muda o nome de um campo. Utilize carateres universais para especificar vários campos. | nome do projeto | T | project-rename new_column_name = column_name |
rex |
Especifica nomes de grupos com expressões regulares para extrair campos. | corresponde ao regex | … | where field matches regex "^addr.*" |
search |
Filtra os resultados para resultados que correspondem à expressão de pesquisa. | Pesquisar | search "X" |
sort |
Ordena os resultados da pesquisa pelos campos especificados. | ordenar | T | sort by strlen(country) asc, price desc |
stats |
Fornece estatísticas, opcionalmente agrupadas por campos. Saiba mais sobre os comandos de estatísticas comuns. | resumir | Exemplo de comando de estatísticas no KQL |
mstats |
Semelhante às estatísticas, utilizadas em métricas em vez de eventos. | resumir | Exemplo do comando Mstats KQL |
table |
Especifica os campos a manter no conjunto de resultados e retém os dados em formato tabular. | projeto | T | project columnA, columnB |
top/rare |
Apresenta os valores mais ou menos comuns de um campo. | superior | T | top 5 by Name desc nulls last |
transaction |
Agrupa os resultados da pesquisa em transações. Exemplo de comando de transação SPL |
Exemplo: row_window_session | Exemplo de comando de transação KQL |
eventstats |
Gera estatísticas de resumo a partir de campos nos seus eventos e guarda essas estatísticas num novo campo. Exemplo de SPL |
Exemplos: • aderir • make_list • mv-expandir |
Exemplo de KQL |
streamstats |
Localize a soma cumulativa de um campo. Exemplo de SPL: ... | streamstats sum(bytes) as bytes _ total \| timechart |
row_cumsum | ...\| serialize cs=row_cumsum(bytes) |
anomalydetection |
Localize anomalias no campo especificado. Exemplo de SPL |
series_decompose_anomalies() | Exemplo de KQL |
where |
Filtra os resultados da pesquisa com eval expressões. Utilizado para comparar dois campos diferentes. |
onde | T | where fruit=="apple" |
lookup comando: exemplo de KQL
Este exemplo de KQL é usado externaldata para replicar o padrão SPL lookup filtrando os utilizadores contra uma fonte de dados externa.
Users
| where UserID in ((externaldata (UserID:string) [
@"https://storageaccount.blob.core.windows.net/storagecontainer/users.txt"
h@"?...SAS..." // Secret token to access the blob
])) | ...
stats comando: exemplo de KQL
Este exemplo do KQL serve summarize para contar transações e somar totais, agrupados por fruta e mês.
Sales
| summarize NumTransactions=count(),
Total=sum(UnitPrice * NumUnits) by Fruit,
StartOfMonth=startofmonth(SellDateTime)
mstats comando: exemplo de KQL
Este exemplo KQL agrupa valores métricos em faixas de preço e conta os registos em cada gama.
T | summarize count() by price_range=bin(price, 10.0)
transaction comando: exemplo de SPL
Este exemplo de SPL agrupa eventos relacionados de início e paragem numa única transação por ID de atividade.
sourcetype=MyLogTable type=Event
| transaction ActivityId startswith="Start" endswith="Stop"
| Rename timestamp as StartTime
| Table City, ActivityId, StartTime, Duration
transaction comando: exemplo de KQL
Este exemplo de KQL replica o agrupamento de transações SPL ao juntar eventos de início e paragem num ID de atividade partilhado e calcular a duração.
let Events = MyLogTable | where type=="Event";
Events
| where Name == "Start"
| project Name, City, ActivityId, StartTime=timestamp
| join (Events
| where Name == "Stop"
| project StopTime=timestamp, ActivityId)
on ActivityId
| project City, ActivityId, StartTime,
Duration = StopTime – StartTime
Utilize row_window_session() para calcular valores de início de sessão para uma coluna num conjunto de linhas serializado.
...| extend SessionStarted = row_window_session(
Timestamp, 1h, 5m, ID != prev(ID))
eventstats comando: exemplo de SPL
Este exemplo SPL calcula contagens de eventos por categoria em bins de um minuto e depois acrescenta um total por bin de tempo usando eventstats.
… | bin span=1m _time
|stats count AS count_i by _time, category
| eventstats sum(count_i) as count_total by _time
eventstats comando: exemplo de KQL
Segue-se um exemplo com a instrução join:
let binSize = 1h;
let detail = SecurityEvent
| summarize detail_count = count() by EventID,
tbin = bin(TimeGenerated, binSize);
let summary = SecurityEvent
| summarize sum_count = count() by
tbin = bin(TimeGenerated, binSize);
detail
| join kind=leftouter (summary) on tbin
| project-away tbin1
Segue-se um exemplo com a instrução make_list:
let binSize = 1m;
SecurityEvent
| where TimeGenerated >= ago(24h)
| summarize TotalEvents = count() by EventID,
groupBin =bin(TimeGenerated, binSize)
|summarize make_list(EventID), make_list(TotalEvents),
sum(TotalEvents) by groupBin
| mvexpand list_EventID, list_TotalEvents
anomalydetection comando: exemplo de SPL
Este exemplo de SPL deteta anomalias nos dados históricos de preços de fecho ao longo de um período de 10 anos.
sourcetype=nasdaq earliest=-10y
| anomalydetection Close _ Price
anomalydetection comando: exemplo de KQL
Este exemplo de KQL utiliza funções de análise de séries temporais para detetar anomalias nas tendências de início de sessão de contas desativadas ao longo de um período de análise de sete dias.
let LookBackPeriod= 7d;
let disableAccountLogon=SignIn
| where ResultType == "50057"
| where ResultDescription has "account is disabled";
disableAccountLogon
| make-series Trend=count() default=0 on TimeGenerated
in range(startofday(ago(LookBackPeriod)), now(), 1d)
| extend (RSquare,Slope,Variance,RVariance,Interception,
LineFit)=series_fit_line(Trend)
| extend (anomalies,score) =
series_decompose_anomalies(Trend)
Compare comandos Splunk eval comuns com equivalentes KQL
Esta tabela mapeia funções SPL eval comuns para os seus equivalentes KQL no Microsoft Sentinel.
| Comando SPL | Descrição | Exemplo de SPL | Comando KQL | Exemplo de KQL |
|---|---|---|---|---|
abs(X) |
Devolve o valor absoluto de X. | abs(number) |
abs() |
abs(X) |
case(X,"Y",…) |
Utiliza pares de X argumentos e Y , em que os X argumentos são expressões booleanas. Quando avaliados como TRUE, os argumentos devolvem o argumento correspondente Y . |
Exemplo de SPL | case |
Exemplo de KQL |
ceil(X) |
Limite de um número X. | ceil(1.9) |
ceiling() |
ceiling(1.9) |
cidrmatch("X",Y) |
Identifica endereços IP que pertencem a uma sub-rede específica. | cidrmatch("123.132.32.0/25",ip) |
• ipv4_is_match()• ipv6_is_match() |
ipv4_is_match('192.168.1.1', '192.168.1.255')== false |
coalesce(X,…) |
Devolve o primeiro valor que não é nulo. | coalesce(null(), "Returned val", null()) |
coalesce() |
coalesce(tolong("not a number"),tolong("42"), 33) == 42 |
cos(X) |
Calcula o cosseno de X. | n=cos(0) |
cos() | cos(X) |
exact(X) |
Avalia uma expressão X com aritmética de vírgula flutuante de precisão dupla. | exact(3.14*num) |
todecimal() |
todecimal(3.14*2) |
exp(X) |
Retorna eX. | exp(3) |
exp() | exp(3) |
if(X,Y,Z) |
Se X for avaliado como TRUE, o resultado é o segundo argumento Y. Se X for avaliado como sendo FALSE, o resultado corresponde ao terceiro argumento Z. |
if(error==200,"OK", "Error") |
iff() |
Exemplo de KQL |
isbool(X) |
Retorna TRUE se X for um booleano. |
isbool(field) |
• iff()• gettype |
iff(gettype(X) =="bool","TRUE","FALSE") |
isint(X) |
Devolve TRUE se X for um número inteiro. |
isint(field) |
• iff()• gettype |
Exemplo de KQL |
isnull(X) |
Devolve TRUE se X for nulo. |
isnull(field) |
isnull() |
isnull(field) |
isstr(X) |
Retorna TRUE se X for uma cadeia de caracteres. |
isstr(field) |
• iff()• gettype |
Exemplo de KQL |
len(X) |
Esta função devolve o número de carateres de uma string X. |
len(field) |
strlen() |
strlen(field) |
like(X,"y") |
Retorna TRUE se, e apenas se, X corresponder ao padrão do SQLite em Y. |
like(field, "addr%") |
• has• contains• startswith• corresponde ao regex |
Exemplo de KQL |
log(X,Y) |
Devolve o registo do primeiro argumento X com o segundo argumento Y como base. O valor predefinido de Y é 10. |
log(number,2) |
• log• log2• log10 |
log(X)log2(X)log10(X) |
lower(X) |
Devolve o valor em minúsculas de X. |
lower(username) |
tolower | tolower(username) |
ltrim(X,Y) |
Devolve X com os carateres no parâmetro Y cortados do lado esquerdo. A saída predefinida de Y é espaços e separadores. |
ltrim(" ZZZabcZZ ", " Z") |
trim_start() |
trim_start(“ ZZZabcZZ”,” ZZZ”) |
match(X,Y) |
Devolve se X corresponder ao padrão de expressão regular Y. | match(field, "^\d{1,3}.\d$") |
matches regex |
… | where field matches regex @"^\d{1,3}.\d$") |
max(X,…) |
Devolve o valor máximo numa coluna. | max(delay, mydelay) |
• max()• arg_max() |
… | summarize max(field) |
md5(X) |
Devolve o hash MD5 de um valor Xde cadeia . |
md5(field) |
hash_md5 |
hash_md5("X") |
min(X,…) |
Devolve o valor mínimo numa coluna. | min(delay, mydelay) |
• min_of()• min() • arg_min |
Exemplo de KQL |
mvcount(X) |
Devolve o número (total) de X valores. |
mvcount(multifield) |
dcount |
…| summarize dcount(X) by Y |
mvfilter(X) |
Filtra um campo de valores múltiplos com base na expressão booleana X . |
mvfilter(match(email, "net$")) |
mv-apply |
Exemplo de KQL |
mvindex(X,Y,Z) |
Devolve um subconjunto do argumento de valores X múltiplos de uma posição inicial (baseada em zero) Y para Z (opcional). |
mvindex( multifield, 2) |
array_slice |
array_slice(arr, 1, 2) |
mvjoin(X,Y) |
Dado um campo multivalorado X e um delimitador de cadeias Y, concatena os valores individuais de X utilizando Y. |
mvjoin(address, ";") |
strcat_array |
Exemplo de KQL |
now() |
Devolve a hora atual, representada na hora do Unix. | now() |
now() |
now()now(-2d) |
null() |
Não aceita argumentos e devolve NULL. |
null() |
nulo | null |
nullif(X,Y) |
Inclui dois argumentos e XY, e devolve X se os argumentos forem diferentes. Caso contrário, devolve NULL. |
nullif(fieldA, fieldB) |
iff |
iff(fieldA==fieldB, null, fieldA) |
random() |
Devolve um número pseudo-aleatório entre 0 para 2147483647. |
random() |
rand() |
rand() |
relative_ time(X,Y) |
Dado um tempo X de época e um especificador Yde tempo relativo , devolve o valor de tempo de época de Y aplicado a X. |
relative_time(now(),"-1d@d") |
hora unix | Exemplo de KQL |
replace(X,Y,Z) |
Devolve uma cadeia formada pela substituição da cadeia Z por cada ocorrência da cadeia de expressão Y regular na cadeia X. |
Devolve a data com os números de mês e dia mudados. Por exemplo, para a 4/30/2015 entrada, o resultado é 30/4/2009:replace(date, "^(\d{1,2})/ (\d{1,2})/", "\2/\1/") |
replace() |
Exemplo de KQL |
round(X,Y) |
Retorna X arredondado ao número de casas decimais especificado por Y. Por predefinição, o valor é arredondado para um inteiro. |
round(3.5) |
round |
round(3.5) |
rtrim(X,Y) |
Devolve X com os carateres de Y cortados do lado direito. Se Y não for especificado, os espaços e as tabulações são removidos. |
rtrim(" ZZZZabcZZ ", " Z") |
trim_end() |
trim_end(@"[ Z]+",A) |
searchmatch(X) |
Devolve TRUE se o evento corresponder à cadeia de pesquisa X. |
searchmatch("foo AND bar") |
iff() | iff(field has "X","Yes","No") |
split(X,"Y") |
Devolve X como um campo de valores múltiplos, dividido por delimitador Y. |
split(address, ";") |
split() |
split(address, ";") |
sqrt(X) |
Devolve a raiz quadrada de X. |
sqrt(9) |
sqrt() |
sqrt(9) |
strftime(X,Y) |
Devolve o valor X de tempo de época composto com o formato especificado por Y. |
strftime(_time, "%H:%M") |
format_datetime() |
format_datetime(time,'HH:mm') |
strptime(X,Y) |
Dado um tempo representado por uma cadeia X, devolve o valor analisado a partir do formato Y. |
strptime(timeStr, "%H:%M") |
format_datetime() | Exemplo de KQL |
substr(X,Y,Z) |
Retorna um campo de subcadeia X a partir da posição inicial (indexada a partir de 1) Y com Z caracteres (opcional). |
substr("string", 1, 3) |
substring() |
substring("string", 0, 3) |
time() |
Devolve a hora do relógio de parede com resolução de microssegundos. | time() |
format_datetime() |
Exemplo de KQL |
tonumber(X,Y) |
Converte a cadeia X de entrada num número, em Y que (opcional, o valor predefinido é 10) define a base do número para o qual converter. |
tonumber("0A4",16) |
toint() |
toint("123") |
tostring(X,Y) |
Descrição | Exemplo de SPL | tostring() |
tostring(123) |
typeof(X) |
Devolve uma representação de cadeia do tipo de campo. | typeof(12) |
gettype() |
gettype(12) |
urldecode(X) |
Devolve o URL X descodificado. |
Exemplo de SPL | url_decode |
Exemplo de KQL |
case(X,"Y",…) Exemplo de SPL
Este exemplo de SPL devolve uma cadeia de mensagens diferente baseada no código de erro HTTP.
case(error == 404, "Not found",
error == 500,"Internal Server Error",
error == 200, "OK")
case(X,"Y",…) Exemplo de KQL
Este exemplo do KQL serve case() para atribuir uma mensagem com base no valor do código de erro.
T
| extend Message = case(error == 404, "Not found",
error == 500,"Internal Server Error", "OK")
if(X,Y,Z) Exemplo de KQL
Este exemplo do KQL serve iif() para indicar se um carimbo temporal corresponde ao dia atual.
iif(floor(Timestamp, 1d)==floor(now(), 1d),
"today", "anotherday")
isint(X) Exemplo de KQL
Este exemplo de KQL verifica se X tem um tipo compatível com inteiros usando gettype e iif.
iif(gettype(X) =="long","TRUE","FALSE")
isstr(X) Exemplo de KQL
Este exemplo de KQL verifica se X é um valor de cadeia usando gettype e iif.
iif(gettype(X) =="string","TRUE","FALSE")
like(X,"y") exemplo
Estes exemplos de KQL mostram vários operadores de correspondência de strings que pode usar para replicar o correspondimento de padrões SPL like .
… | where field has "addr"
… | where field contains "addr"
… | where field startswith "addr"
… | where field matches regex "^addr.*"
min(X,…) Exemplo de KQL
Estes exemplos de KQL mostram diferentes formas de calcular valores mínimos usando min_of, min, e arg_min.
min_of (expr_1, expr_2 ...)
…|summarize min(expr)
…| summarize arg_min(Price,*) by Product
mvfilter(X) Exemplo de KQL
Este exemplo de KQL serve mv-apply para filtrar e reduzir conteúdo multivalorado, semelhante à função SPL mvfilter .
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
mvjoin(X,Y) Exemplo de KQL
Este exemplo de KQL serve strcat_array para unir elementos de array numa única string com um separador personalizado.
strcat_array(dynamic([1, 2, 3]), "->")
relative time(X,Y) Exemplo de KQL
Este exemplo de KQL converte um valor de data-hora para tempo de época Unix para cálculos em tempo relativo.
let toUnixTime = (dt:datetime)
{
(dt - datetime(1970-01-01))/1s
};
replace(X,Y,Z) Exemplo de KQL
Este exemplo de KQL usa replace() , com um padrão regex, para trocar as partes do mês e do dia de uma sequência de datas.
replace( @'^(\d{1,2})/(\d{1,2})/', @'\2/\1/',date)
strptime(X,Y) Exemplo de KQL
Este exemplo de KQL serve format_datetime apenas para mostrar as horas e minutos a partir de um valor de data-hora.
format_datetime(datetime('2017-08-16 11:25:10'),
'HH:mm')
time() Exemplo de KQL
Este exemplo de KQL formata um valor de data-hora como uma cadeia de tempo que mostra horas, minutos e segundos.
format_datetime(datetime(2015-12-14 02:03:04),
'h:m:s')
tostring(X,Y) Descrição
A função SPL tostring(X,Y) converte valores em strings e suporta várias opções de formatação. Devolve um valor de campo de X como uma cadeia.
- Se o valor de
Xfor um número,Xserá reformatado para um valor de cadeia. - Se
Xfor um valor booleano,Xé reformatado paraTRUEouFALSE. - Se
Xfor um número, o segundo argumentoYé opcional e pode serhex(convertidoXnum hexadecimal),commas(formatos com vírgulasXe duas casas decimais) ouduration(converteXde um formato de tempo em segundos para um formato de tempo legível:HH:MM:SS).
tostring(X,Y) Exemplo de SPL
Este tostring exemplo de SPL devolve:
foo=615 and foo2=00:10:15:
… | eval foo=615 | eval foo2 = tostring(
foo, "duration")
urldecode(X) Exemplo de SPL
Este exemplo SPL decodifica uma cadeia codificada por URL de volta à sua forma original.
urldecode("http%3A%2F%2Fwww.splunk.com%2Fdownload%3Fr%3Dheader")
Compare comandos Splunk stats comuns com equivalentes KQL
Esta tabela mapeia funções comuns de agregação SPL stats para os seus equivalentes KQL no Microsoft Sentinel.
| Comando SPL | Descrição | Comando KQL | Exemplo de KQL |
|---|---|---|---|
avg(X) |
Devolve a média dos valores do campo X. |
avg() | avg(X) |
count(X) |
Devolve o número de ocorrências do campo X. Para indicar um valor de campo específico a corresponder, formate X como eval(field="value"). |
count() | summarize count() |
dc(X) |
Devolve o número de valores distintos do campo X. |
dcount() | …\| summarize countries=dcount(country) by continent |
earliest(X) |
Devolve o valor observado cronologicamente mais cedo de X. |
arg_min() | … \| summarize arg_min(TimeGenerated, *) by X |
latest(X) |
Devolve o valor observado cronologicamente mais recente de X. |
arg_max() | … \| summarize arg_max(TimeGenerated, *) by X |
max(X) |
Devolve o valor máximo do campo X. Se os valores de X não forem numéricos, o valor máximo é encontrado por ordem alfabética. |
max() | …\| summarize max(X) |
median(X) |
Devolve o valor mais médio do campo X. |
percentil() | …\| summarize percentile(X, 50) |
min(X) |
Devolve o valor mínimo do campo X. Se os valores de X não forem numéricos, o valor mínimo é encontrado por ordem alfabética. |
min() | …\| summarize min(X) |
mode(X) |
Devolve o valor mais frequente do campo X. |
top-hitters() | …\| top-hitters 1 of Y by X |
perc(Y) |
Devolve o valor de percentil X do campo Y. Por exemplo, perc5(total) devolve o quinto valor de percentil de um campo total. |
percentil() | …\| summarize percentile(Y, 5) |
range(X) |
Devolve a diferença entre os valores máximo e mínimo do campo X. |
intervalo() | range(1, 3) |
stdev(X) |
Devolve o desvio-padrão de exemplo do campo X. |
desvpad | stdev() |
stdevp(X) |
Devolve o desvio-padrão da população do campo X. |
stdevp() | stdevp() |
sum(X) |
Devolve a soma dos valores do campo X. |
sum() | sum(X) |
sumsq(X) |
Devolve a soma dos quadrados dos valores do campo X. |
||
values(X) |
Devolve a lista de todos os valores distintos do campo X como uma entrada com múltiplos valores. A ordem dos valores é alfabética. |
make_set() | …\| summarize r = make_set(X) |
var(X) |
Devolve a variância de exemplo do campo X. |
variância | variance(X) |
Passos seguintes
Aprendeste a identificar, comparar e mapear regras de deteção de Splunk para as regras de análise do Microsoft Sentinel. Continue a migrar a sua automação SOAR.