Аудит и отслеживание изменений задач инцидентов в Microsoft Sentinel в портал Azure
Задачи инцидентов обеспечивают комплексное и единое лечение инцидентов во всех сотрудниках SOC. Списки задач обычно определяются в соответствии с определениями старших аналитиков или руководителей SOC, а также используют правила автоматизации или сборники схем.
Аналитики могут просмотреть список задач, которые они должны выполнять для конкретного инцидента на странице сведений об инциденте, и пометить их по мере их выполнения. Аналитики также могут создавать свои собственные задачи на месте, вручную, прямо из инцидента.
В этой статье объясняется, как вы, как менеджер SOC, может проверять историю задач инцидентов Microsoft Sentinel и отслеживать изменения, внесенные в их жизненный цикл, чтобы оценить эффективность заданий задач и их вклад в эффективность и их вклад в эффективность и надлежащее функционирование SOC.
Структура массива задач в таблице SecurityIncident
Таблица SecurityIncident — это таблица аудита— она хранит не сами инциденты, а скорее записи о жизни инцидента: его создание и любые изменения, внесенные в него. При создании инцидента или изменении инцидента в этой таблице создается запись, показывающая текущее состояние инцидента.
Добавление сведений о задачах в схему этой таблицы позволяет выполнять аудит задач более подробно.
Подробные сведения, добавленные в поле "Задачи ", состоят из пар "ключ-значение", которые принимают следующую структуру:
Ключ | Описание значения |
---|---|
createdBy | Удостоверение, создающее задачу: — электронная почта: адрес электронной почты удостоверения — имя: имя удостоверения — objectId: GUID удостоверения — userPrincipalName: имя участника-пользователя удостоверения |
createdTimeUtc | Время создания задачи в формате UTC. |
lastCompletedTimeUtc | Время завершения задачи в формате UTC. |
lastModifiedBy | Идентификатор, который последний раз изменил задачу: — электронная почта: адрес электронной почты удостоверения — имя: имя удостоверения — objectId: GUID удостоверения — userPrincipalName: имя участника-пользователя удостоверения |
lastModifiedTimeUtc | Время последнего изменения задачи в формате UTC. |
состояние | Текущее состояние задачи: New, Completed, Deleted. |
taskId | Идентификатор ресурса задачи. |
title | Понятное имя, заданное задачей его создателем. |
Просмотр задач инцидента в таблице SecurityIncident
Помимо книги задач "Инциденты", можно выполнять аудит действий задачи, запрашивая таблицу SecurityIncident в журналах. В остальной части этой статьи показано, как это сделать, а также как читать и понимать результаты запроса для получения сведений о действиях задачи.
На странице журналов введите следующий запрос в окне запроса и запустите его. Этот запрос вернет все инциденты с назначенными задачами.
SecurityIncident | where array_length( Tasks) > 0
Вы можете добавить любое количество инструкций в запрос для фильтрации и сузить результаты. Чтобы продемонстрировать, как просмотреть и понять результаты, мы добавим инструкции для фильтрации результатов таким образом, чтобы мы видели только задачи для одного инцидента, и мы также добавим
project
инструкцию, чтобы мы видели только те поля, которые будут полезны для наших целей, без большого количества загромождений.Дополнительные сведения об использовании язык запросов Kusto.
SecurityIncident | where array_length( Tasks) > 0 | where IncidentNumber == "405211" | sort by LastModifiedTime desc | project IncidentName, Title, LastModifiedTime, Tasks
Давайте рассмотрим самую последнюю запись этого инцидента и найдите список задач, связанных с ним.
Выберите расширитель рядом с верхней строкой в результатах запроса (которые были отсортированы в порядке убывания пересчета).
Поле "Задачи " представляет собой массив текущего состояния всех задач в этом инциденте. Выберите расширитель, чтобы просмотреть каждый элемент в массиве в отдельной строке.
Теперь вы увидите, что в этом инциденте есть две задачи. Каждый из них представлен в свою очередь расширяемым массивом. Выберите расширитель одной задачи, чтобы просмотреть сведения.
Здесь вы увидите сведения о первой задаче в массиве ("0" — положение индекса задачи в массиве). В поле заголовка отображается имя задачи, отображаемой в инциденте.
Просмотр задач, добавленных в список
Давайте добавим задачу в инцидент, а затем вернемся сюда, снова запустите запрос и увидим изменения результатов.
На странице "Инциденты" введите идентификатор инцидента в строке поиска.
Откройте страницу сведений об инциденте и выберите "Задачи " на панели инструментов.
Добавьте новую задачу, присвойте ей имя "Эта задача является тестовой задачей!", а затем нажмите кнопку "Сохранить". Последняя задача, показанная ниже, заключается в том, что вы должны в конечном итоге:
Теперь давайте вернемся на страницу журналов и снова запустите наш запрос.
В результатах вы увидите, что в таблице есть новая запись для этого же инцидента (обратите внимание на метки времени). Разверните запись, и вы увидите, что в то время как запись, которую мы видели, прежде чем было две задачи в массиве задач , новая имеет три. Самая новая задача — это только что добавленная задача, как видно по его названию.
Просмотр изменений состояния задач
Теперь, если мы вернемся к этой новой задаче на странице сведений об инциденте и помечаем ее как завершенную, а затем вернемся к журналам и повторно запустите запрос, мы увидим еще одну новую запись для того же инцидента, на этот раз показывая новое состояние нашей задачи как завершено.
Просмотр удаления задач
Давайте вернемся к списку задач на странице сведений об инциденте и удалите задачу, которую мы добавили ранее.
Когда мы вернемся к журналам и запустите запрос еще раз, мы увидим другую новую запись, только на этот раз состояние нашей задачи — это "Эта задача является тестовой задачей!" — будет удален.
Однако после появления задачи один раз в массиве (с удаленным состоянием), он больше не будет отображаться в массиве задач в новых записях для этого инцидента в таблице SecurityIncident . Существующие записи, как и те, которые мы видели выше, будут продолжать сохранять доказательства того, что эта задача когда-то существовала.
Просмотр активных задач, принадлежащих к закрытому инциденту
Следующий запрос позволяет узнать, был ли закрыт инцидент, но не все назначенные ей задачи были завершены. Эти знания помогут вам убедиться, что все оставшиеся свободные концы в вашем расследовании были доставлены к выводу, все соответствующие стороны были уведомлены, все комментарии были введены, все ответы были проверены и т. д.
SecurityIncident
| summarize arg_max(TimeGenerated, *) by IncidentNumber
| where Status == 'Closed'
| mv-expand Tasks
| evaluate bag_unpack(Tasks)
| summarize arg_max(lastModifiedTimeUtc, *) by taskId
| where status !in ('Completed', 'Deleted')
| project TaskTitle = ['title'], TaskStatus = ['status'], createdTimeUtc, lastModifiedTimeUtc = column_ifexists("lastModifiedTimeUtc", datetime(null)), TaskCreator = ['createdBy'].name, lastModifiedBy, IncidentNumber, IncidentOwner = Owner.userPrincipalName
| sort by lastModifiedTimeUtc desc
Дополнительные сведения о следующих элементах, используемых в предыдущих примерах, см. в документации Kusto:
- Оператор where
- Оператор проекта
- Оператор сортировки
- Оператор суммирование
- функция агрегирования arg_max()
Дополнительные сведения о KQL см. в обзоре язык запросов Kusto (KQL).
Другие ресурсы:
Следующие шаги
- Дополнительные сведения о задачах инцидентов.
- Узнайте, как исследовать инциденты.
- Узнайте, как добавлять задачи в группы инцидентов автоматически с помощью правил автоматизации или сборников схем, а также когда следует использовать их.
- Узнайте больше о правилах автоматизации и их создании.
- Узнайте больше о сборниках схем и их создании.