Desenvolver analisadores do Modelo Avançado de Informação de Segurança (ASIM)

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, usam analisadores específicos da fonte para lidar com os detalhes específicos de cada fonte.

O Microsoft Sentinel fornece analisadores específicos para fonte e integrados para muitas fontes de dados. Você pode querer modificar ou desenvolver esses analisadores específicos da fonte nas seguintes situações:

  • Quando o seu dispositivo fornece eventos que correspondem a um esquema ASIM, mas não existe no Microsoft Sentinel um parser específico da origem para o seu dispositivo e para o esquema relevante.

  • Quando analisadores específicos de origem ASIM estão disponíveis para seu dispositivo, mas seu dispositivo envia eventos em um método ou um formato diferente do esperado pelos analisadores ASIM. Por exemplo:

    • Seu dispositivo de origem pode ser configurado para enviar eventos de forma não padrão.

    • Seu dispositivo pode ter uma versão diferente da suportada pelo analisador ASIM.

    • Os eventos podem ser coletados, modificados e encaminhados por um sistema intermediário.

Para entender como os analisadores se encaixam na arquitetura ASIM, consulte o diagrama de arquitetura ASIM.

Processo de desenvolvimento do analisador ASIM personalizado

O fluxo de trabalho a seguir descreve as etapas de alto nível no desenvolvimento de um parser ASIM, específico para a fonte:

  1. Recolher registos de exemplo.

  2. 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.

  3. Mapeie os campos de evento de origem para o(s) esquema(s) identificado(s).

  4. Desenvolva um ou mais analisadores ASIM para sua fonte. Você precisará desenvolver um analisador de filtragem e um analisador sem parâmetros para cada esquema relevante para a origem.

  5. Teste o analisador.

  6. Deploy os parsers para os seus espaços de trabalho do Microsoft Sentinel.

  7. Atualize o parser de unificação ASIM relevante para fazer referência ao novo parser personalizado. Para obter mais informações, veja Gerir analisadores ASIM.

  8. Você também pode querer contribuir com os seus analisadores para a distribuição primária do ASIM. Os analisadores adicionados também podem ser disponibilizados em todos os espaços de trabalho como analisadores incorporados.

Este artigo orienta você pelas etapas de desenvolvimento, teste e implantação do processo.

Colecionar registos de amostra

Para construir analisadores ASIM eficazes, é necessário um conjunto representativo de logs, o que na maioria dos casos requer configurar o sistema de origem e ligá-lo 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 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 usando um analisador existente para o mesmo esquema. Usar um analisador sintático existente é especialmente importante no caso dos analisadores de filtragem, para garantir que aceitam todos os parâmetros exigidos pelo esquema.

Mapeamento de planejamento

Antes de desenvolver um analisador, mapeie as informações disponíveis no evento ou eventos de origem para o esquema identificado:

  • 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 o mapeamento para campos disponíveis em outros esquemas.
  • Mapeie os valores dos campos na origem para os valores normalizados permitidos pelo ASIM. O valor original é armazenado num campo separado, como EventOriginalResultDetails.

Desenvolvimento de analisadores

Desenvolva uma filtragem e um analisador sem parâmetros para cada esquema relevante.

Um parser personalizado é uma consulta KQL desenvolvida na página Microsoft Sentinel Logs. A consulta do analisador tem três partes:

Filtrar>Analisar>Preparar 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 fontes.
  • As tabelas personalizadas podem incluir informações de uma única fonte que fornece mais de um tipo de evento e pode se ajustar a vários esquemas.

Portanto, um analisador deve primeiro filtrar apenas os registros relevantes para o esquema de destino.

A filtragem no KQL é feita usando o where operador. Por exemplo, o evento 1 do Sysmon relata a criação do processo e, portanto, é 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 sintático não deve filtrar com base no tempo. A consulta que utiliza o analisador aplicará um intervalo de tempo.

Filtrando por tipo de fonte usando 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 Syslog enviadas de outras fontes. Nestes casos, o analisador baseia-se numa lista de origens que define os eventos relevantes. Esta lista é mantida na Sources_by_SourceType watchlist.

Para utilizar a lista de vigilância ASimSourceType nos seus analisadores, utilize a função _ASIM_GetSourceBySourceType na secção de filtragem dos analisadores. Por exemplo, o analisador DNS Infoblox inclui o seguinte na seção de filtragem:

  | where Computer in (_ASIM_GetSourceBySourceType('InfobloxNIOS'))

