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 registro brutos para o UDM do Google SecOps, processando vários tipos de dados e estruturas aninhadas, além de enriquecer os dados com mais contexto e rótulos para melhorar a análise.
Antes de começar
- Verifique se você tem uma instância do Google SecOps.
- Verifique se você tem acesso privilegiado ao Microsoft Defender para nuvem.
Configurar um feed no Google SecOps para processar os registros de alertas do Microsoft Defender Cloud
- Acesse Configurações do SIEM > Feeds.
- Clique em Adicionar novo.
- 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
. - Namespace de recursos: o namespace de recursos.
- Rótulos de ingestão: o rótulo aplicado aos eventos desse feed.
- 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 gerar uma chave secreta para autenticar esse feed.
- Copie e armazene a chave secreta. Não é possível acessar essa chave secreta novamente. Se necessário, você pode gerar uma nova chave secreta, mas essa ação torna a chave secreta 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.
Criar uma chave de API para o feed de webhook
Acesse o console do Google Cloud > Credenciais.
Clique em Criar credenciais e, em seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Google Security Operations.
Especificar o URL do endpoint
- No aplicativo cliente, especifique o URL do endpoint HTTPS fornecido no feed de 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 especificar no URL. Se o cliente do webhook não tiver suporte a 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 autenticação 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.
- Configure o app de lógica:
- Nome: informe um nome descritivo para a app de lógica (por exemplo, GoogleSecOpsWebhook).
- Assinatura: selecione a assinatura adequada.
- Grupo de recursos: escolha um grupo de recursos ou crie um novo.
- 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 app de lógica.
- Clique em Revisar + Criar para criar a app de lógica.
- Clique em Criar para implantar a app de lógica.
Configurar a conexão do webhook do app de lógica do Azure
- Acesse a app de lógica criada na etapa anterior.
- Clique em Ferramentas de desenvolvimento > Designer de app de lógica.
- Clique em Adicionar um acionador.
Pesquise Microsoft Defender para Nuvem > Quando um alerta do Microsoft Defender para Nuvem é criado ou acionado como acionador.
Clique em Criar novo e siga as instruções para autenticação.
Clique em Inserir uma nova etapa para adicionar uma nova 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: é onde você vai inserir o URL do endpoint de API Google SecOps.
- Método:
POST
- Adicionar cabeçalho Content-Type: defina
Content-Type
como chave de cabeçalho eapplication/json
como valor de 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 o corpo da etapa anterior: clique em Enter request content > clique em Enter the data from previous steps (botão com ícone de raio à esquerda do campo de entrada).
Clique em Salvar.
Configurar o webhook do Microsoft Defender Cloud Alerts
- 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: informe um nome descritivo para a regra de automação (por exemplo, ForwardAlertsToGoogleSecOps).
- Grupo de recursos: escolha um grupo de recursos existente.
- Defender for Cloud data type: escolha Alerta de segurança.
- Gravidade do alerta: escolha Selecionar tudo.
- Mostrar instâncias do app de lógica das seguintes assinaturas: escolha a assinatura em que o app de lógica foi criado.
- Selecionar a app de lógica: escolha a app de lógica criada nas etapas anteriores.
- Clique em Criar para salvar a automação do 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, será 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 renomeação para accountSessionId . |
ExtendedProperties.Alert Id |
metadata.product_log_id |
Mapeado diretamente após a renomeação para alertId . |
ExtendedProperties.Authentication type |
extensions.auth.auth_details |
Mapeado diretamente após a renomeação para authenticationType . |
ExtendedProperties.Client Application |
principal.application |
Mapeado diretamente após a renomeação para clientApplication . |
ExtendedProperties.Client Hostname |
principal.asset.hostname , principal.hostname |
Mapeado diretamente após a renomeação para clientHostName . |
ExtendedProperties.Client IP address |
principal.asset.ip , principal.ip |
Mapeado diretamente após a renomeação para clientIpAddress . |
ExtendedProperties.Client IP location |
principal.location.country_or_region |
Mapeado diretamente após a renomeação para clientIpLocation . |
ExtendedProperties.Client Location |
principal.location.country_or_region |
Mapeado diretamente após a renomeação para clientLocation . |
ExtendedProperties.Client Principal Name |
principal.user.userid |
Mapeado diretamente após a renomeação para clientPrincipalName . |
ExtendedProperties.Compromised Host |
principal.asset.hostname , principal.hostname |
Mapeado diretamente após a renomeação para compromisedHost . |
ExtendedProperties.Suspicious Command Line |
target.process.command_line |
Mapeado diretamente após a renomeação para suspiciousCommandLine . |
ExtendedProperties.Suspicious Process |
target.process.file.full_path |
Mapeado diretamente após a renomeação para suspiciousProcess . |
ExtendedProperties.Suspicious Process Id |
target.process.pid |
Mapeado diretamente após a renomeação para suspiciousProcessId . |
ExtendedProperties.User agent |
network.http.user_agent |
Mapeado diretamente após a renomeação para userAgent . |
ExtendedProperties.User Name |
principal.user.user_display_name |
Mapeado diretamente após a renomeação 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 em flutuante. |
properties.entities[].location.longitude |
principal.location.region_coordinates.longitude |
Mapeado diretamente. Convertido em 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 ao í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, será 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 estiver no registro. Defina como "MICROSOFT_DEFENDER_CLOUD_ALERTS". Defina como "USER_RESOURCE_ACCESS" se o principal ou o destino estiverem presentes. Caso contrário, defina como "GENERIC_EVENT". |
Alterações
2024-07-05
- "isInteractive" foi mapeado para "security_result.detection_fields".
2024-04-02
- "properties.createdDateTime" foi mapeado para "metadata.event_timestamp".
- Mapeou "properties.resourceServicePrincipalId" e "resourceServicePrincipalId" para "target.resource.attribute.labels".
- Mapeamos "properties.authenticationProcessingDetails", "authenticationProcessingDetails" e "properties.networkLocationDetails" para "additional.fields".
- "properties.userAgent" foi mapeado para "network.http.user_agent" e "network.http.parsed_user_agent".
- Mapeamos "properties.authenticationRequirement" para "additional.fields".