Audite y realice un seguimiento de los cambios en las tareas de incidentes en Microsoft Sentinel en el Azure Portal

Las tareas de incidentes garantizan un tratamiento completo y uniforme de los incidentes en todo el personal de SOC. Las listas de tareas se definen normalmente según las determinaciones realizadas por analistas sénior o administradores de SOC, y se ponen en práctica mediante reglas de automatización o cuadernos de estrategias.

Los analistas pueden ver la lista de tareas que deben realizar para un incidente determinado en la página de detalles del incidente y marcarlas como completadas a medida que avanzan. Los analistas también pueden crear sus propias tareas en el lugar, manualmente, directamente desde dentro del incidente.

En este artículo se explica cómo usted, como administrador de SOC, puede auditar el historial de Microsoft Sentinel tareas de incidentes y realizar un seguimiento de los cambios realizados en ellos a lo largo de su ciclo de vida, con el fin de medir la eficacia de las asignaciones de tareas y su contribución a la eficacia y el correcto funcionamiento de su SOC.

Estructura de la matriz Tasks en la tabla SecurityIncident

La tabla SecurityIncident es una tabla de auditoría, que no almacena los propios incidentes, sino registros de la vida de un incidente: su creación y los cambios realizados en él. Cada vez que se crea un incidente o se realiza un cambio en un incidente, se genera un registro en esta tabla que muestra el estado actual del incidente.

La adición de detalles de tareas al esquema de esta tabla permite auditar las tareas en mayor profundidad.

La información detallada agregada al campo Tareas consta de pares clave-valor que toman la siguiente estructura:

Clave Descripción del valor
createdBy Identidad que creó la tarea:
- correo electrónico: dirección de correo electrónico de identidad
- name: nombre de la identidad
- objectId: GUID de la identidad
- userPrincipalName: UPN de la identidad
createdTimeUtc Hora en que se creó la tarea, en UTC.
lastCompletedTimeUtc Hora en que la tarea se marcó como completada, en UTC.
lastModifiedBy La identidad que modificó por última vez la tarea:
- correo electrónico: dirección de correo electrónico de identidad
- name: nombre de la identidad
- objectId: GUID de la identidad
- userPrincipalName: UPN de la identidad
lastModifiedTimeUtc Hora de la última modificación de la tarea, en UTC.
status Estado actual de la tarea: Nuevo, Completado, Eliminado.
taskId Identificador de recurso de la tarea.
title Nombre descriptivo dado a la tarea por su creador.

Visualización de tareas de incidentes en la tabla SecurityIncident

Además del libro Tareas de incidentes, puede auditar la actividad de tareas consultando la tabla SecurityIncident en Registros. En el resto de este artículo se muestra cómo hacerlo, así como cómo leer y comprender los resultados de la consulta para obtener información sobre la actividad de la tarea.

  1. En la página Registros , escriba la siguiente consulta en la ventana de consulta y ejecútelo. Esta consulta devolverá todos los incidentes que tengan asignadas las tareas.

    SecurityIncident
    | where array_length( Tasks) > 0
    

    Puede agregar cualquier número de instrucciones a la consulta para filtrar y restringir los resultados. Para demostrar cómo ver y comprender los resultados, vamos a agregar instrucciones para filtrar los resultados de modo que solo veamos las tareas de un solo incidente, y también agregaremos una project instrucción para que veamos solo los campos que serán útiles para nuestros fines, sin mucho desorden.

    Para obtener más información, consulte Lenguaje de consulta Kusto información general.

    SecurityIncident
    | where array_length( Tasks) > 0
    | where IncidentNumber == "405211"
    | sort by LastModifiedTime desc 
    | project IncidentName, Title, LastModifiedTime, Tasks
    
  2. Echemos un vistazo al registro más reciente de este incidente y busquemos la lista de tareas asociadas a él.

    1. Seleccione el expansador situado junto a la fila superior en los resultados de la consulta (que se han ordenado en orden descendente de recencia).

      Captura de pantalla de los resultados de la consulta que muestra un incidente con sus tareas.

    2. El campo Tareas es una matriz del estado actual de todas las tareas de este incidente. Seleccione el expansador para ver cada elemento de la matriz en su propia fila.

      Captura de pantalla de los resultados de la consulta que muestra un incidente con sus tareas expandidas.

    3. Ahora verá que hay dos tareas en este incidente. Cada una de ellas se representa a su vez mediante una matriz ampliable. Seleccione el expansador de una sola tarea para ver su información.

      Captura de pantalla de los resultados de la consulta que muestra un incidente con una sola tarea expandida.

    4. Aquí verá los detalles de la primera tarea de la matriz ("0" es la posición de índice de la tarea en la matriz). El campo de título muestra el nombre de la tarea tal como se muestra en el incidente.