Para utilizar este exemplo no seu analisador:

  • Substitua Computer pelo nome do campo que contém as informações de origem da sua fonte. Você pode manter isso como Computer para qualquer analisador baseado no Syslog.

  • Substitua o InfobloxNIOS token por um valor de sua escolha para o analisador. Informe aos usuários do analisador que eles devem atualizar a ASimSourceType lista de observação usando o valor selecionado, bem como a lista de fontes que enviam eventos desse 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 maior parte dos casos, o código de filtragem propriamente dito também é semelhante para os analisadores de filtragem do mesmo esquema.

Ao filtrar, certifique-se de que:

  • Filtre antes de analisar usando campos físicos. Se os resultados filtrados não forem precisos o suficiente, repita o teste após a análise para ajustar os resultados. Para obter mais informações, consulte Otimização de filtragem.
  • Não filtre se o parâmetro não estiver definido e ainda tiver o valor predefinido.

Os exemplos a seguir mostram como implementar a filtragem para um parâmetro string, onde o valor padrão é geralmente '*', e para um parâmetro list, onde o valor padrão geralmente é 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, observe as seguintes recomendações de filtragem:

  • Filtre sempre por campos incorporados em vez de campos analisados. Embora às vezes seja mais fácil filtrar usando campos analisados, isso afeta drasticamente o desempenho.
  • Utilize operadores que proporcionam um desempenho otimizado. Em particular, ==, has, e startswith. A utilização de operadores como contains ou matches regex também afeta significativamente o desempenho.

As recomendações de filtragem para o desempenho nem sempre podem ser fáceis de seguir. Por exemplo, utilizar has é menos preciso do que contains. Em outros casos, a correspondência com o campo embutido, como SyslogMessage, é menos exata do que a comparação com 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.

Para obter um exemplo, consulte o seguinte trecho do analisador DNS Infoblox. Primeiro, o analisador verifica se o campo SyslogMessage has contém 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"

Note

Os analisadores não devem filtrar por tempo, uma vez que a consulta que utiliza o analisador já filtra o tempo.

Análise Sintática

Depois que a consulta seleciona os registros relevantes, pode ser necessário 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 executam a análise estão listados abaixo, ordenados por sua otimização de desempenho. O primeiro fornece o desempenho mais otimizado, enquanto o último proporciona o desempenho menos otimizado.

Operador/função() Description
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 vários valores de uma cadeia de caracteres arbitrária usando 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 de caracteres arbitrária usando 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 de caracteres arbitrária usando 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 extract sobre a mesma cadeia de origem é menos eficiente do que uma única parse ou extract_all e deve ser evitado.
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.

Normalização

Mapeando nomes de campos

A forma mais simples de normalização é renomear um campo original para seu nome normalizado. Use o operador project-rename para isso. O uso de project-rename garante que o campo ainda seja gerenciado como um campo físico e que a manipulação do campo tenha mais desempenho. 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 precisa ser normalizado. Por exemplo, no ASIM um endereço MAC usa dois pontos como separador, enquanto a fonte pode enviar um endereço MAC delimitado por hífen. O operador primário para a transformação de valores é extend, ao lado de um amplo conjunto de funções de cadeia KQL, numéricas e de data.

Além disso, garantir que os campos de saída do analisador correspondam 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. Portanto, ao atribuir o campo de origem, use extend 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 usando o datatable operador e use lookup para executar o mapeamento. Por exemplo, algumas fontes relatam códigos de resposta DNS numéricos e o protocolo de rede, enquanto o esquema exige a representação de rótulos de texto mais comuns para ambos. O exemplo a seguir demonstra como derivar os valores necessários usando 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

Observe que a pesquisa é útil e eficiente também quando o mapeamento tem apenas dois valores possíveis.

Quando as condições de mapeamento são mais complexas, combine iff, case, e lookup. O exemplo abaixo mostra como combinar lookup e case. O lookup exemplo acima retorna um valor vazio no campo DnsResponseCodeName se o valor de pesquisa não for encontrado. O case exemplo abaixo complementa-o utilizando o resultado da operação lookup, se disponível, e especificando 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 usando 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 consultar e deixa-te escolher o campo de saída, sendo assim útil como função de pesquisa geral. A segunda opção é mais voltada para analisadores, toma 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 enriquecimento

Além dos campos disponíveis na fonte, um evento ASIM resultante inclui campos de enriquecimento 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 enriquecimento que seus analisadores devem definir são campos de tipo, que designam o tipo do valor armazenado em um 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', '')

O Microsoft Sentinel fornece funções úteis para processar o enriquecimento. Por exemplo, use 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 definirá os campos da seguinte forma:

Campo do computador Campos de saída
server1 SrcHostname: servidor1
SrcDomain, SrcDomainType, SrcFQDN todos vazios
server1.microsoft.com SrcHostname: servidor1
SrcDomain: microsoft.com
SrcDomainType: FQDN
SrcFQDN:server1.microsoft.com

