Coletar registros de alerta do Microsoft Defender para Nuvem

Compatível com:

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 no 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 os seguintes pré-requisitos:

  • Instância do Google SecOps.
  • Acesso privilegiado ao Microsoft Defender para Nuvem.

Configurar feeds

Para configurar um feed, siga estas etapas:

  1. Acesse Configurações do SIEM > Feeds.
  2. Clique em Adicionar novo feed.
  3. Na próxima página, clique em Configurar um único feed.
  4. No campo Nome do feed, insira um nome para o feed, por exemplo, Registros de alerta do Microsoft Defender para nuvem.
  5. Selecione Webhook como o Tipo de origem.
  6. Selecione Microsoft Defender para nuvem como o Tipo de registro.
  7. Clique em Próxima.
  8. Opcional: especifique valores para os seguintes parâmetros de entrada:
    • Delimitador de divisão: o delimitador usado para separar linhas de registro, como \n.
  9. Clique em Próxima.
  10. Revise a configuração do feed na tela Finalizar e clique em Enviar.
  11. Clique em Gerar chave secreta para autenticar o feed.
  12. 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.
  13. 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.
  14. Clique em Concluído.

Criar uma chave de API para o feed de webhook

  1. Acesse console doGoogle Cloud > Credenciais.

    Ir para Credenciais

  2. Clique em Criar credenciais e, em seguida, selecione Chave de API.

  3. Restrinja o acesso da chave de API à API Google Security Operations.

Especifique o URL do endpoint

  1. No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed de webhook.
  2. 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 lógico do Azure

  1. Faça login no portal do Azure (https://portal.azure.com).
  2. Clique em Criar um recurso e pesquise Logic App.
  3. Clique em Criar para iniciar o processo de implantação.
  4. Configurar o app lógico:
    • Nome: insira 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.
  5. Clique em Revisar + criar para criar o app lógico.
  6. Clique em Criar para implantar o aplicativo lógico.

Configurar a conexão de webhook do Azure Logic App

  1. Acesse o aplicativo lógico criado na etapa anterior.
  2. Clique em Ferramentas de desenvolvimento > Designer de aplicativos lógicos.
  3. Clique em Adicionar um acionador.
  4. Pesquise Microsoft Defender para Nuvem > Quando um alerta do Microsoft Defender para Nuvem é criado ou acionado como o acionador.

  5. Clique em Criar novo e siga as instruções para fazer a autenticação.

  6. Clique em Inserir uma nova etapa para adicionar uma etapa ao fluxo de trabalho.

  7. Clique em Adicionar uma ação.

  8. Pesquise HTT.

  9. Selecione HTTP como a ação.

  10. Configure a ação HTTP:

    • URI: é aqui que você vai inserir o URL do endpoint de API do Google SecOps.
    • Método: POST
    • Adicionar cabeçalho Content-Type: defina Content-Type como chave do cabeçalho e application/json como valor do cabeçalho. 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).
  11. Clique em Salvar.

Configurar o webhook de alertas do Microsoft Defender para Nuvem

  1. Acesse o Microsoft Defender para Nuvem.
  2. Clique em Gerenciamento > Automação de fluxo de trabalho.
  3. Clique em Adicionar automação de fluxo de trabalho.
    • Nome: forneça um nome descritivo para a regra de automação (por exemplo, ForwardAlertsToGoogleSecOps).
    • Grupo de recursos: escolha um grupo de recursos atual.
    • 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.
  4. Clique em Criar para salvar a automação de fluxo de trabalho.

Registros de amostra compatíveis do Microsoft Defender para Nuvem

  • Alerta de segurança padrão

    {
      "AlertLink": "https://portal.azure.com/#blade/AlertDetails/alertId/2517_9b56-1701fd72392b/"
                   "subscriptionId/00000000-0000-0000-0000-000000000000/",
      "AlertName": "[SAMPLE] Unusual data extraction",
      "AlertSeverity": "Low",
      "CompromisedEntity": "prod-storage-account",
      "Description": "Realistic simulation of data exfiltration.",
      "Entities": [
        {
          "$id": "1",
          "Address": "192.168.1.50",
          "Location": {
            "CountryCode": "US",
            "City": "New York"
          },
          "Type": "ip"
        },
        {
          "$id": "2",
          "ResourceName": "prod-storage-account",
          "Type": "azure-resource"
        }
      ],
      "ExtendedProperties": {
        "Client location": "New York, US",
        "User agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
        "Operations types": "GetBlob"
      },
      "ProductName": "Microsoft Defender for Cloud",
      "ResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Security-RG/"
                    "providers/microsoft.storage/storageaccounts/prod-storage-account",
      "SystemAlertId": "25171206_5e67b569-b870-4429-91e6-1701fd72392b",
      "TenantId": "11111111-1111-1111-1111-111111111111",
      "TimeGenerated": "2026-02-24T12:00:00Z"
    }
    
  • Registro de caça avançada

    {
      "records": [
        {
          "time": "2026-02-24T10:30:00Z",
          "tenantId": "11111111-1111-1111-1111-111111111111",
          "operationName": "Publish",
          "category": "AdvancedHunting-CloudAppEvents",
          "properties": {
            "ActionType": "SendAs",
            "AccountDisplayName": "John Doe",
            "AccountObjectId": "abc-123-def-456",
            "IPAddress": "10.0.0.25",
            "UserAgent": "Client=MSExchangeRPC",
            "ActivityObjects": [
              {
                "Type": "User",
                "Role": "Actor",
                "Name": "John Doe",
                "Id": "user-object-id-001"
              }
            ],
            "RawEventData": {
              "ClientIP": "10.0.0.25",
              "MailboxOwnerUPN": "john.doe@company.com",
              "Operation": "SendAs",
              "OrganizationName": "company.onmicrosoft.com"
            },
            "Application": "Microsoft Exchange Online"
          }
        }
      ]
    }
    
  • Alerta de malware sem agente

    {
      "VendorName": "Microsoft",
      "AlertType": "VM.Agentless_MalwareWasDetected",
      "ProductName": "MDC Agentless Antimalware",
      "Severity": "High",
      "CompromisedEntity": "web-srv-01",
      "Entities": [
        {
          "$id": "4",
          "HostName": "web-srv-01",
          "Type": "host"
        },
        {
          "$id": "5",
          "Directory": "/var/www/html/uploads",
          "Name": "malicious_script.sh",
          "FileHashes": [
            {
              "Algorithm": "SHA256",
              "Value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
            }
          ],
          "Type": "file"
        }
      ],
      "ExtendedProperties": {
        "Machine Name": "web-srv-01",
        "Threat Category": "Trojan",
        "EffectiveSubscriptionId": "00000000-0000-0000-0000-000000000000"
      }
    }
    
  • Alerta de segurança da IoT

    {
      "DisplayName": "Unauthorized BACNet Object Access",
      "AlertSeverity": "Medium",
      "ProviderName": "IoTSecurity",
      "AlertType": "IoT_ObjectServiceWhiteList",
      "ExtendedProperties": {
        "SourceDevice": "PLC_10.10.10.5",
        "DestinationDevice": "HMI_Console_01",
        "Protocol": "BACNet",
        "SourceDeviceAddress": "10.10.10.5",
        "DestinationDeviceAddress": "10.10.10.100"
      },
      "Entities": [
        {
          "DeviceId": "iot-uid-789",
          "DeviceName": "PLC_10.10.10.5",
          "Owners": [
            "ot-admin@factory.com"
          ],
          "MacAddress": "00-11-22-33-44-55",
          "Type": "iotdevice"
        }
      ]
    }
    

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.