Ver tareas agregadas a la lista

  1. Vamos a agregar una tarea al incidente y, a continuación, volveremos aquí, ejecutaremos la consulta de nuevo y veremos los cambios en los resultados.

    1. En la página Incidentes , escriba el número de identificador de incidente en la barra de búsqueda.

    2. Abra la página de detalles del incidente y seleccione Tareas en la barra de herramientas.

    3. Agregue una nueva tarea, asígnele el nombre "¡Esta tarea es una tarea de prueba!" y, a continuación, seleccione Guardar. La última tarea que se muestra a continuación es con la que debe terminar:

      Captura de pantalla que muestra el panel de tareas de incidentes.

  2. Ahora vamos a volver a la página Registros y volver a ejecutar la consulta.

    En los resultados verá que hay un nuevo registro en la tabla para este mismo incidente (anote las marcas de tiempo). Expanda el registro y verá que, aunque el registro que vimos anteriormente tenía dos tareas en su matriz Tasks , el nuevo tiene tres. La tarea más reciente es la que acabamos de agregar, como puede ver por su título.

    Captura de pantalla de los resultados de la consulta que muestra un incidente con su tarea recién creada.

Visualización de los cambios de estado en las tareas

Ahora, si volvemos a esa nueva tarea en la página de detalles del incidente y la marcamos como completa y, a continuación, volvemos a Registros y volvemos a ejecutar la consulta, veremos otro nuevo registro para el mismo incidente, esta vez mostrando el nuevo estado de la tarea como Completado.

Captura de pantalla de los resultados de la consulta que muestra una tarea de incidente con su nuevo estado.

Visualización de la eliminación de tareas

Volvamos a la lista de tareas de la página de detalles del incidente y eliminemos la tarea que agregamos anteriormente.

Cuando volvamos a Registros y ejecutemos la consulta una vez más, veremos otro nuevo registro, solo esta vez el estado de nuestra tarea, el que se titula "Esta tarea es una tarea de prueba!". : se eliminará.

Sin embargo, una vez que la tarea aparece una vez en la matriz (con un estado Eliminado ), ya no aparecerá en la matriz Tasks en los nuevos registros de ese incidente en la tabla SecurityIncident . Los registros existentes, como los que vimos anteriormente, seguirán conservando la evidencia de que esta tarea existió una vez.

Visualización de tareas activas que pertenecen a un incidente cerrado

La consulta siguiente permite ver si se ha cerrado un incidente, pero no se han completado todas las tareas asignadas. Este conocimiento puede ayudarle a comprobar que los extremos sueltos restantes de la investigación se llevaron a una conclusión: se notificó a todas las partes pertinentes, se especificaron todos los comentarios, se comprobaron todas las respuestas, etc.

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

Vea más información sobre los siguientes elementos usados en los ejemplos anteriores, en la documentación de Kusto:

Para obtener más información sobre KQL, consulte introducción a Lenguaje de consulta Kusto (KQL).

Otros recursos:

Pasos siguientes