Запрос данных с помощью языка запросов 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.