Compartilhar via


Eventos de kubeaudit em busca avançada

Os eventos kubeaudit do Kubernetes (e auditoria de nuvem do Azure Resource Manager) estão disponíveis na busca avançada no portal do Microsoft Defender.

É possível fazer a triagem e investigar incidentes ocorridos na superfície de ataque do plano de controle do Kubernetes e no Gerenciamento de recursos do Azure. Você também pode procurar ameaças proativamente usando a busca avançada.

Além disso, é possível criar detecções personalizadas de atividades suspeitas do painel de controle do Azure Resource Manager e Kubernetes (KubeAudit).

Este recurso aborda:

  • Eventos kubeAudit de Kubernetes do Azure (Serviço de Kubernetes do Azure), Amazon Web Services (Amazon Elastic Kubernetes Service), Google Cloud Platform (Google Kubernetes Engine) e local

  • Eventos do plano de controle do Azure Resource Manager

Para começar, consulte a nova tabela que foi adicionada à guia Esquema na busca avançada chamada CloudAuditEvents.

Captura de tela da tabela CloudAuditEvents na guia Esquema na busca avançada.

Cenários e casos de uso comuns

  • Investigar atividades suspeitas do painel de controle do Kubernetes (Kubeaudit) e do Azure Resource Manager na busca avançada de XDR
  • Criar detecções personalizadas para atividades suspeitas do painel de controle do Azure Resource Manager e do Kubernetes (Kubeaudit)

Pré-requisitos

  • Para eventos do Kubernetes: você precisa de pelo menos uma assinatura com um plano do Defender para contêineres habilitado
  • Para eventos do Azure Resource Manager: você precisa de pelo menos uma assinatura com um plano do Defender para Azure Resource Manager habilitado

Consultas de exemplo

Para exibir a implantação de um pod privilegiado, use a seguinte consulta de exemplo:

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 exibir o comando exec no namespace do kube-system, use a seguinte consulta de exemplo:

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 a criação da função de associação cluster-admin, use a seguinte consulta de exemplo:

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