Eventos de Kubeaudit en la búsqueda avanzada
Los eventos kubeaudit de Kubernetes (y la auditoría en la nube de Azure Resource Manager) están disponibles en la búsqueda avanzada en el portal de Microsoft Defender.
Puede evaluar e investigar incidentes que se produjeron en la superficie expuesta a ataques del plano de control de Kubernetes y Azure Resource Management. También puede buscar amenazas de forma proactiva mediante la búsquedaavanzada.
Además, puede crear detecciones personalizadas para actividades sospechosas del plano de control de Resource Manager y Kubernetes (KubeAudit).
Esta característica abarca:
Eventos KubeAudit de Kubernetes desde Azure (Azure Kubernetes Service), Amazon Web Services (Amazon Elastic Kubernetes Service), Google Cloud Platform (Google Kubernetes Engine) y local
Eventos del plano de control de Resource Manager
Para empezar, consulte la nueva tabla que se agregó a la pestaña Esquema en la búsqueda avanzada denominada CloudAuditEvents.
Casos de uso y escenarios comunes
- Investigación de actividades sospechosas del plano de control de Resource Manager y Kubernetes (Kubeaudit) en la búsqueda avanzada de XDR
- Creación de detecciones personalizadas para actividades sospechosas del plano de control de Resource Manager y Kubernetes (Kubeaudit)
Requisitos previos
- Para eventos de Kubernetes: necesita al menos una suscripción con un plan de Defender for Containers habilitado
- Para eventos de Azure Resource Manager: necesita al menos una suscripción con un plan de Defender para Azure Resource Manager habilitado
Consultas de ejemplo
Para exponer la implementación de un pod con privilegios, use la siguiente consulta de ejemplo:
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
Para exponer el comando exec en el espacio de nombres kube-system, use la siguiente consulta de ejemplo:
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
Para identificar la creación del enlace de rol de administrador de clústeres, use la siguiente consulta de ejemplo:
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