Dotaz na graf podnikové expozice
Pomocí grafu podnikové expozice v Správa míry rizika zabezpečení od Microsoftu můžete na portálu Microsoft Defender proaktivně vyhledávat hrozby podnikové expozice při rozšířeném proaktivním vyhledávání.
Tento článek obsahuje několik příkladů, tipů a tipů pro vytváření dotazů v grafu podnikové expozice.
Požadavky
- Přečtěte si o správě prostoru pro útoky.
- Zkontrolujte požadovaná oprávnění pro práci s grafem.
Vytváření pokročilých dotazů proaktivního vyhledávání
- Projděte si osvědčené postupy pro vytváření pokročilých dotazů proaktivního vyhledávání.
- Začínáme s dotazovací jazyk Kusto (KQL)
Použití operátoru make-graph
Operátor Kusto make-graph
načte uzly a data hrany do paměti.
- Vzhledem k tomu, že Kusto načítá jenom sloupce, které se používají, není potřeba sloupce explicitně vybírat.
- Sloupec ale
NodeProperties
obsahuje všechny informace o uzlech, a proto je velký. - Ve většině scénářů je užitečné extrahovat pouze požadované informace před jejich odesláním do operátoru
make-graph
.
Příklad
let FilteredNodes = ExposureGraphNodes
| extend ContainsSensetiveData = NodeProperties has "containsSensitiveData"
| project Id, ContainsSensetiveData, Label, EntityIds, Categories;
Edges
| make-graph SourceNodeId --> TargetNodeId with FilteredNodes on Id
..
Použití dynamických sloupců a inteligentního indexování
NodeProperties
a Categories
jsou dynamické sloupce.
- Kusto ví, že tyto sloupce obsahují obsah podobný json, a použije inteligentní indexování.
- Index ale nepoužívají všechny operátory Kusto. Například
set_has_element
,isempty
isnotnull
nepoužívejte index, když se použije na dynamický sloupec aisnotnull(Properties["containsSensitiveData"]
nepoužívá index. - Místo toho použijte
has()
operátor, který vždy používá index.
Příklad
V následujícím dotazu has
operátor zkontroluje data
řetězec a set_has_element
zkontroluje data
element.
Použití obou operátorů je důležité, protože has()
operátor vrací hodnotu true i pro kategorii prefix_data
.
Categories has('data') and set_has_element(Categories, 'data')
Přečtěte si další informace o vysvětlení termínů řetězců.
Příklady dotazů na vystavení
Následující příklady vám můžou pomoct s psaním dotazů, které vám pomůžou porozumět datům ohrožení zabezpečení ve vašem tenantovi.
Výpis všech popisků uzlů ve vašem tenantovi
Následující dotaz seskupí data v ExposureGraphNodes
tabulce a pomocí operátoru summarize
Kusto je vypíše podle NodeLabel
.
ExposureGraphNodes
| summarize by NodeLabel
Výpis všech popisků hraničních zařízení v tenantovi
Následující dotaz seskupí data v ExposureGraphEdges
tabulce a pomocí operátoru summarize
Kusto je vypíše podle popisků hran (EdgeLabel
).
ExposureGraphEdges
| summarize by EdgeLabel
Výpis všech připojení ze zadaného popisku uzlu
Následující dotaz seskupí data v ExposureGraphEdges
tabulce a pokud je microsoft.compute/virtualmachines
popisek zdrojového uzlu , shrne virtuální počítač podle EdgeLabel
. Shrnuje hrany, které propojují prostředky s virtuálními počítači v grafu ohrožení zabezpečení.
ExposureGraphEdges
| where SourceNodeLabel == "microsoft.compute/virtualmachines"
| summarize by EdgeLabel
Výpis všech připojení ke konkrétnímu popisku uzlu
Následující dotaz shrnuje hrany, které propojují virtuální počítače s dalšími prostředky grafu ohrožení zabezpečení. Seskupí data v ExposureGraphEdges
tabulce a pokud je microsoft.compute/virtualmachines
popisek cílového uzlu , použije operátor Kusto summarize
k výpisu popisku cílového uzlu podle EdgeLabel
.
ExposureGraphEdges
| where TargetNodeLabel == "microsoft.compute/virtualmachines"
| summarize by EdgeLabel
Vlastnosti seznamu konkrétního popisku uzlu
Následující dotaz obsahuje seznam vlastností popisku uzlu virtuálního počítače. Seskupuje data v ExposureGraphNodes
tabulce, filtrovaná tak, aby zobrazovala pouze výsledky popisku uzlu microsoft.compute/virtualmachines. Pomocí operátoru project-keep
dotaz zachová NodeProperties
sloupec. Vrácená data jsou omezena na jeden řádek.
ExposureGraphNodes
| where NodeLabel == "microsoft.compute/virtualmachines"
| project-keep NodeProperties
| take 1
Dotazování grafu expozice
Dotazování grafu expozice:
Na portálu Microsoft Defender vyberte proaktivní vyhledávání –> rozšířené proaktivní vyhledávání.
Do oblasti Dotaz zadejte dotaz. Při sestavování dotazu použijte schéma grafu, funkce a tabulky operátorů nebo následující příklady.
Vyberte Spustit dotaz.
Příklady grafově orientovaných dotazů
Tyto příklady dotazů orientovaných na grafy vám pomůžou s psaním lepších dotazů na ohrožení zabezpečení. Příklady hledají vzory pro zveřejnění vztahů mezi entitami, které mohou odhalit riziko. Ukazují, jak korelovat kontext se signály incidentů/výstrah.
Výpis všech popisků uzlů s hraničními okraji ke konkrétnímu popisku uzlu
Výsledkem následujícího dotazu je seznam všech popisků příchozích uzlů s konektorem k popisku uzlu virtuálního počítače. Sestaví strukturu grafu namapováním SourceNodeId
dat sloupce v ExposureGraphEdges
tabulce na TargetNodeId
sloupec v ExposureGraphNodes
tabulce pomocí operátoru make-graph
, který sestaví strukturu grafu.
Pak pomocí operátoru graph-match
vytvoří grafový vzor, kde cílový uzel TargetNode
a NodeLabel
odpovídá microsoft.compute/virtualmachines
. Operátor project
se používá k zachování pouze .IncomingNodeLabels
Vypíše výsledky podle IncomingNodeLabels
.
ExposureGraphEdges
| make-graph SourceNodeId --> TargetNodeId with ExposureGraphNodes
on NodeId
| graph-match (SourceNode)-[edges]->(TargetNode)
where TargetNode.NodeLabel == "microsoft.compute/virtualmachines"
project IncomingNodeLabels = SourceNode.NodeLabel
| summarize by IncomingNodeLabels
Vypsat všechny popisky uzlů s určitým popiskem uzlu
Výsledkem následujícího dotazu je seznam všech popisků odchozích uzlů s konektorem k popisku uzlu virtuálního počítače.
- Vytvoří strukturu grafu namapováním
SourceNodeId
sloupce pomocí dat vExposureGraphEdges
tabulce naTargetNodeId
sloupec vExposureGraphNodes
tabulce pomocí operátorumake-graph
k sestavení struktury grafu. - Pak pomocí operátoru
graph-match
porovná vzor grafu whereSourceNode
aNodeLabel
matchmicrosoft.compute/virtualmachines
. - Operátor
project
se používá k zachování pouze .OutgoingNodeLabels
Vypíše výsledky podleOutgoingNodeLabels
.
ExposureGraphEdges
| make-graph SourceNodeId --> TargetNodeId with ExposureGraphNodes
on NodeId
| graph-match (SourceNode)-[edges]->(TargetNode)
where SourceNode.NodeLabel == "microsoft.compute/virtualmachines"
project OutgoingNodeLabels = SourceNode.NodeLabel
| summarize by OutgoingNodeLabels
Zjišťování virtuálních počítačů vystavených na internetu s chybou zabezpečení RCE
Následující dotaz umožňuje zjistit virtuální počítače vystavené internetu a ohrožení zabezpečení v důsledku vzdáleného spuštění kódu (RCE).
- Používá
ExposureGraphNodes
tabulku schématu. - Pokud platí obě
NodeProperties
exposedToInternet
hodnoty avulnerableToRCE
, zkontroluje, že kategorie (Categories
) jsou virtuální počítače (virtual_machine
).
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.exposedToInternet)
| where isnotnull(NodeProperties.rawData.vulnerableToRCE)
| where Categories has "virtual_machine" and set_has_element(Categories, "virtual_machine")
Zjišťování internetových zařízení s ohrožením zabezpečení z hlediska eskalace oprávnění
Následující dotaz hledá zařízení s přístupem k internetu, která jsou vystavená ohrožení zabezpečení z důvodu eskalace oprávnění, které by mohlo v systému umožnit přístup k oprávněním vyšší úrovně.
- Používá
ExposureGraphNodes
tabulku schématu. - Pokud
NodeProperties
je připojení k internetu (IsInternetFacing
) iVulnerableToPrivilegeEscalation
, dotaz zkontroluje, že položky vCategories
souboru jsou ve skutečnosti zařízení (device
).
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.IsInternetFacing)
| where isnotnull(NodeProperties.rawData.VulnerableToPrivilegeEscalation)
| where set_has_element(Categories, "device")
Zobrazit všechny uživatele přihlášené k více než jednomu kritickému zařízení
Výsledkem tohoto dotazu je seznam uživatelů přihlášených k více než jednomu kritickému zařízení spolu s počtem zařízení, ke kterým jsou přihlášeni.
- Vytvoří tabulku
IdentitiesAndCriticalDevices
pomocíExposureGraphNodes
dat filtrovaných buď podle zařízení s úrovní závažnosti vyšší než 4, nebo podleidentity
. - Pak vytvoří strukturu grafu s operátorem
make-graph
, kdeEdgeLabel
jeCan Authenticate As
. - Operátor se používá
graph-match
k porovnávání instancí, kde objektdevice
odpovídáidentity
. - Pak pomocí operátoru
project
zachová ID identit a ID zařízení. - Operátor
mv-apply
filtruje ID zařízení a ID identit podle typu. Shrne je a zobrazí výsledky v tabulce se záhlavímiNumber Of devices user is logged-in to
, aUser Id
.
let IdentitiesAndCriticalDevices = ExposureGraphNodes
| where
// Critical Device
(set_has_element(Categories, "device") and isnotnull(NodeProperties.rawData.criticalityLevel) and NodeProperties.rawData.criticalityLevel.criticalityLevel < 4)
// or identity
or set_has_element(Categories, "identity");
ExposureGraphEdges
| where EdgeLabel == "Can Authenticate As"
| make-graph SourceNodeId --> TargetNodeId with IdentitiesAndCriticalDevices on NodeId
| graph-match (Device)-[canConnectAs]->(Identity)
where set_has_element(Identity.Categories, "identity") and set_has_element(Device.Categories, "device")
project IdentityIds=Identity.EntityIds, DeviceIds=Device.EntityIds
| mv-apply DeviceIds on (
where DeviceIds.type == "DeviceInventoryId")
| mv-apply IdentityIds on (
where IdentityIds.type == "SecurityIdentifier")
| summarize NumberOfDevicesUserLoggedinTo=count() by tostring(IdentityIds.id)
| where NumberOfDevicesUserLoggedinTo > 1
| project ["Number Of devices user is logged-in to"]=NumberOfDevicesUserLoggedinTo, ["User Id"]=IdentityIds_id
Zobrazení klientských zařízení s kritickou chybou zabezpečení nebo uživatelů, kteří mají přístup k serverům s vysokou hodnotou
Výsledkem následujícího dotazu je seznam zařízení s ohroženími zabezpečení RCE a jejich ID zařízení a zařízení s vysoce kritickými ohroženími zabezpečení a jejich ID zařízení.
- Vytvoří
IdentitiesAndCriticalDevices
tabulku, která obsahuje zařízení (device
) s ohroženími zabezpečení RCE s nižší závažností než čtyři a identity (identity
), které prostřednictvím filtrování a porovnávání vzorů zobrazují zařízení s kritickými ohroženími zabezpečení. - Seznam je filtrovaný tak, aby zobrazoval jenom ta připojení, která mají popisky
Can Authenticate As
hran aCanRemoteInteractiveLogonTo
.
let IdentitiesAndCriticalDevices = ExposureGraphNodes // Reduce the number of nodes to match
| where
// Critical devices & devices with RCE vulnerabilities
(set_has_element(Categories, "device") and
(
// Critical devices
(isnotnull(NodeProperties.rawData.criticalityLevel) and NodeProperties.rawData.criticalityLevel.criticalityLevel < 4)
or
// Devices with RCE vulnerability
isnotnull(NodeProperties.rawData.vulnerableToRCE)
)
)
or
// identity
set_has_element(Categories, "identity");
ExposureGraphEdges
| where EdgeLabel in~ ("Can Authenticate As", "CanRemoteInteractiveLogonTo") // Reduce the number of edges to match
| make-graph SourceNodeId --> TargetNodeId with IdentitiesAndCriticalDevices on NodeId
| graph-match (DeviceWithRCE)-[CanConnectAs]->(Identity)-[CanRemoteLogin]->(CriticalDevice)
where
CanConnectAs.EdgeLabel =~ "Can Authenticate As" and
CanRemoteLogin.EdgeLabel =~ "CanRemoteInteractiveLogonTo" and
set_has_element(Identity.Categories, "identity") and
set_has_element(DeviceWithRCE.Categories, "device") and isnotnull(DeviceWithRCE.NodeProperties.rawData.vulnerableToRCE) and
set_has_element(CriticalDevice.Categories, "device") and isnotnull(CriticalDevice.NodeProperties.rawData.criticalityLevel)
project DeviceWithRCEIds=DeviceWithRCE.EntityIds, DeviceWithRCEName=DeviceWithRCE.NodeName, CriticalDeviceIds=CriticalDevice.EntityIds, CriticalDeviceName=CriticalDevice.NodeName
Zadejte všechny cesty od konkrétního ID uzlu k uzlu s konkrétním popiskem.
Tento dotaz zobrazí cestu z konkrétního uzlu IP a prochází až třemi prostředky, které mají za následek připojení k popisku uzlu virtuálního počítače.
-
ExposureGraphNodes
Používá tabulky schématu aExposureGraphEdges
a operátorymake-graph
agraph-match
k vytvoření struktury grafu. - Pomocí operátoru
project
se zobrazí seznam IP ID, vlastností IP adres, ID virtuálních počítačů a vlastností virtuálního počítače.
let IPsAndVMs = ExposureGraphNodes
| where (set_has_element(Categories, "ip_address") or set_has_element(Categories, "virtual_machine"));
ExposureGraphEdges
| make-graph SourceNodeId --> TargetNodeId with IPsAndVMs on NodeId
| graph-match (IP)-[anyEdge*1..3]->(VM)
where set_has_element(IP.Categories, "ip_address") and set_has_element(VM.Categories, "virtual_machine")
project IpIds=IP.EntityIds, IpProperties=IP.NodeProperties.rawData, VmIds=VM.EntityIds, VmProperties=VM.NodeProperties.rawData