Recolha registos de alertas do Microsoft Defender for Cloud
Vista geral
Este analisador extrai dados de alertas de segurança dos registos formatados em JSON do Microsoft Defender for Cloud. Transforma e mapeia os campos de registo não processados no UDM do Google SecOps, processando vários tipos de dados e estruturas aninhadas, ao mesmo tempo que enriquece os dados com contexto e etiquetas adicionais para uma análise melhorada.
Antes de começar
Certifique-se de que tem os seguintes pré-requisitos:
- Instância do Google SecOps.
- Acesso privilegiado ao Microsoft Defender for Cloud.
Configure feeds
Para configurar um feed, siga estes passos:
- Aceda a Definições do SIEM > Feeds.
- Clique em Adicionar novo feed.
- Na página seguinte, clique em Configurar um único feed.
- No campo Nome do feed, introduza um nome para o feed; por exemplo, Registos de alertas do Microsoft Defender for Cloud.
- Selecione Webhook como o Tipo de origem.
- Selecione Microsoft Defender for Cloud como o Tipo de registo.
- Clicar em Seguinte.
- Opcional: especifique valores para os seguintes parâmetros de entrada:
- Delimitador de divisão: o delimitador usado para separar linhas de registo, como
\n
.
- Delimitador de divisão: o delimitador usado para separar linhas de registo, como
- Clicar em Seguinte.
- Reveja a configuração do feed no ecrã Finalizar e, de seguida, clique em Enviar.
- Clique em Gerar chave secreta para gerar uma chave secreta para autenticar este feed.
- Copie e armazene a chave secreta. Não pode ver esta chave secreta novamente. Se necessário, pode regenerar uma nova chave secreta, mas esta ação torna a chave secreta anterior obsoleta.
- No separador Detalhes, copie o URL do ponto final do feed do campo Informações do ponto final. Tem de especificar este URL do ponto final na sua aplicação cliente.
- Clique em Concluído.
Crie uma chave da API para o feed de webhook
Aceda à Google Cloud consola > Credenciais.
Clique em Criar credenciais e, de seguida, selecione Chave de API.
Restrinja o acesso da chave de API à API Google Security Operations.
Especifique o URL do ponto final
- Na aplicação cliente, especifique o URL do ponto final HTTPS fornecido no feed do webhook.
Ative a autenticação especificando a chave da 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 da API como um cabeçalho em vez de a especificar no URL. Se o seu cliente de webhook não suportar cabeçalhos personalizados, pode especificar a chave da API e a chave secreta através de parâmetros de consulta no seguinte formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Substitua o seguinte:
ENDPOINT_URL
: o URL do ponto final do feed.API_KEY
: a chave da API para autenticar no Google Security Operations.SECRET
: a chave secreta que gerou para autenticar o feed.
Crie uma aplicação Azure Logic
- Inicie sessão 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 implementação.
- Configure a app Logic:
- Nome: indique um nome descritivo para a app Logic (por exemplo, GoogleSecOpsWebhook).
- Subscrição: selecione a subscrição adequada.
- Grupo de recursos: escolha um grupo de recursos existente ou crie um novo.
- Localização: escolha a localização mais próxima do seu ambiente.
- Registar Analytics: ative esta opção se quiser registar dados de diagnóstico para a app Logic.
- Clique em Rever + criar para criar a app Logic.
- Clique em Criar para implementar a app Logic.
Configure a ligação do webhook da Azure Logic App
- Aceda à app Logic criada no passo anterior.
- Clique em Ferramentas de desenvolvimento > Logic App Designer.
- Clique em Adicionar um acionador.
Pesquise Microsoft Defender for Cloud > Quando um alerta do Microsoft Defender for Cloud é criado ou acionado como acionador.
Clique em Criar novo e siga as instruções para fazer a autenticação.
Clique em Inserir um novo passo para adicionar um novo passo ao fluxo de trabalho.
Clique em Adicionar uma ação.
Pesquise HTT.
Selecione HTTP como ação.
Configure a ação HTTP:
- URI: é aqui que introduz o URL do ponto final da API Google SecOps.
- Método:
POST
- Adicione o cabeçalho Content-Type: defina
Content-Type
como a chave do cabeçalho eapplication/json
como o valor do cabeçalho. Isto indica ao Google SecOps o formato dos dados que estão a ser enviados. - Adicionar chave da API a consultas: defina
key
como a primeira chave de consulta e<API_KEY>
como o valor de consulta.API_KEY
é o valor da chave da API gerado durante a configuração do feed do Google SecOps. - Adicione a chave secreta às consultas: defina
secret
como a segunda chave de consulta e<SECRET_KEY>
como o valor de consulta.SECRET_KEY
é a chave secreta gerada durante a configuração do feed do Google SecOps. - Definir corpo a partir do passo anterior: clique em Introduzir conteúdo do pedido > clique em Introduzir os dados dos passos anteriores (botão com o ícone de relâmpago à esquerda do campo de entrada).
Clique em Guardar.
Configure o webhook de alertas do Microsoft Defender na nuvem
- Aceda ao Microsoft Defender for Cloud.
- Clique em Gestão > Automatização de fluxo de trabalho.
- Clique em Adicionar automatização de fluxo de trabalho.
- Nome: indique um nome descritivo para a regra de automatizaçã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 da app Logic das seguintes subscrições: escolha a subscrição onde a app Logic foi criada.
- Selecionar app lógica: escolha a app lógica criada nos passos anteriores.
- Clique em Criar para guardar a automatização do fluxo de trabalho.
Tabela de mapeamento da UDM
Campo de registo | Mapeamento de 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 um de HIGH, MEDIUM, LOW, CRITICAL, UNKNOWN_SEVERITY. Caso contrário, mapeado para security_result.severity_details . O valor é convertido em 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 do nome para accountSessionId . |
ExtendedProperties.Alert Id |
metadata.product_log_id |
Mapeado diretamente após a mudança do nome para alertId . |
ExtendedProperties.Authentication type |
extensions.auth.auth_details |
Mapeado diretamente após a mudança do nome para authenticationType . |
ExtendedProperties.Client Application |
principal.application |
Mapeado diretamente após a mudança do nome para clientApplication . |
ExtendedProperties.Client Hostname |
principal.asset.hostname , principal.hostname |
Mapeado diretamente após a mudança do nome para clientHostName . |
ExtendedProperties.Client IP address |
principal.asset.ip , principal.ip |
Mapeado diretamente após a mudança do nome para clientIpAddress . |
ExtendedProperties.Client IP location |
principal.location.country_or_region |
Mapeado diretamente após a mudança do nome para clientIpLocation . |
ExtendedProperties.Client Location |
principal.location.country_or_region |
Mapeado diretamente após a mudança do nome para clientLocation . |
ExtendedProperties.Client Principal Name |
principal.user.userid |
Mapeado diretamente após a mudança do nome para clientPrincipalName . |
ExtendedProperties.Compromised Host |
principal.asset.hostname , principal.hostname |
Mapeado diretamente após a mudança do nome para compromisedHost . |
ExtendedProperties.Suspicious Command Line |
target.process.command_line |
Mapeado diretamente após a mudança do nome para suspiciousCommandLine . |
ExtendedProperties.Suspicious Process |
target.process.file.full_path |
Mapeado diretamente após a mudança do nome para suspiciousProcess . |
ExtendedProperties.Suspicious Process Id |
target.process.pid |
Mapeado diretamente após a mudança do nome para suspiciousProcessId . |
ExtendedProperties.User agent |
network.http.user_agent |
Mapeado diretamente após a mudança do nome para userAgent . |
ExtendedProperties.User Name |
principal.user.user_display_name |
Mapeado diretamente após a mudança do 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 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 com o índice do elemento na matriz. |
properties.severity |
security_result.severity |
Mapeado diretamente se o valor for um de HIGH, MEDIUM, LOW, CRITICAL, UNKNOWN_SEVERITY. Caso contrário, mapeado para security_result.severity_details . O valor é convertido em 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. Definido como "MICROSOFT_DEFENDER_CLOUD_ALERTS" se não for fornecido no registo. Definido como "MICROSOFT_DEFENDER_CLOUD_ALERTS". Definido como "USER_RESOURCE_ACCESS" se o 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 da Google SecOps.