Recopila registros de alertas de Microsoft Defender for Cloud
Descripción general
Este analizador extrae datos de alertas de seguridad de los registros con formato JSON de Microsoft Defender for Cloud. Transforma y asigna los campos de registro sin procesar al UDM de Google SecOps, controla varios tipos de datos y estructuras anidadas, y enriquece los datos con contexto y etiquetas adicionales para mejorar el análisis.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Instancia de Google SecOps.
- Acceso con privilegios a Microsoft Defender for Cloud
Configura feeds
Existen dos puntos de entrada diferentes para configurar feeds en la plataforma de Google SecOps:
- Configuración de SIEM > Feeds
- Centro de contenido > Paquetes de contenido
Configura feeds en Configuración del SIEM > Feeds
Para configurar un feed, sigue estos pasos:
- Ve a Configuración del SIEM > Feeds.
- Haz clic en Agregar feed nuevo.
- En la siguiente página, haz clic en Configurar un solo feed.
- En el campo Nombre del feed, ingresa un nombre para el feed, por ejemplo, Registros de alertas de Microsoft Defender for Cloud.
- Selecciona Webhook como el Tipo de origen.
- Selecciona Microsoft Defender for Cloud como el Tipo de registro.
- Haz clic en Siguiente.
- Opcional: Especifica valores para los siguientes parámetros de entrada:
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
\n
.
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
- Haz clic en Siguiente.
- Revisa la configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
- Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
- Copia y almacena la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes regenerar una clave secreta nueva, pero esta acción hace que la clave secreta anterior quede obsoleta.
- En la pestaña Detalles, copia la URL del extremo del feed del campo Información del extremo. Debes especificar esta URL de extremo en tu aplicación cliente.
- Haz clic en Listo.
Configura feeds desde el Centro de contenido
Especifica valores para los siguientes campos:
- Delimitador de división: Es el delimitador que se usa para separar las líneas de registro, como
\n
.
Opciones avanzadas
- Nombre del feed: Es un valor completado previamente que identifica el feed.
- Tipo de fuente: Es el método que se usa para recopilar registros en Google SecOps.
- Espacio de nombres del activo: Es el espacio de nombres asociado con el feed.
Etiquetas de transferencia: Son las etiquetas que se aplican a todos los eventos de este feed.
Haz clic en Generar clave secreta para generar una clave secreta que autentique este feed.
Copia y almacena la clave secreta. No podrás volver a ver esta clave secreta. Si es necesario, puedes regenerar una clave secreta nueva, pero esta acción hace que la clave secreta anterior quede obsoleta.
En la pestaña Detalles, copia la URL del extremo del feed del campo Información del extremo. Debes especificar esta URL de extremo en tu aplicación cliente.
Crea una clave de API para el feed del webhook
Ve a Google Cloud consola > Credenciales.
Haz clic en Crear credenciales y selecciona Clave de API.
Restringe el acceso a la clave de API a la API de Google Security Operations.
Especifica la URL del extremo
- En tu aplicación cliente, especifica la URL del extremo HTTPS que se proporciona en el feed de webhook.
Para habilitar la autenticación, especifica la clave de API y la clave secreta como parte del encabezado personalizado con el siguiente formato:
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Recomendación: Especifica la clave de API como un encabezado en lugar de hacerlo en la URL. Si tu cliente de webhook no admite encabezados personalizados, puedes especificar la clave de API y la clave secreta con parámetros de búsqueda en el siguiente formato:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Reemplaza lo siguiente:
ENDPOINT_URL
: Es la URL del extremo del feed.API_KEY
: Es la clave de API para autenticarse en Google Security Operations.SECRET
: Es la clave secreta que generaste para autenticar el feed.
Crea una aplicación lógica de Azure
- Accede al portal de Azure (https://portal.azure.com).
- Haz clic en Crear un recurso y busca Logic App.
- Haz clic en Crear para iniciar el proceso de implementación.
- Configura la aplicación lógica:
- Nombre: Proporciona un nombre descriptivo para la app lógica (por ejemplo, GoogleSecOpsWebhook).
- Suscripción: Selecciona la suscripción adecuada.
- Grupo de recursos: Elige un grupo de recursos existente o crea uno nuevo.
- Ubicación: Elige la ubicación más cercana a tu entorno.
- Log Analytics: Habilita esta opción si deseas registrar datos de diagnóstico para la aplicación lógica.
- Haz clic en Revisar y crear para crear la aplicación lógica.
- Haz clic en Crear para implementar la aplicación lógica.
Configura la conexión de webhook de Azure Logic App
- Ve a la aplicación lógica que creaste en el paso anterior.
- Haz clic en Herramientas de desarrollo > Diseñador de Logic App.
- Haz clic en Agregar un activador.
Busca Microsoft Defender for Cloud > Cuando se crea o activa una alerta de Microsoft Defender for Cloud como activador.
Haz clic en Crear nuevo y sigue las instrucciones para autenticarte.
Haz clic en Insertar un paso nuevo para agregar un paso nuevo al flujo de trabajo.
Haz clic en Agregar una acción.
Busca HTT.
Selecciona HTTP como la acción.
Configura la acción HTTP:
- URI: Aquí ingresarás la URL del extremo de API de Google SecOps.
- Método:
POST
- Agregar encabezado Content-Type: Establece
Content-Type
como clave de encabezado yapplication/json
como valor de encabezado. Esto le indica a Google SecOps el formato de los datos que se envían. - Add API Key to queries: Establece
key
como la primera clave de consulta y<API_KEY>
como el valor de la consulta.API_KEY
es el valor de la clave de API generada durante la configuración del feed de Google SecOps. - Add Secret Key to queries: Establece
secret
como la segunda clave de búsqueda y<SECRET_KEY>
como el valor de búsqueda.SECRET_KEY
es la clave secreta generada durante la configuración del feed de Google SecOps. - Set Body from previous step: Haz clic en Enter request content > haz clic en Enter the data from previous steps (botón con un ícono de rayo a la izquierda del campo de entrada).
Haz clic en Guardar.
Configura el webhook de alertas de Microsoft Defender for Cloud
- Ve a Microsoft Defender for Cloud.
- Haz clic en Administración > Automatización del flujo de trabajo.
- Haz clic en Agregar automatización de flujo de trabajo.
- Nombre: Proporciona un nombre descriptivo para la regla de automatización (por ejemplo, ForwardAlertsToGoogleSecOps).
- Grupo de recursos: Elige un grupo de recursos existente.
- Tipo de datos de Defender for Cloud: Elige Alerta de seguridad.
- Gravedad de la alerta: Elige Seleccionar todo.
- Show Logic App instances from the following subscriptions: Elige la suscripción en la que se creó la aplicación lógica.
- Select Logic App: Elige la aplicación lógica que creaste en los pasos anteriores.
- Haz clic en Crear para guardar la automatización del flujo de trabajo.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
AlertLink |
principal.resource.attribute.labels.AlertLink.value |
Se asigna directamente. |
AlertName |
security_result.rule_name |
Se asigna directamente. |
AlertSeverity |
security_result.severity |
Se asigna directamente si el valor es uno de HIGH, MEDIUM, LOW, CRITICAL o UNKNOWN_SEVERITY. De lo contrario, se asigna a security_result.severity_details . El valor se convierte a mayúsculas antes de la comparación. |
AlertType |
security_result.threat_name |
Se asigna directamente. |
CompromisedEntity |
principal.resource.attribute.labels.CompromisedEntity.value |
Se asigna directamente. |
Description |
security_result.description |
Se asigna directamente. |
DisplayName |
security_result.summary |
Se asigna directamente. |
EndTime |
about.resource.attribute.labels.EndTime.value |
Se asigna directamente. |
Entities[].Location.City |
principal.location.city |
Se asigna directamente. |
Entities[].Location.CountryName |
principal.location.country_or_region |
Se asigna directamente. |
ExtendedLinks[].Category |
about.resource.attribute.labels.extendedLink_Category.value |
Se asigna directamente. |
ExtendedLinks[].Href |
about.resource.attribute.labels.extendedLink_Href.value |
Se asigna directamente. |
ExtendedLinks[].Label |
about.resource.attribute.labels.extendedLink_Label.value |
Se asigna directamente. |
ExtendedLinks[].Type |
about.resource.attribute.labels.extendedLink_Type.value |
Se asigna directamente. |
ExtendedProperties.Account Session Id |
network.session_id |
Se asigna directamente después de cambiar el nombre a accountSessionId . |
ExtendedProperties.Alert Id |
metadata.product_log_id |
Se asigna directamente después de cambiar el nombre a alertId . |
ExtendedProperties.Authentication type |
extensions.auth.auth_details |
Se asigna directamente después de cambiar el nombre a authenticationType . |
ExtendedProperties.Client Application |
principal.application |
Se asigna directamente después de cambiar el nombre a clientApplication . |
ExtendedProperties.Client Hostname |
principal.asset.hostname , principal.hostname |
Se asigna directamente después de cambiar el nombre a clientHostName . |
ExtendedProperties.Client IP address |
principal.asset.ip , principal.ip |
Se asigna directamente después de cambiar el nombre a clientIpAddress . |
ExtendedProperties.Client IP location |
principal.location.country_or_region |
Se asigna directamente después de cambiar el nombre a clientIpLocation . |
ExtendedProperties.Client Location |
principal.location.country_or_region |
Se asigna directamente después de cambiar el nombre a clientLocation . |
ExtendedProperties.Client Principal Name |
principal.user.userid |
Se asigna directamente después de cambiar el nombre a clientPrincipalName . |
ExtendedProperties.Compromised Host |
principal.asset.hostname , principal.hostname |
Se asigna directamente después de cambiar el nombre a compromisedHost . |
ExtendedProperties.Suspicious Command Line |
target.process.command_line |
Se asigna directamente después de cambiar el nombre a suspiciousCommandLine . |
ExtendedProperties.Suspicious Process |
target.process.file.full_path |
Se asigna directamente después de cambiar el nombre a suspiciousProcess . |
ExtendedProperties.Suspicious Process Id |
target.process.pid |
Se asigna directamente después de cambiar el nombre a suspiciousProcessId . |
ExtendedProperties.User agent |
network.http.user_agent |
Se asigna directamente después de cambiar el nombre a userAgent . |
ExtendedProperties.User Name |
principal.user.user_display_name |
Se asigna directamente después de cambiar el nombre a userName . |
ExtendedProperties.resourceType |
principal.resource.name |
Se asigna directamente. |
IsIncident |
security_result.detection_fields.IsIncident.value |
Se asigna directamente. Se convirtió en una cadena. |
ProcessingEndTime |
about.resource.attribute.labels.ProcessingEndTime.value |
Se asigna directamente. |
ProductName |
metadata.product_name |
Se asigna directamente. |
ResourceId |
principal.resource.product_object_id |
Se asigna directamente. |
SourceSystem |
security_result.detection_fields.SourceSystem.value |
Se asigna directamente. |
StartTime |
about.resource.attribute.labels.StartTime.value |
Se asigna directamente. |
Status |
security_result.detection_fields.Status.value |
Se asigna directamente. |
SystemAlertId |
metadata.product_log_id |
Se asigna directamente. |
Tactics |
security_result.attack_details.tactics.name |
Se asigna directamente. |
TenantId |
additional.fields.TenantId.string_value |
Se asigna directamente. |
TimeGenerated |
about.resource.attribute.labels.TimeGenerated.value |
Se asigna directamente. |
VendorName |
metadata.vendor_name |
Se asigna directamente. |
WorkspaceResourceGroup |
target.resource.attribute.labels.WorkspaceResourceGroup.value |
Se asigna directamente. |
WorkspaceSubscriptionId |
target.resource.attribute.labels.WorkspaceSubscriptionId.value |
Se asigna directamente. |
_Internal_WorkspaceResourceId |
target.resource.product_object_id |
Se asigna directamente. |
properties.alertDisplayName |
security_result.rule_name |
Se asigna directamente. |
properties.alertType |
security_result.threat_name |
Se asigna directamente. |
properties.alertUri |
principal.resource.attribute.labels.AlertUri.value |
Se asigna directamente. |
properties.correlationKey |
principal.resource.attribute.labels.correlationKey.value |
Se asigna directamente. |
properties.description |
security_result.description |
Se asigna directamente. |
properties.endTimeUtc |
additional.fields.EndTime.string_value |
Se asigna directamente. |
properties.entities[].location.city |
principal.location.city |
Se asigna directamente. |
properties.entities[].location.countryName |
principal.location.country_or_region |
Se asigna directamente. |
properties.entities[].location.latitude |
principal.location.region_coordinates.latitude |
Se asigna directamente. Se convirtió a número de punto flotante. |
properties.entities[].location.longitude |
principal.location.region_coordinates.longitude |
Se asigna directamente. Se convirtió a número de punto flotante. |
properties.extendedProperties.alert_Id |
metadata.product_log_id |
Se asigna directamente. |
properties.extendedProperties.clientApplication |
principal.application |
Se asigna directamente. |
properties.extendedProperties.clientIpAddress |
principal.asset.ip , principal.ip |
Se asigna directamente. Se analiza como dirección IP. |
properties.extendedProperties.clientLocation |
principal.location.country_or_region |
Se asigna directamente. |
properties.extendedProperties.clientPrincipalName |
principal.user.userid |
Se asigna directamente. |
properties.extendedProperties.compromisedEntity |
principal.resource.attribute.labels.CompromisedEntity.value |
Se asigna directamente. |
properties.extendedProperties.resourceType |
principal.resource.name |
Se asigna directamente. |
properties.IsIncident |
security_result.detection_fields.isIncident.value |
Se asigna directamente. Se convirtió en una cadena. |
properties.productName |
metadata.product_name |
Se asigna directamente. |
properties.resourceIdentifiers[].<key> |
additional.fields.<key>_<index>.string_value |
Se asigna directamente. Las claves $id y type se agregan con el índice del elemento en el array. |
properties.severity |
security_result.severity |
Se asigna directamente si el valor es uno de HIGH, MEDIUM, LOW, CRITICAL o UNKNOWN_SEVERITY. De lo contrario, se asigna a security_result.severity_details . El valor se convierte a mayúsculas antes de la comparación. |
properties.startTimeUtc |
additional.fields.StartTime.string_value |
Se asigna directamente. |
properties.status |
security_result.detection_fields.Status.value |
Se asigna directamente. |
properties.timeGeneratedUtc |
additional.fields.TimeGenerated.string_value |
Se asigna directamente. Se establece en "MICROSOFT_DEFENDER_CLOUD_ALERTS" si no se proporciona en el registro. Se debe establecer en "MICROSOFT_DEFENDER_CLOUD_ALERTS". Se establece en "USER_RESOURCE_ACCESS" si están presentes la principal o el destino; de lo contrario, se establece en "GENERIC_EVENT". |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.