Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você 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 detecção de Splunk para o Microsoft Sentinel. A melhor maneira de migrar as regras de detecção do Splunk para o Microsoft Sentinel é começar com a SIEM migration experience, que identifica regras analíticas prontas para uso (OOTB) para tradução automática.
Se quiser migrar a implantação do Splunk Observability, saiba mais 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 suas detecções de Splunk existentes podem ser redundantes no Microsoft Sentinel, então não migre todas as detecções de Splunk às cegas. Examine as seguintes considerações de auditoria de regras ao identificar suas regras de detecçã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 você 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 se as fontes de dados necessárias estão conectadas e examine os métodos de conexã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 detecções do Splunk a serem migradas, examine 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.
- Traduza as detecções que não se alinham com as regras de análise 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 estas etapas para validar, traduzir e testar cada regra de detecção do Splunk durante a migração para 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 regras de análise.
Localize e Instale/Atualize cada solução correspondente do hub de conteúdo 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 as seguintes etapas para criar 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 seus critérios de regra e lógica, considere usar modelos de regra como exemplos de como construir 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 disparo e a ação da regra e, em seguida, crie e revise sua consulta KQL. Ao revisar sua consulta, considere os recursos de orientação sobre otimização de 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 estratégico para sua ação de regra, conforme 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 entidade também possibilita que os analistas do SOC tirem proveito de um intuitivo [gráfico de investigação] (investigate-cases.md#use-the-investigation-graph-to-deep-dive) que pode ajudar a reduzir o tempo e o esforço.
- 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.
- A Linguagem de Consulta Kusto (KQL), que você pode usar para enviar solicitações somente leitura ao banco de dados do Log Analytics para processar dados e retornar resultados. O KQL também é utilizado em outros serviços da Microsoft, como Microsoft Defender para Ponto de Extremidade e Application Insights.
Compare a terminologia de regras
A tabela de comparação a seguir esclarece como uma regra baseada em KQL em Microsoft Sentinel corresponde a uma detecção baseada em SPL no Splunk.
| Splunk | Microsoft Sentinel | |
|---|---|---|
| Tipo de regra | • Agendado • Em tempo real |
• Consulta agendada • Fusão • Segurança da Microsoft • Análise Comportamental do Machine Learning (ML) |
| Criteria | 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 |
| Action | • Adicionar aos alertas acionados • Evento de registro • Exibir 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 de SPL para KQL e exemplos nesta seção para comparar e mapear regras do Splunk para o Microsoft Sentinel em vários cenários.
Compare comandos comuns de busca Splunk com exemplos de KQL
Esta tabela mapeia comandos comuns de busca SPL para 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. | top | T | top 5 by Name desc nulls last |
lookup |
Adiciona valores de campo de uma origem externa. | • dados externos • pesquisa |
Exemplo de comando de busca KQL |
rename |
Muda o nome de um campo. Use curingas 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. | sort | 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 no 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. | top | 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: • Junte-se • make_list • mv-expansão |
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. |
em que | T | where fruit=="apple" |
lookup comando: exemplo de KQL
Este exemplo de KQL é usado externaldata para replicar o padrão SPL lookup filtrando usuários 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 é usado 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 do KQL agrupa valores métricos em faixas de preço e conta os registros em cada faixa.
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 parada em uma ú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 unir eventos de início e parada em um ID de atividade compartilhado 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 de SPL calcula contagens de eventos por categoria em bins de um minuto e então adiciona 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
Aqui está 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
Aqui está 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 detecta anomalias nos dados históricos de preços de fechamento ao longo de um período de 10 anos.
sourcetype=nasdaq earliest=-10y
| anomalydetection Close _ Price
anomalydetection comando: exemplo de KQL
Este exemplo do KQL utiliza funções de análise de séries temporais para detectar anomalias nas tendências de login de contas desativadas ao longo de um período de retrospecto 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 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) |
Teto 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 é avaliado como FALSE, o resultado é avaliado como o terceiro argumento Z. |
if(error==200,"OK", "Error") |
iff() |
Exemplo de KQL |
isbool(X) |
Retorna TRUE se X é booliano. |
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) |
Retorna TRUE se X é nulo. |
isnull(field) |
isnull() |
isnull(field) |
isstr(X) |
Retorna TRUE se X é uma cadeia de caracteres. |
isstr(field) |
• iff()• gettype |
Exemplo de KQL |
len(X) |
Esta função retorna o comprimento em caracteres de uma string X. |
len(field) |
strlen() |
strlen(field) |
like(X,"y") |
Retorna TRUE se e somente se X é como o padrão 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) |
Retorna X com os caracteres especificados no parâmetro Y removidos do lado esquerdo. A saída padrão de Y são espaços e tabulações. |
ltrim(" ZZZabcZZ ", " Z") |
trim_start() |
trim_start(“ ZZZabcZZ”,” ZZZ”) |
match(X,Y) |
Retorna se X corresponde 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) |
Retorna o hash MD5 de um valor de texto X. |
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 cadeia de caracteres Y, une os valores individuais de X usando 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 de época X e um especificador de tempo relativo Y, retorna o valor temporal da época de Y aplicado a X. |
relative_time(now(),"-1d@d") |
tempo do 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 para o número de casas decimais especificado por Y. O padrão é arredondar para um inteiro. |
round(3.5) |
round |
round(3.5) |
rtrim(X,Y) |
Retorna X com os caracteres de Y cortados do lado direito. Se Y não for especificado, espaços e tabulações serão cortados. |
rtrim(" ZZZZabcZZ ", " Z") |
trim_end() |
trim_end(@"[ Z]+",A) |
searchmatch(X) |
Retorna TRUE se o evento corresponder à string 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) |
Retorna o valor temporal de época X renderizado usando 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 substring X da posição inicial (baseada em um) Y para Z (opcional) caracteres. |
substr("string", 1, 3) |
substring() |
substring("string", 0, 3) |
time() |
Retorna 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 retorna uma string 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 é usado 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 é usado iif() para indicar se um carimbo de data e hora 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 possui 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
Esses exemplos de KQL mostram vários operadores de correspondência de strings que você pode usar para replicar o padrão de correspondência SPL like .
… | where field has "addr"
… | where field contains "addr"
… | where field startswith "addr"
… | where field matches regex "^addr.*"
min(X,…) Exemplo de KQL
Esses 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 é usado 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 é usado strcat_array para unir elementos de array em uma ú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 é usado format_datetime para exibir apenas 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 do KQL formata um valor de data-hora como uma sequência de tempo mostrando 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. Ele retorna 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 retorna:
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 string 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 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) |
Retorna a contagem 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) |
Próximas etapas
Você aprendeu a identificar, comparar e mapear regras de detecção do Splunk para as regras de análise do Microsoft Sentinel. Continue migrando sua automação SOAR.