Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пользователи расширенной информационной модели безопасности (ASIM) используют унифицированные средства синтаксического анализа вместо имен таблиц в своих запросах, чтобы просматривать данные в нормализованном формате и включать в запрос все данные, относящиеся к схеме. Объединяющие средства синтаксического анализа, в свою очередь, используют средства синтаксического анализа для конкретного источника для обработки конкретных сведений о каждом источнике.
Microsoft Sentinel предоставляет встроенные средства синтаксического анализа для многих источников данных. Вы можете изменить или разработать эти средства синтаксического анализа для конкретного источника в следующих ситуациях:
Когда устройство предоставляет события, соответствующие схеме ASIM, но средство синтаксического анализа для вашего устройства и соответствующей схемы недоступно в Microsoft Sentinel.
Если средства синтаксического анализа, зависящие от источника ASIM, доступны для устройства, но ваше устройство отправляет события в методе или формате, отличном от ожидаемого средствами синтаксического анализа ASIM. Например, вы можете:
Исходное устройство может быть настроено для отправки событий нестандартным способом.
Версия устройства может отличаться от версии, поддерживаемой анализатором ASIM.
События могут собираться, изменяться и пересылаться промежуточной системой.
Чтобы понять, как средства синтаксического анализа вписываются в архитектуру ASIM, см. схему архитектуры ASIM.
Процесс разработки пользовательского средства синтаксического анализа ASIM
В следующем рабочем процессе описаны общие шаги по разработке настраиваемого средства синтаксического анализа ASIM, зависят от источника.
Определите схемы или схемы, которые представляют события, отправленные из источника. Дополнительные сведения см. в разделе Общие сведения о схеме.
Сопоставьте поля исходного события с идентифицированной схемой или схемами.
Разработка одного или нескольких анализаторов ASIM для исходного кода. Вам потребуется разработать средство синтаксического анализа фильтрации и средство синтаксического анализа без параметров для каждой схемы, соответствующей источнику.
Протестируйте средство синтаксического анализа.
Разверните средства синтаксического анализа в рабочих областях Microsoft Sentinel.
Обновите соответствующее унифицированное средство синтаксического анализа ASIM, чтобы сослаться на новое настраиваемое средство синтаксического анализа. Дополнительные сведения см. в разделе Управление средствами синтаксического анализа ASIM.
Вы также можете добавить средства синтаксического анализа в основной дистрибутив ASIM. Встроенные средства синтаксического анализа также могут быть доступны во всех рабочих областях в виде встроенных средств синтаксического анализа.
В этой статье описывается процесс разработки, тестирования и развертывания.
Совет
Также просмотрите вебинар глубокого погружения по Microsoft Sentinel нормализации синтаксического анализа и нормализованного содержимого или просмотрите соответствующую презентацию слайдов. Дополнительные сведения см. в разделе Дальнейшие действия.
Сбор примеров журналов
Для создания эффективных средств синтаксического анализа ASIM требуется репрезентативный набор журналов, который в большинстве случаев потребует настройки исходной системы и ее подключения к Microsoft Sentinel. Если у вас нет доступного исходного устройства, облачные службы с оплатой по мере использования позволяют развернуть множество устройств для разработки и тестирования.
Кроме того, поиск документации поставщика и примеров для журналов может помочь ускорить разработку и уменьшить количество ошибок, обеспечивая широкий формат журнала.
Репрезентативный набор журналов должен включать:
- События с разными результатами событий.
- События с разными действиями ответа.
- Различные форматы для имени пользователя, имени узла и идентификаторов, а также других полей, требующих нормализации значений.
Совет
Запустите новое пользовательское средство синтаксического анализа с помощью существующего средства синтаксического анализа для той же схемы. Использование существующего средства синтаксического анализа особенно важно для фильтрации средств синтаксического анализа, чтобы убедиться, что они принимают все параметры, необходимые для схемы.
Планирование сопоставления
Перед разработкой средства синтаксического анализа сопоставьте сведения, доступные в исходном событии или событиях, с схемой, которую вы определили:
- Сопоставить все обязательные поля и желательно также рекомендуемые поля.
- Попробуйте сопоставить любую информацию, доступную из источника, с нормализованным полям. Если она недоступна в рамках выбранной схемы, рассмотрите возможность сопоставления с полями, доступными в других схемах.
- Сопоставляет значения полей в источнике с нормализованными значениями, разрешенными ASIM. Исходное значение хранится в отдельном поле, например
EventOriginalResultDetails.
Разработка средства синтаксического анализа
Разработайте фильтр и средство синтаксического анализа без параметров для каждой соответствующей схемы.
Пользовательское средство синтаксического анализа — это запрос KQL, разработанный на странице журналов Microsoft Sentinel. Запрос средства синтаксического анализа состоит из трех частей:
Фильтр>Анализа>Подготовка полей
Фильтрация
Фильтрация соответствующих записей
Во многих случаях таблица в Microsoft Sentinel включает несколько типов событий. Например, вы можете:
- Таблица Syslog содержит данные из нескольких источников.
- Пользовательские таблицы могут содержать сведения из одного источника, который предоставляет несколько типов событий и может соответствовать различным схемам.
Поэтому средство синтаксического анализа сначала должно фильтровать только записи, относящиеся к целевой схеме.
Фильтрация в KQL выполняется с помощью where оператора . Например, событие Sysmon 1 сообщает о создании процесса и, следовательно, нормализуется по схеме ProcessEvent . Событие Sysmon 1 входит в таблицу Event , поэтому используйте следующий фильтр:
Event | where Source == "Microsoft-Windows-Sysmon" and EventID == 1
Важно!
Средство синтаксического анализа не должно фильтровать по времени. Запрос, использующий средство синтаксического анализа, будет применять диапазон времени.
Фильтрация по типу источника с помощью списка отслеживания
В некоторых случаях само событие не содержит сведений, которые позволили бы выполнять фильтрацию по определенным типам источников.
Например, события DNS Infoblox отправляются как сообщения системного журнала, и их трудно отличить от сообщений системного журнала, отправленных из других источников. В таких случаях средство синтаксического анализа использует список источников, определяющих соответствующие события. Этот список хранится в списке Sources_by_SourceType отслеживания.
Чтобы использовать список отслеживания ASimSourceType в средствах синтаксического анализа, используйте _ASIM_GetSourceBySourceType функцию в разделе фильтрация средства синтаксического анализа. Например, средство синтаксического анализа DNS Infoblox включает в раздел фильтрации следующее:
| where Computer in (_ASIM_GetSourceBySourceType('InfobloxNIOS'))
Чтобы использовать этот пример в средства синтаксического анализа, выполните следующие действия:
Замените
Computerименем поля, включающего сведения об источнике. Это значение можно сохранить дляComputerлюбых синтаксического анализа на основе syslog.Замените
InfobloxNIOSмаркер выбранным значением для средства синтаксического анализа. Сообщите пользователям средства синтаксического анализа о том, что они должны обновитьASimSourceTypeсписок отслеживания, используя выбранное значение, а также список источников, отправляющих события этого типа.
Фильтрация по параметрам средства синтаксического анализа
При разработке средства синтаксического анализа фильтров убедитесь, что средство синтаксического анализа принимает параметры фильтрации для соответствующей схемы, как описано в справочной статье по этой схеме. Использование существующего средства синтаксического анализа в качестве отправной точки гарантирует, что средство синтаксического анализа содержит правильную сигнатуру функции. В большинстве случаев фактический код фильтрации также аналогичен для фильтров синтаксического анализа для той же схемы.
При фильтрации убедитесь, что вы:
- Фильтрация перед синтаксический анализ с использованием физических полей. Если отфильтрованные результаты недостаточно точны, повторите тест после анализа, чтобы точно настроить результаты. Дополнительные сведения см. в разделе Оптимизация фильтрации.
- Не фильтруйте, если параметр не определен и по-прежнему имеет значение по умолчанию.
В следующих примерах показано, как реализовать фильтрацию для строкового параметра, где по умолчанию обычно используется значение "*", и для параметра списка, где значение по умолчанию обычно является пустым списком.
srcipaddr=='*' or ClientIP==srcipaddr
array_length(domain_has_any) == 0 or Name has_any (domain_has_any)
Дополнительные сведения о следующих элементах см. в документации по Kusto:
Оптимизация фильтрации
Чтобы обеспечить производительность средства синтаксического анализа, обратите внимание на следующие рекомендации по фильтрации:
- Всегда фильтруйте по встроенным, а не проанализированным полям. Хотя иногда проще фильтровать с помощью проанализированных полей, это значительно влияет на производительность.
-
Используйте операторы, обеспечивающие оптимизированную производительность. В частности,
==,hasиstartswith. Использование таких операторов, какcontainsилиmatches regex, также значительно влияет на производительность.
Рекомендации по фильтрации по производительности не всегда могут быть простыми в выполнении. Например, использование has менее точно, чем contains. В других случаях сопоставление встроенного поля, например SyslogMessage, является менее точным, чем сравнение извлеченного поля, например DvcAction. В таких случаях рекомендуется по-прежнему выполнять предварительную фильтрацию с помощью оператора оптимизации производительности по встроенному полю и повторять фильтр, используя более точные условия после синтаксического анализа.
Пример см. в следующем фрагменте средства синтаксического анализа DNS Infoblox . Средство синтаксического анализа сначала проверяет, что в поле SyslogMessage есть has слово client. Однако термин может использоваться в другом месте сообщения, поэтому после анализа Log_Type поля средство синтаксического анализа снова проверяет, что слово client действительно является значением поля.
Syslog | where ProcessName == "named" and SyslogMessage has "client"
…
| extend Log_Type = tostring(Parser[1]),
| where Log_Type == "client"
Примечание.
Средства синтаксического анализа не должны фильтровать по времени, так как запрос, использующий средство синтаксического анализа, уже фильтрует время.
Анализа
После того как запрос выберет соответствующие записи, может потребоваться проанализировать их. Как правило, синтаксический анализ необходим, если в одном текстовом поле передается несколько полей событий.
Ниже перечислены операторы KQL, выполняющие синтаксический анализ, упорядоченные по оптимизации производительности. Первый обеспечивает наиболее оптимизированную производительность, а последний — наименее оптимизированную.
| Operator/function() | Описание |
|---|---|
| Функция split() | Анализ строки значений с разделителями. |
| Функция parse_csv() | Выполните синтаксический анализ строки значений, отформатированных в виде строки CSV (разделенных запятыми значений). |
| Оператор parse-kv | Извлекает структурированную информацию из строкового выражения и представляет информацию в форме "ключ-значение". |
| Оператор синтаксического анализа | Анализ нескольких значений из произвольной строки с помощью шаблона, который может быть упрощенным шаблоном с более высокой производительностью или регулярным выражением. |
| Функция extract_all() | Анализ отдельных значений из произвольной строки с помощью регулярного выражения.
extract_all имеет аналогичную производительность, parse если последний использует регулярное выражение. |
| Функция extract() | Извлечение одного значения из произвольной строки с помощью регулярного выражения. Использование extract обеспечивает более высокую производительность, чем parse или extract_all , если требуется одно значение. Однако использование нескольких активаций extract для одной исходной строки менее эффективно, чем одна parse или extract_all , и этого следует избегать. |
| Функция parse_json() | Выполните синтаксический анализ значений в строке в формате JSON. Если из JSON требуется только несколько значений, использование parse, extractили extract_all обеспечивает лучшую производительность. |
| Функция parse_xml() | Выполните синтаксический анализ значений в строке в формате XML. Если из XML-кода требуется только несколько значений, использование parse, extractили extract_all обеспечивает более высокую производительность. |
Нормализации
Имена полей сопоставления
Простейшая форма нормализации — переименование исходного поля в его нормализованное имя. Для этого используйте оператор project-rename . Использование переименования проекта гарантирует, что поле по-прежнему управляется как физическое поле, и обработка поля является более производительной. Например, вы можете:
| project-rename
ActorUserId = InitiatingProcessAccountSid,
ActorUserAadId = InitiatingProcessAccountObjectId,
ActorUserUpn = InitiatingProcessAccountUpn,
Нормализация формата и типа полей
Во многих случаях извлекаемое исходное значение необходимо нормализовать. Например, в ASIM MAC-адрес использует двоеточие в качестве разделителя, в то время как источник может отправить MAC-адрес с разделителями дефиса. Основным оператором для преобразования значений является extend, наряду с широким набором строковых, числовых и дат KQL-функций.
Кроме того, для работы синтаксического анализатора важно убедиться, что поля выходных данных средства синтаксического анализа соответствуют типу, определенному в схеме. Например, может потребоваться преобразовать строку, представляющую дату и время, в поле datetime. В таких случаях полезны такие функции, как todatetime и tohex .
Например, исходный уникальный идентификатор события может быть отправлен в виде целого числа, но ASIM требует, чтобы значение было строковым, чтобы обеспечить широкую совместимость источников данных. Поэтому при назначении исходного поля используйте extend и tostring вместо project-rename:
| extend EventOriginalUid = tostring(ReportId),
Производные поля и значения
Возможно, значение исходного поля, извлеченное, может потребоваться сопоставить с набором значений, заданным для поля целевой схемы. Функции iff, caseи lookup могут быть полезны для сопоставления доступных данных с целевыми значениями.
Например, средство синтаксического анализа Microsoft DNS назначает EventResult поле на основе идентификатора события и кода ответа с помощью iff инструкции следующим образом:
extend EventResult = iff(EventId==257 and ResponseCode==0 ,'Success','Failure')
Чтобы сопоставить несколько значений, определите datatable сопоставление с помощью оператора и используйте lookup для выполнения сопоставления. Например, некоторые источники сообщают числовые коды ответа DNS и сетевой протокол, в то время как схема требует более распространенного представления текстовых меток для обоих. В следующем примере показано, как получить необходимые значения с помощью datatable и 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
Обратите внимание, что поиск полезен и эффективен, если сопоставление имеет только два возможных значения.
Если условия сопоставления более сложны, комбинируйте iff, caseи lookup. В приведенном ниже примере показано, как объединить lookup и case. В lookup приведенном выше примере возвращается пустое значение в поле DnsResponseCodeName , если значение подстановки не найдено. В case приведенном ниже примере он дополняется с помощью результата lookup операции, если он доступен, и указания дополнительных условий в противном случае.
| extend DnsResponseCodeName =
case (
DnsResponseCodeName != "", DnsResponseCodeName,
DnsResponseCode between (3841 .. 4095), 'Reserved for Private Use',
'Unassigned'
)
Microsoft Sentinel предоставляет удобные функции для общих значений подстановки. Например, приведенный DnsResponseCodeName выше запрос можно реализовать с помощью одной из следующих функций:
| extend DnsResponseCodeName = _ASIM_LookupDnsResponseCode(DnsResponseCode)
| invoke _ASIM_ResolveDnsResponseCode('DnsResponseCode')
Первый параметр принимает в качестве параметра значение для поиска и позволяет выбрать выходное поле и, следовательно, полезно в качестве общей функции подстановки. Второй вариант больше ориентирован на средства синтаксического анализа, принимает в качестве входных данных имя исходного поля и обновляет необходимое поле ASIM, в данном случае DnsResponseCodeName.
Полный список вспомогательных функций ASIM см. в статье Функции ASIM.
Поля обогащения
Помимо полей, доступных из источника, результирующее событие ASIM включает поля обогащения, которые должен создать средство синтаксического анализа. Во многих случаях средства синтаксического анализа могут присваивать значения константы полям, например:
| extend
EventCount = int(1),
EventProduct = 'M365 Defender for Endpoint',
EventVendor = 'Microsoft',
EventSchemaVersion = '0.1.0',
EventSchema = 'ProcessEvent'
Другим типом полей обогащения, которые должны задать средства синтаксического анализа, являются поля типов, которые обозначают тип значения, хранящегося в связанном поле. Например, поле SrcUsernameType обозначает тип значения, хранящегося в SrcUsername поле. Дополнительные сведения о полях типов можно найти в описании сущностей.
В большинстве случаев типам также присваивается постоянное значение. Однако в некоторых случаях тип должен определяться на основе фактического значения, например:
DomainType = iif (array_length(SplitHostname) > 1, 'FQDN', '')
Microsoft Sentinel предоставляет полезные функции для обработки обогащения. Например, используйте следующую функцию для автоматического назначения полей SrcHostname, SrcDomainи SrcDomainTypeSrcFQDN на основе значения в поле Computer.
| invoke _ASIM_ResolveSrcFQDN('Computer')
Эта функция задаст поля следующим образом:
| Поле "Компьютер" | Поля вывода |
|---|---|
| server1 | SrcHostname: server1 SrcDomain, SrcDomainType, SrcFQDN все пустые |
| server1.microsoft.com | SrcHostname: server1 SrcDomain: microsoft.com SrcDomainType: полное доменное имя SrcFQDN:server1.microsoft.com |
Функции _ASIM_ResolveDstFQDN и _ASIM_ResolveDvcFQDN выполняют аналогичную задачу, заполняя связанные Dst поля и Dvc . Полный список вспомогательных функций ASIM см. в статье Функции ASIM.
Выбор полей в результирующем наборе
При необходимости средство синтаксического анализа может выбирать поля в наборе результатов. Удаление ненужных полей может повысить производительность и повысить ясность, избегая путаницы между нормализованными полями и остальными исходными полями.
Для выбора полей в наборе результатов используются следующие операторы KQL:
| Оператор | Описание | Использование в синтаксическом анализаторе |
|---|---|---|
| проект-прочь | Удаляет поля. | Используйте project-away для определенных полей, которые нужно удалить из результирующий набор. Мы не рекомендуем удалять исходные поля, которые не нормализованы из результирующих наборов, если они не создают путаницу или имеют очень большой размер и могут повлиять на производительность. |
| Проекта | Выбирает поля, которые существовали ранее или были созданы в рамках инструкции, и удаляет все остальные поля. | Не рекомендуется использовать в синтаксическом анализаторе, так как средство синтаксического анализа не должно удалять другие поля, которые не нормализованы. Если необходимо удалить определенные поля, например временные значения, используемые при синтаксическом анализе, используйте project-away , чтобы удалить их из результатов. |
Например, при синтаксическом анализе настраиваемой таблицы журнала используйте следующую команду, чтобы удалить оставшиеся исходные поля, которые по-прежнему имеют дескриптор типа:
| project-away
*_d, *_s, *_b, *_g
Обработка вариантов синтаксического анализа
Важно!
Различные варианты представляют разные типы событий, обычно сопоставляются с разными схемами, разрабатывают отдельные средства синтаксического анализа.
Во многих случаях события в потоке событий включают варианты, для которых требуется другая логика синтаксического анализа. Для синтаксического анализа различных вариантов в одном синтаксическом анализаторе используйте условные операторы, такие как iff и case, или используйте структуру объединения.
Чтобы использовать union для обработки нескольких вариантов, создайте отдельную функцию для каждого варианта и используйте оператор union для объединения результатов:
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…
Чтобы избежать повторяющихся событий и чрезмерной обработки, убедитесь, что каждая функция запускается путем фильтрации и использования собственных полей только событий, которые она предназначена для анализа. Кроме того, при необходимости используйте проект-away в каждой ветви перед объединением.
Развертывание средства синтаксического анализа
Разверните средства синтаксического анализа вручную, скопировав их на страницу журнала мониторинга Azure и сохранив запрос как функцию. Этот метод полезен для тестирования. Дополнительные сведения см. в разделе Создание функции.
Чтобы развернуть большое количество средств синтаксического анализа, рекомендуется использовать шаблоны ARM средства синтаксического анализа следующим образом:
Создайте файл YAML на основе соответствующего шаблона для каждой схемы и включите в него запрос. Начните с шаблона YAML , соответствующего типу схемы и средства синтаксического анализа, фильтрации или без параметров.
Используйте преобразователь шаблонов ASIM YAML для ARM , чтобы преобразовать файл YAML в шаблон ARM.
При развертывании обновления удалите старые версии функций с помощью портала или средство PowerShell.
Разверните шаблон с помощью портал Azure или PowerShell.
Вы также можете объединить несколько шаблонов в один процесс развертывания с помощью связанных шаблонов.
Совет
Шаблоны ARM могут объединять различные ресурсы, поэтому средства синтаксического анализа можно развертывать вместе с соединителями, правилами аналитики или списками отслеживания, чтобы назвать несколько полезных вариантов. Например, средство синтаксического анализа может ссылаться на список отслеживания, развернутый рядом с ним.
Тестовые средства синтаксического анализа
В этом разделе описывается, что средства тестирования, которые предоставляются ASIM, которые позволяют протестировать средства синтаксического анализа. При этом средства синтаксического анализа — это код, иногда сложный, и в дополнение к автоматическому тестированию рекомендуется использовать стандартные методы обеспечения качества, такие как проверки кода.
Установка средств тестирования ASIM
Чтобы протестировать ASIM, разверните средство тестирования ASIM в рабочей области Microsoft Sentinel, где:
- Средство синтаксического анализа развернуто.
- Исходная таблица, используемая анализатором, доступна.
- Исходная таблица, используемая анализатором, заполняется разнообразной коллекцией соответствующих событий.
Проверка выходной схемы
Чтобы убедиться, что средство синтаксического анализа создает допустимую схему, используйте тестер схем ASIM, выполнив следующий запрос на странице журналов Microsoft Sentinel:
<parser name> | getschema | invoke ASimSchemaTester('<schema>')
Обработайте результаты следующим образом:
| Ошибка | Действие |
|---|---|
| Отсутствует обязательное поле [<Поле>] | Добавьте поле в средство синтаксического анализа. Во многих случаях это будет производное значение или константное значение, а не поле, которое уже доступно из источника. |
| Отсутствует поле [<Поле>] является обязательным, если существует обязательный столбец [<Поле>] | Добавьте поле в средство синтаксического анализа. Во многих случаях это поле обозначает типы существующего столбца, на который оно ссылается. |
| Отсутствует поле [<Поле>] является обязательным, если столбец [<Поле>] существует | Добавьте поле в средство синтаксического анализа. Во многих случаях это поле обозначает типы существующего столбца, на который оно ссылается. |
| Отсутствует обязательный псевдоним [<Поле>] псевдоним существующего столбца [<Поле>] | Добавление псевдонима в средство синтаксического анализа |
| Отсутствует рекомендуемый псевдоним [<Поле>] псевдоним существующего столбца [<Поле>] | Добавление псевдонима в средство синтаксического анализа |
| Отсутствует необязательный псевдоним [<Поле>] псевдоним существующего столбца [<Поле>] | Добавление псевдонима в средство синтаксического анализа |
| Отсутствует обязательный псевдоним [<Поле>], отсутствует столбец [<Поле>] | Эта ошибка сопровождает аналогичную ошибку для поля псевдонима. Исправьте ошибку поля псевдонима и добавьте этот псевдоним в средство синтаксического анализа. |
| Несоответствие типов для поля [<Поле>]. В настоящее время он имеет значение [<Type>] и должен иметь значение [<Type>] | Убедитесь, что тип нормализованного поля правильный, как правило, с помощью функции преобразования , такой как tostring. |
| Информация | Действие |
|---|---|
| Отсутствует рекомендуемое поле [<Поле>] | Попробуйте добавить это поле в средство синтаксического анализа. |
| Информация | Действие |
|---|---|
| Отсутствует рекомендуемый псевдоним [<Поле>] псевдоним несуществующего столбца [<Поле>] | При добавлении поля псевдонима в средство синтаксического анализа обязательно добавьте этот псевдоним. |
| Отсутствует необязательный псевдоним [<Поле>] псевдоним несуществующего столбца [<Поле>] | При добавлении поля псевдонима в средство синтаксического анализа обязательно добавьте этот псевдоним. |
| Отсутствует необязательное поле [<поле>] | Хотя необязательные поля часто отсутствуют, стоит просмотреть список, чтобы определить, можно ли сопоставить какие-либо из необязательных полей из источника. |
| Дополнительное ненормализованное поле [<Поле>] | Хотя ненормализованные поля допустимы, стоит просмотреть список, чтобы определить, можно ли сопоставить какие-либо из ненормализованных значений с необязательным полем. |
Примечание.
Ошибки не позволят содержимому, использующим средство синтаксического анализа, работать правильно. Предупреждения не помешают работе содержимого, но могут снизить качество результатов.
Проверка выходных значений
Чтобы убедиться, что средство синтаксического анализа создает допустимые значения, используйте тестер данных ASIM, выполнив следующий запрос на странице журналов Microsoft Sentinel:
<parser name> | limit <X> | invoke ASimDataTester ('<schema>')
Указание схемы является необязательным. Если схема не указана EventSchema , поле используется для идентификации схемы, к которым должно соответствовать событие. Если событие не включает EventSchema поле, будут проверяться только общие поля. Если схема указана в качестве параметра, эта схема будет использоваться для тестирования всех записей. Это полезно для более старых синтаксического анализа, которые не задают EventSchema поле.
Примечание.
Даже если схема не указана, после имени функции требуются пустые скобки.
Этот тест является ресурсоемким и может не работать со всем набором данных. Задайте для X наибольшее число, для которого время ожидания запроса не будет истекать, или задайте диапазон времени для запроса с помощью средства выбора диапазона времени.
Обработайте результаты следующим образом:
| Сообщение | Действие |
|---|---|
| (0) Ошибка: несоответствие типов для столбца [<Поле>]. В настоящее время он имеет значение [<Type>] и должен иметь значение [<Type>] | Убедитесь, что тип нормализованного поля правильный, как правило, с помощью функции преобразования , такой как tostring. |
| (0) Ошибка: недопустимые значения (до 10 в списке) для поля [<Поле>] типа [<Логический тип>] | Убедитесь, что средство синтаксического анализа сопоставляет правильное исходное поле с полем вывода. При правильном сопоставлении обновите средство синтаксического анализа, чтобы преобразовать исходное значение в правильный тип, значение или формат. Дополнительные сведения о правильных значениях и форматах для каждого логического типа см. в списке логических типов. Обратите внимание, что средство тестирования содержит только пример из 10 недопустимых значений. |
| (1) Предупреждение: пустое значение в обязательном поле [<Поле>] | Обязательные поля должны быть заполнены, а не просто определены. Проверьте, можно ли заполнить поле из других источников для записей, для которых текущий источник пуст. |
| (2) Info: пустое значение в рекомендуемом поле [<Поле>] | Рекомендуемые поля обычно заполняются. Проверьте, можно ли заполнить поле из других источников для записей, для которых текущий источник пуст. |
| (2) Сведения: пустое значение в необязательном поле [<Поле>] | Проверьте, является ли поле псевдонима обязательным или рекомендуемым, и если да, можно ли заполнить его из других источников. |
Многие сообщения также сообщают о количестве записей, которые создали сообщение, и их процент от общей выборки. Этот процент является хорошим показателем важности вопроса. Например, для рекомендуемого поля:
- 90 % пустых значений могут указывать на общую проблему синтаксического анализа.
- 25 % пустых значений могут указывать на вариант события, который был проанализирован неправильно.
- Горстка пустых значений может быть незначительной проблемой.
Примечание.
Ошибки не позволят содержимому, использующим средство синтаксического анализа, работать правильно. Предупреждения не помешают работе содержимого, но могут снизить качество результатов.
Средства синтаксического анализа вкладов
Может потребоваться добавить средство синтаксического анализа в основной дистрибутив ASIM. Если они будут приняты, средства синтаксического анализа будут доступны каждому клиенту как встроенные средства синтаксического анализа ASIM.
Чтобы предоставить средства синтаксического анализа, выполните приведенные далее действия.
- Разработайте средство синтаксического анализа фильтрации и средство синтаксического анализа без параметров.
- Создайте YAML-файл для средства синтаксического анализа, как описано в разделе Развертывание средства синтаксического анализа выше.
- Убедитесь, что средства синтаксического анализа прошли все тесты без ошибок. Если остались какие-либо предупреждения, задокументируйте их в YAML-файле средства синтаксического анализа.
- Создайте запрос на вытягивание для репозитория Microsoft Sentinel GitHub, в том числе:
- Синтаксический анализ файлов YAML в папках средства синтаксического анализа ASIM (
/Parsers/ASim<schema>/Parsers) - Репрезентативные выборки данных в соответствии с рекомендациями по отправке примеров.
- Результаты теста соответствуют рекомендациям по отправке результатов теста.
- Синтаксический анализ файлов YAML в папках средства синтаксического анализа ASIM (
Документирование принятых предупреждений
Если предупреждения, перечисленные средствами тестирования ASIM, считаются допустимыми для средства синтаксического анализа, задокументируйте принятые предупреждения в ФАЙЛЕ YAML средства синтаксического анализа с помощью раздела Исключения, как показано в примере ниже.
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
Предупреждение, указанное в ФАЙЛЕ YAML, должно быть короткой формой предупреждающего сообщения с уникальным идентификатором. Значение используется для сопоставления предупреждающих сообщений при выполнении автоматических тестов и их игнорирования.
Рекомендации по отправке примеров
Пример данных необходим при устранении неполадок средства синтаксического анализа и для обеспечения соответствия будущих обновлений средства синтаксического анализа старым образцам. Отсылаемые примеры должны включать любой вариант события, поддерживаемый анализатором. Убедитесь, что примеры событий включают все возможные типы событий, форматы событий и варианты, такие как события, представляющие успешные и неудачные действия. Кроме того, убедитесь, что представлены варианты в форматах значений. Например, если имя узла может быть представлено как полное доменное имя или простое имя узла, то примеры событий должны включать оба формата.
Чтобы отправить примеры событий, выполните следующие действия.
-
LogsНа экране выполните запрос, который извлекает из исходной таблицы только события, выбранные анализатором. Например, для средства синтаксического анализа DNS Infoblox используйте следующий запрос:
Syslog
| where ProcessName == "named"
Экспортируйте результаты с помощью параметра Экспорт в CSV в файл с именем
<EventVendor>_<EventProduct>_<EventSchema>_IngestedLogs.csv, WhereEventProduct,EventProductиEventSchema— это значения, присвоенные синтаксическому анализатору этим полям.LogsНа экране выполните запрос, который выдаст схему или таблицу входных данных средства синтаксического анализа. Например, для того же средства синтаксического анализа DNS Infoblox запрос будет следующим:
Syslog
| getschema
Экспортируйте результаты с помощью параметра Экспорт в CSV в файл с именем
<TableName>_schema.csv, гдеTableName— имя исходной таблицы, используемой анализатором.Включите оба файла в запрос запроса в папку
/Sample Data/ASIM. Если файл уже существует, добавьте дескриптор GitHub в имя, например:<EventVendor>_<EventProduct>_<EventSchema>_SchemaTest_<GitHubHandle>.csv
Рекомендации по отправке результатов теста
Результаты теста важны для проверки правильности средства синтаксического анализа и понимания любых зарегистрированных исключений.
Чтобы отправить результаты теста, выполните следующие действия.
Выполните тесты синтаксического анализа, описанные в разделе тесты .
и экспортируйте результаты тестов с помощью параметра Экспорт в CSV-файл в файлы с именами
<EventVendor>_<EventProduct>_<EventSchema>_SchemaTest.csvи<EventVendor>_<EventProduct>_<EventSchema>_DataTest.csvсоответственно.Включите оба файла в запрос запроса в папку
/Parsers/ASim<schema>/Tests.
Дальнейшие действия
В этой статье рассматривается разработка синтаксического анализа ASIM.
Дополнительные сведения о средствах синтаксического анализа ASIM:
- Общие сведения о средствах синтаксического анализа ASIM
- Использование средства синтаксического анализа ASIM
- Управление средствами синтаксического анализа ASIM
- Список средства синтаксического анализа ASIM
Дополнительные сведения о ASIM в целом:
- Просмотрите вебинар глубокого погружения по Microsoft Sentinel нормализации синтаксического анализа и нормализованного содержимого или просмотрите слайды
- Обзор расширенной информационной модели безопасности (ASIM)
- Схемы расширенной информационной модели безопасности (ASIM)
- Содержимое расширенной информационной модели безопасности (ASIM)