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.
Os utilizadores do Modelo de Informação de Segurança Avançada (ASIM) utilizam analisadores unificadores em vez de nomes de tabelas nas suas consultas, para ver dados num formato normalizado e para incluir todos os dados relevantes para o esquema na consulta. Os analisadores unificadores, por sua vez, utilizam parsers específicos de origem para processar os detalhes específicos de cada origem.
Microsoft Sentinel fornece analisadores incorporados e específicos de origem para muitas origens de dados. Poderá querer modificar ou desenvolver estes analisadores específicos da origem nas seguintes situações:
Quando o seu dispositivo fornece eventos que se ajustam a um esquema ASIM, mas um analisador específico de origem para o seu dispositivo e o esquema relevante não está disponível no Microsoft Sentinel.
Quando os analisadores específicos da origem do ASIM estão disponíveis para o seu dispositivo, mas o seu dispositivo envia eventos num método ou num formato diferente do esperado pelos analisadores do ASIM. Por exemplo:
O dispositivo de origem pode estar configurado para enviar eventos de uma forma não padrão.
O seu dispositivo pode ter uma versão diferente da suportada pelo analisador ASIM.
Os eventos podem ser recolhidos, modificados e reencaminhados por um sistema intermediário.
Para compreender como os analisadores se encaixam na arquitetura ASIM, veja o diagrama de arquitetura ASIM.
Processo de desenvolvimento do analisador ASIM personalizado
O fluxo de trabalho seguinte descreve os passos de alto nível no desenvolvimento de um analisador asim personalizado, específico da origem:
Identifique os esquemas ou esquemas que os eventos enviados a partir da origem representam. Para obter mais informações, veja Descrição geral do esquema.
Mapeie os campos de eventos de origem para o esquema ou esquemas identificados.
Desenvolva um ou mais analisadores ASIM para a sua origem. Terá de desenvolver um analisador de filtragem e um analisador sem parâmetros para cada esquema relevante para a origem.
Teste o seu analisador.
Implemente os analisadores nas áreas de trabalho Microsoft Sentinel.
Atualize o analisador unificador asim relevante para referenciar o novo analisador personalizado. Para obter mais informações, veja Managing ASIM parsers (Gerir analisadores asIM).
Também poderá querer contribuir com os seus parsers para a distribuição ASIM primária. Os analisadores contribuidos também podem ser disponibilizados em todas as áreas de trabalho como analisadores incorporados.
Este artigo orienta-o ao longo dos passos de desenvolvimento, teste e implementação do processo.
Sugestão
Veja também o Webinar Deep Dive no Microsoft Sentinel Normalizar Analisadores e Conteúdo Normalizado ou reveja o conjunto de diapositivos relacionado. Para obter mais informações, veja Passos seguintes.
Recolher registos de exemplo
Para criar analisadores ASIM eficazes, precisa de um conjunto representativo de registos, que, na maioria dos casos, exigirá a configuração do sistema de origem e a ligação ao Microsoft Sentinel. Se não tiver o dispositivo de origem disponível, os serviços pay as you go na cloud permitem-lhe implementar muitos dispositivos para desenvolvimento e teste.
Além disso, encontrar a documentação e os exemplos do fornecedor para os registos pode ajudar a acelerar o desenvolvimento e reduzir os erros ao garantir uma ampla cobertura do formato de registo.
Um conjunto representativo de registos deve incluir:
- Eventos com resultados de eventos diferentes.
- Eventos com diferentes ações de resposta.
- Formatos diferentes para nome de utilizador, nome de anfitrião e IDs e outros campos que requerem normalização de valor.
Sugestão
Inicie um novo analisador personalizado com um analisador existente para o mesmo esquema. A utilização de um analisador existente é especialmente importante para filtrar analisadores para garantir que aceitam todos os parâmetros necessários para o esquema.
Mapeamento de planeamento
Antes de desenvolver um analisador, mapeie as informações disponíveis no evento ou eventos de origem para o esquema que identificou:
- Mapeie todos os campos obrigatórios e, de preferência, também os campos recomendados.
- Tente mapear todas as informações disponíveis da origem para campos normalizados. Se não estiver disponível como parte do esquema selecionado, considere mapear para campos disponíveis noutros esquemas.
- Mapeie os valores dos campos na origem para os valores normalizados permitidos pelo ASIM. O valor original é armazenado num campo separado, como
EventOriginalResultDetails.
Desenvolver analisadores
Desenvolva uma filtragem e um analisador sem parâmetros para cada esquema relevante.
Um analisador personalizado é uma consulta KQL desenvolvida na página Registos do Microsoft Sentinel. A consulta do analisador tem três partes:
Filtro>> AnalisarPreparar campos
Filtragem
Filtrar os registos relevantes
Em muitos casos, uma tabela no Microsoft Sentinel inclui vários tipos de eventos. Por exemplo:
- A tabela Syslog tem dados de várias origens.
- As tabelas personalizadas podem incluir informações de uma única origem que fornece mais do que um tipo de evento e que se podem ajustar a vários esquemas.
Por conseguinte, um analisador deve filtrar primeiro apenas os registos relevantes para o esquema de destino.
A filtragem no KQL é feita com o where operador . Por exemplo, o evento Sysmon 1 comunica a criação do processo e, por conseguinte, é normalizado para o esquema ProcessEvent . O evento Sysmon 1 faz parte da Event tabela, pelo que deve utilizar o seguinte filtro:
Event | where Source == "Microsoft-Windows-Sysmon" and EventID == 1
Importante
Um analisador não deve filtrar por tempo. A consulta que utiliza o analisador aplicará um intervalo de tempo.
Filtrar por tipo de origem com uma Lista de Observação
Em alguns casos, o evento em si não contém informações que permitam filtrar tipos de origem específicos.
Por exemplo, os eventos DNS do Infoblox são enviados como mensagens Syslog e são difíceis de distinguir das mensagens do Syslog enviadas de outras origens. Nestes casos, o analisador baseia-se numa lista de origens que define os eventos relevantes. Esta lista é mantida na Sources_by_SourceType lista de observação.
Para utilizar a lista de observação ASimSourceType nos seus analisadores, utilize a _ASIM_GetSourceBySourceType função na secção de filtragem de analisador. Por exemplo, o analisador DNS do Infoblox inclui o seguinte na secção de filtragem:
| where Computer in (_ASIM_GetSourceBySourceType('InfobloxNIOS'))
Para utilizar este exemplo no seu analisador:
Substitua
Computerpelo nome do campo que inclui as informações de origem da sua origem. Pode mantê-lo comoComputerpara qualquer analisador com base no Syslog.Substitua o
InfobloxNIOStoken por um valor à sua escolha para o seu analisador. Informe os utilizadores do analisador de que têm de atualizar a lista de observação com oASimSourceTypevalor selecionado, bem como a lista de origens que enviam eventos deste tipo.
Filtragem com base em parâmetros de analisador
Ao desenvolver analisadores de filtragem, certifique-se de que o analisador aceita os parâmetros de filtragem para o esquema relevante, conforme documentado no artigo de referência para esse esquema. Utilizar um analisador existente como ponto de partida garante que o seu analisador inclui a assinatura de função correta. Na maioria dos casos, o código de filtragem real também é semelhante para filtrar analisadores para o mesmo esquema.
Ao filtrar, certifique-se de que:
- Filtre antes de analisar com campos físicos. Se os resultados filtrados não forem suficientemente precisos, repita o teste depois de analisar para ajustar os resultados. Para obter mais informações, veja Otimização da filtragem.
- Não filtre se o parâmetro não estiver definido e ainda tiver o valor predefinido.
Os exemplos seguintes mostram como implementar a filtragem para um parâmetro de cadeia, em que o valor predefinido é normalmente "*" e para um parâmetro de lista, em que o valor predefinido é normalmente uma lista vazia.
srcipaddr=='*' or ClientIP==srcipaddr
array_length(domain_has_any) == 0 or Name has_any (domain_has_any)
Veja mais informações sobre os seguintes itens na documentação do Kusto:
Otimização da filtragem
Para garantir o desempenho do analisador, tenha em atenção as seguintes recomendações de filtragem:
- Filtre sempre por campos incorporados em vez de campos analisados. Embora, por vezes, seja mais fácil filtrar com campos analisados, afeta significativamente o desempenho.
-
Utilize operadores que proporcionam um desempenho otimizado. Em particular,
==,hasestartswith. A utilização de operadores comocontainsoumatches regextambém afeta significativamente o desempenho.
As recomendações de filtragem de desempenho podem nem sempre ser fáceis de seguir. Por exemplo, utilizar has é menos preciso do que contains. Noutros casos, a correspondência do campo incorporado, como SyslogMessage, é menos precisa do que comparar um campo extraído, como DvcAction. Nestes casos, recomendamos que continue a pré-filtrar com um operador de otimização de desempenho num campo incorporado e repita o filtro com condições mais precisas após a análise.
Por exemplo, veja o seguinte fragmento de parser DNS infoblox . Primeiro, o analisador verifica se o campo has SyslogMessage tem a palavra client. No entanto, o termo pode ser utilizado num local diferente na mensagem, pelo que, depois de analisar o Log_Type campo, o analisador verifica novamente se a palavra client era realmente o valor do campo.
Syslog | where ProcessName == "named" and SyslogMessage has "client"
…
| extend Log_Type = tostring(Parser[1]),
| where Log_Type == "client"
Nota
Os analisadores não devem filtrar por tempo, uma vez que a consulta que utiliza o analisador já filtra o tempo.
Análise
Depois de a consulta selecionar os registos relevantes, poderá ter de analisá-los. Normalmente, a análise é necessária se vários campos de evento forem transmitidos num único campo de texto.
Os operadores KQL que efetuam a análise estão listados abaixo, ordenados pela otimização do desempenho. O primeiro fornece o desempenho mais otimizado, enquanto o último proporciona o desempenho menos otimizado.
| Operador/função() | Descrição |
|---|---|
| função split() | Analise uma cadeia de valores delimitados. |
| função parse_csv() | Analise uma cadeia de valores formatada como uma linha CSV (valores separados por vírgulas). |
| operador parse-kv | Extrai informações estruturadas de uma expressão de cadeia e representa as informações num formulário chave/valor. |
| operador de análise | Analise múltiplos valores de uma cadeia arbitrária com um padrão, que pode ser um padrão simplificado com melhor desempenho ou uma expressão regular. |
| função extract_all() | Analise valores únicos de uma cadeia arbitrária com uma expressão regular.
extract_all tem um desempenho semelhante a parse se este utilizar uma expressão regular. |
| função extract() | Extraia um único valor de uma cadeia arbitrária com uma expressão regular. A utilização extract proporciona um melhor desempenho do que parse ou extract_all se for necessário um único valor. No entanto, utilizar várias ativações de através da mesma cadeia de extract origem é menos eficiente do que uma única parse ou extract_all deve ser evitada. |
| função parse_json() | Analise os valores numa cadeia formatada como JSON. Se apenas forem necessários alguns valores do JSON, utilizar parse, extractou extract_all fornecer um melhor desempenho. |
| função parse_xml() | Analise os valores numa cadeia formatada como XML. Se forem necessários apenas alguns valores do XML, utilizar parse, extractou extract_all fornecer um melhor desempenho. |
Normalizar
Nomes de campos de mapeamento
A forma mais simples de normalização é mudar o nome de um campo original para o nome normalizado. Utilize o operador project-rename para tal. A utilização do nome do projeto garante que o campo ainda é gerido como um campo físico e que o processamento do campo é mais eficaz. Por exemplo:
| project-rename
ActorUserId = InitiatingProcessAccountSid,
ActorUserAadId = InitiatingProcessAccountObjectId,
ActorUserUpn = InitiatingProcessAccountUpn,
Normalizar o formato e o tipo dos campos
Em muitos casos, o valor original extraído tem de ser normalizado. Por exemplo, no ASIM, um endereço MAC utiliza dois pontos como separador, enquanto a origem pode enviar um endereço MAC delimitado por hífen. O operador principal para transformar valores é extend, juntamente com um conjunto amplo de funções de cadeia KQL, numéricas e de data.
Além disso, garantir que os campos de saída do analisador correspondem ao tipo definido no esquema é fundamental para que os analisadores funcionem. Por exemplo, poderá ter de converter uma cadeia que representa a data e a hora num campo datetime. Funções como todatetime e tohex são úteis nestes casos.
Por exemplo, o ID de evento exclusivo original pode ser enviado como um número inteiro, mas o ASIM requer que o valor seja uma cadeia, para garantir uma ampla compatibilidade entre as origens de dados. Por conseguinte, ao atribuir a utilização extend do campo de origem e tostring em vez de project-rename:
| extend EventOriginalUid = tostring(ReportId),
Campos e valores derivados
O valor do campo de origem, uma vez extraído, poderá ter de ser mapeado para o conjunto de valores especificado para o campo de esquema de destino. As funções iff, casee lookup podem ser úteis para mapear dados disponíveis para valores de destino.
Por exemplo, o analisador DNS da Microsoft atribui o EventResult campo com base no ID do Evento e no Código de Resposta através de uma instrução iff , da seguinte forma:
extend EventResult = iff(EventId==257 and ResponseCode==0 ,'Success','Failure')
Para mapear vários valores, defina o mapeamento com o datatable operador e utilize lookup para efetuar o mapeamento. Por exemplo, algumas origens comunicam códigos de resposta DNS numéricos e o protocolo de rede, enquanto o esquema determina a representação de etiquetas de texto mais comum para ambos. O exemplo seguinte demonstra como derivar os valores necessários com datatable e lookup:
let NetworkProtocolLookup = datatable(Proto:real, NetworkProtocol:string)[
6, 'TCP',
17, 'UDP'
];
let DnsResponseCodeLookup=datatable(DnsResponseCode:int,DnsResponseCodeName:string)[
0,'NOERROR',
1,'FORMERR',
2,'SERVFAIL',
3,'NXDOMAIN',
...
];
...
| lookup DnsResponseCodeLookup on DnsResponseCode
| lookup NetworkProtocolLookup on Proto
Repare que a pesquisa também é útil e eficiente quando o mapeamento tem apenas dois valores possíveis.
Quando as condições de mapeamento são mais complexas, combine iff, casee lookup. O exemplo abaixo mostra como combinar lookup e case. O lookup exemplo acima devolve um valor vazio no campo DnsResponseCodeName se o valor de pesquisa não for encontrado. O case exemplo abaixo aumenta-o ao utilizar o resultado da lookup operação, se disponível, e especificar condições adicionais caso contrário.
| extend DnsResponseCodeName =
case (
DnsResponseCodeName != "", DnsResponseCodeName,
DnsResponseCode between (3841 .. 4095), 'Reserved for Private Use',
'Unassigned'
)
Microsoft Sentinel fornece funções úteis para valores de pesquisa comuns. Por exemplo, a DnsResponseCodeName pesquisa acima pode ser implementada com uma das seguintes funções:
| extend DnsResponseCodeName = _ASIM_LookupDnsResponseCode(DnsResponseCode)
| invoke _ASIM_ResolveDnsResponseCode('DnsResponseCode')
A primeira opção aceita como parâmetro o valor a procurar e permite-lhe escolher o campo de saída e, portanto, útil como uma função de pesquisa geral. A segunda opção está mais voltada para os analisadores, utiliza como entrada o nome do campo de origem e atualiza o campo ASIM necessário, neste caso DnsResponseCodeName.
Para obter uma lista completa das funções de ajuda do ASIM, veja Funções ASIM
Campos de melhoramento
Além dos campos disponíveis a partir da origem, um evento ASIM resultante inclui campos de melhoramento que o analisador deve gerar. Em muitos casos, os analisadores podem atribuir um valor constante aos campos, por exemplo:
| extend
EventCount = int(1),
EventProduct = 'M365 Defender for Endpoint',
EventVendor = 'Microsoft',
EventSchemaVersion = '0.1.0',
EventSchema = 'ProcessEvent'
Outro tipo de campos de melhoramento que os seus analisadores devem definir são os campos de tipo, que designam o tipo do valor armazenado num campo relacionado. Por exemplo, o SrcUsernameType campo designa o tipo de valor armazenado no SrcUsername campo. Pode encontrar mais informações sobre campos de tipo na descrição das entidades.
Na maioria dos casos, os tipos também recebem um valor constante. No entanto, em alguns casos, o tipo tem de ser determinado com base no valor real, por exemplo:
DomainType = iif (array_length(SplitHostname) > 1, 'FQDN', '')
Microsoft Sentinel fornece funções úteis para processar o melhoramento. Por exemplo, utilize a seguinte função para atribuir automaticamente os campos SrcHostname, SrcDomainSrcDomainType e SrcFQDN com base no valor no campo Computer.
| invoke _ASIM_ResolveSrcFQDN('Computer')
Esta função irá definir os campos da seguinte forma:
| Campo Computador | Campos de saída |
|---|---|
| server1 | SrcHostname: server1 SrcDomain, SrcDomainType, SrcFQDN vazios |
| server1.microsoft.com | SrcHostname: server1 SrcDomain: microsoft.com SrcDomainType: FQDN SrcFQDN:server1.microsoft.com |
As funções _ASIM_ResolveDstFQDN e _ASIM_ResolveDvcFQDN executam uma tarefa semelhante preenchendo os campos e Dvc relacionadosDst. Para obter uma lista completa das funções de ajuda do ASIM, veja Funções ASIM
Selecionar campos no conjunto de resultados
Opcionalmente, o analisador pode selecionar campos no conjunto de resultados. Remover campos desnecessários pode melhorar o desempenho e aumentar a clareza ao evitar confusão entre campos normalizados e campos de origem restantes.
Os seguintes operadores KQL são utilizados para selecionar campos no conjunto de resultados:
| Operador | Descrição | Quando utilizar num analisador |
|---|---|---|
| project-away | Remove campos. | Utilize project-away para campos específicos que pretende remover do conjunto de resultados. Recomendamos que não remova os campos originais que não estão normalizados do conjunto de resultados, a menos que criem confusão ou sejam muito grandes e possam ter implicações de desempenho. |
| projeto | Seleciona os campos que existiam antes ou que foram criados como parte da instrução e remove todos os outros campos. | Não recomendado para utilização num analisador, uma vez que o analisador não deve remover outros campos que não estejam normalizados. Se precisar de remover campos específicos, como valores temporários utilizados durante a análise, utilize project-away para os remover dos resultados. |
Por exemplo, ao analisar uma tabela de registo personalizada, utilize o seguinte para remover os restantes campos originais que ainda têm um descritor de tipo:
| project-away
*_d, *_s, *_b, *_g
Processar variantes de análise
Importante
As diferentes variantes representam diferentes tipos de eventos, geralmente mapeados para esquemas diferentes, desenvolvendo analisadores separados
Em muitos casos, os eventos num eventstream incluem variantes que requerem uma lógica de análise diferente. Para analisar diferentes variantes num único analisador, utilize instruções condicionais como iff e caseou utilize uma estrutura união.
Para utilizar union para processar múltiplas variantes, crie uma função separada para cada variante e utilize a instrução união para combinar os resultados:
let AzureFirewallNetworkRuleLogs = AzureDiagnostics
| where Category == "AzureFirewallNetworkRule"
| where isnotempty(msg_s);
let parseLogs = AzureFirewallNetworkRuleLogs
| where msg_s has_any("TCP", "UDP")
| parse-where
msg_s with networkProtocol:string
" request from " srcIpAddr:string
":" srcPortNumber:int
…
| project-away msg_s;
let parseLogsWithUrls = AzureFirewallNetworkRuleLogs
| where msg_s has_all ("Url:","ThreatIntel:")
| parse-where
msg_s with networkProtocol:string
" request from " srcIpAddr:string
" to " dstIpAddr:string
...
union parseLogs, parseLogsWithUrls…
Para evitar eventos duplicados e processamento excessivo, certifique-se de que cada função começa por filtrar, utilizando campos nativos, apenas os eventos que pretende analisar. Além disso, se necessário, utilize o project-away em cada ramo, antes da união.
Implementar analisadores
Implemente analisadores manualmente ao copiá-los para a página Azure Monitorizar Registo e guardar a consulta como uma função. Este método é útil para testes. Para obter mais informações, veja Criar uma função.
Para implementar um grande número de analisadores, recomendamos a utilização de modelos arm de analisador, da seguinte forma:
Crie um ficheiro YAML com base no modelo relevante para cada esquema e inclua a sua consulta no mesmo. Comece com o modelo YAML relevante para o seu esquema e tipo de analisador, filtragem ou sem parâmetros.
Utilize o conversor de modelos ASIM YAML para ARM para converter o seu ficheiro YAML num modelo do ARM.
Se implementar uma atualização, elimine versões mais antigas das funções com o portal ou a ferramenta de eliminação de funções do PowerShell.
Implemente o modelo com o portal do Azure ou o PowerShell.
Também pode combinar vários modelos num único processo de implementação com modelos ligados
Sugestão
Os modelos do ARM podem combinar recursos diferentes, para que os analisadores possam ser implementados juntamente com conectores, regras analíticas ou listas de observação, para citar algumas opções úteis. Por exemplo, o seu analisador pode referenciar uma lista de observação implementada juntamente com a mesma.
Analisadores de teste
Esta secção descreve que as ferramentas de teste asIM fornecem que lhe permitem testar os seus analisadores. Dito isto, os analisadores são práticas de código, por vezes complexas e de garantia de qualidade padrão, como revisões de código, para além dos testes automatizados.
Instalar ferramentas de teste do ASIM
Para testar o ASIM, implemente a ferramenta de teste ASIM numa área de trabalho Microsoft Sentinel onde:
- O seu analisador está implementado.
- A tabela de origem utilizada pelo analisador está disponível.
- A tabela de origem utilizada pelo analisador é preenchida com uma coleção variada de eventos relevantes.
Validar o esquema de saída
Para se certificar de que o seu analisador produz um esquema válido, utilize o verificador de esquemas ASIM ao executar a seguinte consulta na página Registos do Microsoft Sentinel:
<parser name> | getschema | invoke ASimSchemaTester('<schema>')
Processe os resultados da seguinte forma:
| Erro | Ação |
|---|---|
| Campo obrigatório em falta [<Campo>] | Adicione o campo ao seu analisador. Em muitos casos, este seria um valor derivado ou um valor constante e não um campo já disponível a partir da origem. |
| O campo em falta [<Campo>] é obrigatório quando a coluna obrigatória [<Campo>] existe | Adicione o campo ao seu analisador. Em muitos casos, este campo denota os tipos da coluna existente a que se refere. |
| O campo em falta [<Campo>] é obrigatório quando a coluna [<Campo>] existe | Adicione o campo ao seu analisador. Em muitos casos, este campo denota os tipos da coluna existente a que se refere. |
| Alias obrigatório em falta [<Campo>] aliasing da coluna existente [<Campo>] | Adicionar o alias ao seu analisador |
| Alias recomendado em falta [<Campo>] aliasing da coluna existente [<Campo>] | Adicionar o alias ao seu analisador |
| Alias opcional em falta [<Campo>] aliasing da coluna existente [<Campo>] | Adicionar o alias ao seu analisador |
| Falta o alias obrigatório [<Campo>] aliasing da coluna em falta [<Campo>] | Este erro acompanha um erro semelhante para o campo aliased. Corrija o erro do campo com alias e adicione este alias ao seu analisador. |
| Escreva um erro de correspondência para o campo [<Campo>]. Atualmente é [<Tipo>] e deve ser [<Tipo>] | Certifique-se de que o tipo de campo normalizado está correto, normalmente utilizando uma função de conversão como tostring. |
| Informações | Ação |
|---|---|
| Campo recomendado em falta [<Campo>] | Considere adicionar este campo ao seu analisador. |
| Informações | Ação |
|---|---|
| Alias recomendado em falta [<Campo>] aliasing non-existnt column [<Field>] | Se adicionar o campo alias ao analisador, certifique-se de que também adiciona este alias. |
| Alias opcional em falta [<Campo>] aliasing non-existnt column [<Field>] | Se adicionar o campo alias ao analisador, certifique-se de que também adiciona este alias. |
| Campo opcional em falta [<Campo>] | Embora os campos opcionais estejam muitas vezes em falta, vale a pena rever a lista para determinar se algum dos campos opcionais pode ser mapeado a partir da origem. |
| Campo extra não normalizado [<Campo>] | Embora os campos não normalizados sejam válidos, vale a pena rever a lista para determinar se algum dos valores não normalizados pode ser mapeado para um campo opcional. |
Nota
Os erros impedirão que o conteúdo que utiliza o analisador funcione corretamente. Os avisos não impedirão o conteúdo de funcionar, mas podem reduzir a qualidade dos resultados.
Validar os valores de saída
Para se certificar de que o analisador produz valores válidos, utilize o teste de dados ASIM ao executar a seguinte consulta na página Registos do Microsoft Sentinel:
<parser name> | limit <X> | invoke ASimDataTester ('<schema>')
Especificar um esquema é opcional. Se não for especificado um esquema, o EventSchema campo é utilizado para identificar o esquema ao qual o evento deve aderir. Se um evento não incluir um EventSchema campo, apenas os campos comuns serão verificados. Se um esquema for especificado como um parâmetro, este esquema será utilizado para testar todos os registos. Isto é útil para parsers mais antigos que não definem o EventSchema campo.
Nota
Mesmo quando um esquema não é especificado, são necessários parênteses vazios após o nome da função.
Este teste consome muitos recursos e pode não funcionar em todo o conjunto de dados. Defina X como o maior número para o qual a consulta não excederá o limite de tempo ou defina o intervalo de tempo da consulta com o seletor de intervalo de tempo.
Processe os resultados da seguinte forma:
| Mensagem | Ação |
|---|---|
| (0) Erro: erro de correspondência do tipo para a coluna [<Campo>]. Atualmente é [<Tipo>] e deve ser [<Tipo>] | Certifique-se de que o tipo de campo normalizado está correto, normalmente utilizando uma função de conversão como tostring. |
| (0) Erro: Valores inválidos (até 10 listados) para o campo [<Campo>] do tipo [<Tipo> Lógico] | Certifique-se de que o analisador mapeia o campo de origem correto para o campo de saída. Se mapeado corretamente, atualize o analisador para transformar o valor de origem no tipo, valor ou formato corretos. Veja a lista de tipos lógicos para obter mais informações sobre os valores e formatos corretos para cada tipo lógico. Tenha em atenção que a ferramenta de teste lista apenas uma amostra de 10 valores inválidos. |
| (1) Aviso: Valor vazio no campo obrigatório [<Campo>] | Os campos obrigatórios devem ser preenchidos e não apenas definidos. Verifique se o campo pode ser preenchido a partir de outras origens de registos para os quais a origem atual está vazia. |
| (2) Informações: Valor vazio no campo recomendado [<Campo>] | Normalmente, os campos recomendados devem ser preenchidos. Verifique se o campo pode ser preenchido a partir de outras origens de registos para os quais a origem atual está vazia. |
| (2) Informações: Valor vazio no campo opcional [<Campo>] | Verifique se o campo aliased é obrigatório ou recomendado e, em caso afirmativo, se pode ser preenchido a partir de outras origens. |
Muitas das mensagens também comunicam o número de registos que geraram a mensagem e a respetiva percentagem da amostra total. Esta percentagem é um bom indicador da importância do problema. Por exemplo, para um campo recomendado:
- Os valores vazios de 90% podem indicar um problema geral de análise.
- Os valores vazios de 25% podem indicar uma variante de evento que não foi analisada corretamente.
- Alguns valores vazios podem ser um problema insignificante.
Nota
Os erros impedirão que o conteúdo que utiliza o analisador funcione corretamente. Os avisos não impedirão o conteúdo de funcionar, mas podem reduzir a qualidade dos resultados.
Parsers de contribuição
Poderá querer contribuir com o analisador para a distribuição ASIM primária. Se forem aceites, os analisadores estarão disponíveis para todos os clientes como analisadores incorporados do ASIM.
Para contribuir com os seus analisadores:
- Desenvolva um analisador de filtragem e um analisador sem parâmetros.
- Crie um ficheiro YAML para o analisador, conforme descrito em Implementar Parsers acima.
- Certifique-se de que os seus analisadores passam todos os testes sem erros. Se existirem avisos restantes, documente-os no ficheiro YAML do analisador.
- Crie um pedido Pull no repositório Microsoft Sentinel GitHub, incluindo:
- Os ficheiros YAML dos analisadores nas pastas de analisador ASIM (
/Parsers/ASim<schema>/Parsers) - Dados de exemplo representativos de acordo com as diretrizes de submissão de exemplos.
- Teste os resultados de acordo com as diretrizes de submissão dos resultados do teste.
- Os ficheiros YAML dos analisadores nas pastas de analisador ASIM (
Documentar avisos aceites
Se os avisos listados pelas ferramentas de teste ASIM forem considerados válidos para um analisador, documente os avisos aceites no ficheiro YAML do analisador através da secção Exceções, conforme mostrado no exemplo abaixo.
Exceptions:
- Field: DnsQuery
Warning: Invalid value
Exception: May have values such as "1164-ms-7.1440-9fdc2aab.3b2bd806-978e-11ec-8bb3-aad815b5cd42" which are not valid domains names. Those are related to TKEY RR requests.
- Field: DnsQuery
Warning: Empty value in mandatory field
Exception: May be empty for requests for root servers and for requests for RR type DNSKEY
O aviso especificado no ficheiro YAML deve ser uma forma abreviada da mensagem de aviso que identifica exclusivamente. O valor é utilizado para corresponder às mensagens de aviso ao realizar testes automatizados e ignorá-los.
Diretrizes de submissão de exemplos
Os dados de exemplo são necessários para resolver problemas do analisador e para garantir que as atualizações futuras do analisador estão em conformidade com os exemplos mais antigos. Os exemplos que submeter devem incluir qualquer variante de evento suportada pelo analisador. Certifique-se de que os eventos de exemplo incluem todos os tipos de eventos possíveis, formatos de eventos e variações, como eventos que representam atividades com êxito e com falhas. Certifique-se também de que as variações nos formatos de valor são representadas. Por exemplo, se um nome de anfitrião puder ser representado como um FQDN ou um nome de anfitrião simples, os eventos de exemplo devem incluir ambos os formatos.
Para submeter os exemplos de eventos, utilize os seguintes passos:
-
LogsNo ecrã, execute uma consulta que irá extrair da tabela de origem apenas os eventos selecionados pelo analisador. Por exemplo, para o analisador DNS do Infoblox, utilize a seguinte consulta:
Syslog
| where ProcessName == "named"
Exporte os resultados com a opção Exportar para CSV para um ficheiro com o nome
<EventVendor>_<EventProduct>_<EventSchema>_IngestedLogs.csv, WhereEventProduct,EventProducteEventSchemasão os valores atribuídos pelo analisador a esses campos.LogsNo ecrã, execute uma consulta que produza o esquema ou a tabela de entrada do analisador. Por exemplo, para o mesmo analisador DNS do Infoblox, a consulta é:
Syslog
| getschema
Exporte os resultados com a opção Exportar para CSV para um ficheiro com o nome
<TableName>_schema.csv, emTableNameque é o nome da tabela de origem que o analisador utiliza.Inclua ambos os ficheiros no pr na pasta
/Sample Data/ASIM. Se o ficheiro já existir, adicione a sua alça do GitHub ao nome, por exemplo:<EventVendor>_<EventProduct>_<EventSchema>_SchemaTest_<GitHubHandle>.csv
Diretrizes de submissão de resultados de teste
Os resultados dos testes são importantes para verificar a correção do analisador e compreender qualquer exceção reportada.
Para submeter os resultados do teste, utilize os seguintes passos:
Execute os testes do analisador e descreva-os na secção de testes .
e exporte os resultados dos testes com a opção Exportar para CSV para ficheiros com o nome
<EventVendor>_<EventProduct>_<EventSchema>_SchemaTest.csve<EventVendor>_<EventProduct>_<EventSchema>_DataTest.csvrespetivamente.Inclua ambos os ficheiros no pr na pasta
/Parsers/ASim<schema>/Tests.
Passos seguintes
Este artigo aborda o desenvolvimento de analisadores ASIM.
Saiba mais sobre os analisadores do ASIM:
- Descrição geral dos analisadores do ASIM
- Utilizar analisadores ASIM
- Gerir analisadores asim
- A lista de analisadores do ASIM
Saiba mais sobre o ASIM em geral:
- Veja o Webinar deep dive no Microsoft Sentinel Normalizar Analisadores e Conteúdo Normalizado ou reveja os diapositivos
- Descrição geral do Modelo de Informação de Segurança Avançada (ASIM)
- Esquemas do Modelo de Informação de Segurança Avançada (ASIM)
- Conteúdo do Modelo de Informação de Segurança Avançada (ASIM)