Zdarzenia Kubeaudit w zaawansowanym wyszukiwaniu zagrożeń
Zdarzenia Kubernetes Kubeaudit (i inspekcja chmury usługi Azure Resource Manager) są dostępne w zaawansowanym wyszukiwaniu zagrożeń w portalu usługi Microsoft Defender.
Możesz sklasyfikować i zbadać zdarzenia, które wystąpiły na powierzchni ataków na płaszczyznę sterowania platformy Kubernetes i zarządzanie zasobami platformy Azure. Możesz również aktywnie wyszukiwać zagrożenia przy użyciu zaawansowanego wyszukiwania zagrożeń.
Ponadto można tworzyć niestandardowe wykrycia dla podejrzanych działań płaszczyzny sterowania usługi Resource Manager i Kubernetes (KubeAudit).
Ta funkcja obejmuje:
Zdarzenia Kubernetes KubeAudit z platformy Azure (Azure Kubernetes Service), Amazon Web Services (Amazon Elastic Kubernetes Service), Google Cloud Platform (Google Kubernetes Engine) i lokalne
Zdarzenia płaszczyzny sterowania usługi Resource Manager
Aby rozpocząć, zobacz nową tabelę, która została dodana do karty Schemat w zaawansowanym wyszukiwaniu zagrożeń o nazwie CloudAuditEvents.
Typowe przypadki użycia i scenariusze
- Badanie podejrzanych działań płaszczyzny sterowania przy użyciu usługi Resource Manager i Kubernetes (Kubeaudit) w zaawansowanym wyszukiwaniu zagrożeń XDR
- Tworzenie niestandardowych wykryć dla podejrzanych działań płaszczyzny sterowania usługi Resource Manager i Kubernetes (Kubeaudit)
Wymagania wstępne
- W przypadku zdarzeń platformy Kubernetes: potrzebujesz co najmniej jednej subskrypcji z włączonym planem usługi Defender for Containers
- W przypadku zdarzeń usługi Azure Resource Manager: potrzebujesz co najmniej jednej subskrypcji z włączonym planem usługi Defender dla usługi Azure Resource Manager
Przykładowe zapytania
Aby wyświetlić wdrożenie uprzywilejowanego zasobnika, użyj następującego przykładowego zapytania:
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
Aby wyświetlić polecenie exec w przestrzeni nazw kube-system , użyj następującego przykładowego zapytania:
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
Aby zidentyfikować tworzenie powiązania roli administratora klastra, użyj następującego przykładowego zapytania:
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