Überwachen und Nachverfolgen von Änderungen an Incidentaufgaben in Microsoft Sentinel im Azure-Portal

Incidentaufgaben gewährleisten eine umfassende und einheitliche Behandlung von Vorfällen für alle SOC-Mitarbeiter. Aufgabenlisten werden in der Regel gemäß den Von Senior Analysts oder SOC-Managern getroffenen Festlegungen definiert und mithilfe von Automatisierungsregeln oder Playbooks in die Praxis umgesetzt.

Ihre Analysten können die Liste der Aufgaben, die sie für einen bestimmten Vorfall ausführen müssen, auf der Seite mit den Incidentdetails anzeigen und diese als abgeschlossen markieren. Analysten können auch ihre eigenen Aufgaben vor Ort manuell und direkt innerhalb des Incidents erstellen.

In diesem Artikel wird erläutert, wie Sie als SOC-Manager den Verlauf Microsoft Sentinel Incidentaufgaben überwachen und die änderungen nachverfolgen können, die während ihres gesamten Lebenszyklus vorgenommen wurden, um die Wirksamkeit Ihrer Aufgabenzuweisungen und deren Beitrag zur Effizienz und ordnungsgemäßen Funktionsweise Ihres SOC zu messen.

Struktur des Tasks-Arrays in der Tabelle "SecurityIncident"

Die SecurityIncident-Tabelle ist eine Überwachungstabelle– sie speichert nicht die Vorfälle selbst, sondern Datensätze über die Lebensdauer eines Incidents: seine Erstellung und alle daran vorgenommenen Änderungen. Jedes Mal, wenn ein Incident erstellt oder eine Änderung an einem Incident vorgenommen wird, wird in dieser Tabelle ein Datensatz generiert, der den aktuellen Status des Incidents anzeigt.

Das Hinzufügen von Aufgabendetails zum Schema dieser Tabelle ermöglicht es Ihnen, Aufgaben ausführlicher zu überwachen.

Die detaillierten Informationen, die dem Feld Aufgaben hinzugefügt werden, bestehen aus Schlüssel-Wert-Paaren, die die folgende Struktur aufweisen:

Schlüssel Wertbeschreibung
createdBy Die Identität, die die Aufgabe erstellt hat:
- email: E-Mail-Adresse der Identität
- name: Name der Identität
- objectId: GUID der Identität
– userPrincipalName: UPN der Identität
createdTimeUtc Zeitpunkt, zu dem die Aufgabe erstellt wurde, in UTC.
lastCompletedTimeUtc Zeitpunkt, zu dem die Aufgabe als abgeschlossen markiert wurde, in UTC.
lastModifiedBy Die Identität, die die Aufgabe zuletzt geändert hat:
- email: E-Mail-Adresse der Identität
- name: Name der Identität
- objectId: GUID der Identität
– userPrincipalName: UPN der Identität
lastModifiedTimeUtc Zeitpunkt der letzten Änderung der Aufgabe in UTC.
status Aktuelle status der Aufgabe: Neu, Abgeschlossen, Gelöscht.
Taskid Ressourcen-ID des Vorgangs.
title Anzeigename, der der Aufgabe vom Ersteller gegeben wurde.

Anzeigen von Incidentaufgaben in der Tabelle "SecurityIncident"

Abgesehen von der Arbeitsmappe Incidentaufgaben können Sie die Aufgabenaktivität überwachen, indem Sie die Tabelle SecurityIncident in Den Protokollen abfragen. Im weiteren Verlauf dieses Artikels erfahren Sie, wie Sie dies tun und wie Sie die Abfrageergebnisse lesen und verstehen, um Informationen zur Vorgangsaktivität abzurufen.

  1. Geben Sie auf der Seite Protokolle die folgende Abfrage in das Abfragefenster ein, und führen Sie sie aus. Diese Abfrage gibt alle Incidents zurück, denen Aufgaben zugewiesen sind.

    SecurityIncident
    | where array_length( Tasks) > 0
    

    Sie können der Abfrage eine beliebige Anzahl von Anweisungen hinzufügen, um die Ergebnisse zu filtern und einzugrenzen. Um zu veranschaulichen, wie die Ergebnisse angezeigt und verstanden werden, fügen wir Anweisungen hinzu, um die Ergebnisse so zu filtern, dass nur die Aufgaben für einen einzelnen Incident angezeigt werden. Außerdem fügen wir eine project -Anweisung hinzu, damit nur die Felder angezeigt werden, die für unsere Zwecke nützlich sind, ohne viel Unübersichtlichkeit.

    Weitere Informationen finden Sie unter Kusto-Abfragesprache Übersicht.

    SecurityIncident
    | where array_length( Tasks) > 0
    | where IncidentNumber == "405211"
    | sort by LastModifiedTime desc 
    | project IncidentName, Title, LastModifiedTime, Tasks
    
  2. Sehen wir uns den letzten Datensatz für diesen Vorfall an und suchen die Liste der damit verbundenen Aufgaben.

    1. Wählen Sie die Erweiterung neben der obersten Zeile in den Abfrageergebnissen aus (die in absteigender Reihenfolge der Aktualität sortiert wurden).

      Screenshot der Abfrageergebnisse mit einem Incident mit seinen Aufgaben.

    2. Das Feld Aufgaben ist ein Array des aktuellen Zustands aller Vorgänge in diesem Incident. Wählen Sie die Erweiterung aus, um jedes Element im Array in einer eigenen Zeile anzuzeigen.

      Screenshot: Abfrageergebnisse mit einem Incident mit erweiterten Aufgaben

    3. Nun sehen Sie, dass dieser Vorfall zwei Aufgaben umfasst. Jede wird wiederum durch ein erweiterbares Array dargestellt. Wählen Sie die Erweiterung eines einzelnen Vorgangs aus, um die zugehörigen Informationen anzuzeigen.

      Screenshot der Abfrageergebnisse mit einem Incident mit einer einzelnen erweiterten Aufgabe.

    4. Hier sehen Sie die Details für die erste Aufgabe im Array ("0" ist die Indexposition der Aufgabe im Array). Das Titelfeld zeigt den Namen des Vorgangs an, wie er im Incident angezeigt wird.

Anzeigen von Aufgaben, die der Liste hinzugefügt wurden

  1. Fügen wir dem Incident eine Aufgabe hinzu. Anschließend kehren wir hierher zurück, führen die Abfrage erneut aus und sehen die Änderungen in den Ergebnissen.

    1. Geben Sie auf der Seite Incidents die Incident-ID in die Suchleiste ein.

    2. Öffnen Sie die Seite mit den Incidentdetails, und wählen Sie auf der Symbolleiste Aufgaben aus.

    3. Fügen Sie eine neue Aufgabe hinzu, geben Sie ihr den Namen "This task is a test task!", und wählen Sie dann Speichern aus. Die letzte unten gezeigte Aufgabe ist das, was Sie am Ende haben sollten:

      Screenshot: Bereich

  2. Kehren sie nun zur Seite Protokolle zurück , und führen Sie die Abfrage erneut aus.

    In den Ergebnissen sehen Sie, dass in der Tabelle ein neuer Datensatz für diesen Vorfall vorhanden ist (beachten Sie die Zeitstempel). Erweitern Sie den Datensatz, und Sie werden sehen, dass der datensatz, den wir zuvor gesehen haben, zwei Aufgaben in seinem Aufgabenarray enthielt, der neue jedoch drei Aufgaben enthält. Die neueste Aufgabe ist die, die wir gerade hinzugefügt haben, wie Sie am Titel sehen können.

    Screenshot der Abfrageergebnisse mit einem Incident mit der neu erstellten Aufgabe.

Anzeigen status Änderungen an Aufgaben

Wenn wir nun zu dieser neuen Aufgabe auf der Seite mit den Incidentdetails zurückkehren und sie als abgeschlossen markieren und dann zu Protokollen zurückkehren und die Abfrage erneut ausführen, wird ein weiterer neuer Datensatz für denselben Vorfall angezeigt, der dieses Mal den neuen status unserer Aufgabe als Abgeschlossen anzeigt.

Screenshot der Abfrageergebnisse mit einer Incidentaufgabe mit dem neuen status

Anzeigen des Löschens von Vorgängen

Kehren wir zur Aufgabenliste auf der Seite mit den Incidentdetails zurück und löschen die zuvor hinzugefügte Aufgabe.

Wenn wir zu Protokollen zurückkehren und die Abfrage noch einmal ausführen, sehen wir einen weiteren neuen Datensatz, nur dieses Mal den status für unsere Aufgabe – den mit dem Titel "Diese Aufgabe ist eine Testaufgabe!" – wird gelöscht.

Sobald die Aufgabe jedoch einmal im Array (mit einem gelöschten status) angezeigt wurde, wird sie nicht mehr im Array Tasks in neuen Datensätzen für diesen Incident in der Tabelle SecurityIncident angezeigt. Die vorhandenen Datensätze, wie die oben gezeigten, behalten weiterhin den Beweis dafür bei, dass diese Aufgabe einmal existierte.

Anzeigen aktiver Aufgaben, die zu einem geschlossenen Incident gehören

Mit der folgenden Abfrage können Sie sehen, ob ein Incident geschlossen wurde, aber nicht alle ihm zugewiesenen Aufgaben abgeschlossen wurden. Dieses Wissen kann Ihnen helfen, zu überprüfen, ob alle verbleibenden losen Enden Ihrer Untersuchung zu einem Abschluss gebracht wurden – alle relevanten Parteien wurden benachrichtigt, alle Kommentare wurden eingegeben, alle Antworten wurden überprüft usw.

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

Weitere Informationen zu den folgenden Elementen, die in den vorherigen Beispielen verwendet wurden, finden Sie in der Kusto-Dokumentation:

Weitere Informationen zu KQL finden Sie unter übersicht über Kusto-Abfragesprache (KQL).

Weitere Ressourcen:

Nächste Schritte