Kubeaudit-Ereignisse in der erweiterten Bedrohungssuche

Kubernetes Kubeaudit-Ereignisse (und die Azure Resource Manager-Cloudüberwachung) sind in der erweiterten Bedrohungssuche im Microsoft Defender-Portal verfügbar.

Sie können Incidents eingrenzen und untersuchen, die auf der Angriffsfläche Ihrer Kubernetes-Steuerungsebene und in Azure Resource Manager aufgetreten sind. Sie können außerdem mithilfe der erweiterten Bedrohungssuche proaktiv nach Bedrohungen suchen.

Darüber hinaus können Sie eine benutzerdefinierte Erkennungen für verdächtige Aktivitäten auf der Resource Manager- und Kubernetes-Steuerungsebene (Kubeaudit) erstellen.

Dieses Feature umfasst Folgendes:

  • Kubernetes Kubeaudit-Ereignisse von Azure (Azure Kubernetes Service), Amazon Web Services (Amazon Elastic Kubernetes Service), Google Cloud Platform (Google Kubernetes Engine) und lokalen Instanzen

  • Ereignisse auf Resource Manager-Steuerungsebene

Zeigen Sie zunächst die neue Tabelle an, die der Registerkarte „Schema“ in der erweiterten Bedrohungssuche namens CloudAuditEvents hinzugefügt wurde.

Screenshot der Tabelle „CloudAuditEvents“ auf der Registerkarte „Schema“ in der erweiterten Bedrohungssuche

Gängige Anwendungsfälle und -szenarien

  • Untersuchen verdächtiger Aktivitäten auf Resource Manager- und Kubernetes-Steuerungsebene (Kubeaudit) in der erweiterten XDR-Bedrohungssuche
  • Erstellen benutzerdefinierter Erkennungen für verdächtige Aktivitäten auf Resource Manager- und Kubernetes-Steuerungsebene (Kubeaudit)

Voraussetzungen

  • Kubernetes-Ereignisse: Sie benötigen mindestens ein Abonnement mit aktiviertem Defender for Containers-Plan.
  • Azure Resource Manager-Ereignisse: Sie benötigen mindestens ein Abonnement mit einem aktivierten Defender for Azure Resource Manager-Plan.

Beispielabfragen

Verwenden Sie die folgende Beispielabfrage, um die Bereitstellung eines privilegierten Pods anzuzeigen:

CloudAuditEvents
| where Timestamp > ago(1d)
| where DataSource == "Azure Kubernetes Service"
| where OperationName == "create"
| where RawEventData.ObjectRef.resource == "pods" and isnull(RawEventData.ObjectRef.subresource)
| where RawEventData.ResponseStatus.code startswith "20"
| extend PodName = RawEventData.RequestObject.metadata.name
| extend PodNamespace = RawEventData.ObjectRef.namespace
| mv-expand Container = RawEventData.RequestObject.spec.containers
| extend ContainerName = Container.name
| where Container.securityContext.privileged == "true"
| extend Username = RawEventData.User.username
| project Timestamp, AzureResourceId , OperationName, IPAddress, UserAgent, PodName, PodNamespace, ContainerName, Username

Verwenden Sie die folgende Beispielabfrage, um den Befehl exec im Namespace kube-system anzuzeigen:

CloudAuditEvents
| where Timestamp > ago(1d)
| where DataSource == "Azure Kubernetes Service"
| where OperationName == "create"
| where RawEventData.ObjectRef.resource == "pods" and RawEventData.ResponseStatus.code == 101  
| where RawEventData.ObjectRef.namespace == "kube-system"
| where RawEventData.ObjectRef.subresource == "exec"
| where RawEventData.ResponseStatus.code == 101
| extend RequestURI = tostring(RawEventData.RequestURI)
| extend PodName = tostring(RawEventData.ObjectRef.name)
| extend PodNamespace = tostring(RawEventData.ObjectRef.namespace)
| extend Username = tostring(RawEventData.User.username)
| where PodName !startswith "tunnelfront-" and PodName !startswith "konnectivity-" and PodName !startswith "aks-link"
| extend Commands =  extract_all(@"command=([^\&]*)", RequestURI)
| extend ParsedCommand = url_decode(strcat_array(Commands, " "))
| project Timestamp, AzureResourceId , OperationName, IPAddress, UserAgent, PodName, PodNamespace,  Username, ParsedCommand

Verwenden Sie die folgende Beispielabfrage, um die Erstellung der Rollenbindung cluster-admin zu identifizieren:

CloudAuditEvents
| where Timestamp > ago(1d)
| where OperationName == "create"
| where RawEventData.ObjectRef.resource == "clusterrolebindings"
| where RawEventData.ResponseStatus.code startswith "20"
| where RawEventData.RequestObject.roleRef.name == "cluster-admin"
| mv-expand Subject = RawEventData.RequestObject.subjects
| extend SubjectName = tostring(Subject.name)
| extend SubjectKind = tostring(Subject["kind"]) 
| extend BindingName = tostring(RawEventData.ObjectRef.name)
| extend ActionTakenBy = tostring(RawEventData.User.username)
| where ActionTakenBy != "acsService" //Remove FP
| project Timestamp, AzureResourceId , OperationName, ActionTakenBy, IPAddress, UserAgent, BindingName, SubjectName, SubjectKind