Auditar e registar alterações a tarefas de incidentes em Microsoft Sentinel no portal do Azure

As tarefas de incidentes garantem um tratamento abrangente e uniforme dos incidentes em todo o pessoal do SOC. Normalmente, as listas de tarefas são definidas de acordo com as determinações feitas por analistas seniores ou gestores de SOC e colocadas em prática através de regras de automatização ou manuais de procedimentos.

Os seus analistas podem ver a lista de tarefas que precisam de realizar para um determinado incidente na página de detalhes do incidente e marcá-las como concluídas à medida que vão avançando. Os analistas também podem criar manualmente as suas próprias tarefas naquele momento, diretamente no incidente.

Este artigo explica como pode, enquanto gestor do SOC, auditar o histórico das tarefas de incidentes no Microsoft Sentinel e acompanhar as alterações nelas efetuadas ao longo de todo o seu ciclo de vida, de modo a avaliar a eficácia da sua atribuição de tarefas e o respetivo contributo para a eficiência e o correto funcionamento do seu SOC.

Estrutura do array Tasks na tabela SecurityIncident

A tabela SecurityIncident é uma tabela de auditoria— armazena não os incidentes em si, mas sim registos da vida útil de um incidente: a sua criação e quaisquer alterações efetuadas ao mesmo. Sempre que um incidente é criado ou é efetuada uma alteração a um incidente, é gerado um registo nesta tabela que mostra o estado atual do incidente.

A adição de campos de detalhamento de tarefas ao esquema da tabela SecurityIncident permite-lhe auditar tarefas com maior profundidade.

As informações detalhadas adicionadas ao campo Tarefas consistem em pares chave-valor com a seguinte estrutura:

Chave Descrição do valor
createdBy A identidade que criou a tarefa:
- email: endereço de email associado à identidade
- nome: nome da identidade
- objectId: GUID da identidade
- userPrincipalName: UPN da identidade
createdTimeUtc Hora em que a tarefa foi criada, em UTC.
lastCompletedTimeUtc Hora em que a tarefa foi marcada como concluída, em UTC.
lastModifiedBy A identidade que modificou a tarefa pela última vez:
- email: endereço de email associado à identidade
- nome: nome da identidade
- objectId: GUID da identidade
- userPrincipalName: UPN da identidade
lastModifiedTimeUtc Hora em que a tarefa foi modificada pela última vez, em UTC.
estado Estado atual da tarefa: Novo, Concluído, Eliminado.
taskId Identificador do recurso da tarefa.
título Nome amigável dado à tarefa pelo respetivo criador.

Ver tarefas de incidentes na tabela SecurityIncident

Para além do livro de tarefas de incidentes, pode auditar a atividade das tarefas consultando a tabela SecurityIncident em Registos. Esta secção mostra-lhe como consultar a tabela e ler e compreender os resultados para obter informações sobre a atividade da tarefa.

  1. Na página Registos , introduza a seguinte consulta na janela de consulta e execute-a. Esta consulta devolverá todos os incidentes que têm tarefas atribuídas.

    SecurityIncident
    | where array_length( Tasks) > 0
    

    Pode adicionar qualquer número de instruções à consulta para filtrar e restringir os resultados. Para demonstrar como ver e compreender os resultados, vamos adicionar instruções para filtrar os resultados para que apenas vejamos as tarefas de um único incidente e também adicionaremos uma project instrução para vermos apenas os campos que serão úteis para os nossos fins, sem muita confusão.

    Para obter mais informações, consulte Descrição geral da linguagem de consulta Kusto.

    SecurityIncident
    | where array_length( Tasks) > 0
    | where IncidentNumber == "405211"
    | sort by LastModifiedTime desc 
    | project IncidentName, Title, LastModifiedTime, Tasks
    
  2. Vamos analisar o registo mais recente deste incidente e encontrar a lista de tarefas associadas ao mesmo.

    1. Selecione a seta de expansão junto à primeira linha nos resultados da consulta (que foram ordenados do mais recente para o mais antigo).

      Captura de ecrã dos resultados da consulta a mostrar um incidente com as respetivas tarefas.

    2. O campo Tarefas é uma matriz do estado atual de todas as tarefas neste incidente. Selecione o expansor para ver cada item na matriz na sua própria linha.

      Captura de ecrã dos resultados da consulta a mostrar um incidente com as respetivas tarefas expandidas.

    3. Agora, verá que existem duas tarefas neste incidente. Cada uma delas é representada por uma matriz expansível. Selecione o expansor de uma única tarefa para ver as respetivas informações.

      Captura de ecrã dos resultados da consulta que mostram um incidente com uma única tarefa expandida.

    4. Aqui, verá os detalhes da primeira tarefa na matriz ("0" é a posição de índice da tarefa na matriz). O campo de título mostra o nome da tarefa conforme apresentado no incidente.

