Coletar registros de alerta do Microsoft Defender para Nuvem
Visão geral
Esse analisador extrai dados de alertas de segurança dos registros formatados em JSON do Microsoft Defender para nuvem. Ele transforma e mapeia os campos de registros brutos para a UDM do Google SecOps, processando vários tipos de dados e estruturas aninhadas, além de enriquecer os dados com contexto e rótulos adicionais para melhorar a análise.
Antes de começar
Verifique se você atende aos seguintes pré-requisitos:
- Instância do Google SecOps.
- Acesso privilegiado ao Microsoft Defender para Nuvem.
Configurar feeds
Há dois pontos de entrada diferentes para configurar feeds na plataforma do Google SecOps:
- Configurações do SIEM > Feeds
- Central de conteúdo > Pacotes de conteúdo
Configure feeds em "Configurações do SIEM" > "Feeds".
Para configurar um feed, siga estas etapas:
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na próxima página, clique em Configurar um único feed.
- No campo Nome do feed, insira um nome para o feed, por exemplo, Registros de alerta do Microsoft Defender para nuvem.
- Selecione Webhook como o Tipo de origem.
- Selecione Microsoft Defender para nuvem como o Tipo de registro.
- Clique em Próxima.
- Opcional: especifique valores para os seguintes parâmetros de entrada:
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
\n
.
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
- Clique em Próxima.
- Revise a configuração do feed na tela Finalizar e clique em Enviar.
- Clique em Gerar chave secreta para autenticar o feed.
- Copie e armazene a chave secreta. Não é possível ver essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas isso torna a anterior obsoleta.
- Na guia Detalhes, copie o URL do endpoint do feed no campo Informações do endpoint. É necessário especificar esse URL de endpoint no aplicativo cliente.
- Clique em Concluído.
Configurar feeds na Central de conteúdo
Especifique valores para os seguintes campos:
- Delimitador de divisão: o delimitador usado para separar linhas de registro, como
\n
.
Opções avançadas
- Nome do feed: um valor pré-preenchido que identifica o feed.
- Tipo de origem: método usado para coletar registros no Google SecOps.
- Namespace do recurso: namespace associado ao feed.
Rótulos de ingestão: rótulos aplicados a todos os eventos deste feed.
Clique em Gerar chave secreta para autenticar o feed.
Copie e armazene a chave secreta. Não é possível ver essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas isso torna a anterior obsoleta.
Na guia Detalhes, copie o URL do endpoint do feed no campo Informações do endpoint. É necessário especificar esse URL de endpoint no aplicativo cliente.
Criar uma chave de API para o feed de webhook
Acesse console doGoogle Cloud > Credenciais.
Clique em Criar credenciais e, em seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Google Security Operations.
Especifique o URL do endpoint
- No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed do webhook.
Ative a autenticação especificando a chave de API e a chave secreta como parte do cabeçalho personalizado no seguinte formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Recomendação: especifique a chave de API como um cabeçalho em vez de no URL. Se o cliente de webhook não aceitar cabeçalhos personalizados, especifique a chave de API e a chave secreta usando parâmetros de consulta no seguinte formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Substitua:
ENDPOINT_URL
: o URL do endpoint do feed.API_KEY
: a chave de API para autenticar no Google Security Operations.SECRET
: a chave secreta gerada para autenticar o feed.
Criar um app de lógica do Azure
- Faça login no portal do Azure (https://portal.azure.com).
- Clique em Criar um recurso e pesquise Logic App.
- Clique em Criar para iniciar o processo de implantação.
- Configurar o aplicativo lógico:
- Nome: forneça um nome descritivo para o aplicativo lógico (por exemplo, GoogleSecOpsWebhook).
- Assinatura: selecione a assinatura adequada.
- Grupo de recursos: escolha um grupo de recursos ou crie um.
- Local: escolha o local mais próximo do seu ambiente.
- Análise de dados de registros: ative essa opção se quiser registrar dados de diagnóstico para o aplicativo lógico.
- Clique em Revisar + Criar para criar o aplicativo lógico.
- Clique em Criar para implantar o aplicativo lógico.
Configurar a conexão de webhook do Azure Logic App
- Acesse o aplicativo lógico criado na etapa anterior.
- Clique em Ferramentas de desenvolvimento > Designer de aplicativos lógicos.
- Clique em Adicionar um acionador.
Pesquise Microsoft Defender para Nuvem > Quando um alerta do Microsoft Defender para Nuvem é criado ou acionado como o acionador.
Clique em Criar novo e siga as instruções para fazer a autenticação.
Clique em Inserir uma nova etapa para adicionar uma etapa ao fluxo de trabalho.
Clique em Adicionar uma ação.
Pesquise HTT.
Selecione HTTP como a ação.
Configure a ação HTTP:
- URI: é aqui que você vai inserir o URL do endpoint de API Google SecOps.
- Método:
POST
- Adicionar cabeçalho Content-Type: defina
Content-Type
como chave eapplication/json
como valor. Isso informa ao Google SecOps o formato dos dados enviados. - Adicionar chave de API às consultas: defina
key
como a primeira chave de consulta e<API_KEY>
como o valor da consulta.API_KEY
é o valor da chave de API gerado durante a configuração do feed do Google SecOps. - Adicionar chave secreta às consultas: defina
secret
como a segunda chave de consulta e<SECRET_KEY>
como o valor da consulta.SECRET_KEY
é a chave secreta gerada durante a configuração do feed do Google SecOps. - Definir corpo da etapa anterior: clique em Inserir conteúdo da solicitação > clique em Inserir os dados das etapas anteriores (botão com ícone de raio à esquerda do campo de entrada).
Clique em Salvar.
Configurar o webhook de alertas do Microsoft Defender para Nuvem
- Acesse o Microsoft Defender para Nuvem.
- Clique em Gerenciamento > Automação de fluxo de trabalho.
- Clique em Adicionar automação de fluxo de trabalho.
- Nome: insira um nome descritivo para a regra de automação (por exemplo, ForwardAlertsToGoogleSecOps).
- Grupo de recursos: escolha um grupo de recursos existente.
- Tipo de dados do Defender for Cloud: escolha Alerta de segurança.
- Gravidade do alerta: escolha Selecionar tudo.
- Mostrar instâncias do aplicativo lógico das seguintes assinaturas: escolha a assinatura em que o aplicativo lógico foi criado.
- Selecionar aplicativo lógico: escolha o aplicativo lógico criado nas etapas anteriores.
- Clique em Criar para salvar a automação de fluxo de trabalho.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
AlertLink |
principal.resource.attribute.labels.AlertLink.value |
Mapeado diretamente. |
AlertName |
security_result.rule_name |
Mapeado diretamente. |
AlertSeverity |
security_result.severity |
Mapeado diretamente se o valor for ALTO, MÉDIO, BAIXO, CRÍTICO ou UNKNOWN_SEVERITY. Caso contrário, mapeado para security_result.severity_details . O valor é convertido para maiúsculas antes da comparação. |
AlertType |
security_result.threat_name |
Mapeado diretamente. |
CompromisedEntity |
principal.resource.attribute.labels.CompromisedEntity.value |
Mapeado diretamente. |
Description |
security_result.description |
Mapeado diretamente. |
DisplayName |
security_result.summary |
Mapeado diretamente. |
EndTime |
about.resource.attribute.labels.EndTime.value |
Mapeado diretamente. |
Entities[].Location.City |
principal.location.city |
Mapeado diretamente. |
Entities[].Location.CountryName |
principal.location.country_or_region |
Mapeado diretamente. |
ExtendedLinks[].Category |
about.resource.attribute.labels.extendedLink_Category.value |
Mapeado diretamente. |
ExtendedLinks[].Href |
about.resource.attribute.labels.extendedLink_Href.value |
Mapeado diretamente. |
ExtendedLinks[].Label |
about.resource.attribute.labels.extendedLink_Label.value |
Mapeado diretamente. |
ExtendedLinks[].Type |
about.resource.attribute.labels.extendedLink_Type.value |
Mapeado diretamente. |
ExtendedProperties.Account Session Id |
network.session_id |
Mapeado diretamente após a mudança de nome para accountSessionId . |
ExtendedProperties.Alert Id |
metadata.product_log_id |
Mapeado diretamente após a mudança de nome para alertId . |
ExtendedProperties.Authentication type |
extensions.auth.auth_details |
Mapeado diretamente após a mudança de nome para authenticationType . |
ExtendedProperties.Client Application |
principal.application |
Mapeado diretamente após a mudança de nome para clientApplication . |
ExtendedProperties.Client Hostname |
principal.asset.hostname , principal.hostname |
Mapeado diretamente após a mudança de nome para clientHostName . |
ExtendedProperties.Client IP address |
principal.asset.ip , principal.ip |
Mapeado diretamente após a mudança de nome para clientIpAddress . |
ExtendedProperties.Client IP location |
principal.location.country_or_region |
Mapeado diretamente após a mudança de nome para clientIpLocation . |
ExtendedProperties.Client Location |
principal.location.country_or_region |
Mapeado diretamente após a mudança de nome para clientLocation . |
ExtendedProperties.Client Principal Name |
principal.user.userid |
Mapeado diretamente após a mudança de nome para clientPrincipalName . |
ExtendedProperties.Compromised Host |
principal.asset.hostname , principal.hostname |
Mapeado diretamente após a mudança de nome para compromisedHost . |
ExtendedProperties.Suspicious Command Line |
target.process.command_line |
Mapeado diretamente após a mudança de nome para suspiciousCommandLine . |
ExtendedProperties.Suspicious Process |
target.process.file.full_path |
Mapeado diretamente após a mudança de nome para suspiciousProcess . |
ExtendedProperties.Suspicious Process Id |
target.process.pid |
Mapeado diretamente após a mudança de nome para suspiciousProcessId . |
ExtendedProperties.User agent |
network.http.user_agent |
Mapeado diretamente após a mudança de nome para userAgent . |
ExtendedProperties.User Name |
principal.user.user_display_name |
Mapeado diretamente após a mudança de nome para userName . |
ExtendedProperties.resourceType |
principal.resource.name |
Mapeado diretamente. |
IsIncident |
security_result.detection_fields.IsIncident.value |
Mapeado diretamente. Convertido em string. |
ProcessingEndTime |
about.resource.attribute.labels.ProcessingEndTime.value |
Mapeado diretamente. |
ProductName |
metadata.product_name |
Mapeado diretamente. |
ResourceId |
principal.resource.product_object_id |
Mapeado diretamente. |
SourceSystem |
security_result.detection_fields.SourceSystem.value |
Mapeado diretamente. |
StartTime |
about.resource.attribute.labels.StartTime.value |
Mapeado diretamente. |
Status |
security_result.detection_fields.Status.value |
Mapeado diretamente. |
SystemAlertId |
metadata.product_log_id |
Mapeado diretamente. |
Tactics |
security_result.attack_details.tactics.name |
Mapeado diretamente. |
TenantId |
additional.fields.TenantId.string_value |
Mapeado diretamente. |
TimeGenerated |
about.resource.attribute.labels.TimeGenerated.value |
Mapeado diretamente. |
VendorName |
metadata.vendor_name |
Mapeado diretamente. |
WorkspaceResourceGroup |
target.resource.attribute.labels.WorkspaceResourceGroup.value |
Mapeado diretamente. |
WorkspaceSubscriptionId |
target.resource.attribute.labels.WorkspaceSubscriptionId.value |
Mapeado diretamente. |
_Internal_WorkspaceResourceId |
target.resource.product_object_id |
Mapeado diretamente. |
properties.alertDisplayName |
security_result.rule_name |
Mapeado diretamente. |
properties.alertType |
security_result.threat_name |
Mapeado diretamente. |
properties.alertUri |
principal.resource.attribute.labels.AlertUri.value |
Mapeado diretamente. |
properties.correlationKey |
principal.resource.attribute.labels.correlationKey.value |
Mapeado diretamente. |
properties.description |
security_result.description |
Mapeado diretamente. |
properties.endTimeUtc |
additional.fields.EndTime.string_value |
Mapeado diretamente. |
properties.entities[].location.city |
principal.location.city |
Mapeado diretamente. |
properties.entities[].location.countryName |
principal.location.country_or_region |
Mapeado diretamente. |
properties.entities[].location.latitude |
principal.location.region_coordinates.latitude |
Mapeado diretamente. Convertido para ponto flutuante. |
properties.entities[].location.longitude |
principal.location.region_coordinates.longitude |
Mapeado diretamente. Convertido para ponto flutuante. |
properties.extendedProperties.alert_Id |
metadata.product_log_id |
Mapeado diretamente. |
properties.extendedProperties.clientApplication |
principal.application |
Mapeado diretamente. |
properties.extendedProperties.clientIpAddress |
principal.asset.ip , principal.ip |
Mapeado diretamente. Analisado como endereço IP. |
properties.extendedProperties.clientLocation |
principal.location.country_or_region |
Mapeado diretamente. |
properties.extendedProperties.clientPrincipalName |
principal.user.userid |
Mapeado diretamente. |
properties.extendedProperties.compromisedEntity |
principal.resource.attribute.labels.CompromisedEntity.value |
Mapeado diretamente. |
properties.extendedProperties.resourceType |
principal.resource.name |
Mapeado diretamente. |
properties.IsIncident |
security_result.detection_fields.isIncident.value |
Mapeado diretamente. Convertido em string. |
properties.productName |
metadata.product_name |
Mapeado diretamente. |
properties.resourceIdentifiers[].<key> |
additional.fields.<key>_<index>.string_value |
Mapeado diretamente. As chaves $id e type são anexadas com o índice do elemento na matriz. |
properties.severity |
security_result.severity |
Mapeado diretamente se o valor for ALTO, MÉDIO, BAIXO, CRÍTICO ou UNKNOWN_SEVERITY. Caso contrário, mapeado para security_result.severity_details . O valor é convertido para maiúsculas antes da comparação. |
properties.startTimeUtc |
additional.fields.StartTime.string_value |
Mapeado diretamente. |
properties.status |
security_result.detection_fields.Status.value |
Mapeado diretamente. |
properties.timeGeneratedUtc |
additional.fields.TimeGenerated.string_value |
Mapeado diretamente. Defina como "MICROSOFT_DEFENDER_CLOUD_ALERTS" se não for fornecido no registro. Defina como "MICROSOFT_DEFENDER_CLOUD_ALERTS". Definido como "USER_RESOURCE_ACCESS" se a principal ou o destino estiverem presentes. Caso contrário, definido como "GENERIC_EVENT". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.