Запрос данных с помощью языка запросов Kusto

Завершено

Для поиска и фильтрации собранных данных в Microsoft Sentinel можно использовать язык запросов Kusto (KQL).

Kusto Query Language — язык запросов Kusto

KQL предоставляет возможность создавать, хранить и запускать интерактивную аналитику по собранным данным. В Microsoft Sentinel язык KQL используется для визуализации и анализа важных данных. KQL можно использовать для создания сложных аналитических запросов, включающих в себя следующие операторы:

  • Вычисляемые столбцы
  • Функции объединения
  • Группировка по статистическим выражениям

Создание и выполнение основных запросов

Запрос — это доступное только для чтения обращение, которое обрабатывает данные и возвращает результаты этой обработки без изменения данных или метаданных. Аналогичную запросам SQL, в запросах KQL используются сущности схемы, упорядоченные в иерархию, например базы данных, таблицы и столбцы. Схема представляет собой коллекцию таблиц, сгруппированных по логическим категориям. Запросы состоят из последовательностей операторов запросов, разделенных точкой с запятой (;).

При создании запроса сначала указывается имя таблицы или команда поиска. Например, следующий запрос извлекает все записи из Event таблицы:

Event

Для разделения команд можно использовать символ вертикальной черты (|). Результат первой команды становится входными данными для следующей команды. Вы можете добавить любое количество команд в один запрос. Следующий запрос извлекает записи из Event таблицы, а затем выполняет поиск термина error в любом свойстве:

Event

| search error

Вы можете создать запрос с помощью табличных и скалярных операторов, которые KQL объединить в несколько операторов табличных выражений, образующих результаты запроса.

source1 | operator1 | operator2

В следующем примере источник является AzureActivity. Первый оператор — это whereфильтровать записи на основе логического выражения. Второй оператор снова where:

AzureActivity

| where OperationName == 'Delete Virtual Machine'
| where ActivityStatus == 'Accepted'

По умолчанию Log Analytics ограничивает запросы по диапазону времени, составляющему последние 24 часа. Чтобы задать другой диапазон времени, можно добавить явный TimeGenerated фильтр в запрос или использовать элемент Time range управления. Например, следующий запрос возвращает данные за предыдущий час.


AzureActivity

| where OperationName == 'Delete Virtual Machine'
| where ActivityStatus == 'Accepted'
| where TimeGenerated > ago (1h)

Запросы можно объединить с несколькими наиболее часто используемыми операторами.

  • count. возвращает количество строк в таблице.
  • take. возвращает заданное количество строк данных.
  • project. выбирает подмножество столбцов.
  • sort. Сортирует строки входной таблицы по одному столбцу или нескольким.
  • top. Возвращает первые N записей, отсортированные по указанным столбцам.
  • extend. вычисляет производные столбцы.
  • summarize. Агрегирует группы строк.
  • render. выводит результаты в графическом формате.

Для объединения записей из двух источников (таблиц) можно использовать join оператор. Оператор union объединяет две или несколько таблиц в одну.

Дополнительные сведения см. в учебнике по Microsoft Log Analytics, в котором для построения и выполнения запроса вместо непосредственных операций с самим запросом используются функции Log Analytics.

Чтобы узнать больше о KQL, можно также воспользоваться учебником по Azure Data Explorer.

Примечание.

Log Analytics в Microsoft Sentinel не поддерживает весь синтаксис KQL, используемый Azure Data Explorer.

Репозиторий Microsoft Sentinel на сайте GitHub

Вы также можете использовать репозиторий Microsoft Sentinel на сайте GitHub, чтобы найти специализированные запросы и книги, которые помогут защитить среду и выявить угрозы. Например, следующий запрос из репозитория GitHub для Microsoft Sentinel отображает подозрительное делегирование разрешений учетным записям пользователей.

let timeframe = 7d;
AzureActivity
| where TimeGenerated >= ago(timeframe)
| where OperationName == "Create role assignment"
| where ActivityStatus == "Succeeded"
| project Caller, CallerIpAddress
| evaluate basket()
| extend AccountCustomEntity = Caller, IPCustomEntity = CallerIpAddress

Запрос анализирует IP-адрес, с которого администратор предоставляет другим пользователям доступ к ресурсам Azure. Если операция не является допустимым IP-адресом, запрос сигнализирует о подозрительной активности, которую можно изучить дальше.

Если вы хотите попробовать несколько примеров, используйте демонстрационную среду на портале Azure.

Проверьте свои знания

1.

Какое из следующих средств может использовать администратор для запроса данных в Microsoft Sentinel?

2.

Какой из следующих символов может использовать администратор для разделения команд в запросе?