As funções _ASIM_ResolveDstFQDN e _ASIM_ResolveDvcFQDN desempenham uma tarefa semelhante, preenchendo os campos relacionados Dst e Dvc. Para obter uma lista completa das funções de ajuda do ASIM, veja Funções ASIM

Selecionar campos no conjunto de resultados

O analisador pode, opcionalmente, selecionar campos no conjunto de resultados. A remoção de campos desnecessários pode melhorar o desempenho e adicionar clareza, evitando a confusão entre campos normalizados e campos de origem restantes.

Os seguintes operadores KQL são usados para selecionar campos no seu conjunto de resultados:

Operador Description Quando utilizar num analisador
project-away Remove campos. Use project-away para campos específicos que você deseja remover do conjunto de resultados. Recomendamos não remover 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 no desempenho.
projeto Seleciona campos que existiam antes ou foram criados como parte da instrução e remove todos os outros campos. Não recomendado para uso em um analisador, pois o analisador não deve remover nenhum outro campo que não esteja normalizado.

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 log personalizada, use o seguinte para remover os campos originais restantes 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 case, ou utilize uma estrutura de união.

Para usar union para lidar com várias variantes, crie uma função separada para cada variante e use a instrução union 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, use o projeto-away em cada filial, antes do sindicato.

Implantar analisadores

Implemente os analisadores manualmente copiando-os para a página de Logs do Azure Monitor e guardando a consulta como uma função. Este método é útil para testes. Para obter mais informações, consulte Criar uma função.

Para implementar um grande número de parsers, recomendamos a utilização de modelos ARM para parsers, da seguinte forma:

  1. Crie um arquivo YAML com base no modelo relevante para cada esquema e inclua sua consulta nele. Comece com o modelo YAML relevante para o seu esquema e tipo de analisador, filtragem ou sem parâmetros.

  2. Utilize o conversor de modelos ASIM YAML para ARM para converter o seu ficheiro YAML num modelo do ARM.

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

  4. Implemente o seu modelo usando o portal Azure ou PowerShell.

Você também pode combinar vários modelos em um único processo de implantação usando modelos vinculados

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 as ferramentas de teste que o ASIM disponibiliza e que lhe permitem testar os seus analisadores. Dito isto, os analisadores sintáticos são código, por vezes complexo, e, para além dos testes automatizados, são recomendadas práticas padrão de garantia da qualidade, como revisões de código.

Instalar ferramentas de teste do ASIM

Para testar o ASIM, implemente a ferramenta de teste ASIM numa área de trabalho Microsoft Sentinel onde:

  • O parser está implantado.
  • A tabela de origem usada pelo analisador está disponível.
  • A tabela de origem usada pelo analisador é preenchida com uma coleção variada de eventos relevantes.

Validar o esquema de saída

Para garantir que o seu parser produz um esquema válido, use o testador de esquema ASIM executando a seguinte consulta na página Microsoft Sentinel Logs:

<parser name> | getschema | invoke ASimSchemaTester('<schema>')

Processe os resultados da seguinte forma:

