Поделиться через


Аудит и отслеживание изменений задач инцидентов в 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 в журналах. В остальной части этой статьи показано, как это сделать, а также как читать и понимать результаты запроса для получения сведений о действиях задачи.

  1. На странице журналов введите следующий запрос в окне запроса и запустите его. Этот запрос вернет все инциденты с назначенными задачами.

    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
    
  2. Давайте рассмотрим самую последнюю запись этого инцидента и найдите список задач, связанных с ним.

    1. Выберите расширитель рядом с верхней строкой в результатах запроса (которые были отсортированы в порядке убывания пересчета).

      Снимок экрана: результаты запроса, показывающие инцидент с задачами.

    2. Поле "Задачи " представляет собой массив текущего состояния всех задач в этом инциденте. Выберите расширитель, чтобы просмотреть каждый элемент в массиве в отдельной строке.

      Снимок экрана: результаты запроса, показывающие инцидент с развернутыми задачами.

    3. Теперь вы увидите, что в этом инциденте есть две задачи. Каждый из них представлен в свою очередь расширяемым массивом. Выберите расширитель одной задачи, чтобы просмотреть сведения.

      Снимок экрана: результаты запроса, показывающие инцидент с развернутой одной задачей.

    4. Здесь вы увидите сведения о первой задаче в массиве ("0" — положение индекса задачи в массиве). В поле заголовка отображается имя задачи, отображаемой в инциденте.

Просмотр задач, добавленных в список

  1. Давайте добавим задачу в инцидент, а затем вернемся сюда, снова запустите запрос и увидим изменения результатов.

    1. На странице "Инциденты" введите идентификатор инцидента в строке поиска.

    2. Откройте страницу сведений об инциденте и выберите "Задачи " на панели инструментов.

    3. Добавьте новую задачу, присвойте ей имя "Эта задача является тестовой задачей!", а затем нажмите кнопку "Сохранить". Последняя задача, показанная ниже, заключается в том, что вы должны в конечном итоге:

      Снимок экрана: панель задач инцидентов.

  2. Теперь давайте вернемся на страницу журналов и снова запустите наш запрос.

    В результатах вы увидите, что в таблице есть новая запись для этого же инцидента (обратите внимание на метки времени). Разверните запись, и вы увидите, что в то время как запись, которую мы видели, прежде чем было две задачи в массиве задач , новая имеет три. Самая новая задача — это только что добавленная задача, как видно по его названию.

    Снимок экрана: результаты запроса, показывающие инцидент с созданной задачей.

Просмотр изменений состояния задач

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

Снимок экрана: результаты запроса, показывающие задачу инцидента с новым состоянием.

Просмотр удаления задач

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

Когда мы вернемся к журналам и запустите запрос еще раз, мы увидим другую новую запись, только на этот раз состояние нашей задачи — это "Эта задача является тестовой задачей!" — будет удален.

Однако после появления задачи один раз в массиве (с удаленным состоянием), он больше не будет отображаться в массиве задач в новых записях для этого инцидента в таблице 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:

Дополнительные сведения о KQL см. в обзоре язык запросов Kusto (KQL).

Другие ресурсы:

Следующие шаги