Ver tarefas adicionadas à lista

Execute os seguintes passos para adicionar uma tarefa a um incidente e observe como o registo do SecurityIncident muda.

  1. Vamos adicionar uma tarefa ao incidente e, em seguida, voltaremos aqui, executaremos a consulta novamente e veremos as alterações nos resultados.

    1. Na página Incidentes , introduza o número do ID do incidente na barra de Pesquisa.

    2. Abra a página de detalhes do incidente e selecione Tarefas na barra de ferramentas .

    3. Adicione uma nova tarefa, atribua-lhe o nome "Esta tarefa é uma tarefa de teste!" e, em seguida, selecione Guardar. A última tarefa apresentada abaixo é a que deve terminar:

      Captura de ecrã mostra o painel de tarefas de incidentes.

  2. Agora vamos voltar à página Logs e executar novamente a consulta SecurityIncident .

    Nos resultados, verá que existe um novo registo na tabela para este mesmo incidente (tenha em atenção os carimbos de data/hora). Expanda o registo e verá que, embora o registo que vimos antes tivesse duas tarefas na respetiva matriz Tarefas , o novo tem três. A tarefa mais recente é aquela que acabámos de adicionar, como pode ver pelo respetivo título.

    Captura de ecrã dos resultados da consulta a mostrar um incidente com a tarefa recém-criada.

Ver alterações de estado das tarefas

Agora, se voltarmos à tarefa intitulada "Esta tarefa é uma tarefa de teste!" na página de detalhes do incidente e a marcarmos como concluída, e depois voltarmos aos Registos e reexecutarmos a consulta, veremos mais um novo registo para o mesmo incidente, desta vez mostrando o novo estado da nossa tarefa como Concluído.

Captura de ecrã dos resultados da consulta a mostrar uma tarefa de incidente com o respetivo novo estado.

Ver eliminação de tarefas

Vamos voltar à lista de tarefas na página de detalhes do incidente e apagar a tarefa intitulada "Esta tarefa é uma tarefa de teste!".

Quando voltarmos aos Logs e reexecutarmos a consulta incident-tarefa, veremos outro novo registo, só que desta vez o estado da nossa tarefa — aquele intitulado "Esta tarefa é uma tarefa de teste!" —será Eliminado.

No entanto — assim que a tarefa tiver aparecido uma vez nesse array (com o estado Deleted), deixará de aparecer no array Tasks em novos registos desse incidente na tabela SecurityIncident. Os registos anteriores existentes do incidente continuarão a preservar a prova de que esta tarefa existiu.

Ver tarefas ativas pertencentes a um incidente fechado

A consulta seguinte permite-lhe ver se um incidente foi fechado, mas nem todas as tarefas atribuídas foram concluídas. Este conhecimento pode ajudá-lo a verificar se as extremidades pendentes restantes na sua investigação foram levadas a uma conclusão: todas as partes relevantes foram notificadas, todos os comentários foram introduzidos, todas as respostas foram verificadas, etc. A consulta utiliza a arg_max função de agregação para devolver apenas o registo mais recente de cada incidente e de cada tarefa, de modo que os resultados refletem o estado mais recente.

Execute a seguinte consulta para recuperar o registo mais recente de cada incidente, filtre incidentes encerrados e retorne quaisquer tarefas que ainda não tenham sido concluídas ou eliminadas:

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

Para mais informações sobre os operadores e funções de Kusto usados nas consultas de exemplo deste artigo, veja:

Para obter mais informações sobre o KQL, veja Descrição geral do Linguagem de Pesquisa Kusto (KQL).

Outros recursos:

Passos seguintes