Erro Action
Falta o campo obrigatório [<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 na fonte.
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 indica 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 indica os tipos da coluna existente a que se refere.
Alias obrigatório ausente [<Campo>] para a coluna existente [<Campo>] Adicione o alias ao analisador
Alias ausente recomendado [<Campo>] substituindo a coluna existente [<Campo>] Adicione o alias ao analisador
Falta de definição de alias opcional para o campo [<Campo>] ao criar um alias para a coluna existente [<Campo>] Adicione o alias ao analisador
Falta o alias obrigatório de [<Campo>] para a coluna em falta [<Campo>] Este erro acompanha um erro semelhante relativo ao campo com alias. Corrija o erro do campo com alias e adicione este alias ao seu analisador.
Incompatibilidade de tipo no 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 Action
Falta o campo recomendado [<Campo>] Considere adicionar este campo ao seu analisador.
Informações Action
Alias recomendado ausente [<Campo>] como apelido para coluna inexistente [<Campo>] Se adicionar ao analisador o campo com alias, certifique-se de que inclui também esse alias.
O alias opcional ausente [<Campo>] está a criar uma referência para a coluna inexistente [<Campo>] Se adicionar ao analisador o campo com alias, certifique-se de que inclui também esse alias.
Campo opcional em falta [<Campo>] Embora os campos opcionais estejam frequentemente ausentes, vale a pena rever a lista para determinar se algum dos campos opcionais pode ser mapeado a partir da fonte.
Campo extra não normalizado [<Campo>] Embora os campos não normalizados sejam válidos, vale a pena revisar a lista para determinar se algum dos valores não normalizados pode ser mapeado para um campo opcional.

Note

Os erros impedirão que o conteúdo que utiliza o analisador funcione corretamente. Os avisos não impedirão que o conteúdo funcione, mas podem reduzir a qualidade dos resultados.

Validar os valores de saída

Para garantir que o seu parser produz valores válidos, use o testador de dados ASIM executando a seguinte consulta na página Microsoft Sentinel Logs:

<parser name> | limit <X> | invoke ASimDataTester ('<schema>')

Especificar um esquema é opcional. Se um esquema não for especificado, o EventSchema campo será usado 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, esse esquema será usado para testar todos os registros. Isso é útil para analisadores mais antigos que não definem o EventSchema campo.

Note

Mesmo quando um esquema não é especificado, parênteses vazios são necessários 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 atinja o tempo limite, ou defina o intervalo de tempo da consulta utilizando o seletor de intervalo de tempo.

Processe os resultados da seguinte forma:

Message Action
(0) Erro: incompatibilidade de tipo na 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: Valor(es) inválido(s) (até 10 listados) para o campo [<Campo>] do tipo [<Tipo lógico>] Certifique-se de que o analisador mapeie 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.

Observe 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, não apenas definidos. Verifique se o campo pode ser preenchido a partir de outras fontes para registros para os quais a fonte atual está vazia.
(2) Info: Valor vazio no campo recomendado [<Campo>] Normalmente, os campos assinalados como recomendados devem ser preenchidos. Verifique se o campo pode ser preenchido a partir de outras fontes para registros para os quais a fonte atual está vazia.
(2) Info: Valor vazio no campo opcional [<Campo>] Verifique se o campo com alias é obrigatório ou recomendado e, em caso afirmativo, se pode ser preenchido a partir de outras fontes.

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 da questão. Por exemplo, para um campo recomendado:

  • 90% de valores vazios podem indicar um problema geral de análise.
  • 25% de valores vazios podem indicar uma variante de evento que não foi analisada corretamente.
  • Um punhado de valores vazios pode ser um problema insignificante.

Note

Os erros impedirão que o conteúdo que utiliza o analisador funcione corretamente. Os avisos não impedirão que o conteúdo funcione, mas podem reduzir a qualidade dos resultados.

Participe no desenvolvimento de analisadores

Poderá querer contribuir com o parser para a distribuição principal do ASIM. Se aceitos, os analisadores estarão disponíveis para todos os clientes como analisadores integrados da ASIM.

Para contribuir com os seus analisadores:

Documentação das advertências aceites

Se os avisos listados pelas ferramentas de teste ASIM forem considerados válidos para um analisador, documente os avisos aceitos no arquivo YAML do analisador usando a seçã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 a identifique de forma única. O valor é utilizado para corresponder às mensagens de aviso ao realizar testes automatizados e ignorá-los.

Diretrizes de envio de amostras

Os dados de amostra são necessários para solucionar problemas do analisador e para garantir que futuras atualizações do analisador estejam em conformidade com amostras mais antigas. Os exemplos enviados 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:

  • Logs Na tela, execute uma consulta que 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 usando a opção Exportar para CSV para um arquivo chamado <EventVendor>_<EventProduct>_<EventSchema>_IngestedLogs.csv, Onde EventProduct, EventProducte EventSchema são os valores atribuídos pelo analisador a esses campos.

  • No ecrã Logs, execute uma consulta que devolva o esquema ou a tabela de entrada do analisador. Por exemplo, para o mesmo analisador DNS Infoblox, a consulta é:

    Syslog
    | getschema
  • Exporte os resultados usando a opção Exportar para CSV para um arquivo chamado <TableName>_schema.csv, onde TableName é o nome da tabela de origem usada pelo analisador.

  • Inclua ambos os ficheiros na sua PR na pasta /Sample Data/ASIM. Se o ficheiro já existir, adicione o seu endereço de GitHub ao nome, por exemplo: <EventVendor>_<EventProduct>_<EventSchema>_SchemaTest_<GitHubHandle>.csv

Diretrizes para a submissão dos resultados dos testes

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 usando a opção Exportar para CSV para arquivos nomeados <EventVendor>_<EventProduct>_<EventSchema>_SchemaTest.csv e <EventVendor>_<EventProduct>_<EventSchema>_DataTest.csv respectivamente.

  • Inclua ambos os ficheiros na sua PR na pasta /Parsers/ASim<schema>/Tests.

Saiba mais sobre os analisadores do ASIM:

Saiba mais sobre o ASIM em geral: