Auditování a sledování změn úkolů incidentů v Microsoft Sentinelu
Úkoly incidentů zajišťují komplexní a jednotné zacházení s incidenty napříč všemi pracovníky SOC. Seznamy úkolů se obvykle definují podle rozhodnutí vedoucích analytiků nebo manažerů SOC a používají pravidla automatizace nebo playbooky.
Vaši analytici můžou zobrazit seznam úkolů, které potřebují k provedení konkrétního incidentu, na stránce s podrobnostmi incidentu a označit je jako dokončené. Analytici také můžou vytvářet vlastní úkoly na místě ručně přímo z incidentu.
Tento článek vysvětluje, jak můžete jako manažer SOC auditovat historii úkolů incidentů Microsoft Sentinelu a sledovat změny provedené v průběhu jejich životního cyklu, abyste mohli posoudit účinnost přiřazení úkolů a jejich příspěvek k efektivitě a správnému fungování SOC.
Struktura pole Tasks v tabulce SecurityIncident
Tabulka SecurityIncident je tabulka auditu – neukládají se samotné incidenty, ale spíše záznamy o životě incidentu: jeho vytvoření a všechny změny provedené v incidentu. Kdykoli se incident vytvoří nebo dojde ke změně incidentu, vygeneruje se v této tabulce záznam zobrazující aktuální stav incidentu.
Přidání podrobností o úkolech do schématu této tabulky umožňuje provádět auditování úkolů podrobněji.
Podrobné informace přidané do pole Úkoly se skládají z párů klíč-hodnota s následující strukturou:
Key | Popis hodnoty |
---|---|
createdBy | Identita, která vytvořila úlohu: - e-mail: e-mailová adresa identity - name: název identity - objectId: GUID identity - userPrincipalName: hlavní název uživatele (UPN) identity |
createdTimeUtc | Čas vytvoření úkolu v UTC |
lastCompletedTimeUtc | Čas, kdy byl úkol označen jako dokončený, v UTC. |
lastModifiedBy | Identita, která naposledy změnila úlohu: - e-mail: e-mailová adresa identity - name: název identity - objectId: GUID identity - userPrincipalName: hlavní název uživatele (UPN) identity |
lastModifiedTimeUtc | Čas poslední změny úkolu v UTC |
status | Aktuální stav úkolu: Nový, Dokončeno, Odstraněno. |
Taskid | ID zdroje úkolu. |
title | Popisný název přidělený úkolu jeho tvůrcem |
Zobrazení úkolů incidentů v tabulce SecurityIncident
Kromě sešitu úkolů incidentů můžete auditovat aktivitu úkolů dotazováním tabulky SecurityIncident v protokolech. Ve zbývající části tohoto článku se dozvíte, jak to udělat, a také jak číst a porozumět výsledkům dotazu, abyste získali informace o aktivitě úkolů.
Na stránce Protokoly zadejte do okna dotazu následující dotaz a spusťte ho. Tento dotaz vrátí všechny incidenty, které mají přiřazené všechny úkoly.
SecurityIncident | where array_length( Tasks) > 0
Do dotazu můžete přidat libovolný počet příkazů pro filtrování a zúžení výsledků. Abychom ukázali, jak zobrazit a pochopit výsledky, přidáme příkazy pro filtrování výsledků tak, abychom viděli jenom úkoly pro jeden incident, a také přidáme
project
příkaz, abychom viděli jenom ta pole, která budou užitečná pro naše účely, bez velkého množství nepotřebných informací.Přečtěte si další informace o používání dotazovací jazyk Kusto.
SecurityIncident | where array_length( Tasks) > 0 | where IncidentNumber == "405211" | sort by LastModifiedTime desc | project IncidentName, Title, LastModifiedTime, Tasks
Pojďme se podívat na nejnovější záznam tohoto incidentu a najít seznam úkolů přidružených k tomuto incidentu.
Ve výsledcích dotazu vyberte rozbalovací modul vedle horního řádku (které byly seřazeny sestupně podle pořadí recence).
Pole Úkoly je pole aktuálního stavu všech úkolů v tomto incidentu. Výběrem rozbalovače zobrazíte každou položku v poli ve vlastním řádku.
Teď vidíte, že v tomto incidentu jsou dva úkoly. Každý z nich je zase reprezentován rozbalitelným polem. Výběrem rozbalovače jednoho úkolu zobrazíte jeho informace.
Tady vidíte podrobnosti pro první úkol v poli (0 je pozice indexu úkolu v poli). Pole nadpisu zobrazuje název úkolu zobrazený v incidentu.
Zobrazení úkolů přidaných do seznamu
Pojďme k incidentu přidat úkol a pak se sem vrátíme, znovu spustíme dotaz a uvidíme změny ve výsledcích.
Na stránce Incidenty zadejte na panelu hledání číslo ID incidentu.
Otevřete stránku s podrobnostmi incidentu a na panelu nástrojů vyberte Úkoly .
Přidejte nový úkol, pojmenujte ho "Tento úkol je testovací úkol!", a pak vyberte Uložit. Poslední úkol, který je zobrazený níže, je to, co byste měli mít na konci:
Teď se vraťme na stránku Protokoly a spusťte náš dotaz znovu.
Ve výsledcích uvidíte, že v tabulce pro tento stejný incident existuje nový záznam (všimněte si časových razítek). Rozbalte záznam a uvidíte, že zatímco záznam, který jsme viděli dříve, měl v poli Úkoly dva úkoly, nový záznam má tři. Nejnovější úkol je ten, který jsme právě přidali, jak vidíte podle názvu.
Zobrazení změn stavu úkolů
Když se teď vrátíme k tomuto novému úkolu na stránce s podrobnostmi incidentu a označíme ho jako dokončené, vrátíme se k protokolům a znovu spustíme dotaz, uvidíme další nový záznam pro stejný incident, tentokrát se zobrazí nový stav úkolu jako Dokončeno.
Zobrazení odstranění úkolů
Vraťme se na seznam úkolů na stránce s podrobnostmi incidentu a odstraňme úkol, který jsme přidali dříve.
Když se vrátíme k protokolům a znovu spustíme dotaz, uvidíme další nový záznam, jenom tentokrát stav úkolu – ten s názvem "Tento úkol je testovací úkol!". – bude odstraněna.
Jakmile se však úkol zobrazí v poli (se stavem Odstraněno), nebude se už v poli Úkoly zobrazovat v nových záznamech pro daný incident v tabulce SecurityIncident. Existující záznamy, podobně jako ty, které jsme viděli výše, budou i nadále uchovávat důkazy o tom, že tento úkol existoval dříve.
Zobrazení aktivních úkolů patřících k uzavřenému incidentu
Následující dotaz umožňuje zjistit, jestli byl incident zavřený, ale ne všechny jeho přiřazené úkoly byly dokončeny. Tato znalost vám může pomoct ověřit, že všechny zbývající volné konce vašeho šetření byly předloženy závěru – všechny relevantní strany byly oznámeny, všechny komentáře byly zadány, všechny odpovědi byly ověřeny atd.
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
| order by lastModifiedTimeUtc desc
Další kroky
- Přečtěte si další informace o úkolech incidentů.
- Zjistěte, jak vyšetřovat incidenty.
- Naučte se přidávat úkoly do skupin incidentů automaticky pomocí pravidel automatizace nebo playbooků a kdy je použít.
- Přečtěte si další informace o pravidlech automatizace a o tom, jak je vytvořit.
- Přečtěte si další informace o playbookech a o tom, jak je vytvořit.